{"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-357c088c9dad2b63", "name": "Stray `console.log` in TS/JS \u2014 replace.js:64", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 replace.js: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-d98ac9ddf6b7f090", "name": "Stray `console.log` in TS/JS \u2014 verify.js:5", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 verify.js:5"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a7a81e7b22aa98eb", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/search-a11y-keyboard.anon.spec.ts:164", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/search-a11y-keyboard.anon.spec.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-cd7f86051d579c0b", "name": "TODO/FIXME marker in shipping code \u2014 tests/e2e/map-markers.anon.spec.ts:920", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 tests/e2e/map-markers.anon.spec.ts:920"}, "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-b7d0ca046802faba", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/map-filters.spec.ts:266", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/map-filters.spec.ts:266"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ea56ba700199cd06", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/search-a11y-screenreader.anon.spec.ts:134", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/search-a11y-screenreader.anon.spec.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-d99d29af364b4ed7", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/search-v2-fallback.spec.ts:199", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/search-v2-fallback.spec.ts:199"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d195b7ea3fa73b12", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/search-a11y.anon.spec.ts:148", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/search-a11y.anon.spec.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-4735f1c623a64b1d", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/search-loading-states.spec.ts:85", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/search-loading-states.spec.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-8ecced3f3c72a40a", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/search-p0-smoke.anon.spec.ts:746", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/search-p0-smoke.anon.spec.ts:746"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8f98604768cc2521", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/search-a11y-filters.anon.spec.ts:204", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/search-a11y-filters.anon.spec.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-d9f259a18e342a6a", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/global-setup.ts:9", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/global-setup.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-bc32b0da534d9631", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/settings/settings.spec.ts:196", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/settings/settings.spec.ts:196"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e4a788ad930225a2", "name": "TODO/FIXME marker in shipping code \u2014 tests/e2e/session-expiry/session-expiry-resilience.spec.ts:136", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 tests/e2e/session-expiry/session-expiry-resilience.spec.ts:136"}, "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-be009c2988f35cba", "name": "TODO/FIXME marker in shipping code \u2014 tests/e2e/session-expiry/session-expiry-multistep.spec.ts:26", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 tests/e2e/session-expiry/session-expiry-multistep.spec.ts:26"}, "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-1644a71c63e11880", "name": "TODO/FIXME marker in shipping code \u2014 tests/e2e/session-expiry/session-expiry-forms.spec.ts:32", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 tests/e2e/session-expiry/session-expiry-forms.spec.ts:32"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f1e91375e741ddf2", "name": "TODO/FIXME marker in shipping code \u2014 tests/e2e/session-expiry/session-expiry-polling.spec.ts:28", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 tests/e2e/session-expiry/session-expiry-polling.spec.ts:28"}, "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-5496f456c4f49143", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/journeys/list-map-sync.spec.ts:98", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/journeys/list-map-sync.spec.ts:98"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-489fcd1c06eb2f47", "name": "TODO/FIXME marker in shipping code \u2014 tests/e2e/journeys/22-messaging-conversations.spec.ts:132", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 tests/e2e/journeys/22-messaging-conversations.spec.ts:132"}, "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-2c4317ebfe331367", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/journeys/search-pending-state.spec.ts:148", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/journeys/search-pending-state.spec.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-cf6d15b3b69a1be3", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/journeys/a11y-audit.anon.spec.ts:77", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/journeys/a11y-audit.anon.spec.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-7530b5b232ec8f6d", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/journeys/search-v2-ui.spec.ts:98", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/journeys/search-v2-ui.spec.ts:98"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ec567d2f9e0e50fd", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/journeys/30-critical-simulations.spec.ts:165", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/journeys/30-critical-simulations.spec.ts:165"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f072afa8927c9164", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/journeys/map-pin-tiering.spec.ts:71", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/journeys/map-pin-tiering.spec.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-1c6492a3edb5efe4", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/performance/page-weight-budget.spec.ts:38", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/performance/page-weight-budget.spec.ts:38"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-69a0740fa4385c04", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/performance/cls-audit.spec.ts:92", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/performance/cls-audit.spec.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-ec894ebcdd9cfc14", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/performance/search-interaction-perf.spec.ts:199", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/performance/search-interaction-perf.spec.ts:199"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3049cda03675f3e1", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/mobile/mobile-messages.spec.ts:312", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/mobile/mobile-messages.spec.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-be3262e80163a77d", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/helpers/test-utils.ts:386", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/helpers/test-utils.ts:386"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b8e162740067bed1", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/helpers/stacked-marker-helpers.ts:101", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/helpers/stacked-marker-helpers.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-bd4385e84e9a4a4c", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/helpers/a11y-helpers.ts:142", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/helpers/a11y-helpers.ts:142"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-525b749042ff3e1b", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/helpers/pin-tiering-helpers.ts:110", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/helpers/pin-tiering-helpers.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-d63872aa4e664274", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/helpers/data-helpers.ts:216", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/helpers/data-helpers.ts:216"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b8c3568a7cbf95a2", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/messaging/messaging-perf.spec.ts:78", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/messaging/messaging-perf.spec.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-de8a6d9761589daa", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/a11y/axe-page-audit.auth.spec.ts:176", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/a11y/axe-page-audit.auth.spec.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-8c108650b95aeb0b", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/a11y/axe-page-audit.anon.spec.ts:161", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/a11y/axe-page-audit.anon.spec.ts:161"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b00df9bdc980d5b0", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/a11y/listing-detail-a11y.spec.ts:109", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/a11y/listing-detail-a11y.spec.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-88eb0e4fe5728efe", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/a11y/axe-dynamic-states.spec.ts:330", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/a11y/axe-dynamic-states.spec.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-2e83751d64ebbbd9", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/search-filters/filter-near-matches.anon.spec.ts:157", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/search-filters/filter-near-matches.anon.spec.ts:157"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4abfcfeeb8a1552a", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-demo.js:575", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-demo.js:575"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b4073ca9724b51cf", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-coords.ts:4", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-coords.ts:4"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a4967a3a34169686", "name": "Stray `console.log` in TS/JS \u2014 scripts/generate-map-style.ts:147", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-map-style.ts:147"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-80991574bbe75610", "name": "Stray `console.log` in TS/JS \u2014 scripts/scan-public-payload-pii.js:174", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/scan-public-payload-pii.js:174"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1c3c18ebab2abadc", "name": "Stray `console.log` in TS/JS \u2014 scripts/debug-unread.ts:8", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/debug-unread.ts:8"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4c5976e425e53489", "name": "Stray `console.log` in TS/JS \u2014 scripts/backfill-embeddings.ts:53", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-embeddings.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-4c3f467477b31bb7", "name": "Stray `console.log` in TS/JS \u2014 scripts/setup-e2e-user.js:36", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/setup-e2e-user.js: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-b1e2139e8d7a6483", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-test-listings.js:1015", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-test-listings.js:1015"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e481aede19c8ada8", "name": "Stray `console.log` in TS/JS \u2014 scripts/geocode-accuracy-extended.ts:246", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/geocode-accuracy-extended.ts:246"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1e25b7d60ebfb39d", "name": "Stray `console.log` in TS/JS \u2014 scripts/geocode-accuracy-check.ts:90", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/geocode-accuracy-check.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-34f238d1080f0ae1", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-listings.js:188", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-listings.js: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-947a9d83e1267159", "name": "Stray `console.log` in TS/JS \u2014 scripts/embedding-shadow-swap.ts:74", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/embedding-shadow-swap.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-21ec0815d738d62a", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-listing-coords.ts:24", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-listing-coords.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-db0173db13c60ca9", "name": "Stray `console.log` in TS/JS \u2014 scripts/verify-email.js:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verify-email.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-fd8ab9893fb312ee", "name": "Stray `console.log` in TS/JS \u2014 scripts/update-images.js:34", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/update-images.js: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-df4b43d0d9f657ab", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-e2e.js:548", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-e2e.js:548"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9d445c6f31c91b01", "name": "Stray `console.log` in TS/JS \u2014 scripts/validate-filter-scenarios.js:19", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/validate-filter-scenarios.js: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-683c1b5649258fc3", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-geocoding.ts:4", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-geocoding.ts:4"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-27b9df5b4c805885", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-staging.js:606", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-staging.js: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-3c0c279169f7768b", "name": "Stray `console.log` in TS/JS \u2014 scripts/cfm/backfill-canonical-inventory.ts:415", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/cfm/backfill-canonical-inventory.ts:415"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3112f7acdb8d90f3", "name": "Stray `console.log` in TS/JS \u2014 scripts/cfm/backfill-normalized-address.ts:111", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/cfm/backfill-normalized-address.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-7bf996077ea0ebba", "name": "Stray `console.log` in TS/JS \u2014 public/sw.js:25", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 public/sw.js: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-b27f14de55dfc4c8", "name": "Stray `console.log` in TS/JS \u2014 output/webkit_debug.js:49", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 output/webkit_debug.js: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-0aca53ca20edb0e1", "name": "Stray `console.log` in TS/JS \u2014 src/__tests__/.ci-filter-validation.test.ts:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/__tests__/.ci-filter-validation.test.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-fc2db684dcda81be", "name": "Stray `console.log` in TS/JS \u2014 src/scripts/simulate-user-flow.ts:24", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/scripts/simulate-user-flow.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-1ce7b12e288bcf00", "name": "Stray `console.log` in TS/JS \u2014 src/scripts/verify_listing.ts:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/scripts/verify_listing.ts:12"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-995c52a447acc0ec", "name": "Stray `console.log` in TS/JS \u2014 src/scripts/inspect-search-quality.ts:32", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/scripts/inspect-search-quality.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-d3807f8f80d5f4e2", "name": "Stray `console.log` in TS/JS \u2014 src/scripts/test-db.ts:6", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/scripts/test-db.ts:6"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dc31abc73f74840c", "name": "Stray `console.log` in TS/JS \u2014 src/scripts/backfill-search-docs.ts:43", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/scripts/backfill-search-docs.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-a044884e26a89d9f", "name": "Stray `console.log` in TS/JS \u2014 src/scripts/migrate-images-to-supabase.ts:40", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/scripts/migrate-images-to-supabase.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-234b7515e7e93e54", "name": "Stray `console.log` in TS/JS \u2014 src/scripts/resync-embeddings.ts:24", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/scripts/resync-embeddings.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-72a6d91091ee8157", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/JsonLd.tsx:32", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/JsonLd.tsx:32"}, "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-b98c4c16d9255961", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/CollapsedMobileSearch.tsx:147", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/CollapsedMobileSearch.tsx:147"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4f41427eb103546b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/HostIdentityBadge.tsx:40", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/HostIdentityBadge.tsx:40"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-60fe7d1f05b5a7b9", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/SearchHeaderWrapper.tsx:435", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/SearchHeaderWrapper.tsx:435"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d16bf5785863a183", "name": "Stray `console.log` in TS/JS \u2014 src/components/ServiceWorkerRegistration.tsx:335", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/ServiceWorkerRegistration.tsx:335"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c313c05bf382653a", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/FeaturedListingsClient.tsx:295", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/FeaturedListingsClient.tsx:295"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bcdc6a99e5aa3344", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/ProfileCompletionIndicator.tsx:220", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ProfileCompletionIndicator.tsx:220"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bcc27906694d8404", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/LocationSearchInput.tsx:972", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/LocationSearchInput.tsx:972"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-44a05ec2f60d71a1", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/NavbarClient.tsx:645", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/NavbarClient.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-abf77e89e4037a03", "name": "Stray `console.log` in TS/JS \u2014 src/components/WebVitals.tsx:45", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/WebVitals.tsx: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-604f05ef79615706", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/neighborhood/NeighborhoodPlaceList.tsx:231", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/neighborhood/NeighborhoodPlaceList.tsx:231"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e925b769329e9a17", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/listings/ListingCard.tsx:643", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/listings/ListingCard.tsx:643"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e9551c4b0692f63b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/listings/AddressAutocompleteInput.tsx:722", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/listings/AddressAutocompleteInput.tsx:722"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fd865b708cdd7ee3", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/chat/NearbyPlacesCard.tsx:693", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/chat/NearbyPlacesCard.tsx:693"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b71b5d34cdb9358d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/search/InlineFilterStrip.tsx:478", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/search/InlineFilterStrip.tsx:478"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-abfe31efffa373d9", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/search/FilterPill.tsx:42", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/search/FilterPill.tsx:42"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2dc30c1eae42983d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/search/MobileSearchOverlay.tsx:254", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/search/MobileSearchOverlay.tsx:254"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c25535c03da1dd62", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/search/DesktopQuickFilters.tsx:91", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/search/DesktopQuickFilters.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-f09e27735ed41345", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/nearby/NearbyPlacesPanel.tsx:645", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/nearby/NearbyPlacesPanel.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-a4141f067b1730d2", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/map/UserMarker.tsx:165", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/map/UserMarker.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-ca2c3110473ee4e3", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/filters/FilterChip.tsx:70", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/filters/FilterChip.tsx:70"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7d44682a4dea4edb", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/HomeClient.tsx:218", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/HomeClient.tsx:218"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5d8482c6a383ae9f", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/layout.tsx:86", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/layout.tsx:86"}, "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-9819dc67681b5f6f", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/about/layout.tsx:43", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/about/layout.tsx:43"}, "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-48625ff88ff2d8b3", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/listings/[id]/page.tsx:348", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/listings/[id]/page.tsx:348"}, "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-89bbe05482f8d6af", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/listings/[id]/ListingPageClient.tsx:1078", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/listings/[id]/ListingPageClient.tsx:1078"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0062b0d8156710c4", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/listings/ListingList.tsx:332", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/listings/ListingList.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-90d80e0e9318afe5", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/audit/page.tsx:306", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/audit/page.tsx:306"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-62c2f3dbceb4ea53", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/saved-searches/SavedSearchList.tsx:487", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/saved-searches/SavedSearchList.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-a244bdd635cd9e25", "name": "Stray `console.log` in TS/JS \u2014 src/lib/shutdown.ts:45", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/shutdown.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-6e67b1ad7d33a6d6", "name": "TODO/FIXME marker in shipping code \u2014 src/lib/search-alerts.ts:765", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/lib/search-alerts.ts:765"}, "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-f5468d51978aea49", "name": "Stray `console.log` in TS/JS \u2014 src/lib/timeout-wrapper.ts:51", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/timeout-wrapper.ts:51"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d5268febecb2f43b", "name": "Stray `console.log` in TS/JS \u2014 src/lib/logger.ts:116", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/logger.ts:116"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "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-64da3ac455b4eaa4", "name": "Possible secret in verify.js", "shortDescription": {"text": "Possible secret in verify.js"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-ee810349675f4acf", "name": "Insecure pattern 'node_child_process' in next.config.ts:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in next.config.ts:2"}, "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-3893ce501313a04a", "name": "Possible secret in scripts/seed-demo.js", "shortDescription": {"text": "Possible secret in scripts/seed-demo.js"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-97c51f49f9baf6ed", "name": "Insecure pattern 'node_child_process' in scripts/run-playwright-e2e-ci.mjs:3", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/run-playwright-e2e-ci.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-4109ff5c6d0d5807", "name": "Insecure pattern 'node_child_process' in scripts/dev-fresh.js:3", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/dev-fresh.js: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-aa22d63bb05a7583", "name": "Insecure pattern 'node_child_process' in scripts/run-search-release-gate.js:4", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/run-search-release-gate.js:4"}, "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-63b55163ff56c42b", "name": "Insecure pattern 'node_child_process' in scripts/run-dev.js:5", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/run-dev.js:5"}, "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-b5ac8299796854ed", "name": "Insecure pattern 'node_child_process' in scripts/validate-filter-scenarios.js:9", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/validate-filter-scenarios.js:9"}, "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-c73357a09cb307ad", "name": "Insecure pattern 'dangerous_innerhtml' in .claude/agents/code-reviewer.yml:24", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in .claude/agents/code-reviewer.yml:24"}, "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-82522e329355e0cc", "name": "Insecure pattern 'subprocess_shell_true' in .claude/skills/webapp-testing/scripts/with_server.py:71", "shortDescription": {"text": "Insecure pattern 'subprocess_shell_true' in .claude/skills/webapp-testing/scripts/with_server.py:71"}, "fullDescription": {"text": "Found a known-risky pattern (subprocess_shell_true). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9e0b7b0fc738cd36", "name": "Insecure pattern 'node_child_process' in output/webkit_debug.js:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in output/webkit_debug.js:1"}, "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-e1c20f5f05a9438e", "name": "Insecure pattern 'node_child_process' in src/__tests__/launch/phase10-launch-hardening.test.ts:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in src/__tests__/launch/phase10-launch-hardening.test.ts:1"}, "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-599e293720e25296", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/__tests__/lib/googleMapsUiKitLoader.test.ts:9", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/__tests__/lib/googleMapsUiKitLoader.test.ts:9"}, "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-0b5fc7b9eb907712", "name": "Insecure pattern 'eval_used' in src/__tests__/lib/csp.test.ts:86", "shortDescription": {"text": "Insecure pattern 'eval_used' in src/__tests__/lib/csp.test.ts:86"}, "fullDescription": {"text": "Found a known-risky pattern (eval_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d39b95f7858eab0c", "name": "Insecure pattern 'node_child_process' in src/__tests__/phase09/cutover-retire-booking.test.ts:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in src/__tests__/phase09/cutover-retire-booking.test.ts:1"}, "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-edccff27f7851cfa", "name": "Insecure pattern 'dangerous_innerhtml' in src/components/JsonLd.tsx:32", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/JsonLd.tsx:32"}, "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-5344b214d93a779f", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/neighborhood/PlaceDetailsPanel.tsx:53", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/neighborhood/PlaceDetailsPanel.tsx:53"}, "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-f899412646d9b183", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/chat/NearbyPlacesCard.tsx:382", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/chat/NearbyPlacesCard.tsx:382"}, "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-5f1530069456c35d", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/layout.tsx:86", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/layout.tsx:86"}, "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-888e9252bc4251a6", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/about/layout.tsx:43", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/about/layout.tsx:43"}, "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-ff72b0f5f0682002", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/listings/[id]/page.tsx:348", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/listings/[id]/page.tsx:348"}, "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-f8cdfffd70600cb1", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/cache@v5 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f124038dc451d574", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/cache@v5 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c0840d07864313e3", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "treosh/lighthouse-ci-action@v12 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f9a8c84da39d17f7", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/cache@v5 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e3905f4b1efcc980", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/cache@v5 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-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-c2eb9de7d0c9075c", "name": "Very large file: tests/e2e/search-map-list-sync.anon.spec.ts (1732 lines)", "shortDescription": {"text": "Very large file: tests/e2e/search-map-list-sync.anon.spec.ts (1732 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-99c811251618dbf5", "name": "Very large file: tests/e2e/journeys/list-map-sync.spec.ts (1390 lines)", "shortDescription": {"text": "Very large file: tests/e2e/journeys/list-map-sync.spec.ts (1390 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-d7e8232dec18ba58", "name": "Very large file: tests/e2e/journeys/03-search-advanced-journeys.spec.ts (1572 lines)", "shortDescription": {"text": "Very large file: tests/e2e/journeys/03-search-advanced-journeys.spec.ts (1572 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-ed9650a92316805a", "name": "Very large file: scripts/seed-e2e.js (1626 lines)", "shortDescription": {"text": "Very large file: scripts/seed-e2e.js (1626 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-886dc82a1cb549a7", "name": "Very large file: src/__tests__/api/listings-idor.test.ts (1687 lines)", "shortDescription": {"text": "Very large file: src/__tests__/api/listings-idor.test.ts (1687 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-e93fd1e20be79cae", "name": "Very large file: src/__tests__/components/Map.test.tsx (3088 lines)", "shortDescription": {"text": "Very large file: src/__tests__/components/Map.test.tsx (3088 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-7391ef5866c353a2", "name": "Very large file: src/__tests__/components/search/SearchBar/HomeSearchBar.test.tsx (1529 lines)", "shortDescription": {"text": "Very large file: src/__tests__/components/search/SearchBar/HomeSearchBar.test.tsx (1529 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-11cf6a6c62c28972", "name": "Very large file: src/__tests__/components/nearby/NearbyPlacesPanel.search-field-edge-cases.test.tsx (2072 lines)", "shortDescription": {"text": "Very large file: src/__tests__/components/nearby/NearbyPlacesPanel.search-field-edge-cases.test.tsx (2072 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-b08796760328d3dd", "name": "Very large file: src/__tests__/lib/search/search-v2-service.test.ts (2643 lines)", "shortDescription": {"text": "Very large file: src/__tests__/lib/search/search-v2-service.test.ts (2643 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-0d925da22b4eb5e3", "name": "Very large file: src/__tests__/actions/admin.test.ts (1726 lines)", "shortDescription": {"text": "Very large file: src/__tests__/actions/admin.test.ts (1726 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-197f98941adc79f7", "name": "Very large file: src/components/Map.tsx (4564 lines)", "shortDescription": {"text": "Very large file: src/components/Map.tsx (4564 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-e15bd8f7c34031b3", "name": "Very large file: src/app/listings/[id]/ListingPageClient.tsx (1564 lines)", "shortDescription": {"text": "Very large file: src/app/listings/[id]/ListingPageClient.tsx (1564 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-dd5175f6f323fc2c", "name": "Very large file: src/app/listings/create/CreateListingForm.tsx (1614 lines)", "shortDescription": {"text": "Very large file: src/app/listings/create/CreateListingForm.tsx (1614 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-6db03e592722dd0b", "name": "Very large file: src/lib/data.ts (1744 lines)", "shortDescription": {"text": "Very large file: src/lib/data.ts (1744 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-7902abe3e4e89ebf", "name": "Very large file: src/lib/search/search-doc-queries.ts (2445 lines)", "shortDescription": {"text": "Very large file: src/lib/search/search-doc-queries.ts (2445 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 517 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 160 placeholder/mock markers across 63 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9d79c4077342a7d0", "name": "Runtime service client appears to use placeholder configuration", "shortDescription": {"text": "Runtime service client appears to use placeholder configuration"}, "fullDescription": {"text": "A runtime source file appears to wire Supabase/Firebase/AI/payment-style clients to placeholder URLs, keys, or fallback values. In the Fable corpus this often means the UI/API shape is present while the backend service is not actually configured."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8fe3d3cb07b80ec6", "name": "Agent authority lacks a verifier contract: .claude/hooks.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/hooks.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-e2249215337089d9", "name": "Agent authority lacks a verifier contract: .claude/commands/agent-check.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/agent-check.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-8470b352b83413a6", "name": "Agent authority lacks a verifier contract: .claude/commands/handoff-gemini.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/handoff-gemini.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-7ffe81c515411d85", "name": "Agent instruction contains unpinned remote install: .claude/commands/handoff-gemini.md", "shortDescription": {"text": "Agent instruction contains unpinned remote install: .claude/commands/handoff-gemini.md"}, "fullDescription": {"text": "Remote install commands in agent instructions are a supply-chain risk, especially when an agent can execute shell commands."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f84e0d8362f62407", "name": "Agent authority lacks a verifier contract: .claude/commands/rs-review.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/rs-review.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-c1287c830b9fbc0f", "name": "Agent authority lacks a verifier contract: .claude/commands/mcp-check.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/mcp-check.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-4625138db4687f5c", "name": "Agent instruction contains unpinned remote install: .claude/commands/mcp-check.md", "shortDescription": {"text": "Agent instruction contains unpinned remote install: .claude/commands/mcp-check.md"}, "fullDescription": {"text": "Remote install commands in agent instructions are a supply-chain risk, especially when an agent can execute shell commands."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-309858da077d32ce", "name": "Agent instruction contains unpinned remote install: .claude/commands/handoff-codex.md", "shortDescription": {"text": "Agent instruction contains unpinned remote install: .claude/commands/handoff-codex.md"}, "fullDescription": {"text": "Remote install commands in agent instructions are a supply-chain risk, especially when an agent can execute shell commands."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e4ca4a17cd052610", "name": "Agent authority lacks a verifier contract: .claude/commands/sp.plan.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/sp.plan.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-6a666dcc7e6e641e", "name": "Agent authority lacks a verifier contract: .claude/commands/sp.taskstoissues.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/sp.taskstoissues.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-7bd7ea43370d9ff3", "name": "Agent authority lacks a verifier contract: .claude/commands/skill-check.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/skill-check.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-1aa51d0cbb9b1a8c", "name": "Agent instruction contains unpinned remote install: .claude/commands/project-init.md", "shortDescription": {"text": "Agent instruction contains unpinned remote install: .claude/commands/project-init.md"}, "fullDescription": {"text": "Remote install commands in agent instructions are a supply-chain risk, especially when an agent can execute shell commands."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e00c2c338ea2a6f8", "name": "Agent authority lacks a verifier contract: .claude/commands/explore-flow.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/explore-flow.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-268ba3da6c012fe4", "name": "Agent authority lacks a verifier contract: .claude/commands/ultra-think.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/ultra-think.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-fe0e6afa36d25e72", "name": "Agent authority lacks a verifier contract: .claude/agents/roomshare-specialist.yml", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/agents/roomshare-specialist.yml"}, "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-3fc2951d38a0482b", "name": "Agent authority lacks a verifier contract: .claude/agents/nextjs-developer.yml", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/agents/nextjs-developer.yml"}, "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-71c90b480dada45b", "name": "Agent instruction/config may expose a secret: .claude/agents/mcp-expert.md", "shortDescription": {"text": "Agent instruction/config may expose a secret: .claude/agents/mcp-expert.md"}, "fullDescription": {"text": "Agent-facing files are routinely pasted into LLM/tool contexts. Move literal tokens, keys, and passwords into a secret manager or document them as placeholders only."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0872094258b6e34a", "name": "Agent instruction contains unpinned remote install: .claude/agents/mcp-expert.md", "shortDescription": {"text": "Agent instruction contains unpinned remote install: .claude/agents/mcp-expert.md"}, "fullDescription": {"text": "Remote install commands in agent instructions are a supply-chain risk, especially when an agent can execute shell commands."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8b98fef3fd02ff69", "name": "Agent instruction/config may expose a secret: .claude/agents/claude-md-expert.md", "shortDescription": {"text": "Agent instruction/config may expose a secret: .claude/agents/claude-md-expert.md"}, "fullDescription": {"text": "Agent-facing files are routinely pasted into LLM/tool contexts. Move literal tokens, keys, and passwords into a secret manager or document them as placeholders only."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-80f74f50afe5ac67", "name": "Agent authority lacks a verifier contract: .claude/agents/backend-architect.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/agents/backend-architect.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-c36d060b870f1498", "name": "Agent authority lacks a verifier contract: .claude/agents/react-specialist.yml", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/agents/react-specialist.yml"}, "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-a22c27e50cff34ec", "name": "Agent authority lacks a verifier contract: .claude/skills/edgecase-plan/taxonomy.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/edgecase-plan/taxonomy.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-a0085a914e8431fd", "name": "Commented-code block (5 lines) in jest.setup.js:219", "shortDescription": {"text": "Commented-code block (5 lines) in jest.setup.js:219"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e4b19e4cf47bbdd0", "name": "Commented-code block (5 lines) in tests/e2e/search-map-list-sync.anon.spec.ts:111", "shortDescription": {"text": "Commented-code block (5 lines) in tests/e2e/search-map-list-sync.anon.spec.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-bf0f90ecc85af885", "name": "Commented-code block (5 lines) in tests/e2e/home-a11y-regression.anon.spec.ts:89", "shortDescription": {"text": "Commented-code block (5 lines) in tests/e2e/home-a11y-regression.anon.spec.ts:89"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2ff5792ce2034094", "name": "Commented-code block (5 lines) in tests/e2e/map-markers.anon.spec.ts:882", "shortDescription": {"text": "Commented-code block (5 lines) in tests/e2e/map-markers.anon.spec.ts:882"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-26eff969260085ab", "name": "Commented-code block (5 lines) in tests/e2e/map-errors-a11y.anon.spec.ts:317", "shortDescription": {"text": "Commented-code block (5 lines) in tests/e2e/map-errors-a11y.anon.spec.ts:317"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8501c9f0d13f8d8d", "name": "Commented-code block (5 lines) in tests/e2e/mobile-interactions.anon.spec.ts:145", "shortDescription": {"text": "Commented-code block (5 lines) in tests/e2e/mobile-interactions.anon.spec.ts:145"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6ae6f6c34790d233", "name": "Commented-code block (5 lines) in tests/e2e/search-smoke.spec.ts:20", "shortDescription": {"text": "Commented-code block (5 lines) in tests/e2e/search-smoke.spec.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-6d4037ef40511d99", "name": "Commented-code block (7 lines) in tests/e2e/search-v2-fallback.spec.ts:209", "shortDescription": {"text": "Commented-code block (7 lines) in tests/e2e/search-v2-fallback.spec.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-689e87a1003e779d", "name": "Commented-code block (6 lines) in tests/e2e/search-a11y.anon.spec.ts:96", "shortDescription": {"text": "Commented-code block (6 lines) in tests/e2e/search-a11y.anon.spec.ts:96"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-84652ec84d2d3937", "name": "Commented-code block (5 lines) in tests/e2e/search-url-deeplink.spec.ts:159", "shortDescription": {"text": "Commented-code block (5 lines) in tests/e2e/search-url-deeplink.spec.ts:159"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-20082eb98a78f430", "name": "Commented-code block (5 lines) in tests/e2e/search-url-invalid-params.spec.ts:202", "shortDescription": {"text": "Commented-code block (5 lines) in tests/e2e/search-url-invalid-params.spec.ts:202"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b017a1516a6dc815", "name": "Commented-code block (5 lines) in tests/e2e/notifications/notifications.spec.ts:87", "shortDescription": {"text": "Commented-code block (5 lines) in tests/e2e/notifications/notifications.spec.ts:87"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-be0f55afda729bd6", "name": "Commented-code block (5 lines) in tests/e2e/session-expiry/session-expiry-multistep.spec.ts:26", "shortDescription": {"text": "Commented-code block (5 lines) in tests/e2e/session-expiry/session-expiry-multistep.spec.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-a932ad936da52832", "name": "Commented-code block (5 lines) in tests/e2e/journeys/list-map-sync.spec.ts:655", "shortDescription": {"text": "Commented-code block (5 lines) in tests/e2e/journeys/list-map-sync.spec.ts:655"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a7627b381b2f33c2", "name": "Commented-code block (6 lines) in tests/e2e/journeys/02-search-critical-journeys.spec.ts:67", "shortDescription": {"text": "Commented-code block (6 lines) in tests/e2e/journeys/02-search-critical-journeys.spec.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-04e11502c6e37378", "name": "Commented-code block (17 lines) in tests/e2e/auth/verify.spec.ts:83", "shortDescription": {"text": "Commented-code block (17 lines) in tests/e2e/auth/verify.spec.ts:83"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b39bb29f7a0778c3", "name": "Commented-code block (5 lines) in tests/e2e/helpers/filter-helpers.ts:463", "shortDescription": {"text": "Commented-code block (5 lines) in tests/e2e/helpers/filter-helpers.ts:463"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ffa3c2d378199c42", "name": "Commented-code block (7 lines) in tests/e2e/helpers/pagination-mock-factory.ts:288", "shortDescription": {"text": "Commented-code block (7 lines) in tests/e2e/helpers/pagination-mock-factory.ts:288"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cd8c88513f87b5aa", "name": "Commented-code block (5 lines) in tests/e2e/semantic-search/semantic-search-resilience.anon.spec.ts:91", "shortDescription": {"text": "Commented-code block (5 lines) in tests/e2e/semantic-search/semantic-search-resilience.anon.spec.ts:91"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2b79102b43976944", "name": "Commented-code block (5 lines) in tests/e2e/messaging/messaging-realtime.spec.ts:81", "shortDescription": {"text": "Commented-code block (5 lines) in tests/e2e/messaging/messaging-realtime.spec.ts:81"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cc0eedcbff8837de", "name": "Commented-code block (8 lines) in tests/e2e/pagination/pagination-state.spec.ts:313", "shortDescription": {"text": "Commented-code block (8 lines) in tests/e2e/pagination/pagination-state.spec.ts:313"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ddcbf287e6986ac5", "name": "Commented-code block (7 lines) in tests/e2e/pagination/pagination-core.spec.ts:154", "shortDescription": {"text": "Commented-code block (7 lines) in tests/e2e/pagination/pagination-core.spec.ts:154"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-47e1923940658929", "name": "Commented-code block (7 lines) in scripts/seed-demo.js:369", "shortDescription": {"text": "Commented-code block (7 lines) in scripts/seed-demo.js: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-cfd41d4ae031de3a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/generate-map-style.ts:101", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/generate-map-style.ts:101"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0501ed0cdb768046", "name": "Commented-code block (8 lines) in scripts/run-dev.js:118", "shortDescription": {"text": "Commented-code block (8 lines) in scripts/run-dev.js:118"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9fe7cd8749771b81", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/fix-listing-coords.ts:25", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/fix-listing-coords.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-9bbefcb20b39ef01", "name": "Commented-code block (5 lines) in scripts/seed-e2e.js:1500", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/seed-e2e.js:1500"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e231d0d56d3e546a", "name": "Legacy-named symbol `here_geocode_v1` in scripts/lib/geocoding-providers.ts:179", "shortDescription": {"text": "Legacy-named symbol `here_geocode_v1` in scripts/lib/geocoding-providers.ts:179"}, "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-476be31a55d8f2f9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/__tests__/middleware/suspension.test.ts:340", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/__tests__/middleware/suspension.test.ts:340"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6eac544670ee9d97", "name": "Commented-code block (5 lines) in src/__tests__/api/metrics.test.ts:491", "shortDescription": {"text": "Commented-code block (5 lines) in src/__tests__/api/metrics.test.ts:491"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-21678caf9c120b60", "name": "Commented-code block (6 lines) in src/__tests__/api/listings-post.test.ts:552", "shortDescription": {"text": "Commented-code block (6 lines) in src/__tests__/api/listings-post.test.ts:552"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f6f5b967ecb5f41d", "name": "Commented-code block (6 lines) in src/__tests__/api/cron/refresh-search-docs/compute-recommended-score.test.ts:147", "shortDescription": {"text": "Commented-code block (6 lines) in src/__tests__/api/cron/refresh-search-docs/compute-recommended-score.test.ts:147"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9437f67b6de004aa", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/__tests__/api/nearby/route.test.ts:43", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/__tests__/api/nearby/route.test.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-bd5898206e5b3a65", "name": "Commented-code block (5 lines) in src/__tests__/performance/filter-performance.test.ts:611", "shortDescription": {"text": "Commented-code block (5 lines) in src/__tests__/performance/filter-performance.test.ts:611"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cc5831feec197a71", "name": "Commented-code block (5 lines) in src/__tests__/components/PersistentMapWrapper.networking.test.tsx:718", "shortDescription": {"text": "Commented-code block (5 lines) in src/__tests__/components/PersistentMapWrapper.networking.test.tsx:718"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-38a0b5ccda0ca2be", "name": "Commented-code block (5 lines) in src/__tests__/components/search/SearchBar/SearchBar.test.tsx:368", "shortDescription": {"text": "Commented-code block (5 lines) in src/__tests__/components/search/SearchBar/SearchBar.test.tsx:368"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-04c75ccad6fd6fab", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/__tests__/components/nearby/NearbyPlacesMap.xss.test.ts:144", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/__tests__/components/nearby/NearbyPlacesMap.xss.test.ts:144"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-41b1584f498ff584", "name": "Commented-code block (5 lines) in src/__tests__/lib/create-listing-schema.test.ts:772", "shortDescription": {"text": "Commented-code block (5 lines) in src/__tests__/lib/create-listing-schema.test.ts:772"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1629b0e6542a6487", "name": "Commented-code block (6 lines) in src/__tests__/lib/search/hybrid-count-threshold.test.ts:272", "shortDescription": {"text": "Commented-code block (6 lines) in src/__tests__/lib/search/hybrid-count-threshold.test.ts:272"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-13f1144d5e0a3f7e", "name": "Commented-code block (6 lines) in src/__tests__/lib/search/query-hash-semantic-equivalence.test.ts:227", "shortDescription": {"text": "Commented-code block (6 lines) in src/__tests__/lib/search/query-hash-semantic-equivalence.test.ts:227"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1839ccc02454e193", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/__tests__/lib/embeddings/images.test.ts:53", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/__tests__/lib/embeddings/images.test.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-d4a2a87c0632b9ba", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/__tests__/hooks/useFacets.test.ts:37", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/__tests__/hooks/useFacets.test.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-d109fe20905228ea", "name": "Commented-code block (7 lines) in src/__tests__/hooks/useMediaQuery.test.ts:66", "shortDescription": {"text": "Commented-code block (7 lines) in src/__tests__/hooks/useMediaQuery.test.ts:66"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4669c9a2e4ce07e1", "name": "Commented-code block (6 lines) in src/__tests__/hooks/useMapPreference.test.ts:165", "shortDescription": {"text": "Commented-code block (6 lines) in src/__tests__/hooks/useMapPreference.test.ts:165"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6d9eb3f44efb16d8", "name": "Commented-code block (5 lines) in src/__tests__/edge-cases/postgis-spatial-edge-cases.test.ts:628", "shortDescription": {"text": "Commented-code block (5 lines) in src/__tests__/edge-cases/postgis-spatial-edge-cases.test.ts:628"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8bd936173f28149f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/__tests__/edge-cases/postgis-spatial-edge-cases.test.ts:283", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/__tests__/edge-cases/postgis-spatial-edge-cases.test.ts:283"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-39d513eb801930ca", "name": "Commented-code block (5 lines) in src/__tests__/fixes/v2-map-stale-nearmatches.test.tsx:37", "shortDescription": {"text": "Commented-code block (5 lines) in src/__tests__/fixes/v2-map-stale-nearmatches.test.tsx:37"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8facd5cbb77332f7", "name": "Commented-code block (5 lines) in src/types/nearby.ts:110", "shortDescription": {"text": "Commented-code block (5 lines) in src/types/nearby.ts:110"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1f2c610f4dc6a798", "name": "Commented-code block (5 lines) in src/components/SearchViewToggle.tsx:129", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/SearchViewToggle.tsx:129"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9c5bc33833dd7279", "name": "Commented-code block (5 lines) in src/components/PersistentMapWrapper.tsx:1209", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/PersistentMapWrapper.tsx:1209"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c342ad049660f50b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/PersistentMapWrapper.tsx:433", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/PersistentMapWrapper.tsx:433"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-751581eda3b56038", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/ServiceWorkerRegistration.tsx:127", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/ServiceWorkerRegistration.tsx:127"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-19cccf0ee82ecd78", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/MessagesPageClient.tsx:398", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/MessagesPageClient.tsx:398"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6db23343430d92ed", "name": "Commented-code block (5 lines) in src/components/listings/ImageUploader.tsx:210", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/listings/ImageUploader.tsx:210"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2e1550c47dc1b269", "name": "Commented-code block (6 lines) in src/components/search/MobileBottomSheet.tsx:358", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/search/MobileBottomSheet.tsx:358"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-68d339f29a521435", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/search/SearchResultsClient.tsx:107", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/search/SearchResultsClient.tsx:107"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7a98adc1875cb025", "name": "Commented-code block (5 lines) in src/components/search/V2MapDataSetter.tsx:26", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/search/V2MapDataSetter.tsx: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-4e2dfdb4d5d9a35d", "name": "Commented-code block (6 lines) in src/components/search/SearchBar/useSearchBarState.ts:129", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/search/SearchBar/useSearchBarState.ts:129"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7af9e5ffeaf43863", "name": "Commented-code block (5 lines) in src/app/api/listings/[id]/route.ts:958", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/listings/[id]/route.ts:958"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-43c2498e3352aac8", "name": "Commented-code block (5 lines) in src/app/api/search/facets/route.ts:467", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/search/facets/route.ts:467"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ed860ea8c5630763", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/cron/daily-maintenance/route.ts:155", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/cron/daily-maintenance/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-4316a7d6102453cc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/listings/[id]/edit/EditListingForm.tsx:396", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/listings/[id]/edit/EditListingForm.tsx:396"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-06aeb59f514c2e50", "name": "Commented-code block (7 lines) in src/app/search/page.tsx:385", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/search/page.tsx:385"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-44c4c17a49d7b476", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/verify/VerificationForm.tsx:66", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/verify/VerificationForm.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-4b9280a159f0cddc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/messages/[id]/ChatWindow.tsx:352", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/messages/[id]/ChatWindow.tsx:352"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f8f7ad75b7cca76c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/turnstile.ts:71", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/turnstile.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-cf325d33596d350a", "name": "Commented-code block (5 lines) in src/lib/search-alerts.ts:765", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/search-alerts.ts:765"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-aa1741c871f7ffb1", "name": "Commented-code block (5 lines) in src/lib/idempotency.ts:138", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/idempotency.ts:138"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-379972a6feaff3d0", "name": "Commented-code block (5 lines) in src/lib/search-types.ts:266", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/search-types.ts:266"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a5f43a2b6b16d612", "name": "Commented-code block (6 lines) in src/lib/prisma.ts:14", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/prisma.ts:14"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5055e2486ce878b7", "name": "Commented-code block (5 lines) in src/lib/listings/canonical-inventory.ts:254", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/listings/canonical-inventory.ts:254"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4ea730472af6c569", "name": "Commented-code block (5 lines) in src/lib/search/facet-where.ts:40", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/search/facet-where.ts:40"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cae12236ddd65e10", "name": "Commented-code block (8 lines) in src/lib/search/search-doc-queries.ts:656", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/search/search-doc-queries.ts:656"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ddee5ce9f1731e07", "name": "Legacy-named symbol `hadLegacy` in src/hooks/useRecentSearches.ts:186", "shortDescription": {"text": "Legacy-named symbol `hadLegacy` in src/hooks/useRecentSearches.ts:186"}, "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-1c02d925d88934b4", "name": "Commented-code block (6 lines) in src/hooks/useBatchedFilters.ts:404", "shortDescription": {"text": "Commented-code block (6 lines) in src/hooks/useBatchedFilters.ts:404"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b519b98ff15e1569", "name": "126 env vars used in code but missing from .env.example", "shortDescription": {"text": "126 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `ADDRESS_SUGGESTION_TOKEN_SECRET`, `AUTH_SECRET`, `AUTH_URL`, `CI`, `CLAUDE_PROJECT_DIR`, `DISABLE_RATE_LIMIT_DEV_MULTIPLIER`, `E2E_DISABLE_RATE_LIMIT`, `E2E_ENABLE_DEDUPE_FEATURES` + 118 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}}, {"id": "scanner-be46ea126aa5d8dc", "name": "Near-duplicate function bodies in 3 places", "shortDescription": {"text": "Near-duplicate function bodies in 3 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\n.claude/skills/senior-backend/scripts/api_load_tester.py:run, .claude/skills/senior-backend/scripts/api_scaffolder.py:run, .claude/skills/senior-backend/scripts/database_migration_tool.py:run\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/20588"}, "properties": {"repository": "Suryateja-byte/Roomshare", "repoUrl": "https://github.com/Suryateja-byte/Roomshare", "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-357c088c9dad2b63", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 replace.js:64"}, "properties": {"repobilityId": "cc7c951a289b43f1", "scanner": "scanner-primary", "fingerprint": "357c088c9dad2b63", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d98ac9ddf6b7f090", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 verify.js:5"}, "properties": {"repobilityId": "c6a48de1cbcba2c9", "scanner": "scanner-primary", "fingerprint": "d98ac9ddf6b7f090", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a7a81e7b22aa98eb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/search-a11y-keyboard.anon.spec.ts:164"}, "properties": {"repobilityId": "18ccfb1c0c64d4e4", "scanner": "scanner-primary", "fingerprint": "a7a81e7b22aa98eb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cd7f86051d579c0b", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 tests/e2e/map-markers.anon.spec.ts:920"}, "properties": {"repobilityId": "ceac91ba525caf6c", "scanner": "scanner-primary", "fingerprint": "cd7f86051d579c0b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-b7d0ca046802faba", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/map-filters.spec.ts:266"}, "properties": {"repobilityId": "6f1c874116332346", "scanner": "scanner-primary", "fingerprint": "b7d0ca046802faba", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ea56ba700199cd06", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/search-a11y-screenreader.anon.spec.ts:134"}, "properties": {"repobilityId": "b8a2723f8f1c99f5", "scanner": "scanner-primary", "fingerprint": "ea56ba700199cd06", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d99d29af364b4ed7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/search-v2-fallback.spec.ts:199"}, "properties": {"repobilityId": "528defad304a1c8a", "scanner": "scanner-primary", "fingerprint": "d99d29af364b4ed7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d195b7ea3fa73b12", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/search-a11y.anon.spec.ts:148"}, "properties": {"repobilityId": "814169ebf8ffed47", "scanner": "scanner-primary", "fingerprint": "d195b7ea3fa73b12", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4735f1c623a64b1d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/search-loading-states.spec.ts:85"}, "properties": {"repobilityId": "159d91e88834a8de", "scanner": "scanner-primary", "fingerprint": "4735f1c623a64b1d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8ecced3f3c72a40a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/search-p0-smoke.anon.spec.ts:746"}, "properties": {"repobilityId": "220b627228071c19", "scanner": "scanner-primary", "fingerprint": "8ecced3f3c72a40a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8f98604768cc2521", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/search-a11y-filters.anon.spec.ts:204"}, "properties": {"repobilityId": "d8257061f6d9f020", "scanner": "scanner-primary", "fingerprint": "8f98604768cc2521", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d9f259a18e342a6a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/global-setup.ts:9"}, "properties": {"repobilityId": "be9e82038c157643", "scanner": "scanner-primary", "fingerprint": "d9f259a18e342a6a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bc32b0da534d9631", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/settings/settings.spec.ts:196"}, "properties": {"repobilityId": "a252a915da7c6d65", "scanner": "scanner-primary", "fingerprint": "bc32b0da534d9631", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e4a788ad930225a2", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 tests/e2e/session-expiry/session-expiry-resilience.spec.ts:136"}, "properties": {"repobilityId": "5fc4c3d7eefd495c", "scanner": "scanner-primary", "fingerprint": "e4a788ad930225a2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-be009c2988f35cba", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 tests/e2e/session-expiry/session-expiry-multistep.spec.ts:26"}, "properties": {"repobilityId": "3e8594670893597c", "scanner": "scanner-primary", "fingerprint": "be009c2988f35cba", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-1644a71c63e11880", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 tests/e2e/session-expiry/session-expiry-forms.spec.ts:32"}, "properties": {"repobilityId": "df2e5c5e31485ccf", "scanner": "scanner-primary", "fingerprint": "1644a71c63e11880", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-f1e91375e741ddf2", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 tests/e2e/session-expiry/session-expiry-polling.spec.ts:28"}, "properties": {"repobilityId": "3bd09bda2d907a4e", "scanner": "scanner-primary", "fingerprint": "f1e91375e741ddf2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-5496f456c4f49143", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/journeys/list-map-sync.spec.ts:98"}, "properties": {"repobilityId": "5ebcc9db615cf7b5", "scanner": "scanner-primary", "fingerprint": "5496f456c4f49143", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-489fcd1c06eb2f47", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 tests/e2e/journeys/22-messaging-conversations.spec.ts:132"}, "properties": {"repobilityId": "156bf98eec1b77a7", "scanner": "scanner-primary", "fingerprint": "489fcd1c06eb2f47", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-2c4317ebfe331367", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/journeys/search-pending-state.spec.ts:148"}, "properties": {"repobilityId": "7ed9cdea268d8bb4", "scanner": "scanner-primary", "fingerprint": "2c4317ebfe331367", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cf6d15b3b69a1be3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/journeys/a11y-audit.anon.spec.ts:77"}, "properties": {"repobilityId": "650d245cd8dd3d3e", "scanner": "scanner-primary", "fingerprint": "cf6d15b3b69a1be3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7530b5b232ec8f6d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/journeys/search-v2-ui.spec.ts:98"}, "properties": {"repobilityId": "eb2ade3c6d388583", "scanner": "scanner-primary", "fingerprint": "7530b5b232ec8f6d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ec567d2f9e0e50fd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/journeys/30-critical-simulations.spec.ts:165"}, "properties": {"repobilityId": "7c18bd4b4956d1ae", "scanner": "scanner-primary", "fingerprint": "ec567d2f9e0e50fd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f072afa8927c9164", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/journeys/map-pin-tiering.spec.ts:71"}, "properties": {"repobilityId": "23f801e1620119c3", "scanner": "scanner-primary", "fingerprint": "f072afa8927c9164", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1c6492a3edb5efe4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/performance/page-weight-budget.spec.ts:38"}, "properties": {"repobilityId": "5c0c7ce8162d6952", "scanner": "scanner-primary", "fingerprint": "1c6492a3edb5efe4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-69a0740fa4385c04", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/performance/cls-audit.spec.ts:92"}, "properties": {"repobilityId": "4931440de4fd8893", "scanner": "scanner-primary", "fingerprint": "69a0740fa4385c04", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ec894ebcdd9cfc14", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/performance/search-interaction-perf.spec.ts:199"}, "properties": {"repobilityId": "25f54ee733645de1", "scanner": "scanner-primary", "fingerprint": "ec894ebcdd9cfc14", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3049cda03675f3e1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/mobile/mobile-messages.spec.ts:312"}, "properties": {"repobilityId": "120852237da678a0", "scanner": "scanner-primary", "fingerprint": "3049cda03675f3e1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-be3262e80163a77d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/helpers/test-utils.ts:386"}, "properties": {"repobilityId": "f08e0e99bfdc6d11", "scanner": "scanner-primary", "fingerprint": "be3262e80163a77d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b8e162740067bed1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/helpers/stacked-marker-helpers.ts:101"}, "properties": {"repobilityId": "fb57c9854dd15fed", "scanner": "scanner-primary", "fingerprint": "b8e162740067bed1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bd4385e84e9a4a4c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/helpers/a11y-helpers.ts:142"}, "properties": {"repobilityId": "98633851c4a3142b", "scanner": "scanner-primary", "fingerprint": "bd4385e84e9a4a4c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-525b749042ff3e1b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/helpers/pin-tiering-helpers.ts:110"}, "properties": {"repobilityId": "371b5ac7f912a2ee", "scanner": "scanner-primary", "fingerprint": "525b749042ff3e1b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d63872aa4e664274", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/helpers/data-helpers.ts:216"}, "properties": {"repobilityId": "0956fef99f53fe5b", "scanner": "scanner-primary", "fingerprint": "d63872aa4e664274", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b8c3568a7cbf95a2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/messaging/messaging-perf.spec.ts:78"}, "properties": {"repobilityId": "6171de6bcecea968", "scanner": "scanner-primary", "fingerprint": "b8c3568a7cbf95a2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-de8a6d9761589daa", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/a11y/axe-page-audit.auth.spec.ts:176"}, "properties": {"repobilityId": "e0f7ae12fe02b9b9", "scanner": "scanner-primary", "fingerprint": "de8a6d9761589daa", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8c108650b95aeb0b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/a11y/axe-page-audit.anon.spec.ts:161"}, "properties": {"repobilityId": "79759d99cc02e317", "scanner": "scanner-primary", "fingerprint": "8c108650b95aeb0b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b00df9bdc980d5b0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/a11y/listing-detail-a11y.spec.ts:109"}, "properties": {"repobilityId": "25b1aac1b7db586e", "scanner": "scanner-primary", "fingerprint": "b00df9bdc980d5b0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-88eb0e4fe5728efe", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/a11y/axe-dynamic-states.spec.ts:330"}, "properties": {"repobilityId": "8e1244da75b04d9b", "scanner": "scanner-primary", "fingerprint": "88eb0e4fe5728efe", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2e83751d64ebbbd9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/search-filters/filter-near-matches.anon.spec.ts:157"}, "properties": {"repobilityId": "40d2c0c83a36ad5b", "scanner": "scanner-primary", "fingerprint": "2e83751d64ebbbd9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4abfcfeeb8a1552a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-demo.js:575"}, "properties": {"repobilityId": "3a7b23b6393fd6d9", "scanner": "scanner-primary", "fingerprint": "4abfcfeeb8a1552a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b4073ca9724b51cf", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-coords.ts:4"}, "properties": {"repobilityId": "448ce9326db4dc92", "scanner": "scanner-primary", "fingerprint": "b4073ca9724b51cf", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a4967a3a34169686", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-map-style.ts:147"}, "properties": {"repobilityId": "2b1aaeeda66df697", "scanner": "scanner-primary", "fingerprint": "a4967a3a34169686", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-80991574bbe75610", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/scan-public-payload-pii.js:174"}, "properties": {"repobilityId": "f2c6230608a114b4", "scanner": "scanner-primary", "fingerprint": "80991574bbe75610", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1c3c18ebab2abadc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/debug-unread.ts:8"}, "properties": {"repobilityId": "04e8f1488795281a", "scanner": "scanner-primary", "fingerprint": "1c3c18ebab2abadc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4c5976e425e53489", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-embeddings.ts:53"}, "properties": {"repobilityId": "bf4662e64bf6c75a", "scanner": "scanner-primary", "fingerprint": "4c5976e425e53489", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4c3f467477b31bb7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/setup-e2e-user.js:36"}, "properties": {"repobilityId": "608c6dc67760c527", "scanner": "scanner-primary", "fingerprint": "4c3f467477b31bb7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b1e2139e8d7a6483", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-test-listings.js:1015"}, "properties": {"repobilityId": "0bea08717ad224e2", "scanner": "scanner-primary", "fingerprint": "b1e2139e8d7a6483", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e481aede19c8ada8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/geocode-accuracy-extended.ts:246"}, "properties": {"repobilityId": "8b7099e624aaf835", "scanner": "scanner-primary", "fingerprint": "e481aede19c8ada8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1e25b7d60ebfb39d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/geocode-accuracy-check.ts:90"}, "properties": {"repobilityId": "559e1b7e2fe31373", "scanner": "scanner-primary", "fingerprint": "1e25b7d60ebfb39d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-34f238d1080f0ae1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-listings.js:188"}, "properties": {"repobilityId": "8673a651d3da98b9", "scanner": "scanner-primary", "fingerprint": "34f238d1080f0ae1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-947a9d83e1267159", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/embedding-shadow-swap.ts:74"}, "properties": {"repobilityId": "78864763573f4ffd", "scanner": "scanner-primary", "fingerprint": "947a9d83e1267159", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-21ec0815d738d62a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-listing-coords.ts:24"}, "properties": {"repobilityId": "40073581041fb19c", "scanner": "scanner-primary", "fingerprint": "21ec0815d738d62a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-db0173db13c60ca9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verify-email.js:11"}, "properties": {"repobilityId": "93a7a18155e0ea6f", "scanner": "scanner-primary", "fingerprint": "db0173db13c60ca9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fd8ab9893fb312ee", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/update-images.js:34"}, "properties": {"repobilityId": "f328b08238008886", "scanner": "scanner-primary", "fingerprint": "fd8ab9893fb312ee", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-df4b43d0d9f657ab", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-e2e.js:548"}, "properties": {"repobilityId": "8afc85edc2f554c6", "scanner": "scanner-primary", "fingerprint": "df4b43d0d9f657ab", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9d445c6f31c91b01", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/validate-filter-scenarios.js:19"}, "properties": {"repobilityId": "a60622c042ebe417", "scanner": "scanner-primary", "fingerprint": "9d445c6f31c91b01", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-683c1b5649258fc3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-geocoding.ts:4"}, "properties": {"repobilityId": "a6989efe5299b1a9", "scanner": "scanner-primary", "fingerprint": "683c1b5649258fc3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-27b9df5b4c805885", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-staging.js:606"}, "properties": {"repobilityId": "4465f911a55c57b0", "scanner": "scanner-primary", "fingerprint": "27b9df5b4c805885", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3c0c279169f7768b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/cfm/backfill-canonical-inventory.ts:415"}, "properties": {"repobilityId": "7c7555312fd273ba", "scanner": "scanner-primary", "fingerprint": "3c0c279169f7768b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3112f7acdb8d90f3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/cfm/backfill-normalized-address.ts:111"}, "properties": {"repobilityId": "8d640f0943d3db6e", "scanner": "scanner-primary", "fingerprint": "3112f7acdb8d90f3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7bf996077ea0ebba", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 public/sw.js:25"}, "properties": {"repobilityId": "19ecb22d48da856c", "scanner": "scanner-primary", "fingerprint": "7bf996077ea0ebba", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b27f14de55dfc4c8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 output/webkit_debug.js:49"}, "properties": {"repobilityId": "602cfc5ff2483e83", "scanner": "scanner-primary", "fingerprint": "b27f14de55dfc4c8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0aca53ca20edb0e1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/__tests__/.ci-filter-validation.test.ts:10"}, "properties": {"repobilityId": "0f3c1eb325561818", "scanner": "scanner-primary", "fingerprint": "0aca53ca20edb0e1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fc2db684dcda81be", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/scripts/simulate-user-flow.ts:24"}, "properties": {"repobilityId": "f6a9e079fbae44ce", "scanner": "scanner-primary", "fingerprint": "fc2db684dcda81be", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1ce7b12e288bcf00", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/scripts/verify_listing.ts:12"}, "properties": {"repobilityId": "f071a61298669162", "scanner": "scanner-primary", "fingerprint": "1ce7b12e288bcf00", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-995c52a447acc0ec", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/scripts/inspect-search-quality.ts:32"}, "properties": {"repobilityId": "490fd3b49ca60399", "scanner": "scanner-primary", "fingerprint": "995c52a447acc0ec", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d3807f8f80d5f4e2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/scripts/test-db.ts:6"}, "properties": {"repobilityId": "009d7d4e0db20586", "scanner": "scanner-primary", "fingerprint": "d3807f8f80d5f4e2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-dc31abc73f74840c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/scripts/backfill-search-docs.ts:43"}, "properties": {"repobilityId": "88bdee63f7347580", "scanner": "scanner-primary", "fingerprint": "dc31abc73f74840c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a044884e26a89d9f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/scripts/migrate-images-to-supabase.ts:40"}, "properties": {"repobilityId": "d7dcf98b101807bc", "scanner": "scanner-primary", "fingerprint": "a044884e26a89d9f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-234b7515e7e93e54", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/scripts/resync-embeddings.ts:24"}, "properties": {"repobilityId": "d713eb1f5636748c", "scanner": "scanner-primary", "fingerprint": "234b7515e7e93e54", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-72a6d91091ee8157", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/JsonLd.tsx:32"}, "properties": {"repobilityId": "63d1555414765036", "scanner": "scanner-primary", "fingerprint": "72a6d91091ee8157", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-b98c4c16d9255961", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/CollapsedMobileSearch.tsx:147"}, "properties": {"repobilityId": "0d6314d69b6c3139", "scanner": "scanner-primary", "fingerprint": "b98c4c16d9255961", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4f41427eb103546b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/HostIdentityBadge.tsx:40"}, "properties": {"repobilityId": "7274f87637a9f721", "scanner": "scanner-primary", "fingerprint": "4f41427eb103546b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-60fe7d1f05b5a7b9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/SearchHeaderWrapper.tsx:435"}, "properties": {"repobilityId": "280e7bf42d5be8c2", "scanner": "scanner-primary", "fingerprint": "60fe7d1f05b5a7b9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d16bf5785863a183", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/ServiceWorkerRegistration.tsx:335"}, "properties": {"repobilityId": "30eddfa944f815c1", "scanner": "scanner-primary", "fingerprint": "d16bf5785863a183", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c313c05bf382653a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/FeaturedListingsClient.tsx:295"}, "properties": {"repobilityId": "5b4ec3f46f6f1346", "scanner": "scanner-primary", "fingerprint": "c313c05bf382653a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bcdc6a99e5aa3344", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ProfileCompletionIndicator.tsx:220"}, "properties": {"repobilityId": "974e997c9f5e9337", "scanner": "scanner-primary", "fingerprint": "bcdc6a99e5aa3344", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bcc27906694d8404", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/LocationSearchInput.tsx:972"}, "properties": {"repobilityId": "54aa4dad7672eee2", "scanner": "scanner-primary", "fingerprint": "bcc27906694d8404", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-44a05ec2f60d71a1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/NavbarClient.tsx:645"}, "properties": {"repobilityId": "cb3449258d198dd1", "scanner": "scanner-primary", "fingerprint": "44a05ec2f60d71a1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-abf77e89e4037a03", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/WebVitals.tsx:45"}, "properties": {"repobilityId": "821e971213b4685e", "scanner": "scanner-primary", "fingerprint": "abf77e89e4037a03", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-604f05ef79615706", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/neighborhood/NeighborhoodPlaceList.tsx:231"}, "properties": {"repobilityId": "8e7f252a9b73f4f4", "scanner": "scanner-primary", "fingerprint": "604f05ef79615706", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e925b769329e9a17", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/listings/ListingCard.tsx:643"}, "properties": {"repobilityId": "8485cefec23e67f9", "scanner": "scanner-primary", "fingerprint": "e925b769329e9a17", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e9551c4b0692f63b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/listings/AddressAutocompleteInput.tsx:722"}, "properties": {"repobilityId": "382021d668842354", "scanner": "scanner-primary", "fingerprint": "e9551c4b0692f63b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fd865b708cdd7ee3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/chat/NearbyPlacesCard.tsx:693"}, "properties": {"repobilityId": "b58dc93eb698c814", "scanner": "scanner-primary", "fingerprint": "fd865b708cdd7ee3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b71b5d34cdb9358d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/search/InlineFilterStrip.tsx:478"}, "properties": {"repobilityId": "db0f2bb634876ff5", "scanner": "scanner-primary", "fingerprint": "b71b5d34cdb9358d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-abfe31efffa373d9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/search/FilterPill.tsx:42"}, "properties": {"repobilityId": "135cf5bba0281664", "scanner": "scanner-primary", "fingerprint": "abfe31efffa373d9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2dc30c1eae42983d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/search/MobileSearchOverlay.tsx:254"}, "properties": {"repobilityId": "57e4a950a43077ac", "scanner": "scanner-primary", "fingerprint": "2dc30c1eae42983d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c25535c03da1dd62", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/search/DesktopQuickFilters.tsx:91"}, "properties": {"repobilityId": "70a49139ce3275ba", "scanner": "scanner-primary", "fingerprint": "c25535c03da1dd62", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f09e27735ed41345", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/nearby/NearbyPlacesPanel.tsx:645"}, "properties": {"repobilityId": "84b1fe7cde3a3385", "scanner": "scanner-primary", "fingerprint": "f09e27735ed41345", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a4141f067b1730d2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/map/UserMarker.tsx:165"}, "properties": {"repobilityId": "fdc3394e728d1c45", "scanner": "scanner-primary", "fingerprint": "a4141f067b1730d2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ca2c3110473ee4e3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/filters/FilterChip.tsx:70"}, "properties": {"repobilityId": "52ab24fb8e9d6f34", "scanner": "scanner-primary", "fingerprint": "ca2c3110473ee4e3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7d44682a4dea4edb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/HomeClient.tsx:218"}, "properties": {"repobilityId": "3fc1a7d919f2dda9", "scanner": "scanner-primary", "fingerprint": "7d44682a4dea4edb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5d8482c6a383ae9f", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/layout.tsx:86"}, "properties": {"repobilityId": "0d72350965068f5b", "scanner": "scanner-primary", "fingerprint": "5d8482c6a383ae9f", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-9819dc67681b5f6f", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/about/layout.tsx:43"}, "properties": {"repobilityId": "89c0ed0c68a5ecd1", "scanner": "scanner-primary", "fingerprint": "9819dc67681b5f6f", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-48625ff88ff2d8b3", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/listings/[id]/page.tsx:348"}, "properties": {"repobilityId": "474a1add83df811f", "scanner": "scanner-primary", "fingerprint": "48625ff88ff2d8b3", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-89bbe05482f8d6af", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/listings/[id]/ListingPageClient.tsx:1078"}, "properties": {"repobilityId": "5366ff9d9dc94d20", "scanner": "scanner-primary", "fingerprint": "89bbe05482f8d6af", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0062b0d8156710c4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/listings/ListingList.tsx:332"}, "properties": {"repobilityId": "edffa283f9c24e3e", "scanner": "scanner-primary", "fingerprint": "0062b0d8156710c4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-90d80e0e9318afe5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/audit/page.tsx:306"}, "properties": {"repobilityId": "3bdb47ab21772b48", "scanner": "scanner-primary", "fingerprint": "90d80e0e9318afe5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-62c2f3dbceb4ea53", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/saved-searches/SavedSearchList.tsx:487"}, "properties": {"repobilityId": "baa9c383ca5f2fe5", "scanner": "scanner-primary", "fingerprint": "62c2f3dbceb4ea53", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a244bdd635cd9e25", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/shutdown.ts:45"}, "properties": {"repobilityId": "f91cb73933959986", "scanner": "scanner-primary", "fingerprint": "a244bdd635cd9e25", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6e67b1ad7d33a6d6", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/lib/search-alerts.ts:765"}, "properties": {"repobilityId": "4a756b402cafeb38", "scanner": "scanner-primary", "fingerprint": "6e67b1ad7d33a6d6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-f5468d51978aea49", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/timeout-wrapper.ts:51"}, "properties": {"repobilityId": "a39da1c16a82fdbc", "scanner": "scanner-primary", "fingerprint": "f5468d51978aea49", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d5268febecb2f43b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/logger.ts:116"}, "properties": {"repobilityId": "d91dbb6e420e1181", "scanner": "scanner-primary", "fingerprint": "d5268febecb2f43b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"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-64da3ac455b4eaa4", "level": "error", "message": {"text": "Possible secret in verify.js"}, "properties": {"repobilityId": "d0f6ca4802888ae9", "scanner": "scanner-primary", "fingerprint": "64da3ac455b4eaa4", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "verify.js"}, "region": {"startLine": 33}}}]}, {"ruleId": "scanner-ee810349675f4acf", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in next.config.ts:2"}, "properties": {"repobilityId": "a3a25c0d08e89bbc", "scanner": "scanner-primary", "fingerprint": "ee810349675f4acf", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "next.config.ts"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-3893ce501313a04a", "level": "error", "message": {"text": "Possible secret in scripts/seed-demo.js"}, "properties": {"repobilityId": "2efa0847a0586c21", "scanner": "scanner-primary", "fingerprint": "3893ce501313a04a", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/seed-demo.js"}, "region": {"startLine": 19}}}]}, {"ruleId": "scanner-97c51f49f9baf6ed", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/run-playwright-e2e-ci.mjs:3"}, "properties": {"repobilityId": "7bfe45064cb3ac0c", "scanner": "scanner-primary", "fingerprint": "97c51f49f9baf6ed", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/run-playwright-e2e-ci.mjs"}, "region": {"startLine": 3}}}]}, {"ruleId": "scanner-4109ff5c6d0d5807", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/dev-fresh.js:3"}, "properties": {"repobilityId": "13a8a37638a8525f", "scanner": "scanner-primary", "fingerprint": "4109ff5c6d0d5807", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/dev-fresh.js"}, "region": {"startLine": 3}}}]}, {"ruleId": "scanner-aa22d63bb05a7583", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/run-search-release-gate.js:4"}, "properties": {"repobilityId": "6d5d1907d7dfc2aa", "scanner": "scanner-primary", "fingerprint": "aa22d63bb05a7583", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/run-search-release-gate.js"}, "region": {"startLine": 4}}}]}, {"ruleId": "scanner-63b55163ff56c42b", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/run-dev.js:5"}, "properties": {"repobilityId": "d374bee622ce7c34", "scanner": "scanner-primary", "fingerprint": "63b55163ff56c42b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/run-dev.js"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-b5ac8299796854ed", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/validate-filter-scenarios.js:9"}, "properties": {"repobilityId": "60d482a060579513", "scanner": "scanner-primary", "fingerprint": "b5ac8299796854ed", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/validate-filter-scenarios.js"}, "region": {"startLine": 9}}}]}, {"ruleId": "scanner-c73357a09cb307ad", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in .claude/agents/code-reviewer.yml:24"}, "properties": {"repobilityId": "31f68976a79a8972", "scanner": "scanner-primary", "fingerprint": "c73357a09cb307ad", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/agents/code-reviewer.yml"}, "region": {"startLine": 24}}}]}, {"ruleId": "scanner-82522e329355e0cc", "level": "warning", "message": {"text": "Insecure pattern 'subprocess_shell_true' in .claude/skills/webapp-testing/scripts/with_server.py:71"}, "properties": {"repobilityId": "603ca94dede951d0", "scanner": "scanner-primary", "fingerprint": "82522e329355e0cc", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "subprocess_shell_true"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/webapp-testing/scripts/with_server.py"}, "region": {"startLine": 71}}}]}, {"ruleId": "scanner-9e0b7b0fc738cd36", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in output/webkit_debug.js:1"}, "properties": {"repobilityId": "53c6a57e6f78624e", "scanner": "scanner-primary", "fingerprint": "9e0b7b0fc738cd36", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "output/webkit_debug.js"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e1c20f5f05a9438e", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in src/__tests__/launch/phase10-launch-hardening.test.ts:1"}, "properties": {"repobilityId": "8f96511df4f1f928", "scanner": "scanner-primary", "fingerprint": "e1c20f5f05a9438e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/__tests__/launch/phase10-launch-hardening.test.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-599e293720e25296", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/__tests__/lib/googleMapsUiKitLoader.test.ts:9"}, "properties": {"repobilityId": "99cd391a03ccb251", "scanner": "scanner-primary", "fingerprint": "599e293720e25296", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/__tests__/lib/googleMapsUiKitLoader.test.ts"}, "region": {"startLine": 9}}}]}, {"ruleId": "scanner-0b5fc7b9eb907712", "level": "error", "message": {"text": "Insecure pattern 'eval_used' in src/__tests__/lib/csp.test.ts:86"}, "properties": {"repobilityId": "9a26504db9517729", "scanner": "scanner-primary", "fingerprint": "0b5fc7b9eb907712", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "eval_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/__tests__/lib/csp.test.ts"}, "region": {"startLine": 86}}}]}, {"ruleId": "scanner-d39b95f7858eab0c", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in src/__tests__/phase09/cutover-retire-booking.test.ts:1"}, "properties": {"repobilityId": "dfa067e2bf7b1f6c", "scanner": "scanner-primary", "fingerprint": "d39b95f7858eab0c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/__tests__/phase09/cutover-retire-booking.test.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-edccff27f7851cfa", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/JsonLd.tsx:32"}, "properties": {"repobilityId": "a28d03af2ac862d0", "scanner": "scanner-primary", "fingerprint": "edccff27f7851cfa", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/JsonLd.tsx"}, "region": {"startLine": 32}}}]}, {"ruleId": "scanner-5344b214d93a779f", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/neighborhood/PlaceDetailsPanel.tsx:53"}, "properties": {"repobilityId": "f67f514cd0daf6c4", "scanner": "scanner-primary", "fingerprint": "5344b214d93a779f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/neighborhood/PlaceDetailsPanel.tsx"}, "region": {"startLine": 53}}}]}, {"ruleId": "scanner-f899412646d9b183", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/chat/NearbyPlacesCard.tsx:382"}, "properties": {"repobilityId": "e3f2c7bfe394ae50", "scanner": "scanner-primary", "fingerprint": "f899412646d9b183", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/chat/NearbyPlacesCard.tsx"}, "region": {"startLine": 382}}}]}, {"ruleId": "scanner-5f1530069456c35d", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/layout.tsx:86"}, "properties": {"repobilityId": "0bca654fa2052eb0", "scanner": "scanner-primary", "fingerprint": "5f1530069456c35d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/layout.tsx"}, "region": {"startLine": 86}}}]}, {"ruleId": "scanner-888e9252bc4251a6", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/about/layout.tsx:43"}, "properties": {"repobilityId": "233b9fe112438a49", "scanner": "scanner-primary", "fingerprint": "888e9252bc4251a6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/about/layout.tsx"}, "region": {"startLine": 43}}}]}, {"ruleId": "scanner-ff72b0f5f0682002", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/listings/[id]/page.tsx:348"}, "properties": {"repobilityId": "0e12e29ae3d7aebb", "scanner": "scanner-primary", "fingerprint": "ff72b0f5f0682002", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/listings/[id]/page.tsx"}, "region": {"startLine": 348}}}]}, {"ruleId": "scanner-f8cdfffd70600cb1", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "18c8174306e70d67", "scanner": "scanner-primary", "fingerprint": "f8cdfffd70600cb1", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/playwright.yml"}, "region": {"startLine": 117}}}]}, {"ruleId": "scanner-f8cdfffd70600cb1", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "70bd5e1ab83dad41", "scanner": "scanner-primary", "fingerprint": "f8cdfffd70600cb1", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/playwright.yml"}, "region": {"startLine": 153}}}]}, {"ruleId": "scanner-f8cdfffd70600cb1", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "70bd5e1ab83dad41", "scanner": "scanner-primary", "fingerprint": "f8cdfffd70600cb1", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/playwright.yml"}, "region": {"startLine": 161}}}]}, {"ruleId": "scanner-f8cdfffd70600cb1", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "085b146101132dfb", "scanner": "scanner-primary", "fingerprint": "f8cdfffd70600cb1", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/playwright.yml"}, "region": {"startLine": 191}}}]}, {"ruleId": "scanner-f8cdfffd70600cb1", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "70bd5e1ab83dad41", "scanner": "scanner-primary", "fingerprint": "f8cdfffd70600cb1", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/playwright.yml"}, "region": {"startLine": 204}}}]}, {"ruleId": "scanner-f124038dc451d574", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "aaf156ed2be9b081", "scanner": "scanner-primary", "fingerprint": "f124038dc451d574", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/playwright-search-release-gate.yml"}, "region": {"startLine": 93}}}]}, {"ruleId": "scanner-f124038dc451d574", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "db3dcee518c2333b", "scanner": "scanner-primary", "fingerprint": "f124038dc451d574", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/playwright-search-release-gate.yml"}, "region": {"startLine": 108}}}]}, {"ruleId": "scanner-f124038dc451d574", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "db3dcee518c2333b", "scanner": "scanner-primary", "fingerprint": "f124038dc451d574", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/playwright-search-release-gate.yml"}, "region": {"startLine": 116}}}]}, {"ruleId": "scanner-c0840d07864313e3", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "173c45528b0077b5", "scanner": "scanner-primary", "fingerprint": "c0840d07864313e3", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/lighthouse.yml"}, "region": {"startLine": 40}}}]}, {"ruleId": "scanner-f9a8c84da39d17f7", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "12cdd0fc744c6fe6", "scanner": "scanner-primary", "fingerprint": "f9a8c84da39d17f7", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/stability-tests.yml"}, "region": {"startLine": 85}}}]}, {"ruleId": "scanner-f9a8c84da39d17f7", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "0d692daffbfc7d06", "scanner": "scanner-primary", "fingerprint": "f9a8c84da39d17f7", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/stability-tests.yml"}, "region": {"startLine": 102}}}]}, {"ruleId": "scanner-f9a8c84da39d17f7", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "0d692daffbfc7d06", "scanner": "scanner-primary", "fingerprint": "f9a8c84da39d17f7", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/stability-tests.yml"}, "region": {"startLine": 110}}}]}, {"ruleId": "scanner-e3905f4b1efcc980", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "e795703adbbcd831", "scanner": "scanner-primary", "fingerprint": "e3905f4b1efcc980", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/playwright-smoke.yml"}, "region": {"startLine": 81}}}]}, {"ruleId": "scanner-e3905f4b1efcc980", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "03af5a1403744a16", "scanner": "scanner-primary", "fingerprint": "e3905f4b1efcc980", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/playwright-smoke.yml"}, "region": {"startLine": 103}}}]}, {"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-c2eb9de7d0c9075c", "level": "note", "message": {"text": "Very large file: tests/e2e/search-map-list-sync.anon.spec.ts (1732 lines)"}, "properties": {"repobilityId": "8100f410718ac23f", "scanner": "scanner-primary", "fingerprint": "c2eb9de7d0c9075c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-99c811251618dbf5", "level": "note", "message": {"text": "Very large file: tests/e2e/journeys/list-map-sync.spec.ts (1390 lines)"}, "properties": {"repobilityId": "adbe77ead3e3f261", "scanner": "scanner-primary", "fingerprint": "99c811251618dbf5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d7e8232dec18ba58", "level": "note", "message": {"text": "Very large file: tests/e2e/journeys/03-search-advanced-journeys.spec.ts (1572 lines)"}, "properties": {"repobilityId": "870712c4237bc47d", "scanner": "scanner-primary", "fingerprint": "d7e8232dec18ba58", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ed9650a92316805a", "level": "note", "message": {"text": "Very large file: scripts/seed-e2e.js (1626 lines)"}, "properties": {"repobilityId": "887a34aa8d974270", "scanner": "scanner-primary", "fingerprint": "ed9650a92316805a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-886dc82a1cb549a7", "level": "note", "message": {"text": "Very large file: src/__tests__/api/listings-idor.test.ts (1687 lines)"}, "properties": {"repobilityId": "3bb38fa0ece61658", "scanner": "scanner-primary", "fingerprint": "886dc82a1cb549a7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e93fd1e20be79cae", "level": "note", "message": {"text": "Very large file: src/__tests__/components/Map.test.tsx (3088 lines)"}, "properties": {"repobilityId": "7622ec076679ad92", "scanner": "scanner-primary", "fingerprint": "e93fd1e20be79cae", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-7391ef5866c353a2", "level": "note", "message": {"text": "Very large file: src/__tests__/components/search/SearchBar/HomeSearchBar.test.tsx (1529 lines)"}, "properties": {"repobilityId": "1196300edc03efba", "scanner": "scanner-primary", "fingerprint": "7391ef5866c353a2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-11cf6a6c62c28972", "level": "note", "message": {"text": "Very large file: src/__tests__/components/nearby/NearbyPlacesPanel.search-field-edge-cases.test.tsx (2072 lines)"}, "properties": {"repobilityId": "ab9e2435061f5e67", "scanner": "scanner-primary", "fingerprint": "11cf6a6c62c28972", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b08796760328d3dd", "level": "note", "message": {"text": "Very large file: src/__tests__/lib/search/search-v2-service.test.ts (2643 lines)"}, "properties": {"repobilityId": "0fa217f9325520b2", "scanner": "scanner-primary", "fingerprint": "b08796760328d3dd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0d925da22b4eb5e3", "level": "note", "message": {"text": "Very large file: src/__tests__/actions/admin.test.ts (1726 lines)"}, "properties": {"repobilityId": "25138a6ee8f69693", "scanner": "scanner-primary", "fingerprint": "0d925da22b4eb5e3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-197f98941adc79f7", "level": "note", "message": {"text": "Very large file: src/components/Map.tsx (4564 lines)"}, "properties": {"repobilityId": "85c49b367bda448e", "scanner": "scanner-primary", "fingerprint": "197f98941adc79f7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e15bd8f7c34031b3", "level": "note", "message": {"text": "Very large file: src/app/listings/[id]/ListingPageClient.tsx (1564 lines)"}, "properties": {"repobilityId": "ba84246b0a017a0b", "scanner": "scanner-primary", "fingerprint": "e15bd8f7c34031b3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-dd5175f6f323fc2c", "level": "note", "message": {"text": "Very large file: src/app/listings/create/CreateListingForm.tsx (1614 lines)"}, "properties": {"repobilityId": "0b24ae4adc967a76", "scanner": "scanner-primary", "fingerprint": "dd5175f6f323fc2c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6db03e592722dd0b", "level": "note", "message": {"text": "Very large file: src/lib/data.ts (1744 lines)"}, "properties": {"repobilityId": "9f1e7e0a31cb47f1", "scanner": "scanner-primary", "fingerprint": "6db03e592722dd0b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-7902abe3e4e89ebf", "level": "note", "message": {"text": "Very large file: src/lib/search/search-doc-queries.ts (2445 lines)"}, "properties": {"repobilityId": "6323f245ec4ec34f", "scanner": "scanner-primary", "fingerprint": "7902abe3e4e89ebf", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "24f56e4a755988c9", "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": "c9266e08724be095", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-9d79c4077342a7d0", "level": "warning", "message": {"text": "Runtime service client appears to use placeholder configuration"}, "properties": {"repobilityId": "6083cb77ad090228", "scanner": "scanner-primary", "fingerprint": "9d79c4077342a7d0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "runtime-config", "service-client", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "2ca5f34a4aeae7bc", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "d7fe01bec469612d", "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": "722a0823be6beb8e", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-8fe3d3cb07b80ec6", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/hooks.json"}, "properties": {"repobilityId": "bcbcb6279e8ed224", "scanner": "scanner-primary", "fingerprint": "8fe3d3cb07b80ec6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/hooks.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-e2249215337089d9", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/agent-check.md"}, "properties": {"repobilityId": "dc43563b1835971f", "scanner": "scanner-primary", "fingerprint": "e2249215337089d9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/agent-check.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8470b352b83413a6", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/handoff-gemini.md"}, "properties": {"repobilityId": "28b6197758d67c98", "scanner": "scanner-primary", "fingerprint": "8470b352b83413a6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/handoff-gemini.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7ffe81c515411d85", "level": "warning", "message": {"text": "Agent instruction contains unpinned remote install: .claude/commands/handoff-gemini.md"}, "properties": {"repobilityId": "4dbd65f601397d89", "scanner": "scanner-primary", "fingerprint": "7ffe81c515411d85", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "supply-chain", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/handoff-gemini.md"}, "region": {"startLine": 22}}}]}, {"ruleId": "scanner-f84e0d8362f62407", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/rs-review.md"}, "properties": {"repobilityId": "aa29519e2c65f117", "scanner": "scanner-primary", "fingerprint": "f84e0d8362f62407", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/rs-review.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c1287c830b9fbc0f", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/mcp-check.md"}, "properties": {"repobilityId": "735e4f95ce0faee6", "scanner": "scanner-primary", "fingerprint": "c1287c830b9fbc0f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/mcp-check.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4625138db4687f5c", "level": "warning", "message": {"text": "Agent instruction contains unpinned remote install: .claude/commands/mcp-check.md"}, "properties": {"repobilityId": "d65f0ff260577bfb", "scanner": "scanner-primary", "fingerprint": "4625138db4687f5c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "supply-chain", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/mcp-check.md"}, "region": {"startLine": 66}}}]}, {"ruleId": "scanner-309858da077d32ce", "level": "warning", "message": {"text": "Agent instruction contains unpinned remote install: .claude/commands/handoff-codex.md"}, "properties": {"repobilityId": "703a3a73c1c3d603", "scanner": "scanner-primary", "fingerprint": "309858da077d32ce", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "supply-chain", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/handoff-codex.md"}, "region": {"startLine": 22}}}]}, {"ruleId": "scanner-e4ca4a17cd052610", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/sp.plan.md"}, "properties": {"repobilityId": "73a6e5fd8117e83d", "scanner": "scanner-primary", "fingerprint": "e4ca4a17cd052610", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/sp.plan.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6a666dcc7e6e641e", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/sp.taskstoissues.md"}, "properties": {"repobilityId": "8bcc305f3750b222", "scanner": "scanner-primary", "fingerprint": "6a666dcc7e6e641e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/sp.taskstoissues.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7bd7ea43370d9ff3", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/skill-check.md"}, "properties": {"repobilityId": "ee16ed6f708cdc9a", "scanner": "scanner-primary", "fingerprint": "7bd7ea43370d9ff3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/skill-check.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1aa51d0cbb9b1a8c", "level": "warning", "message": {"text": "Agent instruction contains unpinned remote install: .claude/commands/project-init.md"}, "properties": {"repobilityId": "ab8af9edb5805735", "scanner": "scanner-primary", "fingerprint": "1aa51d0cbb9b1a8c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "supply-chain", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/project-init.md"}, "region": {"startLine": 79}}}]}, {"ruleId": "scanner-e00c2c338ea2a6f8", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/explore-flow.md"}, "properties": {"repobilityId": "d17e4c72deae31c0", "scanner": "scanner-primary", "fingerprint": "e00c2c338ea2a6f8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/explore-flow.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-268ba3da6c012fe4", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/ultra-think.md"}, "properties": {"repobilityId": "0ef5f8cf5cfbedf8", "scanner": "scanner-primary", "fingerprint": "268ba3da6c012fe4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/ultra-think.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-fe0e6afa36d25e72", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/agents/roomshare-specialist.yml"}, "properties": {"repobilityId": "23aed6d5a250abcc", "scanner": "scanner-primary", "fingerprint": "fe0e6afa36d25e72", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/agents/roomshare-specialist.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3fc2951d38a0482b", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/agents/nextjs-developer.yml"}, "properties": {"repobilityId": "925140a57f3ee7da", "scanner": "scanner-primary", "fingerprint": "3fc2951d38a0482b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/agents/nextjs-developer.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-71c90b480dada45b", "level": "error", "message": {"text": "Agent instruction/config may expose a secret: .claude/agents/mcp-expert.md"}, "properties": {"repobilityId": "debc1413ac9aa762", "scanner": "scanner-primary", "fingerprint": "71c90b480dada45b", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["agent-instructions", "secrets", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/agents/mcp-expert.md"}, "region": {"startLine": 68}}}]}, {"ruleId": "scanner-0872094258b6e34a", "level": "warning", "message": {"text": "Agent instruction contains unpinned remote install: .claude/agents/mcp-expert.md"}, "properties": {"repobilityId": "266b8111399e2a19", "scanner": "scanner-primary", "fingerprint": "0872094258b6e34a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "supply-chain", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/agents/mcp-expert.md"}, "region": {"startLine": 53}}}]}, {"ruleId": "scanner-8b98fef3fd02ff69", "level": "error", "message": {"text": "Agent instruction/config may expose a secret: .claude/agents/claude-md-expert.md"}, "properties": {"repobilityId": "6fc6718ad4b450a2", "scanner": "scanner-primary", "fingerprint": "8b98fef3fd02ff69", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["agent-instructions", "secrets", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/agents/claude-md-expert.md"}, "region": {"startLine": 41}}}]}, {"ruleId": "scanner-80f74f50afe5ac67", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/agents/backend-architect.md"}, "properties": {"repobilityId": "6f87e7120e84bb68", "scanner": "scanner-primary", "fingerprint": "80f74f50afe5ac67", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/agents/backend-architect.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c36d060b870f1498", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/agents/react-specialist.yml"}, "properties": {"repobilityId": "2457e269b12bbd3c", "scanner": "scanner-primary", "fingerprint": "c36d060b870f1498", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/agents/react-specialist.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a22c27e50cff34ec", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/edgecase-plan/taxonomy.md"}, "properties": {"repobilityId": "35eb586e8d5d2739", "scanner": "scanner-primary", "fingerprint": "a22c27e50cff34ec", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/edgecase-plan/taxonomy.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a0085a914e8431fd", "level": "none", "message": {"text": "Commented-code block (5 lines) in jest.setup.js:219"}, "properties": {"repobilityId": "b44b33514817f407", "scanner": "scanner-primary", "fingerprint": "a0085a914e8431fd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e4b19e4cf47bbdd0", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/e2e/search-map-list-sync.anon.spec.ts:111"}, "properties": {"repobilityId": "269628f741cde557", "scanner": "scanner-primary", "fingerprint": "e4b19e4cf47bbdd0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bf0f90ecc85af885", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/e2e/home-a11y-regression.anon.spec.ts:89"}, "properties": {"repobilityId": "278fdaf5aedb8489", "scanner": "scanner-primary", "fingerprint": "bf0f90ecc85af885", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2ff5792ce2034094", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/e2e/map-markers.anon.spec.ts:882"}, "properties": {"repobilityId": "eec6e3e4fe1a6daf", "scanner": "scanner-primary", "fingerprint": "2ff5792ce2034094", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-26eff969260085ab", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/e2e/map-errors-a11y.anon.spec.ts:317"}, "properties": {"repobilityId": "f364a6b17e28a711", "scanner": "scanner-primary", "fingerprint": "26eff969260085ab", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8501c9f0d13f8d8d", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/e2e/mobile-interactions.anon.spec.ts:145"}, "properties": {"repobilityId": "5eb9d29d6e176707", "scanner": "scanner-primary", "fingerprint": "8501c9f0d13f8d8d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6ae6f6c34790d233", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/e2e/search-smoke.spec.ts:20"}, "properties": {"repobilityId": "f1b01c499da878ab", "scanner": "scanner-primary", "fingerprint": "6ae6f6c34790d233", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6d4037ef40511d99", "level": "none", "message": {"text": "Commented-code block (7 lines) in tests/e2e/search-v2-fallback.spec.ts:209"}, "properties": {"repobilityId": "0b95a60ec6fbf48c", "scanner": "scanner-primary", "fingerprint": "6d4037ef40511d99", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-689e87a1003e779d", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/e2e/search-a11y.anon.spec.ts:96"}, "properties": {"repobilityId": "d3319bb001e6408d", "scanner": "scanner-primary", "fingerprint": "689e87a1003e779d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-84652ec84d2d3937", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/e2e/search-url-deeplink.spec.ts:159"}, "properties": {"repobilityId": "c27c4020effc5b15", "scanner": "scanner-primary", "fingerprint": "84652ec84d2d3937", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-20082eb98a78f430", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/e2e/search-url-invalid-params.spec.ts:202"}, "properties": {"repobilityId": "619b75eb864ae957", "scanner": "scanner-primary", "fingerprint": "20082eb98a78f430", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b017a1516a6dc815", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/e2e/notifications/notifications.spec.ts:87"}, "properties": {"repobilityId": "5151c163ece04165", "scanner": "scanner-primary", "fingerprint": "b017a1516a6dc815", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-be0f55afda729bd6", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/e2e/session-expiry/session-expiry-multistep.spec.ts:26"}, "properties": {"repobilityId": "baed2071b2ba8323", "scanner": "scanner-primary", "fingerprint": "be0f55afda729bd6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a932ad936da52832", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/e2e/journeys/list-map-sync.spec.ts:655"}, "properties": {"repobilityId": "9c831fc1fec1affa", "scanner": "scanner-primary", "fingerprint": "a932ad936da52832", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a7627b381b2f33c2", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/e2e/journeys/02-search-critical-journeys.spec.ts:67"}, "properties": {"repobilityId": "b73bc2bd9cfa5744", "scanner": "scanner-primary", "fingerprint": "a7627b381b2f33c2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-04e11502c6e37378", "level": "none", "message": {"text": "Commented-code block (17 lines) in tests/e2e/auth/verify.spec.ts:83"}, "properties": {"repobilityId": "d8edc8cfcd437ad7", "scanner": "scanner-primary", "fingerprint": "04e11502c6e37378", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b39bb29f7a0778c3", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/e2e/helpers/filter-helpers.ts:463"}, "properties": {"repobilityId": "958c420aa00b86cf", "scanner": "scanner-primary", "fingerprint": "b39bb29f7a0778c3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ffa3c2d378199c42", "level": "none", "message": {"text": "Commented-code block (7 lines) in tests/e2e/helpers/pagination-mock-factory.ts:288"}, "properties": {"repobilityId": "0de59786df9249c7", "scanner": "scanner-primary", "fingerprint": "ffa3c2d378199c42", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cd8c88513f87b5aa", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/e2e/semantic-search/semantic-search-resilience.anon.spec.ts:91"}, "properties": {"repobilityId": "fafafbc2f7cf31c4", "scanner": "scanner-primary", "fingerprint": "cd8c88513f87b5aa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2b79102b43976944", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/e2e/messaging/messaging-realtime.spec.ts:81"}, "properties": {"repobilityId": "c1be5ca4921b80ea", "scanner": "scanner-primary", "fingerprint": "2b79102b43976944", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cc0eedcbff8837de", "level": "none", "message": {"text": "Commented-code block (8 lines) in tests/e2e/pagination/pagination-state.spec.ts:313"}, "properties": {"repobilityId": "e3e790d09776fb6f", "scanner": "scanner-primary", "fingerprint": "cc0eedcbff8837de", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ddcbf287e6986ac5", "level": "none", "message": {"text": "Commented-code block (7 lines) in tests/e2e/pagination/pagination-core.spec.ts:154"}, "properties": {"repobilityId": "25ea78677f011ae0", "scanner": "scanner-primary", "fingerprint": "ddcbf287e6986ac5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-47e1923940658929", "level": "none", "message": {"text": "Commented-code block (7 lines) in scripts/seed-demo.js:369"}, "properties": {"repobilityId": "7e39b835bd5a1360", "scanner": "scanner-primary", "fingerprint": "47e1923940658929", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cfd41d4ae031de3a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/generate-map-style.ts:101"}, "properties": {"repobilityId": "e75785cbf75c2751", "scanner": "scanner-primary", "fingerprint": "cfd41d4ae031de3a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0501ed0cdb768046", "level": "none", "message": {"text": "Commented-code block (8 lines) in scripts/run-dev.js:118"}, "properties": {"repobilityId": "0de115a302a846d8", "scanner": "scanner-primary", "fingerprint": "0501ed0cdb768046", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9fe7cd8749771b81", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/fix-listing-coords.ts:25"}, "properties": {"repobilityId": "46a2cdca7245123d", "scanner": "scanner-primary", "fingerprint": "9fe7cd8749771b81", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9bbefcb20b39ef01", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/seed-e2e.js:1500"}, "properties": {"repobilityId": "b37aa26425f42f76", "scanner": "scanner-primary", "fingerprint": "9bbefcb20b39ef01", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e231d0d56d3e546a", "level": "note", "message": {"text": "Legacy-named symbol `here_geocode_v1` in scripts/lib/geocoding-providers.ts:179"}, "properties": {"repobilityId": "1f68258df6dc1188", "scanner": "scanner-primary", "fingerprint": "e231d0d56d3e546a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-476be31a55d8f2f9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/__tests__/middleware/suspension.test.ts:340"}, "properties": {"repobilityId": "fbfcfd4f04cf2f40", "scanner": "scanner-primary", "fingerprint": "476be31a55d8f2f9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6eac544670ee9d97", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/__tests__/api/metrics.test.ts:491"}, "properties": {"repobilityId": "2ea3e481a0394ec7", "scanner": "scanner-primary", "fingerprint": "6eac544670ee9d97", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-21678caf9c120b60", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/__tests__/api/listings-post.test.ts:552"}, "properties": {"repobilityId": "0a44d32ae7957b4a", "scanner": "scanner-primary", "fingerprint": "21678caf9c120b60", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f6f5b967ecb5f41d", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/__tests__/api/cron/refresh-search-docs/compute-recommended-score.test.ts:147"}, "properties": {"repobilityId": "310f36eedecf09df", "scanner": "scanner-primary", "fingerprint": "f6f5b967ecb5f41d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9437f67b6de004aa", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/__tests__/api/nearby/route.test.ts:43"}, "properties": {"repobilityId": "f9cf10ede69297b8", "scanner": "scanner-primary", "fingerprint": "9437f67b6de004aa", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bd5898206e5b3a65", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/__tests__/performance/filter-performance.test.ts:611"}, "properties": {"repobilityId": "3a4913403965d97d", "scanner": "scanner-primary", "fingerprint": "bd5898206e5b3a65", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cc5831feec197a71", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/__tests__/components/PersistentMapWrapper.networking.test.tsx:718"}, "properties": {"repobilityId": "021369700b5813c4", "scanner": "scanner-primary", "fingerprint": "cc5831feec197a71", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-38a0b5ccda0ca2be", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/__tests__/components/search/SearchBar/SearchBar.test.tsx:368"}, "properties": {"repobilityId": "0675b85dc420113b", "scanner": "scanner-primary", "fingerprint": "38a0b5ccda0ca2be", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-04c75ccad6fd6fab", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/__tests__/components/nearby/NearbyPlacesMap.xss.test.ts:144"}, "properties": {"repobilityId": "fec955248e25ed0d", "scanner": "scanner-primary", "fingerprint": "04c75ccad6fd6fab", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-41b1584f498ff584", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/__tests__/lib/create-listing-schema.test.ts:772"}, "properties": {"repobilityId": "35531a0f2645d618", "scanner": "scanner-primary", "fingerprint": "41b1584f498ff584", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1629b0e6542a6487", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/__tests__/lib/search/hybrid-count-threshold.test.ts:272"}, "properties": {"repobilityId": "13d14027db614c53", "scanner": "scanner-primary", "fingerprint": "1629b0e6542a6487", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-13f1144d5e0a3f7e", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/__tests__/lib/search/query-hash-semantic-equivalence.test.ts:227"}, "properties": {"repobilityId": "a84280fea7e43564", "scanner": "scanner-primary", "fingerprint": "13f1144d5e0a3f7e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1839ccc02454e193", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/__tests__/lib/embeddings/images.test.ts:53"}, "properties": {"repobilityId": "cfc3fab2f501b2e5", "scanner": "scanner-primary", "fingerprint": "1839ccc02454e193", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d4a2a87c0632b9ba", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/__tests__/hooks/useFacets.test.ts:37"}, "properties": {"repobilityId": "01a4d8f050c91bdc", "scanner": "scanner-primary", "fingerprint": "d4a2a87c0632b9ba", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d109fe20905228ea", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/__tests__/hooks/useMediaQuery.test.ts:66"}, "properties": {"repobilityId": "4a22b1e2766db65e", "scanner": "scanner-primary", "fingerprint": "d109fe20905228ea", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4669c9a2e4ce07e1", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/__tests__/hooks/useMapPreference.test.ts:165"}, "properties": {"repobilityId": "424e7121c8a97766", "scanner": "scanner-primary", "fingerprint": "4669c9a2e4ce07e1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6d9eb3f44efb16d8", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/__tests__/edge-cases/postgis-spatial-edge-cases.test.ts:628"}, "properties": {"repobilityId": "273cca64c9527488", "scanner": "scanner-primary", "fingerprint": "6d9eb3f44efb16d8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8bd936173f28149f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/__tests__/edge-cases/postgis-spatial-edge-cases.test.ts:283"}, "properties": {"repobilityId": "a2f747bc759a460b", "scanner": "scanner-primary", "fingerprint": "8bd936173f28149f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-39d513eb801930ca", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/__tests__/fixes/v2-map-stale-nearmatches.test.tsx:37"}, "properties": {"repobilityId": "3a95ba5d37225b4d", "scanner": "scanner-primary", "fingerprint": "39d513eb801930ca", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8facd5cbb77332f7", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/types/nearby.ts:110"}, "properties": {"repobilityId": "3bd04934af02ca5b", "scanner": "scanner-primary", "fingerprint": "8facd5cbb77332f7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1f2c610f4dc6a798", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/SearchViewToggle.tsx:129"}, "properties": {"repobilityId": "39ec6b8acdecf19d", "scanner": "scanner-primary", "fingerprint": "1f2c610f4dc6a798", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9c5bc33833dd7279", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/PersistentMapWrapper.tsx:1209"}, "properties": {"repobilityId": "01fb83cc4d996819", "scanner": "scanner-primary", "fingerprint": "9c5bc33833dd7279", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c342ad049660f50b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/PersistentMapWrapper.tsx:433"}, "properties": {"repobilityId": "c4e44a5570c63d8f", "scanner": "scanner-primary", "fingerprint": "c342ad049660f50b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-751581eda3b56038", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/ServiceWorkerRegistration.tsx:127"}, "properties": {"repobilityId": "8bacb935b7afa4ce", "scanner": "scanner-primary", "fingerprint": "751581eda3b56038", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-19cccf0ee82ecd78", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/MessagesPageClient.tsx:398"}, "properties": {"repobilityId": "44de26ad2152f541", "scanner": "scanner-primary", "fingerprint": "19cccf0ee82ecd78", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6db23343430d92ed", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/listings/ImageUploader.tsx:210"}, "properties": {"repobilityId": "13b3b68b07aac168", "scanner": "scanner-primary", "fingerprint": "6db23343430d92ed", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2e1550c47dc1b269", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/search/MobileBottomSheet.tsx:358"}, "properties": {"repobilityId": "8ecd2710b8e89be1", "scanner": "scanner-primary", "fingerprint": "2e1550c47dc1b269", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-68d339f29a521435", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/search/SearchResultsClient.tsx:107"}, "properties": {"repobilityId": "ba8f2c927c28106a", "scanner": "scanner-primary", "fingerprint": "68d339f29a521435", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7a98adc1875cb025", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/search/V2MapDataSetter.tsx:26"}, "properties": {"repobilityId": "db2a7c20db7be5b8", "scanner": "scanner-primary", "fingerprint": "7a98adc1875cb025", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4e2dfdb4d5d9a35d", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/search/SearchBar/useSearchBarState.ts:129"}, "properties": {"repobilityId": "ef87be8c8c039974", "scanner": "scanner-primary", "fingerprint": "4e2dfdb4d5d9a35d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7af9e5ffeaf43863", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/listings/[id]/route.ts:958"}, "properties": {"repobilityId": "a141b07e74be46b7", "scanner": "scanner-primary", "fingerprint": "7af9e5ffeaf43863", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-43c2498e3352aac8", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/search/facets/route.ts:467"}, "properties": {"repobilityId": "1cddcd0da94b3a72", "scanner": "scanner-primary", "fingerprint": "43c2498e3352aac8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ed860ea8c5630763", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/cron/daily-maintenance/route.ts:155"}, "properties": {"repobilityId": "9793df20188c6ff4", "scanner": "scanner-primary", "fingerprint": "ed860ea8c5630763", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4316a7d6102453cc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/listings/[id]/edit/EditListingForm.tsx:396"}, "properties": {"repobilityId": "98223bc9aaafc866", "scanner": "scanner-primary", "fingerprint": "4316a7d6102453cc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-06aeb59f514c2e50", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/search/page.tsx:385"}, "properties": {"repobilityId": "23a5cd3b20cadbd3", "scanner": "scanner-primary", "fingerprint": "06aeb59f514c2e50", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-44c4c17a49d7b476", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/verify/VerificationForm.tsx:66"}, "properties": {"repobilityId": "d9a3def0173fd963", "scanner": "scanner-primary", "fingerprint": "44c4c17a49d7b476", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4b9280a159f0cddc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/messages/[id]/ChatWindow.tsx:352"}, "properties": {"repobilityId": "cf5acc1eb1768dba", "scanner": "scanner-primary", "fingerprint": "4b9280a159f0cddc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f8f7ad75b7cca76c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/turnstile.ts:71"}, "properties": {"repobilityId": "4890d7cb89d860b7", "scanner": "scanner-primary", "fingerprint": "f8f7ad75b7cca76c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cf325d33596d350a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/search-alerts.ts:765"}, "properties": {"repobilityId": "12dca7211536aa7b", "scanner": "scanner-primary", "fingerprint": "cf325d33596d350a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-aa1741c871f7ffb1", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/idempotency.ts:138"}, "properties": {"repobilityId": "d1e5dcdd465af6ef", "scanner": "scanner-primary", "fingerprint": "aa1741c871f7ffb1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-379972a6feaff3d0", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/search-types.ts:266"}, "properties": {"repobilityId": "dd3eef0940ff8de5", "scanner": "scanner-primary", "fingerprint": "379972a6feaff3d0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a5f43a2b6b16d612", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/prisma.ts:14"}, "properties": {"repobilityId": "4493d51769d8f6a3", "scanner": "scanner-primary", "fingerprint": "a5f43a2b6b16d612", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5055e2486ce878b7", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/listings/canonical-inventory.ts:254"}, "properties": {"repobilityId": "4f98f3c6016ef4d4", "scanner": "scanner-primary", "fingerprint": "5055e2486ce878b7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4ea730472af6c569", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/search/facet-where.ts:40"}, "properties": {"repobilityId": "d28c2701deb4bac9", "scanner": "scanner-primary", "fingerprint": "4ea730472af6c569", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cae12236ddd65e10", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/search/search-doc-queries.ts:656"}, "properties": {"repobilityId": "0194089ce2584fb4", "scanner": "scanner-primary", "fingerprint": "cae12236ddd65e10", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ddee5ce9f1731e07", "level": "note", "message": {"text": "Legacy-named symbol `hadLegacy` in src/hooks/useRecentSearches.ts:186"}, "properties": {"repobilityId": "8a11b419b1f7980a", "scanner": "scanner-primary", "fingerprint": "ddee5ce9f1731e07", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1c02d925d88934b4", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/hooks/useBatchedFilters.ts:404"}, "properties": {"repobilityId": "8760c5965fcfb180", "scanner": "scanner-primary", "fingerprint": "1c02d925d88934b4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b519b98ff15e1569", "level": "note", "message": {"text": "126 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "7690106ac3cc4340", "scanner": "scanner-primary", "fingerprint": "b519b98ff15e1569", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "773a820fe43788fc", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "37bfe28291bdb87c", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "b34a94d68ff6a1b6", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "2d7bc0a5c45e4df6", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}]}]}