{"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-2ad387532e0cceb4", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/page.tsx:79", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/page.tsx:79"}, "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-0113956f1c7a7514", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/layout.tsx:208", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/layout.tsx:208"}, "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-eb65929637cb4e5b", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/materials/extract-quote/route.ts:384", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/materials/extract-quote/route.ts:384"}, "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-4cc9570478ee29a4", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/materials/suggest-price/route.ts:156", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/materials/suggest-price/route.ts:156"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dceb2e82c06f7cd0", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/quotes/generate/route.ts:661", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/quotes/generate/route.ts:661"}, "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-83ac87d70a5bed68", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/quotes/[id]/send/route.ts:196", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/quotes/[id]/send/route.ts:196"}, "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-de1f14ee5a908bc7", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/quotes/[id]/sms/route.ts:189", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/quotes/[id]/sms/route.ts:189"}, "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-626c18179a121e68", "name": "\"active\" state uses light bg in a dark theme \u2014 src/app/app/page.tsx:798", "shortDescription": {"text": "\"active\" state uses light bg in a dark theme \u2014 src/app/app/page.tsx:798"}, "fullDescription": {"text": "A ternary like `active ? 'bg-white' : '...'` (or bg-gray-100/200) on a dark theme produces jarring white pills. Use a dark-emphasized active state instead \u2014 border + ring or slightly brighter dark bg. Example: `active ? 'bg-gray-800 border-gray-500 ring-1 ring-blue-500/30' : '\u2026'`.\n\nWhy: P-E in CHECKLIST.md \u2014 light bg in a dark theme is a class of regression.\nRule id: fq.active-light-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-10054d2e6f043b03", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/settings/page.tsx:289", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/settings/page.tsx:289"}, "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-69f3af548c6bddc6", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/settings/guide/page.tsx:780", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/settings/guide/page.tsx:780"}, "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-ed8402fc1f96612c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/admin/_components/AdminDashboard.tsx:209", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/admin/_components/AdminDashboard.tsx:209"}, "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-9423449e0b148d72", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/agents/monitor/page.tsx:191", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/agents/monitor/page.tsx:191"}, "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-d104b1503d334e96", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/agents/monitor/_components/DiagnoseButton.tsx:116", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/agents/monitor/_components/DiagnoseButton.tsx:116"}, "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-37c5b543c2d5de52", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/app/agents/monitor/_components/DiagnoseButton.tsx:157", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/app/agents/monitor/_components/DiagnoseButton.tsx:157"}, "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-0fa23f5122f56c86", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/suppliers/_components/SupplierBrowser.tsx:255", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/suppliers/_components/SupplierBrowser.tsx:255"}, "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-c4e96e719e8df94c", "name": "Stray `console.log` in TS/JS \u2014 src/app/app/materials/actions.ts:388", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/app/materials/actions.ts:388"}, "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-818026995727635a", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/materials/import-quote/_components/QuoteImportClient.ts", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/materials/import-quote/_components/QuoteImportClient.tsx:534"}, "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-87742c3a1f224b09", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/materials/kits/_components/KitsManager.tsx:250", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/materials/kits/_components/KitsManager.tsx:250"}, "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-c4a05e72b3b00604", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/materials/_components/MaterialsList.tsx:72", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/materials/_components/MaterialsList.tsx:72"}, "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-94528ba17e6d5bd3", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/debug/_components/ExtractionMetricsPanel.tsx:70", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/debug/_components/ExtractionMetricsPanel.tsx:70"}, "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-ed49495d8ae50987", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/debug/_components/QuoteTracePanel.tsx:240", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/debug/_components/QuoteTracePanel.tsx:240"}, "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-74d8963a7e526027", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/_components/ScheduleCalendar.tsx:292", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/_components/ScheduleCalendar.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-300c1acf9933aa81", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/_components/SiteConditions.tsx:139", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/_components/SiteConditions.tsx:139"}, "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-fa83afbad5580d59", "name": "TODO/FIXME marker in shipping code \u2014 src/app/app/_components/account-hub-actions.ts:244", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/app/_components/account-hub-actions.ts:244"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3026758aaeb40c8f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/_components/QuotesListClient.tsx:232", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/_components/QuotesListClient.tsx:232"}, "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-6da591f40b2065f1", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/_components/AccountHub.tsx:224", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/_components/AccountHub.tsx:224"}, "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-a35cc6a7444e8ff9", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/_components/AppHeaderClient.tsx:140", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/_components/AppHeaderClient.tsx:140"}, "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-7c20d96d4a59dbbc", "name": "Stray `console.log` in TS/JS \u2014 src/app/app/quotes/preview/[id]/actions.ts:319", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/app/quotes/preview/[id]/actions.ts:319"}, "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-8a340dfff5faf36c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/quotes/preview/[id]/_components/PhotoPlanPanel.tsx:191", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/quotes/preview/[id]/_components/PhotoPlanPanel.tsx:191"}, "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-0b6473f7b74fa4d2", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/quotes/preview/[id]/_components/SuggestPricePanel.tsx:9", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/quotes/preview/[id]/_components/SuggestPricePanel.tsx:94"}, "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-9e09b72ec557b3bc", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/quotes/preview/[id]/_components/TakeoffPanel.tsx:124", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/quotes/preview/[id]/_components/TakeoffPanel.tsx:124"}, "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-b2b95a42fcea20f3", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/quotes/preview/[id]/_components/CompliancePanel.tsx:274", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/quotes/preview/[id]/_components/CompliancePanel.tsx:274"}, "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-4931baa14db88058", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/quotes/preview/[id]/_components/MobileCollapsibleCard.t", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/quotes/preview/[id]/_components/MobileCollapsibleCard.tsx:98"}, "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-e8db9fa2ff82e813", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/quotes/preview/[id]/_components/QuoteEditor.tsx:834", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/quotes/preview/[id]/_components/QuoteEditor.tsx:834"}, "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-4cb3b1333aaa0b8b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/invoices/_components/InvoiceList.tsx:199", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/invoices/_components/InvoiceList.tsx:199"}, "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-52aed4a210659ea8", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(legal)/support/page.tsx:76", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(legal)/support/page.tsx:76"}, "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-b7113483865de990", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/_components/landing/TapeDivider.tsx:33", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/_components/landing/TapeDivider.tsx:33"}, "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-aa6e5ab8d4b53742", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/_components/landing/LiveTicker.tsx:160", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/_components/landing/LiveTicker.tsx:160"}, "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-0cb4fc382e9797ff", "name": "Stray `console.log` in TS/JS \u2014 src/lib/materialMatchingPipeline.ts:230", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/materialMatchingPipeline.ts:230"}, "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-5303e0adae15f3a5", "name": "Stray `console.log` in TS/JS \u2014 src/lib/weather-planning/assess.ts:109", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/weather-planning/assess.ts:109"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-91aeb85315be39e3", "name": "Stray `console.log` in TS/JS \u2014 src/lib/planreader/observability.ts:38", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/planreader/observability.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-57f9aa65c7d0285d", "name": "Stray `console.log` in TS/JS \u2014 src/eval/plan-reader-eval.test.ts:206", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/eval/plan-reader-eval.test.ts:206"}, "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-c9751353d5c769fb", "name": "Stray `console.log` in TS/JS \u2014 src/eval/scan-eval.test.ts:210", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/eval/scan-eval.test.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-782e1afc576d992b", "name": "Stray `console.log` in TS/JS \u2014 src/eval/quote-eval.test.ts:107", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/eval/quote-eval.test.ts:107"}, "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-426150bccae958e1", "name": "Stray `console.log` in TS/JS \u2014 src/eval/quote-agent-eval.test.ts:152", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/eval/quote-agent-eval.test.ts:152"}, "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-4e7fce71cd181c65", "name": "Stray `console.log` in TS/JS \u2014 src/eval/corrections-eval.test.ts:83", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/eval/corrections-eval.test.ts:83"}, "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-f58eae6274c6877e", "name": "Insecure pattern 'node_child_process' in scripts/scan-secrets.mjs:31", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/scan-secrets.mjs:31"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8899e0d110962d6d", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/page.tsx:79", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/page.tsx:79"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c5499e06ead8a355", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/layout.tsx:208", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/layout.tsx:208"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-77aae7354fec102e", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/app/agents/monitor/_components/DiagnoseButton.tsx:157", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/app/agents/monitor/_components/DiagnoseButton.tsx:157"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-57e3fa2384a7e2be", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/app/_components/landing/AppShowcase.tsx:376", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/app/_components/landing/AppShowcase.tsx:376"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4619d9415141bcca", "name": "Very large file: src/app/app/quotes/preview/[id]/_components/QuoteEditor.tsx (1806 lines)", "shortDescription": {"text": "Very large file: src/app/app/quotes/preview/[id]/_components/QuoteEditor.tsx (1806 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-561579e012545d6f", "name": "Very large file: src/lib/supabase/database.types.ts (1788 lines)", "shortDescription": {"text": "Very large file: src/lib/supabase/database.types.ts (1788 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-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 24 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 137 placeholder/mock markers across 48 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9d79c4077342a7d0", "name": "Runtime service client appears to use placeholder configuration", "shortDescription": {"text": "Runtime service client appears to use placeholder configuration"}, "fullDescription": {"text": "A runtime source file appears to wire Supabase/Firebase/AI/payment-style clients to placeholder URLs, keys, or fallback values. In the Fable corpus this often means the UI/API shape is present while the backend service is not actually configured."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-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-2c5f98b152cddb6d", "name": "Agent authority lacks a verifier contract: .claude/launch.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/launch.json"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e725d2ab884fbd49", "name": "Multiple root agent instruction files without precedence", "shortDescription": {"text": "Multiple root agent instruction files without precedence"}, "fullDescription": {"text": "The repo has multiple top-level AI-coder instruction files. Without precedence rules, different agents may follow different policies."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-84c5fc9e8e56fdd8", "name": "Commented-code block (5 lines) in instrumentation-client.ts:43", "shortDescription": {"text": "Commented-code block (5 lines) in instrumentation-client.ts:43"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-be8e1d658cdd8586", "name": "Commented-code block (10 lines) in next.config.ts:15", "shortDescription": {"text": "Commented-code block (10 lines) in next.config.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-a1498245f3208b4e", "name": "Commented-code block (5 lines) in scripts/import-material-reference-library.ts:38", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/import-material-reference-library.ts:38"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1a2212cee927fd21", "name": "Commented-code block (6 lines) in scripts/seed-stage-4-materials.ts:57", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/seed-stage-4-materials.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-71e34998ab6ed97c", "name": "Commented-code block (6 lines) in src/proxy.ts:10", "shortDescription": {"text": "Commented-code block (6 lines) in src/proxy.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-67e31cc354d9f1eb", "name": "Commented-code block (8 lines) in src/app/manifest.ts:60", "shortDescription": {"text": "Commented-code block (8 lines) in src/app/manifest.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-1b6b7fe03c397005", "name": "Commented-code block (6 lines) in src/app/layout.tsx:55", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/layout.tsx: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-a1152ff6c6b3fc4d", "name": "Commented-code block (7 lines) in src/app/quote/[token]/_components/CustomerChat.tsx:336", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/quote/[token]/_components/CustomerChat.tsx:336"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e15ae873961540d7", "name": "Commented-code block (5 lines) in src/app/api/quote/[token]/chat/route.ts:203", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/quote/[token]/chat/route.ts:203"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e00633b494fe59c0", "name": "Commented-code block (5 lines) in src/app/api/materials/suggest-price/route.ts:122", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/materials/suggest-price/route.ts:122"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fa57254b408b4355", "name": "Commented-code block (5 lines) in src/app/api/stripe/checkout/route.ts:69", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/stripe/checkout/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-2defeed408f5ac5f", "name": "Commented-code block (11 lines) in src/app/api/quotes/generate/route.ts:123", "shortDescription": {"text": "Commented-code block (11 lines) in src/app/api/quotes/generate/route.ts:123"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f492fccf456ad125", "name": "Commented-code block (6 lines) in src/app/api/quotes/scan-drawing/route.ts:26", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/quotes/scan-drawing/route.ts:26"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a4524383e4ac1b05", "name": "Commented-code block (5 lines) in src/app/api/quotes/[id]/send/route.ts:66", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/quotes/[id]/send/route.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-6b9a3a335297703d", "name": "Commented-code block (6 lines) in src/app/api/quotes/transcribe/route.ts:23", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/quotes/transcribe/route.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-de16179f79582b63", "name": "Commented-code block (6 lines) in src/app/api/quotes/cleanup/route.ts:98", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/quotes/cleanup/route.ts: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-8edaaad18b861c79", "name": "Commented-code block (10 lines) in src/app/app/page.tsx:54", "shortDescription": {"text": "Commented-code block (10 lines) in src/app/app/page.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-6ca5d44cca36a91b", "name": "Commented-code block (5 lines) in src/app/app/weather/_components/WeatherImpactClient.tsx:31", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/app/weather/_components/WeatherImpactClient.tsx:31"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-aac98e4b889146c3", "name": "Commented-code block (6 lines) in src/app/app/suppliers/_components/SupplierBrowser.tsx:87", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/app/suppliers/_components/SupplierBrowser.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-04d3819bb5260bcd", "name": "Commented-code block (7 lines) in src/app/app/materials/actions.ts:401", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/app/materials/actions.ts:401"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d89338ad2021ec6a", "name": "Commented-code block (6 lines) in src/app/app/materials/page.tsx:21", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/app/materials/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-b6c9af6212bbc075", "name": "Commented-code block (5 lines) in src/app/app/_components/SiteConditions.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/app/_components/SiteConditions.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-822ed1757ed9e348", "name": "Commented-code block (5 lines) in src/app/app/_components/OnboardingTour.tsx:197", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/app/_components/OnboardingTour.tsx:197"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e8580cabd6ff6f94", "name": "Commented-code block (5 lines) in src/app/app/_components/MobileAppMenuClient.tsx:80", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/app/_components/MobileAppMenuClient.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-7fd4ab645c04c189", "name": "Commented-code block (7 lines) in src/app/app/_components/AccountHub.tsx:199", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/app/_components/AccountHub.tsx:199"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9a601f479ace1f25", "name": "Commented-code block (6 lines) in src/app/app/_components/PushToggle.tsx:10", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/app/_components/PushToggle.tsx: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-20a7362b30feb984", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/app/_components/PushToggle.tsx:93", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/app/_components/PushToggle.tsx:93"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-538284f0dd84c2a7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/app/_components/agents/PhotoPlanAgent.tsx:115", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/app/_components/agents/PhotoPlanAgent.tsx:115"}, "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-a307fa9cd3e5be0f", "name": "Commented-code block (5 lines) in src/app/app/quotes/new/_components/ScanPanel.tsx:81", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/app/quotes/new/_components/ScanPanel.tsx: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-b73f9cf695c6e7ad", "name": "Commented-code block (5 lines) in src/app/app/quotes/preview/[id]/actions.ts:193", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/app/quotes/preview/[id]/actions.ts:193"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-49d36af0225afb9f", "name": "Commented-code block (5 lines) in src/app/app/quotes/preview/[id]/page.tsx:73", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/app/quotes/preview/[id]/page.tsx:73"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d5b495df881760b3", "name": "Commented-code block (5 lines) in src/app/app/quotes/preview/[id]/_components/SendQuoteButton.tsx:168", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/app/quotes/preview/[id]/_components/SendQuoteButton.tsx:168"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6742da2596f4aa69", "name": "Commented-code block (7 lines) in src/app/app/quotes/preview/[id]/_components/ReviewToolsSheet.tsx:56", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/app/quotes/preview/[id]/_components/ReviewToolsSheet.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-92f0ea8c90beb351", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/app/quotes/preview/[id]/_components/PhotoPlanPanel.tsx:138", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/app/quotes/preview/[id]/_components/PhotoPlanPanel.tsx:138"}, "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-c5f6730d0a322194", "name": "Commented-code block (5 lines) in src/app/app/quotes/preview/[id]/_components/LifecycleCard.tsx:82", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/app/quotes/preview/[id]/_components/LifecycleCard.tsx: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-380ac4d56e90714b", "name": "Commented-code block (5 lines) in src/app/app/quotes/preview/[id]/_components/QuoteEditor.tsx:142", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/app/quotes/preview/[id]/_components/QuoteEditor.tsx:142"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-19360b7fff458018", "name": "Commented-code block (7 lines) in src/app/(auth)/signup/actions.ts:20", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/(auth)/signup/actions.ts:20"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-99ef275fded69733", "name": "Commented-code block (5 lines) in src/app/_components/InstallAppButton.tsx:46", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/_components/InstallAppButton.tsx: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-0622b13a15c9b6c6", "name": "Commented-code block (14 lines) in src/app/_components/FloatingInstallButton.tsx:50", "shortDescription": {"text": "Commented-code block (14 lines) in src/app/_components/FloatingInstallButton.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-4abf3c57b74194c3", "name": "Commented-code block (6 lines) in src/app/_components/landing/LoadingScreen.tsx:65", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/_components/landing/LoadingScreen.tsx:65"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ffd3eb291f24d4a7", "name": "Commented-code block (5 lines) in src/app/_components/landing/LiveTicker.tsx:117", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/_components/landing/LiveTicker.tsx:117"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d10839db94af6829", "name": "Commented-code block (5 lines) in src/app/_components/landing/FounderStory.tsx:8", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/_components/landing/FounderStory.tsx: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-de9bb52b9b79f291", "name": "Commented-code block (8 lines) in src/app/_components/landing/AppShowcase.tsx:23", "shortDescription": {"text": "Commented-code block (8 lines) in src/app/_components/landing/AppShowcase.tsx:23"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-21030d61865f5728", "name": "Commented-code block (12 lines) in src/app/_components/landing/Hero.tsx:19", "shortDescription": {"text": "Commented-code block (12 lines) in src/app/_components/landing/Hero.tsx: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-4cb6978f236c8a24", "name": "Commented-code block (8 lines) in src/app/_components/landing/Header.tsx:10", "shortDescription": {"text": "Commented-code block (8 lines) in src/app/_components/landing/Header.tsx: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-2961cfb6e0f00e05", "name": "Commented-code block (8 lines) in src/lib/reviewGuard.test.ts:4", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/reviewGuard.test.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fef1865ec0bf73e9", "name": "Commented-code block (5 lines) in src/lib/materialMatcher.ts:73", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/materialMatcher.ts:73"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1de9fea8c76d2a2f", "name": "Commented-code block (9 lines) in src/lib/quote-validation.ts:252", "shortDescription": {"text": "Commented-code block (9 lines) in src/lib/quote-validation.ts:252"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1c6e92380d6b8879", "name": "Commented-code block (7 lines) in src/lib/transcriptCleanup.ts:187", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/transcriptCleanup.ts:187"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-aeed02c1e0b6f8e6", "name": "Commented-code block (7 lines) in src/lib/materialCalculator.test.ts:288", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/materialCalculator.test.ts:288"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-370fed8967a8a1a6", "name": "Commented-code block (5 lines) in src/lib/aiTakeoffParser.test.ts:159", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/aiTakeoffParser.test.ts:159"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-93a92861c9094cd8", "name": "Commented-code block (5 lines) in src/lib/materialMatchingPipeline.ts:121", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/materialMatchingPipeline.ts: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-167caab42c730645", "name": "Commented-code block (5 lines) in src/lib/subscription.ts:70", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/subscription.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-1f8864ec950358ea", "name": "Commented-code block (13 lines) in src/lib/dimensionConfirmation.test.ts:21", "shortDescription": {"text": "Commented-code block (13 lines) in src/lib/dimensionConfirmation.test.ts: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-824e8bd964922dbf", "name": "Commented-code block (5 lines) in src/lib/quote-validation.test.ts:302", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/quote-validation.test.ts:302"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-40dc766a73d06f8d", "name": "Commented-code block (6 lines) in src/lib/scanClassify.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/scanClassify.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dab11f723009e5c2", "name": "Commented-code block (7 lines) in src/lib/materialCalculator.ts:248", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/materialCalculator.ts:248"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3e5e14c3a35c20b1", "name": "Commented-code block (5 lines) in src/lib/quote-defaults.ts:61", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/quote-defaults.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-1f9ba88b2078b2db", "name": "Commented-code block (10 lines) in src/lib/aiTakeoffParser.ts:68", "shortDescription": {"text": "Commented-code block (10 lines) in src/lib/aiTakeoffParser.ts:68"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c537d56a95d62ea8", "name": "Commented-code block (6 lines) in src/lib/quote-validation.integrity.test.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/quote-validation.integrity.test.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a5b8fbf6e50ef5c6", "name": "Commented-code block (13 lines) in src/lib/reviewGuard.ts:7", "shortDescription": {"text": "Commented-code block (13 lines) in src/lib/reviewGuard.ts:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-16d4b903ee4723f6", "name": "Commented-code block (8 lines) in src/lib/scanImage.ts:3", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/scanImage.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-1e9cf4b843cd5f2f", "name": "Commented-code block (6 lines) in src/lib/dimensionConfirmation.ts:13", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/dimensionConfirmation.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-3e8897894b150799", "name": "Commented-code block (5 lines) in src/lib/quote-types.ts:16", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/quote-types.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-357af7c548e4186f", "name": "Commented-code block (5 lines) in src/lib/agent-monitor/__tests__/logger.test.ts:156", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/agent-monitor/__tests__/logger.test.ts:156"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a951256f57ffb035", "name": "Commented-code block (6 lines) in src/lib/takeoff/legacyCoverage.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/takeoff/legacyCoverage.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-e6a494bce6948a11", "name": "Commented-code block (5 lines) in src/lib/takeoff/scope-router.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/takeoff/scope-router.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e01e79f1053e08e2", "name": "Commented-code block (6 lines) in src/lib/takeoff/schemas.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/takeoff/schemas.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8241b7faeb6c3fca", "name": "Commented-code block (5 lines) in src/lib/takeoff/foundationReviewModel.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/takeoff/foundationReviewModel.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2dbd551134daa95d", "name": "Commented-code block (7 lines) in src/lib/takeoff/blockedLineGuide.ts:4", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/takeoff/blockedLineGuide.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-76333f840f6b4c07", "name": "Commented-code block (7 lines) in src/lib/takeoff/evaluate.ts:8", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/takeoff/evaluate.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-ce6acb5884f16b6c", "name": "Commented-code block (8 lines) in src/lib/takeoff/orchestrator.ts:6", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/takeoff/orchestrator.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-932a8de0b0b4f441", "name": "Commented-code block (6 lines) in src/lib/takeoff/foundationCalculator.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/takeoff/foundationCalculator.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0d11d2e33914e1c2", "name": "Commented-code block (7 lines) in src/lib/takeoff/explain.ts:4", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/takeoff/explain.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7b40f52306599ce5", "name": "Commented-code block (10 lines) in src/lib/takeoff/license.ts:7", "shortDescription": {"text": "Commented-code block (10 lines) in src/lib/takeoff/license.ts:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0bdbf5e214720f94", "name": "Commented-code block (5 lines) in src/lib/takeoff/extraction.ts:11", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/takeoff/extraction.ts:11"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ce74f4f43d5aed6b", "name": "Commented-code block (7 lines) in src/lib/takeoff/scopeFamily.ts:4", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/takeoff/scopeFamily.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4a6662ee05864e43", "name": "Commented-code block (6 lines) in src/lib/takeoff/foundationAdapter.ts:14", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/takeoff/foundationAdapter.ts:14"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8ac5ece74d281fc4", "name": "Commented-code block (9 lines) in src/lib/takeoff/validate.ts:8", "shortDescription": {"text": "Commented-code block (9 lines) in src/lib/takeoff/validate.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-5ab62b36e58819a0", "name": "Commented-code block (5 lines) in src/lib/takeoff/geometry.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/takeoff/geometry.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-67b098cdff32ea84", "name": "Commented-code block (5 lines) in src/lib/takeoff/__tests__/foundationAdapter.contract.test.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/takeoff/__tests__/foundationAdapter.contract.test.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-72615074ebca0601", "name": "Commented-code block (6 lines) in src/lib/takeoff/__tests__/floor-plan-wall-run.test.ts:17", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/takeoff/__tests__/floor-plan-wall-run.test.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-bac19ac0f7d19ca0", "name": "Commented-code block (8 lines) in src/lib/takeoff/__tests__/geometry-chain.test.ts:8", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/takeoff/__tests__/geometry-chain.test.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-883592253078cb11", "name": "Commented-code block (5 lines) in src/lib/takeoff/__tests__/golden/cases.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/takeoff/__tests__/golden/cases.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d7582907e7765222", "name": "Commented-code block (5 lines) in src/lib/takeoff/calculators/lining.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/takeoff/calculators/lining.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-436c7f2f7cb20060", "name": "Commented-code block (6 lines) in src/lib/takeoff/calculators/generic.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/takeoff/calculators/generic.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cccdd81f8aa08941", "name": "Commented-code block (7 lines) in src/lib/takeoff/calculators/roofing.ts:4", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/takeoff/calculators/roofing.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-663c1cca5521071e", "name": "Commented-code block (5 lines) in src/lib/takeoff/calculators/concrete.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/takeoff/calculators/concrete.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a0fe7b96b084b871", "name": "Commented-code block (10 lines) in src/lib/takeoff/calculators/insulation.ts:8", "shortDescription": {"text": "Commented-code block (10 lines) in src/lib/takeoff/calculators/insulation.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-4124bcd64689f463", "name": "Commented-code block (11 lines) in src/lib/takeoff/csi/map.ts:4", "shortDescription": {"text": "Commented-code block (11 lines) in src/lib/takeoff/csi/map.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dac588998b87582a", "name": "Commented-code block (11 lines) in src/lib/takeoff/csi/contracts.ts:9", "shortDescription": {"text": "Commented-code block (11 lines) in src/lib/takeoff/csi/contracts.ts:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-437b13a5e09f2975", "name": "Commented-code block (7 lines) in src/lib/takeoff/csi/eval.ts:8", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/takeoff/csi/eval.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-e652362d19b0f611", "name": "Commented-code block (9 lines) in src/lib/takeoff/bridge/confirmation.ts:9", "shortDescription": {"text": "Commented-code block (9 lines) in src/lib/takeoff/bridge/confirmation.ts:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-27f62707cdd449ac", "name": "Commented-code block (5 lines) in src/lib/takeoff/bridge/sheetToExtraction.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/takeoff/bridge/sheetToExtraction.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f20c0161567965ea", "name": "Commented-code block (6 lines) in src/lib/takeoff/bridge/pipeline.e2e.test.ts:6", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/takeoff/bridge/pipeline.e2e.test.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-1e1c5ce2175c1c73", "name": "Commented-code block (5 lines) in src/lib/takeoff/bridge/roleTagger.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/takeoff/bridge/roleTagger.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c601c10778ab5eb8", "name": "Commented-code block (9 lines) in src/lib/takeoff/bridge/sheetAdapter.ts:4", "shortDescription": {"text": "Commented-code block (9 lines) in src/lib/takeoff/bridge/sheetAdapter.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0051ebf804cb5db9", "name": "Commented-code block (5 lines) in src/lib/tradieBrain/rank.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/tradieBrain/rank.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5590c1160b6ad91b", "name": "Commented-code block (6 lines) in src/lib/tradieBrain/store.ts:9", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/tradieBrain/store.ts:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-71ad3b2dfe9f8f0e", "name": "Commented-code block (7 lines) in src/lib/tradieBrain/index.ts:4", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/tradieBrain/index.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6fc70ed7913b189d", "name": "Commented-code block (5 lines) in src/lib/tradieBrain/derive.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/tradieBrain/derive.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-334957436cc4b0c9", "name": "Commented-code block (6 lines) in src/lib/tradieBrain/retrieve.ts:10", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/tradieBrain/retrieve.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-2c072f698fb7469e", "name": "Commented-code block (5 lines) in src/lib/tradieBrain/normalize.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/tradieBrain/normalize.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4dba6f31dcea7f3b", "name": "Commented-code block (7 lines) in src/lib/observability/fingerprint.ts:9", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/observability/fingerprint.ts:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2540610356ee6c51", "name": "Commented-code block (5 lines) in src/lib/observability/sink.ts:8", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/observability/sink.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-f966efeacdaadf6d", "name": "Commented-code block (8 lines) in src/lib/observability/clientErrors.ts:9", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/observability/clientErrors.ts:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a92df8270f81226a", "name": "Commented-code block (5 lines) in src/lib/compliance/types.ts:34", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/compliance/types.ts:34"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6a84d5f2895ed3d6", "name": "Commented-code block (5 lines) in src/lib/compliance/pipeline.test.ts:60", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/compliance/pipeline.test.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-a5211bcb2858ed61", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/admin/connectors.ts:102", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/admin/connectors.ts:102"}, "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-da9749ea28f3d245", "name": "Commented-code block (5 lines) in src/lib/digest/evalSeeds.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/digest/evalSeeds.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-acfef0dfa697a6ac", "name": "Commented-code block (6 lines) in src/lib/digest/collect.ts:13", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/digest/collect.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-968d6291e85fc705", "name": "Commented-code block (11 lines) in src/lib/agents/runtime.ts:4", "shortDescription": {"text": "Commented-code block (11 lines) in src/lib/agents/runtime.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f873e7adaf5c66ff", "name": "Commented-code block (7 lines) in src/lib/agents/openai-runtime.ts:4", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/agents/openai-runtime.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b6d2ce22b83983ef", "name": "Commented-code block (6 lines) in src/lib/agents/pat.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/agents/pat.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-124e2fb4f0f27a8f", "name": "Commented-code block (6 lines) in src/lib/agents/willa.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/agents/willa.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5e7f590fea73225e", "name": "Commented-code block (6 lines) in src/lib/agents/suggestPrice/parse.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/agents/suggestPrice/parse.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-93a02bcc6a853c37", "name": "Commented-code block (6 lines) in src/lib/agents/suggestPrice/apply.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/agents/suggestPrice/apply.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c87a7b15cbf3907a", "name": "Commented-code block (6 lines) in src/lib/agents/suggestPrice/evidence.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/agents/suggestPrice/evidence.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-38bdebd449956bdc", "name": "Commented-code block (6 lines) in src/lib/agents/suggestPrice/types.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/agents/suggestPrice/types.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-975d07601169abfc", "name": "Commented-code block (9 lines) in src/lib/agents/verify/quoteVerify.ts:5", "shortDescription": {"text": "Commented-code block (9 lines) in src/lib/agents/verify/quoteVerify.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d828135d24bc99af", "name": "Commented-code block (5 lines) in src/lib/weather-planning/provider.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/weather-planning/provider.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ff985c08440bbf65", "name": "Commented-code block (7 lines) in src/lib/weather-planning/rules.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/weather-planning/rules.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e1dafba223571dc3", "name": "Commented-code block (6 lines) in src/lib/weather-planning/job-type.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/weather-planning/job-type.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0790f459fce757b1", "name": "Commented-code block (6 lines) in src/lib/weather-planning/assess.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/weather-planning/assess.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c23629620ddb5096", "name": "Commented-code block (5 lines) in src/lib/weather-planning/risk-engine.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/weather-planning/risk-engine.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-db7de9c7f6744c82", "name": "Commented-code block (5 lines) in src/lib/weather-planning/freshness.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/weather-planning/freshness.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fba3489ba4e1935f", "name": "Commented-code block (5 lines) in src/lib/weather-planning/flag.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/weather-planning/flag.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b4e789fa96411159", "name": "Commented-code block (7 lines) in src/lib/weather-planning/geocode.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/weather-planning/geocode.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-705c9aca292cf669", "name": "Commented-code block (6 lines) in src/lib/hooks/useBodyScrollLock.test.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/hooks/useBodyScrollLock.test.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7dbdef35fefba82c", "name": "Commented-code block (8 lines) in src/lib/hooks/useBodyScrollLock.ts:6", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/hooks/useBodyScrollLock.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-689eb6081668372e", "name": "Commented-code block (6 lines) in src/lib/shell/mobile-shell-contract.test.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/shell/mobile-shell-contract.test.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-77ad36e211f9f1e7", "name": "Commented-code block (7 lines) in src/lib/materials/extractionMetrics.ts:4", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/materials/extractionMetrics.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-58b1d60884a759b3", "name": "Commented-code block (6 lines) in src/lib/materials/estimateToQuote.ts:9", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/materials/estimateToQuote.ts:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e48ecf48bbfc82e9", "name": "Commented-code block (7 lines) in src/lib/materials/supplier-fixtures.test.ts:26", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/materials/supplier-fixtures.test.ts:26"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-37a8f656a7936bac", "name": "Commented-code block (7 lines) in src/lib/materials/extractionQueue.ts:4", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/materials/extractionQueue.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4232ead348d6c9c6", "name": "Commented-code block (6 lines) in src/lib/materials/quoteExtraction.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/materials/quoteExtraction.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f92d824e00c823e2", "name": "Commented-code block (6 lines) in src/lib/materials/quoteValidation.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/materials/quoteValidation.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7e1245dcb376eed0", "name": "Commented-code block (5 lines) in src/lib/transcript/measureNormalize.test.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/transcript/measureNormalize.test.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-728c51da347cd821", "name": "Commented-code block (6 lines) in src/lib/transcript/glossaryCorrect.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/transcript/glossaryCorrect.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-09af0618aec2e024", "name": "Commented-code block (5 lines) in src/lib/transcript/glossary.ts:65", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/transcript/glossary.ts:65"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e6e0fa197430b9b2", "name": "Commented-code block (5 lines) in src/lib/transcript/debugView.ts:8", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/transcript/debugView.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-b32cd230410fe7f0", "name": "Commented-code block (11 lines) in src/lib/transcript/regression-tradie-speech.test.ts:4", "shortDescription": {"text": "Commented-code block (11 lines) in src/lib/transcript/regression-tradie-speech.test.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-36ef71acaf6963ee", "name": "Commented-code block (5 lines) in src/lib/transcript/measureNormalize.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/transcript/measureNormalize.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-238f2d1146c8e427", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/weather-impact/open-meteo.ts:83", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/weather-impact/open-meteo.ts:83"}, "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-e88a0f8102443d32", "name": "Commented-code block (6 lines) in src/lib/planreader/observability.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/planreader/observability.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-966faaa192060b67", "name": "Commented-code block (5 lines) in src/lib/planreader/schema.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/planreader/schema.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-34bc027f760014b4", "name": "Commented-code block (5 lines) in src/lib/planreader/storage.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/planreader/storage.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-08be09facc0743e6", "name": "Commented-code block (5 lines) in src/lib/planreader/ingest.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/planreader/ingest.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cf53377602b2b537", "name": "Commented-code block (5 lines) in src/lib/planreader/titleBlock.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/planreader/titleBlock.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9f6141219556ce68", "name": "Commented-code block (10 lines) in src/lib/planreader/gates.ts:9", "shortDescription": {"text": "Commented-code block (10 lines) in src/lib/planreader/gates.ts:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-30ce3845f45c1947", "name": "Commented-code block (6 lines) in src/lib/planreader/scale.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/planreader/scale.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-79983b8f66cd33c8", "name": "Commented-code block (9 lines) in src/lib/planreader/extract.ts:8", "shortDescription": {"text": "Commented-code block (9 lines) in src/lib/planreader/extract.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-4db4f2e01b13c272", "name": "Commented-code block (6 lines) in src/eval/plan-reader-cases.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in src/eval/plan-reader-cases.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1d85d3ff291f99bf", "name": "Commented-code block (5 lines) in src/eval/csi-mapper-cases.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in src/eval/csi-mapper-cases.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-877b1b9601c08793", "name": "Commented-code block (5 lines) in src/eval/scan-cases.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in src/eval/scan-cases.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-55111280dc9fc35c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/eval/scan-eval.test.ts:96", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/eval/scan-eval.test.ts:96"}, "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-853014a064b3b584", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/eval/quote-eval.test.ts:61", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/eval/quote-eval.test.ts:61"}, "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/20383"}, "properties": {"repository": "str8builders/tradies2quote", "repoUrl": "https://github.com/str8builders/tradies2quote", "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-2ad387532e0cceb4", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/page.tsx:79"}, "properties": {"repobilityId": "4d4ab3e03315f684", "scanner": "scanner-primary", "fingerprint": "2ad387532e0cceb4", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-0113956f1c7a7514", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/layout.tsx:208"}, "properties": {"repobilityId": "0d72350965068f5b", "scanner": "scanner-primary", "fingerprint": "0113956f1c7a7514", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-eb65929637cb4e5b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/materials/extract-quote/route.ts:384"}, "properties": {"repobilityId": "382f247ab6ddd7bc", "scanner": "scanner-primary", "fingerprint": "eb65929637cb4e5b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4cc9570478ee29a4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/materials/suggest-price/route.ts:156"}, "properties": {"repobilityId": "d7ebeaaef3becadc", "scanner": "scanner-primary", "fingerprint": "4cc9570478ee29a4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-dceb2e82c06f7cd0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/quotes/generate/route.ts:661"}, "properties": {"repobilityId": "e9dec2054a075cd6", "scanner": "scanner-primary", "fingerprint": "dceb2e82c06f7cd0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-83ac87d70a5bed68", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/quotes/[id]/send/route.ts:196"}, "properties": {"repobilityId": "bab089aeceaadc23", "scanner": "scanner-primary", "fingerprint": "83ac87d70a5bed68", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-de1f14ee5a908bc7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/quotes/[id]/sms/route.ts:189"}, "properties": {"repobilityId": "2375b91d0a0b262c", "scanner": "scanner-primary", "fingerprint": "de1f14ee5a908bc7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-626c18179a121e68", "level": "note", "message": {"text": "\"active\" state uses light bg in a dark theme \u2014 src/app/app/page.tsx:798"}, "properties": {"repobilityId": "99c805e487358e53", "scanner": "scanner-primary", "fingerprint": "626c18179a121e68", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.active-light-bg"]}}, {"ruleId": "scanner-10054d2e6f043b03", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/settings/page.tsx:289"}, "properties": {"repobilityId": "a774f14a9b888f34", "scanner": "scanner-primary", "fingerprint": "10054d2e6f043b03", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-69f3af548c6bddc6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/settings/guide/page.tsx:780"}, "properties": {"repobilityId": "d4d353aecae7274c", "scanner": "scanner-primary", "fingerprint": "69f3af548c6bddc6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ed8402fc1f96612c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/admin/_components/AdminDashboard.tsx:209"}, "properties": {"repobilityId": "a85509cf42c5bc51", "scanner": "scanner-primary", "fingerprint": "ed8402fc1f96612c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9423449e0b148d72", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/agents/monitor/page.tsx:191"}, "properties": {"repobilityId": "f2a6ef91acf85177", "scanner": "scanner-primary", "fingerprint": "9423449e0b148d72", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d104b1503d334e96", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/agents/monitor/_components/DiagnoseButton.tsx:116"}, "properties": {"repobilityId": "843cdacd89851b8e", "scanner": "scanner-primary", "fingerprint": "d104b1503d334e96", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-37c5b543c2d5de52", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/app/agents/monitor/_components/DiagnoseButton.tsx:157"}, "properties": {"repobilityId": "67bb841ae0c14ec5", "scanner": "scanner-primary", "fingerprint": "37c5b543c2d5de52", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-0fa23f5122f56c86", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/suppliers/_components/SupplierBrowser.tsx:255"}, "properties": {"repobilityId": "00e63b76cd7b0bec", "scanner": "scanner-primary", "fingerprint": "0fa23f5122f56c86", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c4e96e719e8df94c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/app/materials/actions.ts:388"}, "properties": {"repobilityId": "b50d439ae5041a46", "scanner": "scanner-primary", "fingerprint": "c4e96e719e8df94c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-818026995727635a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/materials/import-quote/_components/QuoteImportClient.tsx:534"}, "properties": {"repobilityId": "38e707a683e9d008", "scanner": "scanner-primary", "fingerprint": "818026995727635a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-87742c3a1f224b09", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/materials/kits/_components/KitsManager.tsx:250"}, "properties": {"repobilityId": "53946c8c5f027ab1", "scanner": "scanner-primary", "fingerprint": "87742c3a1f224b09", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c4a05e72b3b00604", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/materials/_components/MaterialsList.tsx:72"}, "properties": {"repobilityId": "ef22a42b1ec566a6", "scanner": "scanner-primary", "fingerprint": "c4a05e72b3b00604", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-94528ba17e6d5bd3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/debug/_components/ExtractionMetricsPanel.tsx:70"}, "properties": {"repobilityId": "9188abd4e344cc4b", "scanner": "scanner-primary", "fingerprint": "94528ba17e6d5bd3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ed49495d8ae50987", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/debug/_components/QuoteTracePanel.tsx:240"}, "properties": {"repobilityId": "298d57ccad4d4431", "scanner": "scanner-primary", "fingerprint": "ed49495d8ae50987", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-74d8963a7e526027", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/_components/ScheduleCalendar.tsx:292"}, "properties": {"repobilityId": "fe324f5c67941813", "scanner": "scanner-primary", "fingerprint": "74d8963a7e526027", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-300c1acf9933aa81", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/_components/SiteConditions.tsx:139"}, "properties": {"repobilityId": "65de570d30137734", "scanner": "scanner-primary", "fingerprint": "300c1acf9933aa81", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fa83afbad5580d59", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/app/_components/account-hub-actions.ts:244"}, "properties": {"repobilityId": "9dfe78de4c51af63", "scanner": "scanner-primary", "fingerprint": "fa83afbad5580d59", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-3026758aaeb40c8f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/_components/QuotesListClient.tsx:232"}, "properties": {"repobilityId": "5f5b301a922db173", "scanner": "scanner-primary", "fingerprint": "3026758aaeb40c8f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6da591f40b2065f1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/_components/AccountHub.tsx:224"}, "properties": {"repobilityId": "5e58d679c755f46c", "scanner": "scanner-primary", "fingerprint": "6da591f40b2065f1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a35cc6a7444e8ff9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/_components/AppHeaderClient.tsx:140"}, "properties": {"repobilityId": "b63021340628507f", "scanner": "scanner-primary", "fingerprint": "a35cc6a7444e8ff9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7c20d96d4a59dbbc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/app/quotes/preview/[id]/actions.ts:319"}, "properties": {"repobilityId": "688ace20c6d33c11", "scanner": "scanner-primary", "fingerprint": "7c20d96d4a59dbbc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8a340dfff5faf36c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/quotes/preview/[id]/_components/PhotoPlanPanel.tsx:191"}, "properties": {"repobilityId": "549addb85c150c1d", "scanner": "scanner-primary", "fingerprint": "8a340dfff5faf36c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0b6473f7b74fa4d2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/quotes/preview/[id]/_components/SuggestPricePanel.tsx:94"}, "properties": {"repobilityId": "19c59b6c3b98bd33", "scanner": "scanner-primary", "fingerprint": "0b6473f7b74fa4d2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9e09b72ec557b3bc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/quotes/preview/[id]/_components/TakeoffPanel.tsx:124"}, "properties": {"repobilityId": "d9a4833b24a17109", "scanner": "scanner-primary", "fingerprint": "9e09b72ec557b3bc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b2b95a42fcea20f3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/quotes/preview/[id]/_components/CompliancePanel.tsx:274"}, "properties": {"repobilityId": "25887724f717e839", "scanner": "scanner-primary", "fingerprint": "b2b95a42fcea20f3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4931baa14db88058", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/quotes/preview/[id]/_components/MobileCollapsibleCard.tsx:98"}, "properties": {"repobilityId": "c1569cd0aaaddaaa", "scanner": "scanner-primary", "fingerprint": "4931baa14db88058", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e8db9fa2ff82e813", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/quotes/preview/[id]/_components/QuoteEditor.tsx:834"}, "properties": {"repobilityId": "426760c3a9158892", "scanner": "scanner-primary", "fingerprint": "e8db9fa2ff82e813", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4cb3b1333aaa0b8b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/app/invoices/_components/InvoiceList.tsx:199"}, "properties": {"repobilityId": "b5a38faf591e4340", "scanner": "scanner-primary", "fingerprint": "4cb3b1333aaa0b8b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-52aed4a210659ea8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(legal)/support/page.tsx:76"}, "properties": {"repobilityId": "47249a2b5c185f1b", "scanner": "scanner-primary", "fingerprint": "52aed4a210659ea8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b7113483865de990", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/_components/landing/TapeDivider.tsx:33"}, "properties": {"repobilityId": "afe96cc3194d97a0", "scanner": "scanner-primary", "fingerprint": "b7113483865de990", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-aa6e5ab8d4b53742", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/_components/landing/LiveTicker.tsx:160"}, "properties": {"repobilityId": "305bf432857b9f55", "scanner": "scanner-primary", "fingerprint": "aa6e5ab8d4b53742", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0cb4fc382e9797ff", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/materialMatchingPipeline.ts:230"}, "properties": {"repobilityId": "19bee842a921ca03", "scanner": "scanner-primary", "fingerprint": "0cb4fc382e9797ff", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5303e0adae15f3a5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/weather-planning/assess.ts:109"}, "properties": {"repobilityId": "29ce369e1c6cfaf8", "scanner": "scanner-primary", "fingerprint": "5303e0adae15f3a5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-91aeb85315be39e3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/planreader/observability.ts:38"}, "properties": {"repobilityId": "cd490a4f7c95f596", "scanner": "scanner-primary", "fingerprint": "91aeb85315be39e3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-57f9aa65c7d0285d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/eval/plan-reader-eval.test.ts:206"}, "properties": {"repobilityId": "defdbc77509c482d", "scanner": "scanner-primary", "fingerprint": "57f9aa65c7d0285d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c9751353d5c769fb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/eval/scan-eval.test.ts:210"}, "properties": {"repobilityId": "5ff23874c29706f4", "scanner": "scanner-primary", "fingerprint": "c9751353d5c769fb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-782e1afc576d992b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/eval/quote-eval.test.ts:107"}, "properties": {"repobilityId": "da92ca1e156e44ff", "scanner": "scanner-primary", "fingerprint": "782e1afc576d992b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-426150bccae958e1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/eval/quote-agent-eval.test.ts:152"}, "properties": {"repobilityId": "eb5d3e5caceb4a01", "scanner": "scanner-primary", "fingerprint": "426150bccae958e1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4e7fce71cd181c65", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/eval/corrections-eval.test.ts:83"}, "properties": {"repobilityId": "364e9cf1e8087dd4", "scanner": "scanner-primary", "fingerprint": "4e7fce71cd181c65", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f58eae6274c6877e", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/scan-secrets.mjs:31"}, "properties": {"repobilityId": "eb49ae7f12aeed74", "scanner": "scanner-primary", "fingerprint": "f58eae6274c6877e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/scan-secrets.mjs"}, "region": {"startLine": 31}}}]}, {"ruleId": "scanner-8899e0d110962d6d", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/page.tsx:79"}, "properties": {"repobilityId": "88fd235b712bda65", "scanner": "scanner-primary", "fingerprint": "8899e0d110962d6d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/page.tsx"}, "region": {"startLine": 79}}}]}, {"ruleId": "scanner-c5499e06ead8a355", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/layout.tsx:208"}, "properties": {"repobilityId": "0bca654fa2052eb0", "scanner": "scanner-primary", "fingerprint": "c5499e06ead8a355", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/layout.tsx"}, "region": {"startLine": 208}}}]}, {"ruleId": "scanner-77aae7354fec102e", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/app/agents/monitor/_components/DiagnoseButton.tsx:157"}, "properties": {"repobilityId": "05cb0355cf9a6050", "scanner": "scanner-primary", "fingerprint": "77aae7354fec102e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/app/agents/monitor/_components/DiagnoseButton.tsx"}, "region": {"startLine": 157}}}]}, {"ruleId": "scanner-57e3fa2384a7e2be", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/app/_components/landing/AppShowcase.tsx:376"}, "properties": {"repobilityId": "ac673a17952c7536", "scanner": "scanner-primary", "fingerprint": "57e3fa2384a7e2be", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/_components/landing/AppShowcase.tsx"}, "region": {"startLine": 376}}}]}, {"ruleId": "scanner-4619d9415141bcca", "level": "note", "message": {"text": "Very large file: src/app/app/quotes/preview/[id]/_components/QuoteEditor.tsx (1806 lines)"}, "properties": {"repobilityId": "1f2cd22af4f66ad8", "scanner": "scanner-primary", "fingerprint": "4619d9415141bcca", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-561579e012545d6f", "level": "note", "message": {"text": "Very large file: src/lib/supabase/database.types.ts (1788 lines)"}, "properties": {"repobilityId": "c51b24ca1b48a39c", "scanner": "scanner-primary", "fingerprint": "561579e012545d6f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "89d609c82cd31556", "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": "d4a4751f7655d7de", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-9d79c4077342a7d0", "level": "warning", "message": {"text": "Runtime service client appears to use placeholder configuration"}, "properties": {"repobilityId": "568ef0e56d9f5cb2", "scanner": "scanner-primary", "fingerprint": "9d79c4077342a7d0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "runtime-config", "service-client", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "ca0d3aab2b6fe25d", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "ce4e612288d1489d", "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": "aa11b733bc0b0a2d", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-2c5f98b152cddb6d", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/launch.json"}, "properties": {"repobilityId": "0de48c0f4ab303d8", "scanner": "scanner-primary", "fingerprint": "2c5f98b152cddb6d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/launch.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e725d2ab884fbd49", "level": "note", "message": {"text": "Multiple root agent instruction files without precedence"}, "properties": {"repobilityId": "1953db6c89508d22", "scanner": "scanner-primary", "fingerprint": "e725d2ab884fbd49", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["agent-instructions", "governance"]}}, {"ruleId": "scanner-84c5fc9e8e56fdd8", "level": "none", "message": {"text": "Commented-code block (5 lines) in instrumentation-client.ts:43"}, "properties": {"repobilityId": "d99be57fed600a92", "scanner": "scanner-primary", "fingerprint": "84c5fc9e8e56fdd8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-be8e1d658cdd8586", "level": "none", "message": {"text": "Commented-code block (10 lines) in next.config.ts:15"}, "properties": {"repobilityId": "2de899fa9ecd9bb5", "scanner": "scanner-primary", "fingerprint": "be8e1d658cdd8586", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a1498245f3208b4e", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/import-material-reference-library.ts:38"}, "properties": {"repobilityId": "462a2a8b4f9146cc", "scanner": "scanner-primary", "fingerprint": "a1498245f3208b4e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1a2212cee927fd21", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/seed-stage-4-materials.ts:57"}, "properties": {"repobilityId": "da79f04423395ce6", "scanner": "scanner-primary", "fingerprint": "1a2212cee927fd21", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-71e34998ab6ed97c", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/proxy.ts:10"}, "properties": {"repobilityId": "6c861342f683fe2a", "scanner": "scanner-primary", "fingerprint": "71e34998ab6ed97c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-67e31cc354d9f1eb", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/app/manifest.ts:60"}, "properties": {"repobilityId": "5857c5cceec1f200", "scanner": "scanner-primary", "fingerprint": "67e31cc354d9f1eb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1b6b7fe03c397005", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/layout.tsx:55"}, "properties": {"repobilityId": "667f8d1278387ee3", "scanner": "scanner-primary", "fingerprint": "1b6b7fe03c397005", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a1152ff6c6b3fc4d", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/quote/[token]/_components/CustomerChat.tsx:336"}, "properties": {"repobilityId": "42f4be0d0228e695", "scanner": "scanner-primary", "fingerprint": "a1152ff6c6b3fc4d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e15ae873961540d7", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/quote/[token]/chat/route.ts:203"}, "properties": {"repobilityId": "9369d6ddecf6cf87", "scanner": "scanner-primary", "fingerprint": "e15ae873961540d7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e00633b494fe59c0", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/materials/suggest-price/route.ts:122"}, "properties": {"repobilityId": "0cb87be1d275f181", "scanner": "scanner-primary", "fingerprint": "e00633b494fe59c0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fa57254b408b4355", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/stripe/checkout/route.ts:69"}, "properties": {"repobilityId": "cb56aff73a54103e", "scanner": "scanner-primary", "fingerprint": "fa57254b408b4355", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2defeed408f5ac5f", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/app/api/quotes/generate/route.ts:123"}, "properties": {"repobilityId": "2fe5f9225948707b", "scanner": "scanner-primary", "fingerprint": "2defeed408f5ac5f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f492fccf456ad125", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/quotes/scan-drawing/route.ts:26"}, "properties": {"repobilityId": "5bdd984c1b683783", "scanner": "scanner-primary", "fingerprint": "f492fccf456ad125", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a4524383e4ac1b05", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/quotes/[id]/send/route.ts:66"}, "properties": {"repobilityId": "ee0c03533f742f03", "scanner": "scanner-primary", "fingerprint": "a4524383e4ac1b05", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6b9a3a335297703d", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/quotes/transcribe/route.ts:23"}, "properties": {"repobilityId": "9199b5808cd7b250", "scanner": "scanner-primary", "fingerprint": "6b9a3a335297703d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-de16179f79582b63", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/quotes/cleanup/route.ts:98"}, "properties": {"repobilityId": "d3689432b5326ef0", "scanner": "scanner-primary", "fingerprint": "de16179f79582b63", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8edaaad18b861c79", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/app/app/page.tsx:54"}, "properties": {"repobilityId": "26a84fe7d5e68f2c", "scanner": "scanner-primary", "fingerprint": "8edaaad18b861c79", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6ca5d44cca36a91b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/app/weather/_components/WeatherImpactClient.tsx:31"}, "properties": {"repobilityId": "1d52463a15ba5e99", "scanner": "scanner-primary", "fingerprint": "6ca5d44cca36a91b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-aac98e4b889146c3", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/app/suppliers/_components/SupplierBrowser.tsx:87"}, "properties": {"repobilityId": "d4c14ff7a5f2d035", "scanner": "scanner-primary", "fingerprint": "aac98e4b889146c3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-04d3819bb5260bcd", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/app/materials/actions.ts:401"}, "properties": {"repobilityId": "7ddd432ba1123da8", "scanner": "scanner-primary", "fingerprint": "04d3819bb5260bcd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d89338ad2021ec6a", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/app/materials/page.tsx:21"}, "properties": {"repobilityId": "e1be52693090a89e", "scanner": "scanner-primary", "fingerprint": "d89338ad2021ec6a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b6c9af6212bbc075", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/app/_components/SiteConditions.tsx:1"}, "properties": {"repobilityId": "9b7ce4212c8a01d5", "scanner": "scanner-primary", "fingerprint": "b6c9af6212bbc075", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-822ed1757ed9e348", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/app/_components/OnboardingTour.tsx:197"}, "properties": {"repobilityId": "81d6849220956f4d", "scanner": "scanner-primary", "fingerprint": "822ed1757ed9e348", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e8580cabd6ff6f94", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/app/_components/MobileAppMenuClient.tsx:80"}, "properties": {"repobilityId": "ac596e190d1f339e", "scanner": "scanner-primary", "fingerprint": "e8580cabd6ff6f94", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7fd4ab645c04c189", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/app/_components/AccountHub.tsx:199"}, "properties": {"repobilityId": "d969ac7efb10a2ae", "scanner": "scanner-primary", "fingerprint": "7fd4ab645c04c189", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9a601f479ace1f25", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/app/_components/PushToggle.tsx:10"}, "properties": {"repobilityId": "922878ba06631402", "scanner": "scanner-primary", "fingerprint": "9a601f479ace1f25", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-20a7362b30feb984", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/app/_components/PushToggle.tsx:93"}, "properties": {"repobilityId": "5fb41e8e0daf54c6", "scanner": "scanner-primary", "fingerprint": "20a7362b30feb984", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-538284f0dd84c2a7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/app/_components/agents/PhotoPlanAgent.tsx:115"}, "properties": {"repobilityId": "b3ea549788e9bb82", "scanner": "scanner-primary", "fingerprint": "538284f0dd84c2a7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a307fa9cd3e5be0f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/app/quotes/new/_components/ScanPanel.tsx:81"}, "properties": {"repobilityId": "96271e0349dca26e", "scanner": "scanner-primary", "fingerprint": "a307fa9cd3e5be0f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b73f9cf695c6e7ad", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/app/quotes/preview/[id]/actions.ts:193"}, "properties": {"repobilityId": "81b40b4808c68424", "scanner": "scanner-primary", "fingerprint": "b73f9cf695c6e7ad", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-49d36af0225afb9f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/app/quotes/preview/[id]/page.tsx:73"}, "properties": {"repobilityId": "690bc9e3e112105f", "scanner": "scanner-primary", "fingerprint": "49d36af0225afb9f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d5b495df881760b3", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/app/quotes/preview/[id]/_components/SendQuoteButton.tsx:168"}, "properties": {"repobilityId": "5199d0d0ecd0bdd5", "scanner": "scanner-primary", "fingerprint": "d5b495df881760b3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6742da2596f4aa69", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/app/quotes/preview/[id]/_components/ReviewToolsSheet.tsx:56"}, "properties": {"repobilityId": "f3a4edb6a9ad29d1", "scanner": "scanner-primary", "fingerprint": "6742da2596f4aa69", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-92f0ea8c90beb351", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/app/quotes/preview/[id]/_components/PhotoPlanPanel.tsx:138"}, "properties": {"repobilityId": "ef425b20a4bb4c8d", "scanner": "scanner-primary", "fingerprint": "92f0ea8c90beb351", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c5f6730d0a322194", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/app/quotes/preview/[id]/_components/LifecycleCard.tsx:82"}, "properties": {"repobilityId": "ad7d7e0a6f6b3aa8", "scanner": "scanner-primary", "fingerprint": "c5f6730d0a322194", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-380ac4d56e90714b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/app/quotes/preview/[id]/_components/QuoteEditor.tsx:142"}, "properties": {"repobilityId": "520e49fb78c755f2", "scanner": "scanner-primary", "fingerprint": "380ac4d56e90714b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-19360b7fff458018", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/(auth)/signup/actions.ts:20"}, "properties": {"repobilityId": "c50c4ca19242be00", "scanner": "scanner-primary", "fingerprint": "19360b7fff458018", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-99ef275fded69733", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/_components/InstallAppButton.tsx:46"}, "properties": {"repobilityId": "33f28839b05422a7", "scanner": "scanner-primary", "fingerprint": "99ef275fded69733", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0622b13a15c9b6c6", "level": "none", "message": {"text": "Commented-code block (14 lines) in src/app/_components/FloatingInstallButton.tsx:50"}, "properties": {"repobilityId": "b78fe21cb0147af3", "scanner": "scanner-primary", "fingerprint": "0622b13a15c9b6c6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4abf3c57b74194c3", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/_components/landing/LoadingScreen.tsx:65"}, "properties": {"repobilityId": "ac9d7a205e9d115c", "scanner": "scanner-primary", "fingerprint": "4abf3c57b74194c3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ffd3eb291f24d4a7", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/_components/landing/LiveTicker.tsx:117"}, "properties": {"repobilityId": "6fecfa51def78502", "scanner": "scanner-primary", "fingerprint": "ffd3eb291f24d4a7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d10839db94af6829", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/_components/landing/FounderStory.tsx:8"}, "properties": {"repobilityId": "24c84f3538dd7c27", "scanner": "scanner-primary", "fingerprint": "d10839db94af6829", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-de9bb52b9b79f291", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/app/_components/landing/AppShowcase.tsx:23"}, "properties": {"repobilityId": "4232ba579d151297", "scanner": "scanner-primary", "fingerprint": "de9bb52b9b79f291", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-21030d61865f5728", "level": "none", "message": {"text": "Commented-code block (12 lines) in src/app/_components/landing/Hero.tsx:19"}, "properties": {"repobilityId": "ac49d9cd1cd5b8fe", "scanner": "scanner-primary", "fingerprint": "21030d61865f5728", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4cb6978f236c8a24", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/app/_components/landing/Header.tsx:10"}, "properties": {"repobilityId": "fa5f5995313893cb", "scanner": "scanner-primary", "fingerprint": "4cb6978f236c8a24", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2961cfb6e0f00e05", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/reviewGuard.test.ts:4"}, "properties": {"repobilityId": "2a8dbadcb13e82f0", "scanner": "scanner-primary", "fingerprint": "2961cfb6e0f00e05", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fef1865ec0bf73e9", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/materialMatcher.ts:73"}, "properties": {"repobilityId": "8bca7dce30698719", "scanner": "scanner-primary", "fingerprint": "fef1865ec0bf73e9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1de9fea8c76d2a2f", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/lib/quote-validation.ts:252"}, "properties": {"repobilityId": "d901e0b4b96b1196", "scanner": "scanner-primary", "fingerprint": "1de9fea8c76d2a2f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1c6e92380d6b8879", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/transcriptCleanup.ts:187"}, "properties": {"repobilityId": "3dccc354cfe3b036", "scanner": "scanner-primary", "fingerprint": "1c6e92380d6b8879", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-aeed02c1e0b6f8e6", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/materialCalculator.test.ts:288"}, "properties": {"repobilityId": "2b5e61530c121ea1", "scanner": "scanner-primary", "fingerprint": "aeed02c1e0b6f8e6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-370fed8967a8a1a6", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/aiTakeoffParser.test.ts:159"}, "properties": {"repobilityId": "1c8cf1b9f7fb6004", "scanner": "scanner-primary", "fingerprint": "370fed8967a8a1a6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-93a92861c9094cd8", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/materialMatchingPipeline.ts:121"}, "properties": {"repobilityId": "5bcab4280b6b7020", "scanner": "scanner-primary", "fingerprint": "93a92861c9094cd8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-167caab42c730645", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/subscription.ts:70"}, "properties": {"repobilityId": "9d515cca5dc8d92d", "scanner": "scanner-primary", "fingerprint": "167caab42c730645", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1f8864ec950358ea", "level": "none", "message": {"text": "Commented-code block (13 lines) in src/lib/dimensionConfirmation.test.ts:21"}, "properties": {"repobilityId": "a8f459ed25858aaf", "scanner": "scanner-primary", "fingerprint": "1f8864ec950358ea", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-824e8bd964922dbf", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/quote-validation.test.ts:302"}, "properties": {"repobilityId": "8b295320b38e2cf0", "scanner": "scanner-primary", "fingerprint": "824e8bd964922dbf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-40dc766a73d06f8d", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/scanClassify.ts:4"}, "properties": {"repobilityId": "2fb604b74184e33b", "scanner": "scanner-primary", "fingerprint": "40dc766a73d06f8d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dab11f723009e5c2", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/materialCalculator.ts:248"}, "properties": {"repobilityId": "397c0237671b44bb", "scanner": "scanner-primary", "fingerprint": "dab11f723009e5c2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3e5e14c3a35c20b1", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/quote-defaults.ts:61"}, "properties": {"repobilityId": "d4b0ae7793f2481a", "scanner": "scanner-primary", "fingerprint": "3e5e14c3a35c20b1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1f9ba88b2078b2db", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/lib/aiTakeoffParser.ts:68"}, "properties": {"repobilityId": "393476c8e7e4b638", "scanner": "scanner-primary", "fingerprint": "1f9ba88b2078b2db", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c537d56a95d62ea8", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/quote-validation.integrity.test.ts:4"}, "properties": {"repobilityId": "fba7ad9497436189", "scanner": "scanner-primary", "fingerprint": "c537d56a95d62ea8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a5b8fbf6e50ef5c6", "level": "none", "message": {"text": "Commented-code block (13 lines) in src/lib/reviewGuard.ts:7"}, "properties": {"repobilityId": "9bb016886436bb36", "scanner": "scanner-primary", "fingerprint": "a5b8fbf6e50ef5c6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-16d4b903ee4723f6", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/scanImage.ts:3"}, "properties": {"repobilityId": "4f27612386a9d9a7", "scanner": "scanner-primary", "fingerprint": "16d4b903ee4723f6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1e9cf4b843cd5f2f", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/dimensionConfirmation.ts:13"}, "properties": {"repobilityId": "5b59291c1424532d", "scanner": "scanner-primary", "fingerprint": "1e9cf4b843cd5f2f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3e8897894b150799", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/quote-types.ts:16"}, "properties": {"repobilityId": "8a3db9a52d9fbe10", "scanner": "scanner-primary", "fingerprint": "3e8897894b150799", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-357af7c548e4186f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/agent-monitor/__tests__/logger.test.ts:156"}, "properties": {"repobilityId": "c24901ca196cf5c1", "scanner": "scanner-primary", "fingerprint": "357af7c548e4186f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a951256f57ffb035", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/takeoff/legacyCoverage.ts:3"}, "properties": {"repobilityId": "bf14ee3636829aff", "scanner": "scanner-primary", "fingerprint": "a951256f57ffb035", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e6a494bce6948a11", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/takeoff/scope-router.ts:4"}, "properties": {"repobilityId": "9a0ccb0f624ee8cd", "scanner": "scanner-primary", "fingerprint": "e6a494bce6948a11", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e01e79f1053e08e2", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/takeoff/schemas.ts:4"}, "properties": {"repobilityId": "1fdc7acd671ea3e9", "scanner": "scanner-primary", "fingerprint": "e01e79f1053e08e2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8241b7faeb6c3fca", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/takeoff/foundationReviewModel.ts:4"}, "properties": {"repobilityId": "ff9a6578c5d049c4", "scanner": "scanner-primary", "fingerprint": "8241b7faeb6c3fca", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2dbd551134daa95d", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/takeoff/blockedLineGuide.ts:4"}, "properties": {"repobilityId": "7c0fd3e7bdaa5852", "scanner": "scanner-primary", "fingerprint": "2dbd551134daa95d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-76333f840f6b4c07", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/takeoff/evaluate.ts:8"}, "properties": {"repobilityId": "e23025b87eda3d4e", "scanner": "scanner-primary", "fingerprint": "76333f840f6b4c07", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ce6acb5884f16b6c", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/takeoff/orchestrator.ts:6"}, "properties": {"repobilityId": "e5b4e0bd8442a449", "scanner": "scanner-primary", "fingerprint": "ce6acb5884f16b6c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-932a8de0b0b4f441", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/takeoff/foundationCalculator.ts:4"}, "properties": {"repobilityId": "8a82cda30ee33c04", "scanner": "scanner-primary", "fingerprint": "932a8de0b0b4f441", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0d11d2e33914e1c2", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/takeoff/explain.ts:4"}, "properties": {"repobilityId": "b2f7b72479bd6942", "scanner": "scanner-primary", "fingerprint": "0d11d2e33914e1c2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7b40f52306599ce5", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/lib/takeoff/license.ts:7"}, "properties": {"repobilityId": "b5126bf1120796f8", "scanner": "scanner-primary", "fingerprint": "7b40f52306599ce5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0bdbf5e214720f94", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/takeoff/extraction.ts:11"}, "properties": {"repobilityId": "0f18c53b87dbf4d9", "scanner": "scanner-primary", "fingerprint": "0bdbf5e214720f94", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ce74f4f43d5aed6b", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/takeoff/scopeFamily.ts:4"}, "properties": {"repobilityId": "ecb6f04b06b1c630", "scanner": "scanner-primary", "fingerprint": "ce74f4f43d5aed6b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4a6662ee05864e43", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/takeoff/foundationAdapter.ts:14"}, "properties": {"repobilityId": "3dd952144ce0a576", "scanner": "scanner-primary", "fingerprint": "4a6662ee05864e43", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8ac5ece74d281fc4", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/lib/takeoff/validate.ts:8"}, "properties": {"repobilityId": "bd5a22913de60970", "scanner": "scanner-primary", "fingerprint": "8ac5ece74d281fc4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5ab62b36e58819a0", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/takeoff/geometry.ts:4"}, "properties": {"repobilityId": "36b004a6e68a051c", "scanner": "scanner-primary", "fingerprint": "5ab62b36e58819a0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-67b098cdff32ea84", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/takeoff/__tests__/foundationAdapter.contract.test.ts:4"}, "properties": {"repobilityId": "bb6726963dddb833", "scanner": "scanner-primary", "fingerprint": "67b098cdff32ea84", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-72615074ebca0601", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/takeoff/__tests__/floor-plan-wall-run.test.ts:17"}, "properties": {"repobilityId": "7f2d0ad7870352a7", "scanner": "scanner-primary", "fingerprint": "72615074ebca0601", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bac19ac0f7d19ca0", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/takeoff/__tests__/geometry-chain.test.ts:8"}, "properties": {"repobilityId": "eae402fee2e1e71c", "scanner": "scanner-primary", "fingerprint": "bac19ac0f7d19ca0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-883592253078cb11", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/takeoff/__tests__/golden/cases.ts:4"}, "properties": {"repobilityId": "dcfe46ac1639f06b", "scanner": "scanner-primary", "fingerprint": "883592253078cb11", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d7582907e7765222", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/takeoff/calculators/lining.ts:4"}, "properties": {"repobilityId": "7c900a6f5912ea14", "scanner": "scanner-primary", "fingerprint": "d7582907e7765222", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-436c7f2f7cb20060", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/takeoff/calculators/generic.ts:4"}, "properties": {"repobilityId": "1906af1be59e5824", "scanner": "scanner-primary", "fingerprint": "436c7f2f7cb20060", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cccdd81f8aa08941", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/takeoff/calculators/roofing.ts:4"}, "properties": {"repobilityId": "e2402c0bc1e0cf3f", "scanner": "scanner-primary", "fingerprint": "cccdd81f8aa08941", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-663c1cca5521071e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/takeoff/calculators/concrete.ts:4"}, "properties": {"repobilityId": "c9fb8345e5b84a10", "scanner": "scanner-primary", "fingerprint": "663c1cca5521071e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a0fe7b96b084b871", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/lib/takeoff/calculators/insulation.ts:8"}, "properties": {"repobilityId": "1ee0c4a33a5f7a3a", "scanner": "scanner-primary", "fingerprint": "a0fe7b96b084b871", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4124bcd64689f463", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/lib/takeoff/csi/map.ts:4"}, "properties": {"repobilityId": "6103f3a754c4dc51", "scanner": "scanner-primary", "fingerprint": "4124bcd64689f463", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dac588998b87582a", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/lib/takeoff/csi/contracts.ts:9"}, "properties": {"repobilityId": "df3c2b2156c8b75f", "scanner": "scanner-primary", "fingerprint": "dac588998b87582a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-437b13a5e09f2975", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/takeoff/csi/eval.ts:8"}, "properties": {"repobilityId": "cd7cbe6420828379", "scanner": "scanner-primary", "fingerprint": "437b13a5e09f2975", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e652362d19b0f611", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/lib/takeoff/bridge/confirmation.ts:9"}, "properties": {"repobilityId": "9bea00d333086c3b", "scanner": "scanner-primary", "fingerprint": "e652362d19b0f611", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-27f62707cdd449ac", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/takeoff/bridge/sheetToExtraction.ts:4"}, "properties": {"repobilityId": "9fc00a95ba15fb7f", "scanner": "scanner-primary", "fingerprint": "27f62707cdd449ac", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f20c0161567965ea", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/takeoff/bridge/pipeline.e2e.test.ts:6"}, "properties": {"repobilityId": "91c31bdfeb330110", "scanner": "scanner-primary", "fingerprint": "f20c0161567965ea", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1e1c5ce2175c1c73", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/takeoff/bridge/roleTagger.ts:4"}, "properties": {"repobilityId": "d4a39d1c0d47d284", "scanner": "scanner-primary", "fingerprint": "1e1c5ce2175c1c73", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c601c10778ab5eb8", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/lib/takeoff/bridge/sheetAdapter.ts:4"}, "properties": {"repobilityId": "4e384c2a6aba4593", "scanner": "scanner-primary", "fingerprint": "c601c10778ab5eb8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0051ebf804cb5db9", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/tradieBrain/rank.ts:4"}, "properties": {"repobilityId": "f40aed1ccb0dedba", "scanner": "scanner-primary", "fingerprint": "0051ebf804cb5db9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5590c1160b6ad91b", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/tradieBrain/store.ts:9"}, "properties": {"repobilityId": "2a32987f022166dc", "scanner": "scanner-primary", "fingerprint": "5590c1160b6ad91b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-71ad3b2dfe9f8f0e", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/tradieBrain/index.ts:4"}, "properties": {"repobilityId": "4042a76f9a387497", "scanner": "scanner-primary", "fingerprint": "71ad3b2dfe9f8f0e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6fc70ed7913b189d", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/tradieBrain/derive.ts:4"}, "properties": {"repobilityId": "1028b02f9279a0ac", "scanner": "scanner-primary", "fingerprint": "6fc70ed7913b189d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-334957436cc4b0c9", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/tradieBrain/retrieve.ts:10"}, "properties": {"repobilityId": "04b4e9a1a878d83f", "scanner": "scanner-primary", "fingerprint": "334957436cc4b0c9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2c072f698fb7469e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/tradieBrain/normalize.ts:4"}, "properties": {"repobilityId": "2cb9459f7ba24c5a", "scanner": "scanner-primary", "fingerprint": "2c072f698fb7469e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4dba6f31dcea7f3b", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/observability/fingerprint.ts:9"}, "properties": {"repobilityId": "ac478f454ddfdfef", "scanner": "scanner-primary", "fingerprint": "4dba6f31dcea7f3b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2540610356ee6c51", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/observability/sink.ts:8"}, "properties": {"repobilityId": "36fd9e8047d95eb6", "scanner": "scanner-primary", "fingerprint": "2540610356ee6c51", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f966efeacdaadf6d", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/observability/clientErrors.ts:9"}, "properties": {"repobilityId": "b912b686505db3ec", "scanner": "scanner-primary", "fingerprint": "f966efeacdaadf6d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a92df8270f81226a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/compliance/types.ts:34"}, "properties": {"repobilityId": "b94273cbebd5fd20", "scanner": "scanner-primary", "fingerprint": "a92df8270f81226a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6a84d5f2895ed3d6", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/compliance/pipeline.test.ts:60"}, "properties": {"repobilityId": "dfad0e130bc7ccc9", "scanner": "scanner-primary", "fingerprint": "6a84d5f2895ed3d6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a5211bcb2858ed61", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/admin/connectors.ts:102"}, "properties": {"repobilityId": "4101adbf0f407388", "scanner": "scanner-primary", "fingerprint": "a5211bcb2858ed61", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-da9749ea28f3d245", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/digest/evalSeeds.ts:4"}, "properties": {"repobilityId": "bfd1319299d61e3b", "scanner": "scanner-primary", "fingerprint": "da9749ea28f3d245", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-acfef0dfa697a6ac", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/digest/collect.ts:13"}, "properties": {"repobilityId": "2061294416e08cef", "scanner": "scanner-primary", "fingerprint": "acfef0dfa697a6ac", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-968d6291e85fc705", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/lib/agents/runtime.ts:4"}, "properties": {"repobilityId": "f72dce51e42420cb", "scanner": "scanner-primary", "fingerprint": "968d6291e85fc705", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f873e7adaf5c66ff", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/agents/openai-runtime.ts:4"}, "properties": {"repobilityId": "e2ff0fcf2b15a63e", "scanner": "scanner-primary", "fingerprint": "f873e7adaf5c66ff", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b6d2ce22b83983ef", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/agents/pat.ts:1"}, "properties": {"repobilityId": "6e692838b5c1effa", "scanner": "scanner-primary", "fingerprint": "b6d2ce22b83983ef", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-124e2fb4f0f27a8f", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/agents/willa.ts:1"}, "properties": {"repobilityId": "05c3b115bc230438", "scanner": "scanner-primary", "fingerprint": "124e2fb4f0f27a8f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5e7f590fea73225e", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/agents/suggestPrice/parse.ts:4"}, "properties": {"repobilityId": "1c6083f4f368f586", "scanner": "scanner-primary", "fingerprint": "5e7f590fea73225e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-93a02bcc6a853c37", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/agents/suggestPrice/apply.ts:4"}, "properties": {"repobilityId": "ada8a8b86e3ad892", "scanner": "scanner-primary", "fingerprint": "93a02bcc6a853c37", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c87a7b15cbf3907a", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/agents/suggestPrice/evidence.ts:4"}, "properties": {"repobilityId": "c3783069926bb314", "scanner": "scanner-primary", "fingerprint": "c87a7b15cbf3907a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-38bdebd449956bdc", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/agents/suggestPrice/types.ts:4"}, "properties": {"repobilityId": "d548ae6e7e20a69c", "scanner": "scanner-primary", "fingerprint": "38bdebd449956bdc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-975d07601169abfc", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/lib/agents/verify/quoteVerify.ts:5"}, "properties": {"repobilityId": "ee8cdf443132716b", "scanner": "scanner-primary", "fingerprint": "975d07601169abfc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d828135d24bc99af", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/weather-planning/provider.ts:1"}, "properties": {"repobilityId": "763e68886acceb4d", "scanner": "scanner-primary", "fingerprint": "d828135d24bc99af", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ff985c08440bbf65", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/weather-planning/rules.ts:1"}, "properties": {"repobilityId": "a379b5b260a9fb45", "scanner": "scanner-primary", "fingerprint": "ff985c08440bbf65", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e1dafba223571dc3", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/weather-planning/job-type.ts:1"}, "properties": {"repobilityId": "592f7fb95d015d63", "scanner": "scanner-primary", "fingerprint": "e1dafba223571dc3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0790f459fce757b1", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/weather-planning/assess.ts:1"}, "properties": {"repobilityId": "d7158c23ab69b86e", "scanner": "scanner-primary", "fingerprint": "0790f459fce757b1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c23629620ddb5096", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/weather-planning/risk-engine.ts:1"}, "properties": {"repobilityId": "7ecafaac824c534b", "scanner": "scanner-primary", "fingerprint": "c23629620ddb5096", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-db7de9c7f6744c82", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/weather-planning/freshness.ts:1"}, "properties": {"repobilityId": "9e4ccaf24b338dae", "scanner": "scanner-primary", "fingerprint": "db7de9c7f6744c82", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fba3489ba4e1935f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/weather-planning/flag.ts:1"}, "properties": {"repobilityId": "22aa10f122ee384e", "scanner": "scanner-primary", "fingerprint": "fba3489ba4e1935f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b4e789fa96411159", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/weather-planning/geocode.ts:1"}, "properties": {"repobilityId": "72cacad14dda80d2", "scanner": "scanner-primary", "fingerprint": "b4e789fa96411159", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-705c9aca292cf669", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/hooks/useBodyScrollLock.test.ts:4"}, "properties": {"repobilityId": "6576473b730d0da4", "scanner": "scanner-primary", "fingerprint": "705c9aca292cf669", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7dbdef35fefba82c", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/hooks/useBodyScrollLock.ts:6"}, "properties": {"repobilityId": "d0b517de7d0e24b6", "scanner": "scanner-primary", "fingerprint": "7dbdef35fefba82c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-689eb6081668372e", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/shell/mobile-shell-contract.test.ts:4"}, "properties": {"repobilityId": "00642917222183df", "scanner": "scanner-primary", "fingerprint": "689eb6081668372e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-77ad36e211f9f1e7", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/materials/extractionMetrics.ts:4"}, "properties": {"repobilityId": "0adfcf6aa3d73501", "scanner": "scanner-primary", "fingerprint": "77ad36e211f9f1e7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-58b1d60884a759b3", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/materials/estimateToQuote.ts:9"}, "properties": {"repobilityId": "5f74c20535e7f597", "scanner": "scanner-primary", "fingerprint": "58b1d60884a759b3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e48ecf48bbfc82e9", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/materials/supplier-fixtures.test.ts:26"}, "properties": {"repobilityId": "002460ced35ede03", "scanner": "scanner-primary", "fingerprint": "e48ecf48bbfc82e9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-37a8f656a7936bac", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/materials/extractionQueue.ts:4"}, "properties": {"repobilityId": "ae5356262c391238", "scanner": "scanner-primary", "fingerprint": "37a8f656a7936bac", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4232ead348d6c9c6", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/materials/quoteExtraction.ts:4"}, "properties": {"repobilityId": "5b45a709d44a1318", "scanner": "scanner-primary", "fingerprint": "4232ead348d6c9c6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f92d824e00c823e2", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/materials/quoteValidation.ts:4"}, "properties": {"repobilityId": "e01262278d558c69", "scanner": "scanner-primary", "fingerprint": "f92d824e00c823e2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7e1245dcb376eed0", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/transcript/measureNormalize.test.ts:4"}, "properties": {"repobilityId": "118c8102ee8e7952", "scanner": "scanner-primary", "fingerprint": "7e1245dcb376eed0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-728c51da347cd821", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/transcript/glossaryCorrect.ts:4"}, "properties": {"repobilityId": "d4501c6278fbbe0f", "scanner": "scanner-primary", "fingerprint": "728c51da347cd821", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-09af0618aec2e024", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/transcript/glossary.ts:65"}, "properties": {"repobilityId": "8e6fb59b05bf4ccd", "scanner": "scanner-primary", "fingerprint": "09af0618aec2e024", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e6e0fa197430b9b2", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/transcript/debugView.ts:8"}, "properties": {"repobilityId": "a21b9fad790e7171", "scanner": "scanner-primary", "fingerprint": "e6e0fa197430b9b2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b32cd230410fe7f0", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/lib/transcript/regression-tradie-speech.test.ts:4"}, "properties": {"repobilityId": "048f401ff6f5ea5c", "scanner": "scanner-primary", "fingerprint": "b32cd230410fe7f0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-36ef71acaf6963ee", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/transcript/measureNormalize.ts:4"}, "properties": {"repobilityId": "0888f10996b4ac62", "scanner": "scanner-primary", "fingerprint": "36ef71acaf6963ee", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-238f2d1146c8e427", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/weather-impact/open-meteo.ts:83"}, "properties": {"repobilityId": "fddef266bfd8c69a", "scanner": "scanner-primary", "fingerprint": "238f2d1146c8e427", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e88a0f8102443d32", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/planreader/observability.ts:4"}, "properties": {"repobilityId": "806ff388df4da5d2", "scanner": "scanner-primary", "fingerprint": "e88a0f8102443d32", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-966faaa192060b67", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/planreader/schema.ts:4"}, "properties": {"repobilityId": "87acb24c6c4aacb7", "scanner": "scanner-primary", "fingerprint": "966faaa192060b67", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-34bc027f760014b4", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/planreader/storage.ts:4"}, "properties": {"repobilityId": "2c335ab62a6dcdc2", "scanner": "scanner-primary", "fingerprint": "34bc027f760014b4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-08be09facc0743e6", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/planreader/ingest.ts:4"}, "properties": {"repobilityId": "4afed3e873ed4f56", "scanner": "scanner-primary", "fingerprint": "08be09facc0743e6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cf53377602b2b537", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/planreader/titleBlock.ts:4"}, "properties": {"repobilityId": "09c62e264c27d474", "scanner": "scanner-primary", "fingerprint": "cf53377602b2b537", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9f6141219556ce68", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/lib/planreader/gates.ts:9"}, "properties": {"repobilityId": "50aa121408053753", "scanner": "scanner-primary", "fingerprint": "9f6141219556ce68", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-30ce3845f45c1947", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/planreader/scale.ts:4"}, "properties": {"repobilityId": "109e640f77b48bf0", "scanner": "scanner-primary", "fingerprint": "30ce3845f45c1947", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-79983b8f66cd33c8", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/lib/planreader/extract.ts:8"}, "properties": {"repobilityId": "f4dc460beb9cf30c", "scanner": "scanner-primary", "fingerprint": "79983b8f66cd33c8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4db4f2e01b13c272", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/eval/plan-reader-cases.ts:4"}, "properties": {"repobilityId": "8105425964808eac", "scanner": "scanner-primary", "fingerprint": "4db4f2e01b13c272", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1d85d3ff291f99bf", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/eval/csi-mapper-cases.ts:4"}, "properties": {"repobilityId": "67274a313d36895d", "scanner": "scanner-primary", "fingerprint": "1d85d3ff291f99bf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-877b1b9601c08793", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/eval/scan-cases.ts:4"}, "properties": {"repobilityId": "4690e1c42263ccb9", "scanner": "scanner-primary", "fingerprint": "877b1b9601c08793", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-55111280dc9fc35c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/eval/scan-eval.test.ts:96"}, "properties": {"repobilityId": "a0ab84fdfdc3af41", "scanner": "scanner-primary", "fingerprint": "55111280dc9fc35c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-853014a064b3b584", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/eval/quote-eval.test.ts:61"}, "properties": {"repobilityId": "9990ab52ec364de6", "scanner": "scanner-primary", "fingerprint": "853014a064b3b584", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}]}]}