{"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-3d8a8e3d3fbb1a3e", "name": "Stray `console.log` in TS/JS \u2014 scripts/zuper-actually-unlinked.ts:39", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/zuper-actually-unlinked.ts:39"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6177e2dd8b733c55", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-adders.ts:78", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-adders.ts:78"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-49916601815ea316", "name": "Stray `console.log` in TS/JS \u2014 scripts/_pull-zoho-item-groups.ts:89", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_pull-zoho-item-groups.ts:89"}, "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-67bed06ce516ca17", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-roles.ts:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-roles.ts:20"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-30224939323dc8a0", "name": "Stray `console.log` in TS/JS \u2014 scripts/zoho-check-fields.ts:25", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/zoho-check-fields.ts:25"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3dd0671bc83769d9", "name": "Stray `console.log` in TS/JS \u2014 scripts/backfill-shit-show-flags.ts:62", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-shit-show-flags.ts:62"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ff5aa3fec61e408e", "name": "Stray `console.log` in TS/JS \u2014 scripts/deactivate-crew-member.ts:83", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/deactivate-crew-member.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-e59f1f72810b09ed", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-surveyor-mismatches.ts:68", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-surveyor-mismatches.ts:68"}, "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-ce6197a3b9b1be1e", "name": "TODO/FIXME marker in shipping code \u2014 scripts/create-hubspot-property-object.ts:211", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 scripts/create-hubspot-property-object.ts:211"}, "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-aa7de27b19fe91aa", "name": "Stray `console.log` in TS/JS \u2014 scripts/create-hubspot-property-object.ts:262", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/create-hubspot-property-object.ts:262"}, "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-49fb855045f33640", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-sop-product-creation.ts:232", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-sop-product-creation.ts:232"}, "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-f2cf682c90798e60", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-sop-tools-3.ts:359", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-sop-tools-3.ts:359"}, "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-7ca0f2563f5785e6", "name": "Stray `console.log` in TS/JS \u2014 scripts/_create-tesla-model-hubspot-props.ts:101", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_create-tesla-model-hubspot-props.ts:101"}, "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-4498881f9efc9741", "name": "Stray `console.log` in TS/JS \u2014 scripts/_fix-catalog-integrity.ts:32", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_fix-catalog-integrity.ts:32"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3fdcdb04144a6a5e", "name": "Stray `console.log` in TS/JS \u2014 scripts/zuper-orphan-hs-details.ts:91", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/zuper-orphan-hs-details.ts:91"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ed8f9e981ecd95df", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-zoho-zuper-ids.ts:19", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-zoho-zuper-ids.ts:19"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0e4eb80a3b165e05", "name": "Stray `console.log` in TS/JS \u2014 scripts/_match-zoho-orphans.ts:103", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_match-zoho-orphans.ts:103"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d2dea1e5d871ede7", "name": "Stray `console.log` in TS/JS \u2014 scripts/_verify-property-coverage.ts:79", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_verify-property-coverage.ts:79"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-520941af6acb6264", "name": "Stray `console.log` in TS/JS \u2014 scripts/_verify-m34-update-path.ts:123", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_verify-m34-update-path.ts:123"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-82a8dc53fa349237", "name": "Stray `console.log` in TS/JS \u2014 scripts/zuper-orphan-hs-links.ts:58", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/zuper-orphan-hs-links.ts:58"}, "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-7387028ca480dabb", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-sop-trackers.ts:175", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-sop-trackers.ts:175"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b3cabf55e0271b81", "name": "Stray `console.log` in TS/JS \u2014 scripts/_rebrand-generic-products.ts:80", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_rebrand-generic-products.ts:80"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5162420dcdffe9bf", "name": "Stray `console.log` in TS/JS \u2014 scripts/cleanup-unlinked-products.ts:24", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/cleanup-unlinked-products.ts:24"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fb2c90f04b5aecad", "name": "Stray `console.log` in TS/JS \u2014 scripts/_export-hubspot-orphan-list.ts:39", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_export-hubspot-orphan-list.ts:39"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-57e5138601e8e06c", "name": "Stray `console.log` in TS/JS \u2014 scripts/backfill-zuper-drift.ts:79", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-zuper-drift.ts:79"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-19232c2fc03ba7c3", "name": "Stray `console.log` in TS/JS \u2014 scripts/zuper-orphan-full-crossref.ts:176", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/zuper-orphan-full-crossref.ts:176"}, "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-b3f952689bb7e35b", "name": "Stray `console.log` in TS/JS \u2014 scripts/zoho-item-fields.ts:41", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/zoho-item-fields.ts:41"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e38c2b5e905208fc", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-sop-reference.ts:658", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-sop-reference.ts:658"}, "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-440be815ab6788b7", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-sop-meta.ts:197", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-sop-meta.ts:197"}, "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-1e3324e929e03056", "name": "Stray `console.log` in TS/JS \u2014 scripts/dry-run-pm-flags.ts:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/dry-run-pm-flags.ts:16"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-89b6b5929482aedd", "name": "Stray `console.log` in TS/JS \u2014 scripts/classify-sos.ts:143", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/classify-sos.ts:143"}, "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-2fb5dc01cc20bf99", "name": "Stray `console.log` in TS/JS \u2014 scripts/backfill-zuper-properties.ts:40", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-zuper-properties.ts:40"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ad3514e707860282", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-phase1-errors.ts:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-phase1-errors.ts:15"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e51fd7e74aa06b82", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-sop-service.ts:323", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-sop-service.ts:323"}, "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-4ff535cfa7a2e798", "name": "Stray `console.log` in TS/JS \u2014 scripts/zoho-list-customfields.ts:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/zoho-list-customfields.ts:14"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2201c62312f3f544", "name": "Stray `console.log` in TS/JS \u2014 scripts/zoho-custom-fields.ts:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/zoho-custom-fields.ts:13"}, "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-a4801e0db9365769", "name": "Stray `console.log` in TS/JS \u2014 scripts/_mismatch-deal-stages.ts:62", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_mismatch-deal-stages.ts:62"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-481299c7b4198831", "name": "Stray `console.log` in TS/JS \u2014 scripts/aircall-analytics-import.ts:40", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/aircall-analytics-import.ts:40"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7fba387465bdcb81", "name": "Stray `console.log` in TS/JS \u2014 scripts/_delete-test-products.ts:58", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_delete-test-products.ts:58"}, "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-141c9071306038b0", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-zuper-hs-ids.ts:19", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-zuper-hs-ids.ts:19"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ebf046a932dc3732", "name": "Stray `console.log` in TS/JS \u2014 scripts/pe-photo-submit.ts:534", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/pe-photo-submit.ts:534"}, "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-2577b52ec7bf1d34", "name": "Stray `console.log` in TS/JS \u2014 scripts/_zuper-custom-field-probe.ts:58", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_zuper-custom-field-probe.ts:58"}, "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-118681d3432b2ab5", "name": "Stray `console.log` in TS/JS \u2014 scripts/create-ip-id-fields.ts:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/create-ip-id-fields.ts:14"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a5e4501c5dae66a2", "name": "Stray `console.log` in TS/JS \u2014 scripts/backfill-site-surveyor.ts:50", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-site-surveyor.ts:50"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0621f06ad1c05666", "name": "Stray `console.log` in TS/JS \u2014 scripts/pe-sync-db.ts:92", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/pe-sync-db.ts:92"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d89d6d1f7c09c2f0", "name": "Stray `console.log` in TS/JS \u2014 scripts/sync-2026-items-to-zuper.ts:247", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/sync-2026-items-to-zuper.ts:247"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aaece2baef5d556a", "name": "Stray `console.log` in TS/JS \u2014 scripts/zuper-tasks-vs-jobs.ts:88", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/zuper-tasks-vs-jobs.ts:88"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c3e3f1fd4756a489", "name": "Stray `console.log` in TS/JS \u2014 scripts/backfill-canonical-keys.ts:19", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-canonical-keys.ts:19"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-acb70e5dbf90f5f2", "name": "Stray `console.log` in TS/JS \u2014 scripts/query-so-hug-items.ts:19", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/query-so-hug-items.ts:19"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e7260fffee140087", "name": "Stray `console.log` in TS/JS \u2014 scripts/pe-crossref.ts:61", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/pe-crossref.ts:61"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-47a9f3c52fe0a264", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-goals-digest.ts:100", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-goals-digest.ts:100"}, "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-3ab974f2b84927e0", "name": "Stray `console.log` in TS/JS \u2014 scripts/_zuper-mismatch-report.ts:117", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_zuper-mismatch-report.ts:117"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c135badd2446bc85", "name": "Stray `console.log` in TS/JS \u2014 scripts/_audit-catalog-integrity.ts:41", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_audit-catalog-integrity.ts:41"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-89ad28a7ad63f26d", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-zoho-item.ts:24", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-zoho-item.ts:24"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bab598cba6e1c4d8", "name": "Stray `console.log` in TS/JS \u2014 scripts/sync-tasks.ts:115", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/sync-tasks.ts:115"}, "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-9ff7647bcbf0801c", "name": "Stray `console.log` in TS/JS \u2014 scripts/clear-sop.ts:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/clear-sop.ts:14"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2324d35b563a3f2b", "name": "Stray `console.log` in TS/JS \u2014 scripts/create-zoho-cf.ts:30", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/create-zoho-cf.ts:30"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-69a20552d2372136", "name": "Stray `console.log` in TS/JS \u2014 scripts/catalog-reconciliation-audit.ts:115", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/catalog-reconciliation-audit.ts:115"}, "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-e210b98b419d96eb", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-remaining-brands.ts:27", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-remaining-brands.ts:27"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-047c7df79cbb3316", "name": "Stray `console.log` in TS/JS \u2014 scripts/4x10-extract-install-data.ts:30", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/4x10-extract-install-data.ts:30"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ca9e2a9ca79b2a91", "name": "Stray `console.log` in TS/JS \u2014 scripts/lucas-compliance-diff.ts:79", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/lucas-compliance-diff.ts:79"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-564e35c58ca4c219", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-manual-runs.ts:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-manual-runs.ts:15"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ca40ee59ffc79d9f", "name": "Stray `console.log` in TS/JS \u2014 scripts/match-ips-to-zuper-orphans.ts:153", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/match-ips-to-zuper-orphans.ts:153"}, "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-b42976f104fdd4f8", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-hyundai-zuper.ts:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-hyundai-zuper.ts:20"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aaa4575ee77855d4", "name": "Stray `console.log` in TS/JS \u2014 scripts/send-retroactive-reassignment-emails.ts:43", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/send-retroactive-reassignment-emails.ts:43"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b903ec96761ef835", "name": "Stray `console.log` in TS/JS \u2014 scripts/_backfill-zuper-dealid-format.ts:33", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_backfill-zuper-dealid-format.ts:33"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b38db5a1cec0e183", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-zuper-no-zoho.ts:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-zuper-no-zoho.ts:15"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-38701818a76fe9b1", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-sop-executive.ts:273", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-sop-executive.ts:273"}, "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-8f5016d71d42566c", "name": "Stray `console.log` in TS/JS \u2014 scripts/full-2026-product-sync.ts:188", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/full-2026-product-sync.ts:188"}, "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-c4447cf201d36d64", "name": "Stray `console.log` in TS/JS \u2014 scripts/_pricing-check.ts:21", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_pricing-check.ts:21"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b6dba01388bacca3", "name": "Stray `console.log` in TS/JS \u2014 scripts/verify-zuper-readiness.ts:21", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verify-zuper-readiness.ts:21"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-976d3344fe65527c", "name": "Stray `console.log` in TS/JS \u2014 scripts/backfill-ip-ids.ts:26", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-ip-ids.ts:26"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f2bbc910377c1d94", "name": "Stray `console.log` in TS/JS \u2014 scripts/migrate-sop-design-split.ts:419", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-sop-design-split.ts:419"}, "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-4c05fc8a4e25b752", "name": "Stray `console.log` in TS/JS \u2014 scripts/_backfill-tesla-device-push.ts:25", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_backfill-tesla-device-push.ts:25"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b2aad937b91fc011", "name": "Stray `console.log` in TS/JS \u2014 scripts/deactivate-unlinked.ts:19", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/deactivate-unlinked.ts:19"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fb3bb78d3f8ad8a1", "name": "Stray `console.log` in TS/JS \u2014 scripts/_find-spec-candidate.ts:69", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_find-spec-candidate.ts:69"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9d448d13745a37a6", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-zuper-naming.ts:44", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-zuper-naming.ts:44"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7f8507b62902d1f8", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-zoho-135735.ts:9", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-zoho-135735.ts:9"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b075ebc70089a5a8", "name": "Stray `console.log` in TS/JS \u2014 scripts/backfill-shovels-enrichment.ts:37", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-shovels-enrichment.ts:37"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-990d07931faceda3", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-zoho-cf-update.ts:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-zoho-cf-update.ts:15"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5dc61f7311c52e9d", "name": "Stray `console.log` in TS/JS \u2014 scripts/verify-hs-link-targets.ts:34", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verify-hs-link-targets.ts:34"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-270790e7041e3170", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-sop.ts:70", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-sop.ts:70"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-628cb59ba33d44f1", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-pe-docs.ts:106", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-pe-docs.ts:106"}, "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-45c95b7e2db6d044", "name": "Stray `console.log` in TS/JS \u2014 scripts/create-ips-from-zuper-hs.ts:47", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/create-ips-from-zuper-hs.ts:47"}, "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-7ea20287e0628285", "name": "Stray `console.log` in TS/JS \u2014 scripts/_pull-zuper-product-schema.ts:39", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_pull-zuper-product-schema.ts:39"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-47ae362228487160", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-hs-orphans-in-zoho-zuper.ts:57", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-hs-orphans-in-zoho-zuper.ts:57"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8d94ae036349c130", "name": "Stray `console.log` in TS/JS \u2014 scripts/inspect-zuper-products.ts:19", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/inspect-zuper-products.ts:19"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dc54785d39d5a564", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-sop-sales-marketing.ts:286", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-sop-sales-marketing.ts:286"}, "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-2ac8bc072814fdb1", "name": "Stray `console.log` in TS/JS \u2014 scripts/create-pe-doc-properties.ts:48", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/create-pe-doc-properties.ts:48"}, "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-4c7953a78e6d167d", "name": "Stray `console.log` in TS/JS \u2014 scripts/_pe-rejected-docs-by-team-gdoc.ts:78", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_pe-rejected-docs-by-team-gdoc.ts:78"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b6aa5365ea767d95", "name": "Stray `console.log` in TS/JS \u2014 scripts/link-tesla-wall-connector.ts:39", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/link-tesla-wall-connector.ts:39"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8dba79443babfec0", "name": "Stray `console.log` in TS/JS \u2014 scripts/export-product-truth-set.ts:145", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/export-product-truth-set.ts:145"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1cdde77af5ff04f9", "name": "Stray `console.log` in TS/JS \u2014 scripts/enumerate-service-task-statuses.ts:50", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/enumerate-service-task-statuses.ts:50"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-78ecdc007bcca1b9", "name": "Stray `console.log` in TS/JS \u2014 scripts/site-surveyor-audit-extended.ts:109", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/site-surveyor-audit-extended.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-8cd7d897c435c142", "name": "Stray `console.log` in TS/JS \u2014 scripts/push-remaining-to-zuper.ts:32", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/push-remaining-to-zuper.ts:32"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-79cf601085b24bde", "name": "Stray `console.log` in TS/JS \u2014 scripts/_zoho-pricing-json.ts:50", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_zoho-pricing-json.ts:50"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-89337c087a264ee3", "name": "Stray `console.log` in TS/JS \u2014 scripts/enumerate-service-task-titles.ts:66", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/enumerate-service-task-titles.ts:66"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c01def73bb999d8e", "name": "Stray `console.log` in TS/JS \u2014 scripts/_scan-zuper-metadata.ts:40", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_scan-zuper-metadata.ts:40"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b5b87d67f17f7f72", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-sop-suites.ts:448", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-sop-suites.ts:448"}, "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-86102b47c37389dd", "name": "Stray `console.log` in TS/JS \u2014 scripts/backfill-so-warehouses.ts:66", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-so-warehouses.ts:66"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f5c4e19a3b2b9dd4", "name": "Stray `console.log` in TS/JS \u2014 scripts/update-ca-survey-availability.ts:46", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/update-ca-survey-availability.ts:46"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-adfa594e6b27b2a8", "name": "Stray `console.log` in TS/JS \u2014 scripts/decode-pe-scrape.ts:179", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/decode-pe-scrape.ts:179"}, "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-a595a8b877a53269", "name": "Stray `console.log` in TS/JS \u2014 scripts/backfill-cross-links.ts:30", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-cross-links.ts:30"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-49b06f9ef6d12a5a", "name": "Stray `console.log` in TS/JS \u2014 scripts/zoho-raw-item.ts:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/zoho-raw-item.ts:16"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d6f9c24604d2ff7b", "name": "Stray `console.log` in TS/JS \u2014 scripts/debug-zoho.ts:23", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/debug-zoho.ts:23"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6f361449f01b15a1", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-sop-inventory.ts:606", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-sop-inventory.ts:606"}, "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-70d1d55f228fa2eb", "name": "Stray `console.log` in TS/JS \u2014 scripts/diagnose-assignment.ts:36", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/diagnose-assignment.ts:36"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-557dd716568cd0d1", "name": "Stray `console.log` in TS/JS \u2014 scripts/retry-phase3.ts:26", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/retry-phase3.ts:26"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b80dd00acb2617be", "name": "Stray `console.log` in TS/JS \u2014 scripts/ips-zuper-no-zoho.ts:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/ips-zuper-no-zoho.ts:17"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d43d0e9523c7d0ee", "name": "Stray `console.log` in TS/JS \u2014 scripts/_user-audit.ts:19", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_user-audit.ts:19"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-040cdbdfcdfb4215", "name": "Stray `console.log` in TS/JS \u2014 scripts/link-two-hs-matches.ts:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/link-two-hs-matches.ts:18"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-14878759f7021979", "name": "Stray `console.log` in TS/JS \u2014 scripts/_pe-missing-docs-by-team-gdoc.ts:72", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_pe-missing-docs-by-team-gdoc.ts:72"}, "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-13eabc1e1322106a", "name": "Stray `console.log` in TS/JS \u2014 scripts/generate-equipment-assets.ts:92", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-equipment-assets.ts:92"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b1b9bfa158dd2950", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-so-reference-numbers.ts:23", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-so-reference-numbers.ts:23"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6c22fb6079d9c669", "name": "Stray `console.log` in TS/JS \u2014 scripts/snapshot-compliance-baseline.ts:61", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/snapshot-compliance-baseline.ts:61"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cd517092863442f4", "name": "Stray `console.log` in TS/JS \u2014 scripts/fetch-hubspot-schema.js:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fetch-hubspot-schema.js:11"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8abae9c45fac2b25", "name": "Stray `console.log` in TS/JS \u2014 scripts/site-surveyor-mismatch.ts:44", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/site-surveyor-mismatch.ts:44"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-22630a80d318fcc2", "name": "Stray `console.log` in TS/JS \u2014 scripts/generate-equipment-assets-gemini.ts:211", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-equipment-assets-gemini.ts:211"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8b7011b10b25eb3f", "name": "Stray `console.log` in TS/JS \u2014 scripts/analyze-session5.ts:237", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/analyze-session5.ts:237"}, "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-d4ea4c1209ad180b", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-new-ips.ts:24", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-new-ips.ts:24"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f0fe3aa6104ff181", "name": "Stray `console.log` in TS/JS \u2014 scripts/backfill-da-drift.ts:37", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-da-drift.ts:37"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cf30f7915113072c", "name": "Stray `console.log` in TS/JS \u2014 scripts/_zoho-pricing-audit.ts:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_zoho-pricing-audit.ts:13"}, "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-c43969e554390c39", "name": "Stray `console.log` in TS/JS \u2014 scripts/list-brand-dupes.ts:34", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/list-brand-dupes.ts:34"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-95d1fd58d5dc87fb", "name": "Stray `console.log` in TS/JS \u2014 scripts/_audit-generic-products.ts:130", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_audit-generic-products.ts:130"}, "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-7574e77715e3e44b", "name": "Stray `console.log` in TS/JS \u2014 scripts/compare-product-pricing.ts:193", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/compare-product-pricing.ts:193"}, "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-f5e96af18d47cf55", "name": "Stray `console.log` in TS/JS \u2014 scripts/backfill-activity-userid.ts:25", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-activity-userid.ts:25"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3d2744056e86bd24", "name": "Stray `console.log` in TS/JS \u2014 scripts/verify-339-coverage.ts:63", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verify-339-coverage.ts:63"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5f19082b33594171", "name": "Stray `console.log` in TS/JS \u2014 scripts/find-orphans-in-list.ts:30", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/find-orphans-in-list.ts:30"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ae86bd69c8634ca1", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-orphan-uids.ts:26", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-orphan-uids.ts:26"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b68928ffc60ea2e0", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-hs-zuper-crossref.ts:23", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-hs-zuper-crossref.ts:23"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a9741dcc40e6401d", "name": "Stray `console.log` in TS/JS \u2014 scripts/ensure-hubspot-product-props.ts:59", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/ensure-hubspot-product-props.ts:59"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-11fc3e27a8c5304a", "name": "Stray `console.log` in TS/JS \u2014 scripts/apply-brand-fixes.ts:33", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-brand-fixes.ts:33"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dcb4ac056db5fc7d", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-shadow.ts:110", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-shadow.ts:110"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-536779b19cec08ed", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-pm-flags.ts:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-pm-flags.ts:17"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-22f81837550c8968", "name": "Stray `console.log` in TS/JS \u2014 scripts/delete-unlinked-ips.ts:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/delete-unlinked-ips.ts:16"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ae8f684a6c79a29", "name": "Stray `console.log` in TS/JS \u2014 scripts/diag-deal-pms.ts:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/diag-deal-pms.ts:14"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3cf7a4211de4d98c", "name": "Stray `console.log` in TS/JS \u2014 scripts/unlink-heuristic-powerhub-links.ts:48", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/unlink-heuristic-powerhub-links.ts:48"}, "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-c77d2dc69b9767b6", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-phase1-gaps.ts:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-phase1-gaps.ts:16"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aedca1e3b60c2e87", "name": "Stray `console.log` in TS/JS \u2014 scripts/preflight-check.js:115", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/preflight-check.js:115"}, "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-4e74a82cd431739c", "name": "Stray `console.log` in TS/JS \u2014 scripts/audit-zuper-dupes.ts:44", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/audit-zuper-dupes.ts:44"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b02d363886ea8329", "name": "Stray `console.log` in TS/JS \u2014 scripts/preview-pe-digest.tsx:166", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/preview-pe-digest.tsx:166"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f236a8225dca88e9", "name": "Stray `console.log` in TS/JS \u2014 scripts/fetch-zoho-item-ids.ts:43", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fetch-zoho-item-ids.ts:43"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0ec65a6c6387aeea", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-zuper-dupes-v2.ts:93", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-zuper-dupes-v2.ts:93"}, "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-064fb19828a807f0", "name": "Stray `console.log` in TS/JS \u2014 scripts/catalog-state.ts:24", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/catalog-state.ts:24"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e82813ce5fd04f5b", "name": "Stray `console.log` in TS/JS \u2014 scripts/pull-zoho-item-ids.ts:35", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/pull-zoho-item-ids.ts:35"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3b9c486ba57d79fe", "name": "Stray `console.log` in TS/JS \u2014 scripts/aircall-backfill.ts:39", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/aircall-backfill.ts:39"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-30f180f7d4907274", "name": "Stray `console.log` in TS/JS \u2014 scripts/backfill-vendor-ids.ts:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-vendor-ids.ts:10"}, "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-20199fdd33b837d8", "name": "Stray `console.log` in TS/JS \u2014 scripts/send-weekly-compliance.ts:58", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/send-weekly-compliance.ts:58"}, "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-56f9bff5a0689961", "name": "Stray `console.log` in TS/JS \u2014 scripts/zuper-orphan-so-overlap.ts:39", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/zuper-orphan-so-overlap.ts:39"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d065d53165f88c74", "name": "Stray `console.log` in TS/JS \u2014 scripts/site-survey-missing-surveyor.ts:46", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/site-survey-missing-surveyor.ts:46"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5af939e23bbc7678", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-zuper-dupes.ts:47", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-zuper-dupes.ts:47"}, "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-8c911db0f710175f", "name": "Stray `console.log` in TS/JS \u2014 scripts/query-oleary.ts:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/query-oleary.ts:10"}, "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-9774dc7c684c6b3b", "name": "Stray `console.log` in TS/JS \u2014 scripts/_inspect-test-products.ts:32", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_inspect-test-products.ts:32"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bf46b116cb855f79", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-sop-tools-2.ts:398", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-sop-tools-2.ts:398"}, "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-22db9ebf27e4d4d8", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-property-backfill-gaps.ts:49", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-property-backfill-gaps.ts:49"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fc3edff9cfc7e498", "name": "Stray `console.log` in TS/JS \u2014 scripts/cleanup-test-catalog-items.ts:71", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/cleanup-test-catalog-items.ts:71"}, "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-f7adf51f9a7408a9", "name": "Stray `console.log` in TS/JS \u2014 scripts/query-8732.ts:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/query-8732.ts:16"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d22f1f997d601b8e", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-linked-products.ts:22", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-linked-products.ts:22"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d5118dd0e1218420", "name": "Stray `console.log` in TS/JS \u2014 scripts/list-zoho-sos.ts:35", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/list-zoho-sos.ts:35"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-98d4d659cdd46fd3", "name": "Stray `console.log` in TS/JS \u2014 scripts/batch-rtb-pipeline.ts:60", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/batch-rtb-pipeline.ts:60"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-01548acec409fbc5", "name": "Stray `console.log` in TS/JS \u2014 scripts/investigate-silfab-and-gaps.ts:23", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/investigate-silfab-and-gaps.ts:23"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-31cca52876766208", "name": "Stray `console.log` in TS/JS \u2014 scripts/_pull-hubspot-manufacturer-enum.ts:41", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_pull-hubspot-manufacturer-enum.ts:41"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-734738a2ffcb8022", "name": "Stray `console.log` in TS/JS \u2014 scripts/apply-ahj-utility-approvals.ts:71", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-ahj-utility-approvals.ts:71"}, "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-5439111cc8c62a46", "name": "Stray `console.log` in TS/JS \u2014 scripts/categorize-unlinked-hs.ts:148", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/categorize-unlinked-hs.ts:148"}, "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-a3c4d99e08c2b6cd", "name": "Stray `console.log` in TS/JS \u2014 scripts/backfill-zoho-item-ids.ts:26", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-zoho-item-ids.ts:26"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8c9cb34fed2ce6bd", "name": "Stray `console.log` in TS/JS \u2014 scripts/merge-brand-dupes.ts:47", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/merge-brand-dupes.ts:47"}, "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-5ae9886072b75b17", "name": "Stray `console.log` in TS/JS \u2014 scripts/backfill-so-deal-ids.ts:77", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-so-deal-ids.ts:77"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fe2aa617a5357c78", "name": "Stray `console.log` in TS/JS \u2014 scripts/find-brand-conflicts.ts:45", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/find-brand-conflicts.ts:45"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9363316738932758", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-sop-drafts.ts:798", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-sop-drafts.ts:798"}, "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-b6f5a904cd6aad25", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-hyundai-lightspeed.ts:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-hyundai-lightspeed.ts:18"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-395b88c210ef9de3", "name": "Stray `console.log` in TS/JS \u2014 scripts/_create-zuper-product-customfields.ts:125", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_create-zuper-product-customfields.ts:125"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-397696806502b59f", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-zoho-update.ts:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-zoho-update.ts:7"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-182f53a50917f447", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-ooo-bot-config.ts:53", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-ooo-bot-config.ts:53"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-30247733309c5c7c", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-remaining-gaps.ts:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-remaining-gaps.ts:17"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f0288d049677930a", "name": "Stray `console.log` in TS/JS \u2014 scripts/analyze-real-hs-products.ts:78", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/analyze-real-hs-products.ts:78"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7580adc4ecba864e", "name": "Stray `console.log` in TS/JS \u2014 scripts/backfill-eagleview-from-gmail.ts:337", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-eagleview-from-gmail.ts:337"}, "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-c7af426592da8742", "name": "Stray `console.log` in TS/JS \u2014 scripts/pe-checklist.ts:118", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/pe-checklist.ts:118"}, "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-b691d94e3b2e6132", "name": "Stray `console.log` in TS/JS \u2014 scripts/_backfill-hubspot-manufacturer-enum.ts:103", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_backfill-hubspot-manufacturer-enum.ts:103"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1be8b0a0abbd3f63", "name": "Stray `console.log` in TS/JS \u2014 scripts/unlinked-counts.ts:65", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/unlinked-counts.ts:65"}, "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-5be7b054a49ebe5f", "name": "Stray `console.log` in TS/JS \u2014 scripts/backfill-zuper-hs-ids.ts:22", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-zuper-hs-ids.ts:22"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a881c2c6e91c764c", "name": "Stray `console.log` in TS/JS \u2014 scripts/zuper-hs-mismatch-report.ts:204", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/zuper-hs-mismatch-report.ts:204"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-93acbd86045b37d2", "name": "Stray `console.log` in TS/JS \u2014 scripts/compose-equipment-photo.ts:218", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/compose-equipment-photo.ts:218"}, "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-f1b3c0a6c78d932d", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-pipeline-results.ts:47", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-pipeline-results.ts:47"}, "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-3c72ee157606dae5", "name": "Stray `console.log` in TS/JS \u2014 scripts/ip-link-counts.ts:19", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/ip-link-counts.ts:19"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-801b72298c33afee", "name": "Stray `console.log` in TS/JS \u2014 scripts/push-all-zoho-zuper-ids.ts:22", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/push-all-zoho-zuper-ids.ts:22"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-696e31fcc7758abb", "name": "Stray `console.log` in TS/JS \u2014 scripts/_pull-hubspot-product-properties.ts:41", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_pull-hubspot-product-properties.ts:41"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-449c80f196c7103f", "name": "Stray `console.log` in TS/JS \u2014 scripts/_zuper-ratelimit-probe.ts:30", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_zuper-ratelimit-probe.ts:30"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-44db3091372757e3", "name": "Stray `console.log` in TS/JS \u2014 scripts/verify-full-linkage.ts:23", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verify-full-linkage.ts:23"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d4ad4ed1cf230935", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-sop-action-queues.ts:330", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-sop-action-queues.ts:330"}, "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-939fcf12899ea95f", "name": "Stray `console.log` in TS/JS \u2014 scripts/_zoho-search.ts:46", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_zoho-search.ts:46"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5b2718456f851198", "name": "Stray `console.log` in TS/JS \u2014 scripts/_create-zoho-categories.ts:82", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_create-zoho-categories.ts:82"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-51e4588f4e394b5e", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-silfab-mismatch.ts:21", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-silfab-mismatch.ts:21"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4cf2d89048ab8092", "name": "Stray `console.log` in TS/JS \u2014 scripts/_check-missing-warehouse-items.ts:43", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_check-missing-warehouse-items.ts:43"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f3d302eabca6df8c", "name": "Stray `console.log` in TS/JS \u2014 scripts/pe-task-list.ts:172", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/pe-task-list.ts:172"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-64415ebdffd3f481", "name": "Stray `console.log` in TS/JS \u2014 scripts/_execute-zoho-orphan-matches.ts:89", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_execute-zoho-orphan-matches.ts:89"}, "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-c363a92ba90e69f5", "name": "Stray `console.log` in TS/JS \u2014 scripts/retry-phase3-slow.ts:27", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/retry-phase3-slow.ts:27"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-55c73304c8622666", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-qb-products.ts:71", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-qb-products.ts:71"}, "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-185af49a5f1996cf", "name": "Stray `console.log` in TS/JS \u2014 scripts/create-hs-crosslink-props.ts:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/create-hs-crosslink-props.ts:16"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7f807e8826d81ca4", "name": "Stray `console.log` in TS/JS \u2014 scripts/review-2026-sos.ts:87", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/review-2026-sos.ts:87"}, "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-b696f216e3ab7ef2", "name": "Stray `console.log` in TS/JS \u2014 scripts/_create-shit-show-properties.ts:77", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_create-shit-show-properties.ts:77"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1284b72e60892c22", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-zuper-fetch.ts:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-zuper-fetch.ts:15"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bed83297b486c22c", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-sop-accounting.ts:218", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-sop-accounting.ts:218"}, "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-0f7d16b60a9cc2d6", "name": "Stray `console.log` in TS/JS \u2014 scripts/list-unlinked-hs-products.ts:33", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/list-unlinked-hs-products.ts:33"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f42ffd60459598ef", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-ip-naming.ts:70", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-ip-naming.ts:70"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a6de12cc92dd89c5", "name": "Stray `console.log` in TS/JS \u2014 scripts/backfill-zoho-product-photos.ts:96", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-zoho-product-photos.ts:96"}, "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-b964afaeb36cba1e", "name": "Stray `console.log` in TS/JS \u2014 scripts/_verify-so-outliers.ts:99", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_verify-so-outliers.ts:99"}, "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-6ee8bfd0983602e0", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-sop-scheduling.ts:294", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-sop-scheduling.ts:294"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-37e3f8f2b034312e", "name": "Stray `console.log` in TS/JS \u2014 scripts/backfill-zoho-item-fields.ts:33", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-zoho-item-fields.ts:33"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7bcfe39b8a4fa8d0", "name": "Stray `console.log` in TS/JS \u2014 scripts/_check-readiness-runs.ts:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_check-readiness-runs.ts:15"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-04bdf5c2d52c690e", "name": "Stray `console.log` in TS/JS \u2014 scripts/backfill-powerhub-crosslinks.ts:41", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-powerhub-crosslinks.ts:41"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f70673c118e9457f", "name": "Stray `console.log` in TS/JS \u2014 scripts/fetch-ops-sos.ts:107", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fetch-ops-sos.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-f893bc80417c7b9e", "name": "Stray `console.log` in TS/JS \u2014 scripts/dry-run-live-mode.ts:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/dry-run-live-mode.ts:17"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-34731e43a463ff9f", "name": "Stray `console.log` in TS/JS \u2014 scripts/_pe-rejected-docs-by-deal-gdoc.ts:70", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_pe-rejected-docs-by-deal-gdoc.ts:70"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cacf7a3ea5f7eb88", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-zoho-zuper-crosslink.ts:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-zoho-zuper-crosslink.ts:18"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-594c65fdb2f035ca", "name": "Stray `console.log` in TS/JS \u2014 scripts/list-all-gaps-with-dupes.ts:154", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/list-all-gaps-with-dupes.ts:154"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-12977a033c7cdfac", "name": "Stray `console.log` in TS/JS \u2014 scripts/zoho-create-ip-field.ts:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/zoho-create-ip-field.ts:15"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-67fc09b11cda1b84", "name": "Stray `console.log` in TS/JS \u2014 scripts/match-current-hs-to-ips.ts:104", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/match-current-hs-to-ips.ts:104"}, "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-ee6a4bc4ff0ec984", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-sop-forecast.ts:222", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-sop-forecast.ts:222"}, "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-1db4719af4f19f34", "name": "Stray `console.log` in TS/JS \u2014 scripts/_audit-orphan-usage-2026.ts:120", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_audit-orphan-usage-2026.ts:120"}, "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-7f43742b07d8cb3f", "name": "Stray `console.log` in TS/JS \u2014 scripts/compare-so-items-inventory.ts:164", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/compare-so-items-inventory.ts:164"}, "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-7a59f3b40f9489a3", "name": "Stray `console.log` in TS/JS \u2014 scripts/_brand-dedup-analysis.ts:48", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_brand-dedup-analysis.ts:48"}, "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-769a651497b655de", "name": "Stray `console.log` in TS/JS \u2014 scripts/compliance-shadow-compare.ts:29", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/compliance-shadow-compare.ts:29"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3a226767890d5e81", "name": "Stray `console.log` in TS/JS \u2014 scripts/query-users.ts:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/query-users.ts:15"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1ac08ecc569950e6", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-on-call-pools.ts:59", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-on-call-pools.ts:59"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-942d4df483991fc0", "name": "Stray `console.log` in TS/JS \u2014 scripts/_standardize-brand-casing.ts:48", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_standardize-brand-casing.ts:48"}, "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-0da3a8e898ffa8dc", "name": "Stray `console.log` in TS/JS \u2014 scripts/diagnose-stage-stuck.ts:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/diagnose-stage-stuck.ts:20"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7eef01bc234b6ad2", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-zoho-single.ts:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-zoho-single.ts:7"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7728bb2eb7e95373", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-sop-tools.ts:245", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-sop-tools.ts:245"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6a090c191f0dc0a6", "name": "Stray `console.log` in TS/JS \u2014 scripts/diagnose-zeros.ts:35", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/diagnose-zeros.ts:35"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0505f616a77f1a9a", "name": "Stray `console.log` in TS/JS \u2014 scripts/cancel-wrong-scope-flags.ts:46", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/cancel-wrong-scope-flags.ts:46"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-604654f064c27acf", "name": "Stray `console.log` in TS/JS \u2014 scripts/clean-names-and-match-hs.ts:69", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/clean-names-and-match-hs.ts:69"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-53d5cf26a78a1140", "name": "Stray `console.log` in TS/JS \u2014 scripts/cleanup-bare-property-dupes.ts:93", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/cleanup-bare-property-dupes.ts:93"}, "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-376658c323522fd0", "name": "Stray `console.log` in TS/JS \u2014 prisma/seed-goals.ts:75", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 prisma/seed-goals.ts:75"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-40c94b139a9a67d8", "name": "Stray `console.log` in TS/JS \u2014 .claude/skills/site-survey-readiness-workspace/iteration-1/single-project-by-proj-number/", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 .claude/skills/site-survey-readiness-workspace/iteration-1/single-project-by-proj-number/with_skill/outputs/list-survey-files.ts:69"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-30bea1f8de747cbf", "name": "Stray `console.log` in TS/JS \u2014 .claude/skills/site-survey-readiness/scripts/list-drive-files.ts:120", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 .claude/skills/site-survey-readiness/scripts/list-drive-files.ts:120"}, "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-decf8aab7ae02769", "name": "Icon-only button without accessible name \u2014 public/solar-surveyor/assets/index-CDmJaT6T.js:57", "shortDescription": {"text": "Icon-only button without accessible name \u2014 public/solar-surveyor/assets/index-CDmJaT6T.js:57"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fbb7e4583d465601", "name": "Stray `console.log` in TS/JS \u2014 src/auth.ts:58", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/auth.ts:58"}, "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-e6dd20c4e27b3367", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/PropertyDrawer.tsx:194", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/PropertyDrawer.tsx:194"}, "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-f54b840adb0683eb", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/GlobalSearch.tsx:285", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/GlobalSearch.tsx:285"}, "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-ec64e584ee3312da", "name": "Stray `console.log` in TS/JS \u2014 src/components/AuthSync.tsx:30", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/AuthSync.tsx:30"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-80623d57ffaac014", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/BomHistoryDrawer.tsx:130", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/BomHistoryDrawer.tsx:130"}, "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-59d9d3e3cf3fecc2", "name": "Stray `console.log` in TS/JS \u2014 src/components/ServiceWorkerRegistration.tsx:22", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/ServiceWorkerRegistration.tsx:22"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bfdd1016b3230c02", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/UserMenu.tsx:121", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/UserMenu.tsx:121"}, "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-3d7a78275a093dcd", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/DashboardShell.tsx:352", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/DashboardShell.tsx:352"}, "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-4fca42e3123e12f0", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/FlagProjectModal.tsx:165", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/FlagProjectModal.tsx:165"}, "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-2aa926849378134a", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin-shell/AdminSearch.tsx:237", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin-shell/AdminSearch.tsx:237"}, "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-a6becbf5cb4cccd7", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin-shell/AdminSidebar.tsx:100", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin-shell/AdminSidebar.tsx:100"}, "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-1b3a98fa36faa584", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin-shell/AdminDetailHeader.tsx:13", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin-shell/AdminDetailHeader.tsx:13"}, "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-d65c7bfc1dea67bb", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/on-call/PublishCard.tsx:97", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/on-call/PublishCard.tsx:97"}, "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-58cd53073dc84ca5", "name": "Icon-only button without accessible name \u2014 src/components/on-call/CallLogModal.tsx:45", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/components/on-call/CallLogModal.tsx:45"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6880942709ccc448", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/on-call/OnCallMonthClient.tsx:179", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/on-call/OnCallMonthClient.tsx:179"}, "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-f73e5bccbad8ce39", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/comms/CommsIncomingFeed.tsx:67", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/comms/CommsIncomingFeed.tsx:67"}, "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-dfe95af767559f67", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/comms/CommsProjectView.tsx:204", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/comms/CommsProjectView.tsx:204"}, "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-4159097f66a2e1eb", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/property/PropertyEquipmentTab.tsx:190", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/property/PropertyEquipmentTab.tsx:190"}, "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-ce1e53e249a435a7", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/property/PropertyDealsTab.tsx:99", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/property/PropertyDealsTab.tsx:99"}, "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-cc80ad5e8ee3e610", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/property/PropertyScheduleTab.tsx:146", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/property/PropertyScheduleTab.tsx:146"}, "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-6d6288092d24ec56", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/property/PropertyTicketsTab.tsx:79", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/property/PropertyTicketsTab.tsx:79"}, "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-877087620b0a68fc", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/property/PropertyActivityTab.tsx:150", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/property/PropertyActivityTab.tsx:150"}, "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-7375893fc69d2b24", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/property/PropertyHubHeader.tsx:62", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/property/PropertyHubHeader.tsx:62"}, "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-83816f9b1c7bb481", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/property/PropertyMonitoringTab.tsx:103", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/property/PropertyMonitoringTab.tsx:103"}, "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-5a3f7281166894f8", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/property/PropertyJobsTab.tsx:108", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/property/PropertyJobsTab.tsx:108"}, "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-448084c82c6c98a4", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/property/PropertyPhotosTab.tsx:104", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/property/PropertyPhotosTab.tsx:104"}, "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-83c84607dbe6dd7a", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/ui/CapacityHeatmap.tsx:128", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ui/CapacityHeatmap.tsx:128"}, "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-ef51ba44cb550ad6", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/ui/DrilldownMetricCard.tsx:149", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ui/DrilldownMetricCard.tsx:149"}, "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-860f5dc45edd0235", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/catalog/DetailsStep.tsx:341", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/catalog/DetailsStep.tsx:341"}, "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-94c19e240b902910", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/catalog/DedupPanel.tsx:274", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/catalog/DedupPanel.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-977323a935e6be8e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/funnel/MonthlyActivityView.tsx:371", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/funnel/MonthlyActivityView.tsx:371"}, "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-19ca39ba26845937", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/funnel/AnalysisOverview.tsx:204", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/funnel/AnalysisOverview.tsx:204"}, "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-4e56216488832b35", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/my-tasks/TypeaheadPicker.tsx:96", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/my-tasks/TypeaheadPicker.tsx:96"}, "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-a7ac06c741e4131b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/pe-prep/PeChecklistCard.tsx:60", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/pe-prep/PeChecklistCard.tsx:60"}, "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-a38520aac40862bb", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/pe-prep/PePhotoGrid.tsx:54", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/pe-prep/PePhotoGrid.tsx:54"}, "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-26a8746aaeec2792", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/pe-prep/PeAuditProgress.tsx:186", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/pe-prep/PeAuditProgress.tsx:186"}, "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-f93995cafaa0f5ae", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/deal-detail/CommunicationsFeed.tsx:95", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/deal-detail/CommunicationsFeed.tsx:95"}, "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-edd95df9162d191b", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/deal-detail/CommunicationsFeed.tsx:146", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/deal-detail/CommunicationsFeed.tsx:146"}, "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-96f8c9d36649f280", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/deal-detail/TimelineEventRow.tsx:131", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/deal-detail/TimelineEventRow.tsx:131"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c86975ea05dfaeb4", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/deal-detail/TimelineEventRow.tsx:267", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/deal-detail/TimelineEventRow.tsx:267"}, "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-b5d5059ee63c37b4", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/solar-designer/AddressInput.tsx:74", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/solar-designer/AddressInput.tsx:74"}, "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-65f0600cb20c3518", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/solar-designer/SystemSummaryBar.tsx:37", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/solar-designer/SystemSummaryBar.tsx:37"}, "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-a9e395519a1ccfdc", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/solar-designer/FileUploadPanel.tsx:255", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/solar-designer/FileUploadPanel.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-0d3f4cd3460a0b54", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/solar/ProjectBrowser.tsx:244", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/solar/ProjectBrowser.tsx:244"}, "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-3574297cee038170", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/solar/wizard/StepEquipment.tsx:94", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/solar/wizard/StepEquipment.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-06b3b839bb9f647f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/solar/wizard/StepReview.tsx:232", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/solar/wizard/StepReview.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-625f1d005fac533f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/solar/scenarios/ScenarioManager.tsx:213", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/solar/scenarios/ScenarioManager.tsx:213"}, "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-d2fbec8fdf2c83b8", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/scheduler/ConstructionProjectDetailPanel.tsx:105", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/scheduler/ConstructionProjectDetailPanel.tsx:105"}, "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-b140de561540f97b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/scheduler/SubJobBreakdown.tsx:65", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/scheduler/SubJobBreakdown.tsx:65"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8ce998521169d89e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/scheduler/SubJobScheduleModal.tsx:644", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/scheduler/SubJobScheduleModal.tsx:644"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-381f89d8f6b567a5", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/scheduler/construction/ConstructionGanttView.tsx:145", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/scheduler/construction/ConstructionGanttView.tsx:145"}, "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-fe36d082ad438c7e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/scheduler/construction/ConstructionMonthView.tsx:277", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/scheduler/construction/ConstructionMonthView.tsx:277"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-189ef0fbdaa36817", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/powerhub/SiteDetail.tsx:244", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/powerhub/SiteDetail.tsx:244"}, "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-4d06afda7136d474", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/powerhub/FleetTable.tsx:187", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/powerhub/FleetTable.tsx:187"}, "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-34faf089f70ae0a9", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/pe/DocsTab.tsx:669", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/pe/DocsTab.tsx:669"}, "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-58328329afd789c8", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/pe/AnalyticsTab.tsx:728", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/pe/AnalyticsTab.tsx:728"}, "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-a99a0b441280dae8", "name": "Icon-only button without accessible name \u2014 src/components/pe/ShortPayModal.tsx:88", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/components/pe/ShortPayModal.tsx:88"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a9d14bdff970ee62", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/pe/ShortPayModal.tsx:151", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/pe/ShortPayModal.tsx:151"}, "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-da5c0450fbb83dd7", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/page.tsx:474", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/page.tsx:474"}, "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-5f3963f7975404e4", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/layout.tsx:63", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/layout.tsx:63"}, "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-c1e6ebf764ae0a36", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/triage/TriageStepper.tsx:213", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/triage/TriageStepper.tsx:213"}, "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-5031baf46f91323b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/triage/TriagePhotoCapture.tsx:179", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/triage/TriagePhotoCapture.tsx:179"}, "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-13f1f7be7f6e7c1d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/triage/TriageDealLookup.tsx:191", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/triage/TriageDealLookup.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-4acfbbe48bbe21da", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/triage/TriageReview.tsx:234", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/triage/TriageReview.tsx:234"}, "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-d73f958ebabc5d98", "name": "TODO/FIXME marker in shipping code \u2014 src/app/api/adders/route.ts:29", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/api/adders/route.ts:29"}, "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-b1a2fa5e0780f551", "name": "TODO/FIXME marker in shipping code \u2014 src/app/api/adders/[id]/route.ts:18", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/api/adders/[id]/route.ts:18"}, "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-b53b4682b3fadc8c", "name": "TODO/FIXME marker in shipping code \u2014 src/app/api/adders/[id]/retire/route.ts:8", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/api/adders/[id]/retire/route.ts:8"}, "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-e6fece59a6246810", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/install-review/route.ts:317", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/install-review/route.ts:317"}, "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-108b5335d5a77d93", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/zuper/availability/route.ts:521", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/zuper/availability/route.ts:521"}, "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-224106a459cc28aa", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/zuper/jobs/schedule/route.ts:432", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/zuper/jobs/schedule/route.ts:432"}, "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-823839699f83de75", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/zuper/jobs/schedule/confirm/route.ts:680", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/zuper/jobs/schedule/confirm/route.ts:680"}, "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-fb170aeb1560aab6", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/zuper/jobs/lookup/route.ts:473", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/zuper/jobs/lookup/route.ts:473"}, "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-623c702caa6578ea", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/zuper/jobs/by-category/route.ts:103", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/zuper/jobs/by-category/route.ts:103"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0b0fc00d998c74a7", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/accounting/pe-docs/sync/route.ts:111", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/accounting/pe-docs/sync/route.ts:111"}, "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-991408977a10b237", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/accounting/pe-docs/csv-import/route.ts:73", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/accounting/pe-docs/csv-import/route.ts:73"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4fcbb0e558b3ed64", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/accounting/payment-tracking/route.ts:90", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/accounting/payment-tracking/route.ts:90"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d9528053617ea4a2", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/accounting/pe-deals/route.ts:382", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/accounting/pe-deals/route.ts:382"}, "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-c9eb9db339fc6dcc", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/reviews/run/route.ts:102", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/reviews/run/route.ts:102"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-192278c80925d439", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/crew/route.ts:381", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/crew/route.ts:381"}, "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-a4275e31895844f8", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/deployment/route.ts:94", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/deployment/route.ts:94"}, "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-2127b0aace69753b", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/daily-focus/route.ts:47", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/daily-focus/route.ts:47"}, "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-ac336ead6ae29036", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/office-performance-warm/route.ts:112", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/office-performance-warm/route.ts:112"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bed8b00a9b13bc5a", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/pe-invoice-audit/route.ts:293", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/pe-invoice-audit/route.ts:293"}, "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-fb5bc5353e3c37df", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/admin-workflow-cleanup/route.ts:64", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/admin-workflow-cleanup/route.ts:64"}, "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-0bc408fa79d9814e", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/goals-digest/route.ts:108", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/goals-digest/route.ts:108"}, "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-30bc98d353ba2943", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/enphase-status-check/route.ts:74", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/enphase-status-check/route.ts:74"}, "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-49f771a7b1be8e55", "name": "TODO/FIXME marker in shipping code \u2014 src/app/api/sop/proposals/route.ts:122", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/api/sop/proposals/route.ts:122"}, "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-9c87d77b1b6ad497", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/portal/survey/[token]/reschedule/route.ts:369", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/portal/survey/[token]/reschedule/route.ts:369"}, "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-b2489891915c1fd8", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/portal/survey/[token]/cancel/route.ts:224", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/portal/survey/[token]/cancel/route.ts:224"}, "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-6c4abb43ed0041d6", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/portal/survey/[token]/book/route.ts:396", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/portal/survey/[token]/book/route.ts:396"}, "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-760b2eab3eeb99f5", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/hubspot/inspection-metrics/route.ts:312", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/hubspot/inspection-metrics/route.ts:312"}, "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-2656ea775c9b2b61", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/properties/workflow-sync/route.ts:91", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/properties/workflow-sync/route.ts:91"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e3f8c9eb50429417", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/solar/weather/route.ts:99", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/solar/weather/route.ts:99"}, "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-941f679d80f71910", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/solar/equipment/route.ts:134", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/solar/equipment/route.ts:134"}, "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-12bde586b8eb3329", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/solar/equipment/[id]/route.ts:126", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/solar/equipment/[id]/route.ts:126"}, "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-f0bf781acfb666ae", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/solar/shade/route.ts:149", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/solar/shade/route.ts:149"}, "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-db3c5c2bb19051a7", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/webhooks/zuper/admin-workflows/route.ts:121", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhooks/zuper/admin-workflows/route.ts:121"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c5c56d9c7b156d7a", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/webhooks/hubspot/install-review/route.ts:133", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhooks/hubspot/install-review/route.ts:133"}, "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-7192ed5ad4cb805a", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/webhooks/hubspot/site-survey-readiness/route.ts:212", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhooks/hubspot/site-survey-readiness/route.ts:212"}, "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-5841efca4475cedd", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/webhooks/hubspot/fdr-check/route.ts:203", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhooks/hubspot/fdr-check/route.ts:203"}, "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-fd13b4f536a4935a", "name": "TODO/FIXME marker in shipping code \u2014 src/app/api/webhooks/hubspot/design-review/route.ts:153", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/api/webhooks/hubspot/design-review/route.ts:153"}, "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-7438ba4ebf018d4a", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/webhooks/hubspot/design-review/route.ts:156", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhooks/hubspot/design-review/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-119d61d659756e81", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/webhooks/hubspot/design-complete/route.ts:95", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhooks/hubspot/design-complete/route.ts:95"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d99f76780e17616b", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/deals/route.ts:45", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/deals/route.ts:45"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8919f72dadae2d9a", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/deals/[dealId]/photos/route.ts:21", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/deals/[dealId]/photos/route.ts:21"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aeb50f616986b2a8", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/service-unscheduled/page.tsx:318", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/service-unscheduled/page.tsx:318"}, "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-aa7c596d33c40926", "name": "Icon-only button without accessible name \u2014 src/app/dashboards/pm-action-queue/PmActionQueueClient.tsx:478", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/app/dashboards/pm-action-queue/PmActionQueueClient.tsx:478"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-de9b0848ae705282", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/pm-action-queue/PmActionQueueClient.tsx:383", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/pm-action-queue/PmActionQueueClient.tsx:383"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-068df202ab102091", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/inspection-scheduler/page.tsx:1263", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/inspection-scheduler/page.tsx:1263"}, "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-2c08d81f2645c9b8", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/inventory/page.tsx:645", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/inventory/page.tsx:645"}, "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-f4c3113590501812", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/inventory/cost-audit/page.tsx:744", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/inventory/cost-audit/page.tsx:744"}, "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-47353b0a282abfcd", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/roofing-scheduler/page.tsx:487", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/roofing-scheduler/page.tsx:487"}, "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-01a94009b9f78dfc", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/inspection-metrics/page.tsx:616", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/inspection-metrics/page.tsx:616"}, "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-e01445588543cbea", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/adders/AdderRevisionsDrawer.tsx:103", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/adders/AdderRevisionsDrawer.tsx:103"}, "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-8c3f57983ff9194d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/ai/AISkillsHub.tsx:216", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/ai/AISkillsHub.tsx:216"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a7d51dd0ef3dab46", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/site-survey-scheduler/page.tsx:1951", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/site-survey-scheduler/page.tsx:1951"}, "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-f8ba0f720fc660cc", "name": "Stray `console.log` in TS/JS \u2014 src/app/dashboards/site-survey-scheduler/page.tsx:1528", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/dashboards/site-survey-scheduler/page.tsx:1528"}, "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-89b43979b94f3245", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/site-survey-scheduler/my-availability.tsx:546", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/site-survey-scheduler/my-availability.tsx:546"}, "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-1478158a21115675", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/permit-hub/PermitQueue.tsx:197", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/permit-hub/PermitQueue.tsx:197"}, "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-f9298bb161402ea7", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/permit-hub/tabs/CorrespondenceTab.tsx:67", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/permit-hub/tabs/CorrespondenceTab.tsx:67"}, "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-eb4712e4b85576da", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/pe-report/page.tsx:1266", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/pe-report/page.tsx:1266"}, "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-0776f76dc37deab4", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/service-scheduler/page.tsx:1019", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/service-scheduler/page.tsx:1019"}, "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-9709305e98b49c14", "name": "Icon-only button without accessible name \u2014 src/app/dashboards/pricing-calculator/page.tsx:93", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/app/dashboards/pricing-calculator/page.tsx:93"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8f5d27cdf81daf96", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/pricing-calculator/page.tsx:96", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/pricing-calculator/page.tsx:96"}, "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-313f641f0a5f3fff", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/forecast-accuracy/page.tsx:135", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/forecast-accuracy/page.tsx:135"}, "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-1b2c9e230575e3a7", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/timeline/page.tsx:308", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/timeline/page.tsx:308"}, "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-30a1c453dbf0f382", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/catalog/page.tsx:1356", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/catalog/page.tsx:1356"}, "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-37bbea5d286dab7b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/design-pipeline-funnel/page.tsx:360", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/design-pipeline-funnel/page.tsx:360"}, "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-2282c6c5cec17cd6", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/construction-scheduler/page.tsx:2084", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/construction-scheduler/page.tsx:2084"}, "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-19bae53e3fefeeb3", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/locations/page.tsx:183", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/locations/page.tsx:183"}, "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-3e9b29b795584f7d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/service-customers/page.tsx:286", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/service-customers/page.tsx:286"}, "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-a19b1ce80cc0634f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/inspections/page.tsx:655", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/inspections/page.tsx:655"}, "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-56a86c1e7b171704", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/executive/page.tsx:116", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/executive/page.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-144c5d3d4bbf3c55", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/mobile/page.tsx:126", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/mobile/page.tsx:126"}, "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-88f591d719581bac", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/office-performance/[location]/CalendarSection.ts", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/office-performance/[location]/CalendarSection.tsx:102"}, "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-792c5df00d80526f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/office-performance/[location]/CalendarWeekSectio", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/office-performance/[location]/CalendarWeekSection.tsx:59"}, "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-a54e889ea3eb115e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/office-performance/[location]/ComplianceBlock.ts", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/office-performance/[location]/ComplianceBlock.tsx:186"}, "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-d9cb6dc1802361a8", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/office-performance/[location]/Leaderboard.tsx:99", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/office-performance/[location]/Leaderboard.tsx:99"}, "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-5f0b8817ef85f94e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/office-performance/[location]/DealList.tsx:102", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/office-performance/[location]/DealList.tsx:102"}, "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-53bce2e74a02e053", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/at-risk/page.tsx:398", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/at-risk/page.tsx:398"}, "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-c9a78a0d6b8ac1ec", "name": "Icon-only button without accessible name \u2014 src/app/dashboards/product-requests-review/EquipmentRequestDrawer.tsx:118", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/app/dashboards/product-requests-review/EquipmentRequestDrawer.tsx:118"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ced436755e366662", "name": "Icon-only button without accessible name \u2014 src/app/dashboards/product-requests-review/AdderRequestDrawer.tsx:98", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/app/dashboards/product-requests-review/AdderRequestDrawer.tsx:98"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2854e77f670e11a0", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/service-tickets/page.tsx:423", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/service-tickets/page.tsx:423"}, "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-ecc479f9518c1dab", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/admin/sop-proposals/SopProposalsClient.tsx:268", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/admin/sop-proposals/SopProposalsClient.tsx:268"}, "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-5b852eddeb31b35f", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/dashboards/admin/sop-proposals/SopProposalsClient.tsx:76", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/dashboards/admin/sop-proposals/SopProposalsClient.tsx:76"}, "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-d436060a8644025f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/admin/tech-ops-escalations/TechOpsEscalationsCli", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/admin/tech-ops-escalations/TechOpsEscalationsClient.tsx:219"}, "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-f6b4b7c2db581c83", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/admin/workflows/[id]/page.tsx:582", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/admin/workflows/[id]/page.tsx:582"}, "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-c02e48cff027ca61", "name": "React Flow <MiniMap> without dark background \u2014 src/app/dashboards/admin/workflows/[id]/canvas/page.tsx:318", "shortDescription": {"text": "React Flow <MiniMap> without dark background \u2014 src/app/dashboards/admin/workflows/[id]/canvas/page.tsx:318"}, "fullDescription": {"text": "A bare <MiniMap> renders with the vendor's white default in dark themes. Wrap the canvas in a class that overrides `.react-flow__minimap` background, or pass an explicit `style`/`maskColor`/`bgColor`.\n\nWhy: P1 in CHECKLIST.md \u2014 vendor defaults bleed light through.\nRule id: fq.minimap.no-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-329360a960c1e230", "name": "React Flow <Controls> without dark theming \u2014 src/app/dashboards/admin/workflows/[id]/canvas/page.tsx:317", "shortDescription": {"text": "React Flow <Controls> without dark theming \u2014 src/app/dashboards/admin/workflows/[id]/canvas/page.tsx:317"}, "fullDescription": {"text": "`<Controls>` ships with white buttons. Override `.react-flow__controls` and `.react-flow__controls-button` in your stylesheet or pass a styled wrapper.\n\nWhy: P1 in CHECKLIST.md \u2014 vendor defaults bleed light through.\nRule id: fq.controls.no-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-60e83b0852b676c0", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/admin/workflows/runs/page.tsx:137", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/admin/workflows/runs/page.tsx:137"}, "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-b5290f0650b20733", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/bom/page.tsx:769", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/bom/page.tsx:769"}, "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-c109eecb1cf25186", "name": "Stray `console.log` in TS/JS \u2014 src/app/dashboards/bom/page.tsx:1427", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/dashboards/bom/page.tsx:1427"}, "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-679017b3078c7d72", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/survey-metrics/page.tsx:324", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/survey-metrics/page.tsx:324"}, "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-cba3cc752b5b3384", "name": "TODO/FIXME marker in shipping code \u2014 src/app/dashboards/solar-designer/page.tsx:131", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/dashboards/solar-designer/page.tsx:131"}, "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-9befe1744eef8418", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/zuper-status-comparison/page.tsx:682", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/zuper-status-comparison/page.tsx:682"}, "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-21dce52c861553a3", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/service/page.tsx:619", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/service/page.tsx:619"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cde5e1c9f0593756", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/eagleview-test/page.tsx:222", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/eagleview-test/page.tsx:222"}, "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-eb0170d6cf188157", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/ic-hub/IcQueue.tsx:186", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/ic-hub/IcQueue.tsx:186"}, "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-54eec4b20c5d816f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/ic-hub/tabs/CorrespondenceTab.tsx:68", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/ic-hub/tabs/CorrespondenceTab.tsx:68"}, "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-abe0d2d999e761c8", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/eagleview-orders/EagleViewOrdersClient.tsx:170", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/eagleview-orders/EagleViewOrdersClient.tsx:170"}, "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-6ca88a9ca468b2dd", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/sales/page.tsx:281", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/sales/page.tsx:281"}, "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-098758998a64e93b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/pm-accountability/PmScorecardTab.tsx:124", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/pm-accountability/PmScorecardTab.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-35958a737b653585", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/roofing/page.tsx:283", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/roofing/page.tsx:283"}, "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-78747e092fc0b48a", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/payment-timeline/PaymentTimelineClient.tsx:233", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/payment-timeline/PaymentTimelineClient.tsx:233"}, "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-d00714b3f68be92e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/construction-metrics/page.tsx:332", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/construction-metrics/page.tsx:332"}, "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-361c8e641fc078d0", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/forecast-schedule/page.tsx:408", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/forecast-schedule/page.tsx:408"}, "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-271beea3bf7b1806", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/optimizer/page.tsx:318", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/optimizer/page.tsx:318"}, "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-1791e11a19cf6e0f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/shit-show-meeting/ProjectDetail.tsx:34", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/shit-show-meeting/ProjectDetail.tsx:34"}, "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-34c95d39af14ff2e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/shit-show-meeting/ProjectQueue.tsx:82", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/shit-show-meeting/ProjectQueue.tsx:82"}, "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-c408aaca80adfff7", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/shit-show-meeting/HistoryStrip.tsx:84", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/shit-show-meeting/HistoryStrip.tsx:84"}, "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-feb81d5f880aa309", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/service-catalog/page.tsx:240", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/service-catalog/page.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-91fb5845af93c3e2", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/project-pipeline-funnel/page.tsx:1049", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/project-pipeline-funnel/page.tsx:1049"}, "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-42ba70592ac6a3c5", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/equipment-backlog/page.tsx:272", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/equipment-backlog/page.tsx:272"}, "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-65a7fea88decdab5", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/dnr/page.tsx:300", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/dnr/page.tsx:300"}, "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-501b7d6d8561fa35", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/site-survey/page.tsx:438", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/site-survey/page.tsx:438"}, "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-3804909bcc7b545c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/product-comparison/page.tsx:2307", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/product-comparison/page.tsx:2307"}, "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-ee7ac9fbfffed064", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/design-engineering-funnel/page.tsx:264", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/design-engineering-funnel/page.tsx:264"}, "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-6ae8836e367f39d7", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/qc/page.tsx:312", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/qc/page.tsx:312"}, "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-d9dcf7972bd40b44", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/scheduler/page.tsx:717", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/scheduler/page.tsx:717"}, "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-83197a9ca3e9bc17", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/construction/page.tsx:415", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/construction/page.tsx:415"}, "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-17ddcd9200a43d63", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/idr-meeting/AddProjectDialog.tsx:144", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/idr-meeting/AddProjectDialog.tsx:144"}, "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-85fdb2084e8763db", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/idr-meeting/DealHistoryDetail.tsx:309", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/idr-meeting/DealHistoryDetail.tsx:309"}, "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-c7636c74774aeaf9", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/idr-meeting/EscalationQueue.tsx:115", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/idr-meeting/EscalationQueue.tsx:115"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a26e03ccc7eacf76", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/idr-meeting/ProjectDetail.tsx:183", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/idr-meeting/ProjectDetail.tsx:183"}, "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-f0d745e8fc2a2e36", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/idr-meeting/LineItemQuickActions.tsx:137", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/idr-meeting/LineItemQuickActions.tsx:137"}, "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-a6ae4d81cbbad146", "name": "Icon-only button without accessible name \u2014 src/app/dashboards/idr-meeting/AddersChecklist.tsx:259", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/app/dashboards/idr-meeting/AddersChecklist.tsx:259"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-41b93827f24d6328", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/idr-meeting/SearchResultsList.tsx:240", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/idr-meeting/SearchResultsList.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-b2d05b3b4536f1ea", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/idr-meeting/AddEscalationDialog.tsx:138", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/idr-meeting/AddEscalationDialog.tsx:138"}, "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-e5bfc11cf3c4eb91", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/service-overview/page.tsx:603", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/service-overview/page.tsx:603"}, "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-16e07756f9f5a9a2", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/incentives/page.tsx:432", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/incentives/page.tsx:432"}, "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-46345b213248a159", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/dnr-scheduler/page.tsx:483", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/dnr-scheduler/page.tsx:483"}, "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-c1d653a9aab8858e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/service-backlog/page.tsx:292", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/service-backlog/page.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-19a441758c975321", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/permitting-interconnection/page.tsx:737", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/permitting-interconnection/page.tsx:737"}, "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-cd3d9e4bf5e99b69", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/map/MorningBriefing.tsx:84", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/map/MorningBriefing.tsx:84"}, "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-3e66b16a6338d3e6", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/map/DetailPanel.tsx:118", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/map/DetailPanel.tsx:118"}, "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-603f7d73ae60da5f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/deals/DealDetailPanel.tsx:91", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/deals/DealDetailPanel.tsx:91"}, "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-7b91058a50fd7925", "name": "Icon-only button without accessible name \u2014 src/app/dashboards/deals/page.tsx:435", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/app/dashboards/deals/page.tsx:435"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-16ec9956f4ba8860", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/design-engineering/page.tsx:118", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/design-engineering/page.tsx:118"}, "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-71a5837ba994e6d9", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/page.tsx:266", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/page.tsx:266"}, "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-cd4cf07015ab742d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/security/page.tsx:176", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/security/page.tsx:176"}, "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-2f8157be00b9450d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/page-traffic/page.tsx:143", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/page-traffic/page.tsx:143"}, "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-2d8bc207f1d2a94c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/activity/page.tsx:137", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/activity/page.tsx:137"}, "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-81565bb481151f7b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/audit/page.tsx:237", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/audit/page.tsx:237"}, "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-b9b76d1c90f601c1", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/roles/page.tsx:200", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/roles/page.tsx:200"}, "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-36a8bee048a8dcfa", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/tickets/page.tsx:120", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/tickets/page.tsx:120"}, "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-fb2715678a9b82ba", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/freshservice/page.tsx:116", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/freshservice/page.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-465eccf5d18816b1", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/sop/page.tsx:710", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/sop/page.tsx:710"}, "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-ccfcd50731c6c5fd", "name": "Stray `console.log` in TS/JS \u2014 src/lib/hubspot-custom-objects.ts:232", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/hubspot-custom-objects.ts:232"}, "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-7d2e9b0b16d78d7a", "name": "Stray `console.log` in TS/JS \u2014 src/lib/email.ts:368", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/email.ts:368"}, "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-d5160f99cb25a3a7", "name": "Stray `console.log` in TS/JS \u2014 src/lib/hubspot-customer-reviews.ts:56", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/hubspot-customer-reviews.ts:56"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2a90b0646f750230", "name": "Stray `console.log` in TS/JS \u2014 src/lib/drive-plansets.ts:254", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/drive-plansets.ts:254"}, "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-070e151d0bd46928", "name": "Stray `console.log` in TS/JS \u2014 src/lib/deal-sync.ts:244", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/deal-sync.ts:244"}, "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-40860d8ce3b702f4", "name": "Stray `console.log` in TS/JS \u2014 src/lib/bom-pipeline.ts:255", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/bom-pipeline.ts:255"}, "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-3efbabfd88e776ee", "name": "Stray `console.log` in TS/JS \u2014 src/lib/bom-extract.ts:403", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/bom-extract.ts:403"}, "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-20c6c52e8ce1c2b0", "name": "Stray `console.log` in TS/JS \u2014 src/lib/google-calendar.ts:499", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/google-calendar.ts:499"}, "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-855e66191ca81c2a", "name": "Stray `console.log` in TS/JS \u2014 src/lib/payment-tracking-invoices.ts:181", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/payment-tracking-invoices.ts:181"}, "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-47b54508860361a7", "name": "Stray `console.log` in TS/JS \u2014 src/lib/idr-meeting.ts:995", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/idr-meeting.ts:995"}, "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-2f9c32e5e6f3cd75", "name": "Stray `console.log` in TS/JS \u2014 src/lib/hubspot.ts:195", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/hubspot.ts:195"}, "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-d7aae2a22582d770", "name": "Stray `console.log` in TS/JS \u2014 src/lib/zuper-call-counter.ts:85", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/zuper-call-counter.ts:85"}, "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-a52ed4bf5b677f46", "name": "Stray `console.log` in TS/JS \u2014 src/lib/hubspot-webhook-auth.ts:115", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/hubspot-webhook-auth.ts:115"}, "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-32137a26068ff918", "name": "Stray `console.log` in TS/JS \u2014 src/lib/catalog-notify.ts:75", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/catalog-notify.ts:75"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-95730a570341925a", "name": "Stray `console.log` in TS/JS \u2014 src/lib/property-sync.ts:340", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/property-sync.ts:340"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-def2254db3b13ac6", "name": "Stray `console.log` in TS/JS \u2014 src/lib/office-performance.ts:485", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/office-performance.ts:485"}, "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-98825f26536ce4a4", "name": "Stray `console.log` in TS/JS \u2014 src/lib/zuper-sync.ts:244", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/zuper-sync.ts:244"}, "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-90385c74f67d955f", "name": "Stray `console.log` in TS/JS \u2014 src/lib/zoho-customer-cache.ts:229", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/zoho-customer-cache.ts:229"}, "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-e0c30d58092e10cf", "name": "Stray `console.log` in TS/JS \u2014 src/lib/goals-pipeline.ts:67", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/goals-pipeline.ts:67"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-59edc313b8f04bcc", "name": "Stray `console.log` in TS/JS \u2014 src/lib/zuper.ts:444", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/zuper.ts:444"}, "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-38b2c48abac7b613", "name": "Stray `console.log` in TS/JS \u2014 src/lib/pe-audit-orchestrator.ts:598", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/pe-audit-orchestrator.ts:598"}, "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-9d837dedb46a5934", "name": "Stray `console.log` in TS/JS \u2014 src/lib/gmail-shared-inbox.ts:348", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/gmail-shared-inbox.ts:348"}, "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-b9ebb125151f7882", "name": "Stray `console.log` in TS/JS \u2014 src/lib/eod-summary/send.ts:94", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/eod-summary/send.ts:94"}, "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-08a8cdf4bd28ef9c", "name": "Stray `console.log` in TS/JS \u2014 src/lib/admin-workflows/fanout.ts:109", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/admin-workflows/fanout.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-4c1b0c9430938353", "name": "Stray `console.log` in TS/JS \u2014 src/lib/checks/design-review-ai.ts:292", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/checks/design-review-ai.ts:292"}, "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-e882157064722959", "name": "TODO/FIXME marker in shipping code \u2014 src/lib/solar/v12-engine/runner.ts:38", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/lib/solar/v12-engine/runner.ts:38"}, "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-93ec73ee88eed105", "name": "Dockerfile runs as root: infra/powerhub-proxy/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: infra/powerhub-proxy/Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4672a8372bc18ab6", "name": "Docker base image is tag-pinned but not digest-pinned: caddy:2-alpine", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: caddy:2-alpine"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aa5acaa49eb8315b", "name": "Containers defined but no K8s/orchestration manifest found", "shortDescription": {"text": "Containers defined but no K8s/orchestration manifest found"}, "fullDescription": {"text": "Repo has Dockerfiles/compose but no Kubernetes/Nomad manifests. If the target deployment is K8s, the manifests may live in a separate ops repo."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7fd69e71ce923e08", "name": "Insecure pattern 'direct_innerhtml_assignment' in dashboard.html:1543", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in dashboard.html:1543"}, "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-5600cddccb604a76", "name": "Possible secret in scripts/_create-zuper-product-customfields.ts", "shortDescription": {"text": "Possible secret in scripts/_create-zuper-product-customfields.ts"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-1e8fda7e8fc4a1e3", "name": "Insecure pattern 'weak_hash' in scripts/seed-sop-scheduling.ts:47", "shortDescription": {"text": "Insecure pattern 'weak_hash' in scripts/seed-sop-scheduling.ts:47"}, "fullDescription": {"text": "Found a known-risky pattern (weak_hash). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-64e1c90727d1e01c", "name": "Insecure pattern 'node_child_process' in scripts/verify-tech-ops-dissolution.mjs:3", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/verify-tech-ops-dissolution.mjs:3"}, "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-f4965ee20d4a7ffc", "name": "Insecure pattern 'document_write' in public/tsrf-calculator.html:1990", "shortDescription": {"text": "Insecure pattern 'document_write' in public/tsrf-calculator.html:1990"}, "fullDescription": {"text": "Found a known-risky pattern (document_write). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ea2d3226c412a0f3", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/tsrf-calculator.html:952", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/tsrf-calculator.html:952"}, "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-713b93511b3ba9a6", "name": "Insecure pattern 'document_write' in public/solar-surveyor/assets/index-CDmJaT6T.js:907", "shortDescription": {"text": "Insecure pattern 'document_write' in public/solar-surveyor/assets/index-CDmJaT6T.js:907"}, "fullDescription": {"text": "Found a known-risky pattern (document_write). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "low", "confidence": 1.0}}, {"id": "scanner-76765b9964ede747", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/solar-surveyor/assets/index-CDmJaT6T.js:1", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/solar-surveyor/assets/index-CDmJaT6T.js:1"}, "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-123a59c177498c15", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/dashboards/_archive/pb-install-scheduler-v2.html:427", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/dashboards/_archive/pb-install-scheduler-v2.html:427"}, "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-519c4fda161c2de9", "name": "Insecure pattern 'document_write' in public/prototypes/solar-surveyor-v11.html:4584", "shortDescription": {"text": "Insecure pattern 'document_write' in public/prototypes/solar-surveyor-v11.html:4584"}, "fullDescription": {"text": "Found a known-risky pattern (document_write). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "low", "confidence": 1.0}}, {"id": "scanner-baced7a562d13e22", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/prototypes/solar-surveyor-v11.html:689", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/prototypes/solar-surveyor-v11.html:689"}, "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-af3bf116ca350a4a", "name": "Insecure pattern 'dangerous_innerhtml' in src/components/deal-detail/CommunicationsFeed.tsx:146", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/deal-detail/CommunicationsFeed.tsx:146"}, "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-e31d7f8b84630176", "name": "Insecure pattern 'dangerous_innerhtml' in src/components/deal-detail/TimelineEventRow.tsx:267", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/deal-detail/TimelineEventRow.tsx:267"}, "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-c57dcf96d14475cd", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/layout.tsx:63", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/layout.tsx:63"}, "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-c7f7aa40ed14e192", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/sop/page.tsx:710", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/sop/page.tsx:710"}, "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-d9337904ad71be58", "name": "Insecure pattern 'domparser_html_parse' in src/lib/solar/export/pdf.ts:133", "shortDescription": {"text": "Insecure pattern 'domparser_html_parse' in src/lib/solar/export/pdf.ts:133"}, "fullDescription": {"text": "Found a known-risky pattern (domparser_html_parse). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-dd7b292c2607d48c", "name": "Insecure pattern 'local_storage_auth_token' in src/hooks/useActivityTracking.ts:13", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in src/hooks/useActivityTracking.ts:13"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cb639d9a10a47b23", "name": "package.json defines install-time lifecycle scripts", "shortDescription": {"text": "package.json defines install-time lifecycle scripts"}, "fullDescription": {"text": "preinstall/install/postinstall/prepare scripts execute during dependency installation. Review them carefully for network calls, obfuscation, shell execution, or credential access."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4601e3ad3bb28677", "name": "No CI/CD pipelines detected", "shortDescription": {"text": "No CI/CD pipelines detected"}, "fullDescription": {"text": "No GitHub Actions, GitLab CI, or CircleCI configs found. Without CI you can't gate deploys on tests/lints."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a6854a54e5266b3b", "name": "Very large file: scripts/generate-dev-guide.cjs (935 lines)", "shortDescription": {"text": "Very large file: scripts/generate-dev-guide.cjs (935 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-b5ace3856c33c980", "name": "Very large file: public/solar-surveyor/assets/index-CDmJaT6T.js (925 lines)", "shortDescription": {"text": "Very large file: public/solar-surveyor/assets/index-CDmJaT6T.js (925 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-f8c10e2c38ac7689", "name": "Very large file: src/components/catalog/SyncModal.tsx (1589 lines)", "shortDescription": {"text": "Very large file: src/components/catalog/SyncModal.tsx (1589 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-721a852928f5012c", "name": "Very large file: src/components/pe/DealsTab.tsx (1385 lines)", "shortDescription": {"text": "Very large file: src/components/pe/DealsTab.tsx (1385 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-f79bd18b9d81291d", "name": "Very large file: src/components/pe/DocsTab.tsx (1582 lines)", "shortDescription": {"text": "Very large file: src/components/pe/DocsTab.tsx (1582 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-ead212aed4fb9d82", "name": "Very large file: src/components/pe/AnalyticsTab.tsx (2360 lines)", "shortDescription": {"text": "Very large file: src/components/pe/AnalyticsTab.tsx (2360 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-a2fb70b5f4dafbed", "name": "Very large file: src/app/api/zuper/availability/route.ts (1425 lines)", "shortDescription": {"text": "Very large file: src/app/api/zuper/availability/route.ts (1425 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-39e53c50194cab62", "name": "Very large file: src/app/api/zuper/jobs/schedule/route.ts (2706 lines)", "shortDescription": {"text": "Very large file: src/app/api/zuper/jobs/schedule/route.ts (2706 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-4bbd0c5634b08c8c", "name": "Very large file: src/app/api/zuper/jobs/schedule/confirm/route.ts (1567 lines)", "shortDescription": {"text": "Very large file: src/app/api/zuper/jobs/schedule/confirm/route.ts (1567 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-9667ac366f8c4112", "name": "Very large file: src/app/api/accounting/pe-analytics/route.ts (1182 lines)", "shortDescription": {"text": "Very large file: src/app/api/accounting/pe-analytics/route.ts (1182 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-c2193f3292d40156", "name": "Very large file: src/app/api/products/comparison/route.ts (2328 lines)", "shortDescription": {"text": "Very large file: src/app/api/products/comparison/route.ts (2328 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-6f26433f5c769b46", "name": "Very large file: src/app/dashboards/de-metrics/page.tsx (1429 lines)", "shortDescription": {"text": "Very large file: src/app/dashboards/de-metrics/page.tsx (1429 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-3aff5806f3e3f581", "name": "Very large file: src/app/dashboards/inspection-scheduler/page.tsx (2176 lines)", "shortDescription": {"text": "Very large file: src/app/dashboards/inspection-scheduler/page.tsx (2176 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-3fe23ee4a9ef4500", "name": "Very large file: src/app/dashboards/inventory/page.tsx (1667 lines)", "shortDescription": {"text": "Very large file: src/app/dashboards/inventory/page.tsx (1667 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-e73163dd657642da", "name": "Very large file: src/app/dashboards/site-survey-scheduler/page.tsx (3454 lines)", "shortDescription": {"text": "Very large file: src/app/dashboards/site-survey-scheduler/page.tsx (3454 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-8f01362c02e3c6da", "name": "Very large file: src/app/dashboards/zuper-compliance/page.tsx (1736 lines)", "shortDescription": {"text": "Very large file: src/app/dashboards/zuper-compliance/page.tsx (1736 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-0cf7fb1262d9f944", "name": "Very large file: src/app/dashboards/pe-report/page.tsx (1369 lines)", "shortDescription": {"text": "Very large file: src/app/dashboards/pe-report/page.tsx (1369 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-4c2c0b0f2ef3d0e6", "name": "Very large file: src/app/dashboards/service-scheduler/page.tsx (1375 lines)", "shortDescription": {"text": "Very large file: src/app/dashboards/service-scheduler/page.tsx (1375 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-e5e825f0503ce5bb", "name": "Very large file: src/app/dashboards/catalog/page.tsx (2157 lines)", "shortDescription": {"text": "Very large file: src/app/dashboards/catalog/page.tsx (2157 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-1187cdc19f7c8d30", "name": "Very large file: src/app/dashboards/construction-scheduler/page.tsx (2726 lines)", "shortDescription": {"text": "Very large file: src/app/dashboards/construction-scheduler/page.tsx (2726 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-3d226ade116f0199", "name": "Very large file: src/app/dashboards/inspections/page.tsx (1089 lines)", "shortDescription": {"text": "Very large file: src/app/dashboards/inspections/page.tsx (1089 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-f10058dcad5c1f0f", "name": "Very large file: src/app/dashboards/bom/page.tsx (4240 lines)", "shortDescription": {"text": "Very large file: src/app/dashboards/bom/page.tsx (4240 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-cafd589737b4b532", "name": "Very large file: src/app/dashboards/zuper-status-comparison/page.tsx (1728 lines)", "shortDescription": {"text": "Very large file: src/app/dashboards/zuper-status-comparison/page.tsx (1728 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-8c1f05e872f5a048", "name": "Very large file: src/app/dashboards/optimizer/page.tsx (1397 lines)", "shortDescription": {"text": "Very large file: src/app/dashboards/optimizer/page.tsx (1397 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-74989e84ec6e5cf2", "name": "Very large file: src/app/dashboards/project-pipeline-funnel/page.tsx (1647 lines)", "shortDescription": {"text": "Very large file: src/app/dashboards/project-pipeline-funnel/page.tsx (1647 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-56e299a80bfaf648", "name": "Very large file: src/app/dashboards/product-comparison/page.tsx (2854 lines)", "shortDescription": {"text": "Very large file: src/app/dashboards/product-comparison/page.tsx (2854 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-82ef7bf827ba67e9", "name": "Very large file: src/app/dashboards/scheduler/page.tsx (7176 lines)", "shortDescription": {"text": "Very large file: src/app/dashboards/scheduler/page.tsx (7176 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-48f29101cc7816a4", "name": "Very large file: src/app/dashboards/pe/legacy/page.tsx (1425 lines)", "shortDescription": {"text": "Very large file: src/app/dashboards/pe/legacy/page.tsx (1425 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-b2143d28d2fa3686", "name": "Very large file: src/app/guide/page.tsx (995 lines)", "shortDescription": {"text": "Very large file: src/app/guide/page.tsx (995 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-b3bcdc077c85d09c", "name": "Very large file: src/lib/shop-health.ts (1425 lines)", "shortDescription": {"text": "Very large file: src/lib/shop-health.ts (1425 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-fa33f1fe281effbc", "name": "Very large file: src/lib/email.ts (2026 lines)", "shortDescription": {"text": "Very large file: src/lib/email.ts (2026 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-aae5323e8061731c", "name": "Very large file: src/lib/product-updates.ts (1235 lines)", "shortDescription": {"text": "Very large file: src/lib/product-updates.ts (1235 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-44e830ef931d718c", "name": "Very large file: src/lib/zoho-inventory.ts (1817 lines)", "shortDescription": {"text": "Very large file: src/lib/zoho-inventory.ts (1817 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-dc6ea1eb558fcbc5", "name": "Very large file: src/lib/hubspot.ts (3867 lines)", "shortDescription": {"text": "Very large file: src/lib/hubspot.ts (3867 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-37a4037245456131", "name": "Very large file: src/lib/property-sync.ts (1527 lines)", "shortDescription": {"text": "Very large file: src/lib/property-sync.ts (1527 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-60c78912c13b7411", "name": "Very large file: src/lib/office-performance.ts (2236 lines)", "shortDescription": {"text": "Very large file: src/lib/office-performance.ts (2236 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-548145dabcfce306", "name": "Very large file: src/lib/zuper.ts (2335 lines)", "shortDescription": {"text": "Very large file: src/lib/zuper.ts (2335 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-ce45a8a96f116593", "name": "Very large file: src/lib/pm-flag-rules.ts (1433 lines)", "shortDescription": {"text": "Very large file: src/lib/pm-flag-rules.ts (1433 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-e2354aff3eeb678f", "name": "Very large file: src/lib/roles.ts (1720 lines)", "shortDescription": {"text": "Very large file: src/lib/roles.ts (1720 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-feafb0b0f67bee69", "name": "Very large file: src/lib/pe-vision-classifier.ts (890 lines)", "shortDescription": {"text": "Very large file: src/lib/pe-vision-classifier.ts (890 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ea3b5e389d8c9c0f", "name": "Low test-to-source ratio", "shortDescription": {"text": "Low test-to-source ratio"}, "fullDescription": {"text": "360 tests / 1974 src (ratio 0.18)."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-de9b91a39c1f7873", "name": "Node manifest has dependencies but no lockfile: hubspot-extensions/src/app/cards/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: hubspot-extensions/src/app/cards/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "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 3203 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 687 placeholder/mock markers across 236 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci, lockfile. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license, ci, lockfile. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cc55229a7a3c078d", "name": "Agent authority lacks a verifier contract: .mcp.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .mcp.json"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-122f91b7f2906dc4", "name": "Agent authority lacks a verifier contract: .claude/settings.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/settings.json"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-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-a3023585d0283dfb", "name": "Agent authority lacks a verifier contract: .claude/skills/find-design-plans/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/find-design-plans/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e02f7aed2b903ffd", "name": "Agent authority lacks a verifier contract: .claude/skills/planset-bom/references/extraction-guide.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/planset-bom/references/extraction-guide.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1376b7b376e73de6", "name": "Agent authority lacks a verifier contract: .claude/skills/bom-pipeline-core/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/bom-pipeline-core/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b55743dbe6bdaae2", "name": "Agent authority lacks a verifier contract: .claude/skills/product-lookup/references/enphase.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/product-lookup/references/enphase.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-75919d23b86f936c", "name": "Agent authority lacks a verifier contract: .claude/skills/product-lookup/references/ez-solar.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/product-lookup/references/ez-solar.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f77bbb424a86a2fb", "name": "Agent authority lacks a verifier contract: .claude/skills/planset-to-so/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/planset-to-so/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f1ed9e022351b3eb", "name": "Agent authority lacks a verifier contract: .claude/skills/bom-to-so/references/post-processor-rules.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/bom-to-so/references/post-processor-rules.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6fea35b985cc6ae6", "name": "Commented-code block (5 lines) in next.config.ts:28", "shortDescription": {"text": "Commented-code block (5 lines) in next.config.ts:28"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7a7ba5edb8877fc9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/zuper-actually-unlinked.ts:28", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/zuper-actually-unlinked.ts:28"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5ce4dc8c968d4d94", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_pull-zoho-item-groups.ts:71", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_pull-zoho-item-groups.ts:71"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0a4b3d1bc09663ad", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/fix-surveyor-mismatches.ts:21", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/fix-surveyor-mismatches.ts:21"}, "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-f22bdff0207a672a", "name": "Commented-code block (5 lines) in scripts/create-hubspot-property-object.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/create-hubspot-property-object.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-7bfb6afcfbd10581", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_create-tesla-model-hubspot-props.ts:64", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_create-tesla-model-hubspot-props.ts:64"}, "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-5f0067f9f300f2bd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_fix-catalog-integrity.ts:132", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_fix-catalog-integrity.ts:132"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d2f9569a34d1f7e5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/zuper-orphan-hs-details.ts:25", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/zuper-orphan-hs-details.ts:25"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1795e5e6b363fb18", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_match-zoho-orphans.ts:82", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_match-zoho-orphans.ts:82"}, "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-92bcd84db67ce0b6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/check-notifications.mjs:134", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/check-notifications.mjs:134"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-49784f6a85f70f1f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/count-install-photos.mjs:66", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/count-install-photos.mjs:66"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6edf20ede0135f97", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/zuper-orphan-hs-links.ts:24", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/zuper-orphan-hs-links.ts:24"}, "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-05d93ff2cfea2a6d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_rebrand-generic-products.ts:54", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_rebrand-generic-products.ts:54"}, "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-ada452fa575b4b72", "name": "Legacy-named symbol `obviousLegacy` in scripts/_export-hubspot-orphan-list.ts:54", "shortDescription": {"text": "Legacy-named symbol `obviousLegacy` in scripts/_export-hubspot-orphan-list.ts:54"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5eafe2b34d6633da", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_export-hubspot-orphan-list.ts:26", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_export-hubspot-orphan-list.ts:26"}, "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-555beaa5297e9de4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/zuper-orphan-full-crossref.ts:60", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/zuper-orphan-full-crossref.ts:60"}, "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-028bd1778a98968d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/zoho-item-fields.ts:23", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/zoho-item-fields.ts:23"}, "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-cdeca0b665ee4c50", "name": "Legacy-named symbol `battery_backup` in scripts/classify-sos.ts:106", "shortDescription": {"text": "Legacy-named symbol `battery_backup` in scripts/classify-sos.ts:106"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5dd1f953e077481f", "name": "Commented-code block (5 lines) in scripts/backfill-zuper-properties.ts:6", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/backfill-zuper-properties.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-99654c2a8c8ff1fa", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_mismatch-deal-stages.ts:59", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_mismatch-deal-stages.ts:59"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-00cf8e53cac9aceb", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_delete-test-products.ts:29", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_delete-test-products.ts:29"}, "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-08e642b30e4ff1d0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/check-zuper-hs-ids.ts:26", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/check-zuper-hs-ids.ts:26"}, "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-b3459fc86835cb12", "name": "Commented-code block (5 lines) in scripts/pe-photo-submit.ts:84", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/pe-photo-submit.ts:84"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b4e5ae8932297def", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/create-ip-id-fields.ts:19", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/create-ip-id-fields.ts:19"}, "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-266b6eb401974ca9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/backfill-site-surveyor.ts:40", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/backfill-site-surveyor.ts:40"}, "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-c17b9c6901c17daf", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/zuper-tasks-vs-jobs.ts:57", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/zuper-tasks-vs-jobs.ts:57"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bf4b58bd87140dd7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_zuper-mismatch-report.ts:162", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_zuper-mismatch-report.ts:162"}, "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-8587e9c0f885dd67", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_audit-catalog-integrity.ts:92", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_audit-catalog-integrity.ts:92"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ae0ca88d5d0ccdd8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/sync-tasks.ts:104", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/sync-tasks.ts:104"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e1ae1d7d7c9213a7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/create-zoho-cf.ts:17", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/create-zoho-cf.ts:17"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-abacdc82b5b2b09e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/catalog-reconciliation-audit.ts:91", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/catalog-reconciliation-audit.ts:91"}, "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-4f63fde5e5a04196", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/match-ips-to-zuper-orphans.ts:54", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/match-ips-to-zuper-orphans.ts:54"}, "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-379ceca1bb68c122", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/fix-hyundai-zuper.ts:28", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/fix-hyundai-zuper.ts:28"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9a9c8fbb76e04620", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/backfill-ip-ids.ts:52", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/backfill-ip-ids.ts:52"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b603df7b46e67a4f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/check-zuper-naming.ts:24", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/check-zuper-naming.ts:24"}, "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-62936b4fa563389a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/seed-pe-docs.ts:93", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/seed-pe-docs.ts:93"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8b6e1670cdbabb86", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/create-ips-from-zuper-hs.ts:54", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/create-ips-from-zuper-hs.ts:54"}, "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-de555f636ffe84e9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_pull-zuper-product-schema.ts:18", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_pull-zuper-product-schema.ts:18"}, "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-e715c9fc66236fbd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/check-hs-orphans-in-zoho-zuper.ts:47", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/check-hs-orphans-in-zoho-zuper.ts:47"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-717baf7a6a0ddf12", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/inspect-zuper-products.ts:13", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/inspect-zuper-products.ts:13"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4685ea70849728d3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/create-pe-doc-properties.ts:34", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/create-pe-doc-properties.ts:34"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3bea4abc9f041145", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_pe-rejected-docs-by-team-gdoc.ts:123", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_pe-rejected-docs-by-team-gdoc.ts:123"}, "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-01075a609a5f9d2e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/site-surveyor-audit-extended.ts:51", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/site-surveyor-audit-extended.ts:51"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-23b69f188684651a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/backfill-so-warehouses.ts:33", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/backfill-so-warehouses.ts:33"}, "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-efe72eae8496f55a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/debug-zoho.ts:10", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/debug-zoho.ts:10"}, "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-61c4beb9b7f1fd58", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_pe-missing-docs-by-team-gdoc.ts:117", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_pe-missing-docs-by-team-gdoc.ts:117"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a83d0aa9059b0e09", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/site-surveyor-mismatch.ts:34", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/site-surveyor-mismatch.ts:34"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-996e7607fbdf1e73", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/get-sa-client-id.mjs:65", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/get-sa-client-id.mjs:65"}, "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-c9ca5df279a37330", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/find-orphans-in-list.ts:22", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/find-orphans-in-list.ts:22"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5457a00cddd195f7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/check-orphan-uids.ts:20", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/check-orphan-uids.ts:20"}, "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-0756b646adfee8a1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/check-hs-zuper-crossref.ts:27", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/check-hs-zuper-crossref.ts:27"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8bb7b60b447a952e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/ensure-hubspot-product-props.ts:53", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/ensure-hubspot-product-props.ts:53"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-478e05ae35e0529d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/audit-zuper-dupes.ts:33", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/audit-zuper-dupes.ts:33"}, "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-023b2acc9f274762", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/fetch-zoho-item-ids.ts:12", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/fetch-zoho-item-ids.ts:12"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-91b0140bc331f21f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/fix-zuper-dupes-v2.ts:105", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/fix-zuper-dupes-v2.ts:105"}, "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-cb97408a48dbbe17", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/zuper-orphan-so-overlap.ts:43", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/zuper-orphan-so-overlap.ts:43"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cc0471d5c20ee677", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/site-survey-missing-surveyor.ts:36", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/site-survey-missing-surveyor.ts:36"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-74f6c0e0d2e97701", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/list-zoho-sos.ts:10", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/list-zoho-sos.ts:10"}, "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-1a732cbba1700433", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/investigate-silfab-and-gaps.ts:39", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/investigate-silfab-and-gaps.ts:39"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-239559bbff442674", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_pull-hubspot-manufacturer-enum.ts:29", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_pull-hubspot-manufacturer-enum.ts:29"}, "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-77a1a6f1e3d1e9a9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/categorize-unlinked-hs.ts:26", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/categorize-unlinked-hs.ts:26"}, "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-603cf0002e77a08f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/backfill-so-deal-ids.ts:38", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/backfill-so-deal-ids.ts:38"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4f8265f9e9bcd465", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_create-zuper-product-customfields.ts:74", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_create-zuper-product-customfields.ts:74"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bdb3bd27d954a699", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/analyze-real-hs-products.ts:27", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/analyze-real-hs-products.ts:27"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-45e56bea4b488e8c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/backfill-eagleview-from-gmail.ts:132", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/backfill-eagleview-from-gmail.ts:132"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f64c1c513ccd9ee4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_backfill-hubspot-manufacturer-enum.ts:82", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_backfill-hubspot-manufacturer-enum.ts:82"}, "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-f6f976075949f092", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/unlinked-counts.ts:52", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/unlinked-counts.ts:52"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e61dd03b388c9940", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/backfill-zuper-hs-ids.ts:39", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/backfill-zuper-hs-ids.ts:39"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-812e8ea2ee1c7917", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/zuper-hs-mismatch-report.ts:83", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/zuper-hs-mismatch-report.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-78b53d4582d5e9eb", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-pe-pandadoc-search.mjs:53", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-pe-pandadoc-search.mjs:53"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-705033ed3a2cbaf3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_pull-hubspot-product-properties.ts:26", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_pull-hubspot-product-properties.ts:26"}, "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-ff37362bc433e116", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_zuper-ratelimit-probe.ts:21", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_zuper-ratelimit-probe.ts:21"}, "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-dbed07fabae78b6c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/lookup-pe-template-ids.mjs:42", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/lookup-pe-template-ids.mjs:42"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-85f5d363e8f94baf", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_zoho-search.ts:26", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_zoho-search.ts:26"}, "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-9c53f5240df3ca45", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_create-zoho-categories.ts:33", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_create-zoho-categories.ts:33"}, "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-08dcbe30b75e48b4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/seed-qb-products.ts:114", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/seed-qb-products.ts:114"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8a2840e5a4af61c0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/create-hs-crosslink-props.ts:11", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/create-hs-crosslink-props.ts:11"}, "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-9a0872a3473fe57d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/review-2026-sos.ts:10", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/review-2026-sos.ts:10"}, "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-6f6bc463304ec755", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_create-shit-show-properties.ts:67", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_create-shit-show-properties.ts:67"}, "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-5abbe8738104e517", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-zuper-fetch.ts:12", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-zuper-fetch.ts:12"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-78ec155806c7af47", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/list-unlinked-hs-products.ts:25", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/list-unlinked-hs-products.ts:25"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bb703e1b1fadac6c", "name": "Commented-code block (5 lines) in scripts/backfill-properties.ts:18", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/backfill-properties.ts:18"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1e2697f80ee1b29d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/fetch-ops-sos.ts:10", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/fetch-ops-sos.ts:10"}, "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-b6d48f54ee4a9e30", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_pe-rejected-docs-by-deal-gdoc.ts:104", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_pe-rejected-docs-by-deal-gdoc.ts:104"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-639a64b72c0a1127", "name": "Legacy-named symbol `hsLegacy` in scripts/list-all-gaps-with-dupes.ts:164", "shortDescription": {"text": "Legacy-named symbol `hsLegacy` in scripts/list-all-gaps-with-dupes.ts:164"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-daa2c78f49929f9f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/list-all-gaps-with-dupes.ts:94", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/list-all-gaps-with-dupes.ts:94"}, "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-9b765247f2b35244", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/match-current-hs-to-ips.ts:85", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/match-current-hs-to-ips.ts:85"}, "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-dcf3a353a51c83c8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_audit-orphan-usage-2026.ts:37", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_audit-orphan-usage-2026.ts:37"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f8ad1ed92054f6a3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_standardize-brand-casing.ts:26", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_standardize-brand-casing.ts:26"}, "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-360d95448ead434a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/get-sa-client-id2.mjs:59", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/get-sa-client-id2.mjs:59"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0739b775cc5e7ad8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/clean-names-and-match-hs.ts:100", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/clean-names-and-match-hs.ts:100"}, "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-c2a6876e4259e368", "name": "Commented-code block (9 lines) in scripts/cleanup-bare-property-dupes.ts:11", "shortDescription": {"text": "Commented-code block (9 lines) in scripts/cleanup-bare-property-dupes.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-da966710ee95d256", "name": "`fetch()` without try/.catch or AbortSignal \u2014 .claude/skills/site-survey-readiness-workspace/iteration-1/single-project-", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 .claude/skills/site-survey-readiness-workspace/iteration-1/single-project-by-proj-number/with_skill/outputs/list-survey-files.ts:33"}, "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-0ef3821ef1fed32a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 .claude/skills/site-survey-readiness/scripts/list-drive-files.ts:48", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 .claude/skills/site-survey-readiness/scripts/list-drive-files.ts:48"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c219e2a3f7a9ecc8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 hubspot-extensions/src/app/cards/PowerhubSidebar.tsx:67", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 hubspot-extensions/src/app/cards/PowerhubSidebar.tsx:67"}, "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-ed236bb79b5e45cc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 hubspot-extensions/src/app/cards/PowerhubCard.tsx:87", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 hubspot-extensions/src/app/cards/PowerhubCard.tsx:87"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f3d05e34c23f8d63", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/sw.js:69", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/sw.js:69"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3e898d7bb4c32b69", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/solar-surveyor/assets/index-CDmJaT6T.js:1", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/solar-surveyor/assets/index-CDmJaT6T.js:1"}, "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-74431ab60c3bd568", "name": "Commented-code block (8 lines) in src/middleware.ts:235", "shortDescription": {"text": "Commented-code block (8 lines) in src/middleware.ts:235"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-49a08aeeb6932519", "name": "Commented-code block (6 lines) in src/__tests__/zuper-status-mapping.test.ts:69", "shortDescription": {"text": "Commented-code block (6 lines) in src/__tests__/zuper-status-mapping.test.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-7356dd801e06e29f", "name": "Legacy-named symbol `proposal_v1` in src/__tests__/pe-turnover.test.ts:109", "shortDescription": {"text": "Legacy-named symbol `proposal_v1` in src/__tests__/pe-turnover.test.ts:109"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3a13b176810bd4cf", "name": "Commented-code block (5 lines) in src/__tests__/adders/seed-integrity.test.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/__tests__/adders/seed-integrity.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9f58e8b91dc67c41", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/__tests__/api/bom-zoho-so.test.ts:99", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/__tests__/api/bom-zoho-so.test.ts:99"}, "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-af88e1231410daf2", "name": "Legacy-named symbol `push_v1` in src/__tests__/api/catalog-push-requests.test.ts:359", "shortDescription": {"text": "Legacy-named symbol `push_v1` in src/__tests__/api/catalog-push-requests.test.ts:359"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-406280be054d8dd7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/__tests__/api/properties/detail.test.ts:35", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/__tests__/api/properties/detail.test.ts:35"}, "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-82761456adcb25e9", "name": "Commented-code block (5 lines) in src/__tests__/lib/property-sync.test.ts:1163", "shortDescription": {"text": "Commented-code block (5 lines) in src/__tests__/lib/property-sync.test.ts:1163"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cdb25d657bfc5859", "name": "Commented-code block (5 lines) in src/__tests__/lib/user-access.test.ts:228", "shortDescription": {"text": "Commented-code block (5 lines) in src/__tests__/lib/user-access.test.ts:228"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-459112a86fc86656", "name": "Commented-code block (7 lines) in src/__tests__/lib/property-backfill-lock.test.ts:3", "shortDescription": {"text": "Commented-code block (7 lines) in src/__tests__/lib/property-backfill-lock.test.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-866d64a91a16ae09", "name": "Commented-code block (7 lines) in src/__tests__/lib/hubspot-manufacturer-enum.test.ts:218", "shortDescription": {"text": "Commented-code block (7 lines) in src/__tests__/lib/hubspot-manufacturer-enum.test.ts:218"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7fc0677177646b88", "name": "Legacy-named symbol `wizard_v1` in src/__tests__/lib/solar-analysis/adapters.test.ts:35", "shortDescription": {"text": "Legacy-named symbol `wizard_v1` in src/__tests__/lib/solar-analysis/adapters.test.ts:35"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b7da5a6a55c4b019", "name": "Commented-code block (7 lines) in src/components/PropertyDrawer.tsx:3", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/PropertyDrawer.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b2221b0206d21047", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/PropertyDrawer.tsx:36", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/PropertyDrawer.tsx:36"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-be5735d9679d1667", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/AuthSync.tsx:23", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/AuthSync.tsx:23"}, "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-73eb231e4067fae5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/RevenueGoalTracker.tsx:22", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/RevenueGoalTracker.tsx:22"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5b902710ab1ec033", "name": "Commented-code block (6 lines) in src/components/PropertyLink.tsx:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/PropertyLink.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-23ed31e4d5d9dfe8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/on-call/OnCallDashboardClient.tsx:37", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/on-call/OnCallDashboardClient.tsx:37"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ad2e833ea6bcd647", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/on-call/OnCallActivityClient.tsx:91", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/on-call/OnCallActivityClient.tsx:91"}, "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-1856c10488aaae20", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/on-call/OnCallMeClient.tsx:106", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/on-call/OnCallMeClient.tsx:106"}, "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-0a54b1c060ffe482", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/on-call/CallLogModal.tsx:81", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/on-call/CallLogModal.tsx:81"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d0c373a9c513d8b8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/on-call/PoolConfigCard.tsx:40", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/on-call/PoolConfigCard.tsx:40"}, "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-4ad0c1742dc6dcd5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/on-call/LookaheadGrid.tsx:49", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/on-call/LookaheadGrid.tsx:49"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bfe7cfe03770653f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/on-call/OnCallMonthClient.tsx:58", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/on-call/OnCallMonthClient.tsx:58"}, "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-ce0f232d67fb6047", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/on-call/CallLogList.tsx:43", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/on-call/CallLogList.tsx:43"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5555b7db44f1c04c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/comms/CommsDraftDrawer.tsx:92", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/comms/CommsDraftDrawer.tsx:92"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9ea7db7388937bfe", "name": "Commented-code block (5 lines) in src/components/property/PropertyDrawerContext.tsx:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/property/PropertyDrawerContext.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8767e6dd6b23175d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/property/PropertyEquipmentTab.tsx:45", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/property/PropertyEquipmentTab.tsx:45"}, "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-be44fdf4e9dca7db", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/property/PropertyActivityTimeline.tsx:63", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/property/PropertyActivityTimeline.tsx:63"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-251fe3ebae94461a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/property/PropertyDealsTab.tsx:45", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/property/PropertyDealsTab.tsx:45"}, "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-46d2953e48bd1696", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/property/PropertyScheduleTab.tsx:43", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/property/PropertyScheduleTab.tsx:43"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d4f99fddc7d5c6b3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/property/PropertyTicketsTab.tsx:25", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/property/PropertyTicketsTab.tsx:25"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-83341a85541bb55f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/property/PropertyActivityTab.tsx:261", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/property/PropertyActivityTab.tsx:261"}, "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-4f1ff6b96b93f426", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/property/PropertyPermitHistory.tsx:46", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/property/PropertyPermitHistory.tsx:46"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b6c88045eb27c6f9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/property/PropertyMonitoringTab.tsx:27", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/property/PropertyMonitoringTab.tsx:27"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d066974066f39b95", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/property/PropertyResidents.tsx:26", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/property/PropertyResidents.tsx:26"}, "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-46af43e37a7d505a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/property/PropertyJobsTab.tsx:43", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/property/PropertyJobsTab.tsx:43"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-827d48d8f1063ad2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/property/PropertyPhotosTab.tsx:29", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/property/PropertyPhotosTab.tsx:29"}, "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-e20b60b22585f057", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/catalog/SyncModal.tsx:339", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/catalog/SyncModal.tsx:339"}, "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-bad3d830c7dfaf85", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/catalog/VendorPicker.tsx:51", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/catalog/VendorPicker.tsx:51"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9f5720eda17a5eb7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/funnel/MonthlyActivityView.tsx:278", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/funnel/MonthlyActivityView.tsx:278"}, "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-f5b9ef2e86d33e3c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/funnel/AnalysisOverview.tsx:56", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/funnel/AnalysisOverview.tsx:56"}, "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-bd8d4bff929a202e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/pe-prep/PeActionTasksPanel.tsx:55", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/pe-prep/PeActionTasksPanel.tsx:55"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cb3fdd098707bab0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/pe-prep/PeAuditProgress.tsx:75", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/pe-prep/PeAuditProgress.tsx:75"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-19bb09301950537d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/calls/OnCallSummary.tsx:77", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/calls/OnCallSummary.tsx:77"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-aa734e1ef5d9b31c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/calls/HistoricalSnapshot.tsx:36", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/calls/HistoricalSnapshot.tsx:36"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-167908c6f022e15b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/deal-detail/ActivityFeed.tsx:32", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/deal-detail/ActivityFeed.tsx:32"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2128fd8e83011039", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/deal-detail/CommunicationsFeed.tsx:34", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/deal-detail/CommunicationsFeed.tsx:34"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-09f866ee6f983dd7", "name": "Commented-code block (5 lines) in src/components/solar-designer/FileUploadPanel.tsx:121", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/solar-designer/FileUploadPanel.tsx:121"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-78fdb27428f0726e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/sop/SopEditor.tsx:402", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/sop/SopEditor.tsx:402"}, "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-be157d78756fb053", "name": "Legacy-named symbol `wizard_v1` in src/components/solar/SetupWizard.tsx:273", "shortDescription": {"text": "Legacy-named symbol `wizard_v1` in src/components/solar/SetupWizard.tsx:273"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cd788205b5ea0345", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/solar/SetupWizard.tsx:115", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/solar/SetupWizard.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-51b9be43385e30ea", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/powerhub/SiteDetail.tsx:14", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/powerhub/SiteDetail.tsx:14"}, "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-0c92fcbd54bc6da0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/powerhub/SystemHealth.tsx:17", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/powerhub/SystemHealth.tsx:17"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c9324991b06b5df3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/pe/DocReworkTab.tsx:234", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/pe/DocReworkTab.tsx:234"}, "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-60f3f22b965c95f2", "name": "Commented-code block (12 lines) in src/components/pe/DealsTab.tsx:1059", "shortDescription": {"text": "Commented-code block (12 lines) in src/components/pe/DealsTab.tsx:1059"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-30e5ed3d928cd7c6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/pe/DealsTab.tsx:642", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/pe/DealsTab.tsx:642"}, "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-5c85b2669566cd9a", "name": "Commented-code block (5 lines) in src/components/pe/DocsTab.tsx:587", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/pe/DocsTab.tsx:587"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ac9c74ce00af913c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/pe/DocsTab.tsx:972", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/pe/DocsTab.tsx:972"}, "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-1737f9cc494d3879", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/pe/AnalyticsTab.tsx:1819", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/pe/AnalyticsTab.tsx:1819"}, "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-e2c2578d1787715b", "name": "Commented-code block (6 lines) in src/components/pe/ShortPayModal.tsx:5", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/pe/ShortPayModal.tsx:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-247910407b419934", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/page.tsx:227", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/page.tsx:227"}, "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-3725680c10dafdf1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/triage/TriageStepper.tsx:68", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/triage/TriageStepper.tsx:68"}, "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-4e86b5cd318a34d1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/triage/TriagePhotoCapture.tsx:109", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/triage/TriagePhotoCapture.tsx:109"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2848667637dba8df", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/triage/TriageReview.tsx:50", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/triage/TriageReview.tsx:50"}, "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-9de1874cab23bca6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/comms/connect/callback/route.ts:60", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/comms/connect/callback/route.ts:60"}, "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-961dccb5e7a0e32c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/install-review/route.ts:590", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/install-review/route.ts:590"}, "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-bf60e5163b6470c0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/estimator/static-map/route.ts:36", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/estimator/static-map/route.ts:36"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0db44a56af9cd018", "name": "Commented-code block (5 lines) in src/app/api/zuper/availability/route.ts:218", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/zuper/availability/route.ts:218"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7b334326da377490", "name": "Commented-code block (6 lines) in src/app/api/zuper/jobs/schedule/route.ts:969", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/zuper/jobs/schedule/route.ts:969"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0592e0b58923a893", "name": "Commented-code block (5 lines) in src/app/api/zuper/jobs/schedule/confirm/route.ts:793", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/zuper/jobs/schedule/confirm/route.ts:793"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ec693b6aeda3a614", "name": "Commented-code block (5 lines) in src/app/api/accounting/pe-analytics/route.ts:677", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/accounting/pe-analytics/route.ts:677"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8791bb34e9fedb0b", "name": "Commented-code block (5 lines) in src/app/api/accounting/payment-tracking/route.ts:28", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/accounting/payment-tracking/route.ts:28"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9bad58ae23ab04eb", "name": "Commented-code block (5 lines) in src/app/api/accounting/pe-deals/route.ts:90", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/accounting/pe-deals/route.ts:90"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dae6ae55f032299c", "name": "Commented-code block (7 lines) in src/app/api/catalog/upload-photo/route.ts:49", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/api/catalog/upload-photo/route.ts:49"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-422bdf1be44986e2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/energy-community/check/route.ts:30", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/energy-community/check/route.ts:30"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c540456603276c92", "name": "Commented-code block (10 lines) in src/app/api/admin/users/route.ts:146", "shortDescription": {"text": "Commented-code block (10 lines) in src/app/api/admin/users/route.ts:146"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6d8427786ceba8f3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/shared-inbox/callback/route.ts:75", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/shared-inbox/callback/route.ts:75"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d70e13cc5bad9b3d", "name": "Commented-code block (5 lines) in src/app/api/admin/crew/route.ts:34", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/admin/crew/route.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-8e3f7eb24adefc34", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/workflows/hubspot-property-options/route.ts:42", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/workflows/hubspot-property-options/route.ts:42"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-dc2dff27328153df", "name": "Commented-code block (5 lines) in src/app/api/admin/sync-workspace/route.ts:166", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/admin/sync-workspace/route.ts:166"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-21bb81de4d360a54", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/sync-workspace/route.ts:94", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/sync-workspace/route.ts:94"}, "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-aae831acdafe2a3c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/bom/chunk/route.ts:156", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/bom/chunk/route.ts:156"}, "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-364af46a0f0ec555", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/bom/extract/route.ts:241", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/bom/extract/route.ts:241"}, "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-8b00ede1216e0c84", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/pe-prep/[dealId]/audit/route.ts:35", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/pe-prep/[dealId]/audit/route.ts:35"}, "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-2d7a39a93f4454f0", "name": "Commented-code block (5 lines) in src/app/api/deployment/route.ts:102", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/deployment/route.ts:102"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a6657902f4e0554e", "name": "Commented-code block (5 lines) in src/app/api/cron/daily-focus/route.ts:32", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/cron/daily-focus/route.ts:32"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0e4bb4b3215d7433", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/cron/pe-invoice-audit/route.ts:37", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/cron/pe-invoice-audit/route.ts:37"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cce8955680a04d6e", "name": "Commented-code block (6 lines) in src/app/api/cron/pe-doc-digest/route.ts:50", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/cron/pe-doc-digest/route.ts: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-f901f7b9595655e6", "name": "Commented-code block (6 lines) in src/app/api/cron/zuper-status-reconcile/route.ts:31", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/cron/zuper-status-reconcile/route.ts: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-0beaefd005ed43be", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/products/comparison/create/route.ts:267", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/products/comparison/create/route.ts:267"}, "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-9ad3582e06656ec9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/debug/notifications/route.ts:155", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/debug/notifications/route.ts:155"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-07af09cb784e2018", "name": "Commented-code block (5 lines) in src/app/api/webhooks/zuper/admin-workflows/route.ts:111", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/webhooks/zuper/admin-workflows/route.ts:111"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b48fcabff38e9610", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/webhooks/hubspot/install-review/route.ts:49", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/webhooks/hubspot/install-review/route.ts:49"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c5eae729fca74cf6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/webhooks/hubspot/fdr-check/route.ts:53", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/webhooks/hubspot/fdr-check/route.ts:53"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4506f3e062d255ff", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/webhooks/hubspot/design-review/route.ts:51", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/webhooks/hubspot/design-review/route.ts:51"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d323ae5a017677ce", "name": "Commented-code block (6 lines) in src/app/api/webhooks/hubspot/design-complete/route.ts:216", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/webhooks/hubspot/design-complete/route.ts:216"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-615578a56a3a1c49", "name": "Commented-code block (5 lines) in src/app/api/idr-meeting/items/[id]/route.ts:8", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/idr-meeting/items/[id]/route.ts:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-27a3ec3c148fb15e", "name": "Commented-code block (5 lines) in src/app/api/powerhub/import-locations/route.ts:70", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/powerhub/import-locations/route.ts:70"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0beafa0c1ddadc85", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/deals/stream/route.ts:413", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/deals/stream/route.ts:413"}, "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-82ac768c1044c44b", "name": "Commented-code block (7 lines) in src/app/api/deals/project-funnel/route.ts:46", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/api/deals/project-funnel/route.ts:46"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4ebe3f098e6765fb", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/deals/project-funnel/route.ts:46", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/deals/project-funnel/route.ts:46"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c7a98f09ce4458d3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/service-unscheduled/page.tsx:75", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/service-unscheduled/page.tsx:75"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b1f584b2d9e21158", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/de-metrics/page.tsx:348", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/de-metrics/page.tsx:348"}, "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-6f91cf2a5ae631af", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/pm-action-queue/PmActionQueueClient.tsx:152", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/pm-action-queue/PmActionQueueClient.tsx:152"}, "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-82fd4358bfb4afe8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/inspection-scheduler/page.tsx:334", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/inspection-scheduler/page.tsx:334"}, "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-64b6376ab1ea5959", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/inventory/page.tsx:1279", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/inventory/page.tsx:1279"}, "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-170399428fe08967", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/roofing-scheduler/page.tsx:130", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/roofing-scheduler/page.tsx:130"}, "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-f1d6e5067b698973", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/territory-map/page.tsx:183", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/territory-map/page.tsx:183"}, "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-f92289a57f7b2728", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/inspection-metrics/page.tsx:198", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/inspection-metrics/page.tsx:198"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-be151fe66c673f8b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/comms/page.tsx:74", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/comms/page.tsx:74"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6e0f10ea60173a65", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/adders/AdderEditForm.tsx:198", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/adders/AdderEditForm.tsx:198"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c94df1edafaff297", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/adders/AddersClient.tsx:21", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/adders/AddersClient.tsx:21"}, "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-318b6d7355f00c63", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/adders/AdderRevisionsDrawer.tsx:15", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/adders/AdderRevisionsDrawer.tsx:15"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4603946cc3554317", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/adders/SyncStatusBadge.tsx:24", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/adders/SyncStatusBadge.tsx:24"}, "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-07536588bf3286f4", "name": "Commented-code block (5 lines) in src/app/dashboards/site-survey-scheduler/page.tsx:236", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/dashboards/site-survey-scheduler/page.tsx:236"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6e275e9665695e27", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/site-survey-scheduler/page.tsx:539", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/site-survey-scheduler/page.tsx:539"}, "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-99b24e799d48d8f3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/zuper-compliance/page.tsx:717", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/zuper-compliance/page.tsx:717"}, "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-21dbf1f290f5f8db", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/payment-action-queue/PaymentActionQueueClient.tsx:65", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/payment-action-queue/PaymentActionQueueClient.tsx:65"}, "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-343106109c17c354", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/permit-hub/SessionHeader.tsx:10", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/permit-hub/SessionHeader.tsx:10"}, "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-0b034897442c1568", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/permit-hub/ProjectDetail.tsx:64", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/permit-hub/ProjectDetail.tsx:64"}, "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-bfad6cc2eeb688c6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/permit-hub/PermitHubClient.tsx:18", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/permit-hub/PermitHubClient.tsx:18"}, "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-f9c8f624ad08c171", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/permit-hub/actions/FollowUpForm.tsx:25", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/permit-hub/actions/FollowUpForm.tsx:25"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-429a154e94423e84", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/permit-hub/actions/ReviewRejectionForm.tsx:27", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/permit-hub/actions/ReviewRejectionForm.tsx:27"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a7e11017043133cb", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/permit-hub/actions/CompleteAsBuiltForm.tsx:19", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/permit-hub/actions/CompleteAsBuiltForm.tsx:19"}, "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-7fb74bcf4ac8ea97", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/permit-hub/actions/FormShell.tsx:42", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/permit-hub/actions/FormShell.tsx:42"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-264f2fb1d9a4ef50", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/permit-hub/actions/SubmitSolarAppForm.tsx:25", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/permit-hub/actions/SubmitSolarAppForm.tsx:25"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2a3232c936907ccf", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/permit-hub/actions/SubmitToAhjForm.tsx:27", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/permit-hub/actions/SubmitToAhjForm.tsx:27"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ab0971c510c607d1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/permit-hub/actions/StartAsBuiltRevisionForm.tsx:20", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/permit-hub/actions/StartAsBuiltRevisionForm.tsx:20"}, "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-1fedfc93d4864cf2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/permit-hub/actions/CompleteRevisionForm.tsx:19", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/permit-hub/actions/CompleteRevisionForm.tsx:19"}, "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-08d479ad35f32a09", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/permit-hub/actions/MarkPermitIssuedForm.tsx:26", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/permit-hub/actions/MarkPermitIssuedForm.tsx:26"}, "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-7debef379c73de81", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/permit-hub/actions/ResubmitToAhjForm.tsx:27", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/permit-hub/actions/ResubmitToAhjForm.tsx:27"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6100291f6d2050a8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/pe-report/page.tsx:608", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/pe-report/page.tsx:608"}, "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-6d83d435a2944216", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/service-scheduler/page.tsx:305", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/service-scheduler/page.tsx:305"}, "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-b8aa40198b6834ed", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/product-catalog/page.tsx:100", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/product-catalog/page.tsx:100"}, "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-d5fc2029174436f3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/forecast-accuracy/page.tsx:154", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/forecast-accuracy/page.tsx:154"}, "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-3c78598411636383", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/ready-to-invoice/ReadyToInvoiceClient.tsx:39", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/ready-to-invoice/ReadyToInvoiceClient.tsx:39"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-80d81b1b0e274ba2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/my-tickets/page.tsx:79", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/my-tickets/page.tsx:79"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-206a7361e117b2b0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/catalog/page.tsx:344", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/catalog/page.tsx:344"}, "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-98c6305b5b487437", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/catalog/review/page.tsx:95", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/catalog/review/page.tsx:95"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-369e24a8acb71090", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/availability-approvals/page.tsx:75", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/availability-approvals/page.tsx:75"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-db2718397b46092d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/revenue-goals/page.tsx:27", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/revenue-goals/page.tsx:27"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-374456ba86f6c882", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/my-tasks/page.tsx:36", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/my-tasks/page.tsx:36"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e4555968bf7f9cc0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/design-pipeline-funnel/page.tsx:47", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/design-pipeline-funnel/page.tsx:47"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4f851e23bbcbe614", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/construction-scheduler/page.tsx:423", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/construction-scheduler/page.tsx:423"}, "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-68e7ec372b889cb3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/inspections/page.tsx:147", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/inspections/page.tsx:147"}, "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-c78a37fa2d81eabe", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/office-performance/[location]/useCalendarData.ts:42", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/office-performance/[location]/useCalendarData.ts:42"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-124227d36a8afd57", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/office-performance/[location]/page.tsx:80", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/office-performance/[location]/page.tsx:80"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-74d6d108e0c3aa58", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/office-performance/[location]/OfficeCarousel.tsx:60", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/office-performance/[location]/OfficeCarousel.tsx:60"}, "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-6bf133a4b81db176", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/office-performance/[location]/AllLocationsCalendarSecti", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/office-performance/[location]/AllLocationsCalendarSection.tsx:69"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fee110da33b9cfbc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/product-requests-review/ReviewClient.tsx:37", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/product-requests-review/ReviewClient.tsx:37"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d17aab56680a514a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/admin/calls/CallsClient.tsx:121", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/admin/calls/CallsClient.tsx:121"}, "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-3cacb17b50aa35f9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/admin/workflows/page.tsx:154", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/admin/workflows/page.tsx:154"}, "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-460bc65017f6f37e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/admin/workflows/[id]/page.tsx:257", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/admin/workflows/[id]/page.tsx:257"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-072b1306d138ee86", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/admin/workflows/runs/[runId]/page.tsx:131", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/admin/workflows/runs/[runId]/page.tsx:131"}, "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-9e789e6da2c03e3a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/admin/powerhub/page.tsx:42", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/admin/powerhub/page.tsx:42"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8940932a63f5ed4d", "name": "Commented-code block (5 lines) in src/app/dashboards/bom/page.tsx:503", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/dashboards/bom/page.tsx:503"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e9822ef25ff27f7d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/bom/page.tsx:959", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/bom/page.tsx:959"}, "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-f3098c1dba5c2ddb", "name": "Commented-code block (5 lines) in src/app/dashboards/pe-prep/page.tsx:56", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/dashboards/pe-prep/page.tsx:56"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2b434a7568142610", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/pe-prep/page.tsx:124", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/pe-prep/page.tsx:124"}, "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-c5e219d95adf88d6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/pe-prep/[dealId]/page.tsx:90", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/pe-prep/[dealId]/page.tsx:90"}, "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-f46b3b34a86e4a6b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/survey-metrics/page.tsx:170", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/survey-metrics/page.tsx:170"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-46c12ed8c8187c30", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/payment-data-mismatch/PaymentDataMismatchClient.tsx:59", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/payment-data-mismatch/PaymentDataMismatchClient.tsx:59"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7e7bf80bb7c28259", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/request-product/MyRequestsTable.tsx:30", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/request-product/MyRequestsTable.tsx:30"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e75916e51cdf3238", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/pipeline-tracker/page.tsx:165", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/pipeline-tracker/page.tsx:165"}, "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-335b35ad5e087719", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/zuper-status-comparison/page.tsx:251", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/zuper-status-comparison/page.tsx:251"}, "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-e820291ef29c87fe", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/accounts-receivable/AccountsReceivableClient.tsx:54", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/accounts-receivable/AccountsReceivableClient.tsx:54"}, "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-e41331cf0dbd232f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/service/page.tsx:218", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/service/page.tsx:218"}, "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-c3b5a987f07ab0f7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/executive-calendar/page.tsx:258", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/executive-calendar/page.tsx:258"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-45c6405067e68e7c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/eagleview-test/page.tsx:51", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/eagleview-test/page.tsx:51"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c180c5a7150c8d91", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/ic-hub/SessionHeader.tsx:10", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/ic-hub/SessionHeader.tsx:10"}, "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-08ffd0359df099c8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/ic-hub/IcHubClient.tsx:18", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/ic-hub/IcHubClient.tsx:18"}, "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-017a38b7923b5b43", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/ic-hub/ProjectDetail.tsx:70", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/ic-hub/ProjectDetail.tsx:70"}, "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-898d0cc40230e6a1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/ic-hub/actions/MarkIcApprovedForm.tsx:21", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/ic-hub/actions/MarkIcApprovedForm.tsx:21"}, "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-e8755b095db12404", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/ic-hub/actions/FollowUpForm.tsx:25", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/ic-hub/actions/FollowUpForm.tsx:25"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4cd1c203e9ef7a37", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/ic-hub/actions/SubmitToUtilityForm.tsx:19", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/ic-hub/actions/SubmitToUtilityForm.tsx:19"}, "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-46410105aeebc622", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/ic-hub/actions/ReviewRejectionForm.tsx:27", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/ic-hub/actions/ReviewRejectionForm.tsx:27"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4fd259add2d2621b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/ic-hub/actions/FormShell.tsx:41", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/ic-hub/actions/FormShell.tsx:41"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-55242294dbba950b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/ic-hub/actions/ResubmitToUtilityForm.tsx:26", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/ic-hub/actions/ResubmitToUtilityForm.tsx:26"}, "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-0932706674966f4d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/ic-hub/actions/ProvideInformationForm.tsx:25", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/ic-hub/actions/ProvideInformationForm.tsx:25"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f088fbe8e3759b46", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/ic-hub/actions/CompleteRevisionForm.tsx:19", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/ic-hub/actions/CompleteRevisionForm.tsx:19"}, "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-2ca585485849eadd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/pe-pipeline/page.tsx:160", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/pe-pipeline/page.tsx:160"}, "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-4db223cbaefc01cd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/pm-accountability/PMDashboard.tsx:16", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/pm-accountability/PMDashboard.tsx:16"}, "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-339a4622827ae87c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/pm-accountability/PmScorecardTab.tsx:30", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/pm-accountability/PmScorecardTab.tsx:30"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cc7cc3da829c1843", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/payment-timeline/PaymentTimelineClient.tsx:326", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/payment-timeline/PaymentTimelineClient.tsx:326"}, "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-fb28cd11280e5558", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/construction-metrics/page.tsx:103", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/construction-metrics/page.tsx:103"}, "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-3ca7412f6cce334d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/forecast-schedule/page.tsx:72", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/forecast-schedule/page.tsx:72"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a41f2bb17bc6689c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/pe-action-queue/page.tsx:59", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/pe-action-queue/page.tsx:59"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-475df4554542ecc3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/pe-submission-gap/page.tsx:220", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/pe-submission-gap/page.tsx:220"}, "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-d62c266b5010f550", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/optimizer/page.tsx:409", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/optimizer/page.tsx:409"}, "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-53bfa14c9f343908", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/shit-show-meeting/AddProjectDialog.tsx:36", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/shit-show-meeting/AddProjectDialog.tsx:36"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cc96e1aa1a5b68c9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/shit-show-meeting/ShitShowMeetingClient.tsx:27", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/shit-show-meeting/ShitShowMeetingClient.tsx:27"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-236c14ba15bfd12b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/shit-show-meeting/AssignmentsPanel.tsx:57", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/shit-show-meeting/AssignmentsPanel.tsx:57"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2aad65fbfa4f90b9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/shit-show-meeting/ProjectDetail.tsx:39", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/shit-show-meeting/ProjectDetail.tsx:39"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3009136fcf47f914", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/shit-show-meeting/HistoryStrip.tsx:27", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/shit-show-meeting/HistoryStrip.tsx:27"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d50b60e38aaf828e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/service-catalog/page.tsx:73", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/service-catalog/page.tsx:73"}, "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-54172f6fc7cd1099", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/crew-schedule/page.tsx:706", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/crew-schedule/page.tsx:706"}, "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-e2256a8e4b6a9bf1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/forecast-timeline/page.tsx:179", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/forecast-timeline/page.tsx:179"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a0d77ef4bdc3d414", "name": "Commented-code block (5 lines) in src/app/dashboards/project-pipeline-funnel/page.tsx:750", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/dashboards/project-pipeline-funnel/page.tsx:750"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-af99973673088684", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/project-pipeline-funnel/page.tsx:170", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/project-pipeline-funnel/page.tsx:170"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-40af8fccee18da6b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/equipment-backlog/page.tsx:348", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/equipment-backlog/page.tsx:348"}, "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-23c5d9d9323f0816", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/payment-tracking/PaymentTrackingClient.tsx:50", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/payment-tracking/PaymentTrackingClient.tsx:50"}, "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-43aada9c5b4e7bfd", "name": "Commented-code block (7 lines) in src/app/dashboards/payment-tracking/MilestoneStrip.tsx:13", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/dashboards/payment-tracking/MilestoneStrip.tsx:13"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b3791e8cfb1f0212", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/pe-avl/page.tsx:79", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/pe-avl/page.tsx:79"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a71f790359b80e70", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/product-comparison/page.tsx:1252", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/product-comparison/page.tsx:1252"}, "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-5cb3700285989fde", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/design-engineering-funnel/page.tsx:348", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/design-engineering-funnel/page.tsx:348"}, "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-d90661df99c3bf1a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/qc/page.tsx:90", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/qc/page.tsx:90"}, "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-d3e06f22d0eff9c7", "name": "Commented-code block (5 lines) in src/app/dashboards/scheduler/page.tsx:292", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/dashboards/scheduler/page.tsx:292"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-64aa6c6ae0ddc7c0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/scheduler/page.tsx:1098", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/scheduler/page.tsx:1098"}, "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-4d743aa11f2232af", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/idr-meeting/AddProjectDialog.tsx:45", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/idr-meeting/AddProjectDialog.tsx:45"}, "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-1a2897e9c73b3013", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/idr-meeting/SessionHeader.tsx:60", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/idr-meeting/SessionHeader.tsx:60"}, "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-231249d75cec20a8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/idr-meeting/DealHistoryDetail.tsx:84", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/idr-meeting/DealHistoryDetail.tsx:84"}, "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-0ecf94bc4b05a716", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/idr-meeting/IdrMeetingClient.tsx:241", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/idr-meeting/IdrMeetingClient.tsx:241"}, "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-0ea117cc93d48616", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/idr-meeting/EscalationQueue.tsx:34", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/idr-meeting/EscalationQueue.tsx:34"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-832fa40828311726", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/idr-meeting/AhjUtilityInfo.tsx:50", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/idr-meeting/AhjUtilityInfo.tsx:50"}, "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-9454e36074cba18c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/idr-meeting/NoteHistory.tsx:37", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/idr-meeting/NoteHistory.tsx:37"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e322ec85c9789ad7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/idr-meeting/BomExtractionEditor.tsx:66", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/idr-meeting/BomExtractionEditor.tsx:66"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7ad143698e52aadd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/idr-meeting/ProjectDetail.tsx:61", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/idr-meeting/ProjectDetail.tsx: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}}, {"id": "scanner-9af44735c2c6eb07", "name": "Commented-code block (5 lines) in src/app/dashboards/idr-meeting/MeetingNotesForm.tsx:75", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/dashboards/idr-meeting/MeetingNotesForm.tsx:75"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d784aa4710dc7990", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/idr-meeting/SearchResultsList.tsx:153", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/idr-meeting/SearchResultsList.tsx:153"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-34c15bdc20cc6ce1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/idr-meeting/AddEscalationDialog.tsx:41", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/idr-meeting/AddEscalationDialog.tsx:41"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b39a1410786334a3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/dnr-scheduler/page.tsx:126", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/dnr-scheduler/page.tsx:126"}, "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-99aa694c9042cc83", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/service-backlog/page.tsx:362", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/service-backlog/page.tsx:362"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-776c206c0f1ebb13", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/powerhub/page.tsx:17", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/powerhub/page.tsx:17"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-527156b35fcedd85", "name": "Commented-code block (7 lines) in src/app/dashboards/map/MapClient.tsx:64", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/dashboards/map/MapClient.tsx:64"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ea942fdb50fa88f8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/map/MapClient.tsx:44", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/map/MapClient.tsx:44"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3fe24616770237ec", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/deals/page.tsx:83", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/deals/page.tsx: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-f9f2d2c01d33727b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/page-traffic/page.tsx:52", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/page-traffic/page.tsx:52"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8a887829398414a1", "name": "Legacy-named symbol `showLegacy` in src/app/admin/roles/page.tsx:119", "shortDescription": {"text": "Legacy-named symbol `showLegacy` in src/app/admin/roles/page.tsx:119"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bf3a4a2f7cd4d758", "name": "Legacy-named symbol `isLegacy` in src/app/admin/roles/_RoleDrawerBody.tsx:29", "shortDescription": {"text": "Legacy-named symbol `isLegacy` in src/app/admin/roles/_RoleDrawerBody.tsx:29"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0b68f10b0bb26e5d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/tickets/page.tsx:248", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/tickets/page.tsx:248"}, "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-db93aa1cb56617f2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/freshservice/page.tsx:90", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/freshservice/page.tsx:90"}, "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-875c688cffb435f7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/properties/[id]/page.tsx:51", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/properties/[id]/page.tsx:51"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4f5fd768890a2ff7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/roadmap/page.tsx:87", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/roadmap/page.tsx:87"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7da5416d1fa9d806", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/hubspot-custom-objects.ts:32", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/hubspot-custom-objects.ts:32"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-29412809cea6af59", "name": "Commented-code block (7 lines) in src/lib/property-detail.ts:67", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/property-detail.ts:67"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c2ec629f907d0c15", "name": "Commented-code block (7 lines) in src/lib/shop-health.ts:253", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/shop-health.ts:253"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-02f05b89e2fc152f", "name": "Commented-code block (9 lines) in src/lib/product-sync-categories.ts:74", "shortDescription": {"text": "Commented-code block (9 lines) in src/lib/product-sync-categories.ts:74"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b9edd54b95b33a08", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/comms-chat.ts:47", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/comms-chat.ts:47"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bebd827f005e7ddd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/email.ts:167", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/email.ts:167"}, "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-a8d6afcaeaeeb4a9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/drive-plansets.ts:226", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/drive-plansets.ts:226"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-372e1f142d085ec2", "name": "Commented-code block (7 lines) in src/lib/bom-so-create.ts:137", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/bom-so-create.ts:137"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4d19740c1c309280", "name": "Commented-code block (5 lines) in src/lib/model-alias.ts:20", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/model-alias.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-cd2674dfff994234", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/zuper-property-sync.ts:563", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/zuper-property-sync.ts:563"}, "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-c57a303267a08a6f", "name": "Commented-code block (5 lines) in src/lib/on-call-holidays.ts:49", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/on-call-holidays.ts:49"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d1c70512bac640a9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/pe-avl.ts:39", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/pe-avl.ts:39"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0540c6413f5b4873", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/deal-sync.ts:271", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/deal-sync.ts:271"}, "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-7c9f78e9ed19264e", "name": "Commented-code block (6 lines) in src/lib/property-hub.ts:934", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/property-hub.ts:934"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-09fbd538fc977614", "name": "Commented-code block (5 lines) in src/lib/on-call-google-calendar.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/on-call-google-calendar.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-190df10953def385", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/on-call-google-calendar.ts:72", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/on-call-google-calendar.ts:72"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-191e904d71c542e0", "name": "Commented-code block (6 lines) in src/lib/bom-pipeline.ts:995", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/bom-pipeline.ts:995"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-932b718c6bfee40c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/bom-pipeline.ts:440", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/bom-pipeline.ts:440"}, "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-22b290115c723870", "name": "Commented-code block (8 lines) in src/lib/permit-hub.ts:199", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/permit-hub.ts: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-c23abff62e1e01fb", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/permit-hub.ts:411", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/permit-hub.ts:411"}, "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-513b361a05e87f76", "name": "Legacy-named symbol `syncWithDirectInsertLegacy` in src/lib/bom-snapshot.ts:168", "shortDescription": {"text": "Legacy-named symbol `syncWithDirectInsertLegacy` in src/lib/bom-snapshot.ts:168"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c1cacf844af43ee0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/google-calendar.ts:530", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/google-calendar.ts:530"}, "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-c3dd94f5bd1f3cb4", "name": "Commented-code block (5 lines) in src/lib/zoho-taxonomy.ts:7", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/zoho-taxonomy.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-864854562bf5ca9c", "name": "Commented-code block (6 lines) in src/lib/pe-api-sync.ts:388", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/pe-api-sync.ts:388"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-00ba6444dc80408f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/travel-time.ts:173", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/travel-time.ts:173"}, "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-522e03cc824f1129", "name": "Commented-code block (5 lines) in src/lib/zoho-inventory.ts:487", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/zoho-inventory.ts:487"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-deb2fb7b4cfea527", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/zoho-inventory.ts:336", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/zoho-inventory.ts:336"}, "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-c0571ee3e54c9b4d", "name": "Commented-code block (5 lines) in src/lib/project-funnel-aggregation.ts:443", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/project-funnel-aggregation.ts:443"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5a1fbe1de81b7268", "name": "Commented-code block (5 lines) in src/lib/idr-meeting.ts:514", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/idr-meeting.ts:514"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9a88c2108758d176", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/idr-meeting.ts:767", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/idr-meeting.ts:767"}, "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-2a23cc50acb8bdde", "name": "Commented-code block (5 lines) in src/lib/hubspot.ts:1234", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/hubspot.ts:1234"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c1be33eb6402402a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/hubspot.ts:1309", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/hubspot.ts:1309"}, "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-1c38df2e1fb7bde1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/enphase-enlighten.ts:278", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/enphase-enlighten.ts:278"}, "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-8df59f66abf8eed8", "name": "Commented-code block (7 lines) in src/lib/property-backfill-lock.ts:5", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/property-backfill-lock.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-ec7b01e0a068aa04", "name": "Commented-code block (6 lines) in src/lib/map-aggregator.ts:190", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/map-aggregator.ts:190"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6a23698d7f4b4dfd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/shovels.ts:211", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/shovels.ts:211"}, "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-6e77de2bd8e7537c", "name": "Commented-code block (5 lines) in src/lib/product-sync.ts:59", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/product-sync.ts:59"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-82ed4631e679995f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/comms-gmail.ts:4", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/comms-gmail.ts:4"}, "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-92fbbbbc38bd795b", "name": "Commented-code block (8 lines) in src/lib/pe-turnover.ts:435", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/pe-turnover.ts:435"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-26e98edb12ab9473", "name": "Commented-code block (5 lines) in src/lib/resolve-geo-links.ts:26", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/resolve-geo-links.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-13131057e35cc295", "name": "Commented-code block (6 lines) in src/lib/hubspot-engagements.ts:120", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/hubspot-engagements.ts:120"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0c9aa2f44a8cf98a", "name": "Commented-code block (5 lines) in src/lib/catalog-cross-link.ts:60", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/catalog-cross-link.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-290a6fa583f39286", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/catalog-cross-link.ts:108", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/catalog-cross-link.ts:108"}, "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-92c39838056ae1e0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/comms-ai-draft.ts:37", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/comms-ai-draft.ts:37"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cc7ca07b220147a8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/google-chat-api.ts:91", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/google-chat-api.ts:91"}, "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-7de4f4539ca6d4f5", "name": "Commented-code block (5 lines) in src/lib/pricing-calculator.ts:681", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/pricing-calculator.ts:681"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e1449733f1775f4a", "name": "Commented-code block (6 lines) in src/lib/solar-auth.ts:20", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/solar-auth.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-85d10b8918aab5b5", "name": "Commented-code block (5 lines) in src/lib/catalog-push-approve.ts:443", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/catalog-push-approve.ts:443"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-699882bf48d35e59", "name": "Commented-code block (9 lines) in src/lib/property-sync.ts:524", "shortDescription": {"text": "Commented-code block (9 lines) in src/lib/property-sync.ts:524"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-06323c8b56a5c965", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/deal-reader.ts:227", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/deal-reader.ts:227"}, "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-64174fe05f774ccb", "name": "Commented-code block (5 lines) in src/lib/catalog-sync.ts:819", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/catalog-sync.ts:819"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1a86323322f3ad7c", "name": "Commented-code block (5 lines) in src/lib/bom-so-post-process.ts:444", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/bom-so-post-process.ts:444"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3ef6c4f1db04390e", "name": "Commented-code block (5 lines) in src/lib/office-performance.ts:1679", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/office-performance.ts:1679"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b9faad67602e2761", "name": "Commented-code block (5 lines) in src/lib/payment-tracking.ts:268", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/payment-tracking.ts:268"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b175d4e7ccb187cf", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/catalog-harvest.ts:209", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/catalog-harvest.ts:209"}, "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-82ca28ae34b9fc88", "name": "Commented-code block (6 lines) in src/lib/revenue-goals.ts:56", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/revenue-goals.ts:56"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b64a17f98c306078", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/ic-hub.ts:458", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/ic-hub.ts:458"}, "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-7b282b218641f948", "name": "Commented-code block (6 lines) in src/lib/tech-ops-bot-tools.ts:144", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/tech-ops-bot-tools.ts:144"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b10a2ced4d379b12", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/tech-ops-bot-tools.ts:242", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/tech-ops-bot-tools.ts:242"}, "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-ec212e61b032edfe", "name": "Commented-code block (6 lines) in src/lib/zuper-catalog.ts:743", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/zuper-catalog.ts:743"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e6d47e08b83bc216", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/google-auth.ts:117", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/google-auth.ts:117"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b6fd59b13045d089", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/tesla-powerhub.ts:252", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/tesla-powerhub.ts:252"}, "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-37b86d4e10e5b899", "name": "Commented-code block (5 lines) in src/lib/pe-uploader-overrides.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/pe-uploader-overrides.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-65dafa2c7a9c160f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/on-call-sheet.ts:74", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/on-call-sheet.ts:74"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-038be55a73f63aa2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/freshservice.ts:80", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/freshservice.ts:80"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-99ca6ef6815d467b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/eagleview.ts:487", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/eagleview.ts:487"}, "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-bb8e1e563bb2804d", "name": "Commented-code block (7 lines) in src/lib/zuper.ts:355", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/zuper.ts:355"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2f11ff9880badfeb", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/zuper.ts:1893", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/zuper.ts:1893"}, "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-8254a37457cf225e", "name": "Commented-code block (5 lines) in src/lib/pe-doc-export.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/pe-doc-export.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-bf80a543547653cf", "name": "Commented-code block (5 lines) in src/lib/hubspot-tasks.ts:369", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/hubspot-tasks.ts:369"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0fcd209cd351ded2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/comms-email-compose.ts:65", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/comms-email-compose.ts:65"}, "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-2d51e5fe918072b0", "name": "Legacy-named symbol `wait_for_user_manual_backup` in src/lib/powerhub-sync.ts:89", "shortDescription": {"text": "Legacy-named symbol `wait_for_user_manual_backup` in src/lib/powerhub-sync.ts:89"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7cd549b4e582c78a", "name": "Commented-code block (7 lines) in src/lib/pm-flag-rules.ts:431", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/pm-flag-rules.ts:431"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1887a5483cf86e85", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/pe-api.ts:260", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/pe-api.ts:260"}, "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-d57e2344fb992e3a", "name": "Commented-code block (6 lines) in src/lib/db.ts:510", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/db.ts:510"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4c736f2e532881bf", "name": "Commented-code block (9 lines) in src/lib/design-funnel-aggregation.ts:15", "shortDescription": {"text": "Commented-code block (9 lines) in src/lib/design-funnel-aggregation.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-dc481ab90e5d4d4c", "name": "Commented-code block (5 lines) in src/lib/pandadoc.ts:20", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/pandadoc.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-aa169cbebdd7a175", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/pandadoc.ts:137", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/pandadoc.ts:137"}, "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-bcff646005f2eb49", "name": "Commented-code block (9 lines) in src/lib/roles.ts:37", "shortDescription": {"text": "Commented-code block (9 lines) in src/lib/roles.ts:37"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-054db7776c1de7ba", "name": "Commented-code block (7 lines) in src/lib/payment-tracking-types.ts:100", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/payment-tracking-types.ts:100"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c413ee3098a041b6", "name": "Commented-code block (7 lines) in src/lib/pe-vision-classifier.ts:523", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/pe-vision-classifier.ts:523"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5c859483821a5086", "name": "Commented-code block (6 lines) in src/lib/product-sync-outbound.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/product-sync-outbound.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-fc210fa618e76fd7", "name": "Commented-code block (5 lines) in src/lib/pe-scraper-sync.ts:153", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/pe-scraper-sync.ts:153"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-37fe60fc0435ddd0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/pe-scraper-sync.ts:1053", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/pe-scraper-sync.ts:1053"}, "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-f82f64b349de1a62", "name": "Commented-code block (6 lines) in src/lib/pe-audit-orchestrator.ts:209", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/pe-audit-orchestrator.ts:209"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f122ddb3dda81b15", "name": "Commented-code block (6 lines) in src/lib/tech-ops-bot.ts:116", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/tech-ops-bot.ts:116"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9e33f78ab70681ff", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/tech-ops-bot.ts:447", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/tech-ops-bot.ts:447"}, "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-d162b88c7145fb6c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/gmail-shared-inbox.ts:366", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/gmail-shared-inbox.ts:366"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-69bcd8f833b7083b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/geocode.ts:60", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/geocode.ts:60"}, "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-f74913a89bd33385", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/adders/opensolar-client.ts:12", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/adders/opensolar-client.ts:12"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b63f2791aa3121a8", "name": "Commented-code block (6 lines) in src/lib/adders/zod-schemas.ts:11", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/adders/zod-schemas.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-639bd4a911ebac6c", "name": "Legacy-named symbol `public_estimator_v2` in src/lib/estimator/constants.ts:7", "shortDescription": {"text": "Legacy-named symbol `public_estimator_v2` in src/lib/estimator/constants.ts:7"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-42f1ead7e3c93abb", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/product-requests/opensolar-push.ts:29", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/product-requests/opensolar-push.ts:29"}, "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-360b97a3b1142b3d", "name": "Commented-code block (6 lines) in src/lib/compliance-v2/scoring.ts:155", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/compliance-v2/scoring.ts:155"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7d87b436ee733d50", "name": "Commented-code block (5 lines) in src/lib/pm-tracker/metrics/readiness.ts:90", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/pm-tracker/metrics/readiness.ts:90"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-939f3f3203e93202", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/shit-show/hubspot-note.ts:34", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/shit-show/hubspot-note.ts:34"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4a91066f052deff9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/admin-workflows/actions/create-hubspot-task.ts:59", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/admin-workflows/actions/create-hubspot-task.ts:59"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8d7f7017374c7960", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/admin-workflows/actions/update-hubspot-ticket-property.ts:36", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/admin-workflows/actions/update-hubspot-ticket-property.ts:36"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-aed955e556cc9f20", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/admin-workflows/actions/add-hubspot-note.ts:29", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/admin-workflows/actions/add-hubspot-note.ts:29"}, "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-480378632f92ba4f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/admin-workflows/actions/add-hubspot-contact-note.ts:41", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/admin-workflows/actions/add-hubspot-contact-note.ts:41"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-17dbd0bea11ee776", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/admin-workflows/actions/update-hubspot-contact-property.ts:36", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/admin-workflows/actions/update-hubspot-contact-property.ts:36"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8a7e55a1a9843117", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/admin-workflows/actions/find-hubspot-contact.ts:56", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/admin-workflows/actions/find-hubspot-contact.ts:56"}, "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-79baecbfaddcfe48", "name": "Commented-code block (5 lines) in src/lib/solar/v12-engine/runner.ts:37", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/solar/v12-engine/runner.ts:37"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3ca7a16856c8726a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/useShopHealthData.ts:12", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/useShopHealthData.ts:12"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-45d717aafbad2bd5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/useBaselineTable.ts:28", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/useBaselineTable.ts:28"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3c7f31498aa8ff51", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/useExecutiveData.ts:46", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/useExecutiveData.ts:46"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6498c8b8ea326c7a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/useProjectData.ts:53", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/useProjectData.ts:53"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-952d9c5d199d071c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/useActivityTracking.ts:138", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/useActivityTracking.ts: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-af62e73bd905c17d", "name": "Commented-code block (6 lines) in src/inngest/functions/admin-workflow-executor.ts:177", "shortDescription": {"text": "Commented-code block (6 lines) in src/inngest/functions/admin-workflow-executor.ts:177"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6d1900d6eb1a0334", "name": "131 env vars used in code but missing from .env.example", "shortDescription": {"text": "131 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `ADMIN_RECOVERY_CODE`, `AI_DESIGN_REVIEW_ENABLED`, `ANTHROPIC_MODEL`, `API_BASE_URL`, `APP_URL`, `AUDIT_ALERT_EMAILS`, `AUDIT_RETENTION_DAYS`, `AUDIT_SAMPLE_SIZE` + 123 more. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/23540"}, "properties": {"repository": "zachsrosen/pb-operations-suite", "repoUrl": "https://github.com/zachsrosen/pb-operations-suite", "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-3d8a8e3d3fbb1a3e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/zuper-actually-unlinked.ts:39"}, "properties": {"repobilityId": "4c498c437b5878c0", "scanner": "scanner-primary", "fingerprint": "3d8a8e3d3fbb1a3e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6177e2dd8b733c55", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-adders.ts:78"}, "properties": {"repobilityId": "38e01a0398bafd20", "scanner": "scanner-primary", "fingerprint": "6177e2dd8b733c55", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-49916601815ea316", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_pull-zoho-item-groups.ts:89"}, "properties": {"repobilityId": "43b007b269bb0a27", "scanner": "scanner-primary", "fingerprint": "49916601815ea316", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-67bed06ce516ca17", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-roles.ts:20"}, "properties": {"repobilityId": "99f11c8ac2461873", "scanner": "scanner-primary", "fingerprint": "67bed06ce516ca17", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-30224939323dc8a0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/zoho-check-fields.ts:25"}, "properties": {"repobilityId": "3c557a07ad1322d5", "scanner": "scanner-primary", "fingerprint": "30224939323dc8a0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3dd0671bc83769d9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-shit-show-flags.ts:62"}, "properties": {"repobilityId": "d68d1efdb37308e3", "scanner": "scanner-primary", "fingerprint": "3dd0671bc83769d9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ff5aa3fec61e408e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/deactivate-crew-member.ts:83"}, "properties": {"repobilityId": "63287029c60ad792", "scanner": "scanner-primary", "fingerprint": "ff5aa3fec61e408e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e59f1f72810b09ed", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-surveyor-mismatches.ts:68"}, "properties": {"repobilityId": "aeb652cc2bfd9332", "scanner": "scanner-primary", "fingerprint": "e59f1f72810b09ed", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ce6197a3b9b1be1e", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 scripts/create-hubspot-property-object.ts:211"}, "properties": {"repobilityId": "5d8e5264a88765ad", "scanner": "scanner-primary", "fingerprint": "ce6197a3b9b1be1e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-aa7de27b19fe91aa", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/create-hubspot-property-object.ts:262"}, "properties": {"repobilityId": "1e78dc7075a8536b", "scanner": "scanner-primary", "fingerprint": "aa7de27b19fe91aa", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-49fb855045f33640", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-sop-product-creation.ts:232"}, "properties": {"repobilityId": "4ff052f20e7e2961", "scanner": "scanner-primary", "fingerprint": "49fb855045f33640", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f2cf682c90798e60", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-sop-tools-3.ts:359"}, "properties": {"repobilityId": "b1fd3ccd5354c52d", "scanner": "scanner-primary", "fingerprint": "f2cf682c90798e60", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7ca0f2563f5785e6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_create-tesla-model-hubspot-props.ts:101"}, "properties": {"repobilityId": "cefa5909b46d356c", "scanner": "scanner-primary", "fingerprint": "7ca0f2563f5785e6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4498881f9efc9741", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_fix-catalog-integrity.ts:32"}, "properties": {"repobilityId": "849f0eefd29b2099", "scanner": "scanner-primary", "fingerprint": "4498881f9efc9741", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3fdcdb04144a6a5e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/zuper-orphan-hs-details.ts:91"}, "properties": {"repobilityId": "7151d61c1f1a56d7", "scanner": "scanner-primary", "fingerprint": "3fdcdb04144a6a5e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ed8f9e981ecd95df", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-zoho-zuper-ids.ts:19"}, "properties": {"repobilityId": "2582a76dc101f595", "scanner": "scanner-primary", "fingerprint": "ed8f9e981ecd95df", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0e4eb80a3b165e05", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_match-zoho-orphans.ts:103"}, "properties": {"repobilityId": "b6706ece5be48d4b", "scanner": "scanner-primary", "fingerprint": "0e4eb80a3b165e05", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d2dea1e5d871ede7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_verify-property-coverage.ts:79"}, "properties": {"repobilityId": "6232e6477bc5bce5", "scanner": "scanner-primary", "fingerprint": "d2dea1e5d871ede7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-520941af6acb6264", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_verify-m34-update-path.ts:123"}, "properties": {"repobilityId": "5ab4a4ac5254bb76", "scanner": "scanner-primary", "fingerprint": "520941af6acb6264", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-82a8dc53fa349237", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/zuper-orphan-hs-links.ts:58"}, "properties": {"repobilityId": "8372a60ceea81ea2", "scanner": "scanner-primary", "fingerprint": "82a8dc53fa349237", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7387028ca480dabb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-sop-trackers.ts:175"}, "properties": {"repobilityId": "801449a7190b4182", "scanner": "scanner-primary", "fingerprint": "7387028ca480dabb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b3cabf55e0271b81", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_rebrand-generic-products.ts:80"}, "properties": {"repobilityId": "9f617559c1eb00e7", "scanner": "scanner-primary", "fingerprint": "b3cabf55e0271b81", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5162420dcdffe9bf", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/cleanup-unlinked-products.ts:24"}, "properties": {"repobilityId": "235d8caa7f38f842", "scanner": "scanner-primary", "fingerprint": "5162420dcdffe9bf", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fb2c90f04b5aecad", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_export-hubspot-orphan-list.ts:39"}, "properties": {"repobilityId": "9020277e269b8079", "scanner": "scanner-primary", "fingerprint": "fb2c90f04b5aecad", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-57e5138601e8e06c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-zuper-drift.ts:79"}, "properties": {"repobilityId": "43604e9e941c390b", "scanner": "scanner-primary", "fingerprint": "57e5138601e8e06c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-19232c2fc03ba7c3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/zuper-orphan-full-crossref.ts:176"}, "properties": {"repobilityId": "5456d1936b1a3428", "scanner": "scanner-primary", "fingerprint": "19232c2fc03ba7c3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b3f952689bb7e35b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/zoho-item-fields.ts:41"}, "properties": {"repobilityId": "c74b40036cf799b9", "scanner": "scanner-primary", "fingerprint": "b3f952689bb7e35b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e38c2b5e905208fc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-sop-reference.ts:658"}, "properties": {"repobilityId": "3faaf134ab4fa18d", "scanner": "scanner-primary", "fingerprint": "e38c2b5e905208fc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-440be815ab6788b7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-sop-meta.ts:197"}, "properties": {"repobilityId": "cb1ce81e19e1a3a9", "scanner": "scanner-primary", "fingerprint": "440be815ab6788b7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1e3324e929e03056", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/dry-run-pm-flags.ts:16"}, "properties": {"repobilityId": "61af64522d3f2e48", "scanner": "scanner-primary", "fingerprint": "1e3324e929e03056", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-89b6b5929482aedd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/classify-sos.ts:143"}, "properties": {"repobilityId": "11ff0683ebc56277", "scanner": "scanner-primary", "fingerprint": "89b6b5929482aedd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2fb5dc01cc20bf99", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-zuper-properties.ts:40"}, "properties": {"repobilityId": "53735f097d86ddea", "scanner": "scanner-primary", "fingerprint": "2fb5dc01cc20bf99", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ad3514e707860282", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-phase1-errors.ts:15"}, "properties": {"repobilityId": "a78e9e86d9c6d4d4", "scanner": "scanner-primary", "fingerprint": "ad3514e707860282", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e51fd7e74aa06b82", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-sop-service.ts:323"}, "properties": {"repobilityId": "dbe5e79f80cf0996", "scanner": "scanner-primary", "fingerprint": "e51fd7e74aa06b82", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4ff535cfa7a2e798", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/zoho-list-customfields.ts:14"}, "properties": {"repobilityId": "ac529b0bfdce58bc", "scanner": "scanner-primary", "fingerprint": "4ff535cfa7a2e798", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2201c62312f3f544", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/zoho-custom-fields.ts:13"}, "properties": {"repobilityId": "f8be0aac1e285f52", "scanner": "scanner-primary", "fingerprint": "2201c62312f3f544", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a4801e0db9365769", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_mismatch-deal-stages.ts:62"}, "properties": {"repobilityId": "19663b2daa9c9a7c", "scanner": "scanner-primary", "fingerprint": "a4801e0db9365769", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-481299c7b4198831", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/aircall-analytics-import.ts:40"}, "properties": {"repobilityId": "4c0fb742f4e81d49", "scanner": "scanner-primary", "fingerprint": "481299c7b4198831", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7fba387465bdcb81", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_delete-test-products.ts:58"}, "properties": {"repobilityId": "a943e25a74827920", "scanner": "scanner-primary", "fingerprint": "7fba387465bdcb81", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-141c9071306038b0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-zuper-hs-ids.ts:19"}, "properties": {"repobilityId": "5b4286780d8bc38b", "scanner": "scanner-primary", "fingerprint": "141c9071306038b0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ebf046a932dc3732", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/pe-photo-submit.ts:534"}, "properties": {"repobilityId": "f3cf3e6aee4880e8", "scanner": "scanner-primary", "fingerprint": "ebf046a932dc3732", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2577b52ec7bf1d34", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_zuper-custom-field-probe.ts:58"}, "properties": {"repobilityId": "98cdc31de68e3436", "scanner": "scanner-primary", "fingerprint": "2577b52ec7bf1d34", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-118681d3432b2ab5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/create-ip-id-fields.ts:14"}, "properties": {"repobilityId": "3b88017375471f61", "scanner": "scanner-primary", "fingerprint": "118681d3432b2ab5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a5e4501c5dae66a2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-site-surveyor.ts:50"}, "properties": {"repobilityId": "fdcd4419a4630384", "scanner": "scanner-primary", "fingerprint": "a5e4501c5dae66a2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0621f06ad1c05666", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/pe-sync-db.ts:92"}, "properties": {"repobilityId": "692f9cd7e8bd71d4", "scanner": "scanner-primary", "fingerprint": "0621f06ad1c05666", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d89d6d1f7c09c2f0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/sync-2026-items-to-zuper.ts:247"}, "properties": {"repobilityId": "809209d5859d8a2e", "scanner": "scanner-primary", "fingerprint": "d89d6d1f7c09c2f0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-aaece2baef5d556a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/zuper-tasks-vs-jobs.ts:88"}, "properties": {"repobilityId": "c0c54bb91ec317bd", "scanner": "scanner-primary", "fingerprint": "aaece2baef5d556a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c3e3f1fd4756a489", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-canonical-keys.ts:19"}, "properties": {"repobilityId": "2909e6680e92c280", "scanner": "scanner-primary", "fingerprint": "c3e3f1fd4756a489", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-acb70e5dbf90f5f2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/query-so-hug-items.ts:19"}, "properties": {"repobilityId": "fa5594a277951243", "scanner": "scanner-primary", "fingerprint": "acb70e5dbf90f5f2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e7260fffee140087", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/pe-crossref.ts:61"}, "properties": {"repobilityId": "498c7a7e806740e8", "scanner": "scanner-primary", "fingerprint": "e7260fffee140087", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-47a9f3c52fe0a264", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-goals-digest.ts:100"}, "properties": {"repobilityId": "148c3c3e4acf9093", "scanner": "scanner-primary", "fingerprint": "47a9f3c52fe0a264", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3ab974f2b84927e0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_zuper-mismatch-report.ts:117"}, "properties": {"repobilityId": "9c9d53c56599b440", "scanner": "scanner-primary", "fingerprint": "3ab974f2b84927e0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c135badd2446bc85", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_audit-catalog-integrity.ts:41"}, "properties": {"repobilityId": "7edcf64f5e2a4c88", "scanner": "scanner-primary", "fingerprint": "c135badd2446bc85", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-89ad28a7ad63f26d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-zoho-item.ts:24"}, "properties": {"repobilityId": "77477545b7d4753d", "scanner": "scanner-primary", "fingerprint": "89ad28a7ad63f26d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bab598cba6e1c4d8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/sync-tasks.ts:115"}, "properties": {"repobilityId": "2ce029ff62f44ca5", "scanner": "scanner-primary", "fingerprint": "bab598cba6e1c4d8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9ff7647bcbf0801c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/clear-sop.ts:14"}, "properties": {"repobilityId": "f38803f055be05b6", "scanner": "scanner-primary", "fingerprint": "9ff7647bcbf0801c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2324d35b563a3f2b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/create-zoho-cf.ts:30"}, "properties": {"repobilityId": "ef496314daee62e9", "scanner": "scanner-primary", "fingerprint": "2324d35b563a3f2b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-69a20552d2372136", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/catalog-reconciliation-audit.ts:115"}, "properties": {"repobilityId": "2edb5718db7a2ce6", "scanner": "scanner-primary", "fingerprint": "69a20552d2372136", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e210b98b419d96eb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-remaining-brands.ts:27"}, "properties": {"repobilityId": "223c7d3da753e3c2", "scanner": "scanner-primary", "fingerprint": "e210b98b419d96eb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-047c7df79cbb3316", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/4x10-extract-install-data.ts:30"}, "properties": {"repobilityId": "9fabd52b4b6dbb56", "scanner": "scanner-primary", "fingerprint": "047c7df79cbb3316", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ca9e2a9ca79b2a91", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/lucas-compliance-diff.ts:79"}, "properties": {"repobilityId": "f281f3667f1afa86", "scanner": "scanner-primary", "fingerprint": "ca9e2a9ca79b2a91", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-564e35c58ca4c219", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-manual-runs.ts:15"}, "properties": {"repobilityId": "687992dd69445d17", "scanner": "scanner-primary", "fingerprint": "564e35c58ca4c219", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ca40ee59ffc79d9f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/match-ips-to-zuper-orphans.ts:153"}, "properties": {"repobilityId": "c455558a31188f19", "scanner": "scanner-primary", "fingerprint": "ca40ee59ffc79d9f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b42976f104fdd4f8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-hyundai-zuper.ts:20"}, "properties": {"repobilityId": "7d0412db3a1e797e", "scanner": "scanner-primary", "fingerprint": "b42976f104fdd4f8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-aaa4575ee77855d4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/send-retroactive-reassignment-emails.ts:43"}, "properties": {"repobilityId": "6bf8706adb1977de", "scanner": "scanner-primary", "fingerprint": "aaa4575ee77855d4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b903ec96761ef835", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_backfill-zuper-dealid-format.ts:33"}, "properties": {"repobilityId": "3d331470aef306f7", "scanner": "scanner-primary", "fingerprint": "b903ec96761ef835", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b38db5a1cec0e183", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-zuper-no-zoho.ts:15"}, "properties": {"repobilityId": "00d807b6c39f7259", "scanner": "scanner-primary", "fingerprint": "b38db5a1cec0e183", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-38701818a76fe9b1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-sop-executive.ts:273"}, "properties": {"repobilityId": "0c17d307ad3dba23", "scanner": "scanner-primary", "fingerprint": "38701818a76fe9b1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8f5016d71d42566c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/full-2026-product-sync.ts:188"}, "properties": {"repobilityId": "792064e40247d3ae", "scanner": "scanner-primary", "fingerprint": "8f5016d71d42566c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c4447cf201d36d64", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_pricing-check.ts:21"}, "properties": {"repobilityId": "0c3c1009c70aa237", "scanner": "scanner-primary", "fingerprint": "c4447cf201d36d64", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b6dba01388bacca3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verify-zuper-readiness.ts:21"}, "properties": {"repobilityId": "993940781a2e9684", "scanner": "scanner-primary", "fingerprint": "b6dba01388bacca3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-976d3344fe65527c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-ip-ids.ts:26"}, "properties": {"repobilityId": "94232cbdc4bc5251", "scanner": "scanner-primary", "fingerprint": "976d3344fe65527c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f2bbc910377c1d94", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-sop-design-split.ts:419"}, "properties": {"repobilityId": "6c342424db336a48", "scanner": "scanner-primary", "fingerprint": "f2bbc910377c1d94", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4c05fc8a4e25b752", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_backfill-tesla-device-push.ts:25"}, "properties": {"repobilityId": "1e596f3afc4ff2be", "scanner": "scanner-primary", "fingerprint": "4c05fc8a4e25b752", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b2aad937b91fc011", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/deactivate-unlinked.ts:19"}, "properties": {"repobilityId": "245c64a0591f68ad", "scanner": "scanner-primary", "fingerprint": "b2aad937b91fc011", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fb3bb78d3f8ad8a1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_find-spec-candidate.ts:69"}, "properties": {"repobilityId": "e6c23b849f01d16a", "scanner": "scanner-primary", "fingerprint": "fb3bb78d3f8ad8a1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9d448d13745a37a6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-zuper-naming.ts:44"}, "properties": {"repobilityId": "fa0e9cdac32d5849", "scanner": "scanner-primary", "fingerprint": "9d448d13745a37a6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7f8507b62902d1f8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-zoho-135735.ts:9"}, "properties": {"repobilityId": "adc6a910780cad24", "scanner": "scanner-primary", "fingerprint": "7f8507b62902d1f8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b075ebc70089a5a8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-shovels-enrichment.ts:37"}, "properties": {"repobilityId": "123e171f5d0cba3b", "scanner": "scanner-primary", "fingerprint": "b075ebc70089a5a8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-990d07931faceda3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-zoho-cf-update.ts:15"}, "properties": {"repobilityId": "4c794c7d94f8e024", "scanner": "scanner-primary", "fingerprint": "990d07931faceda3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5dc61f7311c52e9d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verify-hs-link-targets.ts:34"}, "properties": {"repobilityId": "4a367ccf6964e6ae", "scanner": "scanner-primary", "fingerprint": "5dc61f7311c52e9d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-270790e7041e3170", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-sop.ts:70"}, "properties": {"repobilityId": "6f29697ef6412b57", "scanner": "scanner-primary", "fingerprint": "270790e7041e3170", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-628cb59ba33d44f1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-pe-docs.ts:106"}, "properties": {"repobilityId": "ee5b24349ebfce01", "scanner": "scanner-primary", "fingerprint": "628cb59ba33d44f1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-45c95b7e2db6d044", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/create-ips-from-zuper-hs.ts:47"}, "properties": {"repobilityId": "ea247ecb36b188d2", "scanner": "scanner-primary", "fingerprint": "45c95b7e2db6d044", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7ea20287e0628285", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_pull-zuper-product-schema.ts:39"}, "properties": {"repobilityId": "7e46bfaabec8cba5", "scanner": "scanner-primary", "fingerprint": "7ea20287e0628285", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-47ae362228487160", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-hs-orphans-in-zoho-zuper.ts:57"}, "properties": {"repobilityId": "075034104b7a286a", "scanner": "scanner-primary", "fingerprint": "47ae362228487160", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8d94ae036349c130", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/inspect-zuper-products.ts:19"}, "properties": {"repobilityId": "862b8292c7c387c6", "scanner": "scanner-primary", "fingerprint": "8d94ae036349c130", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-dc54785d39d5a564", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-sop-sales-marketing.ts:286"}, "properties": {"repobilityId": "59cf77949306e81c", "scanner": "scanner-primary", "fingerprint": "dc54785d39d5a564", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2ac8bc072814fdb1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/create-pe-doc-properties.ts:48"}, "properties": {"repobilityId": "ccb95c40964aaf91", "scanner": "scanner-primary", "fingerprint": "2ac8bc072814fdb1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4c7953a78e6d167d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_pe-rejected-docs-by-team-gdoc.ts:78"}, "properties": {"repobilityId": "f3c420ca6a09532f", "scanner": "scanner-primary", "fingerprint": "4c7953a78e6d167d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b6aa5365ea767d95", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/link-tesla-wall-connector.ts:39"}, "properties": {"repobilityId": "8cc37f8d4f4661e7", "scanner": "scanner-primary", "fingerprint": "b6aa5365ea767d95", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8dba79443babfec0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/export-product-truth-set.ts:145"}, "properties": {"repobilityId": "913aa3ff8cca2174", "scanner": "scanner-primary", "fingerprint": "8dba79443babfec0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1cdde77af5ff04f9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/enumerate-service-task-statuses.ts:50"}, "properties": {"repobilityId": "8fda4af3d89f2744", "scanner": "scanner-primary", "fingerprint": "1cdde77af5ff04f9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-78ecdc007bcca1b9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/site-surveyor-audit-extended.ts:109"}, "properties": {"repobilityId": "58d4e5691596bd9f", "scanner": "scanner-primary", "fingerprint": "78ecdc007bcca1b9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8cd7d897c435c142", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/push-remaining-to-zuper.ts:32"}, "properties": {"repobilityId": "c9e58b3b235fbf40", "scanner": "scanner-primary", "fingerprint": "8cd7d897c435c142", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-79cf601085b24bde", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_zoho-pricing-json.ts:50"}, "properties": {"repobilityId": "de253cbbbe92fe06", "scanner": "scanner-primary", "fingerprint": "79cf601085b24bde", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-89337c087a264ee3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/enumerate-service-task-titles.ts:66"}, "properties": {"repobilityId": "1b05d21cc566f850", "scanner": "scanner-primary", "fingerprint": "89337c087a264ee3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c01def73bb999d8e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_scan-zuper-metadata.ts:40"}, "properties": {"repobilityId": "e04a77c63704bd50", "scanner": "scanner-primary", "fingerprint": "c01def73bb999d8e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b5b87d67f17f7f72", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-sop-suites.ts:448"}, "properties": {"repobilityId": "e5b8ef527a827c3a", "scanner": "scanner-primary", "fingerprint": "b5b87d67f17f7f72", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-86102b47c37389dd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-so-warehouses.ts:66"}, "properties": {"repobilityId": "7afe3cf35fae8492", "scanner": "scanner-primary", "fingerprint": "86102b47c37389dd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f5c4e19a3b2b9dd4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/update-ca-survey-availability.ts:46"}, "properties": {"repobilityId": "d3d339b13d8a5741", "scanner": "scanner-primary", "fingerprint": "f5c4e19a3b2b9dd4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-adfa594e6b27b2a8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/decode-pe-scrape.ts:179"}, "properties": {"repobilityId": "5f5bbe80eda8d833", "scanner": "scanner-primary", "fingerprint": "adfa594e6b27b2a8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a595a8b877a53269", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-cross-links.ts:30"}, "properties": {"repobilityId": "6ef80d6e223c2e76", "scanner": "scanner-primary", "fingerprint": "a595a8b877a53269", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-49b06f9ef6d12a5a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/zoho-raw-item.ts:16"}, "properties": {"repobilityId": "bed9e794e5b23111", "scanner": "scanner-primary", "fingerprint": "49b06f9ef6d12a5a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d6f9c24604d2ff7b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/debug-zoho.ts:23"}, "properties": {"repobilityId": "0b8ea15bf674462c", "scanner": "scanner-primary", "fingerprint": "d6f9c24604d2ff7b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6f361449f01b15a1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-sop-inventory.ts:606"}, "properties": {"repobilityId": "4cce350e46781637", "scanner": "scanner-primary", "fingerprint": "6f361449f01b15a1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-70d1d55f228fa2eb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/diagnose-assignment.ts:36"}, "properties": {"repobilityId": "be9acc0930911701", "scanner": "scanner-primary", "fingerprint": "70d1d55f228fa2eb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-557dd716568cd0d1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/retry-phase3.ts:26"}, "properties": {"repobilityId": "ac7703f7bbc6c28e", "scanner": "scanner-primary", "fingerprint": "557dd716568cd0d1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b80dd00acb2617be", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/ips-zuper-no-zoho.ts:17"}, "properties": {"repobilityId": "79b9d277c64418b8", "scanner": "scanner-primary", "fingerprint": "b80dd00acb2617be", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d43d0e9523c7d0ee", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_user-audit.ts:19"}, "properties": {"repobilityId": "7d4b3edc4a0a9089", "scanner": "scanner-primary", "fingerprint": "d43d0e9523c7d0ee", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-040cdbdfcdfb4215", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/link-two-hs-matches.ts:18"}, "properties": {"repobilityId": "acb9c0dca8608b38", "scanner": "scanner-primary", "fingerprint": "040cdbdfcdfb4215", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-14878759f7021979", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_pe-missing-docs-by-team-gdoc.ts:72"}, "properties": {"repobilityId": "702b6125d41d9d20", "scanner": "scanner-primary", "fingerprint": "14878759f7021979", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-13eabc1e1322106a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-equipment-assets.ts:92"}, "properties": {"repobilityId": "cb617631bd4a42aa", "scanner": "scanner-primary", "fingerprint": "13eabc1e1322106a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b1b9bfa158dd2950", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-so-reference-numbers.ts:23"}, "properties": {"repobilityId": "637a3587a17ed342", "scanner": "scanner-primary", "fingerprint": "b1b9bfa158dd2950", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6c22fb6079d9c669", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/snapshot-compliance-baseline.ts:61"}, "properties": {"repobilityId": "1ae547b27392d2f7", "scanner": "scanner-primary", "fingerprint": "6c22fb6079d9c669", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cd517092863442f4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fetch-hubspot-schema.js:11"}, "properties": {"repobilityId": "9877d2e41c881c8c", "scanner": "scanner-primary", "fingerprint": "cd517092863442f4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8abae9c45fac2b25", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/site-surveyor-mismatch.ts:44"}, "properties": {"repobilityId": "b0fc0cc3ac39d8d8", "scanner": "scanner-primary", "fingerprint": "8abae9c45fac2b25", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-22630a80d318fcc2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-equipment-assets-gemini.ts:211"}, "properties": {"repobilityId": "96840ed61469ce9a", "scanner": "scanner-primary", "fingerprint": "22630a80d318fcc2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8b7011b10b25eb3f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/analyze-session5.ts:237"}, "properties": {"repobilityId": "b354d94334ecfc92", "scanner": "scanner-primary", "fingerprint": "8b7011b10b25eb3f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d4ea4c1209ad180b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-new-ips.ts:24"}, "properties": {"repobilityId": "53c30cdd07461b19", "scanner": "scanner-primary", "fingerprint": "d4ea4c1209ad180b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f0fe3aa6104ff181", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-da-drift.ts:37"}, "properties": {"repobilityId": "8ade69a33110fd2d", "scanner": "scanner-primary", "fingerprint": "f0fe3aa6104ff181", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cf30f7915113072c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_zoho-pricing-audit.ts:13"}, "properties": {"repobilityId": "50d3b14fd4bda7ec", "scanner": "scanner-primary", "fingerprint": "cf30f7915113072c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c43969e554390c39", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/list-brand-dupes.ts:34"}, "properties": {"repobilityId": "862b22d4a8f702b1", "scanner": "scanner-primary", "fingerprint": "c43969e554390c39", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-95d1fd58d5dc87fb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_audit-generic-products.ts:130"}, "properties": {"repobilityId": "57d693e823579809", "scanner": "scanner-primary", "fingerprint": "95d1fd58d5dc87fb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7574e77715e3e44b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/compare-product-pricing.ts:193"}, "properties": {"repobilityId": "4953eba2780898b6", "scanner": "scanner-primary", "fingerprint": "7574e77715e3e44b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f5e96af18d47cf55", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-activity-userid.ts:25"}, "properties": {"repobilityId": "c675cf8f2e081bab", "scanner": "scanner-primary", "fingerprint": "f5e96af18d47cf55", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3d2744056e86bd24", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verify-339-coverage.ts:63"}, "properties": {"repobilityId": "313ac79ea57410c2", "scanner": "scanner-primary", "fingerprint": "3d2744056e86bd24", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5f19082b33594171", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/find-orphans-in-list.ts:30"}, "properties": {"repobilityId": "8bf15faf0b75ef32", "scanner": "scanner-primary", "fingerprint": "5f19082b33594171", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ae86bd69c8634ca1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-orphan-uids.ts:26"}, "properties": {"repobilityId": "a52c6b0ed4529905", "scanner": "scanner-primary", "fingerprint": "ae86bd69c8634ca1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b68928ffc60ea2e0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-hs-zuper-crossref.ts:23"}, "properties": {"repobilityId": "bf7404ad404d397a", "scanner": "scanner-primary", "fingerprint": "b68928ffc60ea2e0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a9741dcc40e6401d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/ensure-hubspot-product-props.ts:59"}, "properties": {"repobilityId": "dfc5c5ee5685209a", "scanner": "scanner-primary", "fingerprint": "a9741dcc40e6401d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-11fc3e27a8c5304a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-brand-fixes.ts:33"}, "properties": {"repobilityId": "1e96effccb916bdb", "scanner": "scanner-primary", "fingerprint": "11fc3e27a8c5304a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-dcb4ac056db5fc7d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-shadow.ts:110"}, "properties": {"repobilityId": "43ed66416f328312", "scanner": "scanner-primary", "fingerprint": "dcb4ac056db5fc7d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-536779b19cec08ed", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-pm-flags.ts:17"}, "properties": {"repobilityId": "e6b6ffe6f2de31b1", "scanner": "scanner-primary", "fingerprint": "536779b19cec08ed", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-22f81837550c8968", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/delete-unlinked-ips.ts:16"}, "properties": {"repobilityId": "b8d3265cd9222541", "scanner": "scanner-primary", "fingerprint": "22f81837550c8968", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3ae8f684a6c79a29", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/diag-deal-pms.ts:14"}, "properties": {"repobilityId": "a22775fb2e6917ad", "scanner": "scanner-primary", "fingerprint": "3ae8f684a6c79a29", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3cf7a4211de4d98c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/unlink-heuristic-powerhub-links.ts:48"}, "properties": {"repobilityId": "f673f2b44719b698", "scanner": "scanner-primary", "fingerprint": "3cf7a4211de4d98c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c77d2dc69b9767b6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-phase1-gaps.ts:16"}, "properties": {"repobilityId": "2dc7d3eae9a7d3eb", "scanner": "scanner-primary", "fingerprint": "c77d2dc69b9767b6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-aedca1e3b60c2e87", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/preflight-check.js:115"}, "properties": {"repobilityId": "d5c4478fc060f464", "scanner": "scanner-primary", "fingerprint": "aedca1e3b60c2e87", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4e74a82cd431739c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/audit-zuper-dupes.ts:44"}, "properties": {"repobilityId": "7d9d304209396671", "scanner": "scanner-primary", "fingerprint": "4e74a82cd431739c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b02d363886ea8329", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/preview-pe-digest.tsx:166"}, "properties": {"repobilityId": "bd36625dd17294e2", "scanner": "scanner-primary", "fingerprint": "b02d363886ea8329", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f236a8225dca88e9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fetch-zoho-item-ids.ts:43"}, "properties": {"repobilityId": "041f34883b39e39a", "scanner": "scanner-primary", "fingerprint": "f236a8225dca88e9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0ec65a6c6387aeea", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-zuper-dupes-v2.ts:93"}, "properties": {"repobilityId": "25660b20d7461643", "scanner": "scanner-primary", "fingerprint": "0ec65a6c6387aeea", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-064fb19828a807f0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/catalog-state.ts:24"}, "properties": {"repobilityId": "b839ce166253595f", "scanner": "scanner-primary", "fingerprint": "064fb19828a807f0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e82813ce5fd04f5b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/pull-zoho-item-ids.ts:35"}, "properties": {"repobilityId": "48e6ca7d74ee9d0c", "scanner": "scanner-primary", "fingerprint": "e82813ce5fd04f5b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3b9c486ba57d79fe", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/aircall-backfill.ts:39"}, "properties": {"repobilityId": "b820bc893d61d630", "scanner": "scanner-primary", "fingerprint": "3b9c486ba57d79fe", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-30f180f7d4907274", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-vendor-ids.ts:10"}, "properties": {"repobilityId": "b81ad8600e7f2239", "scanner": "scanner-primary", "fingerprint": "30f180f7d4907274", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-20199fdd33b837d8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/send-weekly-compliance.ts:58"}, "properties": {"repobilityId": "fe42e9d4510ec083", "scanner": "scanner-primary", "fingerprint": "20199fdd33b837d8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-56f9bff5a0689961", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/zuper-orphan-so-overlap.ts:39"}, "properties": {"repobilityId": "f85d8e578f40df9d", "scanner": "scanner-primary", "fingerprint": "56f9bff5a0689961", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d065d53165f88c74", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/site-survey-missing-surveyor.ts:46"}, "properties": {"repobilityId": "8840e31d8f4e6af9", "scanner": "scanner-primary", "fingerprint": "d065d53165f88c74", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5af939e23bbc7678", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-zuper-dupes.ts:47"}, "properties": {"repobilityId": "cdd18a97352abd62", "scanner": "scanner-primary", "fingerprint": "5af939e23bbc7678", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8c911db0f710175f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/query-oleary.ts:10"}, "properties": {"repobilityId": "93d73499970c4e78", "scanner": "scanner-primary", "fingerprint": "8c911db0f710175f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9774dc7c684c6b3b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_inspect-test-products.ts:32"}, "properties": {"repobilityId": "cf8d6379812a8b9d", "scanner": "scanner-primary", "fingerprint": "9774dc7c684c6b3b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bf46b116cb855f79", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-sop-tools-2.ts:398"}, "properties": {"repobilityId": "b930d8607d3e14e7", "scanner": "scanner-primary", "fingerprint": "bf46b116cb855f79", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-22db9ebf27e4d4d8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-property-backfill-gaps.ts:49"}, "properties": {"repobilityId": "f9573f444467dbfd", "scanner": "scanner-primary", "fingerprint": "22db9ebf27e4d4d8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fc3edff9cfc7e498", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/cleanup-test-catalog-items.ts:71"}, "properties": {"repobilityId": "4b589fb1e664c520", "scanner": "scanner-primary", "fingerprint": "fc3edff9cfc7e498", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f7adf51f9a7408a9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/query-8732.ts:16"}, "properties": {"repobilityId": "ec81e130fa94b425", "scanner": "scanner-primary", "fingerprint": "f7adf51f9a7408a9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d22f1f997d601b8e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-linked-products.ts:22"}, "properties": {"repobilityId": "35a38955aaa60867", "scanner": "scanner-primary", "fingerprint": "d22f1f997d601b8e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d5118dd0e1218420", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/list-zoho-sos.ts:35"}, "properties": {"repobilityId": "3b9298963fc5d7be", "scanner": "scanner-primary", "fingerprint": "d5118dd0e1218420", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-98d4d659cdd46fd3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/batch-rtb-pipeline.ts:60"}, "properties": {"repobilityId": "c2a8896bf8caf4b0", "scanner": "scanner-primary", "fingerprint": "98d4d659cdd46fd3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-01548acec409fbc5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/investigate-silfab-and-gaps.ts:23"}, "properties": {"repobilityId": "9e4c23d5e0813eb9", "scanner": "scanner-primary", "fingerprint": "01548acec409fbc5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-31cca52876766208", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_pull-hubspot-manufacturer-enum.ts:41"}, "properties": {"repobilityId": "ddfe5638f5b5f13c", "scanner": "scanner-primary", "fingerprint": "31cca52876766208", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-734738a2ffcb8022", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-ahj-utility-approvals.ts:71"}, "properties": {"repobilityId": "942d3d0c0bbca442", "scanner": "scanner-primary", "fingerprint": "734738a2ffcb8022", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5439111cc8c62a46", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/categorize-unlinked-hs.ts:148"}, "properties": {"repobilityId": "f640983f090e37c7", "scanner": "scanner-primary", "fingerprint": "5439111cc8c62a46", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a3c4d99e08c2b6cd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-zoho-item-ids.ts:26"}, "properties": {"repobilityId": "e77f9be7805f3296", "scanner": "scanner-primary", "fingerprint": "a3c4d99e08c2b6cd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8c9cb34fed2ce6bd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/merge-brand-dupes.ts:47"}, "properties": {"repobilityId": "948a38e013f73d0f", "scanner": "scanner-primary", "fingerprint": "8c9cb34fed2ce6bd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5ae9886072b75b17", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-so-deal-ids.ts:77"}, "properties": {"repobilityId": "f0158cb26fa81e21", "scanner": "scanner-primary", "fingerprint": "5ae9886072b75b17", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fe2aa617a5357c78", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/find-brand-conflicts.ts:45"}, "properties": {"repobilityId": "0824375e13219c67", "scanner": "scanner-primary", "fingerprint": "fe2aa617a5357c78", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9363316738932758", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-sop-drafts.ts:798"}, "properties": {"repobilityId": "bad8d1fc54dbd518", "scanner": "scanner-primary", "fingerprint": "9363316738932758", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b6f5a904cd6aad25", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-hyundai-lightspeed.ts:18"}, "properties": {"repobilityId": "147899ea30841eca", "scanner": "scanner-primary", "fingerprint": "b6f5a904cd6aad25", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-395b88c210ef9de3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_create-zuper-product-customfields.ts:125"}, "properties": {"repobilityId": "0381c36643361936", "scanner": "scanner-primary", "fingerprint": "395b88c210ef9de3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-397696806502b59f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-zoho-update.ts:7"}, "properties": {"repobilityId": "bbc78f5840bb81dc", "scanner": "scanner-primary", "fingerprint": "397696806502b59f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-182f53a50917f447", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-ooo-bot-config.ts:53"}, "properties": {"repobilityId": "81f9ee796734047d", "scanner": "scanner-primary", "fingerprint": "182f53a50917f447", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-30247733309c5c7c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-remaining-gaps.ts:17"}, "properties": {"repobilityId": "991f28c5daa89d04", "scanner": "scanner-primary", "fingerprint": "30247733309c5c7c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f0288d049677930a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/analyze-real-hs-products.ts:78"}, "properties": {"repobilityId": "b2135c2634cbea1f", "scanner": "scanner-primary", "fingerprint": "f0288d049677930a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7580adc4ecba864e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-eagleview-from-gmail.ts:337"}, "properties": {"repobilityId": "f28a2b3935585da2", "scanner": "scanner-primary", "fingerprint": "7580adc4ecba864e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c7af426592da8742", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/pe-checklist.ts:118"}, "properties": {"repobilityId": "bb97b8fd1620ad1b", "scanner": "scanner-primary", "fingerprint": "c7af426592da8742", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b691d94e3b2e6132", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_backfill-hubspot-manufacturer-enum.ts:103"}, "properties": {"repobilityId": "10bb94568e650606", "scanner": "scanner-primary", "fingerprint": "b691d94e3b2e6132", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1be8b0a0abbd3f63", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/unlinked-counts.ts:65"}, "properties": {"repobilityId": "c2365b5d5eeb24e0", "scanner": "scanner-primary", "fingerprint": "1be8b0a0abbd3f63", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5be7b054a49ebe5f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-zuper-hs-ids.ts:22"}, "properties": {"repobilityId": "1f894fcbe0757743", "scanner": "scanner-primary", "fingerprint": "5be7b054a49ebe5f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a881c2c6e91c764c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/zuper-hs-mismatch-report.ts:204"}, "properties": {"repobilityId": "3d150a4cce86920e", "scanner": "scanner-primary", "fingerprint": "a881c2c6e91c764c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-93acbd86045b37d2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/compose-equipment-photo.ts:218"}, "properties": {"repobilityId": "890b3fe3eaba89c0", "scanner": "scanner-primary", "fingerprint": "93acbd86045b37d2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f1b3c0a6c78d932d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-pipeline-results.ts:47"}, "properties": {"repobilityId": "27bb21d5ed695b11", "scanner": "scanner-primary", "fingerprint": "f1b3c0a6c78d932d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3c72ee157606dae5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/ip-link-counts.ts:19"}, "properties": {"repobilityId": "90c7fcb3c20b9a3d", "scanner": "scanner-primary", "fingerprint": "3c72ee157606dae5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-801b72298c33afee", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/push-all-zoho-zuper-ids.ts:22"}, "properties": {"repobilityId": "ba5c18bd011c0e00", "scanner": "scanner-primary", "fingerprint": "801b72298c33afee", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-696e31fcc7758abb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_pull-hubspot-product-properties.ts:41"}, "properties": {"repobilityId": "e729161eb77adc73", "scanner": "scanner-primary", "fingerprint": "696e31fcc7758abb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-449c80f196c7103f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_zuper-ratelimit-probe.ts:30"}, "properties": {"repobilityId": "631edc2b371f82c8", "scanner": "scanner-primary", "fingerprint": "449c80f196c7103f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-44db3091372757e3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verify-full-linkage.ts:23"}, "properties": {"repobilityId": "1ec65005d1a1eed5", "scanner": "scanner-primary", "fingerprint": "44db3091372757e3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d4ad4ed1cf230935", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-sop-action-queues.ts:330"}, "properties": {"repobilityId": "ebd72728b41cb438", "scanner": "scanner-primary", "fingerprint": "d4ad4ed1cf230935", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-939fcf12899ea95f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_zoho-search.ts:46"}, "properties": {"repobilityId": "3632cc2e14ce942f", "scanner": "scanner-primary", "fingerprint": "939fcf12899ea95f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5b2718456f851198", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_create-zoho-categories.ts:82"}, "properties": {"repobilityId": "01afe2fa393a71d4", "scanner": "scanner-primary", "fingerprint": "5b2718456f851198", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-51e4588f4e394b5e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-silfab-mismatch.ts:21"}, "properties": {"repobilityId": "28a588ffb2ceb033", "scanner": "scanner-primary", "fingerprint": "51e4588f4e394b5e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4cf2d89048ab8092", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_check-missing-warehouse-items.ts:43"}, "properties": {"repobilityId": "8b6b3eb8fc93d9a4", "scanner": "scanner-primary", "fingerprint": "4cf2d89048ab8092", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f3d302eabca6df8c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/pe-task-list.ts:172"}, "properties": {"repobilityId": "ba013cd99eed537a", "scanner": "scanner-primary", "fingerprint": "f3d302eabca6df8c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-64415ebdffd3f481", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_execute-zoho-orphan-matches.ts:89"}, "properties": {"repobilityId": "12d17c52df730cea", "scanner": "scanner-primary", "fingerprint": "64415ebdffd3f481", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c363a92ba90e69f5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/retry-phase3-slow.ts:27"}, "properties": {"repobilityId": "c00a931300a23292", "scanner": "scanner-primary", "fingerprint": "c363a92ba90e69f5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-55c73304c8622666", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-qb-products.ts:71"}, "properties": {"repobilityId": "a3d15964a1a1fe63", "scanner": "scanner-primary", "fingerprint": "55c73304c8622666", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-185af49a5f1996cf", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/create-hs-crosslink-props.ts:16"}, "properties": {"repobilityId": "6ea0e46722769302", "scanner": "scanner-primary", "fingerprint": "185af49a5f1996cf", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7f807e8826d81ca4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/review-2026-sos.ts:87"}, "properties": {"repobilityId": "b98138d4c640fa3c", "scanner": "scanner-primary", "fingerprint": "7f807e8826d81ca4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b696f216e3ab7ef2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_create-shit-show-properties.ts:77"}, "properties": {"repobilityId": "e208a6e86273c605", "scanner": "scanner-primary", "fingerprint": "b696f216e3ab7ef2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1284b72e60892c22", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-zuper-fetch.ts:15"}, "properties": {"repobilityId": "f56eb6278be50c9e", "scanner": "scanner-primary", "fingerprint": "1284b72e60892c22", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bed83297b486c22c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-sop-accounting.ts:218"}, "properties": {"repobilityId": "10e8e8090e2622f6", "scanner": "scanner-primary", "fingerprint": "bed83297b486c22c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0f7d16b60a9cc2d6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/list-unlinked-hs-products.ts:33"}, "properties": {"repobilityId": "637325aa0e5f139d", "scanner": "scanner-primary", "fingerprint": "0f7d16b60a9cc2d6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f42ffd60459598ef", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-ip-naming.ts:70"}, "properties": {"repobilityId": "84e981886076a351", "scanner": "scanner-primary", "fingerprint": "f42ffd60459598ef", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a6de12cc92dd89c5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-zoho-product-photos.ts:96"}, "properties": {"repobilityId": "90e50faf3f3dcb5a", "scanner": "scanner-primary", "fingerprint": "a6de12cc92dd89c5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b964afaeb36cba1e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_verify-so-outliers.ts:99"}, "properties": {"repobilityId": "62ab356e53a664c4", "scanner": "scanner-primary", "fingerprint": "b964afaeb36cba1e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6ee8bfd0983602e0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-sop-scheduling.ts:294"}, "properties": {"repobilityId": "e4b7f1e7e7c2fccf", "scanner": "scanner-primary", "fingerprint": "6ee8bfd0983602e0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-37e3f8f2b034312e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-zoho-item-fields.ts:33"}, "properties": {"repobilityId": "90798b7ec205bff4", "scanner": "scanner-primary", "fingerprint": "37e3f8f2b034312e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7bcfe39b8a4fa8d0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_check-readiness-runs.ts:15"}, "properties": {"repobilityId": "82d6a5411f2756fe", "scanner": "scanner-primary", "fingerprint": "7bcfe39b8a4fa8d0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-04bdf5c2d52c690e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-powerhub-crosslinks.ts:41"}, "properties": {"repobilityId": "f8faa89972b9b208", "scanner": "scanner-primary", "fingerprint": "04bdf5c2d52c690e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f70673c118e9457f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fetch-ops-sos.ts:107"}, "properties": {"repobilityId": "9761a1e64aa209d7", "scanner": "scanner-primary", "fingerprint": "f70673c118e9457f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f893bc80417c7b9e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/dry-run-live-mode.ts:17"}, "properties": {"repobilityId": "a601f110fd4e1181", "scanner": "scanner-primary", "fingerprint": "f893bc80417c7b9e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-34731e43a463ff9f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_pe-rejected-docs-by-deal-gdoc.ts:70"}, "properties": {"repobilityId": "567a54c8cf273d93", "scanner": "scanner-primary", "fingerprint": "34731e43a463ff9f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cacf7a3ea5f7eb88", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-zoho-zuper-crosslink.ts:18"}, "properties": {"repobilityId": "ded8d3ad1d0c63f2", "scanner": "scanner-primary", "fingerprint": "cacf7a3ea5f7eb88", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-594c65fdb2f035ca", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/list-all-gaps-with-dupes.ts:154"}, "properties": {"repobilityId": "1a02a1a33ec2d5ec", "scanner": "scanner-primary", "fingerprint": "594c65fdb2f035ca", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-12977a033c7cdfac", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/zoho-create-ip-field.ts:15"}, "properties": {"repobilityId": "a787b5ca0b5bd73d", "scanner": "scanner-primary", "fingerprint": "12977a033c7cdfac", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-67fc09b11cda1b84", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/match-current-hs-to-ips.ts:104"}, "properties": {"repobilityId": "7b91a5a0074f9e4d", "scanner": "scanner-primary", "fingerprint": "67fc09b11cda1b84", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ee6a4bc4ff0ec984", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-sop-forecast.ts:222"}, "properties": {"repobilityId": "2b322bbf5a4e9bd2", "scanner": "scanner-primary", "fingerprint": "ee6a4bc4ff0ec984", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1db4719af4f19f34", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_audit-orphan-usage-2026.ts:120"}, "properties": {"repobilityId": "c9efeb71b42fce31", "scanner": "scanner-primary", "fingerprint": "1db4719af4f19f34", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7f43742b07d8cb3f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/compare-so-items-inventory.ts:164"}, "properties": {"repobilityId": "581f2e12015da13f", "scanner": "scanner-primary", "fingerprint": "7f43742b07d8cb3f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7a59f3b40f9489a3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_brand-dedup-analysis.ts:48"}, "properties": {"repobilityId": "0be9b25bec08e050", "scanner": "scanner-primary", "fingerprint": "7a59f3b40f9489a3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-769a651497b655de", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/compliance-shadow-compare.ts:29"}, "properties": {"repobilityId": "cc2b71dda30606d2", "scanner": "scanner-primary", "fingerprint": "769a651497b655de", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3a226767890d5e81", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/query-users.ts:15"}, "properties": {"repobilityId": "0154cad747dceed1", "scanner": "scanner-primary", "fingerprint": "3a226767890d5e81", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1ac08ecc569950e6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-on-call-pools.ts:59"}, "properties": {"repobilityId": "9806a657603c620d", "scanner": "scanner-primary", "fingerprint": "1ac08ecc569950e6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-942d4df483991fc0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_standardize-brand-casing.ts:48"}, "properties": {"repobilityId": "5cf4d3aed36fb4ba", "scanner": "scanner-primary", "fingerprint": "942d4df483991fc0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0da3a8e898ffa8dc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/diagnose-stage-stuck.ts:20"}, "properties": {"repobilityId": "34ca37da5a50fc3c", "scanner": "scanner-primary", "fingerprint": "0da3a8e898ffa8dc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7eef01bc234b6ad2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-zoho-single.ts:7"}, "properties": {"repobilityId": "d6fe152884d8bf65", "scanner": "scanner-primary", "fingerprint": "7eef01bc234b6ad2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7728bb2eb7e95373", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-sop-tools.ts:245"}, "properties": {"repobilityId": "12889b9c6c8bbe77", "scanner": "scanner-primary", "fingerprint": "7728bb2eb7e95373", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6a090c191f0dc0a6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/diagnose-zeros.ts:35"}, "properties": {"repobilityId": "75a44d3944013d2c", "scanner": "scanner-primary", "fingerprint": "6a090c191f0dc0a6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0505f616a77f1a9a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/cancel-wrong-scope-flags.ts:46"}, "properties": {"repobilityId": "2c7aee9a4ac3923b", "scanner": "scanner-primary", "fingerprint": "0505f616a77f1a9a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-604654f064c27acf", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/clean-names-and-match-hs.ts:69"}, "properties": {"repobilityId": "50e60f144d7e58e1", "scanner": "scanner-primary", "fingerprint": "604654f064c27acf", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-53d5cf26a78a1140", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/cleanup-bare-property-dupes.ts:93"}, "properties": {"repobilityId": "c8362931c179674a", "scanner": "scanner-primary", "fingerprint": "53d5cf26a78a1140", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-376658c323522fd0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 prisma/seed-goals.ts:75"}, "properties": {"repobilityId": "1fce58dd102a3d0c", "scanner": "scanner-primary", "fingerprint": "376658c323522fd0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-40c94b139a9a67d8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 .claude/skills/site-survey-readiness-workspace/iteration-1/single-project-by-proj-number/with_skill/outputs/list-survey-files.ts:69"}, "properties": {"repobilityId": "0453bfcafb8132cd", "scanner": "scanner-primary", "fingerprint": "40c94b139a9a67d8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-30bea1f8de747cbf", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 .claude/skills/site-survey-readiness/scripts/list-drive-files.ts:120"}, "properties": {"repobilityId": "41a32a62d45aad86", "scanner": "scanner-primary", "fingerprint": "30bea1f8de747cbf", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-decf8aab7ae02769", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 public/solar-surveyor/assets/index-CDmJaT6T.js:57"}, "properties": {"repobilityId": "617ef242c7dfcc0b", "scanner": "scanner-primary", "fingerprint": "decf8aab7ae02769", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-fbb7e4583d465601", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/auth.ts:58"}, "properties": {"repobilityId": "6ab9c77a81ca0d35", "scanner": "scanner-primary", "fingerprint": "fbb7e4583d465601", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e6dd20c4e27b3367", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/PropertyDrawer.tsx:194"}, "properties": {"repobilityId": "6c3e176c5b29f63e", "scanner": "scanner-primary", "fingerprint": "e6dd20c4e27b3367", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f54b840adb0683eb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/GlobalSearch.tsx:285"}, "properties": {"repobilityId": "203bea9ee078cce8", "scanner": "scanner-primary", "fingerprint": "f54b840adb0683eb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ec64e584ee3312da", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/AuthSync.tsx:30"}, "properties": {"repobilityId": "c50042b711b55819", "scanner": "scanner-primary", "fingerprint": "ec64e584ee3312da", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-80623d57ffaac014", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/BomHistoryDrawer.tsx:130"}, "properties": {"repobilityId": "8de76d984d9ea7a8", "scanner": "scanner-primary", "fingerprint": "80623d57ffaac014", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-59d9d3e3cf3fecc2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/ServiceWorkerRegistration.tsx:22"}, "properties": {"repobilityId": "30eddfa944f815c1", "scanner": "scanner-primary", "fingerprint": "59d9d3e3cf3fecc2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bfdd1016b3230c02", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/UserMenu.tsx:121"}, "properties": {"repobilityId": "ee5fcccb756665f2", "scanner": "scanner-primary", "fingerprint": "bfdd1016b3230c02", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3d7a78275a093dcd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/DashboardShell.tsx:352"}, "properties": {"repobilityId": "421c9f760775d6c7", "scanner": "scanner-primary", "fingerprint": "3d7a78275a093dcd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4fca42e3123e12f0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/FlagProjectModal.tsx:165"}, "properties": {"repobilityId": "7f9a2b546ba6360b", "scanner": "scanner-primary", "fingerprint": "4fca42e3123e12f0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2aa926849378134a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin-shell/AdminSearch.tsx:237"}, "properties": {"repobilityId": "c1e89f7c23135a84", "scanner": "scanner-primary", "fingerprint": "2aa926849378134a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a6becbf5cb4cccd7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin-shell/AdminSidebar.tsx:100"}, "properties": {"repobilityId": "4aeb1a3d78970969", "scanner": "scanner-primary", "fingerprint": "a6becbf5cb4cccd7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1b3a98fa36faa584", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin-shell/AdminDetailHeader.tsx:13"}, "properties": {"repobilityId": "19bdc6dbde85b219", "scanner": "scanner-primary", "fingerprint": "1b3a98fa36faa584", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d65c7bfc1dea67bb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/on-call/PublishCard.tsx:97"}, "properties": {"repobilityId": "7b603d9990f59ba7", "scanner": "scanner-primary", "fingerprint": "d65c7bfc1dea67bb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-58cd53073dc84ca5", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/components/on-call/CallLogModal.tsx:45"}, "properties": {"repobilityId": "6c29f3dbf563fac9", "scanner": "scanner-primary", "fingerprint": "58cd53073dc84ca5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-6880942709ccc448", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/on-call/OnCallMonthClient.tsx:179"}, "properties": {"repobilityId": "955cff7eea260fac", "scanner": "scanner-primary", "fingerprint": "6880942709ccc448", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f73e5bccbad8ce39", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/comms/CommsIncomingFeed.tsx:67"}, "properties": {"repobilityId": "c6156dbaca3a56bf", "scanner": "scanner-primary", "fingerprint": "f73e5bccbad8ce39", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-dfe95af767559f67", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/comms/CommsProjectView.tsx:204"}, "properties": {"repobilityId": "fa8987211148f5a9", "scanner": "scanner-primary", "fingerprint": "dfe95af767559f67", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4159097f66a2e1eb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/property/PropertyEquipmentTab.tsx:190"}, "properties": {"repobilityId": "f8d05201baa20149", "scanner": "scanner-primary", "fingerprint": "4159097f66a2e1eb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ce1e53e249a435a7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/property/PropertyDealsTab.tsx:99"}, "properties": {"repobilityId": "83febd2b7b270d0f", "scanner": "scanner-primary", "fingerprint": "ce1e53e249a435a7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cc80ad5e8ee3e610", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/property/PropertyScheduleTab.tsx:146"}, "properties": {"repobilityId": "021f566a77ab95ee", "scanner": "scanner-primary", "fingerprint": "cc80ad5e8ee3e610", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6d6288092d24ec56", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/property/PropertyTicketsTab.tsx:79"}, "properties": {"repobilityId": "b0b52f8270aa128a", "scanner": "scanner-primary", "fingerprint": "6d6288092d24ec56", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-877087620b0a68fc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/property/PropertyActivityTab.tsx:150"}, "properties": {"repobilityId": "098f59e3645c4e5a", "scanner": "scanner-primary", "fingerprint": "877087620b0a68fc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7375893fc69d2b24", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/property/PropertyHubHeader.tsx:62"}, "properties": {"repobilityId": "cd31370ea1cdaa0c", "scanner": "scanner-primary", "fingerprint": "7375893fc69d2b24", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-83816f9b1c7bb481", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/property/PropertyMonitoringTab.tsx:103"}, "properties": {"repobilityId": "b3205ce8a2ec1a8e", "scanner": "scanner-primary", "fingerprint": "83816f9b1c7bb481", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5a3f7281166894f8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/property/PropertyJobsTab.tsx:108"}, "properties": {"repobilityId": "19b4432e174679a7", "scanner": "scanner-primary", "fingerprint": "5a3f7281166894f8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-448084c82c6c98a4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/property/PropertyPhotosTab.tsx:104"}, "properties": {"repobilityId": "5ee0b0bf3666def0", "scanner": "scanner-primary", "fingerprint": "448084c82c6c98a4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-83c84607dbe6dd7a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ui/CapacityHeatmap.tsx:128"}, "properties": {"repobilityId": "164edff62253faae", "scanner": "scanner-primary", "fingerprint": "83c84607dbe6dd7a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ef51ba44cb550ad6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ui/DrilldownMetricCard.tsx:149"}, "properties": {"repobilityId": "f483f1323d5b8169", "scanner": "scanner-primary", "fingerprint": "ef51ba44cb550ad6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-860f5dc45edd0235", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/catalog/DetailsStep.tsx:341"}, "properties": {"repobilityId": "4dd63605ed1e65d9", "scanner": "scanner-primary", "fingerprint": "860f5dc45edd0235", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-94c19e240b902910", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/catalog/DedupPanel.tsx:274"}, "properties": {"repobilityId": "85c9d8e493558be8", "scanner": "scanner-primary", "fingerprint": "94c19e240b902910", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-977323a935e6be8e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/funnel/MonthlyActivityView.tsx:371"}, "properties": {"repobilityId": "c171b2acdf654b46", "scanner": "scanner-primary", "fingerprint": "977323a935e6be8e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-19ca39ba26845937", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/funnel/AnalysisOverview.tsx:204"}, "properties": {"repobilityId": "094227c9ddbc0bfd", "scanner": "scanner-primary", "fingerprint": "19ca39ba26845937", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4e56216488832b35", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/my-tasks/TypeaheadPicker.tsx:96"}, "properties": {"repobilityId": "5ffccfa2e85e22b2", "scanner": "scanner-primary", "fingerprint": "4e56216488832b35", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a7ac06c741e4131b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/pe-prep/PeChecklistCard.tsx:60"}, "properties": {"repobilityId": "7a0dd491febc7701", "scanner": "scanner-primary", "fingerprint": "a7ac06c741e4131b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a38520aac40862bb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/pe-prep/PePhotoGrid.tsx:54"}, "properties": {"repobilityId": "6fd7f5277fc9de48", "scanner": "scanner-primary", "fingerprint": "a38520aac40862bb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-26a8746aaeec2792", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/pe-prep/PeAuditProgress.tsx:186"}, "properties": {"repobilityId": "4459d1cd0b4c0719", "scanner": "scanner-primary", "fingerprint": "26a8746aaeec2792", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f93995cafaa0f5ae", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/deal-detail/CommunicationsFeed.tsx:95"}, "properties": {"repobilityId": "f63a7cf1d53044d3", "scanner": "scanner-primary", "fingerprint": "f93995cafaa0f5ae", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-edd95df9162d191b", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/deal-detail/CommunicationsFeed.tsx:146"}, "properties": {"repobilityId": "c425d17975cd1202", "scanner": "scanner-primary", "fingerprint": "edd95df9162d191b", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-96f8c9d36649f280", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/deal-detail/TimelineEventRow.tsx:131"}, "properties": {"repobilityId": "3448736c30f0acb4", "scanner": "scanner-primary", "fingerprint": "96f8c9d36649f280", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c86975ea05dfaeb4", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/deal-detail/TimelineEventRow.tsx:267"}, "properties": {"repobilityId": "d1c56e5090ebbe2d", "scanner": "scanner-primary", "fingerprint": "c86975ea05dfaeb4", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-b5d5059ee63c37b4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/solar-designer/AddressInput.tsx:74"}, "properties": {"repobilityId": "f58580fc5e9cb636", "scanner": "scanner-primary", "fingerprint": "b5d5059ee63c37b4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-65f0600cb20c3518", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/solar-designer/SystemSummaryBar.tsx:37"}, "properties": {"repobilityId": "e8c0010b70fb8bdd", "scanner": "scanner-primary", "fingerprint": "65f0600cb20c3518", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a9e395519a1ccfdc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/solar-designer/FileUploadPanel.tsx:255"}, "properties": {"repobilityId": "be722ddfda58de0a", "scanner": "scanner-primary", "fingerprint": "a9e395519a1ccfdc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0d3f4cd3460a0b54", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/solar/ProjectBrowser.tsx:244"}, "properties": {"repobilityId": "8e0d09ce5d47e677", "scanner": "scanner-primary", "fingerprint": "0d3f4cd3460a0b54", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3574297cee038170", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/solar/wizard/StepEquipment.tsx:94"}, "properties": {"repobilityId": "0231e408dd54b16d", "scanner": "scanner-primary", "fingerprint": "3574297cee038170", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-06b3b839bb9f647f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/solar/wizard/StepReview.tsx:232"}, "properties": {"repobilityId": "ec37cad4670873a2", "scanner": "scanner-primary", "fingerprint": "06b3b839bb9f647f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-625f1d005fac533f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/solar/scenarios/ScenarioManager.tsx:213"}, "properties": {"repobilityId": "5b7ae6f7626a8f09", "scanner": "scanner-primary", "fingerprint": "625f1d005fac533f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d2fbec8fdf2c83b8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/scheduler/ConstructionProjectDetailPanel.tsx:105"}, "properties": {"repobilityId": "e8a54ed244bf1b80", "scanner": "scanner-primary", "fingerprint": "d2fbec8fdf2c83b8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b140de561540f97b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/scheduler/SubJobBreakdown.tsx:65"}, "properties": {"repobilityId": "5cd761e4095725d1", "scanner": "scanner-primary", "fingerprint": "b140de561540f97b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8ce998521169d89e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/scheduler/SubJobScheduleModal.tsx:644"}, "properties": {"repobilityId": "2d9ec70e19d97e4f", "scanner": "scanner-primary", "fingerprint": "8ce998521169d89e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-381f89d8f6b567a5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/scheduler/construction/ConstructionGanttView.tsx:145"}, "properties": {"repobilityId": "a891e99d53163891", "scanner": "scanner-primary", "fingerprint": "381f89d8f6b567a5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fe36d082ad438c7e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/scheduler/construction/ConstructionMonthView.tsx:277"}, "properties": {"repobilityId": "2e5b84f60f0b7cff", "scanner": "scanner-primary", "fingerprint": "fe36d082ad438c7e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-189ef0fbdaa36817", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/powerhub/SiteDetail.tsx:244"}, "properties": {"repobilityId": "814def758ccabc26", "scanner": "scanner-primary", "fingerprint": "189ef0fbdaa36817", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4d06afda7136d474", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/powerhub/FleetTable.tsx:187"}, "properties": {"repobilityId": "ac09dfd4490b359f", "scanner": "scanner-primary", "fingerprint": "4d06afda7136d474", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-34faf089f70ae0a9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/pe/DocsTab.tsx:669"}, "properties": {"repobilityId": "f08a517cd9df218c", "scanner": "scanner-primary", "fingerprint": "34faf089f70ae0a9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-58328329afd789c8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/pe/AnalyticsTab.tsx:728"}, "properties": {"repobilityId": "07ada09764cb72af", "scanner": "scanner-primary", "fingerprint": "58328329afd789c8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a99a0b441280dae8", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/components/pe/ShortPayModal.tsx:88"}, "properties": {"repobilityId": "f44771f6d430f2ad", "scanner": "scanner-primary", "fingerprint": "a99a0b441280dae8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-a9d14bdff970ee62", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/pe/ShortPayModal.tsx:151"}, "properties": {"repobilityId": "b214a6f6031e739a", "scanner": "scanner-primary", "fingerprint": "a9d14bdff970ee62", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-da5c0450fbb83dd7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/page.tsx:474"}, "properties": {"repobilityId": "e498d41b9221bfd3", "scanner": "scanner-primary", "fingerprint": "da5c0450fbb83dd7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5f3963f7975404e4", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/layout.tsx:63"}, "properties": {"repobilityId": "0d72350965068f5b", "scanner": "scanner-primary", "fingerprint": "5f3963f7975404e4", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-c1e6ebf764ae0a36", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/triage/TriageStepper.tsx:213"}, "properties": {"repobilityId": "c129f6a415f129fa", "scanner": "scanner-primary", "fingerprint": "c1e6ebf764ae0a36", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5031baf46f91323b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/triage/TriagePhotoCapture.tsx:179"}, "properties": {"repobilityId": "308b6119854e9cbc", "scanner": "scanner-primary", "fingerprint": "5031baf46f91323b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-13f1f7be7f6e7c1d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/triage/TriageDealLookup.tsx:191"}, "properties": {"repobilityId": "543d13b7e5092139", "scanner": "scanner-primary", "fingerprint": "13f1f7be7f6e7c1d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4acfbbe48bbe21da", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/triage/TriageReview.tsx:234"}, "properties": {"repobilityId": "4140b03c16ad648a", "scanner": "scanner-primary", "fingerprint": "4acfbbe48bbe21da", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d73f958ebabc5d98", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/api/adders/route.ts:29"}, "properties": {"repobilityId": "f1ebe5bb795e0a47", "scanner": "scanner-primary", "fingerprint": "d73f958ebabc5d98", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-b1a2fa5e0780f551", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/api/adders/[id]/route.ts:18"}, "properties": {"repobilityId": "2a2f62cfc4e30781", "scanner": "scanner-primary", "fingerprint": "b1a2fa5e0780f551", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-b53b4682b3fadc8c", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/api/adders/[id]/retire/route.ts:8"}, "properties": {"repobilityId": "6f19a5e22c2997c4", "scanner": "scanner-primary", "fingerprint": "b53b4682b3fadc8c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-e6fece59a6246810", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/install-review/route.ts:317"}, "properties": {"repobilityId": "4ae904cda3d007b5", "scanner": "scanner-primary", "fingerprint": "e6fece59a6246810", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-108b5335d5a77d93", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/zuper/availability/route.ts:521"}, "properties": {"repobilityId": "fab22ff416982f69", "scanner": "scanner-primary", "fingerprint": "108b5335d5a77d93", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-224106a459cc28aa", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/zuper/jobs/schedule/route.ts:432"}, "properties": {"repobilityId": "0076f116889fbd40", "scanner": "scanner-primary", "fingerprint": "224106a459cc28aa", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-823839699f83de75", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/zuper/jobs/schedule/confirm/route.ts:680"}, "properties": {"repobilityId": "25787d9504a73538", "scanner": "scanner-primary", "fingerprint": "823839699f83de75", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fb170aeb1560aab6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/zuper/jobs/lookup/route.ts:473"}, "properties": {"repobilityId": "739458286fe95ee9", "scanner": "scanner-primary", "fingerprint": "fb170aeb1560aab6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-623c702caa6578ea", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/zuper/jobs/by-category/route.ts:103"}, "properties": {"repobilityId": "e0ecf426c6eff329", "scanner": "scanner-primary", "fingerprint": "623c702caa6578ea", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0b0fc00d998c74a7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/accounting/pe-docs/sync/route.ts:111"}, "properties": {"repobilityId": "66b0d522c8f83cd9", "scanner": "scanner-primary", "fingerprint": "0b0fc00d998c74a7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-991408977a10b237", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/accounting/pe-docs/csv-import/route.ts:73"}, "properties": {"repobilityId": "9f3bf81d0cc32558", "scanner": "scanner-primary", "fingerprint": "991408977a10b237", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4fcbb0e558b3ed64", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/accounting/payment-tracking/route.ts:90"}, "properties": {"repobilityId": "80b8f710d41b18c0", "scanner": "scanner-primary", "fingerprint": "4fcbb0e558b3ed64", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d9528053617ea4a2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/accounting/pe-deals/route.ts:382"}, "properties": {"repobilityId": "9f0e035fcef2a192", "scanner": "scanner-primary", "fingerprint": "d9528053617ea4a2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c9eb9db339fc6dcc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/reviews/run/route.ts:102"}, "properties": {"repobilityId": "c83dc50f4c27744d", "scanner": "scanner-primary", "fingerprint": "c9eb9db339fc6dcc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-192278c80925d439", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/crew/route.ts:381"}, "properties": {"repobilityId": "4e02f42b912c8cdc", "scanner": "scanner-primary", "fingerprint": "192278c80925d439", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a4275e31895844f8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/deployment/route.ts:94"}, "properties": {"repobilityId": "2a436a5defda470d", "scanner": "scanner-primary", "fingerprint": "a4275e31895844f8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2127b0aace69753b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/daily-focus/route.ts:47"}, "properties": {"repobilityId": "1669252d328816fc", "scanner": "scanner-primary", "fingerprint": "2127b0aace69753b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ac336ead6ae29036", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/office-performance-warm/route.ts:112"}, "properties": {"repobilityId": "ac13f7e18020674c", "scanner": "scanner-primary", "fingerprint": "ac336ead6ae29036", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bed8b00a9b13bc5a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/pe-invoice-audit/route.ts:293"}, "properties": {"repobilityId": "4fac4ffac2dbe715", "scanner": "scanner-primary", "fingerprint": "bed8b00a9b13bc5a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fb5bc5353e3c37df", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/admin-workflow-cleanup/route.ts:64"}, "properties": {"repobilityId": "94af2a0ccc772c40", "scanner": "scanner-primary", "fingerprint": "fb5bc5353e3c37df", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0bc408fa79d9814e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/goals-digest/route.ts:108"}, "properties": {"repobilityId": "3d9e65fa4f4af23a", "scanner": "scanner-primary", "fingerprint": "0bc408fa79d9814e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-30bc98d353ba2943", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/enphase-status-check/route.ts:74"}, "properties": {"repobilityId": "3e2591dd6612dbf6", "scanner": "scanner-primary", "fingerprint": "30bc98d353ba2943", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-49f771a7b1be8e55", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/api/sop/proposals/route.ts:122"}, "properties": {"repobilityId": "0174a63b3cfd9201", "scanner": "scanner-primary", "fingerprint": "49f771a7b1be8e55", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-9c87d77b1b6ad497", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/portal/survey/[token]/reschedule/route.ts:369"}, "properties": {"repobilityId": "c600856f836bed0d", "scanner": "scanner-primary", "fingerprint": "9c87d77b1b6ad497", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b2489891915c1fd8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/portal/survey/[token]/cancel/route.ts:224"}, "properties": {"repobilityId": "b6237f342d95990f", "scanner": "scanner-primary", "fingerprint": "b2489891915c1fd8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6c4abb43ed0041d6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/portal/survey/[token]/book/route.ts:396"}, "properties": {"repobilityId": "ae2659629a7a939a", "scanner": "scanner-primary", "fingerprint": "6c4abb43ed0041d6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-760b2eab3eeb99f5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/hubspot/inspection-metrics/route.ts:312"}, "properties": {"repobilityId": "edc72747ed422521", "scanner": "scanner-primary", "fingerprint": "760b2eab3eeb99f5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2656ea775c9b2b61", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/properties/workflow-sync/route.ts:91"}, "properties": {"repobilityId": "a7a0eaf0b8aed2fd", "scanner": "scanner-primary", "fingerprint": "2656ea775c9b2b61", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e3f8c9eb50429417", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/solar/weather/route.ts:99"}, "properties": {"repobilityId": "5974e156347cb1b4", "scanner": "scanner-primary", "fingerprint": "e3f8c9eb50429417", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-941f679d80f71910", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/solar/equipment/route.ts:134"}, "properties": {"repobilityId": "1523f02c9ce793a1", "scanner": "scanner-primary", "fingerprint": "941f679d80f71910", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-12bde586b8eb3329", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/solar/equipment/[id]/route.ts:126"}, "properties": {"repobilityId": "c0db849407f7df98", "scanner": "scanner-primary", "fingerprint": "12bde586b8eb3329", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f0bf781acfb666ae", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/solar/shade/route.ts:149"}, "properties": {"repobilityId": "86d11f212b653295", "scanner": "scanner-primary", "fingerprint": "f0bf781acfb666ae", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-db3c5c2bb19051a7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhooks/zuper/admin-workflows/route.ts:121"}, "properties": {"repobilityId": "89e2529023695da7", "scanner": "scanner-primary", "fingerprint": "db3c5c2bb19051a7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c5c56d9c7b156d7a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhooks/hubspot/install-review/route.ts:133"}, "properties": {"repobilityId": "211bbb81f6763c1d", "scanner": "scanner-primary", "fingerprint": "c5c56d9c7b156d7a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7192ed5ad4cb805a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhooks/hubspot/site-survey-readiness/route.ts:212"}, "properties": {"repobilityId": "d158bce77048d5fc", "scanner": "scanner-primary", "fingerprint": "7192ed5ad4cb805a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5841efca4475cedd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhooks/hubspot/fdr-check/route.ts:203"}, "properties": {"repobilityId": "18685d96e0f797f5", "scanner": "scanner-primary", "fingerprint": "5841efca4475cedd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fd13b4f536a4935a", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/api/webhooks/hubspot/design-review/route.ts:153"}, "properties": {"repobilityId": "3969ba7ebe479462", "scanner": "scanner-primary", "fingerprint": "fd13b4f536a4935a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-7438ba4ebf018d4a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhooks/hubspot/design-review/route.ts:156"}, "properties": {"repobilityId": "3d5064c442cd7142", "scanner": "scanner-primary", "fingerprint": "7438ba4ebf018d4a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-119d61d659756e81", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhooks/hubspot/design-complete/route.ts:95"}, "properties": {"repobilityId": "0319855ac9063cc6", "scanner": "scanner-primary", "fingerprint": "119d61d659756e81", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d99f76780e17616b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/deals/route.ts:45"}, "properties": {"repobilityId": "ff34075210d8d94e", "scanner": "scanner-primary", "fingerprint": "d99f76780e17616b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8919f72dadae2d9a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/deals/[dealId]/photos/route.ts:21"}, "properties": {"repobilityId": "089f393dee1767a7", "scanner": "scanner-primary", "fingerprint": "8919f72dadae2d9a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-aeb50f616986b2a8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/service-unscheduled/page.tsx:318"}, "properties": {"repobilityId": "6b0b33b2f37c781e", "scanner": "scanner-primary", "fingerprint": "aeb50f616986b2a8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-aa7c596d33c40926", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/app/dashboards/pm-action-queue/PmActionQueueClient.tsx:478"}, "properties": {"repobilityId": "40f21b9fe40fe4f4", "scanner": "scanner-primary", "fingerprint": "aa7c596d33c40926", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-de9b0848ae705282", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/pm-action-queue/PmActionQueueClient.tsx:383"}, "properties": {"repobilityId": "77f6cd9a0f44a2b8", "scanner": "scanner-primary", "fingerprint": "de9b0848ae705282", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-068df202ab102091", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/inspection-scheduler/page.tsx:1263"}, "properties": {"repobilityId": "ea4a5e4b4d7912f0", "scanner": "scanner-primary", "fingerprint": "068df202ab102091", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2c08d81f2645c9b8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/inventory/page.tsx:645"}, "properties": {"repobilityId": "b6b0e389c9f888dc", "scanner": "scanner-primary", "fingerprint": "2c08d81f2645c9b8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f4c3113590501812", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/inventory/cost-audit/page.tsx:744"}, "properties": {"repobilityId": "3f8c34f45886d36d", "scanner": "scanner-primary", "fingerprint": "f4c3113590501812", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-47353b0a282abfcd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/roofing-scheduler/page.tsx:487"}, "properties": {"repobilityId": "eefc4aabfdd4718a", "scanner": "scanner-primary", "fingerprint": "47353b0a282abfcd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-01a94009b9f78dfc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/inspection-metrics/page.tsx:616"}, "properties": {"repobilityId": "ef4fbca92afa132d", "scanner": "scanner-primary", "fingerprint": "01a94009b9f78dfc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e01445588543cbea", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/adders/AdderRevisionsDrawer.tsx:103"}, "properties": {"repobilityId": "88f3865c80d44222", "scanner": "scanner-primary", "fingerprint": "e01445588543cbea", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8c3f57983ff9194d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/ai/AISkillsHub.tsx:216"}, "properties": {"repobilityId": "c3b0af74663699a2", "scanner": "scanner-primary", "fingerprint": "8c3f57983ff9194d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a7d51dd0ef3dab46", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/site-survey-scheduler/page.tsx:1951"}, "properties": {"repobilityId": "50921e43b88159e6", "scanner": "scanner-primary", "fingerprint": "a7d51dd0ef3dab46", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f8ba0f720fc660cc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/dashboards/site-survey-scheduler/page.tsx:1528"}, "properties": {"repobilityId": "e24af8448c300141", "scanner": "scanner-primary", "fingerprint": "f8ba0f720fc660cc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-89b43979b94f3245", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/site-survey-scheduler/my-availability.tsx:546"}, "properties": {"repobilityId": "fccc0a137a5442ca", "scanner": "scanner-primary", "fingerprint": "89b43979b94f3245", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1478158a21115675", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/permit-hub/PermitQueue.tsx:197"}, "properties": {"repobilityId": "d41dbd18ca5ce4fd", "scanner": "scanner-primary", "fingerprint": "1478158a21115675", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f9298bb161402ea7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/permit-hub/tabs/CorrespondenceTab.tsx:67"}, "properties": {"repobilityId": "ac89f68d7d74ec9f", "scanner": "scanner-primary", "fingerprint": "f9298bb161402ea7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-eb4712e4b85576da", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/pe-report/page.tsx:1266"}, "properties": {"repobilityId": "c3d49700b832758e", "scanner": "scanner-primary", "fingerprint": "eb4712e4b85576da", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0776f76dc37deab4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/service-scheduler/page.tsx:1019"}, "properties": {"repobilityId": "e260486fd4ac81ae", "scanner": "scanner-primary", "fingerprint": "0776f76dc37deab4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9709305e98b49c14", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/app/dashboards/pricing-calculator/page.tsx:93"}, "properties": {"repobilityId": "0a5204886acc3c0b", "scanner": "scanner-primary", "fingerprint": "9709305e98b49c14", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-8f5d27cdf81daf96", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/pricing-calculator/page.tsx:96"}, "properties": {"repobilityId": "e29dae75df6c0be7", "scanner": "scanner-primary", "fingerprint": "8f5d27cdf81daf96", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-313f641f0a5f3fff", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/forecast-accuracy/page.tsx:135"}, "properties": {"repobilityId": "f1dd0997f25554e5", "scanner": "scanner-primary", "fingerprint": "313f641f0a5f3fff", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1b2c9e230575e3a7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/timeline/page.tsx:308"}, "properties": {"repobilityId": "d001620ca6d6cb89", "scanner": "scanner-primary", "fingerprint": "1b2c9e230575e3a7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-30a1c453dbf0f382", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/catalog/page.tsx:1356"}, "properties": {"repobilityId": "ceeaad1636947b36", "scanner": "scanner-primary", "fingerprint": "30a1c453dbf0f382", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-37bbea5d286dab7b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/design-pipeline-funnel/page.tsx:360"}, "properties": {"repobilityId": "e85f282eb67dc81b", "scanner": "scanner-primary", "fingerprint": "37bbea5d286dab7b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2282c6c5cec17cd6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/construction-scheduler/page.tsx:2084"}, "properties": {"repobilityId": "ca5df2e20606f585", "scanner": "scanner-primary", "fingerprint": "2282c6c5cec17cd6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-19bae53e3fefeeb3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/locations/page.tsx:183"}, "properties": {"repobilityId": "77d3e7be97b4cf44", "scanner": "scanner-primary", "fingerprint": "19bae53e3fefeeb3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3e9b29b795584f7d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/service-customers/page.tsx:286"}, "properties": {"repobilityId": "c7e2521c4299a85f", "scanner": "scanner-primary", "fingerprint": "3e9b29b795584f7d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a19b1ce80cc0634f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/inspections/page.tsx:655"}, "properties": {"repobilityId": "f85da93ec5570050", "scanner": "scanner-primary", "fingerprint": "a19b1ce80cc0634f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-56a86c1e7b171704", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/executive/page.tsx:116"}, "properties": {"repobilityId": "44f89d52a1be6b74", "scanner": "scanner-primary", "fingerprint": "56a86c1e7b171704", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-144c5d3d4bbf3c55", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/mobile/page.tsx:126"}, "properties": {"repobilityId": "de0c06a984cd994e", "scanner": "scanner-primary", "fingerprint": "144c5d3d4bbf3c55", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-88f591d719581bac", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/office-performance/[location]/CalendarSection.tsx:102"}, "properties": {"repobilityId": "ddf318adeead3680", "scanner": "scanner-primary", "fingerprint": "88f591d719581bac", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-792c5df00d80526f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/office-performance/[location]/CalendarWeekSection.tsx:59"}, "properties": {"repobilityId": "2e796943750a1bf6", "scanner": "scanner-primary", "fingerprint": "792c5df00d80526f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a54e889ea3eb115e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/office-performance/[location]/ComplianceBlock.tsx:186"}, "properties": {"repobilityId": "411ce6a014efc8aa", "scanner": "scanner-primary", "fingerprint": "a54e889ea3eb115e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d9cb6dc1802361a8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/office-performance/[location]/Leaderboard.tsx:99"}, "properties": {"repobilityId": "1abe64d5c6bb4131", "scanner": "scanner-primary", "fingerprint": "d9cb6dc1802361a8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5f0b8817ef85f94e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/office-performance/[location]/DealList.tsx:102"}, "properties": {"repobilityId": "208ed831fea8208f", "scanner": "scanner-primary", "fingerprint": "5f0b8817ef85f94e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-53bce2e74a02e053", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/at-risk/page.tsx:398"}, "properties": {"repobilityId": "5232fd6c4f24173b", "scanner": "scanner-primary", "fingerprint": "53bce2e74a02e053", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c9a78a0d6b8ac1ec", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/app/dashboards/product-requests-review/EquipmentRequestDrawer.tsx:118"}, "properties": {"repobilityId": "a81ff5026bf37b39", "scanner": "scanner-primary", "fingerprint": "c9a78a0d6b8ac1ec", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-ced436755e366662", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/app/dashboards/product-requests-review/AdderRequestDrawer.tsx:98"}, "properties": {"repobilityId": "8b1c5cf209b4d6c9", "scanner": "scanner-primary", "fingerprint": "ced436755e366662", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-2854e77f670e11a0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/service-tickets/page.tsx:423"}, "properties": {"repobilityId": "5f7be7e348e1943a", "scanner": "scanner-primary", "fingerprint": "2854e77f670e11a0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ecc479f9518c1dab", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/admin/sop-proposals/SopProposalsClient.tsx:268"}, "properties": {"repobilityId": "2e6608a6cb1d3ac6", "scanner": "scanner-primary", "fingerprint": "ecc479f9518c1dab", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5b852eddeb31b35f", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/dashboards/admin/sop-proposals/SopProposalsClient.tsx:76"}, "properties": {"repobilityId": "184c2498919d998e", "scanner": "scanner-primary", "fingerprint": "5b852eddeb31b35f", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-d436060a8644025f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/admin/tech-ops-escalations/TechOpsEscalationsClient.tsx:219"}, "properties": {"repobilityId": "e13558c69db6f381", "scanner": "scanner-primary", "fingerprint": "d436060a8644025f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f6b4b7c2db581c83", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/admin/workflows/[id]/page.tsx:582"}, "properties": {"repobilityId": "42171fb768ab17b2", "scanner": "scanner-primary", "fingerprint": "f6b4b7c2db581c83", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c02e48cff027ca61", "level": "note", "message": {"text": "React Flow <MiniMap> without dark background \u2014 src/app/dashboards/admin/workflows/[id]/canvas/page.tsx:318"}, "properties": {"repobilityId": "3e576dc306c480de", "scanner": "scanner-primary", "fingerprint": "c02e48cff027ca61", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.minimap.no-bg"]}}, {"ruleId": "scanner-329360a960c1e230", "level": "note", "message": {"text": "React Flow <Controls> without dark theming \u2014 src/app/dashboards/admin/workflows/[id]/canvas/page.tsx:317"}, "properties": {"repobilityId": "ff3790c8444e3ed9", "scanner": "scanner-primary", "fingerprint": "329360a960c1e230", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.controls.no-bg"]}}, {"ruleId": "scanner-60e83b0852b676c0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/admin/workflows/runs/page.tsx:137"}, "properties": {"repobilityId": "135ade8ddeaedf5c", "scanner": "scanner-primary", "fingerprint": "60e83b0852b676c0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b5290f0650b20733", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/bom/page.tsx:769"}, "properties": {"repobilityId": "f89ab979fc9fa394", "scanner": "scanner-primary", "fingerprint": "b5290f0650b20733", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c109eecb1cf25186", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/dashboards/bom/page.tsx:1427"}, "properties": {"repobilityId": "55ec95d652e69cc1", "scanner": "scanner-primary", "fingerprint": "c109eecb1cf25186", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-679017b3078c7d72", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/survey-metrics/page.tsx:324"}, "properties": {"repobilityId": "cd5c5a3e2637c517", "scanner": "scanner-primary", "fingerprint": "679017b3078c7d72", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cba3cc752b5b3384", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/dashboards/solar-designer/page.tsx:131"}, "properties": {"repobilityId": "fc1dcb3dc2b6eaab", "scanner": "scanner-primary", "fingerprint": "cba3cc752b5b3384", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-9befe1744eef8418", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/zuper-status-comparison/page.tsx:682"}, "properties": {"repobilityId": "25285fe8cf50ea71", "scanner": "scanner-primary", "fingerprint": "9befe1744eef8418", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-21dce52c861553a3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/service/page.tsx:619"}, "properties": {"repobilityId": "294495bf53078a05", "scanner": "scanner-primary", "fingerprint": "21dce52c861553a3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cde5e1c9f0593756", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/eagleview-test/page.tsx:222"}, "properties": {"repobilityId": "dff23f6c47143bae", "scanner": "scanner-primary", "fingerprint": "cde5e1c9f0593756", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-eb0170d6cf188157", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/ic-hub/IcQueue.tsx:186"}, "properties": {"repobilityId": "9b6ee73cc785e66d", "scanner": "scanner-primary", "fingerprint": "eb0170d6cf188157", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-54eec4b20c5d816f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/ic-hub/tabs/CorrespondenceTab.tsx:68"}, "properties": {"repobilityId": "79753599a540d628", "scanner": "scanner-primary", "fingerprint": "54eec4b20c5d816f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-abe0d2d999e761c8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/eagleview-orders/EagleViewOrdersClient.tsx:170"}, "properties": {"repobilityId": "1fc81a1a3b0d59c0", "scanner": "scanner-primary", "fingerprint": "abe0d2d999e761c8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6ca88a9ca468b2dd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/sales/page.tsx:281"}, "properties": {"repobilityId": "571773aea3bcaf59", "scanner": "scanner-primary", "fingerprint": "6ca88a9ca468b2dd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-098758998a64e93b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/pm-accountability/PmScorecardTab.tsx:124"}, "properties": {"repobilityId": "83c0067ade1e1eae", "scanner": "scanner-primary", "fingerprint": "098758998a64e93b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-35958a737b653585", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/roofing/page.tsx:283"}, "properties": {"repobilityId": "7c6b904b9c802081", "scanner": "scanner-primary", "fingerprint": "35958a737b653585", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-78747e092fc0b48a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/payment-timeline/PaymentTimelineClient.tsx:233"}, "properties": {"repobilityId": "96b696651e1ffac4", "scanner": "scanner-primary", "fingerprint": "78747e092fc0b48a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d00714b3f68be92e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/construction-metrics/page.tsx:332"}, "properties": {"repobilityId": "01511c387efd6226", "scanner": "scanner-primary", "fingerprint": "d00714b3f68be92e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-361c8e641fc078d0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/forecast-schedule/page.tsx:408"}, "properties": {"repobilityId": "c070d4a4cf1f722e", "scanner": "scanner-primary", "fingerprint": "361c8e641fc078d0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-271beea3bf7b1806", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/optimizer/page.tsx:318"}, "properties": {"repobilityId": "ff6ce95a4305b179", "scanner": "scanner-primary", "fingerprint": "271beea3bf7b1806", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1791e11a19cf6e0f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/shit-show-meeting/ProjectDetail.tsx:34"}, "properties": {"repobilityId": "fb308c988ae4988b", "scanner": "scanner-primary", "fingerprint": "1791e11a19cf6e0f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-34c95d39af14ff2e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/shit-show-meeting/ProjectQueue.tsx:82"}, "properties": {"repobilityId": "9cae8995f40a271e", "scanner": "scanner-primary", "fingerprint": "34c95d39af14ff2e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c408aaca80adfff7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/shit-show-meeting/HistoryStrip.tsx:84"}, "properties": {"repobilityId": "bf356773b0972f01", "scanner": "scanner-primary", "fingerprint": "c408aaca80adfff7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-feb81d5f880aa309", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/service-catalog/page.tsx:240"}, "properties": {"repobilityId": "0e1aefb096e03217", "scanner": "scanner-primary", "fingerprint": "feb81d5f880aa309", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-91fb5845af93c3e2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/project-pipeline-funnel/page.tsx:1049"}, "properties": {"repobilityId": "6e5fc2e455d714fa", "scanner": "scanner-primary", "fingerprint": "91fb5845af93c3e2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-42ba70592ac6a3c5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/equipment-backlog/page.tsx:272"}, "properties": {"repobilityId": "96d85dea0446b50e", "scanner": "scanner-primary", "fingerprint": "42ba70592ac6a3c5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-65a7fea88decdab5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/dnr/page.tsx:300"}, "properties": {"repobilityId": "e06b90702f3c277b", "scanner": "scanner-primary", "fingerprint": "65a7fea88decdab5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-501b7d6d8561fa35", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/site-survey/page.tsx:438"}, "properties": {"repobilityId": "8d8359ced3a5b241", "scanner": "scanner-primary", "fingerprint": "501b7d6d8561fa35", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3804909bcc7b545c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/product-comparison/page.tsx:2307"}, "properties": {"repobilityId": "2920307c224b7cf0", "scanner": "scanner-primary", "fingerprint": "3804909bcc7b545c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ee7ac9fbfffed064", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/design-engineering-funnel/page.tsx:264"}, "properties": {"repobilityId": "93c15376e78b26d3", "scanner": "scanner-primary", "fingerprint": "ee7ac9fbfffed064", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6ae8836e367f39d7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/qc/page.tsx:312"}, "properties": {"repobilityId": "fdca31d7a67b7f4d", "scanner": "scanner-primary", "fingerprint": "6ae8836e367f39d7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d9dcf7972bd40b44", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/scheduler/page.tsx:717"}, "properties": {"repobilityId": "9724eb8d7a5b2628", "scanner": "scanner-primary", "fingerprint": "d9dcf7972bd40b44", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-83197a9ca3e9bc17", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/construction/page.tsx:415"}, "properties": {"repobilityId": "41d9456dbb734d59", "scanner": "scanner-primary", "fingerprint": "83197a9ca3e9bc17", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-17ddcd9200a43d63", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/idr-meeting/AddProjectDialog.tsx:144"}, "properties": {"repobilityId": "d8669d73ba7535bf", "scanner": "scanner-primary", "fingerprint": "17ddcd9200a43d63", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-85fdb2084e8763db", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/idr-meeting/DealHistoryDetail.tsx:309"}, "properties": {"repobilityId": "88de0c78475d50cc", "scanner": "scanner-primary", "fingerprint": "85fdb2084e8763db", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c7636c74774aeaf9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/idr-meeting/EscalationQueue.tsx:115"}, "properties": {"repobilityId": "4b66ac5d779ecf14", "scanner": "scanner-primary", "fingerprint": "c7636c74774aeaf9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a26e03ccc7eacf76", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/idr-meeting/ProjectDetail.tsx:183"}, "properties": {"repobilityId": "4301703ad82926d4", "scanner": "scanner-primary", "fingerprint": "a26e03ccc7eacf76", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f0d745e8fc2a2e36", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/idr-meeting/LineItemQuickActions.tsx:137"}, "properties": {"repobilityId": "5b565a92f6c4979f", "scanner": "scanner-primary", "fingerprint": "f0d745e8fc2a2e36", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a6ae4d81cbbad146", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/app/dashboards/idr-meeting/AddersChecklist.tsx:259"}, "properties": {"repobilityId": "9014e865182bba9d", "scanner": "scanner-primary", "fingerprint": "a6ae4d81cbbad146", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-41b93827f24d6328", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/idr-meeting/SearchResultsList.tsx:240"}, "properties": {"repobilityId": "c6a9a17d6635632f", "scanner": "scanner-primary", "fingerprint": "41b93827f24d6328", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b2d05b3b4536f1ea", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/idr-meeting/AddEscalationDialog.tsx:138"}, "properties": {"repobilityId": "0f2a8aa6d6e87e8b", "scanner": "scanner-primary", "fingerprint": "b2d05b3b4536f1ea", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e5bfc11cf3c4eb91", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/service-overview/page.tsx:603"}, "properties": {"repobilityId": "23f3edb734f12ea4", "scanner": "scanner-primary", "fingerprint": "e5bfc11cf3c4eb91", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-16e07756f9f5a9a2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/incentives/page.tsx:432"}, "properties": {"repobilityId": "b7afb737f59ddd15", "scanner": "scanner-primary", "fingerprint": "16e07756f9f5a9a2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-46345b213248a159", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/dnr-scheduler/page.tsx:483"}, "properties": {"repobilityId": "0978adddd93586e9", "scanner": "scanner-primary", "fingerprint": "46345b213248a159", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c1d653a9aab8858e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/service-backlog/page.tsx:292"}, "properties": {"repobilityId": "161c62ba926359db", "scanner": "scanner-primary", "fingerprint": "c1d653a9aab8858e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-19a441758c975321", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/permitting-interconnection/page.tsx:737"}, "properties": {"repobilityId": "0b23af10978193d5", "scanner": "scanner-primary", "fingerprint": "19a441758c975321", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cd3d9e4bf5e99b69", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/map/MorningBriefing.tsx:84"}, "properties": {"repobilityId": "ba04dadc4e626521", "scanner": "scanner-primary", "fingerprint": "cd3d9e4bf5e99b69", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3e66b16a6338d3e6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/map/DetailPanel.tsx:118"}, "properties": {"repobilityId": "f3d179017e7c6cef", "scanner": "scanner-primary", "fingerprint": "3e66b16a6338d3e6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-603f7d73ae60da5f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/deals/DealDetailPanel.tsx:91"}, "properties": {"repobilityId": "096624c947b4e22b", "scanner": "scanner-primary", "fingerprint": "603f7d73ae60da5f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7b91058a50fd7925", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/app/dashboards/deals/page.tsx:435"}, "properties": {"repobilityId": "1e2c854d5cc8cc7c", "scanner": "scanner-primary", "fingerprint": "7b91058a50fd7925", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-16ec9956f4ba8860", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboards/design-engineering/page.tsx:118"}, "properties": {"repobilityId": "11971a531518b774", "scanner": "scanner-primary", "fingerprint": "16ec9956f4ba8860", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-71a5837ba994e6d9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/page.tsx:266"}, "properties": {"repobilityId": "8d313b2589100140", "scanner": "scanner-primary", "fingerprint": "71a5837ba994e6d9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cd4cf07015ab742d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/security/page.tsx:176"}, "properties": {"repobilityId": "feae37d5e9f8cdfe", "scanner": "scanner-primary", "fingerprint": "cd4cf07015ab742d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2f8157be00b9450d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/page-traffic/page.tsx:143"}, "properties": {"repobilityId": "362a09c2852c29b7", "scanner": "scanner-primary", "fingerprint": "2f8157be00b9450d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2d8bc207f1d2a94c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/activity/page.tsx:137"}, "properties": {"repobilityId": "4c86794b0741a9b8", "scanner": "scanner-primary", "fingerprint": "2d8bc207f1d2a94c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-81565bb481151f7b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/audit/page.tsx:237"}, "properties": {"repobilityId": "3bdb47ab21772b48", "scanner": "scanner-primary", "fingerprint": "81565bb481151f7b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b9b76d1c90f601c1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/roles/page.tsx:200"}, "properties": {"repobilityId": "b31a7745f690eea8", "scanner": "scanner-primary", "fingerprint": "b9b76d1c90f601c1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-36a8bee048a8dcfa", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/tickets/page.tsx:120"}, "properties": {"repobilityId": "b8af16460288762b", "scanner": "scanner-primary", "fingerprint": "36a8bee048a8dcfa", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fb2715678a9b82ba", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/freshservice/page.tsx:116"}, "properties": {"repobilityId": "d056b8ccb9a6d869", "scanner": "scanner-primary", "fingerprint": "fb2715678a9b82ba", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-465eccf5d18816b1", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/sop/page.tsx:710"}, "properties": {"repobilityId": "f5a434eea17d1a81", "scanner": "scanner-primary", "fingerprint": "465eccf5d18816b1", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-ccfcd50731c6c5fd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/hubspot-custom-objects.ts:232"}, "properties": {"repobilityId": "2f4c53277b6fe4bb", "scanner": "scanner-primary", "fingerprint": "ccfcd50731c6c5fd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7d2e9b0b16d78d7a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/email.ts:368"}, "properties": {"repobilityId": "bdf73540c4990d36", "scanner": "scanner-primary", "fingerprint": "7d2e9b0b16d78d7a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d5160f99cb25a3a7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/hubspot-customer-reviews.ts:56"}, "properties": {"repobilityId": "dec538774bb0de83", "scanner": "scanner-primary", "fingerprint": "d5160f99cb25a3a7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2a90b0646f750230", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/drive-plansets.ts:254"}, "properties": {"repobilityId": "f31474ed912c9a25", "scanner": "scanner-primary", "fingerprint": "2a90b0646f750230", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-070e151d0bd46928", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/deal-sync.ts:244"}, "properties": {"repobilityId": "49b3b04804ed8263", "scanner": "scanner-primary", "fingerprint": "070e151d0bd46928", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-40860d8ce3b702f4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/bom-pipeline.ts:255"}, "properties": {"repobilityId": "d7d1b8c2cede6470", "scanner": "scanner-primary", "fingerprint": "40860d8ce3b702f4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3efbabfd88e776ee", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/bom-extract.ts:403"}, "properties": {"repobilityId": "58f2076dc7ac656a", "scanner": "scanner-primary", "fingerprint": "3efbabfd88e776ee", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-20c6c52e8ce1c2b0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/google-calendar.ts:499"}, "properties": {"repobilityId": "d7cc0e466a3bbb41", "scanner": "scanner-primary", "fingerprint": "20c6c52e8ce1c2b0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-855e66191ca81c2a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/payment-tracking-invoices.ts:181"}, "properties": {"repobilityId": "58c48ff365a7b369", "scanner": "scanner-primary", "fingerprint": "855e66191ca81c2a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-47b54508860361a7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/idr-meeting.ts:995"}, "properties": {"repobilityId": "eb0e0c8b51d52ab9", "scanner": "scanner-primary", "fingerprint": "47b54508860361a7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2f9c32e5e6f3cd75", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/hubspot.ts:195"}, "properties": {"repobilityId": "2ce7d5729498db2e", "scanner": "scanner-primary", "fingerprint": "2f9c32e5e6f3cd75", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d7aae2a22582d770", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/zuper-call-counter.ts:85"}, "properties": {"repobilityId": "af6b45eaa27704b5", "scanner": "scanner-primary", "fingerprint": "d7aae2a22582d770", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a52ed4bf5b677f46", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/hubspot-webhook-auth.ts:115"}, "properties": {"repobilityId": "a970fdb0bfbcbe87", "scanner": "scanner-primary", "fingerprint": "a52ed4bf5b677f46", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-32137a26068ff918", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/catalog-notify.ts:75"}, "properties": {"repobilityId": "c8f813e3955ebc75", "scanner": "scanner-primary", "fingerprint": "32137a26068ff918", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-95730a570341925a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/property-sync.ts:340"}, "properties": {"repobilityId": "12893fb43c6c3521", "scanner": "scanner-primary", "fingerprint": "95730a570341925a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-def2254db3b13ac6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/office-performance.ts:485"}, "properties": {"repobilityId": "2ff4eeb7793cef63", "scanner": "scanner-primary", "fingerprint": "def2254db3b13ac6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-98825f26536ce4a4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/zuper-sync.ts:244"}, "properties": {"repobilityId": "bc98f09ca8bca505", "scanner": "scanner-primary", "fingerprint": "98825f26536ce4a4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-90385c74f67d955f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/zoho-customer-cache.ts:229"}, "properties": {"repobilityId": "a6b53d8083f250df", "scanner": "scanner-primary", "fingerprint": "90385c74f67d955f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e0c30d58092e10cf", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/goals-pipeline.ts:67"}, "properties": {"repobilityId": "e3751dc92c96e348", "scanner": "scanner-primary", "fingerprint": "e0c30d58092e10cf", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-59edc313b8f04bcc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/zuper.ts:444"}, "properties": {"repobilityId": "cc049f484558b01c", "scanner": "scanner-primary", "fingerprint": "59edc313b8f04bcc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-38b2c48abac7b613", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/pe-audit-orchestrator.ts:598"}, "properties": {"repobilityId": "631142c56f18313f", "scanner": "scanner-primary", "fingerprint": "38b2c48abac7b613", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9d837dedb46a5934", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/gmail-shared-inbox.ts:348"}, "properties": {"repobilityId": "26b9782058f76378", "scanner": "scanner-primary", "fingerprint": "9d837dedb46a5934", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b9ebb125151f7882", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/eod-summary/send.ts:94"}, "properties": {"repobilityId": "359db83584194031", "scanner": "scanner-primary", "fingerprint": "b9ebb125151f7882", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-08a8cdf4bd28ef9c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/admin-workflows/fanout.ts:109"}, "properties": {"repobilityId": "ba15ec96a97cf8f7", "scanner": "scanner-primary", "fingerprint": "08a8cdf4bd28ef9c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4c1b0c9430938353", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/checks/design-review-ai.ts:292"}, "properties": {"repobilityId": "05d26a123b54297f", "scanner": "scanner-primary", "fingerprint": "4c1b0c9430938353", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e882157064722959", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/lib/solar/v12-engine/runner.ts:38"}, "properties": {"repobilityId": "d3fc0a24e6071374", "scanner": "scanner-primary", "fingerprint": "e882157064722959", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-93ec73ee88eed105", "level": "warning", "message": {"text": "Dockerfile runs as root: infra/powerhub-proxy/Dockerfile"}, "properties": {"repobilityId": "47ec41d969d68f6f", "scanner": "scanner-primary", "fingerprint": "93ec73ee88eed105", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-4672a8372bc18ab6", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: caddy:2-alpine"}, "properties": {"repobilityId": "16b8dc641149ba14", "scanner": "scanner-primary", "fingerprint": "4672a8372bc18ab6", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "infra/powerhub-proxy/Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-aa5acaa49eb8315b", "level": "note", "message": {"text": "Containers defined but no K8s/orchestration manifest found"}, "properties": {"repobilityId": "b230ea9b68736081", "scanner": "scanner-primary", "fingerprint": "aa5acaa49eb8315b", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["coverage", "deployment"]}}, {"ruleId": "scanner-7fd69e71ce923e08", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in dashboard.html:1543"}, "properties": {"repobilityId": "3cddbad051d0bcc9", "scanner": "scanner-primary", "fingerprint": "7fd69e71ce923e08", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "dashboard.html"}, "region": {"startLine": 1543}}}]}, {"ruleId": "scanner-5600cddccb604a76", "level": "error", "message": {"text": "Possible secret in scripts/_create-zuper-product-customfields.ts"}, "properties": {"repobilityId": "2dc9a2a67897ed8e", "scanner": "scanner-primary", "fingerprint": "5600cddccb604a76", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/_create-zuper-product-customfields.ts"}, "region": {"startLine": 41}}}]}, {"ruleId": "scanner-5600cddccb604a76", "level": "error", "message": {"text": "Possible secret in scripts/_create-zuper-product-customfields.ts"}, "properties": {"repobilityId": "2dc9a2a67897ed8e", "scanner": "scanner-primary", "fingerprint": "5600cddccb604a76", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/_create-zuper-product-customfields.ts"}, "region": {"startLine": 46}}}]}, {"ruleId": "scanner-5600cddccb604a76", "level": "error", "message": {"text": "Possible secret in scripts/_create-zuper-product-customfields.ts"}, "properties": {"repobilityId": "2dc9a2a67897ed8e", "scanner": "scanner-primary", "fingerprint": "5600cddccb604a76", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/_create-zuper-product-customfields.ts"}, "region": {"startLine": 49}}}]}, {"ruleId": "scanner-5600cddccb604a76", "level": "error", "message": {"text": "Possible secret in scripts/_create-zuper-product-customfields.ts"}, "properties": {"repobilityId": "2dc9a2a67897ed8e", "scanner": "scanner-primary", "fingerprint": "5600cddccb604a76", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/_create-zuper-product-customfields.ts"}, "region": {"startLine": 51}}}]}, {"ruleId": "scanner-5600cddccb604a76", "level": "error", "message": {"text": "Possible secret in scripts/_create-zuper-product-customfields.ts"}, "properties": {"repobilityId": "2dc9a2a67897ed8e", "scanner": "scanner-primary", "fingerprint": "5600cddccb604a76", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/_create-zuper-product-customfields.ts"}, "region": {"startLine": 52}}}]}, {"ruleId": "scanner-5600cddccb604a76", "level": "error", "message": {"text": "Possible secret in scripts/_create-zuper-product-customfields.ts"}, "properties": {"repobilityId": "2dc9a2a67897ed8e", "scanner": "scanner-primary", "fingerprint": "5600cddccb604a76", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/_create-zuper-product-customfields.ts"}, "region": {"startLine": 53}}}]}, {"ruleId": "scanner-5600cddccb604a76", "level": "error", "message": {"text": "Possible secret in scripts/_create-zuper-product-customfields.ts"}, "properties": {"repobilityId": "2dc9a2a67897ed8e", "scanner": "scanner-primary", "fingerprint": "5600cddccb604a76", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/_create-zuper-product-customfields.ts"}, "region": {"startLine": 55}}}]}, {"ruleId": "scanner-5600cddccb604a76", "level": "error", "message": {"text": "Possible secret in scripts/_create-zuper-product-customfields.ts"}, "properties": {"repobilityId": "2dc9a2a67897ed8e", "scanner": "scanner-primary", "fingerprint": "5600cddccb604a76", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/_create-zuper-product-customfields.ts"}, "region": {"startLine": 58}}}]}, {"ruleId": "scanner-1e8fda7e8fc4a1e3", "level": "warning", "message": {"text": "Insecure pattern 'weak_hash' in scripts/seed-sop-scheduling.ts:47"}, "properties": {"repobilityId": "489a5dfe948a47f8", "scanner": "scanner-primary", "fingerprint": "1e8fda7e8fc4a1e3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "weak_hash"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/seed-sop-scheduling.ts"}, "region": {"startLine": 47}}}]}, {"ruleId": "scanner-64e1c90727d1e01c", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/verify-tech-ops-dissolution.mjs:3"}, "properties": {"repobilityId": "a515d7c53257165f", "scanner": "scanner-primary", "fingerprint": "64e1c90727d1e01c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/verify-tech-ops-dissolution.mjs"}, "region": {"startLine": 3}}}]}, {"ruleId": "scanner-f4965ee20d4a7ffc", "level": "note", "message": {"text": "Insecure pattern 'document_write' in public/tsrf-calculator.html:1990"}, "properties": {"repobilityId": "a7a58a613c928187", "scanner": "scanner-primary", "fingerprint": "f4965ee20d4a7ffc", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "document_write"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/tsrf-calculator.html"}, "region": {"startLine": 1990}}}]}, {"ruleId": "scanner-ea2d3226c412a0f3", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/tsrf-calculator.html:952"}, "properties": {"repobilityId": "fd7c48609f8f3f0c", "scanner": "scanner-primary", "fingerprint": "ea2d3226c412a0f3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/tsrf-calculator.html"}, "region": {"startLine": 952}}}]}, {"ruleId": "scanner-713b93511b3ba9a6", "level": "note", "message": {"text": "Insecure pattern 'document_write' in public/solar-surveyor/assets/index-CDmJaT6T.js:907"}, "properties": {"repobilityId": "cdd79739f534c2cc", "scanner": "scanner-primary", "fingerprint": "713b93511b3ba9a6", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "document_write"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/solar-surveyor/assets/index-CDmJaT6T.js"}, "region": {"startLine": 907}}}]}, {"ruleId": "scanner-76765b9964ede747", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/solar-surveyor/assets/index-CDmJaT6T.js:1"}, "properties": {"repobilityId": "6e71287d4e400ab7", "scanner": "scanner-primary", "fingerprint": "76765b9964ede747", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/solar-surveyor/assets/index-CDmJaT6T.js"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-123a59c177498c15", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/dashboards/_archive/pb-install-scheduler-v2.html:427"}, "properties": {"repobilityId": "07f64393e3452430", "scanner": "scanner-primary", "fingerprint": "123a59c177498c15", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/dashboards/_archive/pb-install-scheduler-v2.html"}, "region": {"startLine": 427}}}]}, {"ruleId": "scanner-519c4fda161c2de9", "level": "note", "message": {"text": "Insecure pattern 'document_write' in public/prototypes/solar-surveyor-v11.html:4584"}, "properties": {"repobilityId": "c9c5b6e27fbfeda3", "scanner": "scanner-primary", "fingerprint": "519c4fda161c2de9", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "document_write"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/prototypes/solar-surveyor-v11.html"}, "region": {"startLine": 4584}}}]}, {"ruleId": "scanner-baced7a562d13e22", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/prototypes/solar-surveyor-v11.html:689"}, "properties": {"repobilityId": "6755f74694901ea9", "scanner": "scanner-primary", "fingerprint": "baced7a562d13e22", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/prototypes/solar-surveyor-v11.html"}, "region": {"startLine": 689}}}]}, {"ruleId": "scanner-af3bf116ca350a4a", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/deal-detail/CommunicationsFeed.tsx:146"}, "properties": {"repobilityId": "1c493e7aea2f8f7e", "scanner": "scanner-primary", "fingerprint": "af3bf116ca350a4a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/deal-detail/CommunicationsFeed.tsx"}, "region": {"startLine": 146}}}]}, {"ruleId": "scanner-e31d7f8b84630176", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/deal-detail/TimelineEventRow.tsx:267"}, "properties": {"repobilityId": "30e3d5a9ce9b23c6", "scanner": "scanner-primary", "fingerprint": "e31d7f8b84630176", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/deal-detail/TimelineEventRow.tsx"}, "region": {"startLine": 267}}}]}, {"ruleId": "scanner-c57dcf96d14475cd", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/layout.tsx:63"}, "properties": {"repobilityId": "0bca654fa2052eb0", "scanner": "scanner-primary", "fingerprint": "c57dcf96d14475cd", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/layout.tsx"}, "region": {"startLine": 63}}}]}, {"ruleId": "scanner-c7f7aa40ed14e192", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/sop/page.tsx:710"}, "properties": {"repobilityId": "3796144704c2fd64", "scanner": "scanner-primary", "fingerprint": "c7f7aa40ed14e192", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/sop/page.tsx"}, "region": {"startLine": 710}}}]}, {"ruleId": "scanner-d9337904ad71be58", "level": "warning", "message": {"text": "Insecure pattern 'domparser_html_parse' in src/lib/solar/export/pdf.ts:133"}, "properties": {"repobilityId": "3e18b8100545ec37", "scanner": "scanner-primary", "fingerprint": "d9337904ad71be58", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "domparser_html_parse"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/lib/solar/export/pdf.ts"}, "region": {"startLine": 133}}}]}, {"ruleId": "scanner-dd7b292c2607d48c", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in src/hooks/useActivityTracking.ts:13"}, "properties": {"repobilityId": "9cacc01ba8282d53", "scanner": "scanner-primary", "fingerprint": "dd7b292c2607d48c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/hooks/useActivityTracking.ts"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-cb639d9a10a47b23", "level": "note", "message": {"text": "package.json defines install-time lifecycle scripts"}, "properties": {"repobilityId": "edeab51902066991", "scanner": "scanner-primary", "fingerprint": "cb639d9a10a47b23", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "npm", "install-scripts"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4601e3ad3bb28677", "level": "warning", "message": {"text": "No CI/CD pipelines detected"}, "properties": {"repobilityId": "c3ee439bce2bc51e", "scanner": "scanner-primary", "fingerprint": "4601e3ad3bb28677", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-a6854a54e5266b3b", "level": "note", "message": {"text": "Very large file: scripts/generate-dev-guide.cjs (935 lines)"}, "properties": {"repobilityId": "318b8faf2a897b51", "scanner": "scanner-primary", "fingerprint": "a6854a54e5266b3b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b5ace3856c33c980", "level": "note", "message": {"text": "Very large file: public/solar-surveyor/assets/index-CDmJaT6T.js (925 lines)"}, "properties": {"repobilityId": "354a9229f65f497d", "scanner": "scanner-primary", "fingerprint": "b5ace3856c33c980", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f8c10e2c38ac7689", "level": "note", "message": {"text": "Very large file: src/components/catalog/SyncModal.tsx (1589 lines)"}, "properties": {"repobilityId": "e20a029cf35f81ef", "scanner": "scanner-primary", "fingerprint": "f8c10e2c38ac7689", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-721a852928f5012c", "level": "note", "message": {"text": "Very large file: src/components/pe/DealsTab.tsx (1385 lines)"}, "properties": {"repobilityId": "3242703215b5225c", "scanner": "scanner-primary", "fingerprint": "721a852928f5012c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f79bd18b9d81291d", "level": "note", "message": {"text": "Very large file: src/components/pe/DocsTab.tsx (1582 lines)"}, "properties": {"repobilityId": "e053ed00f2b8280a", "scanner": "scanner-primary", "fingerprint": "f79bd18b9d81291d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ead212aed4fb9d82", "level": "note", "message": {"text": "Very large file: src/components/pe/AnalyticsTab.tsx (2360 lines)"}, "properties": {"repobilityId": "3ffab228f2e94edb", "scanner": "scanner-primary", "fingerprint": "ead212aed4fb9d82", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a2fb70b5f4dafbed", "level": "note", "message": {"text": "Very large file: src/app/api/zuper/availability/route.ts (1425 lines)"}, "properties": {"repobilityId": "d2c78a478ba48ba5", "scanner": "scanner-primary", "fingerprint": "a2fb70b5f4dafbed", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-39e53c50194cab62", "level": "note", "message": {"text": "Very large file: src/app/api/zuper/jobs/schedule/route.ts (2706 lines)"}, "properties": {"repobilityId": "0273f434fb34cf15", "scanner": "scanner-primary", "fingerprint": "39e53c50194cab62", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4bbd0c5634b08c8c", "level": "note", "message": {"text": "Very large file: src/app/api/zuper/jobs/schedule/confirm/route.ts (1567 lines)"}, "properties": {"repobilityId": "b8bc40f249380858", "scanner": "scanner-primary", "fingerprint": "4bbd0c5634b08c8c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-9667ac366f8c4112", "level": "note", "message": {"text": "Very large file: src/app/api/accounting/pe-analytics/route.ts (1182 lines)"}, "properties": {"repobilityId": "a9360d618aa657ae", "scanner": "scanner-primary", "fingerprint": "9667ac366f8c4112", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c2193f3292d40156", "level": "note", "message": {"text": "Very large file: src/app/api/products/comparison/route.ts (2328 lines)"}, "properties": {"repobilityId": "f2ba67073c3447a7", "scanner": "scanner-primary", "fingerprint": "c2193f3292d40156", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6f26433f5c769b46", "level": "note", "message": {"text": "Very large file: src/app/dashboards/de-metrics/page.tsx (1429 lines)"}, "properties": {"repobilityId": "db5fe2ec8a259e4b", "scanner": "scanner-primary", "fingerprint": "6f26433f5c769b46", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3aff5806f3e3f581", "level": "note", "message": {"text": "Very large file: src/app/dashboards/inspection-scheduler/page.tsx (2176 lines)"}, "properties": {"repobilityId": "b277507964673fe5", "scanner": "scanner-primary", "fingerprint": "3aff5806f3e3f581", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3fe23ee4a9ef4500", "level": "note", "message": {"text": "Very large file: src/app/dashboards/inventory/page.tsx (1667 lines)"}, "properties": {"repobilityId": "3f4ebbb390afc541", "scanner": "scanner-primary", "fingerprint": "3fe23ee4a9ef4500", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e73163dd657642da", "level": "note", "message": {"text": "Very large file: src/app/dashboards/site-survey-scheduler/page.tsx (3454 lines)"}, "properties": {"repobilityId": "e56637da3b1f777e", "scanner": "scanner-primary", "fingerprint": "e73163dd657642da", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-8f01362c02e3c6da", "level": "note", "message": {"text": "Very large file: src/app/dashboards/zuper-compliance/page.tsx (1736 lines)"}, "properties": {"repobilityId": "e596990a517423ec", "scanner": "scanner-primary", "fingerprint": "8f01362c02e3c6da", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0cf7fb1262d9f944", "level": "note", "message": {"text": "Very large file: src/app/dashboards/pe-report/page.tsx (1369 lines)"}, "properties": {"repobilityId": "a966fc33d821c7b0", "scanner": "scanner-primary", "fingerprint": "0cf7fb1262d9f944", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4c2c0b0f2ef3d0e6", "level": "note", "message": {"text": "Very large file: src/app/dashboards/service-scheduler/page.tsx (1375 lines)"}, "properties": {"repobilityId": "7daf38689402d4da", "scanner": "scanner-primary", "fingerprint": "4c2c0b0f2ef3d0e6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e5e825f0503ce5bb", "level": "note", "message": {"text": "Very large file: src/app/dashboards/catalog/page.tsx (2157 lines)"}, "properties": {"repobilityId": "226f52cd4148928a", "scanner": "scanner-primary", "fingerprint": "e5e825f0503ce5bb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-1187cdc19f7c8d30", "level": "note", "message": {"text": "Very large file: src/app/dashboards/construction-scheduler/page.tsx (2726 lines)"}, "properties": {"repobilityId": "9f0625f6f1761c6a", "scanner": "scanner-primary", "fingerprint": "1187cdc19f7c8d30", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3d226ade116f0199", "level": "note", "message": {"text": "Very large file: src/app/dashboards/inspections/page.tsx (1089 lines)"}, "properties": {"repobilityId": "8d5b9a06369aa50d", "scanner": "scanner-primary", "fingerprint": "3d226ade116f0199", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f10058dcad5c1f0f", "level": "note", "message": {"text": "Very large file: src/app/dashboards/bom/page.tsx (4240 lines)"}, "properties": {"repobilityId": "8ebe474ad92cf243", "scanner": "scanner-primary", "fingerprint": "f10058dcad5c1f0f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-cafd589737b4b532", "level": "note", "message": {"text": "Very large file: src/app/dashboards/zuper-status-comparison/page.tsx (1728 lines)"}, "properties": {"repobilityId": "6dc91e293af38984", "scanner": "scanner-primary", "fingerprint": "cafd589737b4b532", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-8c1f05e872f5a048", "level": "note", "message": {"text": "Very large file: src/app/dashboards/optimizer/page.tsx (1397 lines)"}, "properties": {"repobilityId": "a7006e8675b99c9d", "scanner": "scanner-primary", "fingerprint": "8c1f05e872f5a048", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-74989e84ec6e5cf2", "level": "note", "message": {"text": "Very large file: src/app/dashboards/project-pipeline-funnel/page.tsx (1647 lines)"}, "properties": {"repobilityId": "1e59ab38b382f714", "scanner": "scanner-primary", "fingerprint": "74989e84ec6e5cf2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-56e299a80bfaf648", "level": "note", "message": {"text": "Very large file: src/app/dashboards/product-comparison/page.tsx (2854 lines)"}, "properties": {"repobilityId": "d50de380cff7ccbf", "scanner": "scanner-primary", "fingerprint": "56e299a80bfaf648", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-82ef7bf827ba67e9", "level": "note", "message": {"text": "Very large file: src/app/dashboards/scheduler/page.tsx (7176 lines)"}, "properties": {"repobilityId": "e7f69c76a94d5409", "scanner": "scanner-primary", "fingerprint": "82ef7bf827ba67e9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-48f29101cc7816a4", "level": "note", "message": {"text": "Very large file: src/app/dashboards/pe/legacy/page.tsx (1425 lines)"}, "properties": {"repobilityId": "a7e707dd02a65a51", "scanner": "scanner-primary", "fingerprint": "48f29101cc7816a4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b2143d28d2fa3686", "level": "note", "message": {"text": "Very large file: src/app/guide/page.tsx (995 lines)"}, "properties": {"repobilityId": "f1460d41521ffce2", "scanner": "scanner-primary", "fingerprint": "b2143d28d2fa3686", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b3bcdc077c85d09c", "level": "note", "message": {"text": "Very large file: src/lib/shop-health.ts (1425 lines)"}, "properties": {"repobilityId": "71df2753752c8891", "scanner": "scanner-primary", "fingerprint": "b3bcdc077c85d09c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-fa33f1fe281effbc", "level": "note", "message": {"text": "Very large file: src/lib/email.ts (2026 lines)"}, "properties": {"repobilityId": "2bb8ec0ef4d6bb7f", "scanner": "scanner-primary", "fingerprint": "fa33f1fe281effbc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-aae5323e8061731c", "level": "note", "message": {"text": "Very large file: src/lib/product-updates.ts (1235 lines)"}, "properties": {"repobilityId": "c17c22c1766ebecf", "scanner": "scanner-primary", "fingerprint": "aae5323e8061731c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-44e830ef931d718c", "level": "note", "message": {"text": "Very large file: src/lib/zoho-inventory.ts (1817 lines)"}, "properties": {"repobilityId": "002797c0ea12f463", "scanner": "scanner-primary", "fingerprint": "44e830ef931d718c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-dc6ea1eb558fcbc5", "level": "note", "message": {"text": "Very large file: src/lib/hubspot.ts (3867 lines)"}, "properties": {"repobilityId": "1fd66eed5b5bc719", "scanner": "scanner-primary", "fingerprint": "dc6ea1eb558fcbc5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-37a4037245456131", "level": "note", "message": {"text": "Very large file: src/lib/property-sync.ts (1527 lines)"}, "properties": {"repobilityId": "53d46ccf591dc10b", "scanner": "scanner-primary", "fingerprint": "37a4037245456131", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-60c78912c13b7411", "level": "note", "message": {"text": "Very large file: src/lib/office-performance.ts (2236 lines)"}, "properties": {"repobilityId": "9b552f09db10d3bb", "scanner": "scanner-primary", "fingerprint": "60c78912c13b7411", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-548145dabcfce306", "level": "note", "message": {"text": "Very large file: src/lib/zuper.ts (2335 lines)"}, "properties": {"repobilityId": "c37d33459d7d7ce4", "scanner": "scanner-primary", "fingerprint": "548145dabcfce306", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ce45a8a96f116593", "level": "note", "message": {"text": "Very large file: src/lib/pm-flag-rules.ts (1433 lines)"}, "properties": {"repobilityId": "e3c0f2ee1fe2fbec", "scanner": "scanner-primary", "fingerprint": "ce45a8a96f116593", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e2354aff3eeb678f", "level": "note", "message": {"text": "Very large file: src/lib/roles.ts (1720 lines)"}, "properties": {"repobilityId": "7da29f6121521927", "scanner": "scanner-primary", "fingerprint": "e2354aff3eeb678f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-feafb0b0f67bee69", "level": "note", "message": {"text": "Very large file: src/lib/pe-vision-classifier.ts (890 lines)"}, "properties": {"repobilityId": "a43c734ed1c284f9", "scanner": "scanner-primary", "fingerprint": "feafb0b0f67bee69", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ea3b5e389d8c9c0f", "level": "note", "message": {"text": "Low test-to-source ratio"}, "properties": {"repobilityId": "ef7b2552cc00a375", "scanner": "scanner-primary", "fingerprint": "ea3b5e389d8c9c0f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["tests"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "fc3f5390890e620a", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-de9b91a39c1f7873", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: hubspot-extensions/src/app/cards/package.json"}, "properties": {"repobilityId": "08e6e5fb6b586b50", "scanner": "scanner-primary", "fingerprint": "de9b91a39c1f7873", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "hubspot-extensions/src/app/cards/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "da6f8ae87ebe2823", "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": "41a68b4323f23db4", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "598d8b69a628f7e0", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "warning", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "e9a3d91319057ae9", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "69be5f129c526906", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "49644b547e714777", "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": "125a91d77780f650", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-cc55229a7a3c078d", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .mcp.json"}, "properties": {"repobilityId": "51942fb3d5b8b5b4", "scanner": "scanner-primary", "fingerprint": "cc55229a7a3c078d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "mcp_config"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".mcp.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-122f91b7f2906dc4", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/settings.json"}, "properties": {"repobilityId": "a2967269048b6a9d", "scanner": "scanner-primary", "fingerprint": "122f91b7f2906dc4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/settings.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-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-a3023585d0283dfb", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/find-design-plans/SKILL.md"}, "properties": {"repobilityId": "60c16655e684c041", "scanner": "scanner-primary", "fingerprint": "a3023585d0283dfb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/find-design-plans/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e02f7aed2b903ffd", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/planset-bom/references/extraction-guide.md"}, "properties": {"repobilityId": "ee0a0e5771720823", "scanner": "scanner-primary", "fingerprint": "e02f7aed2b903ffd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/planset-bom/references/extraction-guide.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1376b7b376e73de6", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/bom-pipeline-core/SKILL.md"}, "properties": {"repobilityId": "2dfe87cdc1daf9fc", "scanner": "scanner-primary", "fingerprint": "1376b7b376e73de6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/bom-pipeline-core/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b55743dbe6bdaae2", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/product-lookup/references/enphase.md"}, "properties": {"repobilityId": "ac6a24101f906380", "scanner": "scanner-primary", "fingerprint": "b55743dbe6bdaae2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/product-lookup/references/enphase.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-75919d23b86f936c", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/product-lookup/references/ez-solar.md"}, "properties": {"repobilityId": "07f27d5ff30b3bd1", "scanner": "scanner-primary", "fingerprint": "75919d23b86f936c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/product-lookup/references/ez-solar.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f77bbb424a86a2fb", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/planset-to-so/SKILL.md"}, "properties": {"repobilityId": "2a33d063e505defe", "scanner": "scanner-primary", "fingerprint": "f77bbb424a86a2fb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/planset-to-so/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f1ed9e022351b3eb", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/bom-to-so/references/post-processor-rules.md"}, "properties": {"repobilityId": "96b13fef3517bafa", "scanner": "scanner-primary", "fingerprint": "f1ed9e022351b3eb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/bom-to-so/references/post-processor-rules.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6fea35b985cc6ae6", "level": "none", "message": {"text": "Commented-code block (5 lines) in next.config.ts:28"}, "properties": {"repobilityId": "e30473887d3c59ff", "scanner": "scanner-primary", "fingerprint": "6fea35b985cc6ae6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7a7ba5edb8877fc9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/zuper-actually-unlinked.ts:28"}, "properties": {"repobilityId": "72b1c2ef082fed16", "scanner": "scanner-primary", "fingerprint": "7a7ba5edb8877fc9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5ce4dc8c968d4d94", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_pull-zoho-item-groups.ts:71"}, "properties": {"repobilityId": "01c417fd6230ac59", "scanner": "scanner-primary", "fingerprint": "5ce4dc8c968d4d94", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0a4b3d1bc09663ad", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/fix-surveyor-mismatches.ts:21"}, "properties": {"repobilityId": "3323dbb9bcfc7cca", "scanner": "scanner-primary", "fingerprint": "0a4b3d1bc09663ad", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f22bdff0207a672a", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/create-hubspot-property-object.ts:1"}, "properties": {"repobilityId": "3ca7603d0ddf00c5", "scanner": "scanner-primary", "fingerprint": "f22bdff0207a672a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7bfb6afcfbd10581", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_create-tesla-model-hubspot-props.ts:64"}, "properties": {"repobilityId": "23c8fd571fd2478b", "scanner": "scanner-primary", "fingerprint": "7bfb6afcfbd10581", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5f0067f9f300f2bd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_fix-catalog-integrity.ts:132"}, "properties": {"repobilityId": "b7057015165103a3", "scanner": "scanner-primary", "fingerprint": "5f0067f9f300f2bd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d2f9569a34d1f7e5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/zuper-orphan-hs-details.ts:25"}, "properties": {"repobilityId": "9245bb34e8cbb594", "scanner": "scanner-primary", "fingerprint": "d2f9569a34d1f7e5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1795e5e6b363fb18", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_match-zoho-orphans.ts:82"}, "properties": {"repobilityId": "4d91c026b47502e0", "scanner": "scanner-primary", "fingerprint": "1795e5e6b363fb18", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-92bcd84db67ce0b6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/check-notifications.mjs:134"}, "properties": {"repobilityId": "fac689c0cef2adc6", "scanner": "scanner-primary", "fingerprint": "92bcd84db67ce0b6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-49784f6a85f70f1f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/count-install-photos.mjs:66"}, "properties": {"repobilityId": "2e9fb1257789414c", "scanner": "scanner-primary", "fingerprint": "49784f6a85f70f1f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6edf20ede0135f97", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/zuper-orphan-hs-links.ts:24"}, "properties": {"repobilityId": "051e23bc00a511a3", "scanner": "scanner-primary", "fingerprint": "6edf20ede0135f97", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-05d93ff2cfea2a6d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_rebrand-generic-products.ts:54"}, "properties": {"repobilityId": "137a24c7a17c44ad", "scanner": "scanner-primary", "fingerprint": "05d93ff2cfea2a6d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ada452fa575b4b72", "level": "note", "message": {"text": "Legacy-named symbol `obviousLegacy` in scripts/_export-hubspot-orphan-list.ts:54"}, "properties": {"repobilityId": "4bcb3849a5bcc4ad", "scanner": "scanner-primary", "fingerprint": "ada452fa575b4b72", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-5eafe2b34d6633da", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_export-hubspot-orphan-list.ts:26"}, "properties": {"repobilityId": "a3a3e007ecb32232", "scanner": "scanner-primary", "fingerprint": "5eafe2b34d6633da", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-555beaa5297e9de4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/zuper-orphan-full-crossref.ts:60"}, "properties": {"repobilityId": "d45739bcf2b2ffc1", "scanner": "scanner-primary", "fingerprint": "555beaa5297e9de4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-028bd1778a98968d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/zoho-item-fields.ts:23"}, "properties": {"repobilityId": "2a195bbd3c24e308", "scanner": "scanner-primary", "fingerprint": "028bd1778a98968d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cdeca0b665ee4c50", "level": "note", "message": {"text": "Legacy-named symbol `battery_backup` in scripts/classify-sos.ts:106"}, "properties": {"repobilityId": "f65ee0f6e3ebdeee", "scanner": "scanner-primary", "fingerprint": "cdeca0b665ee4c50", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-5dd1f953e077481f", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/backfill-zuper-properties.ts:6"}, "properties": {"repobilityId": "2dcb23376f8e3842", "scanner": "scanner-primary", "fingerprint": "5dd1f953e077481f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-99654c2a8c8ff1fa", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_mismatch-deal-stages.ts:59"}, "properties": {"repobilityId": "4dbf6ca3f1a0ef06", "scanner": "scanner-primary", "fingerprint": "99654c2a8c8ff1fa", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-00cf8e53cac9aceb", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_delete-test-products.ts:29"}, "properties": {"repobilityId": "0d04e50944e159e4", "scanner": "scanner-primary", "fingerprint": "00cf8e53cac9aceb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-08e642b30e4ff1d0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/check-zuper-hs-ids.ts:26"}, "properties": {"repobilityId": "e22025d9801b47e2", "scanner": "scanner-primary", "fingerprint": "08e642b30e4ff1d0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b3459fc86835cb12", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/pe-photo-submit.ts:84"}, "properties": {"repobilityId": "01695f85330c9324", "scanner": "scanner-primary", "fingerprint": "b3459fc86835cb12", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b4e5ae8932297def", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/create-ip-id-fields.ts:19"}, "properties": {"repobilityId": "030c7f10aab8b478", "scanner": "scanner-primary", "fingerprint": "b4e5ae8932297def", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-266b6eb401974ca9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/backfill-site-surveyor.ts:40"}, "properties": {"repobilityId": "c71dd73ed90e227d", "scanner": "scanner-primary", "fingerprint": "266b6eb401974ca9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c17b9c6901c17daf", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/zuper-tasks-vs-jobs.ts:57"}, "properties": {"repobilityId": "ab4049aa71fc41ea", "scanner": "scanner-primary", "fingerprint": "c17b9c6901c17daf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bf4b58bd87140dd7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_zuper-mismatch-report.ts:162"}, "properties": {"repobilityId": "075cf8eb01e3d96d", "scanner": "scanner-primary", "fingerprint": "bf4b58bd87140dd7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8587e9c0f885dd67", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_audit-catalog-integrity.ts:92"}, "properties": {"repobilityId": "3f2fc0d8fe27a369", "scanner": "scanner-primary", "fingerprint": "8587e9c0f885dd67", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ae0ca88d5d0ccdd8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/sync-tasks.ts:104"}, "properties": {"repobilityId": "df4e59e98878b188", "scanner": "scanner-primary", "fingerprint": "ae0ca88d5d0ccdd8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e1ae1d7d7c9213a7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/create-zoho-cf.ts:17"}, "properties": {"repobilityId": "5ad6b93d2a1fe112", "scanner": "scanner-primary", "fingerprint": "e1ae1d7d7c9213a7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-abacdc82b5b2b09e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/catalog-reconciliation-audit.ts:91"}, "properties": {"repobilityId": "288f29e3352c8d2e", "scanner": "scanner-primary", "fingerprint": "abacdc82b5b2b09e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4f63fde5e5a04196", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/match-ips-to-zuper-orphans.ts:54"}, "properties": {"repobilityId": "f6974de50fd3513b", "scanner": "scanner-primary", "fingerprint": "4f63fde5e5a04196", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-379ceca1bb68c122", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/fix-hyundai-zuper.ts:28"}, "properties": {"repobilityId": "1f3150e4844f5623", "scanner": "scanner-primary", "fingerprint": "379ceca1bb68c122", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9a9c8fbb76e04620", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/backfill-ip-ids.ts:52"}, "properties": {"repobilityId": "4e392d2a67dd0fae", "scanner": "scanner-primary", "fingerprint": "9a9c8fbb76e04620", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b603df7b46e67a4f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/check-zuper-naming.ts:24"}, "properties": {"repobilityId": "fa5b266ca8c767cd", "scanner": "scanner-primary", "fingerprint": "b603df7b46e67a4f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-62936b4fa563389a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/seed-pe-docs.ts:93"}, "properties": {"repobilityId": "71d6a33ac35b619c", "scanner": "scanner-primary", "fingerprint": "62936b4fa563389a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8b6e1670cdbabb86", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/create-ips-from-zuper-hs.ts:54"}, "properties": {"repobilityId": "c07b3ba42f6b2e83", "scanner": "scanner-primary", "fingerprint": "8b6e1670cdbabb86", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-de555f636ffe84e9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_pull-zuper-product-schema.ts:18"}, "properties": {"repobilityId": "e31bc1a53998eb9d", "scanner": "scanner-primary", "fingerprint": "de555f636ffe84e9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e715c9fc66236fbd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/check-hs-orphans-in-zoho-zuper.ts:47"}, "properties": {"repobilityId": "23f43bb87d2d686f", "scanner": "scanner-primary", "fingerprint": "e715c9fc66236fbd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-717baf7a6a0ddf12", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/inspect-zuper-products.ts:13"}, "properties": {"repobilityId": "75fb13fc22c33cba", "scanner": "scanner-primary", "fingerprint": "717baf7a6a0ddf12", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4685ea70849728d3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/create-pe-doc-properties.ts:34"}, "properties": {"repobilityId": "4f10679f743a5a20", "scanner": "scanner-primary", "fingerprint": "4685ea70849728d3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3bea4abc9f041145", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_pe-rejected-docs-by-team-gdoc.ts:123"}, "properties": {"repobilityId": "b19d56da73ff1644", "scanner": "scanner-primary", "fingerprint": "3bea4abc9f041145", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-01075a609a5f9d2e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/site-surveyor-audit-extended.ts:51"}, "properties": {"repobilityId": "1d7d060a10906ed0", "scanner": "scanner-primary", "fingerprint": "01075a609a5f9d2e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-23b69f188684651a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/backfill-so-warehouses.ts:33"}, "properties": {"repobilityId": "192e96246bab27c8", "scanner": "scanner-primary", "fingerprint": "23b69f188684651a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-efe72eae8496f55a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/debug-zoho.ts:10"}, "properties": {"repobilityId": "a4c2e19fc346e772", "scanner": "scanner-primary", "fingerprint": "efe72eae8496f55a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-61c4beb9b7f1fd58", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_pe-missing-docs-by-team-gdoc.ts:117"}, "properties": {"repobilityId": "f2a45535f7596947", "scanner": "scanner-primary", "fingerprint": "61c4beb9b7f1fd58", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a83d0aa9059b0e09", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/site-surveyor-mismatch.ts:34"}, "properties": {"repobilityId": "da9c5e1e2f4b4057", "scanner": "scanner-primary", "fingerprint": "a83d0aa9059b0e09", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-996e7607fbdf1e73", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/get-sa-client-id.mjs:65"}, "properties": {"repobilityId": "970c539b2a77d49c", "scanner": "scanner-primary", "fingerprint": "996e7607fbdf1e73", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c9ca5df279a37330", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/find-orphans-in-list.ts:22"}, "properties": {"repobilityId": "0391472157dd27b3", "scanner": "scanner-primary", "fingerprint": "c9ca5df279a37330", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5457a00cddd195f7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/check-orphan-uids.ts:20"}, "properties": {"repobilityId": "5af7c5df9e5bbafa", "scanner": "scanner-primary", "fingerprint": "5457a00cddd195f7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0756b646adfee8a1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/check-hs-zuper-crossref.ts:27"}, "properties": {"repobilityId": "b661822fa2b71d38", "scanner": "scanner-primary", "fingerprint": "0756b646adfee8a1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8bb7b60b447a952e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/ensure-hubspot-product-props.ts:53"}, "properties": {"repobilityId": "67965d6e90fa7520", "scanner": "scanner-primary", "fingerprint": "8bb7b60b447a952e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-478e05ae35e0529d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/audit-zuper-dupes.ts:33"}, "properties": {"repobilityId": "e92dba9965d7421c", "scanner": "scanner-primary", "fingerprint": "478e05ae35e0529d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-023b2acc9f274762", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/fetch-zoho-item-ids.ts:12"}, "properties": {"repobilityId": "d6b9233619ab1a3f", "scanner": "scanner-primary", "fingerprint": "023b2acc9f274762", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-91b0140bc331f21f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/fix-zuper-dupes-v2.ts:105"}, "properties": {"repobilityId": "71330ec15a77360a", "scanner": "scanner-primary", "fingerprint": "91b0140bc331f21f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cb97408a48dbbe17", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/zuper-orphan-so-overlap.ts:43"}, "properties": {"repobilityId": "33e9a20cff38cb2f", "scanner": "scanner-primary", "fingerprint": "cb97408a48dbbe17", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cc0471d5c20ee677", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/site-survey-missing-surveyor.ts:36"}, "properties": {"repobilityId": "3ba004a34d0ab0b4", "scanner": "scanner-primary", "fingerprint": "cc0471d5c20ee677", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-74f6c0e0d2e97701", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/list-zoho-sos.ts:10"}, "properties": {"repobilityId": "f31256355af13e73", "scanner": "scanner-primary", "fingerprint": "74f6c0e0d2e97701", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1a732cbba1700433", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/investigate-silfab-and-gaps.ts:39"}, "properties": {"repobilityId": "9bca687b0a931c17", "scanner": "scanner-primary", "fingerprint": "1a732cbba1700433", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-239559bbff442674", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_pull-hubspot-manufacturer-enum.ts:29"}, "properties": {"repobilityId": "1d497e1c25040442", "scanner": "scanner-primary", "fingerprint": "239559bbff442674", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-77a1a6f1e3d1e9a9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/categorize-unlinked-hs.ts:26"}, "properties": {"repobilityId": "66bdf3249524dd44", "scanner": "scanner-primary", "fingerprint": "77a1a6f1e3d1e9a9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-603cf0002e77a08f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/backfill-so-deal-ids.ts:38"}, "properties": {"repobilityId": "cfcf39632b8dccfc", "scanner": "scanner-primary", "fingerprint": "603cf0002e77a08f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4f8265f9e9bcd465", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_create-zuper-product-customfields.ts:74"}, "properties": {"repobilityId": "622b19f254e97edd", "scanner": "scanner-primary", "fingerprint": "4f8265f9e9bcd465", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bdb3bd27d954a699", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/analyze-real-hs-products.ts:27"}, "properties": {"repobilityId": "6fe89ef0435e1b3f", "scanner": "scanner-primary", "fingerprint": "bdb3bd27d954a699", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-45e56bea4b488e8c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/backfill-eagleview-from-gmail.ts:132"}, "properties": {"repobilityId": "16196cef0e7010cb", "scanner": "scanner-primary", "fingerprint": "45e56bea4b488e8c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f64c1c513ccd9ee4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_backfill-hubspot-manufacturer-enum.ts:82"}, "properties": {"repobilityId": "edaf47bdf2a1d0ca", "scanner": "scanner-primary", "fingerprint": "f64c1c513ccd9ee4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f6f976075949f092", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/unlinked-counts.ts:52"}, "properties": {"repobilityId": "c3d8f9149ce6970f", "scanner": "scanner-primary", "fingerprint": "f6f976075949f092", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e61dd03b388c9940", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/backfill-zuper-hs-ids.ts:39"}, "properties": {"repobilityId": "69e23844c3cd9191", "scanner": "scanner-primary", "fingerprint": "e61dd03b388c9940", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-812e8ea2ee1c7917", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/zuper-hs-mismatch-report.ts:83"}, "properties": {"repobilityId": "46051e166cbc96bf", "scanner": "scanner-primary", "fingerprint": "812e8ea2ee1c7917", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-78b53d4582d5e9eb", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-pe-pandadoc-search.mjs:53"}, "properties": {"repobilityId": "782a23523bc1bfa7", "scanner": "scanner-primary", "fingerprint": "78b53d4582d5e9eb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-705033ed3a2cbaf3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_pull-hubspot-product-properties.ts:26"}, "properties": {"repobilityId": "da41d27abb792f44", "scanner": "scanner-primary", "fingerprint": "705033ed3a2cbaf3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ff37362bc433e116", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_zuper-ratelimit-probe.ts:21"}, "properties": {"repobilityId": "af59a0fdccc57db0", "scanner": "scanner-primary", "fingerprint": "ff37362bc433e116", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-dbed07fabae78b6c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/lookup-pe-template-ids.mjs:42"}, "properties": {"repobilityId": "e6988be7f79a59fa", "scanner": "scanner-primary", "fingerprint": "dbed07fabae78b6c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-85f5d363e8f94baf", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_zoho-search.ts:26"}, "properties": {"repobilityId": "05bbbdcbb3abac76", "scanner": "scanner-primary", "fingerprint": "85f5d363e8f94baf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9c53f5240df3ca45", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_create-zoho-categories.ts:33"}, "properties": {"repobilityId": "bd16163b56ffb8f1", "scanner": "scanner-primary", "fingerprint": "9c53f5240df3ca45", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-08dcbe30b75e48b4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/seed-qb-products.ts:114"}, "properties": {"repobilityId": "47290363954189c1", "scanner": "scanner-primary", "fingerprint": "08dcbe30b75e48b4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8a2840e5a4af61c0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/create-hs-crosslink-props.ts:11"}, "properties": {"repobilityId": "39186d319142b1b2", "scanner": "scanner-primary", "fingerprint": "8a2840e5a4af61c0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9a0872a3473fe57d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/review-2026-sos.ts:10"}, "properties": {"repobilityId": "4aaf806e758add94", "scanner": "scanner-primary", "fingerprint": "9a0872a3473fe57d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6f6bc463304ec755", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_create-shit-show-properties.ts:67"}, "properties": {"repobilityId": "19d69c1c9eea62cc", "scanner": "scanner-primary", "fingerprint": "6f6bc463304ec755", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5abbe8738104e517", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-zuper-fetch.ts:12"}, "properties": {"repobilityId": "197b16ac8aea471a", "scanner": "scanner-primary", "fingerprint": "5abbe8738104e517", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-78ec155806c7af47", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/list-unlinked-hs-products.ts:25"}, "properties": {"repobilityId": "b477cf78e6633e0a", "scanner": "scanner-primary", "fingerprint": "78ec155806c7af47", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bb703e1b1fadac6c", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/backfill-properties.ts:18"}, "properties": {"repobilityId": "ee360308155cf146", "scanner": "scanner-primary", "fingerprint": "bb703e1b1fadac6c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1e2697f80ee1b29d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/fetch-ops-sos.ts:10"}, "properties": {"repobilityId": "05d99e629e4d972a", "scanner": "scanner-primary", "fingerprint": "1e2697f80ee1b29d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b6d48f54ee4a9e30", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_pe-rejected-docs-by-deal-gdoc.ts:104"}, "properties": {"repobilityId": "368cad736ea8fe17", "scanner": "scanner-primary", "fingerprint": "b6d48f54ee4a9e30", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-639a64b72c0a1127", "level": "note", "message": {"text": "Legacy-named symbol `hsLegacy` in scripts/list-all-gaps-with-dupes.ts:164"}, "properties": {"repobilityId": "743eb45f71de05c6", "scanner": "scanner-primary", "fingerprint": "639a64b72c0a1127", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-daa2c78f49929f9f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/list-all-gaps-with-dupes.ts:94"}, "properties": {"repobilityId": "bc773bf2feae0b95", "scanner": "scanner-primary", "fingerprint": "daa2c78f49929f9f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9b765247f2b35244", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/match-current-hs-to-ips.ts:85"}, "properties": {"repobilityId": "5bf4c519a60dd809", "scanner": "scanner-primary", "fingerprint": "9b765247f2b35244", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-dcf3a353a51c83c8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_audit-orphan-usage-2026.ts:37"}, "properties": {"repobilityId": "261e6eaf2922cfbe", "scanner": "scanner-primary", "fingerprint": "dcf3a353a51c83c8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f8ad1ed92054f6a3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/_standardize-brand-casing.ts:26"}, "properties": {"repobilityId": "22a2ba91c1c81f5a", "scanner": "scanner-primary", "fingerprint": "f8ad1ed92054f6a3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-360d95448ead434a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/get-sa-client-id2.mjs:59"}, "properties": {"repobilityId": "fac848b9ac2b124b", "scanner": "scanner-primary", "fingerprint": "360d95448ead434a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0739b775cc5e7ad8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/clean-names-and-match-hs.ts:100"}, "properties": {"repobilityId": "2da4a745d18a8aec", "scanner": "scanner-primary", "fingerprint": "0739b775cc5e7ad8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c2a6876e4259e368", "level": "none", "message": {"text": "Commented-code block (9 lines) in scripts/cleanup-bare-property-dupes.ts:11"}, "properties": {"repobilityId": "2988bac4a98e6c69", "scanner": "scanner-primary", "fingerprint": "c2a6876e4259e368", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-da966710ee95d256", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 .claude/skills/site-survey-readiness-workspace/iteration-1/single-project-by-proj-number/with_skill/outputs/list-survey-files.ts:33"}, "properties": {"repobilityId": "3a384bdb778ab497", "scanner": "scanner-primary", "fingerprint": "da966710ee95d256", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0ef3821ef1fed32a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 .claude/skills/site-survey-readiness/scripts/list-drive-files.ts:48"}, "properties": {"repobilityId": "f92de886ca6ec10d", "scanner": "scanner-primary", "fingerprint": "0ef3821ef1fed32a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c219e2a3f7a9ecc8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 hubspot-extensions/src/app/cards/PowerhubSidebar.tsx:67"}, "properties": {"repobilityId": "ea498667f410b43e", "scanner": "scanner-primary", "fingerprint": "c219e2a3f7a9ecc8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ed236bb79b5e45cc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 hubspot-extensions/src/app/cards/PowerhubCard.tsx:87"}, "properties": {"repobilityId": "85e18c81c038bcc6", "scanner": "scanner-primary", "fingerprint": "ed236bb79b5e45cc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f3d05e34c23f8d63", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/sw.js:69"}, "properties": {"repobilityId": "f7bd17ef036bfd4a", "scanner": "scanner-primary", "fingerprint": "f3d05e34c23f8d63", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3e898d7bb4c32b69", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/solar-surveyor/assets/index-CDmJaT6T.js:1"}, "properties": {"repobilityId": "cb52cbb5daf324a6", "scanner": "scanner-primary", "fingerprint": "3e898d7bb4c32b69", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-74431ab60c3bd568", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/middleware.ts:235"}, "properties": {"repobilityId": "a47a535ebf81fa8c", "scanner": "scanner-primary", "fingerprint": "74431ab60c3bd568", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-49a08aeeb6932519", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/__tests__/zuper-status-mapping.test.ts:69"}, "properties": {"repobilityId": "79cb665e903cb215", "scanner": "scanner-primary", "fingerprint": "49a08aeeb6932519", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7356dd801e06e29f", "level": "note", "message": {"text": "Legacy-named symbol `proposal_v1` in src/__tests__/pe-turnover.test.ts:109"}, "properties": {"repobilityId": "92b25970e9d661f7", "scanner": "scanner-primary", "fingerprint": "7356dd801e06e29f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-3a13b176810bd4cf", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/__tests__/adders/seed-integrity.test.ts:1"}, "properties": {"repobilityId": "3982b6a8dca45899", "scanner": "scanner-primary", "fingerprint": "3a13b176810bd4cf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9f58e8b91dc67c41", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/__tests__/api/bom-zoho-so.test.ts:99"}, "properties": {"repobilityId": "3df3062e96525fa4", "scanner": "scanner-primary", "fingerprint": "9f58e8b91dc67c41", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-af88e1231410daf2", "level": "note", "message": {"text": "Legacy-named symbol `push_v1` in src/__tests__/api/catalog-push-requests.test.ts:359"}, "properties": {"repobilityId": "82d5c5dcc1efcc07", "scanner": "scanner-primary", "fingerprint": "af88e1231410daf2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-406280be054d8dd7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/__tests__/api/properties/detail.test.ts:35"}, "properties": {"repobilityId": "3013e8156f00f47a", "scanner": "scanner-primary", "fingerprint": "406280be054d8dd7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-82761456adcb25e9", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/__tests__/lib/property-sync.test.ts:1163"}, "properties": {"repobilityId": "8935d122db58babf", "scanner": "scanner-primary", "fingerprint": "82761456adcb25e9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cdb25d657bfc5859", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/__tests__/lib/user-access.test.ts:228"}, "properties": {"repobilityId": "48730681e2255086", "scanner": "scanner-primary", "fingerprint": "cdb25d657bfc5859", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-459112a86fc86656", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/__tests__/lib/property-backfill-lock.test.ts:3"}, "properties": {"repobilityId": "b6bb2abe54879544", "scanner": "scanner-primary", "fingerprint": "459112a86fc86656", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-866d64a91a16ae09", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/__tests__/lib/hubspot-manufacturer-enum.test.ts:218"}, "properties": {"repobilityId": "8a8eedf91471f649", "scanner": "scanner-primary", "fingerprint": "866d64a91a16ae09", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7fc0677177646b88", "level": "note", "message": {"text": "Legacy-named symbol `wizard_v1` in src/__tests__/lib/solar-analysis/adapters.test.ts:35"}, "properties": {"repobilityId": "0037faf100d165f0", "scanner": "scanner-primary", "fingerprint": "7fc0677177646b88", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b7da5a6a55c4b019", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/PropertyDrawer.tsx:3"}, "properties": {"repobilityId": "c8f76dce904d0f9d", "scanner": "scanner-primary", "fingerprint": "b7da5a6a55c4b019", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b2221b0206d21047", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/PropertyDrawer.tsx:36"}, "properties": {"repobilityId": "3c844f5c9de350fa", "scanner": "scanner-primary", "fingerprint": "b2221b0206d21047", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-be5735d9679d1667", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/AuthSync.tsx:23"}, "properties": {"repobilityId": "374530758dcbb97a", "scanner": "scanner-primary", "fingerprint": "be5735d9679d1667", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-73eb231e4067fae5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/RevenueGoalTracker.tsx:22"}, "properties": {"repobilityId": "40d35d3271eb9bea", "scanner": "scanner-primary", "fingerprint": "73eb231e4067fae5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5b902710ab1ec033", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/PropertyLink.tsx:3"}, "properties": {"repobilityId": "871b093b252aa753", "scanner": "scanner-primary", "fingerprint": "5b902710ab1ec033", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-23ed31e4d5d9dfe8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/on-call/OnCallDashboardClient.tsx:37"}, "properties": {"repobilityId": "1832a8655f17f4a4", "scanner": "scanner-primary", "fingerprint": "23ed31e4d5d9dfe8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ad2e833ea6bcd647", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/on-call/OnCallActivityClient.tsx:91"}, "properties": {"repobilityId": "2849bc89c5f5d6f0", "scanner": "scanner-primary", "fingerprint": "ad2e833ea6bcd647", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1856c10488aaae20", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/on-call/OnCallMeClient.tsx:106"}, "properties": {"repobilityId": "626297daa333f026", "scanner": "scanner-primary", "fingerprint": "1856c10488aaae20", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0a54b1c060ffe482", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/on-call/CallLogModal.tsx:81"}, "properties": {"repobilityId": "e036ec8143a96b8d", "scanner": "scanner-primary", "fingerprint": "0a54b1c060ffe482", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d0c373a9c513d8b8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/on-call/PoolConfigCard.tsx:40"}, "properties": {"repobilityId": "69f40bde353d8e82", "scanner": "scanner-primary", "fingerprint": "d0c373a9c513d8b8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4ad0c1742dc6dcd5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/on-call/LookaheadGrid.tsx:49"}, "properties": {"repobilityId": "03349684ed34d29f", "scanner": "scanner-primary", "fingerprint": "4ad0c1742dc6dcd5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bfe7cfe03770653f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/on-call/OnCallMonthClient.tsx:58"}, "properties": {"repobilityId": "42b91c7eccb67a62", "scanner": "scanner-primary", "fingerprint": "bfe7cfe03770653f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ce0f232d67fb6047", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/on-call/CallLogList.tsx:43"}, "properties": {"repobilityId": "291c8abc9349203d", "scanner": "scanner-primary", "fingerprint": "ce0f232d67fb6047", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5555b7db44f1c04c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/comms/CommsDraftDrawer.tsx:92"}, "properties": {"repobilityId": "ea43253b3dae164e", "scanner": "scanner-primary", "fingerprint": "5555b7db44f1c04c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9ea7db7388937bfe", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/property/PropertyDrawerContext.tsx:3"}, "properties": {"repobilityId": "00cccd695d86c12d", "scanner": "scanner-primary", "fingerprint": "9ea7db7388937bfe", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8767e6dd6b23175d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/property/PropertyEquipmentTab.tsx:45"}, "properties": {"repobilityId": "17f4e00ab72f22ab", "scanner": "scanner-primary", "fingerprint": "8767e6dd6b23175d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-be44fdf4e9dca7db", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/property/PropertyActivityTimeline.tsx:63"}, "properties": {"repobilityId": "e47dc5bee2b36a55", "scanner": "scanner-primary", "fingerprint": "be44fdf4e9dca7db", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-251fe3ebae94461a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/property/PropertyDealsTab.tsx:45"}, "properties": {"repobilityId": "098d0ee89ae530ea", "scanner": "scanner-primary", "fingerprint": "251fe3ebae94461a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-46d2953e48bd1696", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/property/PropertyScheduleTab.tsx:43"}, "properties": {"repobilityId": "5267799511dfc8ac", "scanner": "scanner-primary", "fingerprint": "46d2953e48bd1696", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d4f99fddc7d5c6b3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/property/PropertyTicketsTab.tsx:25"}, "properties": {"repobilityId": "49170846ded82f08", "scanner": "scanner-primary", "fingerprint": "d4f99fddc7d5c6b3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-83341a85541bb55f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/property/PropertyActivityTab.tsx:261"}, "properties": {"repobilityId": "4cc15212f55c52ef", "scanner": "scanner-primary", "fingerprint": "83341a85541bb55f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4f1ff6b96b93f426", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/property/PropertyPermitHistory.tsx:46"}, "properties": {"repobilityId": "0114358d07e2652e", "scanner": "scanner-primary", "fingerprint": "4f1ff6b96b93f426", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b6c88045eb27c6f9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/property/PropertyMonitoringTab.tsx:27"}, "properties": {"repobilityId": "de664a2266561904", "scanner": "scanner-primary", "fingerprint": "b6c88045eb27c6f9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d066974066f39b95", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/property/PropertyResidents.tsx:26"}, "properties": {"repobilityId": "c18536c5f75dedb8", "scanner": "scanner-primary", "fingerprint": "d066974066f39b95", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-46af43e37a7d505a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/property/PropertyJobsTab.tsx:43"}, "properties": {"repobilityId": "b35a0e1ce816cf17", "scanner": "scanner-primary", "fingerprint": "46af43e37a7d505a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-827d48d8f1063ad2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/property/PropertyPhotosTab.tsx:29"}, "properties": {"repobilityId": "bb8e606e3ff2f833", "scanner": "scanner-primary", "fingerprint": "827d48d8f1063ad2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e20b60b22585f057", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/catalog/SyncModal.tsx:339"}, "properties": {"repobilityId": "4b08fbb1e553dfbd", "scanner": "scanner-primary", "fingerprint": "e20b60b22585f057", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bad3d830c7dfaf85", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/catalog/VendorPicker.tsx:51"}, "properties": {"repobilityId": "62350ed8a370b199", "scanner": "scanner-primary", "fingerprint": "bad3d830c7dfaf85", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9f5720eda17a5eb7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/funnel/MonthlyActivityView.tsx:278"}, "properties": {"repobilityId": "1e4d9e70dd7ef149", "scanner": "scanner-primary", "fingerprint": "9f5720eda17a5eb7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f5b9ef2e86d33e3c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/funnel/AnalysisOverview.tsx:56"}, "properties": {"repobilityId": "022dbee8739c167d", "scanner": "scanner-primary", "fingerprint": "f5b9ef2e86d33e3c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bd8d4bff929a202e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/pe-prep/PeActionTasksPanel.tsx:55"}, "properties": {"repobilityId": "2ed4fafc4870f17d", "scanner": "scanner-primary", "fingerprint": "bd8d4bff929a202e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cb3fdd098707bab0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/pe-prep/PeAuditProgress.tsx:75"}, "properties": {"repobilityId": "a9f028e63348a35d", "scanner": "scanner-primary", "fingerprint": "cb3fdd098707bab0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-19bb09301950537d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/calls/OnCallSummary.tsx:77"}, "properties": {"repobilityId": "9da1b2410295f59d", "scanner": "scanner-primary", "fingerprint": "19bb09301950537d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-aa734e1ef5d9b31c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/calls/HistoricalSnapshot.tsx:36"}, "properties": {"repobilityId": "cd9c1f5ab5515263", "scanner": "scanner-primary", "fingerprint": "aa734e1ef5d9b31c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-167908c6f022e15b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/deal-detail/ActivityFeed.tsx:32"}, "properties": {"repobilityId": "7437d3a992791055", "scanner": "scanner-primary", "fingerprint": "167908c6f022e15b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2128fd8e83011039", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/deal-detail/CommunicationsFeed.tsx:34"}, "properties": {"repobilityId": "9eef61bedb966710", "scanner": "scanner-primary", "fingerprint": "2128fd8e83011039", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-09f866ee6f983dd7", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/solar-designer/FileUploadPanel.tsx:121"}, "properties": {"repobilityId": "ff5ead3e67a95212", "scanner": "scanner-primary", "fingerprint": "09f866ee6f983dd7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-78fdb27428f0726e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/sop/SopEditor.tsx:402"}, "properties": {"repobilityId": "d999bbff7a383b4f", "scanner": "scanner-primary", "fingerprint": "78fdb27428f0726e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-be157d78756fb053", "level": "note", "message": {"text": "Legacy-named symbol `wizard_v1` in src/components/solar/SetupWizard.tsx:273"}, "properties": {"repobilityId": "83a6556902cf888e", "scanner": "scanner-primary", "fingerprint": "be157d78756fb053", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-cd788205b5ea0345", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/solar/SetupWizard.tsx:115"}, "properties": {"repobilityId": "6c1ba24862993605", "scanner": "scanner-primary", "fingerprint": "cd788205b5ea0345", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-51b9be43385e30ea", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/powerhub/SiteDetail.tsx:14"}, "properties": {"repobilityId": "63b7712731acd3f3", "scanner": "scanner-primary", "fingerprint": "51b9be43385e30ea", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0c92fcbd54bc6da0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/powerhub/SystemHealth.tsx:17"}, "properties": {"repobilityId": "1913c893d789b9a0", "scanner": "scanner-primary", "fingerprint": "0c92fcbd54bc6da0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c9324991b06b5df3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/pe/DocReworkTab.tsx:234"}, "properties": {"repobilityId": "9a2a4dcc8ccffa1a", "scanner": "scanner-primary", "fingerprint": "c9324991b06b5df3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-60f3f22b965c95f2", "level": "none", "message": {"text": "Commented-code block (12 lines) in src/components/pe/DealsTab.tsx:1059"}, "properties": {"repobilityId": "1f46dac7af8fb11f", "scanner": "scanner-primary", "fingerprint": "60f3f22b965c95f2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-30e5ed3d928cd7c6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/pe/DealsTab.tsx:642"}, "properties": {"repobilityId": "382a0043e73b93c5", "scanner": "scanner-primary", "fingerprint": "30e5ed3d928cd7c6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5c85b2669566cd9a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/pe/DocsTab.tsx:587"}, "properties": {"repobilityId": "02eba2e8d085270d", "scanner": "scanner-primary", "fingerprint": "5c85b2669566cd9a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ac9c74ce00af913c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/pe/DocsTab.tsx:972"}, "properties": {"repobilityId": "0bd4b24cfc639733", "scanner": "scanner-primary", "fingerprint": "ac9c74ce00af913c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1737f9cc494d3879", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/pe/AnalyticsTab.tsx:1819"}, "properties": {"repobilityId": "ee6d62eb9ef4ed02", "scanner": "scanner-primary", "fingerprint": "1737f9cc494d3879", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e2c2578d1787715b", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/pe/ShortPayModal.tsx:5"}, "properties": {"repobilityId": "acfd65c238a341cd", "scanner": "scanner-primary", "fingerprint": "e2c2578d1787715b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-247910407b419934", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/page.tsx:227"}, "properties": {"repobilityId": "d81e6de19874bc95", "scanner": "scanner-primary", "fingerprint": "247910407b419934", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3725680c10dafdf1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/triage/TriageStepper.tsx:68"}, "properties": {"repobilityId": "e57cb511b4b69ea1", "scanner": "scanner-primary", "fingerprint": "3725680c10dafdf1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4e86b5cd318a34d1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/triage/TriagePhotoCapture.tsx:109"}, "properties": {"repobilityId": "4f98a7510a895736", "scanner": "scanner-primary", "fingerprint": "4e86b5cd318a34d1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2848667637dba8df", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/triage/TriageReview.tsx:50"}, "properties": {"repobilityId": "31452a656ad61fbd", "scanner": "scanner-primary", "fingerprint": "2848667637dba8df", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9de1874cab23bca6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/comms/connect/callback/route.ts:60"}, "properties": {"repobilityId": "75b61067a58633de", "scanner": "scanner-primary", "fingerprint": "9de1874cab23bca6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-961dccb5e7a0e32c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/install-review/route.ts:590"}, "properties": {"repobilityId": "bf3809957b334764", "scanner": "scanner-primary", "fingerprint": "961dccb5e7a0e32c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bf60e5163b6470c0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/estimator/static-map/route.ts:36"}, "properties": {"repobilityId": "21e5b0424671889f", "scanner": "scanner-primary", "fingerprint": "bf60e5163b6470c0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0db44a56af9cd018", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/zuper/availability/route.ts:218"}, "properties": {"repobilityId": "e1a54d953cdf198d", "scanner": "scanner-primary", "fingerprint": "0db44a56af9cd018", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7b334326da377490", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/zuper/jobs/schedule/route.ts:969"}, "properties": {"repobilityId": "1cdd713f8d4bc874", "scanner": "scanner-primary", "fingerprint": "7b334326da377490", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0592e0b58923a893", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/zuper/jobs/schedule/confirm/route.ts:793"}, "properties": {"repobilityId": "a37fa6692b1d7369", "scanner": "scanner-primary", "fingerprint": "0592e0b58923a893", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ec693b6aeda3a614", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/accounting/pe-analytics/route.ts:677"}, "properties": {"repobilityId": "3f2678f2cce75e71", "scanner": "scanner-primary", "fingerprint": "ec693b6aeda3a614", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8791bb34e9fedb0b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/accounting/payment-tracking/route.ts:28"}, "properties": {"repobilityId": "6c0c51c2142b3f86", "scanner": "scanner-primary", "fingerprint": "8791bb34e9fedb0b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9bad58ae23ab04eb", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/accounting/pe-deals/route.ts:90"}, "properties": {"repobilityId": "4f999ce602dc490e", "scanner": "scanner-primary", "fingerprint": "9bad58ae23ab04eb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dae6ae55f032299c", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/api/catalog/upload-photo/route.ts:49"}, "properties": {"repobilityId": "32c661e4e9c957b3", "scanner": "scanner-primary", "fingerprint": "dae6ae55f032299c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-422bdf1be44986e2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/energy-community/check/route.ts:30"}, "properties": {"repobilityId": "431b0f5d256c1334", "scanner": "scanner-primary", "fingerprint": "422bdf1be44986e2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c540456603276c92", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/app/api/admin/users/route.ts:146"}, "properties": {"repobilityId": "2a2c2c9c736e8a80", "scanner": "scanner-primary", "fingerprint": "c540456603276c92", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6d8427786ceba8f3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/shared-inbox/callback/route.ts:75"}, "properties": {"repobilityId": "638fee1366e48253", "scanner": "scanner-primary", "fingerprint": "6d8427786ceba8f3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d70e13cc5bad9b3d", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/admin/crew/route.ts:34"}, "properties": {"repobilityId": "d7d7d6cafe19c9ae", "scanner": "scanner-primary", "fingerprint": "d70e13cc5bad9b3d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8e3f7eb24adefc34", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/workflows/hubspot-property-options/route.ts:42"}, "properties": {"repobilityId": "538af40ee29b71ff", "scanner": "scanner-primary", "fingerprint": "8e3f7eb24adefc34", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-dc2dff27328153df", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/admin/sync-workspace/route.ts:166"}, "properties": {"repobilityId": "093c5c772e409cad", "scanner": "scanner-primary", "fingerprint": "dc2dff27328153df", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-21bb81de4d360a54", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/sync-workspace/route.ts:94"}, "properties": {"repobilityId": "07b27c70f2e23de2", "scanner": "scanner-primary", "fingerprint": "21bb81de4d360a54", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-aae831acdafe2a3c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/bom/chunk/route.ts:156"}, "properties": {"repobilityId": "11da76397da0fbd0", "scanner": "scanner-primary", "fingerprint": "aae831acdafe2a3c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-364af46a0f0ec555", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/bom/extract/route.ts:241"}, "properties": {"repobilityId": "9f7533ff9934a866", "scanner": "scanner-primary", "fingerprint": "364af46a0f0ec555", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8b00ede1216e0c84", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/pe-prep/[dealId]/audit/route.ts:35"}, "properties": {"repobilityId": "e56a0624a9f101cd", "scanner": "scanner-primary", "fingerprint": "8b00ede1216e0c84", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2d7a39a93f4454f0", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/deployment/route.ts:102"}, "properties": {"repobilityId": "c27595b7789f743f", "scanner": "scanner-primary", "fingerprint": "2d7a39a93f4454f0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a6657902f4e0554e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/cron/daily-focus/route.ts:32"}, "properties": {"repobilityId": "36c42b3e5c1db399", "scanner": "scanner-primary", "fingerprint": "a6657902f4e0554e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0e4bb4b3215d7433", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/cron/pe-invoice-audit/route.ts:37"}, "properties": {"repobilityId": "590dfbecc7bcf682", "scanner": "scanner-primary", "fingerprint": "0e4bb4b3215d7433", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cce8955680a04d6e", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/cron/pe-doc-digest/route.ts:50"}, "properties": {"repobilityId": "3c9ac8bede15e88c", "scanner": "scanner-primary", "fingerprint": "cce8955680a04d6e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f901f7b9595655e6", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/cron/zuper-status-reconcile/route.ts:31"}, "properties": {"repobilityId": "0e477ca60def70ed", "scanner": "scanner-primary", "fingerprint": "f901f7b9595655e6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0beaefd005ed43be", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/products/comparison/create/route.ts:267"}, "properties": {"repobilityId": "f48bc7401fe35a14", "scanner": "scanner-primary", "fingerprint": "0beaefd005ed43be", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9ad3582e06656ec9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/debug/notifications/route.ts:155"}, "properties": {"repobilityId": "3410f47979e5e2cb", "scanner": "scanner-primary", "fingerprint": "9ad3582e06656ec9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-07af09cb784e2018", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/webhooks/zuper/admin-workflows/route.ts:111"}, "properties": {"repobilityId": "60046eb6f3024b01", "scanner": "scanner-primary", "fingerprint": "07af09cb784e2018", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b48fcabff38e9610", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/webhooks/hubspot/install-review/route.ts:49"}, "properties": {"repobilityId": "2b5a431a70e1333f", "scanner": "scanner-primary", "fingerprint": "b48fcabff38e9610", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c5eae729fca74cf6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/webhooks/hubspot/fdr-check/route.ts:53"}, "properties": {"repobilityId": "bf920b5774493287", "scanner": "scanner-primary", "fingerprint": "c5eae729fca74cf6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4506f3e062d255ff", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/webhooks/hubspot/design-review/route.ts:51"}, "properties": {"repobilityId": "79e0468252b0a611", "scanner": "scanner-primary", "fingerprint": "4506f3e062d255ff", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d323ae5a017677ce", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/webhooks/hubspot/design-complete/route.ts:216"}, "properties": {"repobilityId": "2e037366f261a3b6", "scanner": "scanner-primary", "fingerprint": "d323ae5a017677ce", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-615578a56a3a1c49", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/idr-meeting/items/[id]/route.ts:8"}, "properties": {"repobilityId": "53d646e59a969868", "scanner": "scanner-primary", "fingerprint": "615578a56a3a1c49", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-27a3ec3c148fb15e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/powerhub/import-locations/route.ts:70"}, "properties": {"repobilityId": "a07142ccc23be50b", "scanner": "scanner-primary", "fingerprint": "27a3ec3c148fb15e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0beafa0c1ddadc85", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/deals/stream/route.ts:413"}, "properties": {"repobilityId": "5a39e94746ca5a5d", "scanner": "scanner-primary", "fingerprint": "0beafa0c1ddadc85", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-82ac768c1044c44b", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/api/deals/project-funnel/route.ts:46"}, "properties": {"repobilityId": "c25207f2da1b5e96", "scanner": "scanner-primary", "fingerprint": "82ac768c1044c44b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4ebe3f098e6765fb", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/deals/project-funnel/route.ts:46"}, "properties": {"repobilityId": "b6519a7a89820c33", "scanner": "scanner-primary", "fingerprint": "4ebe3f098e6765fb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c7a98f09ce4458d3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/service-unscheduled/page.tsx:75"}, "properties": {"repobilityId": "f0a447acb8c019ba", "scanner": "scanner-primary", "fingerprint": "c7a98f09ce4458d3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b1f584b2d9e21158", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/de-metrics/page.tsx:348"}, "properties": {"repobilityId": "6621b1da21285dad", "scanner": "scanner-primary", "fingerprint": "b1f584b2d9e21158", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6f91cf2a5ae631af", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/pm-action-queue/PmActionQueueClient.tsx:152"}, "properties": {"repobilityId": "4c674c305486ebee", "scanner": "scanner-primary", "fingerprint": "6f91cf2a5ae631af", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-82fd4358bfb4afe8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/inspection-scheduler/page.tsx:334"}, "properties": {"repobilityId": "ea6544321ac7276a", "scanner": "scanner-primary", "fingerprint": "82fd4358bfb4afe8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-64b6376ab1ea5959", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/inventory/page.tsx:1279"}, "properties": {"repobilityId": "01c9a3e1c464ac93", "scanner": "scanner-primary", "fingerprint": "64b6376ab1ea5959", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-170399428fe08967", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/roofing-scheduler/page.tsx:130"}, "properties": {"repobilityId": "a8fc7c135481201e", "scanner": "scanner-primary", "fingerprint": "170399428fe08967", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f1d6e5067b698973", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/territory-map/page.tsx:183"}, "properties": {"repobilityId": "063710acd1366bff", "scanner": "scanner-primary", "fingerprint": "f1d6e5067b698973", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f92289a57f7b2728", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/inspection-metrics/page.tsx:198"}, "properties": {"repobilityId": "1a931368efd7fbd7", "scanner": "scanner-primary", "fingerprint": "f92289a57f7b2728", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-be151fe66c673f8b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/comms/page.tsx:74"}, "properties": {"repobilityId": "436e5c37ccc030fe", "scanner": "scanner-primary", "fingerprint": "be151fe66c673f8b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6e0f10ea60173a65", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/adders/AdderEditForm.tsx:198"}, "properties": {"repobilityId": "8d17c2f0e745a672", "scanner": "scanner-primary", "fingerprint": "6e0f10ea60173a65", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c94df1edafaff297", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/adders/AddersClient.tsx:21"}, "properties": {"repobilityId": "511a645c2cfe8344", "scanner": "scanner-primary", "fingerprint": "c94df1edafaff297", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-318b6d7355f00c63", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/adders/AdderRevisionsDrawer.tsx:15"}, "properties": {"repobilityId": "11c84dee966439be", "scanner": "scanner-primary", "fingerprint": "318b6d7355f00c63", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4603946cc3554317", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/adders/SyncStatusBadge.tsx:24"}, "properties": {"repobilityId": "55bd570fd38cf0db", "scanner": "scanner-primary", "fingerprint": "4603946cc3554317", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-07536588bf3286f4", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/dashboards/site-survey-scheduler/page.tsx:236"}, "properties": {"repobilityId": "6f212405558a8ef8", "scanner": "scanner-primary", "fingerprint": "07536588bf3286f4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6e275e9665695e27", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/site-survey-scheduler/page.tsx:539"}, "properties": {"repobilityId": "ff7a404e52e5be77", "scanner": "scanner-primary", "fingerprint": "6e275e9665695e27", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-99b24e799d48d8f3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/zuper-compliance/page.tsx:717"}, "properties": {"repobilityId": "ede2fa858f2c0fc2", "scanner": "scanner-primary", "fingerprint": "99b24e799d48d8f3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-21dbf1f290f5f8db", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/payment-action-queue/PaymentActionQueueClient.tsx:65"}, "properties": {"repobilityId": "f4f994e124782ab6", "scanner": "scanner-primary", "fingerprint": "21dbf1f290f5f8db", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-343106109c17c354", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/permit-hub/SessionHeader.tsx:10"}, "properties": {"repobilityId": "3af850d73077f551", "scanner": "scanner-primary", "fingerprint": "343106109c17c354", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0b034897442c1568", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/permit-hub/ProjectDetail.tsx:64"}, "properties": {"repobilityId": "9ef7645e90eb1710", "scanner": "scanner-primary", "fingerprint": "0b034897442c1568", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bfad6cc2eeb688c6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/permit-hub/PermitHubClient.tsx:18"}, "properties": {"repobilityId": "19b0b48e787564cb", "scanner": "scanner-primary", "fingerprint": "bfad6cc2eeb688c6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f9c8f624ad08c171", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/permit-hub/actions/FollowUpForm.tsx:25"}, "properties": {"repobilityId": "97379e1ae3d9482b", "scanner": "scanner-primary", "fingerprint": "f9c8f624ad08c171", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-429a154e94423e84", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/permit-hub/actions/ReviewRejectionForm.tsx:27"}, "properties": {"repobilityId": "7cbbfc81f4d236e8", "scanner": "scanner-primary", "fingerprint": "429a154e94423e84", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a7e11017043133cb", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/permit-hub/actions/CompleteAsBuiltForm.tsx:19"}, "properties": {"repobilityId": "680cb2e6e81e5ab7", "scanner": "scanner-primary", "fingerprint": "a7e11017043133cb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7fb74bcf4ac8ea97", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/permit-hub/actions/FormShell.tsx:42"}, "properties": {"repobilityId": "8c521f8b9dbf96f8", "scanner": "scanner-primary", "fingerprint": "7fb74bcf4ac8ea97", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-264f2fb1d9a4ef50", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/permit-hub/actions/SubmitSolarAppForm.tsx:25"}, "properties": {"repobilityId": "742afdfac214bfbd", "scanner": "scanner-primary", "fingerprint": "264f2fb1d9a4ef50", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2a3232c936907ccf", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/permit-hub/actions/SubmitToAhjForm.tsx:27"}, "properties": {"repobilityId": "8d4b5955f099e22a", "scanner": "scanner-primary", "fingerprint": "2a3232c936907ccf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ab0971c510c607d1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/permit-hub/actions/StartAsBuiltRevisionForm.tsx:20"}, "properties": {"repobilityId": "36c5a104cabc9551", "scanner": "scanner-primary", "fingerprint": "ab0971c510c607d1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1fedfc93d4864cf2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/permit-hub/actions/CompleteRevisionForm.tsx:19"}, "properties": {"repobilityId": "f04e1c009248355e", "scanner": "scanner-primary", "fingerprint": "1fedfc93d4864cf2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-08d479ad35f32a09", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/permit-hub/actions/MarkPermitIssuedForm.tsx:26"}, "properties": {"repobilityId": "e6dbba70d9714a5c", "scanner": "scanner-primary", "fingerprint": "08d479ad35f32a09", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7debef379c73de81", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/permit-hub/actions/ResubmitToAhjForm.tsx:27"}, "properties": {"repobilityId": "50c4e1d8d9ff786d", "scanner": "scanner-primary", "fingerprint": "7debef379c73de81", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6100291f6d2050a8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/pe-report/page.tsx:608"}, "properties": {"repobilityId": "32cea7ad748f0751", "scanner": "scanner-primary", "fingerprint": "6100291f6d2050a8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6d83d435a2944216", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/service-scheduler/page.tsx:305"}, "properties": {"repobilityId": "abca12ed8b00d9d4", "scanner": "scanner-primary", "fingerprint": "6d83d435a2944216", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b8aa40198b6834ed", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/product-catalog/page.tsx:100"}, "properties": {"repobilityId": "159dbf7ab497377e", "scanner": "scanner-primary", "fingerprint": "b8aa40198b6834ed", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d5fc2029174436f3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/forecast-accuracy/page.tsx:154"}, "properties": {"repobilityId": "0f761796adf2fceb", "scanner": "scanner-primary", "fingerprint": "d5fc2029174436f3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3c78598411636383", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/ready-to-invoice/ReadyToInvoiceClient.tsx:39"}, "properties": {"repobilityId": "fd7b08e9cea30abd", "scanner": "scanner-primary", "fingerprint": "3c78598411636383", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-80d81b1b0e274ba2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/my-tickets/page.tsx:79"}, "properties": {"repobilityId": "4e3ac911f3860d03", "scanner": "scanner-primary", "fingerprint": "80d81b1b0e274ba2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-206a7361e117b2b0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/catalog/page.tsx:344"}, "properties": {"repobilityId": "948c2c970eb8b7fd", "scanner": "scanner-primary", "fingerprint": "206a7361e117b2b0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-98c6305b5b487437", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/catalog/review/page.tsx:95"}, "properties": {"repobilityId": "9a44f3f3399f70d2", "scanner": "scanner-primary", "fingerprint": "98c6305b5b487437", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-369e24a8acb71090", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/availability-approvals/page.tsx:75"}, "properties": {"repobilityId": "cb8f9c4f7bef7f70", "scanner": "scanner-primary", "fingerprint": "369e24a8acb71090", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-db2718397b46092d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/revenue-goals/page.tsx:27"}, "properties": {"repobilityId": "902dae728b28bd71", "scanner": "scanner-primary", "fingerprint": "db2718397b46092d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-374456ba86f6c882", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/my-tasks/page.tsx:36"}, "properties": {"repobilityId": "97f277f8d41fd487", "scanner": "scanner-primary", "fingerprint": "374456ba86f6c882", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e4555968bf7f9cc0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/design-pipeline-funnel/page.tsx:47"}, "properties": {"repobilityId": "65f143bf5437981d", "scanner": "scanner-primary", "fingerprint": "e4555968bf7f9cc0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4f851e23bbcbe614", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/construction-scheduler/page.tsx:423"}, "properties": {"repobilityId": "3bda30a8727b2ef6", "scanner": "scanner-primary", "fingerprint": "4f851e23bbcbe614", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-68e7ec372b889cb3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/inspections/page.tsx:147"}, "properties": {"repobilityId": "84ea23895a302f45", "scanner": "scanner-primary", "fingerprint": "68e7ec372b889cb3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c78a37fa2d81eabe", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/office-performance/[location]/useCalendarData.ts:42"}, "properties": {"repobilityId": "32a3ed7ed9df94b3", "scanner": "scanner-primary", "fingerprint": "c78a37fa2d81eabe", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-124227d36a8afd57", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/office-performance/[location]/page.tsx:80"}, "properties": {"repobilityId": "0d9312875f552ca3", "scanner": "scanner-primary", "fingerprint": "124227d36a8afd57", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-74d6d108e0c3aa58", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/office-performance/[location]/OfficeCarousel.tsx:60"}, "properties": {"repobilityId": "1bee151d83eaa5f1", "scanner": "scanner-primary", "fingerprint": "74d6d108e0c3aa58", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6bf133a4b81db176", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/office-performance/[location]/AllLocationsCalendarSection.tsx:69"}, "properties": {"repobilityId": "8d4aafcf12f178bd", "scanner": "scanner-primary", "fingerprint": "6bf133a4b81db176", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fee110da33b9cfbc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/product-requests-review/ReviewClient.tsx:37"}, "properties": {"repobilityId": "f2713ea20acfc6a5", "scanner": "scanner-primary", "fingerprint": "fee110da33b9cfbc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d17aab56680a514a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/admin/calls/CallsClient.tsx:121"}, "properties": {"repobilityId": "3a25fe5b77457b98", "scanner": "scanner-primary", "fingerprint": "d17aab56680a514a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3cacb17b50aa35f9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/admin/workflows/page.tsx:154"}, "properties": {"repobilityId": "35f897bdbbac3974", "scanner": "scanner-primary", "fingerprint": "3cacb17b50aa35f9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-460bc65017f6f37e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/admin/workflows/[id]/page.tsx:257"}, "properties": {"repobilityId": "9b40c953ae489b70", "scanner": "scanner-primary", "fingerprint": "460bc65017f6f37e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-072b1306d138ee86", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/admin/workflows/runs/[runId]/page.tsx:131"}, "properties": {"repobilityId": "66f4f9167cf9fa01", "scanner": "scanner-primary", "fingerprint": "072b1306d138ee86", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9e789e6da2c03e3a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/admin/powerhub/page.tsx:42"}, "properties": {"repobilityId": "34e344c019eae88e", "scanner": "scanner-primary", "fingerprint": "9e789e6da2c03e3a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8940932a63f5ed4d", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/dashboards/bom/page.tsx:503"}, "properties": {"repobilityId": "96254729e5b5a496", "scanner": "scanner-primary", "fingerprint": "8940932a63f5ed4d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e9822ef25ff27f7d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/bom/page.tsx:959"}, "properties": {"repobilityId": "abc6df1cf4a96ad1", "scanner": "scanner-primary", "fingerprint": "e9822ef25ff27f7d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f3098c1dba5c2ddb", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/dashboards/pe-prep/page.tsx:56"}, "properties": {"repobilityId": "8c1a27b807669c2d", "scanner": "scanner-primary", "fingerprint": "f3098c1dba5c2ddb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2b434a7568142610", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/pe-prep/page.tsx:124"}, "properties": {"repobilityId": "35f10722186af176", "scanner": "scanner-primary", "fingerprint": "2b434a7568142610", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c5e219d95adf88d6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/pe-prep/[dealId]/page.tsx:90"}, "properties": {"repobilityId": "804f406462c4955f", "scanner": "scanner-primary", "fingerprint": "c5e219d95adf88d6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f46b3b34a86e4a6b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/survey-metrics/page.tsx:170"}, "properties": {"repobilityId": "1d8425a027e0d1ad", "scanner": "scanner-primary", "fingerprint": "f46b3b34a86e4a6b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-46c12ed8c8187c30", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/payment-data-mismatch/PaymentDataMismatchClient.tsx:59"}, "properties": {"repobilityId": "2e792937d0376315", "scanner": "scanner-primary", "fingerprint": "46c12ed8c8187c30", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7e7bf80bb7c28259", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/request-product/MyRequestsTable.tsx:30"}, "properties": {"repobilityId": "811a9d0a63b834df", "scanner": "scanner-primary", "fingerprint": "7e7bf80bb7c28259", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e75916e51cdf3238", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/pipeline-tracker/page.tsx:165"}, "properties": {"repobilityId": "d9b88fa2cd8e4fd3", "scanner": "scanner-primary", "fingerprint": "e75916e51cdf3238", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-335b35ad5e087719", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/zuper-status-comparison/page.tsx:251"}, "properties": {"repobilityId": "48f56453ecdd3d6a", "scanner": "scanner-primary", "fingerprint": "335b35ad5e087719", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e820291ef29c87fe", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/accounts-receivable/AccountsReceivableClient.tsx:54"}, "properties": {"repobilityId": "f8a2db374b9e4474", "scanner": "scanner-primary", "fingerprint": "e820291ef29c87fe", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e41331cf0dbd232f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/service/page.tsx:218"}, "properties": {"repobilityId": "c58b875d4bc5a4b9", "scanner": "scanner-primary", "fingerprint": "e41331cf0dbd232f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c3b5a987f07ab0f7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/executive-calendar/page.tsx:258"}, "properties": {"repobilityId": "2c6f4f371f0a985b", "scanner": "scanner-primary", "fingerprint": "c3b5a987f07ab0f7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-45c6405067e68e7c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/eagleview-test/page.tsx:51"}, "properties": {"repobilityId": "1908eca114bc60f4", "scanner": "scanner-primary", "fingerprint": "45c6405067e68e7c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c180c5a7150c8d91", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/ic-hub/SessionHeader.tsx:10"}, "properties": {"repobilityId": "ad03f95e07f489c7", "scanner": "scanner-primary", "fingerprint": "c180c5a7150c8d91", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-08ffd0359df099c8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/ic-hub/IcHubClient.tsx:18"}, "properties": {"repobilityId": "d31ff755d7bfa827", "scanner": "scanner-primary", "fingerprint": "08ffd0359df099c8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-017a38b7923b5b43", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/ic-hub/ProjectDetail.tsx:70"}, "properties": {"repobilityId": "9bf486eb73041d07", "scanner": "scanner-primary", "fingerprint": "017a38b7923b5b43", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-898d0cc40230e6a1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/ic-hub/actions/MarkIcApprovedForm.tsx:21"}, "properties": {"repobilityId": "99ac4c3b18aa82b3", "scanner": "scanner-primary", "fingerprint": "898d0cc40230e6a1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e8755b095db12404", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/ic-hub/actions/FollowUpForm.tsx:25"}, "properties": {"repobilityId": "1f3f85347f292645", "scanner": "scanner-primary", "fingerprint": "e8755b095db12404", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4cd1c203e9ef7a37", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/ic-hub/actions/SubmitToUtilityForm.tsx:19"}, "properties": {"repobilityId": "81fde19779b29453", "scanner": "scanner-primary", "fingerprint": "4cd1c203e9ef7a37", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-46410105aeebc622", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/ic-hub/actions/ReviewRejectionForm.tsx:27"}, "properties": {"repobilityId": "8be50882a062fef6", "scanner": "scanner-primary", "fingerprint": "46410105aeebc622", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4fd259add2d2621b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/ic-hub/actions/FormShell.tsx:41"}, "properties": {"repobilityId": "c79fc0a06ca001dc", "scanner": "scanner-primary", "fingerprint": "4fd259add2d2621b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-55242294dbba950b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/ic-hub/actions/ResubmitToUtilityForm.tsx:26"}, "properties": {"repobilityId": "e6a946abf404115f", "scanner": "scanner-primary", "fingerprint": "55242294dbba950b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0932706674966f4d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/ic-hub/actions/ProvideInformationForm.tsx:25"}, "properties": {"repobilityId": "cfda0f4e146599a2", "scanner": "scanner-primary", "fingerprint": "0932706674966f4d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f088fbe8e3759b46", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/ic-hub/actions/CompleteRevisionForm.tsx:19"}, "properties": {"repobilityId": "d070338e99b3eda3", "scanner": "scanner-primary", "fingerprint": "f088fbe8e3759b46", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2ca585485849eadd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/pe-pipeline/page.tsx:160"}, "properties": {"repobilityId": "b3bf3235f239221c", "scanner": "scanner-primary", "fingerprint": "2ca585485849eadd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4db223cbaefc01cd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/pm-accountability/PMDashboard.tsx:16"}, "properties": {"repobilityId": "4870bf48ece24a37", "scanner": "scanner-primary", "fingerprint": "4db223cbaefc01cd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-339a4622827ae87c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/pm-accountability/PmScorecardTab.tsx:30"}, "properties": {"repobilityId": "35bc87b05c845593", "scanner": "scanner-primary", "fingerprint": "339a4622827ae87c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cc7cc3da829c1843", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/payment-timeline/PaymentTimelineClient.tsx:326"}, "properties": {"repobilityId": "740332581867289b", "scanner": "scanner-primary", "fingerprint": "cc7cc3da829c1843", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fb28cd11280e5558", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/construction-metrics/page.tsx:103"}, "properties": {"repobilityId": "76e88904742bb00d", "scanner": "scanner-primary", "fingerprint": "fb28cd11280e5558", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3ca7412f6cce334d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/forecast-schedule/page.tsx:72"}, "properties": {"repobilityId": "fcabe30b00b54812", "scanner": "scanner-primary", "fingerprint": "3ca7412f6cce334d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a41f2bb17bc6689c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/pe-action-queue/page.tsx:59"}, "properties": {"repobilityId": "1f9224d22b283eec", "scanner": "scanner-primary", "fingerprint": "a41f2bb17bc6689c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-475df4554542ecc3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/pe-submission-gap/page.tsx:220"}, "properties": {"repobilityId": "650c8f6aeb739259", "scanner": "scanner-primary", "fingerprint": "475df4554542ecc3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d62c266b5010f550", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/optimizer/page.tsx:409"}, "properties": {"repobilityId": "608af051c23d1757", "scanner": "scanner-primary", "fingerprint": "d62c266b5010f550", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-53bfa14c9f343908", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/shit-show-meeting/AddProjectDialog.tsx:36"}, "properties": {"repobilityId": "de75b7fa50f17058", "scanner": "scanner-primary", "fingerprint": "53bfa14c9f343908", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cc96e1aa1a5b68c9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/shit-show-meeting/ShitShowMeetingClient.tsx:27"}, "properties": {"repobilityId": "34a6d3a46282ab92", "scanner": "scanner-primary", "fingerprint": "cc96e1aa1a5b68c9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-236c14ba15bfd12b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/shit-show-meeting/AssignmentsPanel.tsx:57"}, "properties": {"repobilityId": "f8a57590d4936ec2", "scanner": "scanner-primary", "fingerprint": "236c14ba15bfd12b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2aad65fbfa4f90b9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/shit-show-meeting/ProjectDetail.tsx:39"}, "properties": {"repobilityId": "5170af8e44190fa6", "scanner": "scanner-primary", "fingerprint": "2aad65fbfa4f90b9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3009136fcf47f914", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/shit-show-meeting/HistoryStrip.tsx:27"}, "properties": {"repobilityId": "cf5a4d090d011d17", "scanner": "scanner-primary", "fingerprint": "3009136fcf47f914", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d50b60e38aaf828e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/service-catalog/page.tsx:73"}, "properties": {"repobilityId": "abfdcdc4e537fd8e", "scanner": "scanner-primary", "fingerprint": "d50b60e38aaf828e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-54172f6fc7cd1099", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/crew-schedule/page.tsx:706"}, "properties": {"repobilityId": "81f156509923ddf5", "scanner": "scanner-primary", "fingerprint": "54172f6fc7cd1099", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e2256a8e4b6a9bf1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/forecast-timeline/page.tsx:179"}, "properties": {"repobilityId": "636e20983f3cd56b", "scanner": "scanner-primary", "fingerprint": "e2256a8e4b6a9bf1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a0d77ef4bdc3d414", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/dashboards/project-pipeline-funnel/page.tsx:750"}, "properties": {"repobilityId": "44defff6007b44ad", "scanner": "scanner-primary", "fingerprint": "a0d77ef4bdc3d414", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-af99973673088684", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/project-pipeline-funnel/page.tsx:170"}, "properties": {"repobilityId": "8fa4907547b53f47", "scanner": "scanner-primary", "fingerprint": "af99973673088684", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-40af8fccee18da6b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/equipment-backlog/page.tsx:348"}, "properties": {"repobilityId": "b78957e606cfefe8", "scanner": "scanner-primary", "fingerprint": "40af8fccee18da6b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-23c5d9d9323f0816", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/payment-tracking/PaymentTrackingClient.tsx:50"}, "properties": {"repobilityId": "dc46d700b55ebca0", "scanner": "scanner-primary", "fingerprint": "23c5d9d9323f0816", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-43aada9c5b4e7bfd", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/dashboards/payment-tracking/MilestoneStrip.tsx:13"}, "properties": {"repobilityId": "5471b1fc4468859d", "scanner": "scanner-primary", "fingerprint": "43aada9c5b4e7bfd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b3791e8cfb1f0212", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/pe-avl/page.tsx:79"}, "properties": {"repobilityId": "fdbaa8a4ea411034", "scanner": "scanner-primary", "fingerprint": "b3791e8cfb1f0212", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a71f790359b80e70", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/product-comparison/page.tsx:1252"}, "properties": {"repobilityId": "d0a72d214a920667", "scanner": "scanner-primary", "fingerprint": "a71f790359b80e70", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5cb3700285989fde", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/design-engineering-funnel/page.tsx:348"}, "properties": {"repobilityId": "e844dd72cdc4257c", "scanner": "scanner-primary", "fingerprint": "5cb3700285989fde", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d90661df99c3bf1a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/qc/page.tsx:90"}, "properties": {"repobilityId": "fb8099148535dd18", "scanner": "scanner-primary", "fingerprint": "d90661df99c3bf1a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d3e06f22d0eff9c7", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/dashboards/scheduler/page.tsx:292"}, "properties": {"repobilityId": "3c7788816babd397", "scanner": "scanner-primary", "fingerprint": "d3e06f22d0eff9c7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-64aa6c6ae0ddc7c0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/scheduler/page.tsx:1098"}, "properties": {"repobilityId": "e6801169ac802bbb", "scanner": "scanner-primary", "fingerprint": "64aa6c6ae0ddc7c0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4d743aa11f2232af", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/idr-meeting/AddProjectDialog.tsx:45"}, "properties": {"repobilityId": "e1c0632083b17acb", "scanner": "scanner-primary", "fingerprint": "4d743aa11f2232af", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1a2897e9c73b3013", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/idr-meeting/SessionHeader.tsx:60"}, "properties": {"repobilityId": "d8360b725a42ae3f", "scanner": "scanner-primary", "fingerprint": "1a2897e9c73b3013", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-231249d75cec20a8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/idr-meeting/DealHistoryDetail.tsx:84"}, "properties": {"repobilityId": "24907ae2cd7b6332", "scanner": "scanner-primary", "fingerprint": "231249d75cec20a8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0ecf94bc4b05a716", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/idr-meeting/IdrMeetingClient.tsx:241"}, "properties": {"repobilityId": "079388314512387c", "scanner": "scanner-primary", "fingerprint": "0ecf94bc4b05a716", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0ea117cc93d48616", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/idr-meeting/EscalationQueue.tsx:34"}, "properties": {"repobilityId": "853e8a204ad493e7", "scanner": "scanner-primary", "fingerprint": "0ea117cc93d48616", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-832fa40828311726", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/idr-meeting/AhjUtilityInfo.tsx:50"}, "properties": {"repobilityId": "299fbd15e5d269bc", "scanner": "scanner-primary", "fingerprint": "832fa40828311726", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9454e36074cba18c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/idr-meeting/NoteHistory.tsx:37"}, "properties": {"repobilityId": "bbf3cbcabb7345b3", "scanner": "scanner-primary", "fingerprint": "9454e36074cba18c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e322ec85c9789ad7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/idr-meeting/BomExtractionEditor.tsx:66"}, "properties": {"repobilityId": "89442e0dde817298", "scanner": "scanner-primary", "fingerprint": "e322ec85c9789ad7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7ad143698e52aadd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/idr-meeting/ProjectDetail.tsx:61"}, "properties": {"repobilityId": "5e6101f18cbaaa46", "scanner": "scanner-primary", "fingerprint": "7ad143698e52aadd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9af44735c2c6eb07", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/dashboards/idr-meeting/MeetingNotesForm.tsx:75"}, "properties": {"repobilityId": "3b9ca4e76b8b26da", "scanner": "scanner-primary", "fingerprint": "9af44735c2c6eb07", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d784aa4710dc7990", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/idr-meeting/SearchResultsList.tsx:153"}, "properties": {"repobilityId": "a7e4db83b5cb13ef", "scanner": "scanner-primary", "fingerprint": "d784aa4710dc7990", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-34c15bdc20cc6ce1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/idr-meeting/AddEscalationDialog.tsx:41"}, "properties": {"repobilityId": "6bf1be53c5db0540", "scanner": "scanner-primary", "fingerprint": "34c15bdc20cc6ce1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b39a1410786334a3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/dnr-scheduler/page.tsx:126"}, "properties": {"repobilityId": "8d6b07004bfd7c1a", "scanner": "scanner-primary", "fingerprint": "b39a1410786334a3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-99aa694c9042cc83", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/service-backlog/page.tsx:362"}, "properties": {"repobilityId": "bcb6665b49ae17c6", "scanner": "scanner-primary", "fingerprint": "99aa694c9042cc83", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-776c206c0f1ebb13", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/powerhub/page.tsx:17"}, "properties": {"repobilityId": "ae3aa2fddcac1812", "scanner": "scanner-primary", "fingerprint": "776c206c0f1ebb13", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-527156b35fcedd85", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/dashboards/map/MapClient.tsx:64"}, "properties": {"repobilityId": "14b24b240342b5e5", "scanner": "scanner-primary", "fingerprint": "527156b35fcedd85", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ea942fdb50fa88f8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/map/MapClient.tsx:44"}, "properties": {"repobilityId": "b4bf6bd4b107e53c", "scanner": "scanner-primary", "fingerprint": "ea942fdb50fa88f8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3fe24616770237ec", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboards/deals/page.tsx:83"}, "properties": {"repobilityId": "7a251666f9a08b5f", "scanner": "scanner-primary", "fingerprint": "3fe24616770237ec", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f9f2d2c01d33727b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/page-traffic/page.tsx:52"}, "properties": {"repobilityId": "d62ab7c548742486", "scanner": "scanner-primary", "fingerprint": "f9f2d2c01d33727b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8a887829398414a1", "level": "note", "message": {"text": "Legacy-named symbol `showLegacy` in src/app/admin/roles/page.tsx:119"}, "properties": {"repobilityId": "612211e3f26dfe31", "scanner": "scanner-primary", "fingerprint": "8a887829398414a1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-bf3a4a2f7cd4d758", "level": "note", "message": {"text": "Legacy-named symbol `isLegacy` in src/app/admin/roles/_RoleDrawerBody.tsx:29"}, "properties": {"repobilityId": "2c124f18fa34c0f1", "scanner": "scanner-primary", "fingerprint": "bf3a4a2f7cd4d758", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-0b68f10b0bb26e5d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/tickets/page.tsx:248"}, "properties": {"repobilityId": "74e6cefa65ea71c2", "scanner": "scanner-primary", "fingerprint": "0b68f10b0bb26e5d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-db93aa1cb56617f2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/freshservice/page.tsx:90"}, "properties": {"repobilityId": "f693c0eb02a6bc01", "scanner": "scanner-primary", "fingerprint": "db93aa1cb56617f2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-875c688cffb435f7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/properties/[id]/page.tsx:51"}, "properties": {"repobilityId": "61be5151587dcd06", "scanner": "scanner-primary", "fingerprint": "875c688cffb435f7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4f5fd768890a2ff7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/roadmap/page.tsx:87"}, "properties": {"repobilityId": "26ff92cbdbfc5421", "scanner": "scanner-primary", "fingerprint": "4f5fd768890a2ff7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7da5416d1fa9d806", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/hubspot-custom-objects.ts:32"}, "properties": {"repobilityId": "5410638cc6484f84", "scanner": "scanner-primary", "fingerprint": "7da5416d1fa9d806", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-29412809cea6af59", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/property-detail.ts:67"}, "properties": {"repobilityId": "0847726bfc30e072", "scanner": "scanner-primary", "fingerprint": "29412809cea6af59", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c2ec629f907d0c15", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/shop-health.ts:253"}, "properties": {"repobilityId": "cae4d5a7723530b8", "scanner": "scanner-primary", "fingerprint": "c2ec629f907d0c15", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-02f05b89e2fc152f", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/lib/product-sync-categories.ts:74"}, "properties": {"repobilityId": "7406b9d8c14c54b2", "scanner": "scanner-primary", "fingerprint": "02f05b89e2fc152f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b9edd54b95b33a08", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/comms-chat.ts:47"}, "properties": {"repobilityId": "bfcc3b1ef67f76e3", "scanner": "scanner-primary", "fingerprint": "b9edd54b95b33a08", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bebd827f005e7ddd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/email.ts:167"}, "properties": {"repobilityId": "832360f583d778de", "scanner": "scanner-primary", "fingerprint": "bebd827f005e7ddd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a8d6afcaeaeeb4a9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/drive-plansets.ts:226"}, "properties": {"repobilityId": "b684a4e6c2cf2e66", "scanner": "scanner-primary", "fingerprint": "a8d6afcaeaeeb4a9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-372e1f142d085ec2", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/bom-so-create.ts:137"}, "properties": {"repobilityId": "21d9e4fbf66dc3c3", "scanner": "scanner-primary", "fingerprint": "372e1f142d085ec2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4d19740c1c309280", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/model-alias.ts:20"}, "properties": {"repobilityId": "dcd84fc9ec0b241a", "scanner": "scanner-primary", "fingerprint": "4d19740c1c309280", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cd2674dfff994234", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/zuper-property-sync.ts:563"}, "properties": {"repobilityId": "5259b359b5778bf1", "scanner": "scanner-primary", "fingerprint": "cd2674dfff994234", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c57a303267a08a6f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/on-call-holidays.ts:49"}, "properties": {"repobilityId": "bcab5d2219f7d41c", "scanner": "scanner-primary", "fingerprint": "c57a303267a08a6f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d1c70512bac640a9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/pe-avl.ts:39"}, "properties": {"repobilityId": "a29051650376d1b1", "scanner": "scanner-primary", "fingerprint": "d1c70512bac640a9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0540c6413f5b4873", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/deal-sync.ts:271"}, "properties": {"repobilityId": "dae5c2c406017057", "scanner": "scanner-primary", "fingerprint": "0540c6413f5b4873", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7c9f78e9ed19264e", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/property-hub.ts:934"}, "properties": {"repobilityId": "e21bd71109c84c8b", "scanner": "scanner-primary", "fingerprint": "7c9f78e9ed19264e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-09fbd538fc977614", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/on-call-google-calendar.ts:1"}, "properties": {"repobilityId": "13ff4923af8c72bf", "scanner": "scanner-primary", "fingerprint": "09fbd538fc977614", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-190df10953def385", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/on-call-google-calendar.ts:72"}, "properties": {"repobilityId": "9f04bc41218d734f", "scanner": "scanner-primary", "fingerprint": "190df10953def385", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-191e904d71c542e0", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/bom-pipeline.ts:995"}, "properties": {"repobilityId": "5e84c7550a69338b", "scanner": "scanner-primary", "fingerprint": "191e904d71c542e0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-932b718c6bfee40c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/bom-pipeline.ts:440"}, "properties": {"repobilityId": "60d6b6197e4890ed", "scanner": "scanner-primary", "fingerprint": "932b718c6bfee40c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-22b290115c723870", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/permit-hub.ts:199"}, "properties": {"repobilityId": "54f88ebdaffa94cd", "scanner": "scanner-primary", "fingerprint": "22b290115c723870", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c23abff62e1e01fb", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/permit-hub.ts:411"}, "properties": {"repobilityId": "cb473d6e5fa90b15", "scanner": "scanner-primary", "fingerprint": "c23abff62e1e01fb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-513b361a05e87f76", "level": "note", "message": {"text": "Legacy-named symbol `syncWithDirectInsertLegacy` in src/lib/bom-snapshot.ts:168"}, "properties": {"repobilityId": "02b110ff3c120560", "scanner": "scanner-primary", "fingerprint": "513b361a05e87f76", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-c1cacf844af43ee0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/google-calendar.ts:530"}, "properties": {"repobilityId": "17199c0674b7380f", "scanner": "scanner-primary", "fingerprint": "c1cacf844af43ee0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c3dd94f5bd1f3cb4", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/zoho-taxonomy.ts:7"}, "properties": {"repobilityId": "5a28c10ac5e31c07", "scanner": "scanner-primary", "fingerprint": "c3dd94f5bd1f3cb4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-864854562bf5ca9c", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/pe-api-sync.ts:388"}, "properties": {"repobilityId": "4eed839ab7d66309", "scanner": "scanner-primary", "fingerprint": "864854562bf5ca9c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-00ba6444dc80408f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/travel-time.ts:173"}, "properties": {"repobilityId": "e2f0873532af1366", "scanner": "scanner-primary", "fingerprint": "00ba6444dc80408f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-522e03cc824f1129", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/zoho-inventory.ts:487"}, "properties": {"repobilityId": "68cb9fd7a6ff6139", "scanner": "scanner-primary", "fingerprint": "522e03cc824f1129", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-deb2fb7b4cfea527", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/zoho-inventory.ts:336"}, "properties": {"repobilityId": "17e43eb2b2d987bf", "scanner": "scanner-primary", "fingerprint": "deb2fb7b4cfea527", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c0571ee3e54c9b4d", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/project-funnel-aggregation.ts:443"}, "properties": {"repobilityId": "14b347deed21d315", "scanner": "scanner-primary", "fingerprint": "c0571ee3e54c9b4d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5a1fbe1de81b7268", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/idr-meeting.ts:514"}, "properties": {"repobilityId": "5f6b42d4384f03be", "scanner": "scanner-primary", "fingerprint": "5a1fbe1de81b7268", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9a88c2108758d176", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/idr-meeting.ts:767"}, "properties": {"repobilityId": "819b9aae4f95fd75", "scanner": "scanner-primary", "fingerprint": "9a88c2108758d176", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2a23cc50acb8bdde", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/hubspot.ts:1234"}, "properties": {"repobilityId": "339360d61d9c113b", "scanner": "scanner-primary", "fingerprint": "2a23cc50acb8bdde", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c1be33eb6402402a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/hubspot.ts:1309"}, "properties": {"repobilityId": "52920ba1d4b1a8ab", "scanner": "scanner-primary", "fingerprint": "c1be33eb6402402a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1c38df2e1fb7bde1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/enphase-enlighten.ts:278"}, "properties": {"repobilityId": "be34a851c2730c0b", "scanner": "scanner-primary", "fingerprint": "1c38df2e1fb7bde1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8df59f66abf8eed8", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/property-backfill-lock.ts:5"}, "properties": {"repobilityId": "41497e0c347163e7", "scanner": "scanner-primary", "fingerprint": "8df59f66abf8eed8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ec7b01e0a068aa04", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/map-aggregator.ts:190"}, "properties": {"repobilityId": "45e862ca44d60926", "scanner": "scanner-primary", "fingerprint": "ec7b01e0a068aa04", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6a23698d7f4b4dfd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/shovels.ts:211"}, "properties": {"repobilityId": "af25d8890d4f51eb", "scanner": "scanner-primary", "fingerprint": "6a23698d7f4b4dfd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6e77de2bd8e7537c", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/product-sync.ts:59"}, "properties": {"repobilityId": "ff3ddd73c9179dae", "scanner": "scanner-primary", "fingerprint": "6e77de2bd8e7537c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-82ed4631e679995f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/comms-gmail.ts:4"}, "properties": {"repobilityId": "af71d2c7053bce27", "scanner": "scanner-primary", "fingerprint": "82ed4631e679995f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-92fbbbbc38bd795b", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/pe-turnover.ts:435"}, "properties": {"repobilityId": "d7ce3b0eca87394d", "scanner": "scanner-primary", "fingerprint": "92fbbbbc38bd795b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-26e98edb12ab9473", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/resolve-geo-links.ts:26"}, "properties": {"repobilityId": "4bcd26aec1a5c80b", "scanner": "scanner-primary", "fingerprint": "26e98edb12ab9473", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-13131057e35cc295", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/hubspot-engagements.ts:120"}, "properties": {"repobilityId": "6050d62270bcaef7", "scanner": "scanner-primary", "fingerprint": "13131057e35cc295", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0c9aa2f44a8cf98a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/catalog-cross-link.ts:60"}, "properties": {"repobilityId": "74f36bafe67e00fd", "scanner": "scanner-primary", "fingerprint": "0c9aa2f44a8cf98a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-290a6fa583f39286", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/catalog-cross-link.ts:108"}, "properties": {"repobilityId": "a077b4608170e93a", "scanner": "scanner-primary", "fingerprint": "290a6fa583f39286", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-92c39838056ae1e0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/comms-ai-draft.ts:37"}, "properties": {"repobilityId": "1467fe9d27cd74fc", "scanner": "scanner-primary", "fingerprint": "92c39838056ae1e0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cc7ca07b220147a8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/google-chat-api.ts:91"}, "properties": {"repobilityId": "d1f92cc1f851d128", "scanner": "scanner-primary", "fingerprint": "cc7ca07b220147a8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7de4f4539ca6d4f5", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/pricing-calculator.ts:681"}, "properties": {"repobilityId": "e3a7320f3a2294c4", "scanner": "scanner-primary", "fingerprint": "7de4f4539ca6d4f5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e1449733f1775f4a", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/solar-auth.ts:20"}, "properties": {"repobilityId": "d790fdac6e323915", "scanner": "scanner-primary", "fingerprint": "e1449733f1775f4a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-85d10b8918aab5b5", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/catalog-push-approve.ts:443"}, "properties": {"repobilityId": "3bf066d68266a0fd", "scanner": "scanner-primary", "fingerprint": "85d10b8918aab5b5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-699882bf48d35e59", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/lib/property-sync.ts:524"}, "properties": {"repobilityId": "0e63f93f5a3aaf92", "scanner": "scanner-primary", "fingerprint": "699882bf48d35e59", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-06323c8b56a5c965", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/deal-reader.ts:227"}, "properties": {"repobilityId": "fe780a9b949efef9", "scanner": "scanner-primary", "fingerprint": "06323c8b56a5c965", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-64174fe05f774ccb", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/catalog-sync.ts:819"}, "properties": {"repobilityId": "2a83ef1a1d04a020", "scanner": "scanner-primary", "fingerprint": "64174fe05f774ccb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1a86323322f3ad7c", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/bom-so-post-process.ts:444"}, "properties": {"repobilityId": "0be020d0deda4e6e", "scanner": "scanner-primary", "fingerprint": "1a86323322f3ad7c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3ef6c4f1db04390e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/office-performance.ts:1679"}, "properties": {"repobilityId": "f25fd15240067a2b", "scanner": "scanner-primary", "fingerprint": "3ef6c4f1db04390e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b9faad67602e2761", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/payment-tracking.ts:268"}, "properties": {"repobilityId": "6ae97c62a7b3312e", "scanner": "scanner-primary", "fingerprint": "b9faad67602e2761", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b175d4e7ccb187cf", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/catalog-harvest.ts:209"}, "properties": {"repobilityId": "4bd41b19ab263ac7", "scanner": "scanner-primary", "fingerprint": "b175d4e7ccb187cf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-82ca28ae34b9fc88", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/revenue-goals.ts:56"}, "properties": {"repobilityId": "bebcd367e91c338f", "scanner": "scanner-primary", "fingerprint": "82ca28ae34b9fc88", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b64a17f98c306078", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/ic-hub.ts:458"}, "properties": {"repobilityId": "86dff6159f199552", "scanner": "scanner-primary", "fingerprint": "b64a17f98c306078", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7b282b218641f948", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/tech-ops-bot-tools.ts:144"}, "properties": {"repobilityId": "dde5b09a5b05b3f1", "scanner": "scanner-primary", "fingerprint": "7b282b218641f948", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b10a2ced4d379b12", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/tech-ops-bot-tools.ts:242"}, "properties": {"repobilityId": "b6e8aa7491f23cff", "scanner": "scanner-primary", "fingerprint": "b10a2ced4d379b12", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ec212e61b032edfe", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/zuper-catalog.ts:743"}, "properties": {"repobilityId": "7f3682ed1f10fef1", "scanner": "scanner-primary", "fingerprint": "ec212e61b032edfe", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e6d47e08b83bc216", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/google-auth.ts:117"}, "properties": {"repobilityId": "02a853a296cb86b8", "scanner": "scanner-primary", "fingerprint": "e6d47e08b83bc216", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b6fd59b13045d089", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/tesla-powerhub.ts:252"}, "properties": {"repobilityId": "d165397fb2cb951e", "scanner": "scanner-primary", "fingerprint": "b6fd59b13045d089", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-37b86d4e10e5b899", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/pe-uploader-overrides.ts:4"}, "properties": {"repobilityId": "0aa958bef2aceae5", "scanner": "scanner-primary", "fingerprint": "37b86d4e10e5b899", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-65dafa2c7a9c160f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/on-call-sheet.ts:74"}, "properties": {"repobilityId": "078ff16723e76afd", "scanner": "scanner-primary", "fingerprint": "65dafa2c7a9c160f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-038be55a73f63aa2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/freshservice.ts:80"}, "properties": {"repobilityId": "80d2667aa046a079", "scanner": "scanner-primary", "fingerprint": "038be55a73f63aa2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-99ca6ef6815d467b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/eagleview.ts:487"}, "properties": {"repobilityId": "47abe8bd48ae2593", "scanner": "scanner-primary", "fingerprint": "99ca6ef6815d467b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bb8e1e563bb2804d", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/zuper.ts:355"}, "properties": {"repobilityId": "73e4ed2b55f92b0c", "scanner": "scanner-primary", "fingerprint": "bb8e1e563bb2804d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2f11ff9880badfeb", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/zuper.ts:1893"}, "properties": {"repobilityId": "f4f24564b9932563", "scanner": "scanner-primary", "fingerprint": "2f11ff9880badfeb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8254a37457cf225e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/pe-doc-export.ts:4"}, "properties": {"repobilityId": "44cb140129e991a2", "scanner": "scanner-primary", "fingerprint": "8254a37457cf225e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bf80a543547653cf", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/hubspot-tasks.ts:369"}, "properties": {"repobilityId": "2f9ca593fd692e78", "scanner": "scanner-primary", "fingerprint": "bf80a543547653cf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0fcd209cd351ded2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/comms-email-compose.ts:65"}, "properties": {"repobilityId": "f90193c79f389c48", "scanner": "scanner-primary", "fingerprint": "0fcd209cd351ded2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2d51e5fe918072b0", "level": "note", "message": {"text": "Legacy-named symbol `wait_for_user_manual_backup` in src/lib/powerhub-sync.ts:89"}, "properties": {"repobilityId": "3e4b9b684d7aaa95", "scanner": "scanner-primary", "fingerprint": "2d51e5fe918072b0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-7cd549b4e582c78a", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/pm-flag-rules.ts:431"}, "properties": {"repobilityId": "396dd97b55a9afa9", "scanner": "scanner-primary", "fingerprint": "7cd549b4e582c78a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1887a5483cf86e85", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/pe-api.ts:260"}, "properties": {"repobilityId": "413165d88f41eb1d", "scanner": "scanner-primary", "fingerprint": "1887a5483cf86e85", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d57e2344fb992e3a", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/db.ts:510"}, "properties": {"repobilityId": "fe78b24ab3d87a10", "scanner": "scanner-primary", "fingerprint": "d57e2344fb992e3a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4c736f2e532881bf", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/lib/design-funnel-aggregation.ts:15"}, "properties": {"repobilityId": "e1d52ffbc6805d6d", "scanner": "scanner-primary", "fingerprint": "4c736f2e532881bf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dc481ab90e5d4d4c", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/pandadoc.ts:20"}, "properties": {"repobilityId": "1653a9a6e33091d5", "scanner": "scanner-primary", "fingerprint": "dc481ab90e5d4d4c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-aa169cbebdd7a175", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/pandadoc.ts:137"}, "properties": {"repobilityId": "3e539591a5e3d7ce", "scanner": "scanner-primary", "fingerprint": "aa169cbebdd7a175", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bcff646005f2eb49", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/lib/roles.ts:37"}, "properties": {"repobilityId": "7310017a64833ffd", "scanner": "scanner-primary", "fingerprint": "bcff646005f2eb49", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-054db7776c1de7ba", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/payment-tracking-types.ts:100"}, "properties": {"repobilityId": "d1ba284f20d101ff", "scanner": "scanner-primary", "fingerprint": "054db7776c1de7ba", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c413ee3098a041b6", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/pe-vision-classifier.ts:523"}, "properties": {"repobilityId": "25b403ab4e84756e", "scanner": "scanner-primary", "fingerprint": "c413ee3098a041b6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5c859483821a5086", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/product-sync-outbound.ts:3"}, "properties": {"repobilityId": "73db67cf16dd31b8", "scanner": "scanner-primary", "fingerprint": "5c859483821a5086", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fc210fa618e76fd7", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/pe-scraper-sync.ts:153"}, "properties": {"repobilityId": "6ed52299217eff14", "scanner": "scanner-primary", "fingerprint": "fc210fa618e76fd7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-37fe60fc0435ddd0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/pe-scraper-sync.ts:1053"}, "properties": {"repobilityId": "1cfced69c99aadd0", "scanner": "scanner-primary", "fingerprint": "37fe60fc0435ddd0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f82f64b349de1a62", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/pe-audit-orchestrator.ts:209"}, "properties": {"repobilityId": "ff18e89379ca0e52", "scanner": "scanner-primary", "fingerprint": "f82f64b349de1a62", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f122ddb3dda81b15", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/tech-ops-bot.ts:116"}, "properties": {"repobilityId": "843934da2749015e", "scanner": "scanner-primary", "fingerprint": "f122ddb3dda81b15", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9e33f78ab70681ff", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/tech-ops-bot.ts:447"}, "properties": {"repobilityId": "f099e10829d040f2", "scanner": "scanner-primary", "fingerprint": "9e33f78ab70681ff", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d162b88c7145fb6c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/gmail-shared-inbox.ts:366"}, "properties": {"repobilityId": "52277024c8cb4e8c", "scanner": "scanner-primary", "fingerprint": "d162b88c7145fb6c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-69bcd8f833b7083b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/geocode.ts:60"}, "properties": {"repobilityId": "98e7e916424bb045", "scanner": "scanner-primary", "fingerprint": "69bcd8f833b7083b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f74913a89bd33385", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/adders/opensolar-client.ts:12"}, "properties": {"repobilityId": "72dfbf8d83bf1d52", "scanner": "scanner-primary", "fingerprint": "f74913a89bd33385", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b63f2791aa3121a8", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/adders/zod-schemas.ts:11"}, "properties": {"repobilityId": "f6ed08f23a308e68", "scanner": "scanner-primary", "fingerprint": "b63f2791aa3121a8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-639bd4a911ebac6c", "level": "note", "message": {"text": "Legacy-named symbol `public_estimator_v2` in src/lib/estimator/constants.ts:7"}, "properties": {"repobilityId": "63f810a587f92458", "scanner": "scanner-primary", "fingerprint": "639bd4a911ebac6c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-42f1ead7e3c93abb", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/product-requests/opensolar-push.ts:29"}, "properties": {"repobilityId": "5949fde3310fd6c5", "scanner": "scanner-primary", "fingerprint": "42f1ead7e3c93abb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-360b97a3b1142b3d", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/compliance-v2/scoring.ts:155"}, "properties": {"repobilityId": "accafa960bd5b202", "scanner": "scanner-primary", "fingerprint": "360b97a3b1142b3d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7d87b436ee733d50", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/pm-tracker/metrics/readiness.ts:90"}, "properties": {"repobilityId": "e498e7e409e3f15d", "scanner": "scanner-primary", "fingerprint": "7d87b436ee733d50", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-939f3f3203e93202", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/shit-show/hubspot-note.ts:34"}, "properties": {"repobilityId": "afb1eee1156f19e9", "scanner": "scanner-primary", "fingerprint": "939f3f3203e93202", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4a91066f052deff9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/admin-workflows/actions/create-hubspot-task.ts:59"}, "properties": {"repobilityId": "28dfa7b5df91510f", "scanner": "scanner-primary", "fingerprint": "4a91066f052deff9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8d7f7017374c7960", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/admin-workflows/actions/update-hubspot-ticket-property.ts:36"}, "properties": {"repobilityId": "d0fa60f07e0ed9f7", "scanner": "scanner-primary", "fingerprint": "8d7f7017374c7960", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-aed955e556cc9f20", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/admin-workflows/actions/add-hubspot-note.ts:29"}, "properties": {"repobilityId": "5387e9a16bc5b776", "scanner": "scanner-primary", "fingerprint": "aed955e556cc9f20", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-480378632f92ba4f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/admin-workflows/actions/add-hubspot-contact-note.ts:41"}, "properties": {"repobilityId": "646f58d33873a413", "scanner": "scanner-primary", "fingerprint": "480378632f92ba4f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-17dbd0bea11ee776", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/admin-workflows/actions/update-hubspot-contact-property.ts:36"}, "properties": {"repobilityId": "993e522603cecb0c", "scanner": "scanner-primary", "fingerprint": "17dbd0bea11ee776", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8a7e55a1a9843117", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/admin-workflows/actions/find-hubspot-contact.ts:56"}, "properties": {"repobilityId": "2227bb3293197fab", "scanner": "scanner-primary", "fingerprint": "8a7e55a1a9843117", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-79baecbfaddcfe48", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/solar/v12-engine/runner.ts:37"}, "properties": {"repobilityId": "9292c9ae04c8248f", "scanner": "scanner-primary", "fingerprint": "79baecbfaddcfe48", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3ca7a16856c8726a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/useShopHealthData.ts:12"}, "properties": {"repobilityId": "90af798451c35de6", "scanner": "scanner-primary", "fingerprint": "3ca7a16856c8726a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-45d717aafbad2bd5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/useBaselineTable.ts:28"}, "properties": {"repobilityId": "42b4c0297dae7ed5", "scanner": "scanner-primary", "fingerprint": "45d717aafbad2bd5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3c7f31498aa8ff51", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/useExecutiveData.ts:46"}, "properties": {"repobilityId": "733e360ad2940493", "scanner": "scanner-primary", "fingerprint": "3c7f31498aa8ff51", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6498c8b8ea326c7a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/useProjectData.ts:53"}, "properties": {"repobilityId": "3e571df8e3ccc3fb", "scanner": "scanner-primary", "fingerprint": "6498c8b8ea326c7a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-952d9c5d199d071c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/useActivityTracking.ts:138"}, "properties": {"repobilityId": "4a7e42a3d01f2978", "scanner": "scanner-primary", "fingerprint": "952d9c5d199d071c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-af62e73bd905c17d", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/inngest/functions/admin-workflow-executor.ts:177"}, "properties": {"repobilityId": "5f76c7d53df2bd47", "scanner": "scanner-primary", "fingerprint": "af62e73bd905c17d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6d1900d6eb1a0334", "level": "note", "message": {"text": "131 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "79fbfd036d7853f0", "scanner": "scanner-primary", "fingerprint": "6d1900d6eb1a0334", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}]}]}