{"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-e68a93bfcb7f324c", "name": "Stray `console.log` in TS/JS \u2014 tests/tc-check.spec.ts:9", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/tc-check.spec.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-b442e15a007fc499", "name": "Stray `console.log` in TS/JS \u2014 tests/phase4-settings-e2e.spec.ts:234", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/phase4-settings-e2e.spec.ts:234"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5c473cf389aa5d78", "name": "Stray `console.log` in TS/JS \u2014 tests/smoke-trial-flow.spec.ts:68", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/smoke-trial-flow.spec.ts:68"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7078f1dee9398971", "name": "Stray `console.log` in TS/JS \u2014 tests/retrieval-eval/run-eval.ts:77", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/retrieval-eval/run-eval.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-bc643d6d499f3d27", "name": "Stray `console.log` in TS/JS \u2014 tests/retrieval-eval/lib/reporter.ts:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/retrieval-eval/lib/reporter.ts:18"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-073593ed6dff3840", "name": "Stray `console.log` in TS/JS \u2014 tests/truth-audit/minutes-display-accuracy.spec.ts:52", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/truth-audit/minutes-display-accuracy.spec.ts:52"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4cb92128c03a9a0d", "name": "Stray `console.log` in TS/JS \u2014 tests/truth-audit/tenant-isolation.spec.ts:71", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/truth-audit/tenant-isolation.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-7034e522c8aca01f", "name": "Stray `console.log` in TS/JS \u2014 tests/truth-audit/trial-email-dedup.spec.ts:101", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/truth-audit/trial-email-dedup.spec.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-248f249d7fc3e374", "name": "Stray `console.log` in TS/JS \u2014 tests/truth-audit/transfer-recovery.spec.ts:87", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/truth-audit/transfer-recovery.spec.ts:87"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a32b0aaa1ee2e18a", "name": "Stray `console.log` in TS/JS \u2014 tests/truth-audit/settings-sync-proof.spec.ts:49", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/truth-audit/settings-sync-proof.spec.ts:49"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-56146fb76d838e0e", "name": "Stray `console.log` in TS/JS \u2014 tests/truth-audit/service-catalog-save.spec.ts:82", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/truth-audit/service-catalog-save.spec.ts:82"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-462f67cedd7bd52a", "name": "Stray `console.log` in TS/JS \u2014 tests/truth-audit/capability-badge-truth.spec.ts:76", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/truth-audit/capability-badge-truth.spec.ts:76"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-25a636c2f7201ac8", "name": "Stray `console.log` in TS/JS \u2014 tests/truth-audit/admin-test-call-tenant.spec.ts:93", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/truth-audit/admin-test-call-tenant.spec.ts:93"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-82ce7ecc728929e5", "name": "Stray `console.log` in TS/JS \u2014 tests/canary/eval-harness.ts:44", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/canary/eval-harness.ts:44"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-42b648cd81ff667c", "name": "Stray `console.log` in TS/JS \u2014 tests/promptfoo/knowledge-routing/query-preview.ts:209", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/promptfoo/knowledge-routing/query-preview.ts:209"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bbf5b8a26d949d4d", "name": "Stray `console.log` in TS/JS \u2014 tests/promptfoo/knowledge-routing/corpus-inspect.ts:262", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/promptfoo/knowledge-routing/corpus-inspect.ts:262"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f7927b7c765d89a6", "name": "Stray `console.log` in TS/JS \u2014 tests/promptfoo/knowledge-routing/audit.ts:810", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/promptfoo/knowledge-routing/audit.ts:810"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f82d9f5cc60521e2", "name": "Stray `console.log` in TS/JS \u2014 tests/promptfoo/scripts/transcript-replay.ts:170", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/promptfoo/scripts/transcript-replay.ts:170"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-59e111bf04198c06", "name": "Stray `console.log` in TS/JS \u2014 tests/promptfoo/scripts/run-adversarial-eval.ts:226", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/promptfoo/scripts/run-adversarial-eval.ts:226"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-80ccbc1d0ced0ef2", "name": "Stray `console.log` in TS/JS \u2014 tests/promptfoo/scripts/export-phase-d-baseline.ts:148", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/promptfoo/scripts/export-phase-d-baseline.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-ee1918660ac3c3c0", "name": "Stray `console.log` in TS/JS \u2014 tests/promptfoo/scripts/deliberate-break-test.ts:124", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/promptfoo/scripts/deliberate-break-test.ts:124"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-27b52302753553a0", "name": "Stray `console.log` in TS/JS \u2014 tests/promptfoo/scripts/check-phase-d-drift.ts:67", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/promptfoo/scripts/check-phase-d-drift.ts:67"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dccad56a5ab0945c", "name": "Stray `console.log` in TS/JS \u2014 tests/promptfoo/scripts/record-promptfoo-findings.ts:138", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/promptfoo/scripts/record-promptfoo-findings.ts:138"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-981150b081d56155", "name": "Stray `console.log` in TS/JS \u2014 tests/s12-audit/a4-trial-click.js:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/s12-audit/a4-trial-click.js: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-6cff2454f4ecb33d", "name": "Stray `console.log` in TS/JS \u2014 tests/s12-audit/a3-settings-deep.js:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/s12-audit/a3-settings-deep.js: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-46be69a84043f179", "name": "Stray `console.log` in TS/JS \u2014 tests/s12-audit/a3-client-settings.js:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/s12-audit/a3-client-settings.js: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-c3a8430988e17983", "name": "Stray `console.log` in TS/JS \u2014 tests/s12-audit/a4-onboarding-v2.js:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/s12-audit/a4-onboarding-v2.js: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-0c90983046d17970", "name": "Stray `console.log` in TS/JS \u2014 tests/s12-audit/security-deep-check.js:8", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/s12-audit/security-deep-check.js: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-04fa7a752fd34a05", "name": "Stray `console.log` in TS/JS \u2014 tests/s12-audit/a4-onboarding-trial.js:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/s12-audit/a4-onboarding-trial.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-bd445c4dd65760e3", "name": "Stray `console.log` in TS/JS \u2014 tests/s12-audit/a3-specific-settings.js:9", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/s12-audit/a3-specific-settings.js: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-0b1956e2a48d7c3f", "name": "Stray `console.log` in TS/JS \u2014 tests/s12-audit/a3-admin-dashboard.js:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/s12-audit/a3-admin-dashboard.js:15"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-163b9d22f6461714", "name": "Stray `console.log` in TS/JS \u2014 tests/s12-audit/e3-post-activation.js:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/s12-audit/e3-post-activation.js: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-f810dec152733235", "name": "Stray `console.log` in TS/JS \u2014 tests/s12-audit/settings-tabs-audit.js:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/s12-audit/settings-tabs-audit.js: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-05688ec68df4e532", "name": "Stray `console.log` in TS/JS \u2014 tests/s12-audit/client-dashboard-audit.js:27", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/s12-audit/client-dashboard-audit.js:27"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f2fcdaafd6ac4c86", "name": "Stray `console.log` in TS/JS \u2014 docs/s12-audit/console-errors.js:73", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 docs/s12-audit/console-errors.js:73"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6d37c21874449582", "name": "Stray `console.log` in TS/JS \u2014 scripts/brian-replay-tool.ts:46", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/brian-replay-tool.ts:46"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-39655673382a4786", "name": "Stray `console.log` in TS/JS \u2014 scripts/resync-exp-realty.ts:67", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/resync-exp-realty.ts:67"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6d8085ae29160540", "name": "Stray `console.log` in TS/JS \u2014 scripts/set-twilio-voice-fallback.ts:98", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/set-twilio-voice-fallback.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-9182f24a658f5a15", "name": "Stray `console.log` in TS/JS \u2014 scripts/backfill-chunks.ts:78", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-chunks.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-f26738e13bdeb2da", "name": "Stray `console.log` in TS/JS \u2014 scripts/audit-d445-snowflakes.ts:30", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/audit-d445-snowflakes.ts:30"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a4a6b452bc75ecde", "name": "Stray `console.log` in TS/JS \u2014 scripts/backfill-transcripts.ts:83", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-transcripts.ts:83"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-645a0818e181fe4b", "name": "Stray `console.log` in TS/JS \u2014 scripts/migrate-velly-to-slots.ts:90", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-velly-to-slots.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-478dd4f4b49281e0", "name": "Stray `console.log` in TS/JS \u2014 scripts/inspect-call-logs-cols.ts:9", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/inspect-call-logs-cols.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-2b09db8034c530bd", "name": "Stray `console.log` in TS/JS \u2014 scripts/inspect-brian-transcript.ts:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/inspect-brian-transcript.ts:7"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-943e25d71c213efe", "name": "Stray `console.log` in TS/JS \u2014 scripts/regen-golden-snapshots.ts:90", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/regen-golden-snapshots.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-f8dae6088f7a3e3b", "name": "Stray `console.log` in TS/JS \u2014 scripts/flip-windshield-hand-tuned.ts:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/flip-windshield-hand-tuned.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-81059f2460479659", "name": "Stray `console.log` in TS/JS \u2014 scripts/deploy-outbound-fields.ts:67", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/deploy-outbound-fields.ts:67"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6e4b22c67478ded5", "name": "Stray `console.log` in TS/JS \u2014 scripts/rollback-client-settings-chunks.ts:59", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/rollback-client-settings-chunks.ts:59"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ec5c7b4d986617df", "name": "Stray `console.log` in TS/JS \u2014 scripts/verify-ultravox-synced.ts:24", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verify-ultravox-synced.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-eb751bfcab4dbc75", "name": "Stray `console.log` in TS/JS \u2014 scripts/dryrun-urban-vibe.ts:33", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/dryrun-urban-vibe.ts:33"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a07b839687f352d8", "name": "Stray `console.log` in TS/JS \u2014 scripts/recompose-pm-question-intake.ts:52", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/recompose-pm-question-intake.ts:52"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-20598f98c484bfea", "name": "Stray `console.log` in TS/JS \u2014 scripts/verify-hot-queries-view.ts:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verify-hot-queries-view.ts:7"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c171cce853296e54", "name": "Stray `console.log` in TS/JS \u2014 scripts/simulate-outbound-call.ts:262", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/simulate-outbound-call.ts:262"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-36b6d91412cfb540", "name": "Stray `console.log` in TS/JS \u2014 scripts/recompose-aman.ts:62", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/recompose-aman.ts:62"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b4a5ab78a848bc6a", "name": "Stray `console.log` in TS/JS \u2014 scripts/client-timeline-report.ts:47", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/client-timeline-report.ts:47"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c3c3bcbdbb41aa6e", "name": "Stray `console.log` in TS/JS \u2014 scripts/regen-snapshots.ts:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/regen-snapshots.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-60cae1cd17c60d7e", "name": "Stray `console.log` in TS/JS \u2014 scripts/inspect-kql-schema.ts:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/inspect-kql-schema.ts:7"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b8464d8334aabeda", "name": "Stray `console.log` in TS/JS \u2014 scripts/inspect-post-migration.ts:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/inspect-post-migration.ts:14"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-76ad6b4d449d0b65", "name": "Stray `console.log` in TS/JS \u2014 scripts/snapshot-aman-wave3.ts:37", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/snapshot-aman-wave3.ts:37"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-76bfbe2208dece1d", "name": "Stray `console.log` in TS/JS \u2014 scripts/phase-e-windshield-apply.ts:41", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/phase-e-windshield-apply.ts:41"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fb9d092991ce8e74", "name": "Stray `console.log` in TS/JS \u2014 scripts/generate-enrichment-fixtures.ts:108", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-enrichment-fixtures.ts:108"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aaf0c87682d21637", "name": "Stray `console.log` in TS/JS \u2014 scripts/deploy-urban-vibe.ts:36", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/deploy-urban-vibe.ts:36"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-357f8f82aff3b46b", "name": "Stray `console.log` in TS/JS \u2014 scripts/render-staged-prompt-file.ts:74", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/render-staged-prompt-file.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-5a985b35eb290ffb", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-prompt-live.ts:143", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-prompt-live.ts:143"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3882e916a43cf13a", "name": "Stray `console.log` in TS/JS \u2014 scripts/stripe-drift-check.ts:255", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/stripe-drift-check.ts:255"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-36bb21ab9e28a474", "name": "Stray `console.log` in TS/JS \u2014 scripts/inspect-services-shape.ts:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/inspect-services-shape.ts:15"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b180bad971401448", "name": "Stray `console.log` in TS/JS \u2014 scripts/recompose-aman-personal.ts:154", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/recompose-aman-personal.ts:154"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a7f5d630edb21e42", "name": "Stray `console.log` in TS/JS \u2014 scripts/fetch-velly-live.ts:9", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fetch-velly-live.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-e4434d419bc740aa", "name": "Stray `console.log` in TS/JS \u2014 scripts/measure-brian-raw.ts:33", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/measure-brian-raw.ts:33"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f1c82e128ae8a248", "name": "Stray `console.log` in TS/JS \u2014 scripts/rebuild-pm-prompt.ts:41", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/rebuild-pm-prompt.ts:41"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6aba0498c67d2e8d", "name": "Stray `console.log` in TS/JS \u2014 scripts/measure-forbidden-by-niche.ts:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/measure-forbidden-by-niche.ts:14"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8de56f942e9d206b", "name": "Stray `console.log` in TS/JS \u2014 scripts/restore-brian-tools.ts:41", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/restore-brian-tools.ts:41"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1d0bacaaed99da5e", "name": "Stray `console.log` in TS/JS \u2014 scripts/patch-velly-universal-rules.ts:52", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/patch-velly-universal-rules.ts:52"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4a6352f9b67f0def", "name": "Stray `console.log` in TS/JS \u2014 scripts/backfill-niches.ts:138", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-niches.ts:138"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1faab39bfe609e38", "name": "Stray `console.log` in TS/JS \u2014 scripts/backfill-gap-embeddings.ts:46", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-gap-embeddings.ts:46"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6ee75ce7791bb06a", "name": "Stray `console.log` in TS/JS \u2014 scripts/reset-test-calls.js:50", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/reset-test-calls.js:50"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b890f0f6a2f3846f", "name": "Stray `console.log` in TS/JS \u2014 scripts/simulate-inbound-listing.ts:190", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/simulate-inbound-listing.ts:190"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a2f2772202ede92d", "name": "Stray `console.log` in TS/JS \u2014 scripts/build-niche-baseline.ts:141", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/build-niche-baseline.ts:141"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a702073db1b09043", "name": "Stray `console.log` in TS/JS \u2014 scripts/phase-b-windshield-backfill.ts:40", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/phase-b-windshield-backfill.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-8bd37546d7576182", "name": "Stray `console.log` in TS/JS \u2014 scripts/send-aman-welcome.ts:188", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/send-aman-welcome.ts:188"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9679455163f20afc", "name": "Stray `console.log` in TS/JS \u2014 scripts/dryrun-windshield-hub.ts:36", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/dryrun-windshield-hub.ts:36"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5899b556202abfe8", "name": "Stray `console.log` in TS/JS \u2014 scripts/recompose-brian.ts:42", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/recompose-brian.ts:42"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ba19de7a35cea155", "name": "Stray `console.log` in TS/JS \u2014 scripts/brian-niche-check.ts:8", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/brian-niche-check.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-c9b537acd4cb1ea6", "name": "Stray `console.log` in TS/JS \u2014 scripts/brian-corpus-health.ts:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/brian-corpus-health.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-3a517577f584cb78", "name": "Stray `console.log` in TS/JS \u2014 scripts/sync-urban-vibe-maintenance.ts:41", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/sync-urban-vibe-maintenance.ts:41"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bb7f328883ea5977", "name": "Stray `console.log` in TS/JS \u2014 scripts/drift-check-all.ts:144", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/drift-check-all.ts:144"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-54c5477acfaaabc2", "name": "Stray `console.log` in TS/JS \u2014 scripts/regenerate-prompt-snapshots.ts:119", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/regenerate-prompt-snapshots.ts:119"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-204f1be0dd3018e1", "name": "Stray `console.log` in TS/JS \u2014 scripts/send-aman-rogers-codes.ts:137", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/send-aman-rogers-codes.ts:137"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-37f5750d4b139b79", "name": "Stray `console.log` in TS/JS \u2014 scripts/calendar-oauth-check.ts:98", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/calendar-oauth-check.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-084c286dbe4148a1", "name": "Stray `console.log` in TS/JS \u2014 scripts/client-nervous-system-harness-check.ts:136", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/client-nervous-system-harness-check.ts:136"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8f011c5f9f6f9bd6", "name": "Stray `console.log` in TS/JS \u2014 scripts/snapshot-business-only-walia.ts:73", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/snapshot-business-only-walia.ts:73"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b5784cd1843af301", "name": "Stray `console.log` in TS/JS \u2014 scripts/twilio-ownership-check.ts:149", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/twilio-ownership-check.ts:149"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a35e9bf9fca8dbe7", "name": "Stray `console.log` in TS/JS \u2014 scripts/migrate-test-client-prompt.ts:21", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-test-client-prompt.ts:21"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cc11bcd812f04f92", "name": "Stray `console.log` in TS/JS \u2014 scripts/one-off-set-voice.ts:44", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/one-off-set-voice.ts:44"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b2b2f4429a642a00", "name": "Stray `console.log` in TS/JS \u2014 scripts/brian-baseline-calls.ts:24", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/brian-baseline-calls.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-abf515aceb041138", "name": "Stray `console.log` in TS/JS \u2014 scripts/inspect-velly-shape.ts:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/inspect-velly-shape.ts:15"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1b9558fa253ca66e", "name": "Stray `console.log` in TS/JS \u2014 scripts/ingest-fallback-recordings.ts:107", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/ingest-fallback-recordings.ts:107"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-453317a8737c406a", "name": "Stray `console.log` in TS/JS \u2014 scripts/p3-aggregate-evals.ts:23", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/p3-aggregate-evals.ts:23"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-534fba52a292ea2c", "name": "Stray `console.log` in TS/JS \u2014 scripts/telegram-health-check.ts:248", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/telegram-health-check.ts:248"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-91919be9bf806e32", "name": "Stray `console.log` in TS/JS \u2014 scripts/regenerate-brian-returning-caller.ts:27", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/regenerate-brian-returning-caller.ts:27"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ec1d6c916e51c24a", "name": "Stray `console.log` in TS/JS \u2014 scripts/rollback-urban-vibe.ts:45", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/rollback-urban-vibe.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-4ad0db256e5c2a9f", "name": "Stray `console.log` in TS/JS \u2014 scripts/reseed-client-settings.ts:259", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/reseed-client-settings.ts:259"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d1c97abfa70b5543", "name": "Stray `console.log` in TS/JS \u2014 scripts/provisioning-completeness-check.ts:250", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/provisioning-completeness-check.ts:250"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-61a69b7cebb924e8", "name": "Stray `console.log` in TS/JS \u2014 scripts/snapshot-brian-bug3-only.ts:27", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/snapshot-brian-bug3-only.ts:27"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d9a9b4377b246fe8", "name": "TODO/FIXME marker in shipping code \u2014 scripts/backfill-recording-url-paths.ts:5", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 scripts/backfill-recording-url-paths.ts:5"}, "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-b7875f85b0701fbc", "name": "Stray `console.log` in TS/JS \u2014 scripts/backfill-recording-url-paths.ts:54", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-recording-url-paths.ts:54"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c491c5a2a51f7065", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-active-prompt-version.ts:32", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-active-prompt-version.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-6ffeb4f70176bda5", "name": "Stray `console.log` in TS/JS \u2014 scripts/data-hygiene-check.ts:335", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/data-hygiene-check.ts: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-927e4d4419fc129a", "name": "Stray `console.log` in TS/JS \u2014 scripts/dryrun-kb-aware-rollout.ts:152", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/dryrun-kb-aware-rollout.ts:152"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ba5530d774e27017", "name": "Stray `console.log` in TS/JS \u2014 scripts/canary-truth-snapshot.ts:112", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/canary-truth-snapshot.ts:112"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-29b266adbb11d059", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-windshield-staged.ts:49", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-windshield-staged.ts:49"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5003e5320cb65ca1", "name": "Stray `console.log` in TS/JS \u2014 scripts/debug-recompose.ts:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/debug-recompose.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-fbb7305c3b065bba", "name": "Stray `console.log` in TS/JS \u2014 scripts/recompose-mark.ts:38", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/recompose-mark.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-a2c9e6a13564dec2", "name": "Stray `console.log` in TS/JS \u2014 scripts/migrate-ray-to-slots.ts:45", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-ray-to-slots.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-e78554bbf562f45f", "name": "Stray `console.log` in TS/JS \u2014 scripts/audit-urban-vibe.ts:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/audit-urban-vibe.ts:17"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cf8dd3bb271fd340", "name": "Stray `console.log` in TS/JS \u2014 scripts/audit-fleet-drift.ts:44", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/audit-fleet-drift.ts:44"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c840e79b5284c217", "name": "Stray `console.log` in TS/JS \u2014 scripts/apply-velly-draft.ts:46", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-velly-draft.ts:46"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b4751df347bc8f6f", "name": "Stray `console.log` in TS/JS \u2014 scripts/fleet-snapshot-prompts.ts:21", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fleet-snapshot-prompts.ts:21"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-355bdaa0c318c163", "name": "Stray `console.log` in TS/JS \u2014 scripts/onboard-aman.ts:84", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/onboard-aman.ts:84"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4e76c642e87a8133", "name": "Stray `console.log` in TS/JS \u2014 scripts/study-windshield-real-calls.ts:71", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/study-windshield-real-calls.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-248f5fde39021a6e", "name": "Stray `console.log` in TS/JS \u2014 scripts/migrate-aman-drop-snowflake.ts:65", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-aman-drop-snowflake.ts:65"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e781a5082fbe9492", "name": "Stray `console.log` in TS/JS \u2014 scripts/p3-fleet-snapshot-audit.ts:32", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/p3-fleet-snapshot-audit.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-84bf9fa24eed72c7", "name": "Stray `console.log` in TS/JS \u2014 scripts/deploy-inbound-listing.ts:74", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/deploy-inbound-listing.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-51acaaa2ea2fb751", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-hard-max.ts:3", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-hard-max.ts:3"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d4cbf4af5d211c7a", "name": "Stray `console.log` in TS/JS \u2014 scripts/p2-knowledge-corpus-health.ts:25", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/p2-knowledge-corpus-health.ts:25"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e6c1176a59698fb9", "name": "Stray `console.log` in TS/JS \u2014 scripts/validate-brian-preview.ts:9", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/validate-brian-preview.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-6f4359b5ac128147", "name": "Stray `console.log` in TS/JS \u2014 scripts/nightly-drift-check.ts:404", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/nightly-drift-check.ts:404"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c68c497f17a065b5", "name": "Stray `console.log` in TS/JS \u2014 scripts/audit-brian-sections.ts:60", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/audit-brian-sections.ts:60"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5688b92784ac4fb1", "name": "Stray `console.log` in TS/JS \u2014 scripts/snapshot-aman-wave3-with-overrides.ts:52", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/snapshot-aman-wave3-with-overrides.ts:52"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fa1d4470b10aff76", "name": "Stray `console.log` in TS/JS \u2014 scripts/brian-tools-check.ts:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/brian-tools-check.ts:14"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-29d58115b63e5167", "name": "Stray `console.log` in TS/JS \u2014 scripts/onboard-emon.ts:61", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/onboard-emon.ts:61"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7c92796265a06b83", "name": "Stray `console.log` in TS/JS \u2014 src/middleware.ts:89", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/middleware.ts:89"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c60106a7e0ba039b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/ReviewBadges.tsx:44", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ReviewBadges.tsx:44"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-042ecef5349ec06a", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/DemoCallVisuals.tsx:506", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/DemoCallVisuals.tsx:506"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-73077924a4fac300", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/NicheLandingPage.tsx:27", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/NicheLandingPage.tsx:27"}, "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-48536df6b42baa8f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/HeroCallMockup.tsx:282", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/HeroCallMockup.tsx:282"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a383daaa5eb090af", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/DemoOutcome.tsx:189", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/DemoOutcome.tsx:189"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5f8b995e940bd55c", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/ui/chart.tsx:83", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/ui/chart.tsx:83"}, "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-06076ae81946dd08", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/ActivityFeed.tsx:62", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/ActivityFeed.tsx:62"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f5004a02b018f258", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/LeadQueue.tsx:747", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/LeadQueue.tsx:747"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-470e75b855d350c0", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/AgentConfigCard.tsx:66", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/AgentConfigCard.tsx:66"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-16674628ec361438", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/InsightsView.tsx:400", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/InsightsView.tsx:400"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8585471a56d2fb7f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/LiveCallBanner.tsx:131", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/LiveCallBanner.tsx:131"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ee49f940b7387f66", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/AdminDropdown.tsx:23", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/AdminDropdown.tsx:23"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d6d0a64dccb10bf2", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/ClientsTable.tsx:261", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/ClientsTable.tsx:261"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-109dcffe45b2e133", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/TopBar.tsx:81", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/TopBar.tsx:81"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-89924c1bf19a5acb", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/CallDetail.tsx:80", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/CallDetail.tsx:80"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-370cf9af69065dde", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/UsageSummary.tsx:175", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/UsageSummary.tsx:175"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4a659e789c599735", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/ContactsView.tsx:164", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/ContactsView.tsx:164"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fad60a071ad5358d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/ClientHome.tsx:523", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/ClientHome.tsx:523"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b8c9ac5e871f329d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/LeadsView.tsx:450", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/LeadsView.tsx:450"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ede78aebadc2666a", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/FloatingCallOrb.tsx:83", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/FloatingCallOrb.tsx:83"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1495af4100be3afb", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/CallEventsPanel.tsx:167", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/CallEventsPanel.tsx:167"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-54153351329437a3", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/MaintenanceTab.tsx:206", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/MaintenanceTab.tsx:206"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-811637e551d2740b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/Sidebar.tsx:165", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/Sidebar.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-b5c4d74ee77b83f7", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/IntakeTable.tsx:59", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/IntakeTable.tsx:59"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2d1f306c533de8fe", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/ClientSelector.tsx:123", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/ClientSelector.tsx:123"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-68834189e9b80ae6", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/AdminCommandStrip.tsx:77", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/AdminCommandStrip.tsx:77"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d4e706c3023f21ed", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/CallRow.tsx:192", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/CallRow.tsx:192"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-482b28d28ee9b197", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/CampaignCard.tsx:100", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/CampaignCard.tsx:100"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6d006882646f5975", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/AgentTestCard.tsx:203", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/AgentTestCard.tsx:203"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dadb15a7f5827c6d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/OperatorActivity.tsx:191", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/OperatorActivity.tsx:191"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7c443e46ad814e14", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/ClientHealthBar.tsx:77", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/ClientHealthBar.tsx:77"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1473ce78f9d2df12", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/ClientHomeV2.tsx:519", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/ClientHomeV2.tsx:519"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9810e64fc594d654", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/MonthlySpendCard.tsx:73", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/MonthlySpendCard.tsx:73"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-493f419182f25c28", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/settings/PromptVersionsCard.tsx:118", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/settings/PromptVersionsCard.tsx:118"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2ee78478108b3851", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/settings/StaffRosterCard.tsx:106", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/settings/StaffRosterCard.tsx:106"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d07ff7c0b07eb439", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/settings/BookingCard.tsx:92", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/settings/BookingCard.tsx:92"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-15fd103179433927", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/settings/AgentOverviewCard.tsx:172", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/settings/AgentOverviewCard.tsx:172"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e29a8a917918e58c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/settings/WebsiteKnowledgeCard.tsx:356", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/settings/WebsiteKnowledgeCard.tsx:356"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9a0c743c9a75143e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/settings/VIPContactsCard.tsx:173", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/settings/VIPContactsCard.tsx:173"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-841ca07aa423f34f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/settings/SettingsSection.tsx:54", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/settings/SettingsSection.tsx:54"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a07b45a95afe0fcc", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/settings/PromptVariablesCard.tsx:221", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/settings/PromptVariablesCard.tsx:221"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1472e9b1fbce4a93", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/settings/ActivityLog.tsx:109", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/settings/ActivityLog.tsx:109"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-73e07fb238778914", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/settings/VoiceTab.tsx:95", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/settings/VoiceTab.tsx:95"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ba8ba3eeda9ef26d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/settings/ContextDataCard.tsx:184", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/settings/ContextDataCard.tsx:184"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0c6ef753a9b67b03", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/settings/shared.tsx:40", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/settings/shared.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-691de72388ca2a1c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/settings/VoicePicker.tsx:152", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/settings/VoicePicker.tsx:152"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-50ffac9922ab7a8e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/settings/ImprovementHints.tsx:205", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/settings/ImprovementHints.tsx:205"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1c1e64fbd45d6efc", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/go-live/VoicePickerCompact.tsx:217", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/go-live/VoicePickerCompact.tsx:217"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3928106843cd458d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/go-live/GoLiveVoicePicker.tsx:182", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/go-live/GoLiveVoicePicker.tsx:182"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-41042fab6ad91304", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/bookings/BookingsView.tsx:152", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/bookings/BookingsView.tsx:152"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a3023ea03ae73cc2", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/agent/AgentAnswerabilityCard.tsx:160", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/agent/AgentAnswerabilityCard.tsx:160"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f80efa84cd78042c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/home/InlineModalsV2.tsx:869", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/home/InlineModalsV2.tsx:869"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fe7e6aa995a80ba4", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/home/CallHandlingTile.tsx:192", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/home/CallHandlingTile.tsx:192"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-994c054e371deba3", "name": "\"active\" state uses light bg in a dark theme \u2014 src/components/dashboard/home/OverviewCallLog.tsx:77", "shortDescription": {"text": "\"active\" state uses light bg in a dark theme \u2014 src/components/dashboard/home/OverviewCallLog.tsx:77"}, "fullDescription": {"text": "A ternary like `active ? 'bg-white' : '...'` (or bg-gray-100/200) on a dark theme produces jarring white pills. Use a dark-emphasized active state instead \u2014 border + ring or slightly brighter dark bg. Example: `active ? 'bg-gray-800 border-gray-500 ring-1 ring-blue-500/30' : '\u2026'`.\n\nWhy: P-E in CHECKLIST.md \u2014 light bg in a dark theme is a class of regression.\nRule id: fq.active-light-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ddb242cc3aa2f4b4", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/home/UnifiedHomeSectionV2.tsx:393", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/home/UnifiedHomeSectionV2.tsx:393"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c11bfae937cf1470", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/home/BookingCalendarTile.tsx:328", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/home/BookingCalendarTile.tsx:328"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2afb63e29e48cb6b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/home/UnifiedHomeSection.tsx:495", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/home/UnifiedHomeSection.tsx:495"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-da2d4cd22cc0dabd", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/home/AgentIdentityCard.tsx:629", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/home/AgentIdentityCard.tsx:629"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b2085a362921f951", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/home/AgentIdentityCardCompact.tsx:171", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/home/AgentIdentityCardCompact.tsx:171"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-89441d0ab04af435", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/home/V2CallList.tsx:139", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/home/V2CallList.tsx:139"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-987d3bbd8c3d31be", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/home/AgentKnowsCard.tsx:204", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/home/AgentKnowsCard.tsx:204"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1c78ac9243019252", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/home/BusinessHoursTile.tsx:40", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/home/BusinessHoursTile.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-3a503b53e3597976", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/home/sheets/KnowledgeSheet.tsx:169", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/home/sheets/KnowledgeSheet.tsx:169"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-eb51d259347519b6", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/lab/VersionHistory.tsx:64", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/lab/VersionHistory.tsx:64"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5c6c0139a14443fa", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/knowledge/KnowledgeSourceRegistry.tsx:236", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/knowledge/KnowledgeSourceRegistry.tsx:236"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bfc0d7d957ae8d02", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/knowledge/InlineFaqEditor.tsx:129", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/knowledge/InlineFaqEditor.tsx:129"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d42359ae06ea9805", "name": "Stray `console.log` in TS/JS \u2014 src/components/dashboard/knowledge/ChunkBrowser.tsx:174", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/dashboard/knowledge/ChunkBrowser.tsx: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-d04d6455315780df", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/knowledge/DocumentList.tsx:86", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/knowledge/DocumentList.tsx:86"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-eac5b91b1d3763fa", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/knowledge/KnowledgeTestSearch.tsx:106", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/knowledge/KnowledgeTestSearch.tsx:106"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ac8f815de3125d33", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/knowledge/KnowledgeDrawer.tsx:90", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/knowledge/KnowledgeDrawer.tsx:90"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1f13942ef483b5f9", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/knowledge/FileUploadPanel.tsx:706", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/knowledge/FileUploadPanel.tsx:706"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-99a580d109b70834", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/outbound/LeadQueue.tsx:294", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/outbound/LeadQueue.tsx:294"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a36c579178d87dbd", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/onboard/WebsiteScrapePreview.tsx:258", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/onboard/WebsiteScrapePreview.tsx:258"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9a2453287bf94f4e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/onboard/VoicePicker.tsx:182", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/onboard/VoicePicker.tsx:182"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f6334fbac889ab12", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/onboard/AdminTestPanel.tsx:231", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/onboard/AdminTestPanel.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-08f8390eeecac55f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/onboard/PlacesAutocomplete.tsx:171", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/onboard/PlacesAutocomplete.tsx:171"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0d29e353b64d443f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/ClientSwitcher.tsx:96", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/ClientSwitcher.tsx:96"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0cbc5ec3a8c428ba", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/ActingAsBanner.tsx:110", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/ActingAsBanner.tsx:110"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9127e6742a3a098c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/notifications/NotificationRow.tsx:116", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/notifications/NotificationRow.tsx:116"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-700df87f8e68c24b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/harness/HarnessCard.tsx:63", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/harness/HarnessCard.tsx:63"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f48de1e5d0e669b2", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/harness/FindingRow.tsx:87", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/harness/FindingRow.tsx:87"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0b506d456b88ac2b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/advisor/ModelPicker.tsx:126", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/advisor/ModelPicker.tsx:126"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-844ef5d1327dd683", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/advisor/HistorySidebar.tsx:220", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/advisor/HistorySidebar.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-2454455cbf2d87f0", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/advisor/InsightCards.tsx:116", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/advisor/InsightCards.tsx:116"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-512657dd0938f3a8", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/advisor/ChatView.tsx:285", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/advisor/ChatView.tsx:285"}, "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-5f48f72a5cb9ae77", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/page.tsx:44", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/page.tsx:44"}, "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-eeea59e8f67710ed", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/layout.tsx:150", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/layout.tsx:150"}, "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-9610a0d5c9e0eb68", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/about/page.tsx:93", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/about/page.tsx:93"}, "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-89673677c11c1875", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/external/lead-call/route.ts:242", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/external/lead-call/route.ts:242"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-560721017b5b0e2a", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/demo/summarize/route.ts:92", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/demo/summarize/route.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-d03dcec9299c8bd4", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/demo/call-me/route.ts:149", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/demo/call-me/route.ts:149"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3d899c7afb0deb55", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/demo/start/route.ts:137", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/demo/start/route.ts:137"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-417bf55344c8312b", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/client/knowledge/upload/route.ts:134", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/client/knowledge/upload/route.ts:134"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3e3774bf607af1c3", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/auth/google/callback/route.ts:93", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/auth/google/callback/route.ts:93"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c2d5bdcf8a0e4028", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/webhook/demo/inbound/route.ts:47", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhook/demo/inbound/route.ts:47"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5196f4acaad7e284", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/webhook/telegram/route.ts:485", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhook/telegram/route.ts:485"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c4467073140dc835", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/webhook/ultravox/route.ts:100", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhook/ultravox/route.ts:100"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4b5b156320ca9a70", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/webhook/stripe/route.ts:90", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhook/stripe/route.ts:90"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c9d3515f48bb93c6", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/webhook/[slug]/ivr-gather/route.ts:37", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhook/[slug]/ivr-gather/route.ts:37"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-69ed0e327ef12daa", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/webhook/[slug]/sms-inbound/route.ts:39", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhook/[slug]/sms-inbound/route.ts:39"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-13de3f906814c915", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/webhook/[slug]/transfer/route.ts:122", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhook/[slug]/transfer/route.ts:122"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cdfe0b3cae046f18", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/webhook/[slug]/inbound/route.ts:30", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhook/[slug]/inbound/route.ts:30"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-259e4199d0ef499e", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/webhook/[slug]/transfer-status/route.ts:51", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhook/[slug]/transfer-status/route.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-092abfdf44b44915", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/webhook/[slug]/whisper/route.ts:54", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhook/[slug]/whisper/route.ts:54"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0c9711b554cd4ee2", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/webhook/[slug]/fallback/route.ts:61", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhook/[slug]/fallback/route.ts:61"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0a133f82d02747a9", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/webhook/[slug]/page-owner/route.ts:99", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhook/[slug]/page-owner/route.ts:99"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e535c564da43b369", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/webhook/[slug]/outbound-connect/route.ts:87", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhook/[slug]/outbound-connect/route.ts:87"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dfc00ea5c7cbf9cb", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/webhook/[slug]/voicemail/route.ts:34", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhook/[slug]/voicemail/route.ts:34"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-979587408d4da20c", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/webhook/[slug]/completed/route.ts:71", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhook/[slug]/completed/route.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-b7cff8422185bca7", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/webhook/[slug]/sms/route.ts:102", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhook/[slug]/sms/route.ts:102"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e3fc675ad0c8cfd0", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/webhook/[slug]/listing-lookup/route.ts:138", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhook/[slug]/listing-lookup/route.ts:138"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-76d1f58d97921a3c", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/webhook/[slug]/sms-status/route.ts:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhook/[slug]/sms-status/route.ts:18"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fbf3c2e9e2e5276a", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/settings/route.ts:107", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/settings/route.ts:107"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6107a207f7a73e98", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/settings/prompt-versions/route.ts:138", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/settings/prompt-versions/route.ts:138"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f9aff15248eecdee", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/settings/sync-agent/route.ts:79", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/settings/sync-agent/route.ts:79"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b19f0558b1b12be5", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/leads/dial-out/route.ts:234", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/leads/dial-out/route.ts:234"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bc848a40b33914dd", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/regenerate-prompt/route.ts:183", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/regenerate-prompt/route.ts:183"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1b6afc02f7296205", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/voices/assign/route.ts:105", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/voices/assign/route.ts:105"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4b3ce8f749630f8c", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/calls/[id]/whisper/route.ts:50", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/calls/[id]/whisper/route.ts:50"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0ca6fb2d7a7f1be5", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/calls/[id]/transfer-now/route.ts:159", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/calls/[id]/transfer-now/route.ts:159"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-36230c999062bdaf", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/agent-test/route.ts:141", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/agent-test/route.ts:141"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-80fef5f5dc6e3e3a", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/account/delete/route.ts:101", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/account/delete/route.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-a22701911f70e70d", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/scrape-website/route.ts:138", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/scrape-website/route.ts:138"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cc86f7e1a770ccc4", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/approve-website-knowledge/route.ts:209", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/approve-website-knowledge/route.ts:209"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-95d8fd13f7233586", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/browser-test-call/route.ts:164", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/browser-test-call/route.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-ab605a9e13188439", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/generate-prompt/route.ts:103", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/generate-prompt/route.ts:103"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3cdad6323c766502", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/knowledge/compile/apply/route.ts:213", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/knowledge/compile/apply/route.ts:213"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-08cecb9780d40945", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/knowledge/upload/route.ts:151", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/knowledge/upload/route.ts:151"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c75518291c3f11be", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/knowledge/bulk-import/route.ts:121", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/knowledge/bulk-import/route.ts:121"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bddcd03c0a5aa573", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/knowledge/gaps/route.ts:250", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/knowledge/gaps/route.ts:250"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a1b48537cb961b01", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/knowledge/ingest-text/route.ts:130", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/knowledge/ingest-text/route.ts:130"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f598329099c86e54", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/knowledge/add-snippet/route.ts:106", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/knowledge/add-snippet/route.ts:106"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-160621907ba9e855", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/knowledge/approve/route.ts:126", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/knowledge/approve/route.ts:126"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-34300b9a7c5f521b", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/trial/test-call/route.ts:136", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/trial/test-call/route.ts:136"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7096a17b3a4f54ca", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/onboard/places-lookup/route.ts:92", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/onboard/places-lookup/route.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-1c755a3408cded45", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/billing/downgrade/route.ts:85", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/billing/downgrade/route.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-930332dd8305a3df", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/provision/trial/route.ts:466", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/provision/trial/route.ts:466"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5863e79e416cd3da", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/configure-sms-webhooks/route.ts:98", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/configure-sms-webhooks/route.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-c2366c45d61a7efa", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/generate-telegram-token/route.ts:57", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/generate-telegram-token/route.ts:57"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1d1d7e3717ef259c", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/backfill-niche-configs/route.ts:54", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/backfill-niche-configs/route.ts:54"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-579d9826e2e1947f", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/setup-telegram-webhook/route.ts:57", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/setup-telegram-webhook/route.ts:57"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a641096be1f96856", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/test-email/route.ts:82", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/test-email/route.ts:82"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3761fd6637230011", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/cleanup-test/route.ts:115", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/cleanup-test/route.ts:115"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fc117e3a725eb73d", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/send-login-link/route.ts:118", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/send-login-link/route.ts:118"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d173e84a67c70687", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/backfill-sms-prompt/route.ts:94", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/backfill-sms-prompt/route.ts:94"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8abeb4675cabcf7a", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/unassign-number/route.ts:92", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/unassign-number/route.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-a6e560b43aacfa64", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/test-activate/route.ts:158", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/test-activate/route.ts:158"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2c2bcbbde5bb0e2f", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/zara/route.ts:87", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/zara/route.ts:87"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-623a3e137d82f213", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/sync-agents/route.ts:86", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/sync-agents/route.ts:86"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-133ee55f6e5db069", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/backfill-knowledge/route.ts:74", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/backfill-knowledge/route.ts:74"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-513b856d864981e4", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/apply-promo/route.ts:60", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/apply-promo/route.ts:60"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fb40f86badb98524", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/daily-digest/route.ts:299", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/daily-digest/route.ts:299"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a23a654ebaab3a3e", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/daily-digest-client/route.ts:190", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/daily-digest-client/route.ts:190"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-32b04ed7ba1015ba", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/fleet-drift/route.ts:56", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/fleet-drift/route.ts:56"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-61245cca12f1ecda", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/analyze-calls/route.ts:170", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/analyze-calls/route.ts:170"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-84cadd5a0c0de761", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/demo-followup/route.ts:104", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/demo-followup/route.ts:104"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4545ba7052c019f4", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/follow-up-reminders/route.ts:64", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/follow-up-reminders/route.ts:64"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-13061fc708dcb825", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/scheduled-callbacks/route.ts:73", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/scheduled-callbacks/route.ts:73"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f663375c8e48cb9c", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/weekly-digest-client/route.ts:203", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/weekly-digest-client/route.ts:203"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-061ec1d712983817", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/cleanup-tokens/route.ts:34", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/cleanup-tokens/route.ts:34"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-50fc29577700a1a2", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/notification-health/route.ts:92", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/notification-health/route.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-ccaf83290a0431ea", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/drift-check/route.ts:165", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/drift-check/route.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-9335a3995fad8a98", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/minute-usage-alert/route.ts:115", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/minute-usage-alert/route.ts:115"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bde6d51126492036", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/trial-expiry/route.ts:84", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/trial-expiry/route.ts:84"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c7c9470cf9fcdadf", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/reset-minutes/route.ts:44", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/reset-minutes/route.ts:44"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aa298012acd2afb7", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/stripe/create-public-checkout/route.ts:142", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/stripe/create-public-checkout/route.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-d9d57ad46be68bd2", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/stripe/trial-convert/route.ts:104", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/stripe/trial-convert/route.ts:104"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-532311b8f9e16aea", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/calendar/[slug]/slots/route.ts:19", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/calendar/[slug]/slots/route.ts:19"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c1b711b6eec0ce57", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/calendar/[slug]/book/route.ts:23", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/calendar/[slug]/book/route.ts:23"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d1f23960381588ec", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/knowledge/[slug]/query/route.ts:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/knowledge/[slug]/query/route.ts:28"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dfe8d98d5b1ee1cb", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/advisor/gift-credits/route.ts:97", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/advisor/gift-credits/route.ts:97"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0309d40935cb3493", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/advisor/message/route.ts:442", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/advisor/message/route.ts:442"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c6f81d52734d35d6", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/advisor/summarize/route.ts:151", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/advisor/summarize/route.ts:151"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b04478bce41beab4", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/advisor/credits/route.ts:59", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/advisor/credits/route.ts:59"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-970d9955b5d87f9a", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/settings/SettingsView.tsx:227", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/settings/SettingsView.tsx:227"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-da4cec369d178fbd", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/notifications/page.tsx:335", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/notifications/page.tsx:335"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-df1ca0d81b9380cd", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/voices/page.tsx:187", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/voices/page.tsx:187"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bcb62c002023e10c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/admin/learning-bank/LearningBankClient.tsx:520", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/admin/learning-bank/LearningBankClient.tsx:520"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bdc7389f6e0946fc", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/setup/SetupView.tsx:727", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/setup/SetupView.tsx:727"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c554f8ef178cf207", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/welcome/WelcomeWizard.tsx:120", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/welcome/WelcomeWizard.tsx:120"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b47ec90c5cc5f557", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/onboard/steps/step1-gbp.tsx:450", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/onboard/steps/step1-gbp.tsx:450"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-71fd469ac33f2707", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/for-auto-glass/page.tsx:125", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/for-auto-glass/page.tsx:125"}, "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-19447764e69034a9", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/pricing/page.tsx:38", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/pricing/page.tsx:38"}, "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-72d5d3bfb1be3d73", "name": "Stray `console.log` in TS/JS \u2014 src/lib/seed-knowledge.ts:129", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/seed-knowledge.ts:129"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-73a232d0f0d06341", "name": "Stray `console.log` in TS/JS \u2014 src/lib/settings-patchers.ts:236", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/settings-patchers.ts:236"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3f37c3a428244d86", "name": "Stray `console.log` in TS/JS \u2014 src/lib/google-calendar.ts:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/google-calendar.ts:13"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-217b704128062cdd", "name": "Stray `console.log` in TS/JS \u2014 src/lib/env-check.ts:61", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/env-check.ts:61"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-faeb65521f47d161", "name": "Stray `console.log` in TS/JS \u2014 src/lib/firecrawl.ts:70", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/firecrawl.ts:70"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e1e28b2908785641", "name": "Stray `console.log` in TS/JS \u2014 src/lib/completed-notifications.ts:246", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/completed-notifications.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-97bb96f5318590ad", "name": "Stray `console.log` in TS/JS \u2014 src/lib/prompt-builder.ts:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/prompt-builder.ts:28"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-20c363acf86da518", "name": "Stray `console.log` in TS/JS \u2014 src/lib/service-catalog-sync.ts:93", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/service-catalog-sync.ts:93"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5632958059ad8e90", "name": "Stray `console.log` in TS/JS \u2014 src/lib/embeddings.ts:89", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/embeddings.ts:89"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-db2aba8b5f76465a", "name": "Stray `console.log` in TS/JS \u2014 src/lib/prompt-suggestions.ts:264", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/prompt-suggestions.ts:264"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-671d390ac47a0eb1", "name": "Stray `console.log` in TS/JS \u2014 src/lib/faq-suggestion-generator.ts:139", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/faq-suggestion-generator.ts:139"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8a03520b8a7b555e", "name": "Stray `console.log` in TS/JS \u2014 src/lib/openrouter.ts:181", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/openrouter.ts:181"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0189fa653dae5188", "name": "Stray `console.log` in TS/JS \u2014 src/lib/activate-client.ts:42", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/activate-client.ts:42"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-52c851e04e926918", "name": "Stray `console.log` in TS/JS \u2014 src/lib/slot-regenerator.ts:378", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/slot-regenerator.ts:378"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-11ab4a7e834bf3a0", "name": "TODO/FIXME marker in shipping code \u2014 src/lib/recording-url.ts:11", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/lib/recording-url.ts:11"}, "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-49e29bd419e948c0", "name": "Stray `console.log` in TS/JS \u2014 src/lib/auto-regen.ts:46", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/auto-regen.ts:46"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-29b63963a09fd85e", "name": "React Flow edge with `label=` but no project-wide edge-label CSS override \u2014 src/lib/niche-registry.ts:459", "shortDescription": {"text": "React Flow edge with `label=` but no project-wide edge-label CSS override \u2014 src/lib/niche-registry.ts:459"}, "fullDescription": {"text": "React Flow edge labels render with a white rectangle behind the text by default, which scatters bright boxes across a dark canvas. Either drop the label, or override `.react-flow__edge-textbg` and `.react-flow__edge-text` in your stylesheet.\n\nWhy: P-H in CHECKLIST.md \u2014 vendor edge labels bleed white through a dark canvas.\nRule id: fq.edge-label.no-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d9a4cf877db2ff23", "name": "Stray `console.log` in TS/JS \u2014 src/lib/niche-generator.ts:73", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/niche-generator.ts:73"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a0a39e8620ee2df8", "name": "Stray `console.log` in TS/JS \u2014 src/lib/ultravox.ts:871", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/ultravox.ts:871"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-df72d5f8fe9afc7f", "name": "Stray `console.log` in TS/JS \u2014 src/lib/lesson-generator.ts:251", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/lesson-generator.ts:251"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7f0aeefb248519ec", "name": "Stray `console.log` in TS/JS \u2014 src/lib/website-scraper.ts:115", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/website-scraper.ts:115"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-25ae7dcfa1c04b60", "name": "Stray `console.log` in TS/JS \u2014 src/lib/telegram.ts:9", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/telegram.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-a489150b86d3722a", "name": "Stray `console.log` in TS/JS \u2014 src/lib/ensure-twilio-provisioned.ts:64", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/ensure-twilio-provisioned.ts:64"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e8d753cf0291db98", "name": "Stray `console.log` in TS/JS \u2014 src/lib/sonar-enrichment.ts:54", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/sonar-enrichment.ts:54"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-04681c3a1d49ab9d", "name": "TODO/FIXME marker in shipping code \u2014 src/lib/__tests__/prompt-builder-phase2.test.ts:200", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/lib/__tests__/prompt-builder-phase2.test.ts:200"}, "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-0c33ed9a329a5896", "name": "Privileged port 45 in use", "shortDescription": {"text": "Privileged port 45 in use"}, "fullDescription": {"text": "Port 45 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-45a2f5c0d68bf60d", "name": "Privileged port 15 in use", "shortDescription": {"text": "Privileged port 15 in use"}, "fullDescription": {"text": "Port 15 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-266a6e057f20fbee", "name": "Insecure pattern 'direct_innerhtml_assignment' in dashboard-mockup.html:1408", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in dashboard-mockup.html:1408"}, "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-4f4334c28d0da65c", "name": "Insecure pattern 'node_child_process' in scripts/test-prompt-live.ts:35", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/test-prompt-live.ts:35"}, "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-485749483f7589fa", "name": "Insecure pattern 'direct_innerhtml_assignment' in scripts/staged-test-harness.html:93", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in scripts/staged-test-harness.html:93"}, "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-20c3420b4d02c597", "name": "Insecure pattern 'node_child_process' in scripts/rebuild-tools.mjs:6", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/rebuild-tools.mjs:6"}, "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-197d3d2b21c1fba8", "name": "Insecure pattern 'exec_used' in scripts/test-windshield-staged.ts:179", "shortDescription": {"text": "Insecure pattern 'exec_used' in scripts/test-windshield-staged.ts:179"}, "fullDescription": {"text": "Found a known-risky pattern (exec_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-51d1be8759a86cfd", "name": "Insecure pattern 'node_child_process' in scripts/test-windshield-staged.ts:35", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/test-windshield-staged.ts:35"}, "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-f2a140f4f3cb974b", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/test-prompt-live.html:116", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/test-prompt-live.html:116"}, "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-4c73e4aa0c438549", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/leads/auto-glass-ab-sk.html:172", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/leads/auto-glass-ab-sk.html:172"}, "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-28bff82e9c361422", "name": "Insecure pattern 'dangerous_innerhtml' in src/components/NicheLandingPage.tsx:27", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/NicheLandingPage.tsx:27"}, "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-6f38a33241735455", "name": "Insecure pattern 'dangerous_innerhtml' in src/components/ui/chart.tsx:83", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/ui/chart.tsx:83"}, "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-6a292f12fe30c175", "name": "Insecure pattern 'dangerous_innerhtml' in src/components/advisor/ChatView.tsx:285", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/advisor/ChatView.tsx:285"}, "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-eceed10ddf99c57d", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/page.tsx:44", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/page.tsx:44"}, "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-0b2b000210ef1fb9", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/layout.tsx:150", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/layout.tsx:150"}, "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-cfbb7def17d546fe", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/about/page.tsx:93", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/about/page.tsx:93"}, "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-12ec880f31878e43", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/for-auto-glass/page.tsx:125", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/for-auto-glass/page.tsx:125"}, "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-3a800b6ff3413f93", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/pricing/page.tsx:38", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/pricing/page.tsx:38"}, "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-dbd6666c942b21d7", "name": "Insecure pattern 'node_child_process' in src/lib/__tests__/system-prompt-writer-allowlist.test.ts:35", "shortDescription": {"text": "Insecure pattern 'node_child_process' in src/lib/__tests__/system-prompt-writer-allowlist.test.ts:35"}, "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-d9fb596dfdf2f133", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/upload-artifact@v4 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-67cc684d6bb9dcf1", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/github-script@v7 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-5187162d3a5d82aa", "name": "Very large file: src/components/dashboard/home/InlineModalsV2.tsx (1542 lines)", "shortDescription": {"text": "Very large file: src/components/dashboard/home/InlineModalsV2.tsx (1542 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-bc69a47099f97f88", "name": "Very large file: src/components/dashboard/home/UnifiedHomeSection.tsx (1007 lines)", "shortDescription": {"text": "Very large file: src/components/dashboard/home/UnifiedHomeSection.tsx (1007 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-22868b4cfb2f50d2", "name": "Very large file: src/components/dashboard/knowledge/FileUploadPanel.tsx (1200 lines)", "shortDescription": {"text": "Very large file: src/components/dashboard/knowledge/FileUploadPanel.tsx (1200 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-92a78673296d82e8", "name": "Very large file: src/lib/prompt-slots.ts (1698 lines)", "shortDescription": {"text": "Very large file: src/lib/prompt-slots.ts (1698 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-043a2383b57ab9c7", "name": "Very large file: src/lib/ultravox.ts (1193 lines)", "shortDescription": {"text": "Very large file: src/lib/ultravox.ts (1193 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-1ffa4a7b313a5c17", "name": "Very large file: src/lib/database.types.ts (3670 lines)", "shortDescription": {"text": "Very large file: src/lib/database.types.ts (3670 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-58914f207051fab7", "name": "Very large file: src/lib/prompt-config/niche-defaults.ts (1564 lines)", "shortDescription": {"text": "Very large file: src/lib/prompt-config/niche-defaults.ts (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-ea3b5e389d8c9c0f", "name": "Low test-to-source ratio", "shortDescription": {"text": "Low test-to-source ratio"}, "fullDescription": {"text": "200 tests / 959 src (ratio 0.21)."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-78c0cdf0d2033fab", "name": "Node manifest has dependencies but no lockfile: cloudflare-workers/voice-fallback/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: cloudflare-workers/voice-fallback/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 1749 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 367 placeholder/mock markers across 133 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, lockfile. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license, lockfile. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7be65941f57b0765", "name": "Commented-code block (5 lines) in cloudflare-workers/voice-fallback/src/index.ts:34", "shortDescription": {"text": "Commented-code block (5 lines) in cloudflare-workers/voice-fallback/src/index.ts:34"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-000a54948800efa0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare-workers/voice-fallback/src/index.ts:223", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare-workers/voice-fallback/src/index.ts:223"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ed99a1ccc68e1497", "name": "Commented-code block (7 lines) in tests/phase4-settings-e2e.spec.ts:52", "shortDescription": {"text": "Commented-code block (7 lines) in tests/phase4-settings-e2e.spec.ts:52"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-77c3d2a1227e7489", "name": "Commented-code block (5 lines) in tests/v2-modal-shiptest.spec.ts:436", "shortDescription": {"text": "Commented-code block (5 lines) in tests/v2-modal-shiptest.spec.ts:436"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-966bee82f476da15", "name": "Commented-code block (5 lines) in tests/smoke-trial-flow.spec.ts:159", "shortDescription": {"text": "Commented-code block (5 lines) in tests/smoke-trial-flow.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-934de6095b9c1aed", "name": "Commented-code block (6 lines) in tests/schemathesis/conftest.py:222", "shortDescription": {"text": "Commented-code block (6 lines) in tests/schemathesis/conftest.py:222"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d93ea8b681985e42", "name": "Commented-code block (7 lines) in tests/truth-audit/tenant-isolation.spec.ts:90", "shortDescription": {"text": "Commented-code block (7 lines) in tests/truth-audit/tenant-isolation.spec.ts:90"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9eda3ebc4525cf44", "name": "Commented-code block (5 lines) in tests/truth-audit/transfer-recovery.spec.ts:71", "shortDescription": {"text": "Commented-code block (5 lines) in tests/truth-audit/transfer-recovery.spec.ts:71"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-df36d8ab1b8289d2", "name": "Commented-code block (8 lines) in tests/promptfoo/knowledge-routing/audit.ts:269", "shortDescription": {"text": "Commented-code block (8 lines) in tests/promptfoo/knowledge-routing/audit.ts:269"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-305250dc85fee4f5", "name": "Commented-code block (5 lines) in tests/promptfoo/scripts/generate-auto-glass-prompt.ts:46", "shortDescription": {"text": "Commented-code block (5 lines) in tests/promptfoo/scripts/generate-auto-glass-prompt.ts:46"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d5e86a0944ece33b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/resync-exp-realty.ts:56", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/resync-exp-realty.ts:56"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c1ddda1e2302bc22", "name": "Commented-code block (6 lines) in scripts/deploy_prompt.py:44", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/deploy_prompt.py:44"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-40d5068ad6b168da", "name": "Network/subprocess call without timeout or try/except \u2014 scripts/deploy_prompt.py:117", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/deploy_prompt.py:117"}, "fullDescription": {"text": "`urllib.request.urlopen(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-25af9b1aca51655a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/set-twilio-voice-fallback.ts:60", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/set-twilio-voice-fallback.ts:60"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f9297dcf3e014ce1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/backfill-chunks.ts:83", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/backfill-chunks.ts:83"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0fba179064ada1dd", "name": "Commented-code block (6 lines) in scripts/migrate-velly-to-slots.ts:75", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/migrate-velly-to-slots.ts:75"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-72c1e85e7e4f3225", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/verify-ultravox-synced.ts:10", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/verify-ultravox-synced.ts:10"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-84a8bcc899cd4a5a", "name": "Network/subprocess call without timeout or try/except \u2014 scripts/prompt_status.py:97", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/prompt_status.py:97"}, "fullDescription": {"text": "`urllib.request.urlopen(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-687ebae890914114", "name": "Commented-code block (6 lines) in scripts/register-ultravox-webhook.py:78", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/register-ultravox-webhook.py:78"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f944949bef14fbbe", "name": "Commented-code block (6 lines) in scripts/recompose-aman.ts:48", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/recompose-aman.ts:48"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-22cb04ae86fb5788", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-prompt-live.ts:98", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-prompt-live.ts:98"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-942d0c1bd22998ae", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/patch-velly-universal-rules.ts:95", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/patch-velly-universal-rules.ts:95"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-abe27288148a0c62", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/backfill-gap-embeddings.ts:19", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/backfill-gap-embeddings.ts:19"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2c5e7b3bdf173f9c", "name": "Legacy-named symbol `isLegacy` in scripts/drift-check-all.ts:90", "shortDescription": {"text": "Legacy-named symbol `isLegacy` in scripts/drift-check-all.ts:90"}, "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-3912a9fa31f72dd0", "name": "Network/subprocess call without timeout or try/except \u2014 scripts/test-sip-transfer.py:54", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/test-sip-transfer.py:54"}, "fullDescription": {"text": "`urllib.request.urlopen(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a78217c257e5081d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/one-off-set-voice.ts:61", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/one-off-set-voice.ts:61"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-06e229dd9f7b790b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/ingest-fallback-recordings.ts:59", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/ingest-fallback-recordings.ts:59"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0b3569e29fc2b79c", "name": "Commented-code block (6 lines) in scripts/telegram-health-check.ts:334", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/telegram-health-check.ts:334"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9c92052be7526d84", "name": "Network/subprocess call without timeout or try/except \u2014 scripts/backfill-corpus.py:42", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/backfill-corpus.py:42"}, "fullDescription": {"text": "`urllib.request.urlopen(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cefd7cfe11ac354b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/provisioning-completeness-check.ts:95", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/provisioning-completeness-check.ts:95"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-dcf439b42739a973", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/canary-truth-snapshot.ts:64", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/canary-truth-snapshot.ts:64"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8a3132863ad3dac2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/onboard-aman.ts:275", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/onboard-aman.ts:275"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c01304b1d19f460a", "name": "Legacy-named symbol `hasLegacy` in scripts/p3-fleet-snapshot-audit.ts:47", "shortDescription": {"text": "Legacy-named symbol `hasLegacy` in scripts/p3-fleet-snapshot-audit.ts:47"}, "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-72aa0f2ecad7d490", "name": "Network/subprocess call without timeout or try/except \u2014 scripts/seed-demo-knowledge.py:22", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/seed-demo-knowledge.py:22"}, "fullDescription": {"text": "`requests.get(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e40092305b6d178f", "name": "Commented-code block (8 lines) in scripts/nightly-drift-check.ts:169", "shortDescription": {"text": "Commented-code block (8 lines) in scripts/nightly-drift-check.ts:169"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0da8b9ac598e9bec", "name": "Commented-code block (5 lines) in scripts/admin-trial-cleanup.mjs:4", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/admin-trial-cleanup.mjs:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-68239f5a08ce6f22", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/admin-trial-cleanup.mjs:145", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/admin-trial-cleanup.mjs:145"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-997d3be3fa2c00d9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/onboard-emon.ts:87", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/onboard-emon.ts:87"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d50903cddb734d0a", "name": "Commented-code block (6 lines) in src/types/onboarding.ts:180", "shortDescription": {"text": "Commented-code block (6 lines) in src/types/onboarding.ts:180"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c619e4b1d6ccee13", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/LeadQueue.tsx:263", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/LeadQueue.tsx:263"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4be246ecfce430be", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/MaintenanceTab.tsx:77", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/MaintenanceTab.tsx:77"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-154a07b43dbc6ff7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/CallGapReview.tsx:93", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/CallGapReview.tsx:93"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c0071a6aa843de28", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/settings/PromptVersionsCard.tsx:24", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/settings/PromptVersionsCard.tsx:24"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-144b80f235b1e1a1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/settings/LearningLoopCard.tsx:50", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/settings/LearningLoopCard.tsx:50"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-86bd30c287c28190", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/settings/VIPContactsCard.tsx:91", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/settings/VIPContactsCard.tsx:91"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9e1b1f3a38763de4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/settings/CallRoutingCard.tsx:84", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/settings/CallRoutingCard.tsx:84"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b673884abe15423e", "name": "Commented-code block (5 lines) in src/components/dashboard/settings/PromptVariablesCard.tsx:426", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/dashboard/settings/PromptVariablesCard.tsx:426"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5d321bf7ca7511c3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/settings/ContextDataCard.tsx:34", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/settings/ContextDataCard.tsx:34"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ed0c2dee268936b2", "name": "Commented-code block (5 lines) in src/components/dashboard/settings/usePatchSettings.ts:236", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/dashboard/settings/usePatchSettings.ts:236"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d11c916cff837c60", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/settings/QuickInject.tsx:29", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/settings/QuickInject.tsx:29"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e49d49e5428728db", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/settings/VoicePicker.tsx:41", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/settings/VoicePicker.tsx:41"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-472f97ad42cdb11f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/settings/PlanInfoCard.tsx:109", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/settings/PlanInfoCard.tsx:109"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-301b63647bd412f8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/settings/knowledge/GapAnswerSection.tsx:65", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/settings/knowledge/GapAnswerSection.tsx:65"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7c3201e1d4bb5eb7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/go-live/GoLiveVoicePicker.tsx:45", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/go-live/GoLiveVoicePicker.tsx:45"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fd64417b2735d7f4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/home/UnansweredQuestionsTile.tsx:95", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/home/UnansweredQuestionsTile.tsx:95"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-37bb165cf4946586", "name": "Commented-code block (6 lines) in src/components/dashboard/home/AgentIdentityCard.tsx:168", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/dashboard/home/AgentIdentityCard.tsx:168"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-11dcfa75d39fd25c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/actions/ServiceCatalogEditor.tsx:56", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/actions/ServiceCatalogEditor.tsx:56"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-74527dfbcdf3725a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/knowledge/BulkImportPanel.tsx:39", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/knowledge/BulkImportPanel.tsx:39"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-af68c43eb6398f2b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/knowledge/ChunkBrowser.tsx:90", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/knowledge/ChunkBrowser.tsx:90"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3c001c2c030ce3b1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/knowledge/WebsiteScrapePanel.tsx:90", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/knowledge/WebsiteScrapePanel.tsx:90"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c99537c871601755", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/outbound/LeadQueue.tsx:78", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/outbound/LeadQueue.tsx:78"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-169d7301c0d8d24a", "name": "Commented-code block (5 lines) in src/components/admin/ClientSwitcher.tsx:7", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/admin/ClientSwitcher.tsx:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d7cc11e0ea53a028", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/advisor/InsightCards.tsx:46", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/advisor/InsightCards.tsx:46"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f04f0604d029c268", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/advisor/ChatView.tsx:136", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/advisor/ChatView.tsx:136"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-466b8613bcc86e45", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/auth/google/callback/route.ts:36", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/auth/google/callback/route.ts:36"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e122d6f0bb28a9e6", "name": "Commented-code block (6 lines) in src/app/api/webhook/telegram/route.ts:123", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/webhook/telegram/route.ts:123"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-560ebf6227bc1486", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/webhook/telegram/route.ts:75", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/webhook/telegram/route.ts:75"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-632068e39e6e55f1", "name": "Commented-code block (5 lines) in src/app/api/webhook/stripe/route.ts:753", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/webhook/stripe/route.ts:753"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ce7b4059cd602569", "name": "Commented-code block (6 lines) in src/app/api/webhook/[slug]/inbound/route.ts:284", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/webhook/[slug]/inbound/route.ts:284"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1b0ea50a19eaac89", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/webhook/[slug]/whisper/route.ts:39", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/webhook/[slug]/whisper/route.ts:39"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2f94a3fed4cd1642", "name": "Commented-code block (7 lines) in src/app/api/webhook/[slug]/completed/route.ts:172", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/api/webhook/[slug]/completed/route.ts:172"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5b8ace90d1c4be49", "name": "Commented-code block (5 lines) in src/app/api/webhook/[slug]/sms/route.ts:135", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/webhook/[slug]/sms/route.ts:135"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6b3c20c3e0f4aa18", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/dashboard/settings/improve-prompt/route.ts:179", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/dashboard/settings/improve-prompt/route.ts:179"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3331fbc397024073", "name": "Commented-code block (5 lines) in src/app/api/dashboard/regenerate-prompt/route.ts:130", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/dashboard/regenerate-prompt/route.ts:130"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d96710e25a32ac5a", "name": "Commented-code block (5 lines) in src/app/api/dashboard/regenerate-prompt/preview/route.ts:76", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/dashboard/regenerate-prompt/preview/route.ts:76"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-721694f53a05df57", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/dashboard/voices/route.ts:12", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/dashboard/voices/route.ts:12"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-01b235b7cda42cc1", "name": "Commented-code block (5 lines) in src/app/api/dashboard/voices/[voiceId]/preview/route.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/dashboard/voices/[voiceId]/preview/route.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d420ae5efb35dde0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/dashboard/voices/[voiceId]/preview/route.ts:31", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/dashboard/voices/[voiceId]/preview/route.ts:31"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e931a99f5db4a7cf", "name": "Commented-code block (6 lines) in src/app/api/dashboard/agent/runtime-state/route.ts:209", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/dashboard/agent/runtime-state/route.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-edde50594cc47309", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/dashboard/demo-calls/[id]/recording/route.ts:43", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/dashboard/demo-calls/[id]/recording/route.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-ebc92883e774e865", "name": "Commented-code block (9 lines) in src/app/api/dashboard/forwarding-diagnostic/test/route.ts:149", "shortDescription": {"text": "Commented-code block (9 lines) in src/app/api/dashboard/forwarding-diagnostic/test/route.ts:149"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dcaaab61083b1145", "name": "Commented-code block (6 lines) in src/app/api/dashboard/variables/route.ts:135", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/dashboard/variables/route.ts:135"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9af428fdb5dd3afb", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/dashboard/calls/[id]/recording/route.ts:44", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/dashboard/calls/[id]/recording/route.ts:44"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cf8d092bccc7cb7b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/dashboard/calls/[id]/events/route.ts:60", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/dashboard/calls/[id]/events/route.ts:60"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9661bf748116c821", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/dashboard/calls/[id]/whisper/route.ts:51", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/dashboard/calls/[id]/whisper/route.ts:51"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-390a7162c77f369e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/dashboard/calls/[id]/messages/route.ts:48", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/dashboard/calls/[id]/messages/route.ts:48"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b7c44ac4fff62c4c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/dashboard/calls/[id]/stages/route.ts:55", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/dashboard/calls/[id]/stages/route.ts:55"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-22ecabb20b383df8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/dashboard/costs/route.ts:75", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/dashboard/costs/route.ts:75"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-13fc4c44c956617b", "name": "Commented-code block (5 lines) in src/app/api/dashboard/generate-prompt/route.ts:92", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/dashboard/generate-prompt/route.ts:92"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-974246be18057037", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/dashboard/dial/route.ts:118", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/dashboard/dial/route.ts:118"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-661a5068e084074c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/dashboard/analyze-now/route.ts:95", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/dashboard/analyze-now/route.ts:95"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d86d718b1a3cc2ee", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/onboard/places-autocomplete/route.ts:54", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/onboard/places-autocomplete/route.ts:54"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-493b053c6ef8ee0b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/onboard/places-details/route.ts:59", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/onboard/places-details/route.ts:59"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-dce4335d95e6aad2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/onboard/places-lookup/route.ts:62", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/onboard/places-lookup/route.ts:62"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-87c68b19347fc41a", "name": "Commented-code block (5 lines) in src/app/api/provision/trial/route.ts:233", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/provision/trial/route.ts:233"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ccdee7c2e14846cc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/configure-sms-webhooks/route.ts:52", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/configure-sms-webhooks/route.ts:52"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3175d7de5e53cbbd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/recording/route.ts:11", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/recording/route.ts:11"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7cda523c81239053", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/setup-telegram-webhook/route.ts:20", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/setup-telegram-webhook/route.ts:20"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2885a10e7405291e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/send-login-link/route.ts:103", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/send-login-link/route.ts:103"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bbe08a085d148f70", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/numbers/route.ts:72", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/numbers/route.ts:72"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-06687d4b205d5c29", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/unassign-number/route.ts:81", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/unassign-number/route.ts:81"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b090573473e81cee", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/test-activate/route.ts:260", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/test-activate/route.ts:260"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-593cc4dd31d6da79", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/transcript/route.ts:15", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/transcript/route.ts:15"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b7f9f99ef7a9efce", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/cron/analyze-calls/route.ts:101", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/cron/analyze-calls/route.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-73a51a9b739ed4bc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/cron/trial-expiry/route.ts:326", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/cron/trial-expiry/route.ts:326"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6ef630e15b236d94", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/public/voices/route.ts:27", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/public/voices/route.ts:27"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-baa93c69335e6e0f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/public/voice-preview/[voiceId]/route.ts:6", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/public/voice-preview/[voiceId]/route.ts:6"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7f0f498434dbdafb", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/advisor/summarize/route.ts:67", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/advisor/summarize/route.ts:67"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8e505db1c9609a54", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/voices/page.tsx:329", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/voices/page.tsx:329"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3a94a6e4507fe27b", "name": "Commented-code block (5 lines) in src/app/dashboard/agent/AgentPageView.tsx:258", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/dashboard/agent/AgentPageView.tsx:258"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-748ba08bc9f1ce94", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/admin/learning-bank/LearningBankClient.tsx:449", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/admin/learning-bank/LearningBankClient.tsx:449"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bb05a502fe6bf4d4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/lab/LabView.tsx:201", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/lab/LabView.tsx:201"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f471833509a5ec48", "name": "Commented-code block (6 lines) in src/app/dashboard/setup/SetupView.tsx:165", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/dashboard/setup/SetupView.tsx: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-b960c55a36e521b6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/knowledge/KnowledgePageView.tsx:453", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/knowledge/KnowledgePageView.tsx:453"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-29796f36f842ad51", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/outbound/page.tsx:65", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/outbound/page.tsx:65"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ca320376d8f87575", "name": "Commented-code block (6 lines) in src/app/onboard/page.tsx:114", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/onboard/page.tsx:114"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-548de1eaa9e0272d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/onboard/page.tsx:182", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/onboard/page.tsx:182"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f702fe7d626223bf", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/onboard/steps/step1-gbp.tsx:302", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/onboard/steps/step1-gbp.tsx:302"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b2cd8cb5907c5fed", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/onboard/steps/step-niche.tsx:153", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/onboard/steps/step-niche.tsx:153"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e7a0aa89d51c92e0", "name": "Legacy-named symbol `sewer_backup` in src/app/onboard/steps/niches/plumbing.tsx:30", "shortDescription": {"text": "Legacy-named symbol `sewer_backup` in src/app/onboard/steps/niches/plumbing.tsx:30"}, "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-b57549b947695009", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/onboard/status/page.tsx:120", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/onboard/status/page.tsx:120"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9132105b4a91bbd1", "name": "Commented-code block (6 lines) in src/lib/knowledge-summary.ts:165", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/knowledge-summary.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-eea76b025f7098d1", "name": "Commented-code block (6 lines) in src/lib/seed-knowledge.ts:120", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/seed-knowledge.ts:120"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5f65e1864509aa61", "name": "Commented-code block (6 lines) in src/lib/google-calendar.ts:104", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/google-calendar.ts:104"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e567147228d1bd3d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/google-calendar.ts:18", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/google-calendar.ts:18"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-782eac075768fec8", "name": "Commented-code block (6 lines) in src/lib/completed-notifications.ts:205", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/completed-notifications.ts:205"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ec13aadc6b596900", "name": "Legacy-named symbol `_buildPrompt_legacy` in src/lib/prompt-builder.ts:5", "shortDescription": {"text": "Legacy-named symbol `_buildPrompt_legacy` in src/lib/prompt-builder.ts:5"}, "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-b8895776e919a722", "name": "Commented-code block (6 lines) in src/lib/data-hygiene.ts:200", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/data-hygiene.ts:200"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c1381ea4ae3634aa", "name": "Commented-code block (5 lines) in src/lib/voice-presets.ts:33", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/voice-presets.ts:33"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-055e72d4d3aa35c8", "name": "Commented-code block (5 lines) in src/lib/admin-scope-guard.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/admin-scope-guard.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-30f98601b8585485", "name": "Commented-code block (6 lines) in src/lib/prompt-helpers.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/prompt-helpers.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e770e762e568f3df", "name": "Commented-code block (7 lines) in src/lib/prompt-validation.ts:49", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/prompt-validation.ts:49"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4066c89cfc555023", "name": "Commented-code block (5 lines) in src/lib/prompt-slots.ts:89", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/prompt-slots.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-da6239e601ea62b2", "name": "Commented-code block (5 lines) in src/lib/openrouter.ts:165", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/openrouter.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-f8bb6658f243d8a9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/activate-client.ts:317", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/activate-client.ts:317"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4e88c80e6ec5f8d5", "name": "Commented-code block (5 lines) in src/lib/slot-regenerator.ts:324", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/slot-regenerator.ts:324"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-78978392a3f1c40b", "name": "Commented-code block (10 lines) in src/lib/admin-scope.ts:3", "shortDescription": {"text": "Commented-code block (10 lines) in src/lib/admin-scope.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7082d895ca16c443", "name": "Commented-code block (5 lines) in src/lib/settings-schema.ts:74", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/settings-schema.ts:74"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d87e0fed0e218add", "name": "Commented-code block (6 lines) in src/lib/pricing.ts:222", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/pricing.ts:222"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-32c0b269ee5558da", "name": "Commented-code block (9 lines) in src/lib/tool-invocations.ts:9", "shortDescription": {"text": "Commented-code block (9 lines) in src/lib/tool-invocations.ts:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a66ee9a1a5403976", "name": "Commented-code block (6 lines) in src/lib/stripe-drift.ts:35", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/stripe-drift.ts:35"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-005953564b2b0684", "name": "Commented-code block (7 lines) in src/lib/dashboard-routes.ts:6", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/dashboard-routes.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c776944f2e9d6c51", "name": "Commented-code block (7 lines) in src/lib/ultravox.ts:852", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/ultravox.ts:852"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-12e4e5395be2d696", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/ultravox.ts:809", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/ultravox.ts:809"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4f4ba2fae387af3f", "name": "Commented-code block (5 lines) in src/lib/known-vocabulary.ts:22", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/known-vocabulary.ts:22"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4f5760fcbb991ff1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/website-scraper.ts:7", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/website-scraper.ts:7"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3c77859003da63f3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/ensure-twilio-provisioned.ts:129", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/ensure-twilio-provisioned.ts:129"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5830a474619323cd", "name": "Legacy-named symbol `sewage_backup` in src/lib/intake-transform.ts:279", "shortDescription": {"text": "Legacy-named symbol `sewage_backup` in src/lib/intake-transform.ts:279"}, "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-8bff20b2b91d804f", "name": "Commented-code block (5 lines) in src/lib/intake-transform.ts:131", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/intake-transform.ts:131"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a583eb92d6b99991", "name": "Commented-code block (5 lines) in src/lib/__tests__/prompt-builder-phase2.test.ts:30", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/__tests__/prompt-builder-phase2.test.ts:30"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-31d24b52c98cb4c9", "name": "Commented-code block (5 lines) in src/lib/__tests__/google-calendar-slots.test.ts:10", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/__tests__/google-calendar-slots.test.ts:10"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-20510df5017214bc", "name": "Commented-code block (8 lines) in src/lib/__tests__/field-registry-coverage.test.ts:90", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/__tests__/field-registry-coverage.test.ts:90"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ec4cbed91cd438e1", "name": "Commented-code block (6 lines) in src/lib/__tests__/agent-name-provision.test.ts:201", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/__tests__/agent-name-provision.test.ts:201"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-20f4ed81165e7c93", "name": "Commented-code block (17 lines) in src/lib/__tests__/settings-schema.test.ts:160", "shortDescription": {"text": "Commented-code block (17 lines) in src/lib/__tests__/settings-schema.test.ts:160"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d3f15aa73a493f49", "name": "Commented-code block (5 lines) in src/lib/__tests__/agent-context.test.ts:415", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/__tests__/agent-context.test.ts:415"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5d503fb4afa14780", "name": "Commented-code block (6 lines) in src/lib/__tests__/business-notes-chain.test.ts:88", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/__tests__/business-notes-chain.test.ts:88"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d531e8c36b7f2617", "name": "Commented-code block (8 lines) in src/lib/__tests__/prompt-knowledge-separation.test.ts:249", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/__tests__/prompt-knowledge-separation.test.ts:249"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-59ce01842e22ddd5", "name": "Commented-code block (6 lines) in src/lib/__tests__/kb-aware-niche.test.ts:102", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/__tests__/kb-aware-niche.test.ts:102"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e72c41d4ce0ea16c", "name": "Commented-code block (5 lines) in src/lib/__tests__/call-scenarios.test.ts:852", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/__tests__/call-scenarios.test.ts:852"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4b9a85a9ad319011", "name": "Commented-code block (5 lines) in src/lib/__tests__/prompt-builder-golden.test.ts:550", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/__tests__/prompt-builder-golden.test.ts:550"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f307b0aabb47724c", "name": "Commented-code block (7 lines) in src/lib/__tests__/scrape-preview.test.ts:7", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/__tests__/scrape-preview.test.ts:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fe162134a5b2446b", "name": "Commented-code block (18 lines) in src/lib/__tests__/slot-ceilings.test.ts:82", "shortDescription": {"text": "Commented-code block (18 lines) in src/lib/__tests__/slot-ceilings.test.ts:82"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b9fa5972ff9263b0", "name": "Commented-code block (5 lines) in src/lib/__tests__/agent-mode-phase2b.test.ts:224", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/__tests__/agent-mode-phase2b.test.ts:224"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d5874080371bb1ba", "name": "Commented-code block (8 lines) in src/lib/__tests__/system-prompt-writer-allowlist.test.ts:199", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/__tests__/system-prompt-writer-allowlist.test.ts:199"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0258467487fa6cf1", "name": "Commented-code block (5 lines) in src/lib/__tests__/slot-regenerator.test.ts:173", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/__tests__/slot-regenerator.test.ts:173"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-770f7b20a5052540", "name": "Commented-code block (7 lines) in src/lib/__tests__/telegram-tier3.test.ts:35", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/__tests__/telegram-tier3.test.ts:35"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0d267471e8184c83", "name": "Commented-code block (6 lines) in src/lib/telegram/assistant.ts:252", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/telegram/assistant.ts:252"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d5c02853a3cccf61", "name": "Commented-code block (5 lines) in src/lib/prompt-config/niche-defaults.ts:785", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/prompt-config/niche-defaults.ts:785"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ef22fd58bfde6f76", "name": "51 env vars used in code but missing from .env.example", "shortDescription": {"text": "51 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `ADMIN_PASSWORD`, `ADMIN_REDESIGN_ENABLED`, `AGENT_WEBHOOK_BASE`, `BASE_URL`, `BRAND_MAILING_ADDRESS`, `BRAND_NAME`, `CI`, `CONCIERGE_CLIENTS` + 43 more. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/21750"}, "properties": {"repository": "tubby124/unmissed-ai", "repoUrl": "https://github.com/tubby124/unmissed-ai", "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-e68a93bfcb7f324c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/tc-check.spec.ts:9"}, "properties": {"repobilityId": "ff77aabc53d870d0", "scanner": "scanner-primary", "fingerprint": "e68a93bfcb7f324c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b442e15a007fc499", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/phase4-settings-e2e.spec.ts:234"}, "properties": {"repobilityId": "ff7aa79b44ca1ca2", "scanner": "scanner-primary", "fingerprint": "b442e15a007fc499", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5c473cf389aa5d78", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/smoke-trial-flow.spec.ts:68"}, "properties": {"repobilityId": "c9b0051a454531b7", "scanner": "scanner-primary", "fingerprint": "5c473cf389aa5d78", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7078f1dee9398971", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/retrieval-eval/run-eval.ts:77"}, "properties": {"repobilityId": "96f98863db802490", "scanner": "scanner-primary", "fingerprint": "7078f1dee9398971", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bc643d6d499f3d27", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/retrieval-eval/lib/reporter.ts:18"}, "properties": {"repobilityId": "19178a04dbcff986", "scanner": "scanner-primary", "fingerprint": "bc643d6d499f3d27", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-073593ed6dff3840", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/truth-audit/minutes-display-accuracy.spec.ts:52"}, "properties": {"repobilityId": "c563d2720fa41f18", "scanner": "scanner-primary", "fingerprint": "073593ed6dff3840", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4cb92128c03a9a0d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/truth-audit/tenant-isolation.spec.ts:71"}, "properties": {"repobilityId": "c63e1292e386963b", "scanner": "scanner-primary", "fingerprint": "4cb92128c03a9a0d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7034e522c8aca01f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/truth-audit/trial-email-dedup.spec.ts:101"}, "properties": {"repobilityId": "92b9429a009b111f", "scanner": "scanner-primary", "fingerprint": "7034e522c8aca01f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-248f249d7fc3e374", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/truth-audit/transfer-recovery.spec.ts:87"}, "properties": {"repobilityId": "c802de7484527a03", "scanner": "scanner-primary", "fingerprint": "248f249d7fc3e374", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a32b0aaa1ee2e18a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/truth-audit/settings-sync-proof.spec.ts:49"}, "properties": {"repobilityId": "951031db9ba7250b", "scanner": "scanner-primary", "fingerprint": "a32b0aaa1ee2e18a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-56146fb76d838e0e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/truth-audit/service-catalog-save.spec.ts:82"}, "properties": {"repobilityId": "095f46e869fbc96e", "scanner": "scanner-primary", "fingerprint": "56146fb76d838e0e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-462f67cedd7bd52a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/truth-audit/capability-badge-truth.spec.ts:76"}, "properties": {"repobilityId": "48f6a56dc79b625c", "scanner": "scanner-primary", "fingerprint": "462f67cedd7bd52a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-25a636c2f7201ac8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/truth-audit/admin-test-call-tenant.spec.ts:93"}, "properties": {"repobilityId": "ea1262aba1eac5b5", "scanner": "scanner-primary", "fingerprint": "25a636c2f7201ac8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-82ce7ecc728929e5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/canary/eval-harness.ts:44"}, "properties": {"repobilityId": "f1b0a9f2ade67efc", "scanner": "scanner-primary", "fingerprint": "82ce7ecc728929e5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-42b648cd81ff667c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/promptfoo/knowledge-routing/query-preview.ts:209"}, "properties": {"repobilityId": "17e1460aaa5ba26f", "scanner": "scanner-primary", "fingerprint": "42b648cd81ff667c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bbf5b8a26d949d4d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/promptfoo/knowledge-routing/corpus-inspect.ts:262"}, "properties": {"repobilityId": "b0fe100ae87de6ff", "scanner": "scanner-primary", "fingerprint": "bbf5b8a26d949d4d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f7927b7c765d89a6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/promptfoo/knowledge-routing/audit.ts:810"}, "properties": {"repobilityId": "2c1b6c276fac1ad1", "scanner": "scanner-primary", "fingerprint": "f7927b7c765d89a6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f82d9f5cc60521e2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/promptfoo/scripts/transcript-replay.ts:170"}, "properties": {"repobilityId": "31b36dbbadb8ee9f", "scanner": "scanner-primary", "fingerprint": "f82d9f5cc60521e2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-59e111bf04198c06", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/promptfoo/scripts/run-adversarial-eval.ts:226"}, "properties": {"repobilityId": "59732bea0158c65d", "scanner": "scanner-primary", "fingerprint": "59e111bf04198c06", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-80ccbc1d0ced0ef2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/promptfoo/scripts/export-phase-d-baseline.ts:148"}, "properties": {"repobilityId": "c103e2668c1d3089", "scanner": "scanner-primary", "fingerprint": "80ccbc1d0ced0ef2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ee1918660ac3c3c0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/promptfoo/scripts/deliberate-break-test.ts:124"}, "properties": {"repobilityId": "ae6bb2020310cfc7", "scanner": "scanner-primary", "fingerprint": "ee1918660ac3c3c0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-27b52302753553a0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/promptfoo/scripts/check-phase-d-drift.ts:67"}, "properties": {"repobilityId": "01c98ee139ad5ada", "scanner": "scanner-primary", "fingerprint": "27b52302753553a0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-dccad56a5ab0945c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/promptfoo/scripts/record-promptfoo-findings.ts:138"}, "properties": {"repobilityId": "098b393305bede29", "scanner": "scanner-primary", "fingerprint": "dccad56a5ab0945c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-981150b081d56155", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/s12-audit/a4-trial-click.js:10"}, "properties": {"repobilityId": "2a0abe68ec0caeeb", "scanner": "scanner-primary", "fingerprint": "981150b081d56155", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6cff2454f4ecb33d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/s12-audit/a3-settings-deep.js:10"}, "properties": {"repobilityId": "b34e2ed7b4ffa148", "scanner": "scanner-primary", "fingerprint": "6cff2454f4ecb33d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-46be69a84043f179", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/s12-audit/a3-client-settings.js:10"}, "properties": {"repobilityId": "e49b8d11f4cb5edd", "scanner": "scanner-primary", "fingerprint": "46be69a84043f179", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c3a8430988e17983", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/s12-audit/a4-onboarding-v2.js:10"}, "properties": {"repobilityId": "f716c2c0ee8e2d58", "scanner": "scanner-primary", "fingerprint": "c3a8430988e17983", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0c90983046d17970", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/s12-audit/security-deep-check.js:8"}, "properties": {"repobilityId": "f392daf300b10ce9", "scanner": "scanner-primary", "fingerprint": "0c90983046d17970", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-04fa7a752fd34a05", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/s12-audit/a4-onboarding-trial.js:11"}, "properties": {"repobilityId": "267f70faf7a79b86", "scanner": "scanner-primary", "fingerprint": "04fa7a752fd34a05", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bd445c4dd65760e3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/s12-audit/a3-specific-settings.js:9"}, "properties": {"repobilityId": "c05337610f62429f", "scanner": "scanner-primary", "fingerprint": "bd445c4dd65760e3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0b1956e2a48d7c3f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/s12-audit/a3-admin-dashboard.js:15"}, "properties": {"repobilityId": "66117fde15766db8", "scanner": "scanner-primary", "fingerprint": "0b1956e2a48d7c3f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-163b9d22f6461714", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/s12-audit/e3-post-activation.js:10"}, "properties": {"repobilityId": "e1ca1772de180c04", "scanner": "scanner-primary", "fingerprint": "163b9d22f6461714", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f810dec152733235", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/s12-audit/settings-tabs-audit.js:12"}, "properties": {"repobilityId": "37392442520f803a", "scanner": "scanner-primary", "fingerprint": "f810dec152733235", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-05688ec68df4e532", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/s12-audit/client-dashboard-audit.js:27"}, "properties": {"repobilityId": "80b2bd205f4313c2", "scanner": "scanner-primary", "fingerprint": "05688ec68df4e532", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f2fcdaafd6ac4c86", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 docs/s12-audit/console-errors.js:73"}, "properties": {"repobilityId": "384136c6380960ca", "scanner": "scanner-primary", "fingerprint": "f2fcdaafd6ac4c86", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6d37c21874449582", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/brian-replay-tool.ts:46"}, "properties": {"repobilityId": "88926f84bee53bee", "scanner": "scanner-primary", "fingerprint": "6d37c21874449582", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-39655673382a4786", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/resync-exp-realty.ts:67"}, "properties": {"repobilityId": "84dda7b2b882556d", "scanner": "scanner-primary", "fingerprint": "39655673382a4786", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6d8085ae29160540", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/set-twilio-voice-fallback.ts:98"}, "properties": {"repobilityId": "296b773562874522", "scanner": "scanner-primary", "fingerprint": "6d8085ae29160540", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9182f24a658f5a15", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-chunks.ts:78"}, "properties": {"repobilityId": "5c92eae856344759", "scanner": "scanner-primary", "fingerprint": "9182f24a658f5a15", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f26738e13bdeb2da", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/audit-d445-snowflakes.ts:30"}, "properties": {"repobilityId": "0ee7dda92abcd8f6", "scanner": "scanner-primary", "fingerprint": "f26738e13bdeb2da", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a4a6b452bc75ecde", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-transcripts.ts:83"}, "properties": {"repobilityId": "3e7a267125562fe6", "scanner": "scanner-primary", "fingerprint": "a4a6b452bc75ecde", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-645a0818e181fe4b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-velly-to-slots.ts:90"}, "properties": {"repobilityId": "b7d5153a8f9e195d", "scanner": "scanner-primary", "fingerprint": "645a0818e181fe4b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-478dd4f4b49281e0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/inspect-call-logs-cols.ts:9"}, "properties": {"repobilityId": "f8c82a11f31ca6a8", "scanner": "scanner-primary", "fingerprint": "478dd4f4b49281e0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2b09db8034c530bd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/inspect-brian-transcript.ts:7"}, "properties": {"repobilityId": "986f7a71a15b1ce6", "scanner": "scanner-primary", "fingerprint": "2b09db8034c530bd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-943e25d71c213efe", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/regen-golden-snapshots.ts:90"}, "properties": {"repobilityId": "0fadd5d78a78f52b", "scanner": "scanner-primary", "fingerprint": "943e25d71c213efe", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f8dae6088f7a3e3b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/flip-windshield-hand-tuned.ts:10"}, "properties": {"repobilityId": "2c5bdf36d9b13605", "scanner": "scanner-primary", "fingerprint": "f8dae6088f7a3e3b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-81059f2460479659", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/deploy-outbound-fields.ts:67"}, "properties": {"repobilityId": "7405ea0a7db0fb90", "scanner": "scanner-primary", "fingerprint": "81059f2460479659", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6e4b22c67478ded5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/rollback-client-settings-chunks.ts:59"}, "properties": {"repobilityId": "365de94f2615faf5", "scanner": "scanner-primary", "fingerprint": "6e4b22c67478ded5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ec5c7b4d986617df", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verify-ultravox-synced.ts:24"}, "properties": {"repobilityId": "dcf69b85db2d464f", "scanner": "scanner-primary", "fingerprint": "ec5c7b4d986617df", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-eb751bfcab4dbc75", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/dryrun-urban-vibe.ts:33"}, "properties": {"repobilityId": "59ea77201d278316", "scanner": "scanner-primary", "fingerprint": "eb751bfcab4dbc75", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a07b839687f352d8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/recompose-pm-question-intake.ts:52"}, "properties": {"repobilityId": "e9204bd8eb24c3ae", "scanner": "scanner-primary", "fingerprint": "a07b839687f352d8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-20598f98c484bfea", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verify-hot-queries-view.ts:7"}, "properties": {"repobilityId": "d55d7572c9687750", "scanner": "scanner-primary", "fingerprint": "20598f98c484bfea", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c171cce853296e54", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/simulate-outbound-call.ts:262"}, "properties": {"repobilityId": "19362195702b94a2", "scanner": "scanner-primary", "fingerprint": "c171cce853296e54", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-36b6d91412cfb540", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/recompose-aman.ts:62"}, "properties": {"repobilityId": "43bdcd5cb414a82e", "scanner": "scanner-primary", "fingerprint": "36b6d91412cfb540", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b4a5ab78a848bc6a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/client-timeline-report.ts:47"}, "properties": {"repobilityId": "3e17ba7296e2ee6d", "scanner": "scanner-primary", "fingerprint": "b4a5ab78a848bc6a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c3c3bcbdbb41aa6e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/regen-snapshots.ts:10"}, "properties": {"repobilityId": "f8e334337b12b40a", "scanner": "scanner-primary", "fingerprint": "c3c3bcbdbb41aa6e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-60cae1cd17c60d7e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/inspect-kql-schema.ts:7"}, "properties": {"repobilityId": "668d47d1d1c39c6a", "scanner": "scanner-primary", "fingerprint": "60cae1cd17c60d7e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b8464d8334aabeda", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/inspect-post-migration.ts:14"}, "properties": {"repobilityId": "b6242d9dca61511b", "scanner": "scanner-primary", "fingerprint": "b8464d8334aabeda", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-76ad6b4d449d0b65", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/snapshot-aman-wave3.ts:37"}, "properties": {"repobilityId": "5099fcafec241017", "scanner": "scanner-primary", "fingerprint": "76ad6b4d449d0b65", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-76bfbe2208dece1d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/phase-e-windshield-apply.ts:41"}, "properties": {"repobilityId": "d8eca8e3bcd916e8", "scanner": "scanner-primary", "fingerprint": "76bfbe2208dece1d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fb9d092991ce8e74", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-enrichment-fixtures.ts:108"}, "properties": {"repobilityId": "7e7d936fa5a51ba3", "scanner": "scanner-primary", "fingerprint": "fb9d092991ce8e74", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-aaf0c87682d21637", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/deploy-urban-vibe.ts:36"}, "properties": {"repobilityId": "f1a3768ff676b056", "scanner": "scanner-primary", "fingerprint": "aaf0c87682d21637", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-357f8f82aff3b46b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/render-staged-prompt-file.ts:74"}, "properties": {"repobilityId": "116068b7d4d2f892", "scanner": "scanner-primary", "fingerprint": "357f8f82aff3b46b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5a985b35eb290ffb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-prompt-live.ts:143"}, "properties": {"repobilityId": "3d78a5f09601c357", "scanner": "scanner-primary", "fingerprint": "5a985b35eb290ffb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3882e916a43cf13a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/stripe-drift-check.ts:255"}, "properties": {"repobilityId": "2e9dd09eaacbb6c2", "scanner": "scanner-primary", "fingerprint": "3882e916a43cf13a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-36bb21ab9e28a474", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/inspect-services-shape.ts:15"}, "properties": {"repobilityId": "8e8db002e5865cc8", "scanner": "scanner-primary", "fingerprint": "36bb21ab9e28a474", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b180bad971401448", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/recompose-aman-personal.ts:154"}, "properties": {"repobilityId": "1f2e53492c0be860", "scanner": "scanner-primary", "fingerprint": "b180bad971401448", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a7f5d630edb21e42", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fetch-velly-live.ts:9"}, "properties": {"repobilityId": "94d6492d4230b42a", "scanner": "scanner-primary", "fingerprint": "a7f5d630edb21e42", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e4434d419bc740aa", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/measure-brian-raw.ts:33"}, "properties": {"repobilityId": "c275abebda4fdcda", "scanner": "scanner-primary", "fingerprint": "e4434d419bc740aa", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f1c82e128ae8a248", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/rebuild-pm-prompt.ts:41"}, "properties": {"repobilityId": "13157325d1d61aff", "scanner": "scanner-primary", "fingerprint": "f1c82e128ae8a248", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6aba0498c67d2e8d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/measure-forbidden-by-niche.ts:14"}, "properties": {"repobilityId": "2dd06d566dcbeb84", "scanner": "scanner-primary", "fingerprint": "6aba0498c67d2e8d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8de56f942e9d206b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/restore-brian-tools.ts:41"}, "properties": {"repobilityId": "3cdb1e035b3c5b2c", "scanner": "scanner-primary", "fingerprint": "8de56f942e9d206b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1d0bacaaed99da5e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/patch-velly-universal-rules.ts:52"}, "properties": {"repobilityId": "c743153cf47c84a5", "scanner": "scanner-primary", "fingerprint": "1d0bacaaed99da5e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4a6352f9b67f0def", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-niches.ts:138"}, "properties": {"repobilityId": "34a10c63d2fbbc0d", "scanner": "scanner-primary", "fingerprint": "4a6352f9b67f0def", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1faab39bfe609e38", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-gap-embeddings.ts:46"}, "properties": {"repobilityId": "7fc5ba12f361dd67", "scanner": "scanner-primary", "fingerprint": "1faab39bfe609e38", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6ee75ce7791bb06a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/reset-test-calls.js:50"}, "properties": {"repobilityId": "c4f9dabce5b873ac", "scanner": "scanner-primary", "fingerprint": "6ee75ce7791bb06a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b890f0f6a2f3846f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/simulate-inbound-listing.ts:190"}, "properties": {"repobilityId": "efdd52d6bee52be6", "scanner": "scanner-primary", "fingerprint": "b890f0f6a2f3846f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a2f2772202ede92d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/build-niche-baseline.ts:141"}, "properties": {"repobilityId": "9f208117a0fbdf0e", "scanner": "scanner-primary", "fingerprint": "a2f2772202ede92d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a702073db1b09043", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/phase-b-windshield-backfill.ts:40"}, "properties": {"repobilityId": "08a4f05b7ea44062", "scanner": "scanner-primary", "fingerprint": "a702073db1b09043", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8bd37546d7576182", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/send-aman-welcome.ts:188"}, "properties": {"repobilityId": "f18e9ea9a1d86f01", "scanner": "scanner-primary", "fingerprint": "8bd37546d7576182", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9679455163f20afc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/dryrun-windshield-hub.ts:36"}, "properties": {"repobilityId": "a15460cd17d399c2", "scanner": "scanner-primary", "fingerprint": "9679455163f20afc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5899b556202abfe8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/recompose-brian.ts:42"}, "properties": {"repobilityId": "c3449ac4aa0a6b45", "scanner": "scanner-primary", "fingerprint": "5899b556202abfe8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ba19de7a35cea155", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/brian-niche-check.ts:8"}, "properties": {"repobilityId": "ab421504af52e2d0", "scanner": "scanner-primary", "fingerprint": "ba19de7a35cea155", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c9b537acd4cb1ea6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/brian-corpus-health.ts:12"}, "properties": {"repobilityId": "5a31898e38b9b749", "scanner": "scanner-primary", "fingerprint": "c9b537acd4cb1ea6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3a517577f584cb78", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/sync-urban-vibe-maintenance.ts:41"}, "properties": {"repobilityId": "717a0a3aa7640a84", "scanner": "scanner-primary", "fingerprint": "3a517577f584cb78", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bb7f328883ea5977", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/drift-check-all.ts:144"}, "properties": {"repobilityId": "6d21254e0a9042ff", "scanner": "scanner-primary", "fingerprint": "bb7f328883ea5977", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-54c5477acfaaabc2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/regenerate-prompt-snapshots.ts:119"}, "properties": {"repobilityId": "0680cad386a8788d", "scanner": "scanner-primary", "fingerprint": "54c5477acfaaabc2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-204f1be0dd3018e1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/send-aman-rogers-codes.ts:137"}, "properties": {"repobilityId": "bc59748ab485c8e0", "scanner": "scanner-primary", "fingerprint": "204f1be0dd3018e1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-37f5750d4b139b79", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/calendar-oauth-check.ts:98"}, "properties": {"repobilityId": "3efa4a8b923dfe76", "scanner": "scanner-primary", "fingerprint": "37f5750d4b139b79", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-084c286dbe4148a1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/client-nervous-system-harness-check.ts:136"}, "properties": {"repobilityId": "c0475eb0d1db8612", "scanner": "scanner-primary", "fingerprint": "084c286dbe4148a1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8f011c5f9f6f9bd6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/snapshot-business-only-walia.ts:73"}, "properties": {"repobilityId": "1678aad98c9ef1b6", "scanner": "scanner-primary", "fingerprint": "8f011c5f9f6f9bd6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b5784cd1843af301", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/twilio-ownership-check.ts:149"}, "properties": {"repobilityId": "50b07835809d3b14", "scanner": "scanner-primary", "fingerprint": "b5784cd1843af301", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a35e9bf9fca8dbe7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-test-client-prompt.ts:21"}, "properties": {"repobilityId": "a4241d5e235b11ae", "scanner": "scanner-primary", "fingerprint": "a35e9bf9fca8dbe7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cc11bcd812f04f92", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/one-off-set-voice.ts:44"}, "properties": {"repobilityId": "07fbb0e64426b70f", "scanner": "scanner-primary", "fingerprint": "cc11bcd812f04f92", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b2b2f4429a642a00", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/brian-baseline-calls.ts:24"}, "properties": {"repobilityId": "cbe4157a1e006558", "scanner": "scanner-primary", "fingerprint": "b2b2f4429a642a00", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-abf515aceb041138", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/inspect-velly-shape.ts:15"}, "properties": {"repobilityId": "cfacb26603aecb23", "scanner": "scanner-primary", "fingerprint": "abf515aceb041138", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1b9558fa253ca66e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/ingest-fallback-recordings.ts:107"}, "properties": {"repobilityId": "3614556c26db6766", "scanner": "scanner-primary", "fingerprint": "1b9558fa253ca66e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-453317a8737c406a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/p3-aggregate-evals.ts:23"}, "properties": {"repobilityId": "eb31e6243e4cbb8a", "scanner": "scanner-primary", "fingerprint": "453317a8737c406a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-534fba52a292ea2c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/telegram-health-check.ts:248"}, "properties": {"repobilityId": "f565cec7ee259cf1", "scanner": "scanner-primary", "fingerprint": "534fba52a292ea2c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-91919be9bf806e32", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/regenerate-brian-returning-caller.ts:27"}, "properties": {"repobilityId": "02b6c3e023b74ce6", "scanner": "scanner-primary", "fingerprint": "91919be9bf806e32", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ec1d6c916e51c24a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/rollback-urban-vibe.ts:45"}, "properties": {"repobilityId": "fcb0c3b960aef3e4", "scanner": "scanner-primary", "fingerprint": "ec1d6c916e51c24a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4ad0db256e5c2a9f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/reseed-client-settings.ts:259"}, "properties": {"repobilityId": "7ad1beb6cd1dbe21", "scanner": "scanner-primary", "fingerprint": "4ad0db256e5c2a9f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d1c97abfa70b5543", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/provisioning-completeness-check.ts:250"}, "properties": {"repobilityId": "7507da9da073d02b", "scanner": "scanner-primary", "fingerprint": "d1c97abfa70b5543", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-61a69b7cebb924e8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/snapshot-brian-bug3-only.ts:27"}, "properties": {"repobilityId": "a20d910b02b59e30", "scanner": "scanner-primary", "fingerprint": "61a69b7cebb924e8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d9a9b4377b246fe8", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 scripts/backfill-recording-url-paths.ts:5"}, "properties": {"repobilityId": "c4d8c1ba0feacb03", "scanner": "scanner-primary", "fingerprint": "d9a9b4377b246fe8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-b7875f85b0701fbc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-recording-url-paths.ts:54"}, "properties": {"repobilityId": "8e99761100d7d5f9", "scanner": "scanner-primary", "fingerprint": "b7875f85b0701fbc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c491c5a2a51f7065", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-active-prompt-version.ts:32"}, "properties": {"repobilityId": "d72fbb45f0e9e273", "scanner": "scanner-primary", "fingerprint": "c491c5a2a51f7065", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6ffeb4f70176bda5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/data-hygiene-check.ts:335"}, "properties": {"repobilityId": "a263d8a6d33863d5", "scanner": "scanner-primary", "fingerprint": "6ffeb4f70176bda5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-927e4d4419fc129a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/dryrun-kb-aware-rollout.ts:152"}, "properties": {"repobilityId": "c485493f87030b99", "scanner": "scanner-primary", "fingerprint": "927e4d4419fc129a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ba5530d774e27017", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/canary-truth-snapshot.ts:112"}, "properties": {"repobilityId": "8081d6fa50bbd445", "scanner": "scanner-primary", "fingerprint": "ba5530d774e27017", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-29b266adbb11d059", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-windshield-staged.ts:49"}, "properties": {"repobilityId": "b21b01173eeb9172", "scanner": "scanner-primary", "fingerprint": "29b266adbb11d059", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5003e5320cb65ca1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/debug-recompose.ts:10"}, "properties": {"repobilityId": "fb8dc535b48fc610", "scanner": "scanner-primary", "fingerprint": "5003e5320cb65ca1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fbb7305c3b065bba", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/recompose-mark.ts:38"}, "properties": {"repobilityId": "5496938aa54f6f5b", "scanner": "scanner-primary", "fingerprint": "fbb7305c3b065bba", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a2c9e6a13564dec2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-ray-to-slots.ts:45"}, "properties": {"repobilityId": "a2ebea9007ef7972", "scanner": "scanner-primary", "fingerprint": "a2c9e6a13564dec2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e78554bbf562f45f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/audit-urban-vibe.ts:17"}, "properties": {"repobilityId": "85975b977dbe3ba6", "scanner": "scanner-primary", "fingerprint": "e78554bbf562f45f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cf8dd3bb271fd340", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/audit-fleet-drift.ts:44"}, "properties": {"repobilityId": "a42982c494a1b93a", "scanner": "scanner-primary", "fingerprint": "cf8dd3bb271fd340", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c840e79b5284c217", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-velly-draft.ts:46"}, "properties": {"repobilityId": "a23d7872acff771a", "scanner": "scanner-primary", "fingerprint": "c840e79b5284c217", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b4751df347bc8f6f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fleet-snapshot-prompts.ts:21"}, "properties": {"repobilityId": "129567d567f47ae7", "scanner": "scanner-primary", "fingerprint": "b4751df347bc8f6f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-355bdaa0c318c163", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/onboard-aman.ts:84"}, "properties": {"repobilityId": "1f3eaac803fd1573", "scanner": "scanner-primary", "fingerprint": "355bdaa0c318c163", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4e76c642e87a8133", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/study-windshield-real-calls.ts:71"}, "properties": {"repobilityId": "d49717b0b801717c", "scanner": "scanner-primary", "fingerprint": "4e76c642e87a8133", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-248f5fde39021a6e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-aman-drop-snowflake.ts:65"}, "properties": {"repobilityId": "2f31ca7c501df24f", "scanner": "scanner-primary", "fingerprint": "248f5fde39021a6e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e781a5082fbe9492", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/p3-fleet-snapshot-audit.ts:32"}, "properties": {"repobilityId": "acccda480c2e137e", "scanner": "scanner-primary", "fingerprint": "e781a5082fbe9492", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-84bf9fa24eed72c7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/deploy-inbound-listing.ts:74"}, "properties": {"repobilityId": "a7bd34840b069aef", "scanner": "scanner-primary", "fingerprint": "84bf9fa24eed72c7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-51acaaa2ea2fb751", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-hard-max.ts:3"}, "properties": {"repobilityId": "952db8980a676463", "scanner": "scanner-primary", "fingerprint": "51acaaa2ea2fb751", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d4cbf4af5d211c7a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/p2-knowledge-corpus-health.ts:25"}, "properties": {"repobilityId": "1ce3c870669525ed", "scanner": "scanner-primary", "fingerprint": "d4cbf4af5d211c7a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e6c1176a59698fb9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/validate-brian-preview.ts:9"}, "properties": {"repobilityId": "1202808b071bb658", "scanner": "scanner-primary", "fingerprint": "e6c1176a59698fb9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6f4359b5ac128147", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/nightly-drift-check.ts:404"}, "properties": {"repobilityId": "a2dc10921682315a", "scanner": "scanner-primary", "fingerprint": "6f4359b5ac128147", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c68c497f17a065b5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/audit-brian-sections.ts:60"}, "properties": {"repobilityId": "ce71cb59be7ac5de", "scanner": "scanner-primary", "fingerprint": "c68c497f17a065b5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5688b92784ac4fb1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/snapshot-aman-wave3-with-overrides.ts:52"}, "properties": {"repobilityId": "cb7cf68587e73dd7", "scanner": "scanner-primary", "fingerprint": "5688b92784ac4fb1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fa1d4470b10aff76", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/brian-tools-check.ts:14"}, "properties": {"repobilityId": "f037f7a8a4479c71", "scanner": "scanner-primary", "fingerprint": "fa1d4470b10aff76", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-29d58115b63e5167", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/onboard-emon.ts:61"}, "properties": {"repobilityId": "06b3a63c88223d68", "scanner": "scanner-primary", "fingerprint": "29d58115b63e5167", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7c92796265a06b83", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/middleware.ts:89"}, "properties": {"repobilityId": "90955eb58cc934c1", "scanner": "scanner-primary", "fingerprint": "7c92796265a06b83", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c60106a7e0ba039b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ReviewBadges.tsx:44"}, "properties": {"repobilityId": "b29eaf6fb085b72d", "scanner": "scanner-primary", "fingerprint": "c60106a7e0ba039b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-042ecef5349ec06a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/DemoCallVisuals.tsx:506"}, "properties": {"repobilityId": "eea33a72545f0ef2", "scanner": "scanner-primary", "fingerprint": "042ecef5349ec06a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-73077924a4fac300", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/NicheLandingPage.tsx:27"}, "properties": {"repobilityId": "f35e13dd7406c011", "scanner": "scanner-primary", "fingerprint": "73077924a4fac300", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-48536df6b42baa8f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/HeroCallMockup.tsx:282"}, "properties": {"repobilityId": "10e46aceef7a3955", "scanner": "scanner-primary", "fingerprint": "48536df6b42baa8f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a383daaa5eb090af", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/DemoOutcome.tsx:189"}, "properties": {"repobilityId": "df515c52b544e197", "scanner": "scanner-primary", "fingerprint": "a383daaa5eb090af", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5f8b995e940bd55c", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/ui/chart.tsx:83"}, "properties": {"repobilityId": "b8c68f17a4018107", "scanner": "scanner-primary", "fingerprint": "5f8b995e940bd55c", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-06076ae81946dd08", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/ActivityFeed.tsx:62"}, "properties": {"repobilityId": "668a8c772fd07721", "scanner": "scanner-primary", "fingerprint": "06076ae81946dd08", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f5004a02b018f258", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/LeadQueue.tsx:747"}, "properties": {"repobilityId": "eeda077ed5f882a3", "scanner": "scanner-primary", "fingerprint": "f5004a02b018f258", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-470e75b855d350c0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/AgentConfigCard.tsx:66"}, "properties": {"repobilityId": "30a5c33945495d6e", "scanner": "scanner-primary", "fingerprint": "470e75b855d350c0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-16674628ec361438", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/InsightsView.tsx:400"}, "properties": {"repobilityId": "1a2f8a9154890e04", "scanner": "scanner-primary", "fingerprint": "16674628ec361438", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8585471a56d2fb7f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/LiveCallBanner.tsx:131"}, "properties": {"repobilityId": "c6c46aeb5e478147", "scanner": "scanner-primary", "fingerprint": "8585471a56d2fb7f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ee49f940b7387f66", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/AdminDropdown.tsx:23"}, "properties": {"repobilityId": "658e648fc1066864", "scanner": "scanner-primary", "fingerprint": "ee49f940b7387f66", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d6d0a64dccb10bf2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/ClientsTable.tsx:261"}, "properties": {"repobilityId": "e41976b4562761f9", "scanner": "scanner-primary", "fingerprint": "d6d0a64dccb10bf2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-109dcffe45b2e133", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/TopBar.tsx:81"}, "properties": {"repobilityId": "b080cf8f8279dcca", "scanner": "scanner-primary", "fingerprint": "109dcffe45b2e133", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-89924c1bf19a5acb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/CallDetail.tsx:80"}, "properties": {"repobilityId": "dda9263bb06b4e13", "scanner": "scanner-primary", "fingerprint": "89924c1bf19a5acb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-370cf9af69065dde", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/UsageSummary.tsx:175"}, "properties": {"repobilityId": "3c27a34b00d83abc", "scanner": "scanner-primary", "fingerprint": "370cf9af69065dde", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4a659e789c599735", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/ContactsView.tsx:164"}, "properties": {"repobilityId": "6be892686f129aaa", "scanner": "scanner-primary", "fingerprint": "4a659e789c599735", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fad60a071ad5358d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/ClientHome.tsx:523"}, "properties": {"repobilityId": "cb45c3241cf1991f", "scanner": "scanner-primary", "fingerprint": "fad60a071ad5358d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b8c9ac5e871f329d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/LeadsView.tsx:450"}, "properties": {"repobilityId": "56f75a0686b89845", "scanner": "scanner-primary", "fingerprint": "b8c9ac5e871f329d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ede78aebadc2666a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/FloatingCallOrb.tsx:83"}, "properties": {"repobilityId": "4d7cb49feed5f4e9", "scanner": "scanner-primary", "fingerprint": "ede78aebadc2666a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1495af4100be3afb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/CallEventsPanel.tsx:167"}, "properties": {"repobilityId": "265625cd3733102d", "scanner": "scanner-primary", "fingerprint": "1495af4100be3afb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-54153351329437a3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/MaintenanceTab.tsx:206"}, "properties": {"repobilityId": "b768d00d59244ef3", "scanner": "scanner-primary", "fingerprint": "54153351329437a3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-811637e551d2740b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/Sidebar.tsx:165"}, "properties": {"repobilityId": "5f95109246c12ca3", "scanner": "scanner-primary", "fingerprint": "811637e551d2740b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b5c4d74ee77b83f7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/IntakeTable.tsx:59"}, "properties": {"repobilityId": "a3420786fc48f5a3", "scanner": "scanner-primary", "fingerprint": "b5c4d74ee77b83f7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2d1f306c533de8fe", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/ClientSelector.tsx:123"}, "properties": {"repobilityId": "410bb7b407ced1f2", "scanner": "scanner-primary", "fingerprint": "2d1f306c533de8fe", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-68834189e9b80ae6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/AdminCommandStrip.tsx:77"}, "properties": {"repobilityId": "7d23a83d6e45ab28", "scanner": "scanner-primary", "fingerprint": "68834189e9b80ae6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d4e706c3023f21ed", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/CallRow.tsx:192"}, "properties": {"repobilityId": "ad19636f0a572ead", "scanner": "scanner-primary", "fingerprint": "d4e706c3023f21ed", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-482b28d28ee9b197", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/CampaignCard.tsx:100"}, "properties": {"repobilityId": "f056be599ddcf306", "scanner": "scanner-primary", "fingerprint": "482b28d28ee9b197", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6d006882646f5975", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/AgentTestCard.tsx:203"}, "properties": {"repobilityId": "e7bb6361ca366547", "scanner": "scanner-primary", "fingerprint": "6d006882646f5975", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-dadb15a7f5827c6d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/OperatorActivity.tsx:191"}, "properties": {"repobilityId": "682b84e4d3f41e67", "scanner": "scanner-primary", "fingerprint": "dadb15a7f5827c6d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7c443e46ad814e14", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/ClientHealthBar.tsx:77"}, "properties": {"repobilityId": "2a3a0b5aa907db38", "scanner": "scanner-primary", "fingerprint": "7c443e46ad814e14", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1473ce78f9d2df12", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/ClientHomeV2.tsx:519"}, "properties": {"repobilityId": "db0542061c8ba6d4", "scanner": "scanner-primary", "fingerprint": "1473ce78f9d2df12", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9810e64fc594d654", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/MonthlySpendCard.tsx:73"}, "properties": {"repobilityId": "c2490dcc55d8a17e", "scanner": "scanner-primary", "fingerprint": "9810e64fc594d654", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-493f419182f25c28", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/settings/PromptVersionsCard.tsx:118"}, "properties": {"repobilityId": "3ba29364ea38b044", "scanner": "scanner-primary", "fingerprint": "493f419182f25c28", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2ee78478108b3851", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/settings/StaffRosterCard.tsx:106"}, "properties": {"repobilityId": "203c465c90522b9b", "scanner": "scanner-primary", "fingerprint": "2ee78478108b3851", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d07ff7c0b07eb439", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/settings/BookingCard.tsx:92"}, "properties": {"repobilityId": "fcb370c4bf749154", "scanner": "scanner-primary", "fingerprint": "d07ff7c0b07eb439", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-15fd103179433927", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/settings/AgentOverviewCard.tsx:172"}, "properties": {"repobilityId": "7743818b0bf91e2d", "scanner": "scanner-primary", "fingerprint": "15fd103179433927", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e29a8a917918e58c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/settings/WebsiteKnowledgeCard.tsx:356"}, "properties": {"repobilityId": "ba7651c6bcf0dea2", "scanner": "scanner-primary", "fingerprint": "e29a8a917918e58c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9a0c743c9a75143e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/settings/VIPContactsCard.tsx:173"}, "properties": {"repobilityId": "add0f3dd592c98fd", "scanner": "scanner-primary", "fingerprint": "9a0c743c9a75143e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-841ca07aa423f34f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/settings/SettingsSection.tsx:54"}, "properties": {"repobilityId": "01a873f354128586", "scanner": "scanner-primary", "fingerprint": "841ca07aa423f34f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a07b45a95afe0fcc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/settings/PromptVariablesCard.tsx:221"}, "properties": {"repobilityId": "15ea419c4d1d4916", "scanner": "scanner-primary", "fingerprint": "a07b45a95afe0fcc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1472e9b1fbce4a93", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/settings/ActivityLog.tsx:109"}, "properties": {"repobilityId": "a6c2d8c9ee510c95", "scanner": "scanner-primary", "fingerprint": "1472e9b1fbce4a93", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-73e07fb238778914", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/settings/VoiceTab.tsx:95"}, "properties": {"repobilityId": "01fc89934292576b", "scanner": "scanner-primary", "fingerprint": "73e07fb238778914", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ba8ba3eeda9ef26d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/settings/ContextDataCard.tsx:184"}, "properties": {"repobilityId": "68af9a5c32f0e4a3", "scanner": "scanner-primary", "fingerprint": "ba8ba3eeda9ef26d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0c6ef753a9b67b03", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/settings/shared.tsx:40"}, "properties": {"repobilityId": "8f0613435f9da334", "scanner": "scanner-primary", "fingerprint": "0c6ef753a9b67b03", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-691de72388ca2a1c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/settings/VoicePicker.tsx:152"}, "properties": {"repobilityId": "4355a9557f68ac5e", "scanner": "scanner-primary", "fingerprint": "691de72388ca2a1c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-50ffac9922ab7a8e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/settings/ImprovementHints.tsx:205"}, "properties": {"repobilityId": "591abf302e53cc02", "scanner": "scanner-primary", "fingerprint": "50ffac9922ab7a8e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1c1e64fbd45d6efc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/go-live/VoicePickerCompact.tsx:217"}, "properties": {"repobilityId": "e168027607692451", "scanner": "scanner-primary", "fingerprint": "1c1e64fbd45d6efc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3928106843cd458d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/go-live/GoLiveVoicePicker.tsx:182"}, "properties": {"repobilityId": "87d0f3447f2cb193", "scanner": "scanner-primary", "fingerprint": "3928106843cd458d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-41042fab6ad91304", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/bookings/BookingsView.tsx:152"}, "properties": {"repobilityId": "4c06f75b97699634", "scanner": "scanner-primary", "fingerprint": "41042fab6ad91304", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a3023ea03ae73cc2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/agent/AgentAnswerabilityCard.tsx:160"}, "properties": {"repobilityId": "e35249b2a7df9671", "scanner": "scanner-primary", "fingerprint": "a3023ea03ae73cc2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f80efa84cd78042c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/home/InlineModalsV2.tsx:869"}, "properties": {"repobilityId": "130aa9f8d1a127cf", "scanner": "scanner-primary", "fingerprint": "f80efa84cd78042c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fe7e6aa995a80ba4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/home/CallHandlingTile.tsx:192"}, "properties": {"repobilityId": "7ca8543808b79a98", "scanner": "scanner-primary", "fingerprint": "fe7e6aa995a80ba4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-994c054e371deba3", "level": "note", "message": {"text": "\"active\" state uses light bg in a dark theme \u2014 src/components/dashboard/home/OverviewCallLog.tsx:77"}, "properties": {"repobilityId": "6c3d7d463b87a0c8", "scanner": "scanner-primary", "fingerprint": "994c054e371deba3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.active-light-bg"]}}, {"ruleId": "scanner-ddb242cc3aa2f4b4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/home/UnifiedHomeSectionV2.tsx:393"}, "properties": {"repobilityId": "8b7931ff16a6e63f", "scanner": "scanner-primary", "fingerprint": "ddb242cc3aa2f4b4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c11bfae937cf1470", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/home/BookingCalendarTile.tsx:328"}, "properties": {"repobilityId": "9c5ff0383ce2fc35", "scanner": "scanner-primary", "fingerprint": "c11bfae937cf1470", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2afb63e29e48cb6b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/home/UnifiedHomeSection.tsx:495"}, "properties": {"repobilityId": "78909a1561e768c6", "scanner": "scanner-primary", "fingerprint": "2afb63e29e48cb6b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-da2d4cd22cc0dabd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/home/AgentIdentityCard.tsx:629"}, "properties": {"repobilityId": "f9bee42774c91b53", "scanner": "scanner-primary", "fingerprint": "da2d4cd22cc0dabd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b2085a362921f951", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/home/AgentIdentityCardCompact.tsx:171"}, "properties": {"repobilityId": "7eb2ec3753a0b3c4", "scanner": "scanner-primary", "fingerprint": "b2085a362921f951", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-89441d0ab04af435", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/home/V2CallList.tsx:139"}, "properties": {"repobilityId": "550c05e30e5d508d", "scanner": "scanner-primary", "fingerprint": "89441d0ab04af435", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-987d3bbd8c3d31be", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/home/AgentKnowsCard.tsx:204"}, "properties": {"repobilityId": "581ccb5740c9985c", "scanner": "scanner-primary", "fingerprint": "987d3bbd8c3d31be", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1c78ac9243019252", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/home/BusinessHoursTile.tsx:40"}, "properties": {"repobilityId": "faea6fdfb8017663", "scanner": "scanner-primary", "fingerprint": "1c78ac9243019252", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3a503b53e3597976", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/home/sheets/KnowledgeSheet.tsx:169"}, "properties": {"repobilityId": "776d313273d48ccb", "scanner": "scanner-primary", "fingerprint": "3a503b53e3597976", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-eb51d259347519b6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/lab/VersionHistory.tsx:64"}, "properties": {"repobilityId": "4a74cc9d9f14b063", "scanner": "scanner-primary", "fingerprint": "eb51d259347519b6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5c6c0139a14443fa", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/knowledge/KnowledgeSourceRegistry.tsx:236"}, "properties": {"repobilityId": "a52ecc2162c76cbd", "scanner": "scanner-primary", "fingerprint": "5c6c0139a14443fa", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bfc0d7d957ae8d02", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/knowledge/InlineFaqEditor.tsx:129"}, "properties": {"repobilityId": "2fabb00d2be16a34", "scanner": "scanner-primary", "fingerprint": "bfc0d7d957ae8d02", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d42359ae06ea9805", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/dashboard/knowledge/ChunkBrowser.tsx:174"}, "properties": {"repobilityId": "baa5037ac04272ec", "scanner": "scanner-primary", "fingerprint": "d42359ae06ea9805", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d04d6455315780df", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/knowledge/DocumentList.tsx:86"}, "properties": {"repobilityId": "faf84daafd9a21fe", "scanner": "scanner-primary", "fingerprint": "d04d6455315780df", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-eac5b91b1d3763fa", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/knowledge/KnowledgeTestSearch.tsx:106"}, "properties": {"repobilityId": "75b10905f58c11a6", "scanner": "scanner-primary", "fingerprint": "eac5b91b1d3763fa", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ac8f815de3125d33", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/knowledge/KnowledgeDrawer.tsx:90"}, "properties": {"repobilityId": "45417ea8d1859a26", "scanner": "scanner-primary", "fingerprint": "ac8f815de3125d33", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1f13942ef483b5f9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/knowledge/FileUploadPanel.tsx:706"}, "properties": {"repobilityId": "298373f5adf65c23", "scanner": "scanner-primary", "fingerprint": "1f13942ef483b5f9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-99a580d109b70834", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/outbound/LeadQueue.tsx:294"}, "properties": {"repobilityId": "2fd4c7a6d97e2da4", "scanner": "scanner-primary", "fingerprint": "99a580d109b70834", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a36c579178d87dbd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/onboard/WebsiteScrapePreview.tsx:258"}, "properties": {"repobilityId": "f6b758515a8af793", "scanner": "scanner-primary", "fingerprint": "a36c579178d87dbd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9a2453287bf94f4e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/onboard/VoicePicker.tsx:182"}, "properties": {"repobilityId": "f6cdbdde5dfcb73b", "scanner": "scanner-primary", "fingerprint": "9a2453287bf94f4e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f6334fbac889ab12", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/onboard/AdminTestPanel.tsx:231"}, "properties": {"repobilityId": "4cf2d93d5eb4b2cb", "scanner": "scanner-primary", "fingerprint": "f6334fbac889ab12", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-08f8390eeecac55f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/onboard/PlacesAutocomplete.tsx:171"}, "properties": {"repobilityId": "b5cbf48c226e26f1", "scanner": "scanner-primary", "fingerprint": "08f8390eeecac55f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0d29e353b64d443f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/ClientSwitcher.tsx:96"}, "properties": {"repobilityId": "589effd7368883ea", "scanner": "scanner-primary", "fingerprint": "0d29e353b64d443f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0cbc5ec3a8c428ba", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/ActingAsBanner.tsx:110"}, "properties": {"repobilityId": "00599f2b3586bc6a", "scanner": "scanner-primary", "fingerprint": "0cbc5ec3a8c428ba", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9127e6742a3a098c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/notifications/NotificationRow.tsx:116"}, "properties": {"repobilityId": "c43e2bc61064cdd2", "scanner": "scanner-primary", "fingerprint": "9127e6742a3a098c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-700df87f8e68c24b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/harness/HarnessCard.tsx:63"}, "properties": {"repobilityId": "e8d799e1723e7d79", "scanner": "scanner-primary", "fingerprint": "700df87f8e68c24b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f48de1e5d0e669b2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/harness/FindingRow.tsx:87"}, "properties": {"repobilityId": "27b34f0aba19ecce", "scanner": "scanner-primary", "fingerprint": "f48de1e5d0e669b2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0b506d456b88ac2b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/advisor/ModelPicker.tsx:126"}, "properties": {"repobilityId": "099a0d198c5d05f8", "scanner": "scanner-primary", "fingerprint": "0b506d456b88ac2b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-844ef5d1327dd683", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/advisor/HistorySidebar.tsx:220"}, "properties": {"repobilityId": "e625bbabd7a11fb7", "scanner": "scanner-primary", "fingerprint": "844ef5d1327dd683", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2454455cbf2d87f0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/advisor/InsightCards.tsx:116"}, "properties": {"repobilityId": "c99d069ff705d7a9", "scanner": "scanner-primary", "fingerprint": "2454455cbf2d87f0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-512657dd0938f3a8", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/advisor/ChatView.tsx:285"}, "properties": {"repobilityId": "dbf6347bdffbb697", "scanner": "scanner-primary", "fingerprint": "512657dd0938f3a8", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-5f48f72a5cb9ae77", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/page.tsx:44"}, "properties": {"repobilityId": "4d4ab3e03315f684", "scanner": "scanner-primary", "fingerprint": "5f48f72a5cb9ae77", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-eeea59e8f67710ed", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/layout.tsx:150"}, "properties": {"repobilityId": "0d72350965068f5b", "scanner": "scanner-primary", "fingerprint": "eeea59e8f67710ed", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-9610a0d5c9e0eb68", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/about/page.tsx:93"}, "properties": {"repobilityId": "8fd3d3d868e82023", "scanner": "scanner-primary", "fingerprint": "9610a0d5c9e0eb68", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-89673677c11c1875", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/external/lead-call/route.ts:242"}, "properties": {"repobilityId": "dc7465bb7b29e9dc", "scanner": "scanner-primary", "fingerprint": "89673677c11c1875", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-560721017b5b0e2a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/demo/summarize/route.ts:92"}, "properties": {"repobilityId": "3822eefcf700c8f6", "scanner": "scanner-primary", "fingerprint": "560721017b5b0e2a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d03dcec9299c8bd4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/demo/call-me/route.ts:149"}, "properties": {"repobilityId": "b8b4d5ae6e82bda4", "scanner": "scanner-primary", "fingerprint": "d03dcec9299c8bd4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3d899c7afb0deb55", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/demo/start/route.ts:137"}, "properties": {"repobilityId": "09a20d34b1f3189f", "scanner": "scanner-primary", "fingerprint": "3d899c7afb0deb55", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-417bf55344c8312b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/client/knowledge/upload/route.ts:134"}, "properties": {"repobilityId": "bfc0ed5b5e7affb8", "scanner": "scanner-primary", "fingerprint": "417bf55344c8312b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3e3774bf607af1c3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/auth/google/callback/route.ts:93"}, "properties": {"repobilityId": "995504559617cc91", "scanner": "scanner-primary", "fingerprint": "3e3774bf607af1c3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c2d5bdcf8a0e4028", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhook/demo/inbound/route.ts:47"}, "properties": {"repobilityId": "b7dde37cb7e02244", "scanner": "scanner-primary", "fingerprint": "c2d5bdcf8a0e4028", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5196f4acaad7e284", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhook/telegram/route.ts:485"}, "properties": {"repobilityId": "7a26334affb450bb", "scanner": "scanner-primary", "fingerprint": "5196f4acaad7e284", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c4467073140dc835", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhook/ultravox/route.ts:100"}, "properties": {"repobilityId": "8702ca4ba34b9aea", "scanner": "scanner-primary", "fingerprint": "c4467073140dc835", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4b5b156320ca9a70", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhook/stripe/route.ts:90"}, "properties": {"repobilityId": "1c409969be8c5a8d", "scanner": "scanner-primary", "fingerprint": "4b5b156320ca9a70", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c9d3515f48bb93c6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhook/[slug]/ivr-gather/route.ts:37"}, "properties": {"repobilityId": "12550584602f4fcb", "scanner": "scanner-primary", "fingerprint": "c9d3515f48bb93c6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-69ed0e327ef12daa", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhook/[slug]/sms-inbound/route.ts:39"}, "properties": {"repobilityId": "3f7746fd9d67f20c", "scanner": "scanner-primary", "fingerprint": "69ed0e327ef12daa", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-13de3f906814c915", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhook/[slug]/transfer/route.ts:122"}, "properties": {"repobilityId": "4dd034445273e447", "scanner": "scanner-primary", "fingerprint": "13de3f906814c915", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cdfe0b3cae046f18", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhook/[slug]/inbound/route.ts:30"}, "properties": {"repobilityId": "89004227ff38257f", "scanner": "scanner-primary", "fingerprint": "cdfe0b3cae046f18", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-259e4199d0ef499e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhook/[slug]/transfer-status/route.ts:51"}, "properties": {"repobilityId": "a5d5d39029afdac1", "scanner": "scanner-primary", "fingerprint": "259e4199d0ef499e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-092abfdf44b44915", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhook/[slug]/whisper/route.ts:54"}, "properties": {"repobilityId": "ee6be9e07905a877", "scanner": "scanner-primary", "fingerprint": "092abfdf44b44915", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0c9711b554cd4ee2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhook/[slug]/fallback/route.ts:61"}, "properties": {"repobilityId": "54c8caf66faaf18b", "scanner": "scanner-primary", "fingerprint": "0c9711b554cd4ee2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0a133f82d02747a9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhook/[slug]/page-owner/route.ts:99"}, "properties": {"repobilityId": "2f002f0b8c7af6ad", "scanner": "scanner-primary", "fingerprint": "0a133f82d02747a9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e535c564da43b369", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhook/[slug]/outbound-connect/route.ts:87"}, "properties": {"repobilityId": "3d8691a0fa3aeef0", "scanner": "scanner-primary", "fingerprint": "e535c564da43b369", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-dfc00ea5c7cbf9cb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhook/[slug]/voicemail/route.ts:34"}, "properties": {"repobilityId": "0c06f863d4b3c3b5", "scanner": "scanner-primary", "fingerprint": "dfc00ea5c7cbf9cb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-979587408d4da20c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhook/[slug]/completed/route.ts:71"}, "properties": {"repobilityId": "e4ed24c18bb6e32d", "scanner": "scanner-primary", "fingerprint": "979587408d4da20c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b7cff8422185bca7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhook/[slug]/sms/route.ts:102"}, "properties": {"repobilityId": "0c97f44e6c5b8010", "scanner": "scanner-primary", "fingerprint": "b7cff8422185bca7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e3fc675ad0c8cfd0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhook/[slug]/listing-lookup/route.ts:138"}, "properties": {"repobilityId": "2f48986cdc7e384a", "scanner": "scanner-primary", "fingerprint": "e3fc675ad0c8cfd0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-76d1f58d97921a3c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhook/[slug]/sms-status/route.ts:18"}, "properties": {"repobilityId": "17f50e0ec9b34f86", "scanner": "scanner-primary", "fingerprint": "76d1f58d97921a3c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fbf3c2e9e2e5276a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/settings/route.ts:107"}, "properties": {"repobilityId": "03e71e90554b5118", "scanner": "scanner-primary", "fingerprint": "fbf3c2e9e2e5276a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6107a207f7a73e98", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/settings/prompt-versions/route.ts:138"}, "properties": {"repobilityId": "3b5e2a2207a7fe17", "scanner": "scanner-primary", "fingerprint": "6107a207f7a73e98", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f9aff15248eecdee", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/settings/sync-agent/route.ts:79"}, "properties": {"repobilityId": "b3b2505c09e4a69d", "scanner": "scanner-primary", "fingerprint": "f9aff15248eecdee", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b19f0558b1b12be5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/leads/dial-out/route.ts:234"}, "properties": {"repobilityId": "23cf720ee04d3364", "scanner": "scanner-primary", "fingerprint": "b19f0558b1b12be5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bc848a40b33914dd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/regenerate-prompt/route.ts:183"}, "properties": {"repobilityId": "7152cfad5fd991ea", "scanner": "scanner-primary", "fingerprint": "bc848a40b33914dd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1b6afc02f7296205", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/voices/assign/route.ts:105"}, "properties": {"repobilityId": "9940738f3186a02e", "scanner": "scanner-primary", "fingerprint": "1b6afc02f7296205", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4b3ce8f749630f8c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/calls/[id]/whisper/route.ts:50"}, "properties": {"repobilityId": "147368ea9e79552d", "scanner": "scanner-primary", "fingerprint": "4b3ce8f749630f8c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0ca6fb2d7a7f1be5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/calls/[id]/transfer-now/route.ts:159"}, "properties": {"repobilityId": "cd280df2cb7a57c2", "scanner": "scanner-primary", "fingerprint": "0ca6fb2d7a7f1be5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-36230c999062bdaf", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/agent-test/route.ts:141"}, "properties": {"repobilityId": "43009d3a2789e1d6", "scanner": "scanner-primary", "fingerprint": "36230c999062bdaf", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-80fef5f5dc6e3e3a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/account/delete/route.ts:101"}, "properties": {"repobilityId": "4a9c6cef7ef0912f", "scanner": "scanner-primary", "fingerprint": "80fef5f5dc6e3e3a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a22701911f70e70d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/scrape-website/route.ts:138"}, "properties": {"repobilityId": "cc48cf6f1c5f2ce7", "scanner": "scanner-primary", "fingerprint": "a22701911f70e70d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cc86f7e1a770ccc4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/approve-website-knowledge/route.ts:209"}, "properties": {"repobilityId": "118d2b9a74c76c70", "scanner": "scanner-primary", "fingerprint": "cc86f7e1a770ccc4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-95d8fd13f7233586", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/browser-test-call/route.ts:164"}, "properties": {"repobilityId": "2e21ad8c8f94991c", "scanner": "scanner-primary", "fingerprint": "95d8fd13f7233586", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ab605a9e13188439", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/generate-prompt/route.ts:103"}, "properties": {"repobilityId": "2eb669642a8a51d8", "scanner": "scanner-primary", "fingerprint": "ab605a9e13188439", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3cdad6323c766502", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/knowledge/compile/apply/route.ts:213"}, "properties": {"repobilityId": "5283bdcb25bb1aca", "scanner": "scanner-primary", "fingerprint": "3cdad6323c766502", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-08cecb9780d40945", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/knowledge/upload/route.ts:151"}, "properties": {"repobilityId": "30005d2fcaf11add", "scanner": "scanner-primary", "fingerprint": "08cecb9780d40945", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c75518291c3f11be", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/knowledge/bulk-import/route.ts:121"}, "properties": {"repobilityId": "a2e84ac993a08978", "scanner": "scanner-primary", "fingerprint": "c75518291c3f11be", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bddcd03c0a5aa573", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/knowledge/gaps/route.ts:250"}, "properties": {"repobilityId": "2ac5c52acb0b678c", "scanner": "scanner-primary", "fingerprint": "bddcd03c0a5aa573", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a1b48537cb961b01", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/knowledge/ingest-text/route.ts:130"}, "properties": {"repobilityId": "6c5aec8592c338dd", "scanner": "scanner-primary", "fingerprint": "a1b48537cb961b01", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f598329099c86e54", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/knowledge/add-snippet/route.ts:106"}, "properties": {"repobilityId": "fee8c98cda1f4a56", "scanner": "scanner-primary", "fingerprint": "f598329099c86e54", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-160621907ba9e855", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/knowledge/approve/route.ts:126"}, "properties": {"repobilityId": "2bc27913941b042a", "scanner": "scanner-primary", "fingerprint": "160621907ba9e855", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-34300b9a7c5f521b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/trial/test-call/route.ts:136"}, "properties": {"repobilityId": "386088c37203acae", "scanner": "scanner-primary", "fingerprint": "34300b9a7c5f521b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7096a17b3a4f54ca", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/onboard/places-lookup/route.ts:92"}, "properties": {"repobilityId": "0ea3eb55aa2ab4be", "scanner": "scanner-primary", "fingerprint": "7096a17b3a4f54ca", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1c755a3408cded45", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/billing/downgrade/route.ts:85"}, "properties": {"repobilityId": "908d70175ba9b4fd", "scanner": "scanner-primary", "fingerprint": "1c755a3408cded45", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-930332dd8305a3df", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/provision/trial/route.ts:466"}, "properties": {"repobilityId": "88160343fa0a118e", "scanner": "scanner-primary", "fingerprint": "930332dd8305a3df", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5863e79e416cd3da", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/configure-sms-webhooks/route.ts:98"}, "properties": {"repobilityId": "b2ef50a3eaeb508b", "scanner": "scanner-primary", "fingerprint": "5863e79e416cd3da", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c2366c45d61a7efa", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/generate-telegram-token/route.ts:57"}, "properties": {"repobilityId": "c8dffdce07b6bf0b", "scanner": "scanner-primary", "fingerprint": "c2366c45d61a7efa", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1d1d7e3717ef259c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/backfill-niche-configs/route.ts:54"}, "properties": {"repobilityId": "6246f2eab2df5013", "scanner": "scanner-primary", "fingerprint": "1d1d7e3717ef259c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-579d9826e2e1947f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/setup-telegram-webhook/route.ts:57"}, "properties": {"repobilityId": "33a083d111cdfc58", "scanner": "scanner-primary", "fingerprint": "579d9826e2e1947f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a641096be1f96856", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/test-email/route.ts:82"}, "properties": {"repobilityId": "6f94b94244b89e3d", "scanner": "scanner-primary", "fingerprint": "a641096be1f96856", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3761fd6637230011", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/cleanup-test/route.ts:115"}, "properties": {"repobilityId": "90a66a7ca6e78196", "scanner": "scanner-primary", "fingerprint": "3761fd6637230011", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fc117e3a725eb73d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/send-login-link/route.ts:118"}, "properties": {"repobilityId": "d57dbf634498e735", "scanner": "scanner-primary", "fingerprint": "fc117e3a725eb73d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d173e84a67c70687", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/backfill-sms-prompt/route.ts:94"}, "properties": {"repobilityId": "f24b7f9f0a5eceee", "scanner": "scanner-primary", "fingerprint": "d173e84a67c70687", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8abeb4675cabcf7a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/unassign-number/route.ts:92"}, "properties": {"repobilityId": "731aeb9b4d8250f6", "scanner": "scanner-primary", "fingerprint": "8abeb4675cabcf7a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a6e560b43aacfa64", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/test-activate/route.ts:158"}, "properties": {"repobilityId": "bd96670490fe464e", "scanner": "scanner-primary", "fingerprint": "a6e560b43aacfa64", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2c2bcbbde5bb0e2f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/zara/route.ts:87"}, "properties": {"repobilityId": "b239cd219b037b49", "scanner": "scanner-primary", "fingerprint": "2c2bcbbde5bb0e2f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-623a3e137d82f213", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/sync-agents/route.ts:86"}, "properties": {"repobilityId": "c03b8087bfc335cd", "scanner": "scanner-primary", "fingerprint": "623a3e137d82f213", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-133ee55f6e5db069", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/backfill-knowledge/route.ts:74"}, "properties": {"repobilityId": "09d6a1586c6439c6", "scanner": "scanner-primary", "fingerprint": "133ee55f6e5db069", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-513b856d864981e4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/apply-promo/route.ts:60"}, "properties": {"repobilityId": "ed9aab1bb9a9efbf", "scanner": "scanner-primary", "fingerprint": "513b856d864981e4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fb40f86badb98524", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/daily-digest/route.ts:299"}, "properties": {"repobilityId": "29b1ccc530f5ad68", "scanner": "scanner-primary", "fingerprint": "fb40f86badb98524", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a23a654ebaab3a3e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/daily-digest-client/route.ts:190"}, "properties": {"repobilityId": "cefcb901c36eb790", "scanner": "scanner-primary", "fingerprint": "a23a654ebaab3a3e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-32b04ed7ba1015ba", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/fleet-drift/route.ts:56"}, "properties": {"repobilityId": "661c6ffc0e3c8bd2", "scanner": "scanner-primary", "fingerprint": "32b04ed7ba1015ba", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-61245cca12f1ecda", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/analyze-calls/route.ts:170"}, "properties": {"repobilityId": "6bd39966daf7a955", "scanner": "scanner-primary", "fingerprint": "61245cca12f1ecda", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-84cadd5a0c0de761", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/demo-followup/route.ts:104"}, "properties": {"repobilityId": "af23fe1923041c92", "scanner": "scanner-primary", "fingerprint": "84cadd5a0c0de761", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4545ba7052c019f4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/follow-up-reminders/route.ts:64"}, "properties": {"repobilityId": "819469445b936903", "scanner": "scanner-primary", "fingerprint": "4545ba7052c019f4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-13061fc708dcb825", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/scheduled-callbacks/route.ts:73"}, "properties": {"repobilityId": "92a143f8ce5c0d3d", "scanner": "scanner-primary", "fingerprint": "13061fc708dcb825", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f663375c8e48cb9c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/weekly-digest-client/route.ts:203"}, "properties": {"repobilityId": "575c35a61e8c76ac", "scanner": "scanner-primary", "fingerprint": "f663375c8e48cb9c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-061ec1d712983817", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/cleanup-tokens/route.ts:34"}, "properties": {"repobilityId": "09513a7fb8f5199d", "scanner": "scanner-primary", "fingerprint": "061ec1d712983817", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-50fc29577700a1a2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/notification-health/route.ts:92"}, "properties": {"repobilityId": "4fb6a06f0fb9479a", "scanner": "scanner-primary", "fingerprint": "50fc29577700a1a2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ccaf83290a0431ea", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/drift-check/route.ts:165"}, "properties": {"repobilityId": "185fc285b2fe51d8", "scanner": "scanner-primary", "fingerprint": "ccaf83290a0431ea", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9335a3995fad8a98", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/minute-usage-alert/route.ts:115"}, "properties": {"repobilityId": "236bb1d0fd7cdb9b", "scanner": "scanner-primary", "fingerprint": "9335a3995fad8a98", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bde6d51126492036", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/trial-expiry/route.ts:84"}, "properties": {"repobilityId": "493e011ccd7ed5e4", "scanner": "scanner-primary", "fingerprint": "bde6d51126492036", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c7c9470cf9fcdadf", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/reset-minutes/route.ts:44"}, "properties": {"repobilityId": "b971c81c46ede843", "scanner": "scanner-primary", "fingerprint": "c7c9470cf9fcdadf", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-aa298012acd2afb7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/stripe/create-public-checkout/route.ts:142"}, "properties": {"repobilityId": "8221ff365b9ebdc5", "scanner": "scanner-primary", "fingerprint": "aa298012acd2afb7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d9d57ad46be68bd2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/stripe/trial-convert/route.ts:104"}, "properties": {"repobilityId": "56566d33c1d2d0f5", "scanner": "scanner-primary", "fingerprint": "d9d57ad46be68bd2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-532311b8f9e16aea", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/calendar/[slug]/slots/route.ts:19"}, "properties": {"repobilityId": "e2b81b7123c5246e", "scanner": "scanner-primary", "fingerprint": "532311b8f9e16aea", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c1b711b6eec0ce57", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/calendar/[slug]/book/route.ts:23"}, "properties": {"repobilityId": "c590532511d293b2", "scanner": "scanner-primary", "fingerprint": "c1b711b6eec0ce57", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d1f23960381588ec", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/knowledge/[slug]/query/route.ts:28"}, "properties": {"repobilityId": "10e169aff6b54b2f", "scanner": "scanner-primary", "fingerprint": "d1f23960381588ec", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-dfe8d98d5b1ee1cb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/advisor/gift-credits/route.ts:97"}, "properties": {"repobilityId": "28daa84302f803aa", "scanner": "scanner-primary", "fingerprint": "dfe8d98d5b1ee1cb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0309d40935cb3493", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/advisor/message/route.ts:442"}, "properties": {"repobilityId": "60df38504278f881", "scanner": "scanner-primary", "fingerprint": "0309d40935cb3493", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c6f81d52734d35d6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/advisor/summarize/route.ts:151"}, "properties": {"repobilityId": "324d8b8fbec41aac", "scanner": "scanner-primary", "fingerprint": "c6f81d52734d35d6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b04478bce41beab4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/advisor/credits/route.ts:59"}, "properties": {"repobilityId": "2373e762faa59cae", "scanner": "scanner-primary", "fingerprint": "b04478bce41beab4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-970d9955b5d87f9a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/settings/SettingsView.tsx:227"}, "properties": {"repobilityId": "f9b1829f6a1f12e1", "scanner": "scanner-primary", "fingerprint": "970d9955b5d87f9a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-da4cec369d178fbd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/notifications/page.tsx:335"}, "properties": {"repobilityId": "e41f5c16905940b5", "scanner": "scanner-primary", "fingerprint": "da4cec369d178fbd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-df1ca0d81b9380cd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/voices/page.tsx:187"}, "properties": {"repobilityId": "1a3a51849dd4ab85", "scanner": "scanner-primary", "fingerprint": "df1ca0d81b9380cd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bcb62c002023e10c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/admin/learning-bank/LearningBankClient.tsx:520"}, "properties": {"repobilityId": "6c1bea58f19e4b1d", "scanner": "scanner-primary", "fingerprint": "bcb62c002023e10c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bdc7389f6e0946fc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/setup/SetupView.tsx:727"}, "properties": {"repobilityId": "bcc2afd1b02759a7", "scanner": "scanner-primary", "fingerprint": "bdc7389f6e0946fc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c554f8ef178cf207", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/welcome/WelcomeWizard.tsx:120"}, "properties": {"repobilityId": "91ef8426c5dd9401", "scanner": "scanner-primary", "fingerprint": "c554f8ef178cf207", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b47ec90c5cc5f557", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/onboard/steps/step1-gbp.tsx:450"}, "properties": {"repobilityId": "c4f5527dde72b5e5", "scanner": "scanner-primary", "fingerprint": "b47ec90c5cc5f557", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-71fd469ac33f2707", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/for-auto-glass/page.tsx:125"}, "properties": {"repobilityId": "c7720b24fa825544", "scanner": "scanner-primary", "fingerprint": "71fd469ac33f2707", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-19447764e69034a9", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/pricing/page.tsx:38"}, "properties": {"repobilityId": "fb37beec3d048e5b", "scanner": "scanner-primary", "fingerprint": "19447764e69034a9", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-72d5d3bfb1be3d73", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/seed-knowledge.ts:129"}, "properties": {"repobilityId": "49091f0d4c537a35", "scanner": "scanner-primary", "fingerprint": "72d5d3bfb1be3d73", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-73a232d0f0d06341", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/settings-patchers.ts:236"}, "properties": {"repobilityId": "bb722e63360e69a7", "scanner": "scanner-primary", "fingerprint": "73a232d0f0d06341", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3f37c3a428244d86", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/google-calendar.ts:13"}, "properties": {"repobilityId": "d7cc0e466a3bbb41", "scanner": "scanner-primary", "fingerprint": "3f37c3a428244d86", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-217b704128062cdd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/env-check.ts:61"}, "properties": {"repobilityId": "96bbce58d998a637", "scanner": "scanner-primary", "fingerprint": "217b704128062cdd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-faeb65521f47d161", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/firecrawl.ts:70"}, "properties": {"repobilityId": "e366d1c66f62a5c8", "scanner": "scanner-primary", "fingerprint": "faeb65521f47d161", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e1e28b2908785641", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/completed-notifications.ts:246"}, "properties": {"repobilityId": "433d528f8f070a3a", "scanner": "scanner-primary", "fingerprint": "e1e28b2908785641", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-97bb96f5318590ad", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/prompt-builder.ts:28"}, "properties": {"repobilityId": "ed0062cacb8df9a9", "scanner": "scanner-primary", "fingerprint": "97bb96f5318590ad", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-20c363acf86da518", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/service-catalog-sync.ts:93"}, "properties": {"repobilityId": "e35a3ec75b3284c9", "scanner": "scanner-primary", "fingerprint": "20c363acf86da518", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5632958059ad8e90", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/embeddings.ts:89"}, "properties": {"repobilityId": "2ba7ca1bbabec414", "scanner": "scanner-primary", "fingerprint": "5632958059ad8e90", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-db2aba8b5f76465a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/prompt-suggestions.ts:264"}, "properties": {"repobilityId": "a36f73101ea06add", "scanner": "scanner-primary", "fingerprint": "db2aba8b5f76465a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-671d390ac47a0eb1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/faq-suggestion-generator.ts:139"}, "properties": {"repobilityId": "760998e8a0e4c5a4", "scanner": "scanner-primary", "fingerprint": "671d390ac47a0eb1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8a03520b8a7b555e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/openrouter.ts:181"}, "properties": {"repobilityId": "2ef34be885bc0bb0", "scanner": "scanner-primary", "fingerprint": "8a03520b8a7b555e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0189fa653dae5188", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/activate-client.ts:42"}, "properties": {"repobilityId": "d8031aec3071e1a9", "scanner": "scanner-primary", "fingerprint": "0189fa653dae5188", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-52c851e04e926918", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/slot-regenerator.ts:378"}, "properties": {"repobilityId": "91ac7717845ce2b5", "scanner": "scanner-primary", "fingerprint": "52c851e04e926918", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-11ab4a7e834bf3a0", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/lib/recording-url.ts:11"}, "properties": {"repobilityId": "1c82f1d82044180e", "scanner": "scanner-primary", "fingerprint": "11ab4a7e834bf3a0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-49e29bd419e948c0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/auto-regen.ts:46"}, "properties": {"repobilityId": "bab875c708da0a7e", "scanner": "scanner-primary", "fingerprint": "49e29bd419e948c0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-29b63963a09fd85e", "level": "note", "message": {"text": "React Flow edge with `label=` but no project-wide edge-label CSS override \u2014 src/lib/niche-registry.ts:459"}, "properties": {"repobilityId": "1e484152d7ad9a74", "scanner": "scanner-primary", "fingerprint": "29b63963a09fd85e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.edge-label.no-bg"]}}, {"ruleId": "scanner-d9a4cf877db2ff23", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/niche-generator.ts:73"}, "properties": {"repobilityId": "ee9ab5f47c371181", "scanner": "scanner-primary", "fingerprint": "d9a4cf877db2ff23", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a0a39e8620ee2df8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/ultravox.ts:871"}, "properties": {"repobilityId": "c253d157097cc661", "scanner": "scanner-primary", "fingerprint": "a0a39e8620ee2df8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-df72d5f8fe9afc7f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/lesson-generator.ts:251"}, "properties": {"repobilityId": "178be78d80a56039", "scanner": "scanner-primary", "fingerprint": "df72d5f8fe9afc7f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7f0aeefb248519ec", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/website-scraper.ts:115"}, "properties": {"repobilityId": "6b54dd244722cd77", "scanner": "scanner-primary", "fingerprint": "7f0aeefb248519ec", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-25ae7dcfa1c04b60", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/telegram.ts:9"}, "properties": {"repobilityId": "78447394900c048f", "scanner": "scanner-primary", "fingerprint": "25ae7dcfa1c04b60", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a489150b86d3722a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/ensure-twilio-provisioned.ts:64"}, "properties": {"repobilityId": "9356f08b5d0bb3e2", "scanner": "scanner-primary", "fingerprint": "a489150b86d3722a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e8d753cf0291db98", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/sonar-enrichment.ts:54"}, "properties": {"repobilityId": "63e5d60c50aaa93d", "scanner": "scanner-primary", "fingerprint": "e8d753cf0291db98", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-04681c3a1d49ab9d", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/lib/__tests__/prompt-builder-phase2.test.ts:200"}, "properties": {"repobilityId": "e7f042f76584bf6b", "scanner": "scanner-primary", "fingerprint": "04681c3a1d49ab9d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-0c33ed9a329a5896", "level": "warning", "message": {"text": "Privileged port 45 in use"}, "properties": {"repobilityId": "73cf64d92574d41c", "scanner": "scanner-primary", "fingerprint": "0c33ed9a329a5896", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/stripe-drift-check.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-45a2f5c0d68bf60d", "level": "warning", "message": {"text": "Privileged port 15 in use"}, "properties": {"repobilityId": "3340f9a170f285cd", "scanner": "scanner-primary", "fingerprint": "45a2f5c0d68bf60d", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/prompt-injection-eval.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-266a6e057f20fbee", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in dashboard-mockup.html:1408"}, "properties": {"repobilityId": "ae3e9c866945ccfe", "scanner": "scanner-primary", "fingerprint": "266a6e057f20fbee", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "dashboard-mockup.html"}, "region": {"startLine": 1408}}}]}, {"ruleId": "scanner-4f4334c28d0da65c", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/test-prompt-live.ts:35"}, "properties": {"repobilityId": "ea4fb13cd91b406f", "scanner": "scanner-primary", "fingerprint": "4f4334c28d0da65c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/test-prompt-live.ts"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-485749483f7589fa", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in scripts/staged-test-harness.html:93"}, "properties": {"repobilityId": "86c039c50579bca5", "scanner": "scanner-primary", "fingerprint": "485749483f7589fa", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/staged-test-harness.html"}, "region": {"startLine": 93}}}]}, {"ruleId": "scanner-20c3420b4d02c597", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/rebuild-tools.mjs:6"}, "properties": {"repobilityId": "1dd7f3ec078bdc0b", "scanner": "scanner-primary", "fingerprint": "20c3420b4d02c597", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/rebuild-tools.mjs"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-197d3d2b21c1fba8", "level": "error", "message": {"text": "Insecure pattern 'exec_used' in scripts/test-windshield-staged.ts:179"}, "properties": {"repobilityId": "a14fdcb3b3fa6309", "scanner": "scanner-primary", "fingerprint": "197d3d2b21c1fba8", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "exec_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/test-windshield-staged.ts"}, "region": {"startLine": 179}}}]}, {"ruleId": "scanner-51d1be8759a86cfd", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/test-windshield-staged.ts:35"}, "properties": {"repobilityId": "9814a27f40b60412", "scanner": "scanner-primary", "fingerprint": "51d1be8759a86cfd", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/test-windshield-staged.ts"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-f2a140f4f3cb974b", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/test-prompt-live.html:116"}, "properties": {"repobilityId": "5b427734c9d18274", "scanner": "scanner-primary", "fingerprint": "f2a140f4f3cb974b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/test-prompt-live.html"}, "region": {"startLine": 116}}}]}, {"ruleId": "scanner-4c73e4aa0c438549", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/leads/auto-glass-ab-sk.html:172"}, "properties": {"repobilityId": "4d2d33590e1943a4", "scanner": "scanner-primary", "fingerprint": "4c73e4aa0c438549", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/leads/auto-glass-ab-sk.html"}, "region": {"startLine": 172}}}]}, {"ruleId": "scanner-28bff82e9c361422", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/NicheLandingPage.tsx:27"}, "properties": {"repobilityId": "f4e296f29ef150c3", "scanner": "scanner-primary", "fingerprint": "28bff82e9c361422", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/NicheLandingPage.tsx"}, "region": {"startLine": 27}}}]}, {"ruleId": "scanner-6f38a33241735455", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/ui/chart.tsx:83"}, "properties": {"repobilityId": "33f10636e53b4298", "scanner": "scanner-primary", "fingerprint": "6f38a33241735455", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/ui/chart.tsx"}, "region": {"startLine": 83}}}]}, {"ruleId": "scanner-6a292f12fe30c175", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/advisor/ChatView.tsx:285"}, "properties": {"repobilityId": "104950f98490d516", "scanner": "scanner-primary", "fingerprint": "6a292f12fe30c175", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/advisor/ChatView.tsx"}, "region": {"startLine": 285}}}]}, {"ruleId": "scanner-eceed10ddf99c57d", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/page.tsx:44"}, "properties": {"repobilityId": "88fd235b712bda65", "scanner": "scanner-primary", "fingerprint": "eceed10ddf99c57d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/page.tsx"}, "region": {"startLine": 44}}}]}, {"ruleId": "scanner-0b2b000210ef1fb9", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/layout.tsx:150"}, "properties": {"repobilityId": "0bca654fa2052eb0", "scanner": "scanner-primary", "fingerprint": "0b2b000210ef1fb9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/layout.tsx"}, "region": {"startLine": 150}}}]}, {"ruleId": "scanner-cfbb7def17d546fe", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/about/page.tsx:93"}, "properties": {"repobilityId": "7ba73de1c01fa8e9", "scanner": "scanner-primary", "fingerprint": "cfbb7def17d546fe", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/about/page.tsx"}, "region": {"startLine": 93}}}]}, {"ruleId": "scanner-12ec880f31878e43", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/for-auto-glass/page.tsx:125"}, "properties": {"repobilityId": "c36fb6c565ab98c7", "scanner": "scanner-primary", "fingerprint": "12ec880f31878e43", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/for-auto-glass/page.tsx"}, "region": {"startLine": 125}}}]}, {"ruleId": "scanner-3a800b6ff3413f93", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/pricing/page.tsx:38"}, "properties": {"repobilityId": "3ed1e47a0a76c577", "scanner": "scanner-primary", "fingerprint": "3a800b6ff3413f93", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/pricing/page.tsx"}, "region": {"startLine": 38}}}]}, {"ruleId": "scanner-dbd6666c942b21d7", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in src/lib/__tests__/system-prompt-writer-allowlist.test.ts:35"}, "properties": {"repobilityId": "2dba19450f5ebc29", "scanner": "scanner-primary", "fingerprint": "dbd6666c942b21d7", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/lib/__tests__/system-prompt-writer-allowlist.test.ts"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-d9fb596dfdf2f133", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "7ca0d6e5e14a24ae", "scanner": "scanner-primary", "fingerprint": "d9fb596dfdf2f133", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/data-hygiene-check.yml"}, "region": {"startLine": 66}}}]}, {"ruleId": "scanner-67cc684d6bb9dcf1", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ee280a35c1f78ea0", "scanner": "scanner-primary", "fingerprint": "67cc684d6bb9dcf1", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/api-fuzz.yml"}, "region": {"startLine": 86}}}]}, {"ruleId": "scanner-cb639d9a10a47b23", "level": "note", "message": {"text": "package.json defines install-time lifecycle scripts"}, "properties": {"repobilityId": "b86179956da3a4a8", "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-5187162d3a5d82aa", "level": "note", "message": {"text": "Very large file: src/components/dashboard/home/InlineModalsV2.tsx (1542 lines)"}, "properties": {"repobilityId": "e0905d2a26faa7ae", "scanner": "scanner-primary", "fingerprint": "5187162d3a5d82aa", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-bc69a47099f97f88", "level": "note", "message": {"text": "Very large file: src/components/dashboard/home/UnifiedHomeSection.tsx (1007 lines)"}, "properties": {"repobilityId": "79910af3c16b2c93", "scanner": "scanner-primary", "fingerprint": "bc69a47099f97f88", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-22868b4cfb2f50d2", "level": "note", "message": {"text": "Very large file: src/components/dashboard/knowledge/FileUploadPanel.tsx (1200 lines)"}, "properties": {"repobilityId": "963f1822c4af3e44", "scanner": "scanner-primary", "fingerprint": "22868b4cfb2f50d2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-92a78673296d82e8", "level": "note", "message": {"text": "Very large file: src/lib/prompt-slots.ts (1698 lines)"}, "properties": {"repobilityId": "3c629fb44aa466b9", "scanner": "scanner-primary", "fingerprint": "92a78673296d82e8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-043a2383b57ab9c7", "level": "note", "message": {"text": "Very large file: src/lib/ultravox.ts (1193 lines)"}, "properties": {"repobilityId": "64217c84e36b1e99", "scanner": "scanner-primary", "fingerprint": "043a2383b57ab9c7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-1ffa4a7b313a5c17", "level": "note", "message": {"text": "Very large file: src/lib/database.types.ts (3670 lines)"}, "properties": {"repobilityId": "ca4d4e35c819d250", "scanner": "scanner-primary", "fingerprint": "1ffa4a7b313a5c17", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-58914f207051fab7", "level": "note", "message": {"text": "Very large file: src/lib/prompt-config/niche-defaults.ts (1564 lines)"}, "properties": {"repobilityId": "fd33dc5a5e9959d9", "scanner": "scanner-primary", "fingerprint": "58914f207051fab7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ea3b5e389d8c9c0f", "level": "note", "message": {"text": "Low test-to-source ratio"}, "properties": {"repobilityId": "ef7b2552cc00a375", "scanner": "scanner-primary", "fingerprint": "ea3b5e389d8c9c0f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["tests"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "87e2ee4539be2f49", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-78c0cdf0d2033fab", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: cloudflare-workers/voice-fallback/package.json"}, "properties": {"repobilityId": "46f4f526340db23f", "scanner": "scanner-primary", "fingerprint": "78c0cdf0d2033fab", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cloudflare-workers/voice-fallback/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "ce2f54275eb4304d", "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": "3f93549d935ac350", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "a5916bb9acb40e1b", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "5c62726871687764", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "95ae3b15e730731c", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "4b0e48ad28ba3f52", "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": "f9d504b62b828c74", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-7be65941f57b0765", "level": "none", "message": {"text": "Commented-code block (5 lines) in cloudflare-workers/voice-fallback/src/index.ts:34"}, "properties": {"repobilityId": "d7c63635614973f9", "scanner": "scanner-primary", "fingerprint": "7be65941f57b0765", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-000a54948800efa0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare-workers/voice-fallback/src/index.ts:223"}, "properties": {"repobilityId": "c6c566be4a71ee1b", "scanner": "scanner-primary", "fingerprint": "000a54948800efa0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ed99a1ccc68e1497", "level": "none", "message": {"text": "Commented-code block (7 lines) in tests/phase4-settings-e2e.spec.ts:52"}, "properties": {"repobilityId": "ce877d5c406a0c3d", "scanner": "scanner-primary", "fingerprint": "ed99a1ccc68e1497", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-77c3d2a1227e7489", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/v2-modal-shiptest.spec.ts:436"}, "properties": {"repobilityId": "4937bf3335f6a570", "scanner": "scanner-primary", "fingerprint": "77c3d2a1227e7489", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-966bee82f476da15", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/smoke-trial-flow.spec.ts:159"}, "properties": {"repobilityId": "f396009c3cf94bdd", "scanner": "scanner-primary", "fingerprint": "966bee82f476da15", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-934de6095b9c1aed", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/schemathesis/conftest.py:222"}, "properties": {"repobilityId": "a39c363e3b5bc2ea", "scanner": "scanner-primary", "fingerprint": "934de6095b9c1aed", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d93ea8b681985e42", "level": "none", "message": {"text": "Commented-code block (7 lines) in tests/truth-audit/tenant-isolation.spec.ts:90"}, "properties": {"repobilityId": "4e4719e40924efcf", "scanner": "scanner-primary", "fingerprint": "d93ea8b681985e42", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9eda3ebc4525cf44", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/truth-audit/transfer-recovery.spec.ts:71"}, "properties": {"repobilityId": "8492598c22cc3b6c", "scanner": "scanner-primary", "fingerprint": "9eda3ebc4525cf44", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-df36d8ab1b8289d2", "level": "none", "message": {"text": "Commented-code block (8 lines) in tests/promptfoo/knowledge-routing/audit.ts:269"}, "properties": {"repobilityId": "1d8002c16d9283c6", "scanner": "scanner-primary", "fingerprint": "df36d8ab1b8289d2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-305250dc85fee4f5", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/promptfoo/scripts/generate-auto-glass-prompt.ts:46"}, "properties": {"repobilityId": "19589337c2f3ca63", "scanner": "scanner-primary", "fingerprint": "305250dc85fee4f5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d5e86a0944ece33b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/resync-exp-realty.ts:56"}, "properties": {"repobilityId": "55b5b58931b2460f", "scanner": "scanner-primary", "fingerprint": "d5e86a0944ece33b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c1ddda1e2302bc22", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/deploy_prompt.py:44"}, "properties": {"repobilityId": "3f1f5fa1ff12ef14", "scanner": "scanner-primary", "fingerprint": "c1ddda1e2302bc22", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-40d5068ad6b168da", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/deploy_prompt.py:117"}, "properties": {"repobilityId": "82e508d71cfc5121", "scanner": "scanner-primary", "fingerprint": "40d5068ad6b168da", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-25af9b1aca51655a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/set-twilio-voice-fallback.ts:60"}, "properties": {"repobilityId": "ffde7c9dbf440a80", "scanner": "scanner-primary", "fingerprint": "25af9b1aca51655a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f9297dcf3e014ce1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/backfill-chunks.ts:83"}, "properties": {"repobilityId": "21b464918c57e60b", "scanner": "scanner-primary", "fingerprint": "f9297dcf3e014ce1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0fba179064ada1dd", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/migrate-velly-to-slots.ts:75"}, "properties": {"repobilityId": "ee4ed726b870557e", "scanner": "scanner-primary", "fingerprint": "0fba179064ada1dd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-72c1e85e7e4f3225", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/verify-ultravox-synced.ts:10"}, "properties": {"repobilityId": "feb402c8d787fe93", "scanner": "scanner-primary", "fingerprint": "72c1e85e7e4f3225", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-84a8bcc899cd4a5a", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/prompt_status.py:97"}, "properties": {"repobilityId": "1df66a846324533b", "scanner": "scanner-primary", "fingerprint": "84a8bcc899cd4a5a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-687ebae890914114", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/register-ultravox-webhook.py:78"}, "properties": {"repobilityId": "8c0fc012ef75a127", "scanner": "scanner-primary", "fingerprint": "687ebae890914114", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f944949bef14fbbe", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/recompose-aman.ts:48"}, "properties": {"repobilityId": "9d66d7d097fa3c35", "scanner": "scanner-primary", "fingerprint": "f944949bef14fbbe", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-22cb04ae86fb5788", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-prompt-live.ts:98"}, "properties": {"repobilityId": "3fd62028e306a9e4", "scanner": "scanner-primary", "fingerprint": "22cb04ae86fb5788", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-942d0c1bd22998ae", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/patch-velly-universal-rules.ts:95"}, "properties": {"repobilityId": "583429a293f4383f", "scanner": "scanner-primary", "fingerprint": "942d0c1bd22998ae", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-abe27288148a0c62", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/backfill-gap-embeddings.ts:19"}, "properties": {"repobilityId": "69d1b75aea5bf7c6", "scanner": "scanner-primary", "fingerprint": "abe27288148a0c62", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2c5e7b3bdf173f9c", "level": "note", "message": {"text": "Legacy-named symbol `isLegacy` in scripts/drift-check-all.ts:90"}, "properties": {"repobilityId": "bf8fb1afc9535a6d", "scanner": "scanner-primary", "fingerprint": "2c5e7b3bdf173f9c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-3912a9fa31f72dd0", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/test-sip-transfer.py:54"}, "properties": {"repobilityId": "12f4504864d08acb", "scanner": "scanner-primary", "fingerprint": "3912a9fa31f72dd0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a78217c257e5081d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/one-off-set-voice.ts:61"}, "properties": {"repobilityId": "175234db9e33babf", "scanner": "scanner-primary", "fingerprint": "a78217c257e5081d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-06e229dd9f7b790b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/ingest-fallback-recordings.ts:59"}, "properties": {"repobilityId": "dce57ed1757d08ea", "scanner": "scanner-primary", "fingerprint": "06e229dd9f7b790b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0b3569e29fc2b79c", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/telegram-health-check.ts:334"}, "properties": {"repobilityId": "4b7574f6f05aedef", "scanner": "scanner-primary", "fingerprint": "0b3569e29fc2b79c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9c92052be7526d84", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/backfill-corpus.py:42"}, "properties": {"repobilityId": "74655979e0303dc0", "scanner": "scanner-primary", "fingerprint": "9c92052be7526d84", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cefd7cfe11ac354b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/provisioning-completeness-check.ts:95"}, "properties": {"repobilityId": "1cf3ef53731021c4", "scanner": "scanner-primary", "fingerprint": "cefd7cfe11ac354b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-dcf439b42739a973", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/canary-truth-snapshot.ts:64"}, "properties": {"repobilityId": "ddcc4f4376139549", "scanner": "scanner-primary", "fingerprint": "dcf439b42739a973", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8a3132863ad3dac2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/onboard-aman.ts:275"}, "properties": {"repobilityId": "dd686182702db060", "scanner": "scanner-primary", "fingerprint": "8a3132863ad3dac2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c01304b1d19f460a", "level": "note", "message": {"text": "Legacy-named symbol `hasLegacy` in scripts/p3-fleet-snapshot-audit.ts:47"}, "properties": {"repobilityId": "f851510f9a87ff72", "scanner": "scanner-primary", "fingerprint": "c01304b1d19f460a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-72aa0f2ecad7d490", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/seed-demo-knowledge.py:22"}, "properties": {"repobilityId": "3fef1b5874a97912", "scanner": "scanner-primary", "fingerprint": "72aa0f2ecad7d490", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e40092305b6d178f", "level": "none", "message": {"text": "Commented-code block (8 lines) in scripts/nightly-drift-check.ts:169"}, "properties": {"repobilityId": "f11d34e6a01451d2", "scanner": "scanner-primary", "fingerprint": "e40092305b6d178f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0da8b9ac598e9bec", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/admin-trial-cleanup.mjs:4"}, "properties": {"repobilityId": "c5dd14a638ae922e", "scanner": "scanner-primary", "fingerprint": "0da8b9ac598e9bec", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-68239f5a08ce6f22", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/admin-trial-cleanup.mjs:145"}, "properties": {"repobilityId": "5b6014026b33d32f", "scanner": "scanner-primary", "fingerprint": "68239f5a08ce6f22", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-997d3be3fa2c00d9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/onboard-emon.ts:87"}, "properties": {"repobilityId": "1b8b5a9f00d36aa1", "scanner": "scanner-primary", "fingerprint": "997d3be3fa2c00d9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d50903cddb734d0a", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/types/onboarding.ts:180"}, "properties": {"repobilityId": "b9aff9c5e6d8158a", "scanner": "scanner-primary", "fingerprint": "d50903cddb734d0a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c619e4b1d6ccee13", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/LeadQueue.tsx:263"}, "properties": {"repobilityId": "4fd5bfc85fe7a24d", "scanner": "scanner-primary", "fingerprint": "c619e4b1d6ccee13", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4be246ecfce430be", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/MaintenanceTab.tsx:77"}, "properties": {"repobilityId": "e25a9e976f1e694a", "scanner": "scanner-primary", "fingerprint": "4be246ecfce430be", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-154a07b43dbc6ff7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/CallGapReview.tsx:93"}, "properties": {"repobilityId": "c19f177a00f86847", "scanner": "scanner-primary", "fingerprint": "154a07b43dbc6ff7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c0071a6aa843de28", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/settings/PromptVersionsCard.tsx:24"}, "properties": {"repobilityId": "bdb244d4da3901b4", "scanner": "scanner-primary", "fingerprint": "c0071a6aa843de28", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-144b80f235b1e1a1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/settings/LearningLoopCard.tsx:50"}, "properties": {"repobilityId": "d57f69a518512d98", "scanner": "scanner-primary", "fingerprint": "144b80f235b1e1a1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-86bd30c287c28190", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/settings/VIPContactsCard.tsx:91"}, "properties": {"repobilityId": "3620d54de0a9fee6", "scanner": "scanner-primary", "fingerprint": "86bd30c287c28190", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9e1b1f3a38763de4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/settings/CallRoutingCard.tsx:84"}, "properties": {"repobilityId": "0d56364a9dbe0087", "scanner": "scanner-primary", "fingerprint": "9e1b1f3a38763de4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b673884abe15423e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/dashboard/settings/PromptVariablesCard.tsx:426"}, "properties": {"repobilityId": "daa5a019728a218d", "scanner": "scanner-primary", "fingerprint": "b673884abe15423e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5d321bf7ca7511c3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/settings/ContextDataCard.tsx:34"}, "properties": {"repobilityId": "d2af5e93ca9da8e6", "scanner": "scanner-primary", "fingerprint": "5d321bf7ca7511c3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ed0c2dee268936b2", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/dashboard/settings/usePatchSettings.ts:236"}, "properties": {"repobilityId": "257c765a0f3fa2a7", "scanner": "scanner-primary", "fingerprint": "ed0c2dee268936b2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d11c916cff837c60", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/settings/QuickInject.tsx:29"}, "properties": {"repobilityId": "158a5ff8f7ebf1c0", "scanner": "scanner-primary", "fingerprint": "d11c916cff837c60", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e49d49e5428728db", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/settings/VoicePicker.tsx:41"}, "properties": {"repobilityId": "ade040fc3be3b572", "scanner": "scanner-primary", "fingerprint": "e49d49e5428728db", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-472f97ad42cdb11f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/settings/PlanInfoCard.tsx:109"}, "properties": {"repobilityId": "57f204e67b1f545d", "scanner": "scanner-primary", "fingerprint": "472f97ad42cdb11f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-301b63647bd412f8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/settings/knowledge/GapAnswerSection.tsx:65"}, "properties": {"repobilityId": "48a03796d04d6bfb", "scanner": "scanner-primary", "fingerprint": "301b63647bd412f8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7c3201e1d4bb5eb7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/go-live/GoLiveVoicePicker.tsx:45"}, "properties": {"repobilityId": "87c5bb08176b71f9", "scanner": "scanner-primary", "fingerprint": "7c3201e1d4bb5eb7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fd64417b2735d7f4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/home/UnansweredQuestionsTile.tsx:95"}, "properties": {"repobilityId": "299544e1b5078e8a", "scanner": "scanner-primary", "fingerprint": "fd64417b2735d7f4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-37bb165cf4946586", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/dashboard/home/AgentIdentityCard.tsx:168"}, "properties": {"repobilityId": "039133db1481d95e", "scanner": "scanner-primary", "fingerprint": "37bb165cf4946586", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-11dcfa75d39fd25c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/actions/ServiceCatalogEditor.tsx:56"}, "properties": {"repobilityId": "140d330321675d3f", "scanner": "scanner-primary", "fingerprint": "11dcfa75d39fd25c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-74527dfbcdf3725a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/knowledge/BulkImportPanel.tsx:39"}, "properties": {"repobilityId": "e5445e2c0900fc7b", "scanner": "scanner-primary", "fingerprint": "74527dfbcdf3725a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-af68c43eb6398f2b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/knowledge/ChunkBrowser.tsx:90"}, "properties": {"repobilityId": "ef7ab8d475e5ea53", "scanner": "scanner-primary", "fingerprint": "af68c43eb6398f2b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3c001c2c030ce3b1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/knowledge/WebsiteScrapePanel.tsx:90"}, "properties": {"repobilityId": "6c679f97912d5693", "scanner": "scanner-primary", "fingerprint": "3c001c2c030ce3b1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c99537c871601755", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/outbound/LeadQueue.tsx:78"}, "properties": {"repobilityId": "9bef424b6217b84a", "scanner": "scanner-primary", "fingerprint": "c99537c871601755", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-169d7301c0d8d24a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/admin/ClientSwitcher.tsx:7"}, "properties": {"repobilityId": "78c6052c5fde93ec", "scanner": "scanner-primary", "fingerprint": "169d7301c0d8d24a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d7cc11e0ea53a028", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/advisor/InsightCards.tsx:46"}, "properties": {"repobilityId": "e933de9eed26a083", "scanner": "scanner-primary", "fingerprint": "d7cc11e0ea53a028", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f04f0604d029c268", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/advisor/ChatView.tsx:136"}, "properties": {"repobilityId": "ed8f66426b7607fa", "scanner": "scanner-primary", "fingerprint": "f04f0604d029c268", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-466b8613bcc86e45", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/auth/google/callback/route.ts:36"}, "properties": {"repobilityId": "b917f271eb5f3a9f", "scanner": "scanner-primary", "fingerprint": "466b8613bcc86e45", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e122d6f0bb28a9e6", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/webhook/telegram/route.ts:123"}, "properties": {"repobilityId": "b9725241d34e162e", "scanner": "scanner-primary", "fingerprint": "e122d6f0bb28a9e6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-560ebf6227bc1486", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/webhook/telegram/route.ts:75"}, "properties": {"repobilityId": "ba3ef5237ae741d0", "scanner": "scanner-primary", "fingerprint": "560ebf6227bc1486", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-632068e39e6e55f1", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/webhook/stripe/route.ts:753"}, "properties": {"repobilityId": "600ab8569e4d3521", "scanner": "scanner-primary", "fingerprint": "632068e39e6e55f1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ce7b4059cd602569", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/webhook/[slug]/inbound/route.ts:284"}, "properties": {"repobilityId": "c04dac97520f5859", "scanner": "scanner-primary", "fingerprint": "ce7b4059cd602569", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1b0ea50a19eaac89", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/webhook/[slug]/whisper/route.ts:39"}, "properties": {"repobilityId": "fa4c1463bd1edb08", "scanner": "scanner-primary", "fingerprint": "1b0ea50a19eaac89", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2f94a3fed4cd1642", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/api/webhook/[slug]/completed/route.ts:172"}, "properties": {"repobilityId": "c93ba23c843ff211", "scanner": "scanner-primary", "fingerprint": "2f94a3fed4cd1642", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5b8ace90d1c4be49", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/webhook/[slug]/sms/route.ts:135"}, "properties": {"repobilityId": "a8d24e1fa334a0b3", "scanner": "scanner-primary", "fingerprint": "5b8ace90d1c4be49", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6b3c20c3e0f4aa18", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/dashboard/settings/improve-prompt/route.ts:179"}, "properties": {"repobilityId": "896b34b751782157", "scanner": "scanner-primary", "fingerprint": "6b3c20c3e0f4aa18", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3331fbc397024073", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/dashboard/regenerate-prompt/route.ts:130"}, "properties": {"repobilityId": "78fd2794d7544a34", "scanner": "scanner-primary", "fingerprint": "3331fbc397024073", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d96710e25a32ac5a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/dashboard/regenerate-prompt/preview/route.ts:76"}, "properties": {"repobilityId": "3611ddde346c041c", "scanner": "scanner-primary", "fingerprint": "d96710e25a32ac5a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-721694f53a05df57", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/dashboard/voices/route.ts:12"}, "properties": {"repobilityId": "e1f303f69aad79ae", "scanner": "scanner-primary", "fingerprint": "721694f53a05df57", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-01b235b7cda42cc1", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/dashboard/voices/[voiceId]/preview/route.ts:4"}, "properties": {"repobilityId": "ade18c6ccef2d29b", "scanner": "scanner-primary", "fingerprint": "01b235b7cda42cc1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d420ae5efb35dde0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/dashboard/voices/[voiceId]/preview/route.ts:31"}, "properties": {"repobilityId": "74146a2a8f344b7e", "scanner": "scanner-primary", "fingerprint": "d420ae5efb35dde0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e931a99f5db4a7cf", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/dashboard/agent/runtime-state/route.ts:209"}, "properties": {"repobilityId": "53615f918412875b", "scanner": "scanner-primary", "fingerprint": "e931a99f5db4a7cf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-edde50594cc47309", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/dashboard/demo-calls/[id]/recording/route.ts:43"}, "properties": {"repobilityId": "4c825e769b71ace2", "scanner": "scanner-primary", "fingerprint": "edde50594cc47309", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ebc92883e774e865", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/app/api/dashboard/forwarding-diagnostic/test/route.ts:149"}, "properties": {"repobilityId": "b93ce70e68e77e73", "scanner": "scanner-primary", "fingerprint": "ebc92883e774e865", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dcaaab61083b1145", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/dashboard/variables/route.ts:135"}, "properties": {"repobilityId": "7db5dd28708f99a2", "scanner": "scanner-primary", "fingerprint": "dcaaab61083b1145", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9af428fdb5dd3afb", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/dashboard/calls/[id]/recording/route.ts:44"}, "properties": {"repobilityId": "e6afab6089c8b023", "scanner": "scanner-primary", "fingerprint": "9af428fdb5dd3afb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cf8d092bccc7cb7b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/dashboard/calls/[id]/events/route.ts:60"}, "properties": {"repobilityId": "a2e0357f15ddf2bc", "scanner": "scanner-primary", "fingerprint": "cf8d092bccc7cb7b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9661bf748116c821", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/dashboard/calls/[id]/whisper/route.ts:51"}, "properties": {"repobilityId": "a57b0413f92edcc6", "scanner": "scanner-primary", "fingerprint": "9661bf748116c821", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-390a7162c77f369e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/dashboard/calls/[id]/messages/route.ts:48"}, "properties": {"repobilityId": "5d0a5a5b4752b78d", "scanner": "scanner-primary", "fingerprint": "390a7162c77f369e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b7c44ac4fff62c4c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/dashboard/calls/[id]/stages/route.ts:55"}, "properties": {"repobilityId": "22968901e31d08ee", "scanner": "scanner-primary", "fingerprint": "b7c44ac4fff62c4c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-22ecabb20b383df8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/dashboard/costs/route.ts:75"}, "properties": {"repobilityId": "b695963469f59969", "scanner": "scanner-primary", "fingerprint": "22ecabb20b383df8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-13fc4c44c956617b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/dashboard/generate-prompt/route.ts:92"}, "properties": {"repobilityId": "98b1f29cc3ccaf49", "scanner": "scanner-primary", "fingerprint": "13fc4c44c956617b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-974246be18057037", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/dashboard/dial/route.ts:118"}, "properties": {"repobilityId": "33b4db3f2d7d3e5c", "scanner": "scanner-primary", "fingerprint": "974246be18057037", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-661a5068e084074c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/dashboard/analyze-now/route.ts:95"}, "properties": {"repobilityId": "2d65711826a37009", "scanner": "scanner-primary", "fingerprint": "661a5068e084074c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d86d718b1a3cc2ee", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/onboard/places-autocomplete/route.ts:54"}, "properties": {"repobilityId": "478fbdff28c4504a", "scanner": "scanner-primary", "fingerprint": "d86d718b1a3cc2ee", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-493b053c6ef8ee0b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/onboard/places-details/route.ts:59"}, "properties": {"repobilityId": "3a39999915cc540b", "scanner": "scanner-primary", "fingerprint": "493b053c6ef8ee0b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-dce4335d95e6aad2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/onboard/places-lookup/route.ts:62"}, "properties": {"repobilityId": "2c42b95f8fae4a87", "scanner": "scanner-primary", "fingerprint": "dce4335d95e6aad2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-87c68b19347fc41a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/provision/trial/route.ts:233"}, "properties": {"repobilityId": "903070aa19edfa19", "scanner": "scanner-primary", "fingerprint": "87c68b19347fc41a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ccdee7c2e14846cc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/configure-sms-webhooks/route.ts:52"}, "properties": {"repobilityId": "94f726b7c841e3c3", "scanner": "scanner-primary", "fingerprint": "ccdee7c2e14846cc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3175d7de5e53cbbd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/recording/route.ts:11"}, "properties": {"repobilityId": "5ed2b15c20800f07", "scanner": "scanner-primary", "fingerprint": "3175d7de5e53cbbd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7cda523c81239053", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/setup-telegram-webhook/route.ts:20"}, "properties": {"repobilityId": "ae0ce85266227376", "scanner": "scanner-primary", "fingerprint": "7cda523c81239053", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2885a10e7405291e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/send-login-link/route.ts:103"}, "properties": {"repobilityId": "1e5bbdcf0b9ce371", "scanner": "scanner-primary", "fingerprint": "2885a10e7405291e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bbe08a085d148f70", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/numbers/route.ts:72"}, "properties": {"repobilityId": "f705a537b7c6cab0", "scanner": "scanner-primary", "fingerprint": "bbe08a085d148f70", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-06687d4b205d5c29", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/unassign-number/route.ts:81"}, "properties": {"repobilityId": "3b8865318006bc50", "scanner": "scanner-primary", "fingerprint": "06687d4b205d5c29", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b090573473e81cee", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/test-activate/route.ts:260"}, "properties": {"repobilityId": "49de8b7490bad5fa", "scanner": "scanner-primary", "fingerprint": "b090573473e81cee", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-593cc4dd31d6da79", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/transcript/route.ts:15"}, "properties": {"repobilityId": "1ee9e1f0e6de1394", "scanner": "scanner-primary", "fingerprint": "593cc4dd31d6da79", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b7f9f99ef7a9efce", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/cron/analyze-calls/route.ts:101"}, "properties": {"repobilityId": "15f23df0532ed050", "scanner": "scanner-primary", "fingerprint": "b7f9f99ef7a9efce", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-73a51a9b739ed4bc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/cron/trial-expiry/route.ts:326"}, "properties": {"repobilityId": "3c9f4420c6543f6a", "scanner": "scanner-primary", "fingerprint": "73a51a9b739ed4bc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6ef630e15b236d94", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/public/voices/route.ts:27"}, "properties": {"repobilityId": "6d1068b18cbdf048", "scanner": "scanner-primary", "fingerprint": "6ef630e15b236d94", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-baa93c69335e6e0f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/public/voice-preview/[voiceId]/route.ts:6"}, "properties": {"repobilityId": "a4f8f9a43fd622dd", "scanner": "scanner-primary", "fingerprint": "baa93c69335e6e0f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7f0f498434dbdafb", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/advisor/summarize/route.ts:67"}, "properties": {"repobilityId": "62e309146eccdb9a", "scanner": "scanner-primary", "fingerprint": "7f0f498434dbdafb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8e505db1c9609a54", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/voices/page.tsx:329"}, "properties": {"repobilityId": "15c5d040de4915c5", "scanner": "scanner-primary", "fingerprint": "8e505db1c9609a54", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3a94a6e4507fe27b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/dashboard/agent/AgentPageView.tsx:258"}, "properties": {"repobilityId": "15e8ed62e96f6a01", "scanner": "scanner-primary", "fingerprint": "3a94a6e4507fe27b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-748ba08bc9f1ce94", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/admin/learning-bank/LearningBankClient.tsx:449"}, "properties": {"repobilityId": "85e8ce424c5e4924", "scanner": "scanner-primary", "fingerprint": "748ba08bc9f1ce94", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bb05a502fe6bf4d4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/lab/LabView.tsx:201"}, "properties": {"repobilityId": "852b71c858c0d0a9", "scanner": "scanner-primary", "fingerprint": "bb05a502fe6bf4d4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f471833509a5ec48", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/dashboard/setup/SetupView.tsx:165"}, "properties": {"repobilityId": "8341a9d7513aade8", "scanner": "scanner-primary", "fingerprint": "f471833509a5ec48", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b960c55a36e521b6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/knowledge/KnowledgePageView.tsx:453"}, "properties": {"repobilityId": "9ec58e2c3efa681c", "scanner": "scanner-primary", "fingerprint": "b960c55a36e521b6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-29796f36f842ad51", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/outbound/page.tsx:65"}, "properties": {"repobilityId": "ff61cc29c1a90627", "scanner": "scanner-primary", "fingerprint": "29796f36f842ad51", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ca320376d8f87575", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/onboard/page.tsx:114"}, "properties": {"repobilityId": "5170f74aa8d206a1", "scanner": "scanner-primary", "fingerprint": "ca320376d8f87575", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-548de1eaa9e0272d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/onboard/page.tsx:182"}, "properties": {"repobilityId": "f76a2080d74f75c0", "scanner": "scanner-primary", "fingerprint": "548de1eaa9e0272d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f702fe7d626223bf", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/onboard/steps/step1-gbp.tsx:302"}, "properties": {"repobilityId": "a49a80cd5f649a2e", "scanner": "scanner-primary", "fingerprint": "f702fe7d626223bf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b2cd8cb5907c5fed", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/onboard/steps/step-niche.tsx:153"}, "properties": {"repobilityId": "78a1845e83045bec", "scanner": "scanner-primary", "fingerprint": "b2cd8cb5907c5fed", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e7a0aa89d51c92e0", "level": "note", "message": {"text": "Legacy-named symbol `sewer_backup` in src/app/onboard/steps/niches/plumbing.tsx:30"}, "properties": {"repobilityId": "be4447a229f3e00e", "scanner": "scanner-primary", "fingerprint": "e7a0aa89d51c92e0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b57549b947695009", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/onboard/status/page.tsx:120"}, "properties": {"repobilityId": "a57df46195ed41d2", "scanner": "scanner-primary", "fingerprint": "b57549b947695009", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9132105b4a91bbd1", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/knowledge-summary.ts:165"}, "properties": {"repobilityId": "2fc6238d04897b78", "scanner": "scanner-primary", "fingerprint": "9132105b4a91bbd1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-eea76b025f7098d1", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/seed-knowledge.ts:120"}, "properties": {"repobilityId": "f6bea26030f0091a", "scanner": "scanner-primary", "fingerprint": "eea76b025f7098d1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5f65e1864509aa61", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/google-calendar.ts:104"}, "properties": {"repobilityId": "754b6edef7a56c29", "scanner": "scanner-primary", "fingerprint": "5f65e1864509aa61", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e567147228d1bd3d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/google-calendar.ts:18"}, "properties": {"repobilityId": "013a2ca60d8df448", "scanner": "scanner-primary", "fingerprint": "e567147228d1bd3d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-782eac075768fec8", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/completed-notifications.ts:205"}, "properties": {"repobilityId": "a8a1ad43efb7fa89", "scanner": "scanner-primary", "fingerprint": "782eac075768fec8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ec13aadc6b596900", "level": "note", "message": {"text": "Legacy-named symbol `_buildPrompt_legacy` in src/lib/prompt-builder.ts:5"}, "properties": {"repobilityId": "ab03e3ac2f4ff944", "scanner": "scanner-primary", "fingerprint": "ec13aadc6b596900", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b8895776e919a722", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/data-hygiene.ts:200"}, "properties": {"repobilityId": "8684efb3e7c2cdae", "scanner": "scanner-primary", "fingerprint": "b8895776e919a722", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c1381ea4ae3634aa", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/voice-presets.ts:33"}, "properties": {"repobilityId": "a6810bfcb5f5615c", "scanner": "scanner-primary", "fingerprint": "c1381ea4ae3634aa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-055e72d4d3aa35c8", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/admin-scope-guard.ts:4"}, "properties": {"repobilityId": "49e272cb81495b7c", "scanner": "scanner-primary", "fingerprint": "055e72d4d3aa35c8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-30f98601b8585485", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/prompt-helpers.ts:1"}, "properties": {"repobilityId": "29202b21e92c903e", "scanner": "scanner-primary", "fingerprint": "30f98601b8585485", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e770e762e568f3df", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/prompt-validation.ts:49"}, "properties": {"repobilityId": "72c358601364396e", "scanner": "scanner-primary", "fingerprint": "e770e762e568f3df", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4066c89cfc555023", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/prompt-slots.ts:89"}, "properties": {"repobilityId": "1e4849493ca806d8", "scanner": "scanner-primary", "fingerprint": "4066c89cfc555023", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-da6239e601ea62b2", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/openrouter.ts:165"}, "properties": {"repobilityId": "e812b61acb2f90a3", "scanner": "scanner-primary", "fingerprint": "da6239e601ea62b2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f8bb6658f243d8a9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/activate-client.ts:317"}, "properties": {"repobilityId": "52b61956c2478b8d", "scanner": "scanner-primary", "fingerprint": "f8bb6658f243d8a9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4e88c80e6ec5f8d5", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/slot-regenerator.ts:324"}, "properties": {"repobilityId": "1448ce9286282b91", "scanner": "scanner-primary", "fingerprint": "4e88c80e6ec5f8d5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-78978392a3f1c40b", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/lib/admin-scope.ts:3"}, "properties": {"repobilityId": "6f415b5e27b12541", "scanner": "scanner-primary", "fingerprint": "78978392a3f1c40b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7082d895ca16c443", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/settings-schema.ts:74"}, "properties": {"repobilityId": "36d976a0bd8044ca", "scanner": "scanner-primary", "fingerprint": "7082d895ca16c443", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d87e0fed0e218add", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/pricing.ts:222"}, "properties": {"repobilityId": "4eab013df4de9603", "scanner": "scanner-primary", "fingerprint": "d87e0fed0e218add", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-32c0b269ee5558da", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/lib/tool-invocations.ts:9"}, "properties": {"repobilityId": "e8c58dee908968b4", "scanner": "scanner-primary", "fingerprint": "32c0b269ee5558da", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a66ee9a1a5403976", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/stripe-drift.ts:35"}, "properties": {"repobilityId": "8e0c813c19fc1fc6", "scanner": "scanner-primary", "fingerprint": "a66ee9a1a5403976", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-005953564b2b0684", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/dashboard-routes.ts:6"}, "properties": {"repobilityId": "7764661f8f6a5dc9", "scanner": "scanner-primary", "fingerprint": "005953564b2b0684", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c776944f2e9d6c51", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/ultravox.ts:852"}, "properties": {"repobilityId": "8a7bdff9801b628a", "scanner": "scanner-primary", "fingerprint": "c776944f2e9d6c51", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-12e4e5395be2d696", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/ultravox.ts:809"}, "properties": {"repobilityId": "579356f0de7511d4", "scanner": "scanner-primary", "fingerprint": "12e4e5395be2d696", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4f4ba2fae387af3f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/known-vocabulary.ts:22"}, "properties": {"repobilityId": "d8262b978df5ec39", "scanner": "scanner-primary", "fingerprint": "4f4ba2fae387af3f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4f5760fcbb991ff1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/website-scraper.ts:7"}, "properties": {"repobilityId": "d9c3626aafbe9d75", "scanner": "scanner-primary", "fingerprint": "4f5760fcbb991ff1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3c77859003da63f3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/ensure-twilio-provisioned.ts:129"}, "properties": {"repobilityId": "c1bd6ab5028c78c3", "scanner": "scanner-primary", "fingerprint": "3c77859003da63f3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5830a474619323cd", "level": "note", "message": {"text": "Legacy-named symbol `sewage_backup` in src/lib/intake-transform.ts:279"}, "properties": {"repobilityId": "3a4299a4ffae0b87", "scanner": "scanner-primary", "fingerprint": "5830a474619323cd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-8bff20b2b91d804f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/intake-transform.ts:131"}, "properties": {"repobilityId": "5f574b0b4035a3ba", "scanner": "scanner-primary", "fingerprint": "8bff20b2b91d804f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a583eb92d6b99991", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/__tests__/prompt-builder-phase2.test.ts:30"}, "properties": {"repobilityId": "a4d63b27111a4245", "scanner": "scanner-primary", "fingerprint": "a583eb92d6b99991", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-31d24b52c98cb4c9", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/__tests__/google-calendar-slots.test.ts:10"}, "properties": {"repobilityId": "c9ed863f873e1083", "scanner": "scanner-primary", "fingerprint": "31d24b52c98cb4c9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-20510df5017214bc", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/__tests__/field-registry-coverage.test.ts:90"}, "properties": {"repobilityId": "7d01480ff7ca2a96", "scanner": "scanner-primary", "fingerprint": "20510df5017214bc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ec4cbed91cd438e1", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/__tests__/agent-name-provision.test.ts:201"}, "properties": {"repobilityId": "c8a5d8b414818dee", "scanner": "scanner-primary", "fingerprint": "ec4cbed91cd438e1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-20f4ed81165e7c93", "level": "none", "message": {"text": "Commented-code block (17 lines) in src/lib/__tests__/settings-schema.test.ts:160"}, "properties": {"repobilityId": "91289ee0cf89ff39", "scanner": "scanner-primary", "fingerprint": "20f4ed81165e7c93", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d3f15aa73a493f49", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/__tests__/agent-context.test.ts:415"}, "properties": {"repobilityId": "8184c0aab49fa5d8", "scanner": "scanner-primary", "fingerprint": "d3f15aa73a493f49", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5d503fb4afa14780", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/__tests__/business-notes-chain.test.ts:88"}, "properties": {"repobilityId": "aa2de3b4d45b0834", "scanner": "scanner-primary", "fingerprint": "5d503fb4afa14780", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d531e8c36b7f2617", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/__tests__/prompt-knowledge-separation.test.ts:249"}, "properties": {"repobilityId": "27d4042236d54c33", "scanner": "scanner-primary", "fingerprint": "d531e8c36b7f2617", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-59ce01842e22ddd5", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/__tests__/kb-aware-niche.test.ts:102"}, "properties": {"repobilityId": "6cc9e1e3e0113451", "scanner": "scanner-primary", "fingerprint": "59ce01842e22ddd5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e72c41d4ce0ea16c", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/__tests__/call-scenarios.test.ts:852"}, "properties": {"repobilityId": "b3faca82ce25cf6b", "scanner": "scanner-primary", "fingerprint": "e72c41d4ce0ea16c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4b9a85a9ad319011", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/__tests__/prompt-builder-golden.test.ts:550"}, "properties": {"repobilityId": "0791a71b8526c578", "scanner": "scanner-primary", "fingerprint": "4b9a85a9ad319011", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f307b0aabb47724c", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/__tests__/scrape-preview.test.ts:7"}, "properties": {"repobilityId": "fa05b3e392392048", "scanner": "scanner-primary", "fingerprint": "f307b0aabb47724c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fe162134a5b2446b", "level": "none", "message": {"text": "Commented-code block (18 lines) in src/lib/__tests__/slot-ceilings.test.ts:82"}, "properties": {"repobilityId": "1195840807148143", "scanner": "scanner-primary", "fingerprint": "fe162134a5b2446b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b9fa5972ff9263b0", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/__tests__/agent-mode-phase2b.test.ts:224"}, "properties": {"repobilityId": "3880e4fc20430292", "scanner": "scanner-primary", "fingerprint": "b9fa5972ff9263b0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d5874080371bb1ba", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/__tests__/system-prompt-writer-allowlist.test.ts:199"}, "properties": {"repobilityId": "e850b6c80fbc15f7", "scanner": "scanner-primary", "fingerprint": "d5874080371bb1ba", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0258467487fa6cf1", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/__tests__/slot-regenerator.test.ts:173"}, "properties": {"repobilityId": "01da8c5a83e5f281", "scanner": "scanner-primary", "fingerprint": "0258467487fa6cf1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-770f7b20a5052540", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/__tests__/telegram-tier3.test.ts:35"}, "properties": {"repobilityId": "dd0dd348434d93d5", "scanner": "scanner-primary", "fingerprint": "770f7b20a5052540", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0d267471e8184c83", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/telegram/assistant.ts:252"}, "properties": {"repobilityId": "553115a313c810e0", "scanner": "scanner-primary", "fingerprint": "0d267471e8184c83", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d5c02853a3cccf61", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/prompt-config/niche-defaults.ts:785"}, "properties": {"repobilityId": "7f7d9e1bfcdb8ab2", "scanner": "scanner-primary", "fingerprint": "d5c02853a3cccf61", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ef22fd58bfde6f76", "level": "note", "message": {"text": "51 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "3022eac3b673b267", "scanner": "scanner-primary", "fingerprint": "ef22fd58bfde6f76", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}]}]}