{"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-647f19a9a124620e", "name": "TODO/FIXME marker in shipping code \u2014 vite.config.ts:107", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 vite.config.ts:107"}, "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-7c92fdb5b8c1c4c9", "name": "Stray `console.log` in TS/JS \u2014 crear-indices-navegador-simple.js:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 crear-indices-navegador-simple.js: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-e429b9617ae1c0eb", "name": "Stray `console.log` in TS/JS \u2014 EJECUTAR-INDICES-CORREGIDOS-DIRECTO.js:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 EJECUTAR-INDICES-CORREGIDOS-DIRECTO.js: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-270ac885589b4022", "name": "Stray `console.log` in TS/JS \u2014 EJECUTAR-INDICES-CORREGIDOS-FINAL.js:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 EJECUTAR-INDICES-CORREGIDOS-FINAL.js: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-06aebc87d7dff756", "name": "Stray `console.log` in TS/JS \u2014 CREAR-INDICES-CORREGIDOS.js:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 CREAR-INDICES-CORREGIDOS.js: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-8829d32b429027b5", "name": "Stray `console.log` in TS/JS \u2014 server.js:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server.js: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-869c623249ef20f1", "name": "Stray `console.log` in TS/JS \u2014 EJECUTAR-AHORA.js:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 EJECUTAR-AHORA.js: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-42de5176bb6301d4", "name": "Stray `console.log` in TS/JS \u2014 VER-ERRORES-INDICES.js:9", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 VER-ERRORES-INDICES.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-f76d9f44b12e45b9", "name": "Stray `console.log` in TS/JS \u2014 crear-indices-desde-navegador.js:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 crear-indices-desde-navegador.js: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-f53fdba9a34dc1d0", "name": "Stray `console.log` in TS/JS \u2014 tests/k6/risks-page-probe.js:79", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/k6/risks-page-probe.js: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-d73ccd60f39a7d79", "name": "Stray `console.log` in TS/JS \u2014 tests/k6/org-gerencias-probe.js:69", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/k6/org-gerencias-probe.js:69"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2127ba18826bc34b", "name": "Stray `console.log` in TS/JS \u2014 tests/k6/spike-9am.js:80", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/k6/spike-9am.js:80"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4695543238a926f9", "name": "Stray `console.log` in TS/JS \u2014 tests/k6/stress-5-users-gcp.js:769", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/k6/stress-5-users-gcp.js:769"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6af81dcd07c6dae4", "name": "Stray `console.log` in TS/JS \u2014 tests/k6/stress-4-users-intensive.js:572", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/k6/stress-4-users-intensive.js:572"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0e47e5229835b6ee", "name": "Stray `console.log` in TS/JS \u2014 tests/k6/ci-smoke.js:81", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/k6/ci-smoke.js:81"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-251aaccfc82b4b31", "name": "Stray `console.log` in TS/JS \u2014 tests/k6/audit-tests-probe.js:68", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/k6/audit-tests-probe.js: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-d02b526cc9cdfdb3", "name": "Stray `console.log` in TS/JS \u2014 tests/k6/stress-5-users-aws.js:632", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/k6/stress-5-users-aws.js:632"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-991d61bedffca38a", "name": "Stray `console.log` in TS/JS \u2014 tests/k6/stress-6-users.js:506", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/k6/stress-6-users.js:506"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d6121a7fc44c645d", "name": "Stray `console.log` in TS/JS \u2014 tests/k6/page-walkthrough.js:425", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/k6/page-walkthrough.js:425"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-117d78409a0d0c94", "name": "Stray `console.log` in TS/JS \u2014 tests/k6/stress-light.js:1000", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/k6/stress-light.js:1000"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1ca2e3e37f5c4b49", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/page-smoke.spec.ts:66", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/page-smoke.spec.ts:66"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f7f12e5efe3c29bd", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/api-integration.spec.ts:371", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/api-integration.spec.ts:371"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-de2834c1cb466d89", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/tenant-isolation-full.spec.ts:135", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/tenant-isolation-full.spec.ts:135"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-62a6eb2b4cd0e561", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/debug-cc.spec.ts:27", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/debug-cc.spec.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-45d0a20e4f9e7e6d", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/cache-coherence.spec.ts:128", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/cache-coherence.spec.ts:128"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3dbfcc0a3daf49ca", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/debug-login.spec.ts:23", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/debug-login.spec.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-28f7a93204d900d7", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-grafana-push.ts:46", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-grafana-push.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-2b2ed2aeb94fa0fe", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-stability-alert.ts:79", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-stability-alert.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-d6b6d6ecbe47ff5b", "name": "Stray `console.log` in TS/JS \u2014 server/index.ts:86", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/index.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-0021fc5e61da08cb", "name": "Stray `console.log` in TS/JS \u2014 server/seed-200-risks-100-controls-100-events.ts:214", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/seed-200-risks-100-controls-100-events.ts:214"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5e9a9a8242107533", "name": "Stray `console.log` in TS/JS \u2014 server/security.ts:440", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/security.ts:440"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3dd5f24e6bf55d6d", "name": "Stray `console.log` in TS/JS \u2014 server/objectStorage.ts:86", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/objectStorage.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-e5f4526fa9a63a29", "name": "Stray `console.log` in TS/JS \u2014 server/microsoftAuth.ts:31", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/microsoftAuth.ts:31"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dd8220a34f98d305", "name": "Stray `console.log` in TS/JS \u2014 server/replitAuth.ts:245", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/replitAuth.ts:245"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-831ada2fb240e063", "name": "Stray `console.log` in TS/JS \u2014 server/approval-engine.ts:55", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/approval-engine.ts:55"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4d4ab09b38c43907", "name": "Stray `console.log` in TS/JS \u2014 server/ai-assistant-routes.ts:181", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/ai-assistant-routes.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-024a4590ca326278", "name": "Stray `console.log` in TS/JS \u2014 server/email-service.ts:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/email-service.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-40017eea231a0f94", "name": "Stray `console.log` in TS/JS \u2014 server/seed-50-risks.ts:27", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/seed-50-risks.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-9cbc5cc4f137da66", "name": "Stray `console.log` in TS/JS \u2014 server/seed-100-controls.ts:38", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/seed-100-controls.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-7ffa4336d327392d", "name": "TODO/FIXME marker in shipping code \u2014 server/intelligent-recommendation-engine.ts:209", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 server/intelligent-recommendation-engine.ts:209"}, "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-0730304e315a11d0", "name": "Stray `console.log` in TS/JS \u2014 server/intelligent-recommendation-engine.ts:43", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/intelligent-recommendation-engine.ts:43"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3da406f2b02f15c0", "name": "TODO/FIXME marker in shipping code \u2014 server/notification-service.ts:539", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 server/notification-service.ts:539"}, "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-ce29721f07dc8e87", "name": "Stray `console.log` in TS/JS \u2014 server/notification-service.ts:117", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/notification-service.ts:117"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2afe6b0b02822645", "name": "Stray `console.log` in TS/JS \u2014 server/pattern-recognition-engine.ts:22", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/pattern-recognition-engine.ts:22"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3432210b69c7a40f", "name": "Stray `console.log` in TS/JS \u2014 server/auth-cache.ts:121", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/auth-cache.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-6bde9b7d2e04600b", "name": "Stray `console.log` in TS/JS \u2014 server/ai-cache.ts:72", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/ai-cache.ts:72"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3894c25f4ddd8b28", "name": "Stray `console.log` in TS/JS \u2014 server/approval-system-seeder.ts:30", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/approval-system-seeder.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-a397aa6d98a9903b", "name": "Stray `console.log` in TS/JS \u2014 server/sentry.ts:112", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/sentry.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-36cc151ba174c507", "name": "Stray `console.log` in TS/JS \u2014 server/deadline-monitor-service.ts:34", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/deadline-monitor-service.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-44fcfb40d928e107", "name": "Stray `console.log` in TS/JS \u2014 server/samlAuth.ts:274", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/samlAuth.ts:274"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ae46266c416d01d", "name": "Stray `console.log` in TS/JS \u2014 server/procedure-recommendation-engine.ts:24", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/procedure-recommendation-engine.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-2a9d26c5bda00aa0", "name": "Stray `console.log` in TS/JS \u2014 server/notification-scheduler.ts:53", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/notification-scheduler.ts:53"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b8b2ebed508e08f0", "name": "Stray `console.log` in TS/JS \u2014 server/revalidation-routes.ts:123", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/revalidation-routes.ts:123"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-293ca83d94f3f336", "name": "Stray `console.log` in TS/JS \u2014 server/audit-test-generator.ts:31", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/audit-test-generator.ts:31"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f8cda65ddef05bdc", "name": "Stray `console.log` in TS/JS \u2014 server/escalation-management.ts:48", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/escalation-management.ts:48"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-eb6c4ed63c561121", "name": "Stray `console.log` in TS/JS \u2014 server/approval-routes.ts:63", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/approval-routes.ts:63"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e3ad8d1da06a63be", "name": "Stray `console.log` in TS/JS \u2014 server/ai-grc-routes.ts:1033", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/ai-grc-routes.ts:1033"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-be10e30d223cfe47", "name": "Stray `console.log` in TS/JS \u2014 server/timeline-intelligence-service.ts:24", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/timeline-intelligence-service.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-da7e8f31d1b2529b", "name": "Stray `console.log` in TS/JS \u2014 server/auditor-assignment-intelligence.ts:24", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/auditor-assignment-intelligence.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-57854526802b224a", "name": "Stray `console.log` in TS/JS \u2014 server/seed-data.ts:26", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/seed-data.ts:26"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-339c1daa349e3da8", "name": "TODO/FIXME marker in shipping code \u2014 server/analytics-service.ts:196", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 server/analytics-service.ts:196"}, "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-49ceb4bf6393f3e1", "name": "Stray `console.log` in TS/JS \u2014 server/analytics-service.ts:44", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/analytics-service.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-8a80dc2efd74c4a8", "name": "TODO/FIXME marker in shipping code \u2014 server/export-service.ts:1009", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 server/export-service.ts:1009"}, "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-8d622c1555fc9aef", "name": "Stray `console.log` in TS/JS \u2014 server/export-service.ts:1010", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/export-service.ts:1010"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-92f88be2100d75bc", "name": "Stray `console.log` in TS/JS \u2014 server/routes-admin-indices.ts:149", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/routes-admin-indices.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-e0fc1498b92bcf28", "name": "Stray `console.log` in TS/JS \u2014 server/db-health-check.ts:101", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/db-health-check.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-93ffb84f6e2e5b5e", "name": "Stray `console.log` in TS/JS \u2014 server/template-seeding-service.ts:22", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/template-seeding-service.ts:22"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0d32382f4eaafc25", "name": "Stray `console.log` in TS/JS \u2014 server/db-optimize.ts:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/db-optimize.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-649eec96f48f31fe", "name": "Stray `console.log` in TS/JS \u2014 server/cache-helpers.ts:51", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/cache-helpers.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-57a9c0738e7e6901", "name": "Stray `console.log` in TS/JS \u2014 server/approval-analytics.ts:34", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/approval-analytics.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-7a5bd0d9d1de62bb", "name": "Stray `console.log` in TS/JS \u2014 server/seed-50-risk-events.ts:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/seed-50-risk-events.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-cd0aaf10b0d17886", "name": "Stray `console.log` in TS/JS \u2014 server/db.ts:70", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/db.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-ed95fd9d610cc94f", "name": "TODO/FIXME marker in shipping code \u2014 server/analytics-routes.ts:371", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 server/analytics-routes.ts:371"}, "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-748dc98a276b3c54", "name": "Stray `console.log` in TS/JS \u2014 server/ml-model-manager.ts:22", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/ml-model-manager.ts:22"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ec0b2a65c9cbdc7f", "name": "Stray `console.log` in TS/JS \u2014 server/test-approval-workflows.ts:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/test-approval-workflows.ts:20"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-514fce932986fed9", "name": "Stray `console.log` in TS/JS \u2014 server/approval-storage.ts:604", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/approval-storage.ts:604"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-daaef56f0c862182", "name": "Stray `console.log` in TS/JS \u2014 server/static.ts:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/static.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-a24be6e2cd19ed4b", "name": "Stray `console.log` in TS/JS \u2014 server/openai-service.ts:47", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/openai-service.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-fc0d2bb35e11ff9d", "name": "Stray `console.log` in TS/JS \u2014 server/seed-porter-value-chain.ts:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/seed-porter-value-chain.ts:11"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7f5ba85a28e013cd", "name": "Stray `console.log` in TS/JS \u2014 server/jobs/refresh-risk-events-list-view.ts:37", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/jobs/refresh-risk-events-list-view.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-76abcb15b5047cbc", "name": "Stray `console.log` in TS/JS \u2014 server/jobs/refresh-controls-list-view.ts:39", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/jobs/refresh-controls-list-view.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-c81846066e8890d5", "name": "Stray `console.log` in TS/JS \u2014 server/jobs/materialized-views-health.ts:469", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/jobs/materialized-views-health.ts:469"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-850f608885b3f570", "name": "Stray `console.log` in TS/JS \u2014 server/jobs/refresh-action-plans-list-view.ts:46", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/jobs/refresh-action-plans-list-view.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-611cfc74ac5ba15a", "name": "Stray `console.log` in TS/JS \u2014 server/jobs/refresh-risk-list-view.ts:43", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/jobs/refresh-risk-list-view.ts:43"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3e2443a411971877", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/set-admin-password.ts:29", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/set-admin-password.ts:29"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-76ee3993bbda28cf", "name": "Stray `console.log` in TS/JS \u2014 server/utils/secret-manager.ts:19", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/utils/secret-manager.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-882c32c321887050", "name": "Stray `console.log` in TS/JS \u2014 server/performance/index.ts:24", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/performance/index.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-1a70af9ed4426654", "name": "Stray `console.log` in TS/JS \u2014 server/performance/compression.ts:93", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/performance/compression.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-1f7b4d1f79adb24a", "name": "Stray `console.log` in TS/JS \u2014 server/performance/pool-metrics.ts:58", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/performance/pool-metrics.ts:58"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d713b36549dc3412", "name": "Stray `console.log` in TS/JS \u2014 server/middleware/system-metrics.ts:78", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/middleware/system-metrics.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-660194dc5653ec1d", "name": "Stray `console.log` in TS/JS \u2014 server/services/fileStreaming.ts:33", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/services/fileStreaming.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-4b03f8c162257b3e", "name": "Stray `console.log` in TS/JS \u2014 server/services/EmailServiceFactory.ts:76", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/services/EmailServiceFactory.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-05a491645585ece5", "name": "Stray `console.log` in TS/JS \u2014 server/services/MailgunEmailService.ts:41", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/services/MailgunEmailService.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-8c3893e8544f1420", "name": "Stray `console.log` in TS/JS \u2014 server/services/reports-page-service.ts:217", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/services/reports-page-service.ts:217"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3c20cfe98321040f", "name": "Stray `console.log` in TS/JS \u2014 server/services/SMTPEmailService.ts:42", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/services/SMTPEmailService.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-ecd6ef48d5e91355", "name": "Stray `console.log` in TS/JS \u2014 server/services/two-tier-cache.ts:407", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/services/two-tier-cache.ts:407"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cd188d49fccc9e96", "name": "Stray `console.log` in TS/JS \u2014 server/services/cache-core.ts:117", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/services/cache-core.ts:117"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bfcf738b58838d1d", "name": "Stray `console.log` in TS/JS \u2014 server/services/processes-page-service.ts:105", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/services/processes-page-service.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-df11bfa44b50befc", "name": "Stray `console.log` in TS/JS \u2014 server/services/local-cache.ts:207", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/services/local-cache.ts:207"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-90242a5583f66b2d", "name": "Stray `console.log` in TS/JS \u2014 server/services/import-service.ts:621", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/services/import-service.ts:621"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c43590044685fe9c", "name": "Stray `console.log` in TS/JS \u2014 server/services/risks-page-service.ts:603", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/services/risks-page-service.ts:603"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-65627124c16a980e", "name": "TODO/FIXME marker in shipping code \u2014 server/services/queue.ts:210", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 server/services/queue.ts:210"}, "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-80bc80ad1fe7a61f", "name": "Stray `console.log` in TS/JS \u2014 server/services/queue.ts:30", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/services/queue.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-9de0ba742fb41d98", "name": "Stray `console.log` in TS/JS \u2014 server/services/unified-cache-config.ts:220", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/services/unified-cache-config.ts:220"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0ff3ef49e9f15fd2", "name": "Stray `console.log` in TS/JS \u2014 server/services/unified-prewarm-service.ts:2215", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/services/unified-prewarm-service.ts:2215"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-be2744ccda5d3ea2", "name": "Stray `console.log` in TS/JS \u2014 server/services/redis.ts:379", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/services/redis.ts:379"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cda3c9e23d1f0c2f", "name": "Stray `console.log` in TS/JS \u2014 client/src/sentry.ts:125", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 client/src/sentry.ts:125"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-12dbdda2e5802ac3", "name": "React Flow <Controls> without dark theming \u2014 client/src/App.tsx:362", "shortDescription": {"text": "React Flow <Controls> without dark theming \u2014 client/src/App.tsx:362"}, "fullDescription": {"text": "`<Controls>` ships with white buttons. Override `.react-flow__controls` and `.react-flow__controls-button` in your stylesheet or pass a styled wrapper.\n\nWhy: P1 in CHECKLIST.md \u2014 vendor defaults bleed light through.\nRule id: fq.controls.no-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1b5c5d19b3ce995c", "name": "Stray `console.log` in TS/JS \u2014 client/src/App.tsx:244", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 client/src/App.tsx:244"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ad88a88264d37ddd", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/ManageControlRisksContent.tsx:336", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/ManageControlRisksContent.tsx:336"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f7421803806ea11e", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/RisksByProcess.tsx:190", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/RisksByProcess.tsx:190"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1cd06502704afa5a", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/ViewRiskActionPlansDialog.tsx:438", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/ViewRiskActionPlansDialog.tsx:438"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-223635e673b42ec1", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/command-palette.tsx:309", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/command-palette.tsx:309"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f824b41acffba7fa", "name": "Stray `console.log` in TS/JS \u2014 client/src/components/PrefetchLink.tsx:125", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 client/src/components/PrefetchLink.tsx:125"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-963234dba12dd861", "name": "React Flow <MiniMap> without dark background \u2014 client/src/components/GerenciasOrganigrama.tsx:372", "shortDescription": {"text": "React Flow <MiniMap> without dark background \u2014 client/src/components/GerenciasOrganigrama.tsx:372"}, "fullDescription": {"text": "A bare <MiniMap> renders with the vendor's white default in dark themes. Wrap the canvas in a class that overrides `.react-flow__minimap` background, or pass an explicit `style`/`maskColor`/`bgColor`.\n\nWhy: P1 in CHECKLIST.md \u2014 vendor defaults bleed light through.\nRule id: fq.minimap.no-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fd295b29f91d8679", "name": "React Flow <Controls> without dark theming \u2014 client/src/components/GerenciasOrganigrama.tsx:371", "shortDescription": {"text": "React Flow <Controls> without dark theming \u2014 client/src/components/GerenciasOrganigrama.tsx:371"}, "fullDescription": {"text": "`<Controls>` ships with white buttons. Override `.react-flow__controls` and `.react-flow__controls-button` in your stylesheet or pass a styled wrapper.\n\nWhy: P1 in CHECKLIST.md \u2014 vendor defaults bleed light through.\nRule id: fq.controls.no-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-85c18b268eb98fba", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/GerenciasOrganigrama.tsx:135", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/GerenciasOrganigrama.tsx:135"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-66856d8be1bedd8c", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/ManageRiskControlsDialog.tsx:525", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/ManageRiskControlsDialog.tsx:525"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-567a886adf1a4f1e", "name": "Stray `console.log` in TS/JS \u2014 client/src/components/ManageRiskControlsDialog.tsx:134", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 client/src/components/ManageRiskControlsDialog.tsx: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-a0348b68737126d1", "name": "React Flow <Controls> without dark theming \u2014 client/src/components/RiskRelationshipMap.tsx:469", "shortDescription": {"text": "React Flow <Controls> without dark theming \u2014 client/src/components/RiskRelationshipMap.tsx:469"}, "fullDescription": {"text": "`<Controls>` ships with white buttons. Override `.react-flow__controls` and `.react-flow__controls-button` in your stylesheet or pass a styled wrapper.\n\nWhy: P1 in CHECKLIST.md \u2014 vendor defaults bleed light through.\nRule id: fq.controls.no-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5d030199ed090923", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/RiskRelationshipMap.tsx:42", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/RiskRelationshipMap.tsx:42"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-505ace4484fd95e6", "name": "Stray `console.log` in TS/JS \u2014 client/src/components/BootstrapInitializer.tsx:74", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 client/src/components/BootstrapInitializer.tsx: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-50ef7189dc403832", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/RisksByOwner.tsx:152", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/RisksByOwner.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-02d54341ff8d5a95", "name": "Stray `console.log` in TS/JS \u2014 client/src/components/ai-assistant-dialog.tsx:132", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 client/src/components/ai-assistant-dialog.tsx:132"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0144ec5423519084", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/ManageRiskEventsContent.tsx:238", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/ManageRiskEventsContent.tsx:238"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-87ceaf7052741078", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/audit-test-workspace/TestHeader.tsx:193", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/audit-test-workspace/TestHeader.tsx:193"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-acd3d7713938e020", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/audit-test-workspace/SupervisorReview.tsx:243", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/audit-test-workspace/SupervisorReview.tsx:243"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1b6614a81baccd20", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/audit-test-workspace/QuickWorkLog.tsx:322", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/audit-test-workspace/QuickWorkLog.tsx:322"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fd684d63bfe5300e", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/audit-test-workspace/ContextualEvidence.tsx:3", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/audit-test-workspace/ContextualEvidence.tsx:359"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-df18fe5a13672d6b", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/risk-matrix/criticality-gap-matrix.tsx:70", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/risk-matrix/criticality-gap-matrix.tsx:70"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a81edcb288dd085a", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/probability/ProbabilityHeatMap.tsx:210", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/probability/ProbabilityHeatMap.tsx:210"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9af5e3a45e9530d8", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/dashboard-widgets/DeadlineCalendar.tsx:127", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/dashboard-widgets/DeadlineCalendar.tsx:127"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-38ae4b6cd59c5fac", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/dashboard-widgets/TeamPerformanceTable.tsx:12", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/dashboard-widgets/TeamPerformanceTable.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-c3e43ffeb28e9a04", "name": "Stray `console.log` in TS/JS \u2014 client/src/components/forms/process-owner-form-v2.tsx:75", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 client/src/components/forms/process-owner-form-v2.tsx:75"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d996d6e33be99e4c", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/forms/action-plan-form.tsx:682", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/forms/action-plan-form.tsx:682"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ac9d7e2ed3c6eaad", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/forms/risk-event-form.tsx:1210", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/forms/risk-event-form.tsx:1210"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8a3c60baf5aa02d5", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/forms/compliance-document-form.tsx:548", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/forms/compliance-document-form.tsx:548"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-93904d9d2ea44475", "name": "Stray `console.log` in TS/JS \u2014 client/src/components/forms/compliance-document-form.tsx:243", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 client/src/components/forms/compliance-document-form.tsx:243"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cd84947b33b9f529", "name": "TODO/FIXME marker in shipping code \u2014 client/src/components/forms/regulation-form.tsx:827", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 client/src/components/forms/regulation-form.tsx:827"}, "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-84e1302f1b7e2a70", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/layout/sidebar.tsx:963", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/layout/sidebar.tsx:963"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b71518ae56c9f3ba", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/audit-generation/RiskSelectionPanel.tsx:388", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/audit-generation/RiskSelectionPanel.tsx:388"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-25461b5c2a850264", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/audit-sections/AuditDashboardSection.tsx:259", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/audit-sections/AuditDashboardSection.tsx:259"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a32d523dc3595aa9", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/audit-sections/AuditWorkProgramSection.tsx:60", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/audit-sections/AuditWorkProgramSection.tsx:606"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a9b6943ab616f957", "name": "Stray `console.log` in TS/JS \u2014 client/src/components/audit-sections/AITestSuggestionDialog.tsx:68", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 client/src/components/audit-sections/AITestSuggestionDialog.tsx: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-6b082b7797390d30", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/ai/DuplicateCheckButton.tsx:152", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/ai/DuplicateCheckButton.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-3ef50e63bdd24e15", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/ai/ControlSuggestionButton.tsx:155", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/ai/ControlSuggestionButton.tsx:155"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-03eb7fd80fa0c120", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/ui/combobox.tsx:83", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/ui/combobox.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-f8ee19347be23834", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/audit-detail.tsx:207", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/audit-detail.tsx:207"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a4eacb776b76d1e2", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/SupervisorDashboard.tsx:491", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/SupervisorDashboard.tsx:491"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-549d04ecd650c7f1", "name": "Stray `console.log` in TS/JS \u2014 client/src/pages/login.tsx:112", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 client/src/pages/login.tsx: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-b0832c3968ac6586", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/audits.tsx:84", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/audits.tsx:84"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d2f81ec094b17d6a", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/team-members.tsx:423", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/team-members.tsx:423"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c98ef86327f37a7b", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/processes.tsx:1570", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/processes.tsx:1570"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-206fc6002e0ae00b", "name": "Stray `console.log` in TS/JS \u2014 client/src/pages/audit-plan-wizard.tsx:720", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 client/src/pages/audit-plan-wizard.tsx:720"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-657ac0124b8bc7a9", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/risks.tsx:107", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/risks.tsx:107"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-447db746b6174414", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/compliance-audits.tsx:773", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/compliance-audits.tsx:773"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2716ac9f5c843823", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/import.tsx:497", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/import.tsx:497"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5063c725fce3180a", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/regulations.tsx:453", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/regulations.tsx:453"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-960b6933d7db48e5", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/action-plans.tsx:1214", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/action-plans.tsx:1214"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6874df810f6ecba1", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/compliance-tests.tsx:230", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/compliance-tests.tsx:230"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-614f8fe35f0e162b", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/audit-findings.tsx:541", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/audit-findings.tsx:541"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-32d2056dad11408e", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/risk-matrix.tsx:110", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/risk-matrix.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-26a2af8e73d9de8c", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/ApprovalManagement.tsx:439", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/ApprovalManagement.tsx:439"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-753afca20ea4fdb3", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/trash.tsx:273", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/trash.tsx:273"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-112fb4cd192f54dd", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/working-papers.tsx:414", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/working-papers.tsx:414"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-020c46024bf8f108", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/continuous-audit.tsx:586", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/continuous-audit.tsx:586"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-01e3e134e612caeb", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/support.tsx:396", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/support.tsx:396"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c0e0ec6f4fa06299", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/organization/processes.tsx:2075", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/organization/processes.tsx:2075"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0daf483d5f92e2a2", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/organization/gerencias.tsx:594", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/organization/gerencias.tsx:594"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-42513b3f25425a9a", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/config/probability-criteria.tsx:162", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/config/probability-criteria.tsx:162"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a9c3dddf8a9d386e", "name": "Stray `console.log` in TS/JS \u2014 client/src/lib/queryClient.ts:167", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 client/src/lib/queryClient.ts:167"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5cfde7a896532a23", "name": "Privileged port 23 in use", "shortDescription": {"text": "Privileged port 23 in use"}, "fullDescription": {"text": "Port 23 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-961ce98fa373ba6a", "name": "Privileged port 13 in use", "shortDescription": {"text": "Privileged port 13 in use"}, "fullDescription": {"text": "Port 13 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-6f2c014dd7c164b1", "name": "Privileged port 14 in use", "shortDescription": {"text": "Privileged port 14 in use"}, "fullDescription": {"text": "Port 14 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-ab89b9f966d2b619", "name": "Privileged port 587 in use", "shortDescription": {"text": "Privileged port 587 in use"}, "fullDescription": {"text": "Port 587 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-3fad4f283eec7d6b", "name": "Docker base image is tag-pinned but not digest-pinned: node:24-alpine", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: node:24-alpine"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aa5acaa49eb8315b", "name": "Containers defined but no K8s/orchestration manifest found", "shortDescription": {"text": "Containers defined but no K8s/orchestration manifest found"}, "fullDescription": {"text": "Repo has Dockerfiles/compose but no Kubernetes/Nomad manifests. If the target deployment is K8s, the manifests may live in a separate ops repo."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ec8152a4f580ded5", "name": "Insecure pattern 'cors_wildcard' in gcp/cloud-function-spa/index.js:13", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in gcp/cloud-function-spa/index.js:13"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-53751e5107cfc222", "name": "Insecure pattern 'node_child_process' in scripts/write-version.mjs:8", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/write-version.mjs:8"}, "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-6372ef2f7d288b20", "name": "Insecure pattern 'cors_wildcard' in server/validation/output-sanitizer.ts:242", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in server/validation/output-sanitizer.ts:242"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a6fb1fb945573955", "name": "Insecure pattern 'local_storage_auth_token' in client/src/hooks/useAuth.ts:45", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in client/src/hooks/useAuth.ts:45"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fb3c3872493c0753", "name": "Insecure pattern 'direct_innerhtml_assignment' in client/src/components/charts/EnhancedBarChart.tsx:165", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in client/src/components/charts/EnhancedBarChart.tsx:165"}, "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-66dfe05f836132c3", "name": "Insecure pattern 'direct_innerhtml_assignment' in client/src/components/charts/ComboChart.tsx:103", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in client/src/components/charts/ComboChart.tsx:103"}, "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-17bdbe37ccd45a72", "name": "Insecure pattern 'direct_innerhtml_assignment' in client/src/components/charts/EnhancedLineChart.tsx:147", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in client/src/components/charts/EnhancedLineChart.tsx:147"}, "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-6ff647190198f43f", "name": "Insecure pattern 'direct_innerhtml_assignment' in client/src/components/charts/HeatMap.tsx:87", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in client/src/components/charts/HeatMap.tsx:87"}, "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-3bc15aecc4d958c8", "name": "Possible secret in client/src/lib/validation.ts", "shortDescription": {"text": "Possible secret in client/src/lib/validation.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-82f3513556bc5a43", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "google-github-actions/auth@v2 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-935286fc98e951cb", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5e4a8f656db84d5e", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@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-d5493db326da5ad8", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-72b0b6092668566e", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@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-e271ad7e75727bdf", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2cd776919da937b0", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "zaproxy/action-baseline@v0.14.0 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-09c9ad8c4439f65b", "name": "GitHub Action tracks a moving branch", "shortDescription": {"text": "GitHub Action tracks a moving branch"}, "fullDescription": {"text": "projectdiscovery/nuclei-action@main 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": "high", "confidence": 1.0}}, {"id": "scanner-21aa0c39a7c1ca23", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "github/codeql-action/upload-sarif@v3 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-584e59c5690bf12d", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@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-210e77918bd3897c", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b62e6e0528bf9b6d", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@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-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-af2f5a045326d33a", "name": "Very large file: tests/k6/stress-5-users-gcp.js (2696 lines)", "shortDescription": {"text": "Very large file: tests/k6/stress-5-users-gcp.js (2696 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-f365560c011c36f4", "name": "Very large file: tests/k6/stress-4-users-intensive.js (1864 lines)", "shortDescription": {"text": "Very large file: tests/k6/stress-4-users-intensive.js (1864 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-43222e444f44ec5a", "name": "Very large file: tests/k6/stress-5-users-aws.js (2104 lines)", "shortDescription": {"text": "Very large file: tests/k6/stress-5-users-aws.js (2104 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-8c9f6f471ddee037", "name": "Very large file: tests/k6/stress-light.js (1129 lines)", "shortDescription": {"text": "Very large file: tests/k6/stress-light.js (1129 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-6779d162b52984ca", "name": "Very large file: server/replitAuth.ts (1345 lines)", "shortDescription": {"text": "Very large file: server/replitAuth.ts (1345 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-0f57803f0769a478", "name": "Very large file: server/ai-assistant-routes.ts (1222 lines)", "shortDescription": {"text": "Very large file: server/ai-assistant-routes.ts (1222 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-c327b82b933e6e54", "name": "Very large file: server/notification-service.ts (1611 lines)", "shortDescription": {"text": "Very large file: server/notification-service.ts (1611 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-e1a44c8519ddfc57", "name": "Very large file: server/cache-helpers.ts (4279 lines)", "shortDescription": {"text": "Very large file: server/cache-helpers.ts (4279 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-0304e89644c853d6", "name": "Very large file: server/db.ts (1683 lines)", "shortDescription": {"text": "Very large file: server/db.ts (1683 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-e3c39e0464353ad3", "name": "Very large file: server/services/import-service.ts (4227 lines)", "shortDescription": {"text": "Very large file: server/services/import-service.ts (4227 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-082dc198e92d1a2d", "name": "Very large file: server/services/unified-prewarm-service.ts (2530 lines)", "shortDescription": {"text": "Very large file: server/services/unified-prewarm-service.ts (2530 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-b90c2531cc965af3", "name": "Very large file: client/src/components/forms/risk-form.tsx (2754 lines)", "shortDescription": {"text": "Very large file: client/src/components/forms/risk-form.tsx (2754 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-7b230e2f2d06b294", "name": "Very large file: client/src/components/forms/risk-event-form.tsx (1621 lines)", "shortDescription": {"text": "Very large file: client/src/components/forms/risk-event-form.tsx (1621 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-2e728b54454d6675", "name": "Very large file: client/src/components/forms/control-form.tsx (1392 lines)", "shortDescription": {"text": "Very large file: client/src/components/forms/control-form.tsx (1392 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-5a573ad38406945b", "name": "Very large file: client/src/components/layout/header.tsx (4420 lines)", "shortDescription": {"text": "Very large file: client/src/components/layout/header.tsx (4420 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-957669255e27f28b", "name": "Very large file: client/src/pages/risk-events.tsx (1636 lines)", "shortDescription": {"text": "Very large file: client/src/pages/risk-events.tsx (1636 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-9858010eb0965085", "name": "Very large file: client/src/pages/processes.tsx (1732 lines)", "shortDescription": {"text": "Very large file: client/src/pages/processes.tsx (1732 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-04f21f52742af50e", "name": "Very large file: client/src/pages/audit-plan-wizard.tsx (2365 lines)", "shortDescription": {"text": "Very large file: client/src/pages/audit-plan-wizard.tsx (2365 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-46c5497bb505a845", "name": "Very large file: client/src/pages/risks.tsx (1590 lines)", "shortDescription": {"text": "Very large file: client/src/pages/risks.tsx (1590 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-f922301e0f939c6b", "name": "Very large file: client/src/pages/manual.tsx (1467 lines)", "shortDescription": {"text": "Very large file: client/src/pages/manual.tsx (1467 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-b01b3065b81b67d5", "name": "Very large file: client/src/pages/regulations.tsx (1247 lines)", "shortDescription": {"text": "Very large file: client/src/pages/regulations.tsx (1247 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-41d80e6ade7d42a6", "name": "Very large file: client/src/pages/action-plans.tsx (2006 lines)", "shortDescription": {"text": "Very large file: client/src/pages/action-plans.tsx (2006 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-5361d8ac0d5a0d17", "name": "Very large file: client/src/pages/audit-findings.tsx (1206 lines)", "shortDescription": {"text": "Very large file: client/src/pages/audit-findings.tsx (1206 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-514450df42295dbb", "name": "Very large file: client/src/pages/controls.tsx (1922 lines)", "shortDescription": {"text": "Very large file: client/src/pages/controls.tsx (1922 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-0d8c7c48301d014f", "name": "Very large file: client/src/pages/risk-matrix.tsx (1162 lines)", "shortDescription": {"text": "Very large file: client/src/pages/risk-matrix.tsx (1162 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-2ca4ab3eba32fd70", "name": "Very large file: client/src/pages/continuous-audit.tsx (1573 lines)", "shortDescription": {"text": "Very large file: client/src/pages/continuous-audit.tsx (1573 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-4aa692a5671d8f9b", "name": "Very large file: client/src/pages/organization/processes.tsx (2377 lines)", "shortDescription": {"text": "Very large file: client/src/pages/organization/processes.tsx (2377 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-ad355e48b651c8d3", "name": "Very large file: shared/schema.ts (9022 lines)", "shortDescription": {"text": "Very large file: shared/schema.ts (9022 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-110cca7e388cee56", "name": "Very large file: migrations/schema.ts (3051 lines)", "shortDescription": {"text": "Very large file: migrations/schema.ts (3051 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": "66 tests / 555 src (ratio 0.12)."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aba2095ac97be57e", "name": "50 TODO/FIXME markers", "shortDescription": {"text": "50 TODO/FIXME markers"}, "fullDescription": {"text": "High count of TODO/FIXME/HACK markers \u2014 track them as issues so they're not forgotten."}, "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-ab6cd572e2781cf2", "name": "Node manifest has dependencies but no lockfile: gcp/cloud-function-spa/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: gcp/cloud-function-spa/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 1225 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 693 placeholder/mock markers across 146 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9d79c4077342a7d0", "name": "Runtime service client appears to use placeholder configuration", "shortDescription": {"text": "Runtime service client appears to use placeholder configuration"}, "fullDescription": {"text": "A runtime source file appears to wire Supabase/Firebase/AI/payment-style clients to placeholder URLs, keys, or fallback values. In the Fable corpus this often means the UI/API shape is present while the backend service is not actually configured."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-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-2c5f98b152cddb6d", "name": "Agent authority lacks a verifier contract: .claude/launch.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/launch.json"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8c4335a09ce5d8f9", "name": "Commented-code block (5 lines) in vite.config.ts:27", "shortDescription": {"text": "Commented-code block (5 lines) in vite.config.ts:27"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4bf8b5d772439bcb", "name": "`fetch()` without try/.catch or AbortSignal \u2014 crear-indices-navegador-simple.js:4", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 crear-indices-navegador-simple.js:4"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cf41832756856688", "name": "`fetch()` without try/.catch or AbortSignal \u2014 EJECUTAR-INDICES-CORREGIDOS-FINAL.js:44", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 EJECUTAR-INDICES-CORREGIDOS-FINAL.js: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-23c3f290d015b07c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 CREAR-INDICES-CORREGIDOS.js:45", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 CREAR-INDICES-CORREGIDOS.js: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-e2705c516b815d8e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 EJECUTAR-AHORA.js:47", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 EJECUTAR-AHORA.js:47"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2485abdce0aef7b9", "name": "Commented-code block (9 lines) in ecosystem.config.cjs:1", "shortDescription": {"text": "Commented-code block (9 lines) in ecosystem.config.cjs: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-683d126f1be05fef", "name": "`fetch()` without try/.catch or AbortSignal \u2014 VER-ERRORES-INDICES.js:47", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 VER-ERRORES-INDICES.js:47"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-80289ee160855063", "name": "Commented-code block (6 lines) in tests/unit/chaos-resilience.test.ts:74", "shortDescription": {"text": "Commented-code block (6 lines) in tests/unit/chaos-resilience.test.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-42329728a29f86f4", "name": "Commented-code block (5 lines) in tests/unit/report-accuracy.test.ts:286", "shortDescription": {"text": "Commented-code block (5 lines) in tests/unit/report-accuracy.test.ts:286"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9f43b63d9df5d36c", "name": "Commented-code block (5 lines) in tests/unit/residual-risk.test.ts:312", "shortDescription": {"text": "Commented-code block (5 lines) in tests/unit/residual-risk.test.ts:312"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-638899f9b1369eb0", "name": "Commented-code block (5 lines) in tests/unit/backup-restore.test.ts:92", "shortDescription": {"text": "Commented-code block (5 lines) in tests/unit/backup-restore.test.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-bd318f8b87b1d818", "name": "Commented-code block (6 lines) in tests/unit/zero-downtime-deploy.test.ts:129", "shortDescription": {"text": "Commented-code block (6 lines) in tests/unit/zero-downtime-deploy.test.ts:129"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f8fcbb0ed21087c7", "name": "Commented-code block (5 lines) in tests/unit/cascading-deletes.test.ts:116", "shortDescription": {"text": "Commented-code block (5 lines) in tests/unit/cascading-deletes.test.ts:116"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1db89c179491cd11", "name": "Commented-code block (5 lines) in tests/k6/session-token-test.js:146", "shortDescription": {"text": "Commented-code block (5 lines) in tests/k6/session-token-test.js:146"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ced5811571792dfb", "name": "Commented-code block (5 lines) in tests/k6/stress-5-users-gcp.js:2138", "shortDescription": {"text": "Commented-code block (5 lines) in tests/k6/stress-5-users-gcp.js:2138"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c7dcbc6ce671e457", "name": "Commented-code block (7 lines) in tests/k6/capacity-finding.js:235", "shortDescription": {"text": "Commented-code block (7 lines) in tests/k6/capacity-finding.js:235"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2914815b982be922", "name": "Commented-code block (5 lines) in tests/e2e/api-integration.spec.ts:597", "shortDescription": {"text": "Commented-code block (5 lines) in tests/e2e/api-integration.spec.ts:597"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9e86d97c3d213a04", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-grafana-push.ts:53", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-grafana-push.ts:53"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e5ea9395ba03442f", "name": "Commented-code block (5 lines) in scripts/init-admin.cjs:1", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/init-admin.cjs: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-646c1aa03e4c05da", "name": "Commented-code block (10 lines) in server/index.ts:471", "shortDescription": {"text": "Commented-code block (10 lines) in server/index.ts:471"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-628c55f6c15a7873", "name": "Commented-code block (10 lines) in server/security.ts:307", "shortDescription": {"text": "Commented-code block (10 lines) in server/security.ts:307"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ded8a4d235b230f0", "name": "Legacy-named symbol `buildActionPlanAlertsFromLegacy` in server/action-plan-alerts-config.ts:6", "shortDescription": {"text": "Legacy-named symbol `buildActionPlanAlertsFromLegacy` in server/action-plan-alerts-config.ts:6"}, "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-80f1f680ab424746", "name": "Commented-code block (5 lines) in server/objectStorage.ts:16", "shortDescription": {"text": "Commented-code block (5 lines) in server/objectStorage.ts:16"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2515cf5ff6ea3938", "name": "`fetch()` without try/.catch or AbortSignal \u2014 server/objectStorage.ts:610", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/objectStorage.ts:610"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c1968854c65e09e9", "name": "Commented-code block (7 lines) in server/replitAuth.ts:405", "shortDescription": {"text": "Commented-code block (7 lines) in server/replitAuth.ts:405"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4b817eab36c8bc55", "name": "Legacy-named symbol `action_plan_alerts_v1` in server/notification-scheduler.ts:222", "shortDescription": {"text": "Legacy-named symbol `action_plan_alerts_v1` in server/notification-scheduler.ts:222"}, "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-ccd2971f461b201e", "name": "Commented-code block (5 lines) in server/ai-grc-routes.ts:155", "shortDescription": {"text": "Commented-code block (5 lines) in server/ai-grc-routes.ts:155"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-177760d18f714b09", "name": "Commented-code block (6 lines) in server/ai-embeddings.ts:98", "shortDescription": {"text": "Commented-code block (6 lines) in server/ai-embeddings.ts:98"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d2a31bba01615538", "name": "Commented-code block (9 lines) in server/cache-helpers.ts:22", "shortDescription": {"text": "Commented-code block (9 lines) in server/cache-helpers.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-cd2f5ebda536e260", "name": "Commented-code block (9 lines) in server/db.ts:10", "shortDescription": {"text": "Commented-code block (9 lines) in server/db.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-fb90fbf61c6daa20", "name": "Legacy-named symbol `procedure_effectiveness_v1` in server/ml-model-manager.ts:309", "shortDescription": {"text": "Legacy-named symbol `procedure_effectiveness_v1` in server/ml-model-manager.ts:309"}, "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-b2ea955550d7a295", "name": "Commented-code block (10 lines) in server/jobs/refresh-risk-list-view.ts:15", "shortDescription": {"text": "Commented-code block (10 lines) in server/jobs/refresh-risk-list-view.ts:15"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4256468d9919a20a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 server/coi/ms-verify.ts:45", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/coi/ms-verify.ts: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-812e18eb25da00fa", "name": "Commented-code block (7 lines) in server/monitoring/prometheus-metrics.ts:205", "shortDescription": {"text": "Commented-code block (7 lines) in server/monitoring/prometheus-metrics.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-6544d6c0c96c20ed", "name": "Commented-code block (9 lines) in server/validation/auth-security.ts:500", "shortDescription": {"text": "Commented-code block (9 lines) in server/validation/auth-security.ts:500"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6a243680122d98fb", "name": "Commented-code block (6 lines) in server/validation/file-validator.ts:90", "shortDescription": {"text": "Commented-code block (6 lines) in server/validation/file-validator.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-a4e16365df00901c", "name": "Commented-code block (6 lines) in server/middleware/express5-error-handler.ts:208", "shortDescription": {"text": "Commented-code block (6 lines) in server/middleware/express5-error-handler.ts:208"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-248debd4bf446d0c", "name": "Commented-code block (5 lines) in server/services/processes-page-service.ts:28", "shortDescription": {"text": "Commented-code block (5 lines) in server/services/processes-page-service.ts:28"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fae5d04a07bde0cd", "name": "Commented-code block (5 lines) in server/services/risks-page-service.ts:576", "shortDescription": {"text": "Commented-code block (5 lines) in server/services/risks-page-service.ts:576"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-facf28a0fd843473", "name": "Commented-code block (6 lines) in server/services/unified-prewarm-service.ts:796", "shortDescription": {"text": "Commented-code block (6 lines) in server/services/unified-prewarm-service.ts:796"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-07b4146bd1145d67", "name": "Commented-code block (10 lines) in server/services/redis.ts:338", "shortDescription": {"text": "Commented-code block (10 lines) in server/services/redis.ts:338"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f20f412fb57dc5e9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/hooks/useAuth.ts:64", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/hooks/useAuth.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-eb6776de74c1d118", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/hooks/useFormAction.ts:108", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/hooks/useFormAction.ts:108"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6a5233487f5d4d47", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/hooks/useBranding.ts:40", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/hooks/useBranding.ts:40"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-75c5ec3e59ee4a16", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/hooks/useBootstrap.ts:123", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/hooks/useBootstrap.ts:123"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bec7d48668532fc9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/hooks/usePrefetch.ts:76", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/hooks/usePrefetch.ts:76"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7425d7f6cd910111", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/ManageControlRisksContent.tsx:65", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/ManageControlRisksContent.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-8f6afc28929f042f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/RisksByProcess.tsx:136", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/RisksByProcess.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-e75b53a423ecdef5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/ViewRiskActionPlansDialog.tsx:84", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/ViewRiskActionPlansDialog.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-02bb69e7ac94d80b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/PrefetchLink.tsx:86", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/PrefetchLink.tsx:86"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4a77e3f7f935e88e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/FindingActionPlans.tsx:46", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/FindingActionPlans.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-896e1c18a875069d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/SpecializedAIButton.tsx:119", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/SpecializedAIButton.tsx:119"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f361f886e8a3eadc", "name": "Commented-code block (6 lines) in client/src/components/ManageRiskControlsDialog.tsx:328", "shortDescription": {"text": "Commented-code block (6 lines) in client/src/components/ManageRiskControlsDialog.tsx:328"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cfd5aad03d6cda9c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/ManageRiskControlsDialog.tsx:88", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/ManageRiskControlsDialog.tsx:88"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bfceb6905e8739b9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/RisksByOwner.tsx:113", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/RisksByOwner.tsx:113"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3610717130375a77", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/ai-assistant-dialog.tsx:84", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/ai-assistant-dialog.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-4c626e518accadd1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/ManageRiskEventsContent.tsx:85", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/ManageRiskEventsContent.tsx:85"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-eaedadb14e69343f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/audit-test-workspace/SupervisorReview.tsx:111", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/audit-test-workspace/SupervisorReview.tsx:111"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1ad2e637f6b08b09", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/audit-test-workspace/QuickWorkLog.tsx:89", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/audit-test-workspace/QuickWorkLog.tsx:89"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b370e97b3e1113ee", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/audit-test-workspace/ContextualEvidence.tsx:96", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/audit-test-workspace/ContextualEvidence.tsx:96"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c8f38225dd0f4163", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/recommendations/ProcedureRecommendations.tsx:60", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/recommendations/ProcedureRecommendations.tsx:60"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-21203467da0220df", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/recommendations/RecommendationFeedback.tsx:80", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/recommendations/RecommendationFeedback.tsx:80"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9aa18343ae75c253", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/recommendations/AuditorRecommendations.tsx:74", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/recommendations/AuditorRecommendations.tsx:74"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-03788b21959dbdcd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/recommendations/TimelineRecommendations.tsx:80", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/recommendations/TimelineRecommendations.tsx:80"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e2d8f753b33d0e75", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/forms/gerencia-form.tsx:102", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/forms/gerencia-form.tsx:102"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-47421681272c8592", "name": "Commented-code block (9 lines) in client/src/components/forms/risk-form.tsx:1037", "shortDescription": {"text": "Commented-code block (9 lines) in client/src/components/forms/risk-form.tsx:1037"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f521e5629df165db", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/forms/risk-form.tsx:155", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/forms/risk-form.tsx:155"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4d14f62c583e8fe2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/forms/macroproceso-form.tsx:49", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/forms/macroproceso-form.tsx:49"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4a464afa60cb8c70", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/forms/process-owner-form-v2.tsx:40", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/forms/process-owner-form-v2.tsx:40"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-35f4eda45460187e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/forms/user-form.tsx:153", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/forms/user-form.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-55f97553043c7e70", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/forms/process-owner-form-native.tsx:40", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/forms/process-owner-form-native.tsx:40"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f36ffcf255375312", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/forms/risk-event-form.tsx:119", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/forms/risk-event-form.tsx:119"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-dcdf76ed6c053d1f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/forms/control-form.tsx:773", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/forms/control-form.tsx:773"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-27597333e80a7469", "name": "Commented-code block (9 lines) in client/src/components/forms/regulation-form.tsx:195", "shortDescription": {"text": "Commented-code block (9 lines) in client/src/components/forms/regulation-form.tsx:195"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6f99c8ef81a470b6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/forms/process-form.tsx:45", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/forms/process-form.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-766af2e8c5165215", "name": "Commented-code block (5 lines) in client/src/components/layout/header.tsx:26", "shortDescription": {"text": "Commented-code block (5 lines) in client/src/components/layout/header.tsx:26"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-83f72dee88161aad", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/layout/header.tsx:308", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/layout/header.tsx:308"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2bf567a7e9bd25a1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/reports/DynamicRiskReport.tsx:94", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/reports/DynamicRiskReport.tsx:94"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9f2723aabe16ec79", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/audit-attachments/AuditTestAttachmentsList.tsx:117", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/audit-attachments/AuditTestAttachmentsList.tsx:117"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7b359fa2620bc297", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/organization/ResponsableForm.tsx:35", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/organization/ResponsableForm.tsx:35"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-81f9acffb8b59ccb", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/audit-sections/AuditCriteriaSection.tsx:79", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/audit-sections/AuditCriteriaSection.tsx:79"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9ca974e3fc4cddc8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/audit-sections/AuditReportSection.tsx:53", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/audit-sections/AuditReportSection.tsx:53"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f73040cdd6f6299f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/audit-sections/TestFormModal.tsx:196", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/audit-sections/TestFormModal.tsx:196"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5b292b7ce7cbb697", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/audit-sections/AuditWorkProgramSection.tsx:98", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/audit-sections/AuditWorkProgramSection.tsx: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-3699bf1eb949323e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/audit-sections/AITestSuggestionDialog.tsx:54", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/audit-sections/AITestSuggestionDialog.tsx:54"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0c7f8ab9b7f91b36", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/SupervisorDashboard.tsx:121", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/SupervisorDashboard.tsx:121"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cd2173de32983ad7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/audit-prioritization.tsx:49", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/audit-prioritization.tsx:49"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b06f0b2c1b27a393", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/audit-planning.tsx:33", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/audit-planning.tsx:33"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-21c7c37d1da45398", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/login.tsx:102", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/login.tsx:102"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bfa7bdcaf6c27859", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/validation-hub.tsx:172", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/validation-hub.tsx:172"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-41407c47191062f5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/audit-test-manual.tsx:92", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/audit-test-manual.tsx:92"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-21d8b5783b5422d3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/organization.tsx:29", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/organization.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-fe3a43cd12ae105f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/audits.tsx:211", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/audits.tsx:211"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-98ed6d5f66a46a36", "name": "Commented-code block (6 lines) in client/src/pages/risk-events.tsx:738", "shortDescription": {"text": "Commented-code block (6 lines) in client/src/pages/risk-events.tsx:738"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5afd023aa0ae4c52", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/risk-events.tsx:227", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/risk-events.tsx:227"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bd4bf7392f804161", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/users.tsx:52", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/users.tsx:52"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-798eec6ca1673970", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/processes.tsx:287", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/processes.tsx:287"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3f325e05a6d52831", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/reports.tsx:151", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/reports.tsx:151"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-dfab82c6d0f22da0", "name": "Commented-code block (5 lines) in client/src/pages/ExecutorDashboard.tsx:74", "shortDescription": {"text": "Commented-code block (5 lines) in client/src/pages/ExecutorDashboard.tsx:74"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3542dc9be2c85ee9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/ExecutorDashboard.tsx:82", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/ExecutorDashboard.tsx:82"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cc9c151d031f7a3e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/risks.tsx:589", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/risks.tsx:589"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b02b04811b5848da", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/compliance-audits.tsx:197", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/compliance-audits.tsx:197"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-670782452bd975db", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/validation-action-plans.tsx:175", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/validation-action-plans.tsx:175"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1053455ccd6233fc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/audit-tests.tsx:160", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/audit-tests.tsx:160"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8cd0b7a4e492c129", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/regulations.tsx:256", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/regulations.tsx:256"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-07cc3976886e7a32", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/public-batch-validation.tsx:99", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/public-batch-validation.tsx:99"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-573c78b0e3515ae1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/compliance-officers.tsx:166", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/compliance-officers.tsx:166"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-987f7371ffbd882a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/compliance-tests.tsx:103", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/compliance-tests.tsx:103"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6fb319dcd7e5013b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/audit-test-details.tsx:262", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/audit-test-details.tsx:262"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0b3c7d1620b3f2e5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/fiscal-entities.tsx:44", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/fiscal-entities.tsx:44"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0dad32a2bc600f5b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/audit-findings.tsx:217", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/audit-findings.tsx:217"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4af05379a503ad1b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/controls.tsx:285", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/controls.tsx:285"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8b447ac86e80a57f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/validation-risks.tsx:203", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/validation-risks.tsx:203"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2f3b311ddfccbede", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/audit-plan-list.tsx:147", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/audit-plan-list.tsx:147"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-439e46696bf11d37", "name": "Commented-code block (5 lines) in client/src/pages/risk-matrix.tsx:185", "shortDescription": {"text": "Commented-code block (5 lines) in client/src/pages/risk-matrix.tsx:185"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bf1ca724f356b346", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/public-action-plan-validation.tsx:57", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/public-action-plan-validation.tsx:57"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cba96eae55b2efdc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/trash.tsx:102", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/trash.tsx:102"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9d357af091427ef3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/setup-wizard.tsx:355", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/setup-wizard.tsx:355"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-738f1e0d72b50753", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/public-validation.tsx:94", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/public-validation.tsx:94"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e5e85e778d1c92ec", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/compliance-documents.tsx:110", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/compliance-documents.tsx:110"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-07e8416cf55354c0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/change-password-required.tsx:51", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/change-password-required.tsx:51"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ca45b4aeb0f0b8c9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/support.tsx:171", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/support.tsx:171"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2c3b4c6b5a7516f6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/validation-controls.tsx:159", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/validation-controls.tsx:159"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0dab55b6266197e7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/coi/declarantes.tsx:68", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/coi/declarantes.tsx:68"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f7d6fbbf9ff4676b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/coi/index.tsx:64", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/coi/index.tsx:64"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-dfc2390a83f9f1f3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/platform-admin/support.tsx:105", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/platform-admin/support.tsx:105"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d227464a806cab2f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/organization/responsables.tsx:72", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/organization/responsables.tsx:72"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3936ca22cdaa179b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/organization/processes.tsx:165", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/organization/processes.tsx:165"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ace665699f4ae518", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/organization/gerencias.tsx:124", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/organization/gerencias.tsx:124"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b7061c129ff49c6a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/config/branding.tsx:24", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/config/branding.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-bf18bfed6fcc25ca", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/config/palette.tsx:38", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/config/palette.tsx:38"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-60aaa43735f2bfd9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/rcsa/plantilla-detail.tsx:114", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/rcsa/plantilla-detail.tsx:114"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c4396837e55a7e30", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/rcsa/reportes.tsx:66", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/rcsa/reportes.tsx:66"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1d284d6268bbb4f2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/rcsa/campana-detail.tsx:119", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/rcsa/campana-detail.tsx:119"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-26d2ad756e767567", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/rcsa/campanas.tsx:92", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/rcsa/campanas.tsx:92"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9bce4c839f42cf57", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/rcsa/submission-review.tsx:124", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/rcsa/submission-review.tsx:124"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e511e4cad2897ab9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/rcsa/index.tsx:73", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/rcsa/index.tsx:73"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-096282c0b8be88a4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/rcsa/plantillas.tsx:49", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/rcsa/plantillas.tsx:49"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d3d07b9603d1d580", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/lib/queryClient.ts:319", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/lib/queryClient.ts:319"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bc2dceec86c7dbb1", "name": "Commented-code block (5 lines) in client/src/lib/auditTypeRegistry.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in client/src/lib/auditTypeRegistry.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-fd8b6f00c4f927fd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/lib/retry.ts:134", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/lib/retry.ts:134"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a362c7dc9f5a9587", "name": "Commented-code block (29 lines) in shared/schema.ts:444", "shortDescription": {"text": "Commented-code block (29 lines) in shared/schema.ts:444"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6bba2ef726650645", "name": "Commented-code block (6 lines) in shared/risk-validation-helpers.ts:84", "shortDescription": {"text": "Commented-code block (6 lines) in shared/risk-validation-helpers.ts:84"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ced1b7d63402e49b", "name": "Legacy-named symbol `action_plan_alerts_v1` in shared/action-plan-alerts.ts:3", "shortDescription": {"text": "Legacy-named symbol `action_plan_alerts_v1` in shared/action-plan-alerts.ts:3"}, "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-66bce55719c47e5f", "name": "92 env vars used in code but missing from .env.example", "shortDescription": {"text": "92 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `API_TIMEOUT_MS`, `API_URL`, `APP_BASE_URL`, `BASELINE_PATH`, `BASE_URL`, `CI`, `COI_SCHEDULER_DISABLED`, `COI_SCHEDULER_INTERVAL_MS` + 84 more. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e94fb69ea025e885", "name": "Frontend route `/reset-password/:token` has no Link/navigate to it \u2014 client/src/App.tsx", "shortDescription": {"text": "Frontend route `/reset-password/:token` has no Link/navigate to it \u2014 client/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cd4e4981a0f8697d", "name": "Frontend route `/change-password-required` has no Link/navigate to it \u2014 client/src/App.tsx", "shortDescription": {"text": "Frontend route `/change-password-required` has no Link/navigate to it \u2014 client/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2a106d3961a716c5", "name": "Frontend route `/no-access` has no Link/navigate to it \u2014 client/src/App.tsx", "shortDescription": {"text": "Frontend route `/no-access` has no Link/navigate to it \u2014 client/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8bfda9d5ca8f5464", "name": "Frontend route `/public/batch-validation/:token` has no Link/navigate to it \u2014 client/src/App.tsx", "shortDescription": {"text": "Frontend route `/public/batch-validation/:token` has no Link/navigate to it \u2014 client/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-be089e6c5384d628", "name": "Frontend route `/public/validate-action-plan/:token` has no Link/navigate to it \u2014 client/src/App.tsx", "shortDescription": {"text": "Frontend route `/public/validate-action-plan/:token` has no Link/navigate to it \u2014 client/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ec4496700fe241ca", "name": "Frontend route `/validate/:token` has no Link/navigate to it \u2014 client/src/App.tsx", "shortDescription": {"text": "Frontend route `/validate/:token` has no Link/navigate to it \u2014 client/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ff8f04bd1d196f83", "name": "Frontend route `/action-plan-upload/:token` has no Link/navigate to it \u2014 client/src/App.tsx", "shortDescription": {"text": "Frontend route `/action-plan-upload/:token` has no Link/navigate to it \u2014 client/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d89dd20ed6a98ee7", "name": "Frontend route `/coi/declaracion/:token` has no Link/navigate to it \u2014 client/src/App.tsx", "shortDescription": {"text": "Frontend route `/coi/declaracion/:token` has no Link/navigate to it \u2014 client/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-32c97c739a683ef9", "name": "Frontend route `/rcsa/autoevaluacion/:token` has no Link/navigate to it \u2014 client/src/App.tsx", "shortDescription": {"text": "Frontend route `/rcsa/autoevaluacion/:token` has no Link/navigate to it \u2014 client/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9c7a9b006ea34337", "name": "Frontend route `/dashboard/executor` has no Link/navigate to it \u2014 client/src/App.tsx", "shortDescription": {"text": "Frontend route `/dashboard/executor` has no Link/navigate to it \u2014 client/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e1c84dc4d651a426", "name": "Frontend route `/dashboard/supervisor` has no Link/navigate to it \u2014 client/src/App.tsx", "shortDescription": {"text": "Frontend route `/dashboard/supervisor` has no Link/navigate to it \u2014 client/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ebe050896bc58d7c", "name": "Frontend route `/dashboard/admin` has no Link/navigate to it \u2014 client/src/App.tsx", "shortDescription": {"text": "Frontend route `/dashboard/admin` has no Link/navigate to it \u2014 client/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7d25bd512cc4cf02", "name": "Frontend route `/probability-demo` has no Link/navigate to it \u2014 client/src/App.tsx", "shortDescription": {"text": "Frontend route `/probability-demo` has no Link/navigate to it \u2014 client/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bf15f9f0fd838ae2", "name": "Frontend route `/manual/shortcuts` has no Link/navigate to it \u2014 client/src/App.tsx", "shortDescription": {"text": "Frontend route `/manual/shortcuts` has no Link/navigate to it \u2014 client/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2cd94637cad82d2e", "name": "Frontend route `/audits/:auditCode` has no Link/navigate to it \u2014 client/src/App.tsx", "shortDescription": {"text": "Frontend route `/audits/:auditCode` has no Link/navigate to it \u2014 client/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0714312d0dbfa3c7", "name": "Frontend route `/audit-test/:id` has no Link/navigate to it \u2014 client/src/App.tsx", "shortDescription": {"text": "Frontend route `/audit-test/:id` has no Link/navigate to it \u2014 client/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-834701ee3a655a68", "name": "Frontend route `/audits/:auditCode/create-test` has no Link/navigate to it \u2014 client/src/App.tsx", "shortDescription": {"text": "Frontend route `/audits/:auditCode/create-test` has no Link/navigate to it \u2014 client/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-62e51cb47cae8671", "name": "Frontend route `/audit-plan-wizard` has no Link/navigate to it \u2014 client/src/App.tsx", "shortDescription": {"text": "Frontend route `/audit-plan-wizard` has no Link/navigate to it \u2014 client/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-aa539bba41d73e27", "name": "Frontend route `/coi/formularios/:id/preview` has no Link/navigate to it \u2014 client/src/App.tsx", "shortDescription": {"text": "Frontend route `/coi/formularios/:id/preview` has no Link/navigate to it \u2014 client/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-aec75b24177f96fa", "name": "Frontend route `/coi/formularios/:id` has no Link/navigate to it \u2014 client/src/App.tsx", "shortDescription": {"text": "Frontend route `/coi/formularios/:id` has no Link/navigate to it \u2014 client/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5f4334d38e4d4f12", "name": "Frontend route `/coi/campanas/:id` has no Link/navigate to it \u2014 client/src/App.tsx", "shortDescription": {"text": "Frontend route `/coi/campanas/:id` has no Link/navigate to it \u2014 client/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4316c84ac9cebd1f", "name": "Frontend route `/rcsa/plantillas/:id` has no Link/navigate to it \u2014 client/src/App.tsx", "shortDescription": {"text": "Frontend route `/rcsa/plantillas/:id` has no Link/navigate to it \u2014 client/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c69e2810090eea07", "name": "Frontend route `/rcsa/campanas/:id` has no Link/navigate to it \u2014 client/src/App.tsx", "shortDescription": {"text": "Frontend route `/rcsa/campanas/:id` has no Link/navigate to it \u2014 client/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c2021470584a32f3", "name": "Frontend route `/rcsa/submissions/:id` has no Link/navigate to it \u2014 client/src/App.tsx", "shortDescription": {"text": "Frontend route `/rcsa/submissions/:id` has no Link/navigate to it \u2014 client/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e21fda27a6d29eb1", "name": "Frontend route `/config/risk-aggregation` has no Link/navigate to it \u2014 client/src/App.tsx", "shortDescription": {"text": "Frontend route `/config/risk-aggregation` has no Link/navigate to it \u2014 client/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ab54cbd273044f44", "name": "Frontend route `/config/criteria` has no Link/navigate to it \u2014 client/src/App.tsx", "shortDescription": {"text": "Frontend route `/config/criteria` has no Link/navigate to it \u2014 client/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b66ae807a95f46ff", "name": "Dangling fetch: POST https://cl.unigrc.app/api/admin/create-performance-indexes (crear-indices-navegador-simple.js:4)", "shortDescription": {"text": "Dangling fetch: POST https://cl.unigrc.app/api/admin/create-performance-indexes (crear-indices-navegador-simple.js:4)"}, "fullDescription": {"text": "`crear-indices-navegador-simple.js:4` calls `POST https://cl.unigrc.app/api/admin/create-performance-indexes` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/cl.unigrc.app/api/admin/create-performance-indexes`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5a3108d6559f4999", "name": "Dangling fetch: POST /api/admin/execute-sql (EJECUTAR-INDICES-CORREGIDOS-DIRECTO.js:96)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/execute-sql (EJECUTAR-INDICES-CORREGIDOS-DIRECTO.js:96)"}, "fullDescription": {"text": "`EJECUTAR-INDICES-CORREGIDOS-DIRECTO.js:96` calls `POST /api/admin/execute-sql` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/execute-sql`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f84741b7a80832d1", "name": "Dangling fetch: POST /api/admin/execute-sql (EJECUTAR-INDICES-CORREGIDOS-DIRECTO.js:136)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/execute-sql (EJECUTAR-INDICES-CORREGIDOS-DIRECTO.js:136)"}, "fullDescription": {"text": "`EJECUTAR-INDICES-CORREGIDOS-DIRECTO.js:136` calls `POST /api/admin/execute-sql` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/execute-sql`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-58dfc7e2cfea38b9", "name": "Dangling fetch: POST https://cl.unigrc.app/api/admin/create-performance-indexes (crear-indices-desde-navegador.js:19)", "shortDescription": {"text": "Dangling fetch: POST https://cl.unigrc.app/api/admin/create-performance-indexes (crear-indices-desde-navegador.js:19)"}, "fullDescription": {"text": "`crear-indices-desde-navegador.js:19` calls `POST https://cl.unigrc.app/api/admin/create-performance-indexes` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/cl.unigrc.app/api/admin/create-performance-indexes`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-49cc976ed9024a72", "name": "Dangling fetch: GET /api/audit-review-comments/test/${auditTestId} (client/src/components/audit-test-workspace/Superviso", "shortDescription": {"text": "Dangling fetch: GET /api/audit-review-comments/test/${auditTestId} (client/src/components/audit-test-workspace/SupervisorReview.tsx:111)"}, "fullDescription": {"text": "`client/src/components/audit-test-workspace/SupervisorReview.tsx:111` calls `GET /api/audit-review-comments/test/${auditTestId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/audit-review-comments/test/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e7b87a91407e2b18", "name": "Dangling fetch: GET /api/risk-processes/risk/${risk?.id}?fields=lite (client/src/components/forms/risk-form.tsx:247)", "shortDescription": {"text": "Dangling fetch: GET /api/risk-processes/risk/${risk?.id}?fields=lite (client/src/components/forms/risk-form.tsx:247)"}, "fullDescription": {"text": "`client/src/components/forms/risk-form.tsx:247` calls `GET /api/risk-processes/risk/${risk?.id}?fields=lite` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/risk-processes/risk/${risk`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4c6d831343cd770f", "name": "Dangling fetch: POST /api/${entity}/check-duplicates (client/src/components/ai/DuplicateCheckButton.tsx:69)", "shortDescription": {"text": "Dangling fetch: POST /api/${entity}/check-duplicates (client/src/components/ai/DuplicateCheckButton.tsx:69)"}, "fullDescription": {"text": "`client/src/components/ai/DuplicateCheckButton.tsx:69` calls `POST /api/${entity}/check-duplicates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/<p>/check-duplicates`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e80cd2825008e507", "name": "Dangling fetch: GET /api/dashboard/supervisor/${currentUser?.id} (client/src/pages/SupervisorDashboard.tsx:121)", "shortDescription": {"text": "Dangling fetch: GET /api/dashboard/supervisor/${currentUser?.id} (client/src/pages/SupervisorDashboard.tsx:121)"}, "fullDescription": {"text": "`client/src/pages/SupervisorDashboard.tsx:121` calls `GET /api/dashboard/supervisor/${currentUser?.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/supervisor/${currentuser`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2294a9196388570b", "name": "Dangling fetch: GET /api/audits/${auditId}/work-program/proposed-tests/risk/${selectedRiskId} (client/src/pages/audit-te", "shortDescription": {"text": "Dangling fetch: GET /api/audits/${auditId}/work-program/proposed-tests/risk/${selectedRiskId} (client/src/pages/audit-test-manual.tsx:92)"}, "fullDescription": {"text": "`client/src/pages/audit-test-manual.tsx:92` calls `GET /api/audits/${auditId}/work-program/proposed-tests/risk/${selectedRiskId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/audits/<p>/work-program/proposed-tests/risk/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-015d2f798be8cd5c", "name": "Dangling fetch: GET /api/dashboard/executor/${currentUser?.id} (client/src/pages/ExecutorDashboard.tsx:82)", "shortDescription": {"text": "Dangling fetch: GET /api/dashboard/executor/${currentUser?.id} (client/src/pages/ExecutorDashboard.tsx:82)"}, "fullDescription": {"text": "`client/src/pages/ExecutorDashboard.tsx:82` calls `GET /api/dashboard/executor/${currentUser?.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/executor/${currentuser`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e633981dc8e88ee2", "name": "Dangling fetch: GET /api/dashboard/activity/${currentUser?.id} (client/src/pages/ExecutorDashboard.tsx:102)", "shortDescription": {"text": "Dangling fetch: GET /api/dashboard/activity/${currentUser?.id} (client/src/pages/ExecutorDashboard.tsx:102)"}, "fullDescription": {"text": "`client/src/pages/ExecutorDashboard.tsx:102` calls `GET /api/dashboard/activity/${currentUser?.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/activity/${currentuser`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5b2e46229f7df16d", "name": "Dangling fetch: GET /api/dashboard/executor/${currentUser?.id}?refresh=true (client/src/pages/ExecutorDashboard.tsx:184)", "shortDescription": {"text": "Dangling fetch: GET /api/dashboard/executor/${currentUser?.id}?refresh=true (client/src/pages/ExecutorDashboard.tsx:184)"}, "fullDescription": {"text": "`client/src/pages/ExecutorDashboard.tsx:184` calls `GET /api/dashboard/executor/${currentUser?.id}?refresh=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/executor/${currentuser`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-592a25bf00864ef6", "name": "Dangling fetch: GET /api/dashboard/activity/${currentUser?.id}?refresh=true (client/src/pages/ExecutorDashboard.tsx:187)", "shortDescription": {"text": "Dangling fetch: GET /api/dashboard/activity/${currentUser?.id}?refresh=true (client/src/pages/ExecutorDashboard.tsx:187)"}, "fullDescription": {"text": "`client/src/pages/ExecutorDashboard.tsx:187` calls `GET /api/dashboard/activity/${currentUser?.id}?refresh=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/activity/${currentuser`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d1bb4d410353b955", "name": "Dangling fetch: GET /api/audit-findings/${editingFinding?.id}/actions (client/src/pages/audit-findings.tsx:236)", "shortDescription": {"text": "Dangling fetch: GET /api/audit-findings/${editingFinding?.id}/actions (client/src/pages/audit-findings.tsx:236)"}, "fullDescription": {"text": "`client/src/pages/audit-findings.tsx:236` calls `GET /api/audit-findings/${editingFinding?.id}/actions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/audit-findings/${editingfinding`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9e3dcdb0dcb963ac", "name": "Dangling fetch: GET /api/coi-public/declaration/${token} (client/src/pages/coi/declaracion-publica.tsx:36)", "shortDescription": {"text": "Dangling fetch: GET /api/coi-public/declaration/${token} (client/src/pages/coi/declaracion-publica.tsx:36)"}, "fullDescription": {"text": "`client/src/pages/coi/declaracion-publica.tsx:36` calls `GET /api/coi-public/declaration/${token}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/coi-public/declaration/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-06d4ae821e148172", "name": "Dangling fetch: POST /api/coi-public/declaration/${token}/sign (client/src/pages/coi/declaracion-publica.tsx:70)", "shortDescription": {"text": "Dangling fetch: POST /api/coi-public/declaration/${token}/sign (client/src/pages/coi/declaracion-publica.tsx:70)"}, "fullDescription": {"text": "`client/src/pages/coi/declaracion-publica.tsx:70` calls `POST /api/coi-public/declaration/${token}/sign` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/coi-public/declaration/<p>/sign`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3b7add8d53d95eaa", "name": "Dangling fetch: GET /api/coi-public/auth-config (client/src/pages/coi/declaracion-publica.tsx:204)", "shortDescription": {"text": "Dangling fetch: GET /api/coi-public/auth-config (client/src/pages/coi/declaracion-publica.tsx:204)"}, "fullDescription": {"text": "`client/src/pages/coi/declaracion-publica.tsx:204` calls `GET /api/coi-public/auth-config` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/coi-public/auth-config`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-13465ade6a57a5de", "name": "Dangling fetch: POST /api/coi/declarants/import (client/src/pages/coi/declarantes.tsx:368)", "shortDescription": {"text": "Dangling fetch: POST /api/coi/declarants/import (client/src/pages/coi/declarantes.tsx:368)"}, "fullDescription": {"text": "`client/src/pages/coi/declarantes.tsx:368` calls `POST /api/coi/declarants/import` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/coi/declarants/import`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d78aede3e36583be", "name": "Dangling fetch: GET /api/coi/dashboard/stats (client/src/pages/coi/index.tsx:64)", "shortDescription": {"text": "Dangling fetch: GET /api/coi/dashboard/stats (client/src/pages/coi/index.tsx:64)"}, "fullDescription": {"text": "`client/src/pages/coi/index.tsx:64` calls `GET /api/coi/dashboard/stats` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/coi/dashboard/stats`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-67d8bab4ee17122d", "name": "Dangling fetch: GET /api/rcsa/templates/${slugOrId} (client/src/pages/rcsa/plantilla-detail.tsx:114)", "shortDescription": {"text": "Dangling fetch: GET /api/rcsa/templates/${slugOrId} (client/src/pages/rcsa/plantilla-detail.tsx:114)"}, "fullDescription": {"text": "`client/src/pages/rcsa/plantilla-detail.tsx:114` calls `GET /api/rcsa/templates/${slugOrId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/rcsa/templates/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-17511849dde4251d", "name": "Dangling fetch: GET /api/rcsa/templates/${templateId}/versions (client/src/pages/rcsa/plantilla-detail.tsx:124)", "shortDescription": {"text": "Dangling fetch: GET /api/rcsa/templates/${templateId}/versions (client/src/pages/rcsa/plantilla-detail.tsx:124)"}, "fullDescription": {"text": "`client/src/pages/rcsa/plantilla-detail.tsx:124` calls `GET /api/rcsa/templates/${templateId}/versions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/rcsa/templates/<p>/versions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d48b1a683a8d29f6", "name": "Dangling fetch: GET /api/rcsa-public/declaration/${token} (client/src/pages/rcsa/autoevaluacion-publica.tsx:119)", "shortDescription": {"text": "Dangling fetch: GET /api/rcsa-public/declaration/${token} (client/src/pages/rcsa/autoevaluacion-publica.tsx:119)"}, "fullDescription": {"text": "`client/src/pages/rcsa/autoevaluacion-publica.tsx:119` calls `GET /api/rcsa-public/declaration/${token}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/rcsa-public/declaration/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6197ad9dfe787f73", "name": "Dangling fetch: PUT /api/rcsa-public/declaration/${token}/draft (client/src/pages/rcsa/autoevaluacion-publica.tsx:159)", "shortDescription": {"text": "Dangling fetch: PUT /api/rcsa-public/declaration/${token}/draft (client/src/pages/rcsa/autoevaluacion-publica.tsx:159)"}, "fullDescription": {"text": "`client/src/pages/rcsa/autoevaluacion-publica.tsx:159` calls `PUT /api/rcsa-public/declaration/${token}/draft` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/rcsa-public/declaration/<p>/draft`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a863ce3afd70b536", "name": "Dangling fetch: POST /api/rcsa-public/declaration/${token}/suggest-risks (client/src/pages/rcsa/autoevaluacion-publica.t", "shortDescription": {"text": "Dangling fetch: POST /api/rcsa-public/declaration/${token}/suggest-risks (client/src/pages/rcsa/autoevaluacion-publica.tsx:226)"}, "fullDescription": {"text": "`client/src/pages/rcsa/autoevaluacion-publica.tsx:226` calls `POST /api/rcsa-public/declaration/${token}/suggest-risks` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/rcsa-public/declaration/<p>/suggest-risks`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4824af63fea96943", "name": "Dangling fetch: POST /api/rcsa-public/declaration/${token}/submit (client/src/pages/rcsa/autoevaluacion-publica.tsx:282)", "shortDescription": {"text": "Dangling fetch: POST /api/rcsa-public/declaration/${token}/submit (client/src/pages/rcsa/autoevaluacion-publica.tsx:282)"}, "fullDescription": {"text": "`client/src/pages/rcsa/autoevaluacion-publica.tsx:282` calls `POST /api/rcsa-public/declaration/${token}/submit` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/rcsa-public/declaration/<p>/submit`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1651f23fd47b9c80", "name": "Dangling fetch: GET /api/rcsa-public/auth-config (client/src/pages/rcsa/autoevaluacion-publica.tsx:655)", "shortDescription": {"text": "Dangling fetch: GET /api/rcsa-public/auth-config (client/src/pages/rcsa/autoevaluacion-publica.tsx:655)"}, "fullDescription": {"text": "`client/src/pages/rcsa/autoevaluacion-publica.tsx:655` calls `GET /api/rcsa-public/auth-config` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/rcsa-public/auth-config`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6e93e6609e45fdb6", "name": "Dangling fetch: GET /api/rcsa/dashboard/stats (client/src/pages/rcsa/reportes.tsx:66)", "shortDescription": {"text": "Dangling fetch: GET /api/rcsa/dashboard/stats (client/src/pages/rcsa/reportes.tsx:66)"}, "fullDescription": {"text": "`client/src/pages/rcsa/reportes.tsx:66` calls `GET /api/rcsa/dashboard/stats` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/rcsa/dashboard/stats`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6a222c6d92cc7a11", "name": "Dangling fetch: GET /api/rcsa/campaigns (client/src/pages/rcsa/reportes.tsx:71)", "shortDescription": {"text": "Dangling fetch: GET /api/rcsa/campaigns (client/src/pages/rcsa/reportes.tsx:71)"}, "fullDescription": {"text": "`client/src/pages/rcsa/reportes.tsx:71` calls `GET /api/rcsa/campaigns` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/rcsa/campaigns`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ee2fbd3582715bd3", "name": "Dangling fetch: GET /api/rcsa/campaigns/${id} (client/src/pages/rcsa/campana-detail.tsx:119)", "shortDescription": {"text": "Dangling fetch: GET /api/rcsa/campaigns/${id} (client/src/pages/rcsa/campana-detail.tsx:119)"}, "fullDescription": {"text": "`client/src/pages/rcsa/campana-detail.tsx:119` calls `GET /api/rcsa/campaigns/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/rcsa/campaigns/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f8168225d9f0b5d9", "name": "Dangling fetch: GET /api/rcsa/campaigns/${id}/recipients (client/src/pages/rcsa/campana-detail.tsx:125)", "shortDescription": {"text": "Dangling fetch: GET /api/rcsa/campaigns/${id}/recipients (client/src/pages/rcsa/campana-detail.tsx:125)"}, "fullDescription": {"text": "`client/src/pages/rcsa/campana-detail.tsx:125` calls `GET /api/rcsa/campaigns/${id}/recipients` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/rcsa/campaigns/<p>/recipients`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8d133a55e2cb7be0", "name": "Dangling fetch: GET /api/rcsa/campaigns/${id}/submissions (client/src/pages/rcsa/campana-detail.tsx:131)", "shortDescription": {"text": "Dangling fetch: GET /api/rcsa/campaigns/${id}/submissions (client/src/pages/rcsa/campana-detail.tsx:131)"}, "fullDescription": {"text": "`client/src/pages/rcsa/campana-detail.tsx:131` calls `GET /api/rcsa/campaigns/${id}/submissions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/rcsa/campaigns/<p>/submissions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-25972154c24b8b9b", "name": "Dangling fetch: GET /api/rcsa/campaigns (client/src/pages/rcsa/campanas.tsx:92)", "shortDescription": {"text": "Dangling fetch: GET /api/rcsa/campaigns (client/src/pages/rcsa/campanas.tsx:92)"}, "fullDescription": {"text": "`client/src/pages/rcsa/campanas.tsx:92` calls `GET /api/rcsa/campaigns` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/rcsa/campaigns`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c5e2f1661c4387aa", "name": "Dangling fetch: GET /api/rcsa/templates (client/src/pages/rcsa/campanas.tsx:97)", "shortDescription": {"text": "Dangling fetch: GET /api/rcsa/templates (client/src/pages/rcsa/campanas.tsx:97)"}, "fullDescription": {"text": "`client/src/pages/rcsa/campanas.tsx:97` calls `GET /api/rcsa/templates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/rcsa/templates`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-46a78e7968701ecd", "name": "Dangling fetch: GET /api/rcsa/submissions/${id} (client/src/pages/rcsa/submission-review.tsx:124)", "shortDescription": {"text": "Dangling fetch: GET /api/rcsa/submissions/${id} (client/src/pages/rcsa/submission-review.tsx:124)"}, "fullDescription": {"text": "`client/src/pages/rcsa/submission-review.tsx:124` calls `GET /api/rcsa/submissions/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/rcsa/submissions/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-04aa3df46fea9f4d", "name": "Dangling fetch: GET /api/rcsa/dashboard/stats (client/src/pages/rcsa/index.tsx:73)", "shortDescription": {"text": "Dangling fetch: GET /api/rcsa/dashboard/stats (client/src/pages/rcsa/index.tsx:73)"}, "fullDescription": {"text": "`client/src/pages/rcsa/index.tsx:73` calls `GET /api/rcsa/dashboard/stats` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/rcsa/dashboard/stats`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2ab782334dfdb187", "name": "Dangling fetch: GET /api/rcsa/templates (client/src/pages/rcsa/plantillas.tsx:49)", "shortDescription": {"text": "Dangling fetch: GET /api/rcsa/templates (client/src/pages/rcsa/plantillas.tsx:49)"}, "fullDescription": {"text": "`client/src/pages/rcsa/plantillas.tsx:49` calls `GET /api/rcsa/templates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/rcsa/templates`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2dba25752f9055ef", "name": "Unused endpoint: GET /api/test", "shortDescription": {"text": "Unused endpoint: GET /api/test"}, "fullDescription": {"text": "`server.js` declares `GET /api/test` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dde3adb27bf7eebe", "name": "Unused endpoint: USE /api", "shortDescription": {"text": "Unused endpoint: USE /api"}, "fullDescription": {"text": "`server.js` declares `USE /api` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c7901e6c90c81569", "name": "Unused endpoint: GET /api/auth/microsoft", "shortDescription": {"text": "Unused endpoint: GET /api/auth/microsoft"}, "fullDescription": {"text": "`server/microsoftAuth.ts` declares `GET /api/auth/microsoft` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-eccbff88156a774a", "name": "Unused endpoint: GET /api/auth/microsoft/callback", "shortDescription": {"text": "Unused endpoint: GET /api/auth/microsoft/callback"}, "fullDescription": {"text": "`server/microsoftAuth.ts` declares `GET /api/auth/microsoft/callback` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2936e06839221625", "name": "Unused endpoint: GET /api/auth/microsoft/debug", "shortDescription": {"text": "Unused endpoint: GET /api/auth/microsoft/debug"}, "fullDescription": {"text": "`server/microsoftAuth.ts` declares `GET /api/auth/microsoft/debug` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3d72750b1a6cab38", "name": "Unused endpoint: GET /api/login", "shortDescription": {"text": "Unused endpoint: GET /api/login"}, "fullDescription": {"text": "`server/replitAuth.ts` declares `GET /api/login` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e75f055deeb9fa12", "name": "Unused endpoint: GET /api/logout", "shortDescription": {"text": "Unused endpoint: GET /api/logout"}, "fullDescription": {"text": "`server/replitAuth.ts` declares `GET /api/logout` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3e56f91e051b759b", "name": "Unused endpoint: GET /api/callback", "shortDescription": {"text": "Unused endpoint: GET /api/callback"}, "fullDescription": {"text": "`server/replitAuth.ts` declares `GET /api/callback` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fb560244ecde23cc", "name": "Unused endpoint: GET /api/ai/status", "shortDescription": {"text": "Unused endpoint: GET /api/ai/status"}, "fullDescription": {"text": "`server/ai-assistant-routes.ts` declares `GET /api/ai/status` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2bff7a3526b94127", "name": "Unused endpoint: POST /api/ai/test", "shortDescription": {"text": "Unused endpoint: POST /api/ai/test"}, "fullDescription": {"text": "`server/ai-assistant-routes.ts` declares `POST /api/ai/test` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d72cf599fa344fe8", "name": "Unused endpoint: POST /api/ai/test-stream", "shortDescription": {"text": "Unused endpoint: POST /api/ai/test-stream"}, "fullDescription": {"text": "`server/ai-assistant-routes.ts` declares `POST /api/ai/test-stream` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7ecfc13a0796068b", "name": "Unused endpoint: POST /api/ai/assistant-stream", "shortDescription": {"text": "Unused endpoint: POST /api/ai/assistant-stream"}, "fullDescription": {"text": "`server/ai-assistant-routes.ts` declares `POST /api/ai/assistant-stream` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1fde000f0a841000", "name": "Unused endpoint: POST /api/ai/risk-suggestions-stream", "shortDescription": {"text": "Unused endpoint: POST /api/ai/risk-suggestions-stream"}, "fullDescription": {"text": "`server/ai-assistant-routes.ts` declares `POST /api/ai/risk-suggestions-stream` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-85bad0707ff041d0", "name": "Unused endpoint: GET /ServiceProviderConfig", "shortDescription": {"text": "Unused endpoint: GET /ServiceProviderConfig"}, "fullDescription": {"text": "`server/scimRouter.ts` declares `GET /ServiceProviderConfig` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fd94c3f014c6e392", "name": "Unused endpoint: GET /Schemas", "shortDescription": {"text": "Unused endpoint: GET /Schemas"}, "fullDescription": {"text": "`server/scimRouter.ts` declares `GET /Schemas` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-99a78d4d5c4f63e2", "name": "Unused endpoint: POST /Users", "shortDescription": {"text": "Unused endpoint: POST /Users"}, "fullDescription": {"text": "`server/scimRouter.ts` declares `POST /Users` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-26b6282feec5532a", "name": "Unused endpoint: PUT /Users/:id", "shortDescription": {"text": "Unused endpoint: PUT /Users/:id"}, "fullDescription": {"text": "`server/scimRouter.ts` declares `PUT /Users/:id` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e6a846a2107680ff", "name": "Unused endpoint: PATCH /Users/:id", "shortDescription": {"text": "Unused endpoint: PATCH /Users/:id"}, "fullDescription": {"text": "`server/scimRouter.ts` declares `PATCH /Users/:id` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3f9c45931ab933a4", "name": "Unused endpoint: DELETE /Users/:id", "shortDescription": {"text": "Unused endpoint: DELETE /Users/:id"}, "fullDescription": {"text": "`server/scimRouter.ts` declares `DELETE /Users/:id` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c449334b877202a3", "name": "Unused endpoint: GET /api/auth/saml/:tenantSlug", "shortDescription": {"text": "Unused endpoint: GET /api/auth/saml/:tenantSlug"}, "fullDescription": {"text": "`server/samlAuth.ts` declares `GET /api/auth/saml/:tenantSlug` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-022dbaa9257d26b9", "name": "Unused endpoint: POST /api/auth/saml/:tenantSlug/callback", "shortDescription": {"text": "Unused endpoint: POST /api/auth/saml/:tenantSlug/callback"}, "fullDescription": {"text": "`server/samlAuth.ts` declares `POST /api/auth/saml/:tenantSlug/callback` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d54e63567510fde4", "name": "Unused endpoint: GET /api/auth/saml/:tenantSlug/metadata", "shortDescription": {"text": "Unused endpoint: GET /api/auth/saml/:tenantSlug/metadata"}, "fullDescription": {"text": "`server/samlAuth.ts` declares `GET /api/auth/saml/:tenantSlug/metadata` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-00b920cf68e783e2", "name": "Unused endpoint: GET /api/control-owners", "shortDescription": {"text": "Unused endpoint: GET /api/control-owners"}, "fullDescription": {"text": "`server/revalidation-routes.ts` declares `GET /api/control-owners` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-810ae023b80667c6", "name": "Unused endpoint: GET /api/control-owners/:id", "shortDescription": {"text": "Unused endpoint: GET /api/control-owners/:id"}, "fullDescription": {"text": "`server/revalidation-routes.ts` declares `GET /api/control-owners/:id` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a63fc8a4fbc4b38e", "name": "Unused endpoint: GET /api/control-owners/control/:controlId", "shortDescription": {"text": "Unused endpoint: GET /api/control-owners/control/:controlId"}, "fullDescription": {"text": "`server/revalidation-routes.ts` declares `GET /api/control-owners/control/:controlId` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-26897949908af36c", "name": "Unused endpoint: POST /api/control-owners", "shortDescription": {"text": "Unused endpoint: POST /api/control-owners"}, "fullDescription": {"text": "`server/revalidation-routes.ts` declares `POST /api/control-owners` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c9b02410739e8708", "name": "Unused endpoint: PUT /api/control-owners/:id", "shortDescription": {"text": "Unused endpoint: PUT /api/control-owners/:id"}, "fullDescription": {"text": "`server/revalidation-routes.ts` declares `PUT /api/control-owners/:id` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-81caa5b7afa0d359", "name": "Unused endpoint: DELETE /api/control-owners/:id", "shortDescription": {"text": "Unused endpoint: DELETE /api/control-owners/:id"}, "fullDescription": {"text": "`server/revalidation-routes.ts` declares `DELETE /api/control-owners/:id` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-136c26df7371e891", "name": "Unused endpoint: GET /api/revalidations", "shortDescription": {"text": "Unused endpoint: GET /api/revalidations"}, "fullDescription": {"text": "`server/revalidation-routes.ts` declares `GET /api/revalidations` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6bf0cab63c4561ef", "name": "Unused endpoint: GET /api/revalidations/:id", "shortDescription": {"text": "Unused endpoint: GET /api/revalidations/:id"}, "fullDescription": {"text": "`server/revalidation-routes.ts` declares `GET /api/revalidations/:id` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1b4b99d0e259f786", "name": "Unused endpoint: GET /api/revalidations/control/:controlId", "shortDescription": {"text": "Unused endpoint: GET /api/revalidations/control/:controlId"}, "fullDescription": {"text": "`server/revalidation-routes.ts` declares `GET /api/revalidations/control/:controlId` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7ca6dc12083c2615", "name": "Unused endpoint: GET /api/revalidations/latest/control/:controlId", "shortDescription": {"text": "Unused endpoint: GET /api/revalidations/latest/control/:controlId"}, "fullDescription": {"text": "`server/revalidation-routes.ts` declares `GET /api/revalidations/latest/control/:controlId` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4c6ebf4a3e7ce8f8", "name": "Unused endpoint: POST /api/revalidations", "shortDescription": {"text": "Unused endpoint: POST /api/revalidations"}, "fullDescription": {"text": "`server/revalidation-routes.ts` declares `POST /api/revalidations` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-368ce11fa7ec8d86", "name": "Unused endpoint: PUT /api/revalidations/:id", "shortDescription": {"text": "Unused endpoint: PUT /api/revalidations/:id"}, "fullDescription": {"text": "`server/revalidation-routes.ts` declares `PUT /api/revalidations/:id` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-11894c067ab0488b", "name": "Unused endpoint: GET /api/revalidation-policies", "shortDescription": {"text": "Unused endpoint: GET /api/revalidation-policies"}, "fullDescription": {"text": "`server/revalidation-routes.ts` declares `GET /api/revalidation-policies` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bb2064ac715d711d", "name": "Unused endpoint: GET /api/revalidation-policies/:id", "shortDescription": {"text": "Unused endpoint: GET /api/revalidation-policies/:id"}, "fullDescription": {"text": "`server/revalidation-routes.ts` declares `GET /api/revalidation-policies/:id` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-05023dc827139fd4", "name": "Unused endpoint: GET /api/revalidation-policies/risk-level/:riskLevel", "shortDescription": {"text": "Unused endpoint: GET /api/revalidation-policies/risk-level/:riskLevel"}, "fullDescription": {"text": "`server/revalidation-routes.ts` declares `GET /api/revalidation-policies/risk-level/:riskLevel` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5f376170e14e1e27", "name": "Unused endpoint: POST /api/revalidation-policies", "shortDescription": {"text": "Unused endpoint: POST /api/revalidation-policies"}, "fullDescription": {"text": "`server/revalidation-routes.ts` declares `POST /api/revalidation-policies` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1726ebc7df36bb93", "name": "Unused endpoint: PUT /api/revalidation-policies/:id", "shortDescription": {"text": "Unused endpoint: PUT /api/revalidation-policies/:id"}, "fullDescription": {"text": "`server/revalidation-routes.ts` declares `PUT /api/revalidation-policies/:id` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6722276438d4e003", "name": "Unused endpoint: DELETE /api/revalidation-policies/:id", "shortDescription": {"text": "Unused endpoint: DELETE /api/revalidation-policies/:id"}, "fullDescription": {"text": "`server/revalidation-routes.ts` declares `DELETE /api/revalidation-policies/:id` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3e571fe15cdf5d1e", "name": "Unused endpoint: POST /api/revalidations/recalculate", "shortDescription": {"text": "Unused endpoint: POST /api/revalidations/recalculate"}, "fullDescription": {"text": "`server/revalidation-routes.ts` declares `POST /api/revalidations/recalculate` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-99079e53c5639a17", "name": "Unused endpoint: GET /api/revalidations/status-summary", "shortDescription": {"text": "Unused endpoint: GET /api/revalidations/status-summary"}, "fullDescription": {"text": "`server/revalidation-routes.ts` declares `GET /api/revalidations/status-summary` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-997465e2de383bb9", "name": "Unused endpoint: GET /api/revalidations/due-controls", "shortDescription": {"text": "Unused endpoint: GET /api/revalidations/due-controls"}, "fullDescription": {"text": "`server/revalidation-routes.ts` declares `GET /api/revalidations/due-controls` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-95f235fd6ce6304d", "name": "Unused endpoint: POST /evaluate", "shortDescription": {"text": "Unused endpoint: POST /evaluate"}, "fullDescription": {"text": "`server/approval-routes.ts` declares `POST /evaluate` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fd278a3c91aa5b3c", "name": "Unused endpoint: POST /process", "shortDescription": {"text": "Unused endpoint: POST /process"}, "fullDescription": {"text": "`server/approval-routes.ts` declares `POST /process` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9de4cecd0e235584", "name": "Unused endpoint: GET /pending", "shortDescription": {"text": "Unused endpoint: GET /pending"}, "fullDescription": {"text": "`server/approval-routes.ts` declares `GET /pending` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ceab2dc6c1bdde4b", "name": "Unused endpoint: POST /approve/:id", "shortDescription": {"text": "Unused endpoint: POST /approve/:id"}, "fullDescription": {"text": "`server/approval-routes.ts` declares `POST /approve/:id` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e60fc88ed5474046", "name": "Unused endpoint: POST /reject/:id", "shortDescription": {"text": "Unused endpoint: POST /reject/:id"}, "fullDescription": {"text": "`server/approval-routes.ts` declares `POST /reject/:id` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f415f9f3f0a1924c", "name": "Unused endpoint: POST /escalate/:id", "shortDescription": {"text": "Unused endpoint: POST /escalate/:id"}, "fullDescription": {"text": "`server/approval-routes.ts` declares `POST /escalate/:id` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-85e7498f5b0b2828", "name": "Unused endpoint: POST /bulk-approve", "shortDescription": {"text": "Unused endpoint: POST /bulk-approve"}, "fullDescription": {"text": "`server/approval-routes.ts` declares `POST /bulk-approve` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/25001"}, "properties": {"repository": "Clanvaro/unigrc-m-production", "repoUrl": "https://github.com/Clanvaro/unigrc-m-production", "branch": "main"}, "results": [{"ruleId": "scanner-647f19a9a124620e", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 vite.config.ts:107"}, "properties": {"repobilityId": "016ef2c9a9bb6e6c", "scanner": "scanner-primary", "fingerprint": "647f19a9a124620e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-7c92fdb5b8c1c4c9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 crear-indices-navegador-simple.js:13"}, "properties": {"repobilityId": "dbaef47087cea73b", "scanner": "scanner-primary", "fingerprint": "7c92fdb5b8c1c4c9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e429b9617ae1c0eb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 EJECUTAR-INDICES-CORREGIDOS-DIRECTO.js:7"}, "properties": {"repobilityId": "8e71670e8c4aa685", "scanner": "scanner-primary", "fingerprint": "e429b9617ae1c0eb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-270ac885589b4022", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 EJECUTAR-INDICES-CORREGIDOS-FINAL.js:7"}, "properties": {"repobilityId": "e0149ef43f973a60", "scanner": "scanner-primary", "fingerprint": "270ac885589b4022", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-06aebc87d7dff756", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 CREAR-INDICES-CORREGIDOS.js:7"}, "properties": {"repobilityId": "a9a3904a0c754f73", "scanner": "scanner-primary", "fingerprint": "06aebc87d7dff756", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8829d32b429027b5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server.js:14"}, "properties": {"repobilityId": "a9deebb5fdc93edc", "scanner": "scanner-primary", "fingerprint": "8829d32b429027b5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-869c623249ef20f1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 EJECUTAR-AHORA.js:7"}, "properties": {"repobilityId": "1b0da62a7ca02fb8", "scanner": "scanner-primary", "fingerprint": "869c623249ef20f1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-42de5176bb6301d4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 VER-ERRORES-INDICES.js:9"}, "properties": {"repobilityId": "42d697a852e6241c", "scanner": "scanner-primary", "fingerprint": "42de5176bb6301d4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f76d9f44b12e45b9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 crear-indices-desde-navegador.js:14"}, "properties": {"repobilityId": "d06ba378db4ae88d", "scanner": "scanner-primary", "fingerprint": "f76d9f44b12e45b9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f53fdba9a34dc1d0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/k6/risks-page-probe.js:79"}, "properties": {"repobilityId": "667dec50df2f4568", "scanner": "scanner-primary", "fingerprint": "f53fdba9a34dc1d0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d73ccd60f39a7d79", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/k6/org-gerencias-probe.js:69"}, "properties": {"repobilityId": "cf4af0ca9417fe16", "scanner": "scanner-primary", "fingerprint": "d73ccd60f39a7d79", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2127ba18826bc34b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/k6/spike-9am.js:80"}, "properties": {"repobilityId": "32e31b32a156e767", "scanner": "scanner-primary", "fingerprint": "2127ba18826bc34b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4695543238a926f9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/k6/stress-5-users-gcp.js:769"}, "properties": {"repobilityId": "d6fcd41e5913648b", "scanner": "scanner-primary", "fingerprint": "4695543238a926f9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6af81dcd07c6dae4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/k6/stress-4-users-intensive.js:572"}, "properties": {"repobilityId": "9fa71aef42b37061", "scanner": "scanner-primary", "fingerprint": "6af81dcd07c6dae4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0e47e5229835b6ee", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/k6/ci-smoke.js:81"}, "properties": {"repobilityId": "e05bf18f38343640", "scanner": "scanner-primary", "fingerprint": "0e47e5229835b6ee", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-251aaccfc82b4b31", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/k6/audit-tests-probe.js:68"}, "properties": {"repobilityId": "7e6f94ec05ffdbf8", "scanner": "scanner-primary", "fingerprint": "251aaccfc82b4b31", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d02b526cc9cdfdb3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/k6/stress-5-users-aws.js:632"}, "properties": {"repobilityId": "f454bd2d50e70311", "scanner": "scanner-primary", "fingerprint": "d02b526cc9cdfdb3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-991d61bedffca38a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/k6/stress-6-users.js:506"}, "properties": {"repobilityId": "b5d1b49b7a5cf654", "scanner": "scanner-primary", "fingerprint": "991d61bedffca38a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d6121a7fc44c645d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/k6/page-walkthrough.js:425"}, "properties": {"repobilityId": "dbd1406add26486a", "scanner": "scanner-primary", "fingerprint": "d6121a7fc44c645d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-117d78409a0d0c94", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/k6/stress-light.js:1000"}, "properties": {"repobilityId": "d7bd808859845344", "scanner": "scanner-primary", "fingerprint": "117d78409a0d0c94", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1ca2e3e37f5c4b49", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/page-smoke.spec.ts:66"}, "properties": {"repobilityId": "cb693e65d077c58e", "scanner": "scanner-primary", "fingerprint": "1ca2e3e37f5c4b49", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f7f12e5efe3c29bd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/api-integration.spec.ts:371"}, "properties": {"repobilityId": "1c8fdc642e1df212", "scanner": "scanner-primary", "fingerprint": "f7f12e5efe3c29bd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-de2834c1cb466d89", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/tenant-isolation-full.spec.ts:135"}, "properties": {"repobilityId": "89b6c575f4caf058", "scanner": "scanner-primary", "fingerprint": "de2834c1cb466d89", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-62a6eb2b4cd0e561", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/debug-cc.spec.ts:27"}, "properties": {"repobilityId": "6c66c6ea4e08eb66", "scanner": "scanner-primary", "fingerprint": "62a6eb2b4cd0e561", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-45d0a20e4f9e7e6d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/cache-coherence.spec.ts:128"}, "properties": {"repobilityId": "c4698841f58ab77d", "scanner": "scanner-primary", "fingerprint": "45d0a20e4f9e7e6d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3dbfcc0a3daf49ca", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/debug-login.spec.ts:23"}, "properties": {"repobilityId": "e5a3c77a3a3fcdae", "scanner": "scanner-primary", "fingerprint": "3dbfcc0a3daf49ca", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-28f7a93204d900d7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-grafana-push.ts:46"}, "properties": {"repobilityId": "a4dc7b98e2d05a4a", "scanner": "scanner-primary", "fingerprint": "28f7a93204d900d7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2b2ed2aeb94fa0fe", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-stability-alert.ts:79"}, "properties": {"repobilityId": "4b6cd711eef4c851", "scanner": "scanner-primary", "fingerprint": "2b2ed2aeb94fa0fe", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d6b6d6ecbe47ff5b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/index.ts:86"}, "properties": {"repobilityId": "b4961a877930fd2f", "scanner": "scanner-primary", "fingerprint": "d6b6d6ecbe47ff5b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0021fc5e61da08cb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/seed-200-risks-100-controls-100-events.ts:214"}, "properties": {"repobilityId": "2c6c09a214f8a6de", "scanner": "scanner-primary", "fingerprint": "0021fc5e61da08cb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5e9a9a8242107533", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/security.ts:440"}, "properties": {"repobilityId": "7ee99257fa65c756", "scanner": "scanner-primary", "fingerprint": "5e9a9a8242107533", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3dd5f24e6bf55d6d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/objectStorage.ts:86"}, "properties": {"repobilityId": "d6d3ec96ee4e2f31", "scanner": "scanner-primary", "fingerprint": "3dd5f24e6bf55d6d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e5f4526fa9a63a29", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/microsoftAuth.ts:31"}, "properties": {"repobilityId": "715f7a92e8b87742", "scanner": "scanner-primary", "fingerprint": "e5f4526fa9a63a29", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-dd8220a34f98d305", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/replitAuth.ts:245"}, "properties": {"repobilityId": "784691753e25b409", "scanner": "scanner-primary", "fingerprint": "dd8220a34f98d305", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-831ada2fb240e063", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/approval-engine.ts:55"}, "properties": {"repobilityId": "7672d87691a5691b", "scanner": "scanner-primary", "fingerprint": "831ada2fb240e063", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4d4ab09b38c43907", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/ai-assistant-routes.ts:181"}, "properties": {"repobilityId": "e4a4ee3405da17a4", "scanner": "scanner-primary", "fingerprint": "4d4ab09b38c43907", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-024a4590ca326278", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/email-service.ts:14"}, "properties": {"repobilityId": "402f3a10789faf8b", "scanner": "scanner-primary", "fingerprint": "024a4590ca326278", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-40017eea231a0f94", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/seed-50-risks.ts:27"}, "properties": {"repobilityId": "48f82fc3eddadc17", "scanner": "scanner-primary", "fingerprint": "40017eea231a0f94", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9cbc5cc4f137da66", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/seed-100-controls.ts:38"}, "properties": {"repobilityId": "dea3b16180c5acbf", "scanner": "scanner-primary", "fingerprint": "9cbc5cc4f137da66", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7ffa4336d327392d", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 server/intelligent-recommendation-engine.ts:209"}, "properties": {"repobilityId": "4276b4e86ab9d606", "scanner": "scanner-primary", "fingerprint": "7ffa4336d327392d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-0730304e315a11d0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/intelligent-recommendation-engine.ts:43"}, "properties": {"repobilityId": "4b3e5b29e7064e66", "scanner": "scanner-primary", "fingerprint": "0730304e315a11d0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3da406f2b02f15c0", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 server/notification-service.ts:539"}, "properties": {"repobilityId": "cfdd5487b16653d6", "scanner": "scanner-primary", "fingerprint": "3da406f2b02f15c0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-ce29721f07dc8e87", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/notification-service.ts:117"}, "properties": {"repobilityId": "f8764d91e38ef1a1", "scanner": "scanner-primary", "fingerprint": "ce29721f07dc8e87", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2afe6b0b02822645", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/pattern-recognition-engine.ts:22"}, "properties": {"repobilityId": "bf3c4ff63a1b4759", "scanner": "scanner-primary", "fingerprint": "2afe6b0b02822645", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3432210b69c7a40f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/auth-cache.ts:121"}, "properties": {"repobilityId": "197590975834bf6b", "scanner": "scanner-primary", "fingerprint": "3432210b69c7a40f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6bde9b7d2e04600b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/ai-cache.ts:72"}, "properties": {"repobilityId": "634e665fda25cd4b", "scanner": "scanner-primary", "fingerprint": "6bde9b7d2e04600b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3894c25f4ddd8b28", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/approval-system-seeder.ts:30"}, "properties": {"repobilityId": "bb7ba1a131759498", "scanner": "scanner-primary", "fingerprint": "3894c25f4ddd8b28", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a397aa6d98a9903b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/sentry.ts:112"}, "properties": {"repobilityId": "914d5ef3948c1217", "scanner": "scanner-primary", "fingerprint": "a397aa6d98a9903b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-36cc151ba174c507", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/deadline-monitor-service.ts:34"}, "properties": {"repobilityId": "5fe65f70b9e3c41f", "scanner": "scanner-primary", "fingerprint": "36cc151ba174c507", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-44fcfb40d928e107", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/samlAuth.ts:274"}, "properties": {"repobilityId": "0bfc0a39a41d7005", "scanner": "scanner-primary", "fingerprint": "44fcfb40d928e107", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3ae46266c416d01d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/procedure-recommendation-engine.ts:24"}, "properties": {"repobilityId": "5505765502931f36", "scanner": "scanner-primary", "fingerprint": "3ae46266c416d01d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2a9d26c5bda00aa0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/notification-scheduler.ts:53"}, "properties": {"repobilityId": "ecb85366213c0a52", "scanner": "scanner-primary", "fingerprint": "2a9d26c5bda00aa0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b8b2ebed508e08f0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/revalidation-routes.ts:123"}, "properties": {"repobilityId": "c854dafa79b99903", "scanner": "scanner-primary", "fingerprint": "b8b2ebed508e08f0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-293ca83d94f3f336", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/audit-test-generator.ts:31"}, "properties": {"repobilityId": "ed9ca29e08fff83e", "scanner": "scanner-primary", "fingerprint": "293ca83d94f3f336", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f8cda65ddef05bdc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/escalation-management.ts:48"}, "properties": {"repobilityId": "797b33dcb7dba7a2", "scanner": "scanner-primary", "fingerprint": "f8cda65ddef05bdc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-eb6c4ed63c561121", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/approval-routes.ts:63"}, "properties": {"repobilityId": "3395f0091a14fdcb", "scanner": "scanner-primary", "fingerprint": "eb6c4ed63c561121", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e3ad8d1da06a63be", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/ai-grc-routes.ts:1033"}, "properties": {"repobilityId": "101008947549f3e5", "scanner": "scanner-primary", "fingerprint": "e3ad8d1da06a63be", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-be10e30d223cfe47", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/timeline-intelligence-service.ts:24"}, "properties": {"repobilityId": "c3b971587aac7830", "scanner": "scanner-primary", "fingerprint": "be10e30d223cfe47", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-da7e8f31d1b2529b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/auditor-assignment-intelligence.ts:24"}, "properties": {"repobilityId": "b97d7cd8f3bdb7cf", "scanner": "scanner-primary", "fingerprint": "da7e8f31d1b2529b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-57854526802b224a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/seed-data.ts:26"}, "properties": {"repobilityId": "dd47dcc740520f1f", "scanner": "scanner-primary", "fingerprint": "57854526802b224a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-339c1daa349e3da8", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 server/analytics-service.ts:196"}, "properties": {"repobilityId": "6d0fc83a63ca3c0b", "scanner": "scanner-primary", "fingerprint": "339c1daa349e3da8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-49ceb4bf6393f3e1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/analytics-service.ts:44"}, "properties": {"repobilityId": "b94eb15eff888d60", "scanner": "scanner-primary", "fingerprint": "49ceb4bf6393f3e1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8a80dc2efd74c4a8", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 server/export-service.ts:1009"}, "properties": {"repobilityId": "ab09ec9a8a3465d0", "scanner": "scanner-primary", "fingerprint": "8a80dc2efd74c4a8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-8d622c1555fc9aef", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/export-service.ts:1010"}, "properties": {"repobilityId": "fbe84fa8596c58dd", "scanner": "scanner-primary", "fingerprint": "8d622c1555fc9aef", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-92f88be2100d75bc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/routes-admin-indices.ts:149"}, "properties": {"repobilityId": "d530cf1e738f7d7c", "scanner": "scanner-primary", "fingerprint": "92f88be2100d75bc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e0fc1498b92bcf28", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/db-health-check.ts:101"}, "properties": {"repobilityId": "5edb2c1fc1e5d142", "scanner": "scanner-primary", "fingerprint": "e0fc1498b92bcf28", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-93ffb84f6e2e5b5e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/template-seeding-service.ts:22"}, "properties": {"repobilityId": "6dd1b6a85bf8db9c", "scanner": "scanner-primary", "fingerprint": "93ffb84f6e2e5b5e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0d32382f4eaafc25", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/db-optimize.ts:15"}, "properties": {"repobilityId": "d3a1d6f6a8a5a78d", "scanner": "scanner-primary", "fingerprint": "0d32382f4eaafc25", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-649eec96f48f31fe", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/cache-helpers.ts:51"}, "properties": {"repobilityId": "4f84888f3e273ce4", "scanner": "scanner-primary", "fingerprint": "649eec96f48f31fe", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-57a9c0738e7e6901", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/approval-analytics.ts:34"}, "properties": {"repobilityId": "b7b44a5bc6fb6a30", "scanner": "scanner-primary", "fingerprint": "57a9c0738e7e6901", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7a5bd0d9d1de62bb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/seed-50-risk-events.ts:28"}, "properties": {"repobilityId": "879ce8702b2f3055", "scanner": "scanner-primary", "fingerprint": "7a5bd0d9d1de62bb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cd0aaf10b0d17886", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/db.ts:70"}, "properties": {"repobilityId": "d6b4a075df42d670", "scanner": "scanner-primary", "fingerprint": "cd0aaf10b0d17886", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ed95fd9d610cc94f", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 server/analytics-routes.ts:371"}, "properties": {"repobilityId": "c1250b7ba2423220", "scanner": "scanner-primary", "fingerprint": "ed95fd9d610cc94f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-748dc98a276b3c54", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/ml-model-manager.ts:22"}, "properties": {"repobilityId": "458e8e2023a8b58d", "scanner": "scanner-primary", "fingerprint": "748dc98a276b3c54", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ec0b2a65c9cbdc7f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/test-approval-workflows.ts:20"}, "properties": {"repobilityId": "2db3ab50cbd5e385", "scanner": "scanner-primary", "fingerprint": "ec0b2a65c9cbdc7f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-514fce932986fed9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/approval-storage.ts:604"}, "properties": {"repobilityId": "e28a07b159b16926", "scanner": "scanner-primary", "fingerprint": "514fce932986fed9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-daaef56f0c862182", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/static.ts:13"}, "properties": {"repobilityId": "7cebd5b0c7afa72f", "scanner": "scanner-primary", "fingerprint": "daaef56f0c862182", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a24be6e2cd19ed4b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/openai-service.ts:47"}, "properties": {"repobilityId": "3237b1675cee2a12", "scanner": "scanner-primary", "fingerprint": "a24be6e2cd19ed4b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fc0d2bb35e11ff9d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/seed-porter-value-chain.ts:11"}, "properties": {"repobilityId": "2f16399d2c7614d0", "scanner": "scanner-primary", "fingerprint": "fc0d2bb35e11ff9d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7f5ba85a28e013cd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/jobs/refresh-risk-events-list-view.ts:37"}, "properties": {"repobilityId": "faf84ef202889fb9", "scanner": "scanner-primary", "fingerprint": "7f5ba85a28e013cd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-76abcb15b5047cbc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/jobs/refresh-controls-list-view.ts:39"}, "properties": {"repobilityId": "0b81edb3bf51ff3d", "scanner": "scanner-primary", "fingerprint": "76abcb15b5047cbc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c81846066e8890d5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/jobs/materialized-views-health.ts:469"}, "properties": {"repobilityId": "268d10e041aa9886", "scanner": "scanner-primary", "fingerprint": "c81846066e8890d5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-850f608885b3f570", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/jobs/refresh-action-plans-list-view.ts:46"}, "properties": {"repobilityId": "f0d07b86fc31a7f4", "scanner": "scanner-primary", "fingerprint": "850f608885b3f570", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-611cfc74ac5ba15a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/jobs/refresh-risk-list-view.ts:43"}, "properties": {"repobilityId": "957b8e165b84dd67", "scanner": "scanner-primary", "fingerprint": "611cfc74ac5ba15a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3e2443a411971877", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/set-admin-password.ts:29"}, "properties": {"repobilityId": "8b91f4b7e16de729", "scanner": "scanner-primary", "fingerprint": "3e2443a411971877", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-76ee3993bbda28cf", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/utils/secret-manager.ts:19"}, "properties": {"repobilityId": "e3d005722029a450", "scanner": "scanner-primary", "fingerprint": "76ee3993bbda28cf", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-882c32c321887050", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/performance/index.ts:24"}, "properties": {"repobilityId": "15d5b6f7c0b8a04a", "scanner": "scanner-primary", "fingerprint": "882c32c321887050", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1a70af9ed4426654", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/performance/compression.ts:93"}, "properties": {"repobilityId": "7788b3c68daa718a", "scanner": "scanner-primary", "fingerprint": "1a70af9ed4426654", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1f7b4d1f79adb24a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/performance/pool-metrics.ts:58"}, "properties": {"repobilityId": "6f20e014ac2bf54b", "scanner": "scanner-primary", "fingerprint": "1f7b4d1f79adb24a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d713b36549dc3412", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/middleware/system-metrics.ts:78"}, "properties": {"repobilityId": "f49a96c027e6c66f", "scanner": "scanner-primary", "fingerprint": "d713b36549dc3412", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-660194dc5653ec1d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/services/fileStreaming.ts:33"}, "properties": {"repobilityId": "b0e9f9b8c332ad20", "scanner": "scanner-primary", "fingerprint": "660194dc5653ec1d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4b03f8c162257b3e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/services/EmailServiceFactory.ts:76"}, "properties": {"repobilityId": "7a550f03ad54f4c7", "scanner": "scanner-primary", "fingerprint": "4b03f8c162257b3e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-05a491645585ece5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/services/MailgunEmailService.ts:41"}, "properties": {"repobilityId": "0f193fc61f2d5c35", "scanner": "scanner-primary", "fingerprint": "05a491645585ece5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8c3893e8544f1420", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/services/reports-page-service.ts:217"}, "properties": {"repobilityId": "b5ef9e0a522156c6", "scanner": "scanner-primary", "fingerprint": "8c3893e8544f1420", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3c20cfe98321040f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/services/SMTPEmailService.ts:42"}, "properties": {"repobilityId": "18afea871349f068", "scanner": "scanner-primary", "fingerprint": "3c20cfe98321040f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ecd6ef48d5e91355", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/services/two-tier-cache.ts:407"}, "properties": {"repobilityId": "28d43a112938c529", "scanner": "scanner-primary", "fingerprint": "ecd6ef48d5e91355", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cd188d49fccc9e96", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/services/cache-core.ts:117"}, "properties": {"repobilityId": "812287c45da1891c", "scanner": "scanner-primary", "fingerprint": "cd188d49fccc9e96", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bfcf738b58838d1d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/services/processes-page-service.ts:105"}, "properties": {"repobilityId": "17c67c8683f1ff37", "scanner": "scanner-primary", "fingerprint": "bfcf738b58838d1d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-df11bfa44b50befc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/services/local-cache.ts:207"}, "properties": {"repobilityId": "cf335f88e5ec9375", "scanner": "scanner-primary", "fingerprint": "df11bfa44b50befc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-90242a5583f66b2d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/services/import-service.ts:621"}, "properties": {"repobilityId": "fa9c56bf28590a57", "scanner": "scanner-primary", "fingerprint": "90242a5583f66b2d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c43590044685fe9c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/services/risks-page-service.ts:603"}, "properties": {"repobilityId": "fb1ffaad3e9ffdb0", "scanner": "scanner-primary", "fingerprint": "c43590044685fe9c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-65627124c16a980e", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 server/services/queue.ts:210"}, "properties": {"repobilityId": "863700b02d6bba43", "scanner": "scanner-primary", "fingerprint": "65627124c16a980e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-80bc80ad1fe7a61f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/services/queue.ts:30"}, "properties": {"repobilityId": "7af800c563a5668e", "scanner": "scanner-primary", "fingerprint": "80bc80ad1fe7a61f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9de0ba742fb41d98", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/services/unified-cache-config.ts:220"}, "properties": {"repobilityId": "a1648e24736146db", "scanner": "scanner-primary", "fingerprint": "9de0ba742fb41d98", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0ff3ef49e9f15fd2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/services/unified-prewarm-service.ts:2215"}, "properties": {"repobilityId": "b4e48808bd70acc5", "scanner": "scanner-primary", "fingerprint": "0ff3ef49e9f15fd2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-be2744ccda5d3ea2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/services/redis.ts:379"}, "properties": {"repobilityId": "5ddacd4422b8d1ac", "scanner": "scanner-primary", "fingerprint": "be2744ccda5d3ea2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cda3c9e23d1f0c2f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 client/src/sentry.ts:125"}, "properties": {"repobilityId": "3e62fbcc25fbc65a", "scanner": "scanner-primary", "fingerprint": "cda3c9e23d1f0c2f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-12dbdda2e5802ac3", "level": "note", "message": {"text": "React Flow <Controls> without dark theming \u2014 client/src/App.tsx:362"}, "properties": {"repobilityId": "1da102886276a7c7", "scanner": "scanner-primary", "fingerprint": "12dbdda2e5802ac3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.controls.no-bg"]}}, {"ruleId": "scanner-1b5c5d19b3ce995c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 client/src/App.tsx:244"}, "properties": {"repobilityId": "809a80dda660691b", "scanner": "scanner-primary", "fingerprint": "1b5c5d19b3ce995c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ad88a88264d37ddd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/ManageControlRisksContent.tsx:336"}, "properties": {"repobilityId": "5a38d7be5adb1310", "scanner": "scanner-primary", "fingerprint": "ad88a88264d37ddd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f7421803806ea11e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/RisksByProcess.tsx:190"}, "properties": {"repobilityId": "61d1de16e934e547", "scanner": "scanner-primary", "fingerprint": "f7421803806ea11e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1cd06502704afa5a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/ViewRiskActionPlansDialog.tsx:438"}, "properties": {"repobilityId": "2e622abfd2733d2b", "scanner": "scanner-primary", "fingerprint": "1cd06502704afa5a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-223635e673b42ec1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/command-palette.tsx:309"}, "properties": {"repobilityId": "6f9d2912917dc8a6", "scanner": "scanner-primary", "fingerprint": "223635e673b42ec1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f824b41acffba7fa", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 client/src/components/PrefetchLink.tsx:125"}, "properties": {"repobilityId": "0a2658bf5cc81f55", "scanner": "scanner-primary", "fingerprint": "f824b41acffba7fa", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-963234dba12dd861", "level": "note", "message": {"text": "React Flow <MiniMap> without dark background \u2014 client/src/components/GerenciasOrganigrama.tsx:372"}, "properties": {"repobilityId": "fb7f52be31ef0472", "scanner": "scanner-primary", "fingerprint": "963234dba12dd861", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.minimap.no-bg"]}}, {"ruleId": "scanner-fd295b29f91d8679", "level": "note", "message": {"text": "React Flow <Controls> without dark theming \u2014 client/src/components/GerenciasOrganigrama.tsx:371"}, "properties": {"repobilityId": "e99e75a039a6a009", "scanner": "scanner-primary", "fingerprint": "fd295b29f91d8679", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.controls.no-bg"]}}, {"ruleId": "scanner-85c18b268eb98fba", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/GerenciasOrganigrama.tsx:135"}, "properties": {"repobilityId": "ebaaad3096ea79b1", "scanner": "scanner-primary", "fingerprint": "85c18b268eb98fba", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-66856d8be1bedd8c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/ManageRiskControlsDialog.tsx:525"}, "properties": {"repobilityId": "11caeb75a3a970b3", "scanner": "scanner-primary", "fingerprint": "66856d8be1bedd8c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-567a886adf1a4f1e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 client/src/components/ManageRiskControlsDialog.tsx:134"}, "properties": {"repobilityId": "dead2fc6a7918292", "scanner": "scanner-primary", "fingerprint": "567a886adf1a4f1e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a0348b68737126d1", "level": "note", "message": {"text": "React Flow <Controls> without dark theming \u2014 client/src/components/RiskRelationshipMap.tsx:469"}, "properties": {"repobilityId": "8d15d5f294a4e867", "scanner": "scanner-primary", "fingerprint": "a0348b68737126d1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.controls.no-bg"]}}, {"ruleId": "scanner-5d030199ed090923", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/RiskRelationshipMap.tsx:42"}, "properties": {"repobilityId": "78b5e0ffa6a7d7ad", "scanner": "scanner-primary", "fingerprint": "5d030199ed090923", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-505ace4484fd95e6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 client/src/components/BootstrapInitializer.tsx:74"}, "properties": {"repobilityId": "62d595ad0ff6d301", "scanner": "scanner-primary", "fingerprint": "505ace4484fd95e6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-50ef7189dc403832", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/RisksByOwner.tsx:152"}, "properties": {"repobilityId": "604122045172d831", "scanner": "scanner-primary", "fingerprint": "50ef7189dc403832", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-02d54341ff8d5a95", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 client/src/components/ai-assistant-dialog.tsx:132"}, "properties": {"repobilityId": "4d748a3121a9004d", "scanner": "scanner-primary", "fingerprint": "02d54341ff8d5a95", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0144ec5423519084", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/ManageRiskEventsContent.tsx:238"}, "properties": {"repobilityId": "6b14da8978ea7713", "scanner": "scanner-primary", "fingerprint": "0144ec5423519084", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-87ceaf7052741078", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/audit-test-workspace/TestHeader.tsx:193"}, "properties": {"repobilityId": "61a3e2cb3009ca07", "scanner": "scanner-primary", "fingerprint": "87ceaf7052741078", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-acd3d7713938e020", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/audit-test-workspace/SupervisorReview.tsx:243"}, "properties": {"repobilityId": "5ab81cea085dc51f", "scanner": "scanner-primary", "fingerprint": "acd3d7713938e020", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1b6614a81baccd20", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/audit-test-workspace/QuickWorkLog.tsx:322"}, "properties": {"repobilityId": "e7a04f46faa1f724", "scanner": "scanner-primary", "fingerprint": "1b6614a81baccd20", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fd684d63bfe5300e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/audit-test-workspace/ContextualEvidence.tsx:359"}, "properties": {"repobilityId": "a58203d66473e23e", "scanner": "scanner-primary", "fingerprint": "fd684d63bfe5300e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-df18fe5a13672d6b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/risk-matrix/criticality-gap-matrix.tsx:70"}, "properties": {"repobilityId": "307fb67e8d7306f1", "scanner": "scanner-primary", "fingerprint": "df18fe5a13672d6b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a81edcb288dd085a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/probability/ProbabilityHeatMap.tsx:210"}, "properties": {"repobilityId": "e768431e7320ffa9", "scanner": "scanner-primary", "fingerprint": "a81edcb288dd085a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9af5e3a45e9530d8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/dashboard-widgets/DeadlineCalendar.tsx:127"}, "properties": {"repobilityId": "c67a921b0db488fd", "scanner": "scanner-primary", "fingerprint": "9af5e3a45e9530d8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-38ae4b6cd59c5fac", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/dashboard-widgets/TeamPerformanceTable.tsx:126"}, "properties": {"repobilityId": "9900aa740ef01dae", "scanner": "scanner-primary", "fingerprint": "38ae4b6cd59c5fac", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c3e43ffeb28e9a04", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 client/src/components/forms/process-owner-form-v2.tsx:75"}, "properties": {"repobilityId": "1f913c73a327ab0b", "scanner": "scanner-primary", "fingerprint": "c3e43ffeb28e9a04", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d996d6e33be99e4c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/forms/action-plan-form.tsx:682"}, "properties": {"repobilityId": "b0906f381663aa89", "scanner": "scanner-primary", "fingerprint": "d996d6e33be99e4c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ac9d7e2ed3c6eaad", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/forms/risk-event-form.tsx:1210"}, "properties": {"repobilityId": "0c63595725ce09b4", "scanner": "scanner-primary", "fingerprint": "ac9d7e2ed3c6eaad", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8a3c60baf5aa02d5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/forms/compliance-document-form.tsx:548"}, "properties": {"repobilityId": "ee60bade6d90fd50", "scanner": "scanner-primary", "fingerprint": "8a3c60baf5aa02d5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-93904d9d2ea44475", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 client/src/components/forms/compliance-document-form.tsx:243"}, "properties": {"repobilityId": "06da21c9d63368e8", "scanner": "scanner-primary", "fingerprint": "93904d9d2ea44475", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cd84947b33b9f529", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 client/src/components/forms/regulation-form.tsx:827"}, "properties": {"repobilityId": "82d7c76d83c3d5d7", "scanner": "scanner-primary", "fingerprint": "cd84947b33b9f529", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-84e1302f1b7e2a70", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/layout/sidebar.tsx:963"}, "properties": {"repobilityId": "437b48776f4ec88d", "scanner": "scanner-primary", "fingerprint": "84e1302f1b7e2a70", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b71518ae56c9f3ba", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/audit-generation/RiskSelectionPanel.tsx:388"}, "properties": {"repobilityId": "3bfc5843b6c5be3e", "scanner": "scanner-primary", "fingerprint": "b71518ae56c9f3ba", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-25461b5c2a850264", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/audit-sections/AuditDashboardSection.tsx:259"}, "properties": {"repobilityId": "a7f82c39efeb60d1", "scanner": "scanner-primary", "fingerprint": "25461b5c2a850264", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a32d523dc3595aa9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/audit-sections/AuditWorkProgramSection.tsx:606"}, "properties": {"repobilityId": "3fdc90d183d63623", "scanner": "scanner-primary", "fingerprint": "a32d523dc3595aa9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a9b6943ab616f957", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 client/src/components/audit-sections/AITestSuggestionDialog.tsx:68"}, "properties": {"repobilityId": "b3f830fa0a2d387a", "scanner": "scanner-primary", "fingerprint": "a9b6943ab616f957", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6b082b7797390d30", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/ai/DuplicateCheckButton.tsx:152"}, "properties": {"repobilityId": "6d2003b75d97b1ce", "scanner": "scanner-primary", "fingerprint": "6b082b7797390d30", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3ef50e63bdd24e15", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/ai/ControlSuggestionButton.tsx:155"}, "properties": {"repobilityId": "cf457c85a402c5ce", "scanner": "scanner-primary", "fingerprint": "3ef50e63bdd24e15", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-03eb7fd80fa0c120", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/ui/combobox.tsx:83"}, "properties": {"repobilityId": "469d95c51f8d62c5", "scanner": "scanner-primary", "fingerprint": "03eb7fd80fa0c120", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f8ee19347be23834", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/audit-detail.tsx:207"}, "properties": {"repobilityId": "f66fa627df9b65eb", "scanner": "scanner-primary", "fingerprint": "f8ee19347be23834", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a4eacb776b76d1e2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/SupervisorDashboard.tsx:491"}, "properties": {"repobilityId": "c31e83a789e2cdec", "scanner": "scanner-primary", "fingerprint": "a4eacb776b76d1e2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-549d04ecd650c7f1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 client/src/pages/login.tsx:112"}, "properties": {"repobilityId": "e5c092e1a1d418c9", "scanner": "scanner-primary", "fingerprint": "549d04ecd650c7f1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b0832c3968ac6586", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/audits.tsx:84"}, "properties": {"repobilityId": "0baa74dde5d767c8", "scanner": "scanner-primary", "fingerprint": "b0832c3968ac6586", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d2f81ec094b17d6a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/team-members.tsx:423"}, "properties": {"repobilityId": "748ef65017b0ec5d", "scanner": "scanner-primary", "fingerprint": "d2f81ec094b17d6a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c98ef86327f37a7b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/processes.tsx:1570"}, "properties": {"repobilityId": "f6f044d5c67c9dc4", "scanner": "scanner-primary", "fingerprint": "c98ef86327f37a7b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-206fc6002e0ae00b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 client/src/pages/audit-plan-wizard.tsx:720"}, "properties": {"repobilityId": "f7ab9d7660cc5df3", "scanner": "scanner-primary", "fingerprint": "206fc6002e0ae00b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-657ac0124b8bc7a9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/risks.tsx:107"}, "properties": {"repobilityId": "15162d5b2a42a3e3", "scanner": "scanner-primary", "fingerprint": "657ac0124b8bc7a9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-447db746b6174414", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/compliance-audits.tsx:773"}, "properties": {"repobilityId": "d69e395c151123d0", "scanner": "scanner-primary", "fingerprint": "447db746b6174414", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2716ac9f5c843823", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/import.tsx:497"}, "properties": {"repobilityId": "89ed782ee7c26639", "scanner": "scanner-primary", "fingerprint": "2716ac9f5c843823", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5063c725fce3180a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/regulations.tsx:453"}, "properties": {"repobilityId": "e810e00c10ee4be9", "scanner": "scanner-primary", "fingerprint": "5063c725fce3180a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-960b6933d7db48e5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/action-plans.tsx:1214"}, "properties": {"repobilityId": "0b09a64a631e7444", "scanner": "scanner-primary", "fingerprint": "960b6933d7db48e5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6874df810f6ecba1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/compliance-tests.tsx:230"}, "properties": {"repobilityId": "b8a3c33962c717b5", "scanner": "scanner-primary", "fingerprint": "6874df810f6ecba1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-614f8fe35f0e162b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/audit-findings.tsx:541"}, "properties": {"repobilityId": "d5ae5819d8b3e20f", "scanner": "scanner-primary", "fingerprint": "614f8fe35f0e162b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-32d2056dad11408e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/risk-matrix.tsx:110"}, "properties": {"repobilityId": "f900e526cfa691d5", "scanner": "scanner-primary", "fingerprint": "32d2056dad11408e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-26a2af8e73d9de8c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/ApprovalManagement.tsx:439"}, "properties": {"repobilityId": "660a86c558d945db", "scanner": "scanner-primary", "fingerprint": "26a2af8e73d9de8c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-753afca20ea4fdb3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/trash.tsx:273"}, "properties": {"repobilityId": "fe64ae4b83fa162e", "scanner": "scanner-primary", "fingerprint": "753afca20ea4fdb3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-112fb4cd192f54dd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/working-papers.tsx:414"}, "properties": {"repobilityId": "0c1cd81d530c812b", "scanner": "scanner-primary", "fingerprint": "112fb4cd192f54dd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-020c46024bf8f108", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/continuous-audit.tsx:586"}, "properties": {"repobilityId": "b8e318a3979fcf20", "scanner": "scanner-primary", "fingerprint": "020c46024bf8f108", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-01e3e134e612caeb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/support.tsx:396"}, "properties": {"repobilityId": "9a24232d6f70ddfb", "scanner": "scanner-primary", "fingerprint": "01e3e134e612caeb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c0e0ec6f4fa06299", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/organization/processes.tsx:2075"}, "properties": {"repobilityId": "ad336c15b4bf3530", "scanner": "scanner-primary", "fingerprint": "c0e0ec6f4fa06299", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0daf483d5f92e2a2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/organization/gerencias.tsx:594"}, "properties": {"repobilityId": "399c5c5c3b8eae9f", "scanner": "scanner-primary", "fingerprint": "0daf483d5f92e2a2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-42513b3f25425a9a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/config/probability-criteria.tsx:162"}, "properties": {"repobilityId": "d5b61b9eca59d374", "scanner": "scanner-primary", "fingerprint": "42513b3f25425a9a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a9c3dddf8a9d386e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 client/src/lib/queryClient.ts:167"}, "properties": {"repobilityId": "f22503679dfdda61", "scanner": "scanner-primary", "fingerprint": "a9c3dddf8a9d386e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5cfde7a896532a23", "level": "warning", "message": {"text": "Privileged port 23 in use"}, "properties": {"repobilityId": "a1230e3dfc4becfa", "scanner": "scanner-primary", "fingerprint": "5cfde7a896532a23", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "gcp/setup-backup-gcp.sh"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-961ce98fa373ba6a", "level": "warning", "message": {"text": "Privileged port 13 in use"}, "properties": {"repobilityId": "79d721e4d6f64798", "scanner": "scanner-primary", "fingerprint": "961ce98fa373ba6a", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/schema-drift-check.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6f2c014dd7c164b1", "level": "warning", "message": {"text": "Privileged port 14 in use"}, "properties": {"repobilityId": "2dbd4b719a1412ff", "scanner": "scanner-primary", "fingerprint": "6f2c014dd7c164b1", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/db-perf-audit.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ab89b9f966d2b619", "level": "warning", "message": {"text": "Privileged port 587 in use"}, "properties": {"repobilityId": "a87a96c3b2e62c08", "scanner": "scanner-primary", "fingerprint": "ab89b9f966d2b619", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "client/src/pages/config/email-config.tsx"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3fad4f283eec7d6b", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:24-alpine"}, "properties": {"repobilityId": "e067ebad641ae6e2", "scanner": "scanner-primary", "fingerprint": "3fad4f283eec7d6b", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 8}}}]}, {"ruleId": "scanner-3fad4f283eec7d6b", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:24-alpine"}, "properties": {"repobilityId": "43c2b04347e65604", "scanner": "scanner-primary", "fingerprint": "3fad4f283eec7d6b", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 86}}}]}, {"ruleId": "scanner-aa5acaa49eb8315b", "level": "note", "message": {"text": "Containers defined but no K8s/orchestration manifest found"}, "properties": {"repobilityId": "b230ea9b68736081", "scanner": "scanner-primary", "fingerprint": "aa5acaa49eb8315b", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["coverage", "deployment"]}}, {"ruleId": "scanner-ec8152a4f580ded5", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in gcp/cloud-function-spa/index.js:13"}, "properties": {"repobilityId": "b0df04052a1fb1f0", "scanner": "scanner-primary", "fingerprint": "ec8152a4f580ded5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "gcp/cloud-function-spa/index.js"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-53751e5107cfc222", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/write-version.mjs:8"}, "properties": {"repobilityId": "579dc3b49298e000", "scanner": "scanner-primary", "fingerprint": "53751e5107cfc222", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/write-version.mjs"}, "region": {"startLine": 8}}}]}, {"ruleId": "scanner-6372ef2f7d288b20", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in server/validation/output-sanitizer.ts:242"}, "properties": {"repobilityId": "7debd06ba4de086c", "scanner": "scanner-primary", "fingerprint": "6372ef2f7d288b20", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/validation/output-sanitizer.ts"}, "region": {"startLine": 242}}}]}, {"ruleId": "scanner-a6fb1fb945573955", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in client/src/hooks/useAuth.ts:45"}, "properties": {"repobilityId": "96f8160ebd1611d3", "scanner": "scanner-primary", "fingerprint": "a6fb1fb945573955", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "client/src/hooks/useAuth.ts"}, "region": {"startLine": 45}}}]}, {"ruleId": "scanner-fb3c3872493c0753", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in client/src/components/charts/EnhancedBarChart.tsx:165"}, "properties": {"repobilityId": "99f05305fb5ea759", "scanner": "scanner-primary", "fingerprint": "fb3c3872493c0753", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "client/src/components/charts/EnhancedBarChart.tsx"}, "region": {"startLine": 165}}}]}, {"ruleId": "scanner-66dfe05f836132c3", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in client/src/components/charts/ComboChart.tsx:103"}, "properties": {"repobilityId": "2b81fcd39fd9f4bf", "scanner": "scanner-primary", "fingerprint": "66dfe05f836132c3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "client/src/components/charts/ComboChart.tsx"}, "region": {"startLine": 103}}}]}, {"ruleId": "scanner-17bdbe37ccd45a72", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in client/src/components/charts/EnhancedLineChart.tsx:147"}, "properties": {"repobilityId": "e46ec62f60a98723", "scanner": "scanner-primary", "fingerprint": "17bdbe37ccd45a72", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "client/src/components/charts/EnhancedLineChart.tsx"}, "region": {"startLine": 147}}}]}, {"ruleId": "scanner-6ff647190198f43f", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in client/src/components/charts/HeatMap.tsx:87"}, "properties": {"repobilityId": "d9c0b9c4cd2e9e7b", "scanner": "scanner-primary", "fingerprint": "6ff647190198f43f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "client/src/components/charts/HeatMap.tsx"}, "region": {"startLine": 87}}}]}, {"ruleId": "scanner-3bc15aecc4d958c8", "level": "error", "message": {"text": "Possible secret in client/src/lib/validation.ts"}, "properties": {"repobilityId": "83f0ae75a8b49ff5", "scanner": "scanner-primary", "fingerprint": "3bc15aecc4d958c8", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "client/src/lib/validation.ts"}, "region": {"startLine": 17}}}]}, {"ruleId": "scanner-82f3513556bc5a43", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "95284ebbdc949c71", "scanner": "scanner-primary", "fingerprint": "82f3513556bc5a43", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/schedule-instances.yml"}, "region": {"startLine": 75}}}]}, {"ruleId": "scanner-82f3513556bc5a43", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "336f8ac60e862e24", "scanner": "scanner-primary", "fingerprint": "82f3513556bc5a43", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/schedule-instances.yml"}, "region": {"startLine": 81}}}]}, {"ruleId": "scanner-935286fc98e951cb", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "ad9c3bfad2552d3c", "scanner": "scanner-primary", "fingerprint": "935286fc98e951cb", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/schedule-instances.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5e4a8f656db84d5e", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "7854bab0b0e7cf71", "scanner": "scanner-primary", "fingerprint": "5e4a8f656db84d5e", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/schema-drift-check.yml"}, "region": {"startLine": 36}}}]}, {"ruleId": "scanner-5e4a8f656db84d5e", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "35bef101c1f1d8c8", "scanner": "scanner-primary", "fingerprint": "5e4a8f656db84d5e", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/schema-drift-check.yml"}, "region": {"startLine": 39}}}]}, {"ruleId": "scanner-5e4a8f656db84d5e", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "11b827da3fa41aa9", "scanner": "scanner-primary", "fingerprint": "5e4a8f656db84d5e", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/schema-drift-check.yml"}, "region": {"startLine": 45}}}]}, {"ruleId": "scanner-5e4a8f656db84d5e", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "db5fdb036911fbfb", "scanner": "scanner-primary", "fingerprint": "5e4a8f656db84d5e", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/schema-drift-check.yml"}, "region": {"startLine": 82}}}]}, {"ruleId": "scanner-d5493db326da5ad8", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "210c334d7c0f3e17", "scanner": "scanner-primary", "fingerprint": "d5493db326da5ad8", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/schema-drift-check.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-72b0b6092668566e", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "c38c7278c7906d87", "scanner": "scanner-primary", "fingerprint": "72b0b6092668566e", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy-vm.yml"}, "region": {"startLine": 26}}}]}, {"ruleId": "scanner-72b0b6092668566e", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "f505a88dbc954ac0", "scanner": "scanner-primary", "fingerprint": "72b0b6092668566e", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy-vm.yml"}, "region": {"startLine": 30}}}]}, {"ruleId": "scanner-72b0b6092668566e", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "4e0d36ff81833ca5", "scanner": "scanner-primary", "fingerprint": "72b0b6092668566e", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy-vm.yml"}, "region": {"startLine": 36}}}]}, {"ruleId": "scanner-e271ad7e75727bdf", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "619ac5c236f6209a", "scanner": "scanner-primary", "fingerprint": "e271ad7e75727bdf", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy-vm.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2cd776919da937b0", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "06c56d6d7ec52e8d", "scanner": "scanner-primary", "fingerprint": "2cd776919da937b0", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/dast.yml"}, "region": {"startLine": 82}}}]}, {"ruleId": "scanner-2cd776919da937b0", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "495ac5074b9ca669", "scanner": "scanner-primary", "fingerprint": "2cd776919da937b0", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/dast.yml"}, "region": {"startLine": 98}}}]}, {"ruleId": "scanner-09c9ad8c4439f65b", "level": "error", "message": {"text": "GitHub Action tracks a moving branch"}, "properties": {"repobilityId": "ba5331735eca239c", "scanner": "scanner-primary", "fingerprint": "09c9ad8c4439f65b", "layer": "cicd", "severity": "high", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/dast.yml"}, "region": {"startLine": 129}}}]}, {"ruleId": "scanner-2cd776919da937b0", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "f15eec6c43ae122f", "scanner": "scanner-primary", "fingerprint": "2cd776919da937b0", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/dast.yml"}, "region": {"startLine": 144}}}]}, {"ruleId": "scanner-2cd776919da937b0", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "495ac5074b9ca669", "scanner": "scanner-primary", "fingerprint": "2cd776919da937b0", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/dast.yml"}, "region": {"startLine": 151}}}]}, {"ruleId": "scanner-21aa0c39a7c1ca23", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "8a57ca3862d35729", "scanner": "scanner-primary", "fingerprint": "21aa0c39a7c1ca23", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/security.yml"}, "region": {"startLine": 98}}}]}, {"ruleId": "scanner-21aa0c39a7c1ca23", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "8a57ca3862d35729", "scanner": "scanner-primary", "fingerprint": "21aa0c39a7c1ca23", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/security.yml"}, "region": {"startLine": 238}}}]}, {"ruleId": "scanner-584e59c5690bf12d", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "3dff7da2f6017f6e", "scanner": "scanner-primary", "fingerprint": "584e59c5690bf12d", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/db-perf-audit.yml"}, "region": {"startLine": 36}}}]}, {"ruleId": "scanner-584e59c5690bf12d", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "8da7820900f1eb38", "scanner": "scanner-primary", "fingerprint": "584e59c5690bf12d", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/db-perf-audit.yml"}, "region": {"startLine": 39}}}]}, {"ruleId": "scanner-584e59c5690bf12d", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "0c1a9152a591262f", "scanner": "scanner-primary", "fingerprint": "584e59c5690bf12d", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/db-perf-audit.yml"}, "region": {"startLine": 45}}}]}, {"ruleId": "scanner-584e59c5690bf12d", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "41945ead60d4004f", "scanner": "scanner-primary", "fingerprint": "584e59c5690bf12d", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/db-perf-audit.yml"}, "region": {"startLine": 116}}}]}, {"ruleId": "scanner-210e77918bd3897c", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "c329f0373d08dca1", "scanner": "scanner-primary", "fingerprint": "210e77918bd3897c", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/db-perf-audit.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b62e6e0528bf9b6d", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "cd6be8693c73b988", "scanner": "scanner-primary", "fingerprint": "b62e6e0528bf9b6d", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy-aws.yml"}, "region": {"startLine": 20}}}]}, {"ruleId": "scanner-cb639d9a10a47b23", "level": "note", "message": {"text": "package.json defines install-time lifecycle scripts"}, "properties": {"repobilityId": "edeab51902066991", "scanner": "scanner-primary", "fingerprint": "cb639d9a10a47b23", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "npm", "install-scripts"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-af2f5a045326d33a", "level": "note", "message": {"text": "Very large file: tests/k6/stress-5-users-gcp.js (2696 lines)"}, "properties": {"repobilityId": "7dbab73699eef95e", "scanner": "scanner-primary", "fingerprint": "af2f5a045326d33a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f365560c011c36f4", "level": "note", "message": {"text": "Very large file: tests/k6/stress-4-users-intensive.js (1864 lines)"}, "properties": {"repobilityId": "c722b155b4b063ba", "scanner": "scanner-primary", "fingerprint": "f365560c011c36f4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-43222e444f44ec5a", "level": "note", "message": {"text": "Very large file: tests/k6/stress-5-users-aws.js (2104 lines)"}, "properties": {"repobilityId": "1df1cbc610dad2de", "scanner": "scanner-primary", "fingerprint": "43222e444f44ec5a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-8c9f6f471ddee037", "level": "note", "message": {"text": "Very large file: tests/k6/stress-light.js (1129 lines)"}, "properties": {"repobilityId": "6995076e0055ec84", "scanner": "scanner-primary", "fingerprint": "8c9f6f471ddee037", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6779d162b52984ca", "level": "note", "message": {"text": "Very large file: server/replitAuth.ts (1345 lines)"}, "properties": {"repobilityId": "d1caa99d09533dca", "scanner": "scanner-primary", "fingerprint": "6779d162b52984ca", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0f57803f0769a478", "level": "note", "message": {"text": "Very large file: server/ai-assistant-routes.ts (1222 lines)"}, "properties": {"repobilityId": "be2b14f22a753888", "scanner": "scanner-primary", "fingerprint": "0f57803f0769a478", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c327b82b933e6e54", "level": "note", "message": {"text": "Very large file: server/notification-service.ts (1611 lines)"}, "properties": {"repobilityId": "e7f0efd607725736", "scanner": "scanner-primary", "fingerprint": "c327b82b933e6e54", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e1a44c8519ddfc57", "level": "note", "message": {"text": "Very large file: server/cache-helpers.ts (4279 lines)"}, "properties": {"repobilityId": "13a93b060e85c89a", "scanner": "scanner-primary", "fingerprint": "e1a44c8519ddfc57", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0304e89644c853d6", "level": "note", "message": {"text": "Very large file: server/db.ts (1683 lines)"}, "properties": {"repobilityId": "044454e4c1fd13d8", "scanner": "scanner-primary", "fingerprint": "0304e89644c853d6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e3c39e0464353ad3", "level": "note", "message": {"text": "Very large file: server/services/import-service.ts (4227 lines)"}, "properties": {"repobilityId": "80807073a31ea71e", "scanner": "scanner-primary", "fingerprint": "e3c39e0464353ad3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-082dc198e92d1a2d", "level": "note", "message": {"text": "Very large file: server/services/unified-prewarm-service.ts (2530 lines)"}, "properties": {"repobilityId": "f297878491a9a15b", "scanner": "scanner-primary", "fingerprint": "082dc198e92d1a2d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b90c2531cc965af3", "level": "note", "message": {"text": "Very large file: client/src/components/forms/risk-form.tsx (2754 lines)"}, "properties": {"repobilityId": "b8211c2c4baa9127", "scanner": "scanner-primary", "fingerprint": "b90c2531cc965af3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-7b230e2f2d06b294", "level": "note", "message": {"text": "Very large file: client/src/components/forms/risk-event-form.tsx (1621 lines)"}, "properties": {"repobilityId": "1cb63923493cc349", "scanner": "scanner-primary", "fingerprint": "7b230e2f2d06b294", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2e728b54454d6675", "level": "note", "message": {"text": "Very large file: client/src/components/forms/control-form.tsx (1392 lines)"}, "properties": {"repobilityId": "cc995ec0030e36a0", "scanner": "scanner-primary", "fingerprint": "2e728b54454d6675", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5a573ad38406945b", "level": "note", "message": {"text": "Very large file: client/src/components/layout/header.tsx (4420 lines)"}, "properties": {"repobilityId": "7989a8b428cf8999", "scanner": "scanner-primary", "fingerprint": "5a573ad38406945b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-957669255e27f28b", "level": "note", "message": {"text": "Very large file: client/src/pages/risk-events.tsx (1636 lines)"}, "properties": {"repobilityId": "a608c58c78718cf3", "scanner": "scanner-primary", "fingerprint": "957669255e27f28b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-9858010eb0965085", "level": "note", "message": {"text": "Very large file: client/src/pages/processes.tsx (1732 lines)"}, "properties": {"repobilityId": "533317469445b48d", "scanner": "scanner-primary", "fingerprint": "9858010eb0965085", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-04f21f52742af50e", "level": "note", "message": {"text": "Very large file: client/src/pages/audit-plan-wizard.tsx (2365 lines)"}, "properties": {"repobilityId": "8b0dd7924f925fdd", "scanner": "scanner-primary", "fingerprint": "04f21f52742af50e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-46c5497bb505a845", "level": "note", "message": {"text": "Very large file: client/src/pages/risks.tsx (1590 lines)"}, "properties": {"repobilityId": "11bc20c3768ac7fe", "scanner": "scanner-primary", "fingerprint": "46c5497bb505a845", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f922301e0f939c6b", "level": "note", "message": {"text": "Very large file: client/src/pages/manual.tsx (1467 lines)"}, "properties": {"repobilityId": "5c22319b7794fcd7", "scanner": "scanner-primary", "fingerprint": "f922301e0f939c6b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b01b3065b81b67d5", "level": "note", "message": {"text": "Very large file: client/src/pages/regulations.tsx (1247 lines)"}, "properties": {"repobilityId": "f7a54d11d04e38ce", "scanner": "scanner-primary", "fingerprint": "b01b3065b81b67d5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-41d80e6ade7d42a6", "level": "note", "message": {"text": "Very large file: client/src/pages/action-plans.tsx (2006 lines)"}, "properties": {"repobilityId": "054cebeac5783aa5", "scanner": "scanner-primary", "fingerprint": "41d80e6ade7d42a6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5361d8ac0d5a0d17", "level": "note", "message": {"text": "Very large file: client/src/pages/audit-findings.tsx (1206 lines)"}, "properties": {"repobilityId": "657d95e2b7822ede", "scanner": "scanner-primary", "fingerprint": "5361d8ac0d5a0d17", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-514450df42295dbb", "level": "note", "message": {"text": "Very large file: client/src/pages/controls.tsx (1922 lines)"}, "properties": {"repobilityId": "f840d0a1a23c4bb4", "scanner": "scanner-primary", "fingerprint": "514450df42295dbb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0d8c7c48301d014f", "level": "note", "message": {"text": "Very large file: client/src/pages/risk-matrix.tsx (1162 lines)"}, "properties": {"repobilityId": "551807cb30a52864", "scanner": "scanner-primary", "fingerprint": "0d8c7c48301d014f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2ca4ab3eba32fd70", "level": "note", "message": {"text": "Very large file: client/src/pages/continuous-audit.tsx (1573 lines)"}, "properties": {"repobilityId": "c67f0d1eacb4fe17", "scanner": "scanner-primary", "fingerprint": "2ca4ab3eba32fd70", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4aa692a5671d8f9b", "level": "note", "message": {"text": "Very large file: client/src/pages/organization/processes.tsx (2377 lines)"}, "properties": {"repobilityId": "3a365659d4eaa627", "scanner": "scanner-primary", "fingerprint": "4aa692a5671d8f9b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ad355e48b651c8d3", "level": "note", "message": {"text": "Very large file: shared/schema.ts (9022 lines)"}, "properties": {"repobilityId": "43ade807c81236e6", "scanner": "scanner-primary", "fingerprint": "ad355e48b651c8d3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-110cca7e388cee56", "level": "note", "message": {"text": "Very large file: migrations/schema.ts (3051 lines)"}, "properties": {"repobilityId": "9793acf7818d981b", "scanner": "scanner-primary", "fingerprint": "110cca7e388cee56", "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-aba2095ac97be57e", "level": "note", "message": {"text": "50 TODO/FIXME markers"}, "properties": {"repobilityId": "4b38c118003e07d2", "scanner": "scanner-primary", "fingerprint": "aba2095ac97be57e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["maintenance"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "de485888977758e4", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ab6cd572e2781cf2", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: gcp/cloud-function-spa/package.json"}, "properties": {"repobilityId": "522a0622d6c512da", "scanner": "scanner-primary", "fingerprint": "ab6cd572e2781cf2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "gcp/cloud-function-spa/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "2cf71a4bbfc19433", "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": "b551d689c36dbb8a", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-9d79c4077342a7d0", "level": "warning", "message": {"text": "Runtime service client appears to use placeholder configuration"}, "properties": {"repobilityId": "5c36dcc78a7a97eb", "scanner": "scanner-primary", "fingerprint": "9d79c4077342a7d0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "runtime-config", "service-client", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "8b6efc40c68bb57e", "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": "960c8fe6c8d7eaa5", "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": "26bb5fd9ab6a9328", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-2c5f98b152cddb6d", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/launch.json"}, "properties": {"repobilityId": "0de48c0f4ab303d8", "scanner": "scanner-primary", "fingerprint": "2c5f98b152cddb6d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/launch.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8c4335a09ce5d8f9", "level": "none", "message": {"text": "Commented-code block (5 lines) in vite.config.ts:27"}, "properties": {"repobilityId": "538523f4f7319771", "scanner": "scanner-primary", "fingerprint": "8c4335a09ce5d8f9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4bf8b5d772439bcb", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 crear-indices-navegador-simple.js:4"}, "properties": {"repobilityId": "8795f7d9980f3391", "scanner": "scanner-primary", "fingerprint": "4bf8b5d772439bcb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cf41832756856688", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 EJECUTAR-INDICES-CORREGIDOS-FINAL.js:44"}, "properties": {"repobilityId": "af8c61ec8f7c72b6", "scanner": "scanner-primary", "fingerprint": "cf41832756856688", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-23c3f290d015b07c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 CREAR-INDICES-CORREGIDOS.js:45"}, "properties": {"repobilityId": "9378ea3cf7a3be18", "scanner": "scanner-primary", "fingerprint": "23c3f290d015b07c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e2705c516b815d8e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 EJECUTAR-AHORA.js:47"}, "properties": {"repobilityId": "9b86cf380330551c", "scanner": "scanner-primary", "fingerprint": "e2705c516b815d8e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2485abdce0aef7b9", "level": "none", "message": {"text": "Commented-code block (9 lines) in ecosystem.config.cjs:1"}, "properties": {"repobilityId": "d62a6cf2da3816e8", "scanner": "scanner-primary", "fingerprint": "2485abdce0aef7b9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-683d126f1be05fef", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 VER-ERRORES-INDICES.js:47"}, "properties": {"repobilityId": "07d5de85cefd3cfe", "scanner": "scanner-primary", "fingerprint": "683d126f1be05fef", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-80289ee160855063", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/unit/chaos-resilience.test.ts:74"}, "properties": {"repobilityId": "f2ca4c89062cd655", "scanner": "scanner-primary", "fingerprint": "80289ee160855063", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-42329728a29f86f4", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/unit/report-accuracy.test.ts:286"}, "properties": {"repobilityId": "6efb03dded2b2b8f", "scanner": "scanner-primary", "fingerprint": "42329728a29f86f4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9f43b63d9df5d36c", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/unit/residual-risk.test.ts:312"}, "properties": {"repobilityId": "07ea92e7b25035dc", "scanner": "scanner-primary", "fingerprint": "9f43b63d9df5d36c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-638899f9b1369eb0", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/unit/backup-restore.test.ts:92"}, "properties": {"repobilityId": "a03d17aa0977bb52", "scanner": "scanner-primary", "fingerprint": "638899f9b1369eb0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bd318f8b87b1d818", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/unit/zero-downtime-deploy.test.ts:129"}, "properties": {"repobilityId": "db1df270f03d4f92", "scanner": "scanner-primary", "fingerprint": "bd318f8b87b1d818", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f8fcbb0ed21087c7", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/unit/cascading-deletes.test.ts:116"}, "properties": {"repobilityId": "382e35a8a7eee107", "scanner": "scanner-primary", "fingerprint": "f8fcbb0ed21087c7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1db89c179491cd11", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/k6/session-token-test.js:146"}, "properties": {"repobilityId": "d94a4a5638e24284", "scanner": "scanner-primary", "fingerprint": "1db89c179491cd11", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ced5811571792dfb", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/k6/stress-5-users-gcp.js:2138"}, "properties": {"repobilityId": "a7cc464cd8959dfc", "scanner": "scanner-primary", "fingerprint": "ced5811571792dfb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c7dcbc6ce671e457", "level": "none", "message": {"text": "Commented-code block (7 lines) in tests/k6/capacity-finding.js:235"}, "properties": {"repobilityId": "77590b392727f5f8", "scanner": "scanner-primary", "fingerprint": "c7dcbc6ce671e457", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2914815b982be922", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/e2e/api-integration.spec.ts:597"}, "properties": {"repobilityId": "09cd239e7e1e9377", "scanner": "scanner-primary", "fingerprint": "2914815b982be922", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9e86d97c3d213a04", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-grafana-push.ts:53"}, "properties": {"repobilityId": "31b6b5d1fe0f0074", "scanner": "scanner-primary", "fingerprint": "9e86d97c3d213a04", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e5ea9395ba03442f", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/init-admin.cjs:1"}, "properties": {"repobilityId": "3370cc6b3e87a7ad", "scanner": "scanner-primary", "fingerprint": "e5ea9395ba03442f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-646c1aa03e4c05da", "level": "none", "message": {"text": "Commented-code block (10 lines) in server/index.ts:471"}, "properties": {"repobilityId": "ae2878acac763f34", "scanner": "scanner-primary", "fingerprint": "646c1aa03e4c05da", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-628c55f6c15a7873", "level": "none", "message": {"text": "Commented-code block (10 lines) in server/security.ts:307"}, "properties": {"repobilityId": "b1807e6c5388f113", "scanner": "scanner-primary", "fingerprint": "628c55f6c15a7873", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ded8a4d235b230f0", "level": "note", "message": {"text": "Legacy-named symbol `buildActionPlanAlertsFromLegacy` in server/action-plan-alerts-config.ts:6"}, "properties": {"repobilityId": "a8d4d0a7f0d540f4", "scanner": "scanner-primary", "fingerprint": "ded8a4d235b230f0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-80f1f680ab424746", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/objectStorage.ts:16"}, "properties": {"repobilityId": "6d8c4ddbd74608e9", "scanner": "scanner-primary", "fingerprint": "80f1f680ab424746", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2515cf5ff6ea3938", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/objectStorage.ts:610"}, "properties": {"repobilityId": "46c797cf5a9c6c14", "scanner": "scanner-primary", "fingerprint": "2515cf5ff6ea3938", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c1968854c65e09e9", "level": "none", "message": {"text": "Commented-code block (7 lines) in server/replitAuth.ts:405"}, "properties": {"repobilityId": "5d8f7729af1a4c11", "scanner": "scanner-primary", "fingerprint": "c1968854c65e09e9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4b817eab36c8bc55", "level": "note", "message": {"text": "Legacy-named symbol `action_plan_alerts_v1` in server/notification-scheduler.ts:222"}, "properties": {"repobilityId": "e044c886cf785743", "scanner": "scanner-primary", "fingerprint": "4b817eab36c8bc55", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-ccd2971f461b201e", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/ai-grc-routes.ts:155"}, "properties": {"repobilityId": "db6686fba16a87c5", "scanner": "scanner-primary", "fingerprint": "ccd2971f461b201e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-177760d18f714b09", "level": "none", "message": {"text": "Commented-code block (6 lines) in server/ai-embeddings.ts:98"}, "properties": {"repobilityId": "fa570d42a3b31c66", "scanner": "scanner-primary", "fingerprint": "177760d18f714b09", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d2a31bba01615538", "level": "none", "message": {"text": "Commented-code block (9 lines) in server/cache-helpers.ts:22"}, "properties": {"repobilityId": "1ed509d1e81bca85", "scanner": "scanner-primary", "fingerprint": "d2a31bba01615538", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cd2f5ebda536e260", "level": "none", "message": {"text": "Commented-code block (9 lines) in server/db.ts:10"}, "properties": {"repobilityId": "b2c1225ea08ff377", "scanner": "scanner-primary", "fingerprint": "cd2f5ebda536e260", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fb90fbf61c6daa20", "level": "note", "message": {"text": "Legacy-named symbol `procedure_effectiveness_v1` in server/ml-model-manager.ts:309"}, "properties": {"repobilityId": "55c578b200ec5a72", "scanner": "scanner-primary", "fingerprint": "fb90fbf61c6daa20", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b2ea955550d7a295", "level": "none", "message": {"text": "Commented-code block (10 lines) in server/jobs/refresh-risk-list-view.ts:15"}, "properties": {"repobilityId": "e5ee96b2aff4522d", "scanner": "scanner-primary", "fingerprint": "b2ea955550d7a295", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4256468d9919a20a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/coi/ms-verify.ts:45"}, "properties": {"repobilityId": "2a2b4ee086da2f6b", "scanner": "scanner-primary", "fingerprint": "4256468d9919a20a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-812e18eb25da00fa", "level": "none", "message": {"text": "Commented-code block (7 lines) in server/monitoring/prometheus-metrics.ts:205"}, "properties": {"repobilityId": "fe882ec095641407", "scanner": "scanner-primary", "fingerprint": "812e18eb25da00fa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6544d6c0c96c20ed", "level": "none", "message": {"text": "Commented-code block (9 lines) in server/validation/auth-security.ts:500"}, "properties": {"repobilityId": "15f3594eb368bf01", "scanner": "scanner-primary", "fingerprint": "6544d6c0c96c20ed", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6a243680122d98fb", "level": "none", "message": {"text": "Commented-code block (6 lines) in server/validation/file-validator.ts:90"}, "properties": {"repobilityId": "a9175e58f789ca3c", "scanner": "scanner-primary", "fingerprint": "6a243680122d98fb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a4e16365df00901c", "level": "none", "message": {"text": "Commented-code block (6 lines) in server/middleware/express5-error-handler.ts:208"}, "properties": {"repobilityId": "c396d193a81bd3ce", "scanner": "scanner-primary", "fingerprint": "a4e16365df00901c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-248debd4bf446d0c", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/services/processes-page-service.ts:28"}, "properties": {"repobilityId": "00dbcf23c2153c25", "scanner": "scanner-primary", "fingerprint": "248debd4bf446d0c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fae5d04a07bde0cd", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/services/risks-page-service.ts:576"}, "properties": {"repobilityId": "5396ad1cd86b273d", "scanner": "scanner-primary", "fingerprint": "fae5d04a07bde0cd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-facf28a0fd843473", "level": "none", "message": {"text": "Commented-code block (6 lines) in server/services/unified-prewarm-service.ts:796"}, "properties": {"repobilityId": "acaad4d9658f8139", "scanner": "scanner-primary", "fingerprint": "facf28a0fd843473", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-07b4146bd1145d67", "level": "none", "message": {"text": "Commented-code block (10 lines) in server/services/redis.ts:338"}, "properties": {"repobilityId": "f6ace9d5c336f6e3", "scanner": "scanner-primary", "fingerprint": "07b4146bd1145d67", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f20f412fb57dc5e9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/hooks/useAuth.ts:64"}, "properties": {"repobilityId": "f4b7ea800fc96ff3", "scanner": "scanner-primary", "fingerprint": "f20f412fb57dc5e9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-eb6776de74c1d118", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/hooks/useFormAction.ts:108"}, "properties": {"repobilityId": "6da1645d4e817cc5", "scanner": "scanner-primary", "fingerprint": "eb6776de74c1d118", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6a5233487f5d4d47", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/hooks/useBranding.ts:40"}, "properties": {"repobilityId": "cd5a9e8c4e4c8145", "scanner": "scanner-primary", "fingerprint": "6a5233487f5d4d47", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-75c5ec3e59ee4a16", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/hooks/useBootstrap.ts:123"}, "properties": {"repobilityId": "4663c5108f32a14d", "scanner": "scanner-primary", "fingerprint": "75c5ec3e59ee4a16", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bec7d48668532fc9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/hooks/usePrefetch.ts:76"}, "properties": {"repobilityId": "ad2764788a046ee7", "scanner": "scanner-primary", "fingerprint": "bec7d48668532fc9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7425d7f6cd910111", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/ManageControlRisksContent.tsx:65"}, "properties": {"repobilityId": "cf4e6d18160dd37d", "scanner": "scanner-primary", "fingerprint": "7425d7f6cd910111", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8f6afc28929f042f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/RisksByProcess.tsx:136"}, "properties": {"repobilityId": "fa0c8540f3ba70d0", "scanner": "scanner-primary", "fingerprint": "8f6afc28929f042f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e75b53a423ecdef5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/ViewRiskActionPlansDialog.tsx:84"}, "properties": {"repobilityId": "528ce8df44e47c79", "scanner": "scanner-primary", "fingerprint": "e75b53a423ecdef5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-02bb69e7ac94d80b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/PrefetchLink.tsx:86"}, "properties": {"repobilityId": "a09bd444af4c508a", "scanner": "scanner-primary", "fingerprint": "02bb69e7ac94d80b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4a77e3f7f935e88e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/FindingActionPlans.tsx:46"}, "properties": {"repobilityId": "e4c4f4e69e1cdf56", "scanner": "scanner-primary", "fingerprint": "4a77e3f7f935e88e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-896e1c18a875069d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/SpecializedAIButton.tsx:119"}, "properties": {"repobilityId": "c3bd23c0ae713a3a", "scanner": "scanner-primary", "fingerprint": "896e1c18a875069d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f361f886e8a3eadc", "level": "none", "message": {"text": "Commented-code block (6 lines) in client/src/components/ManageRiskControlsDialog.tsx:328"}, "properties": {"repobilityId": "97a661e10db58a07", "scanner": "scanner-primary", "fingerprint": "f361f886e8a3eadc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cfd5aad03d6cda9c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/ManageRiskControlsDialog.tsx:88"}, "properties": {"repobilityId": "2f8a85c448d125c3", "scanner": "scanner-primary", "fingerprint": "cfd5aad03d6cda9c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bfceb6905e8739b9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/RisksByOwner.tsx:113"}, "properties": {"repobilityId": "a22fa0320fa44fa5", "scanner": "scanner-primary", "fingerprint": "bfceb6905e8739b9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3610717130375a77", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/ai-assistant-dialog.tsx:84"}, "properties": {"repobilityId": "ddc19ea215fc6f69", "scanner": "scanner-primary", "fingerprint": "3610717130375a77", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4c626e518accadd1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/ManageRiskEventsContent.tsx:85"}, "properties": {"repobilityId": "b195d2b0ce6b9edf", "scanner": "scanner-primary", "fingerprint": "4c626e518accadd1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-eaedadb14e69343f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/audit-test-workspace/SupervisorReview.tsx:111"}, "properties": {"repobilityId": "446cef3ec58aa36f", "scanner": "scanner-primary", "fingerprint": "eaedadb14e69343f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1ad2e637f6b08b09", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/audit-test-workspace/QuickWorkLog.tsx:89"}, "properties": {"repobilityId": "8d2712f812b4c5d6", "scanner": "scanner-primary", "fingerprint": "1ad2e637f6b08b09", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b370e97b3e1113ee", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/audit-test-workspace/ContextualEvidence.tsx:96"}, "properties": {"repobilityId": "b5d15ee9749f5d86", "scanner": "scanner-primary", "fingerprint": "b370e97b3e1113ee", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c8f38225dd0f4163", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/recommendations/ProcedureRecommendations.tsx:60"}, "properties": {"repobilityId": "a833861b2a7c4457", "scanner": "scanner-primary", "fingerprint": "c8f38225dd0f4163", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-21203467da0220df", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/recommendations/RecommendationFeedback.tsx:80"}, "properties": {"repobilityId": "7aa85f194da8f7b2", "scanner": "scanner-primary", "fingerprint": "21203467da0220df", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9aa18343ae75c253", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/recommendations/AuditorRecommendations.tsx:74"}, "properties": {"repobilityId": "a66b9e70f8206f28", "scanner": "scanner-primary", "fingerprint": "9aa18343ae75c253", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-03788b21959dbdcd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/recommendations/TimelineRecommendations.tsx:80"}, "properties": {"repobilityId": "8e7b9f5777fecc7b", "scanner": "scanner-primary", "fingerprint": "03788b21959dbdcd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e2d8f753b33d0e75", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/forms/gerencia-form.tsx:102"}, "properties": {"repobilityId": "6e2d05e8a5ceab97", "scanner": "scanner-primary", "fingerprint": "e2d8f753b33d0e75", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-47421681272c8592", "level": "none", "message": {"text": "Commented-code block (9 lines) in client/src/components/forms/risk-form.tsx:1037"}, "properties": {"repobilityId": "fe63669d9067d982", "scanner": "scanner-primary", "fingerprint": "47421681272c8592", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f521e5629df165db", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/forms/risk-form.tsx:155"}, "properties": {"repobilityId": "5a4d81096955584a", "scanner": "scanner-primary", "fingerprint": "f521e5629df165db", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4d14f62c583e8fe2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/forms/macroproceso-form.tsx:49"}, "properties": {"repobilityId": "1b1440546cc5351a", "scanner": "scanner-primary", "fingerprint": "4d14f62c583e8fe2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4a464afa60cb8c70", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/forms/process-owner-form-v2.tsx:40"}, "properties": {"repobilityId": "322dc83f93b14d00", "scanner": "scanner-primary", "fingerprint": "4a464afa60cb8c70", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-35f4eda45460187e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/forms/user-form.tsx:153"}, "properties": {"repobilityId": "2c60edb539323d5b", "scanner": "scanner-primary", "fingerprint": "35f4eda45460187e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-55f97553043c7e70", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/forms/process-owner-form-native.tsx:40"}, "properties": {"repobilityId": "c3cf010ba3af97dc", "scanner": "scanner-primary", "fingerprint": "55f97553043c7e70", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f36ffcf255375312", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/forms/risk-event-form.tsx:119"}, "properties": {"repobilityId": "c04699b369f563df", "scanner": "scanner-primary", "fingerprint": "f36ffcf255375312", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-dcdf76ed6c053d1f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/forms/control-form.tsx:773"}, "properties": {"repobilityId": "72e112543c9cced0", "scanner": "scanner-primary", "fingerprint": "dcdf76ed6c053d1f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-27597333e80a7469", "level": "none", "message": {"text": "Commented-code block (9 lines) in client/src/components/forms/regulation-form.tsx:195"}, "properties": {"repobilityId": "a2dfd3608c0e4852", "scanner": "scanner-primary", "fingerprint": "27597333e80a7469", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6f99c8ef81a470b6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/forms/process-form.tsx:45"}, "properties": {"repobilityId": "623def0caaa80f44", "scanner": "scanner-primary", "fingerprint": "6f99c8ef81a470b6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-766af2e8c5165215", "level": "none", "message": {"text": "Commented-code block (5 lines) in client/src/components/layout/header.tsx:26"}, "properties": {"repobilityId": "76bc0efda7eccaa8", "scanner": "scanner-primary", "fingerprint": "766af2e8c5165215", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-83f72dee88161aad", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/layout/header.tsx:308"}, "properties": {"repobilityId": "2eb41ec30d4b9b9b", "scanner": "scanner-primary", "fingerprint": "83f72dee88161aad", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2bf567a7e9bd25a1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/reports/DynamicRiskReport.tsx:94"}, "properties": {"repobilityId": "aa5c60909a055f3b", "scanner": "scanner-primary", "fingerprint": "2bf567a7e9bd25a1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9f2723aabe16ec79", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/audit-attachments/AuditTestAttachmentsList.tsx:117"}, "properties": {"repobilityId": "74203b180d935c1b", "scanner": "scanner-primary", "fingerprint": "9f2723aabe16ec79", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7b359fa2620bc297", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/organization/ResponsableForm.tsx:35"}, "properties": {"repobilityId": "7d6d02d14bada9e1", "scanner": "scanner-primary", "fingerprint": "7b359fa2620bc297", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-81f9acffb8b59ccb", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/audit-sections/AuditCriteriaSection.tsx:79"}, "properties": {"repobilityId": "5315b221d1a888cf", "scanner": "scanner-primary", "fingerprint": "81f9acffb8b59ccb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9ca974e3fc4cddc8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/audit-sections/AuditReportSection.tsx:53"}, "properties": {"repobilityId": "8cf190286bc1bca4", "scanner": "scanner-primary", "fingerprint": "9ca974e3fc4cddc8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f73040cdd6f6299f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/audit-sections/TestFormModal.tsx:196"}, "properties": {"repobilityId": "f3084c0c26293543", "scanner": "scanner-primary", "fingerprint": "f73040cdd6f6299f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5b292b7ce7cbb697", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/audit-sections/AuditWorkProgramSection.tsx:98"}, "properties": {"repobilityId": "84454f69e95d4ecc", "scanner": "scanner-primary", "fingerprint": "5b292b7ce7cbb697", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3699bf1eb949323e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/audit-sections/AITestSuggestionDialog.tsx:54"}, "properties": {"repobilityId": "1880a5474904849a", "scanner": "scanner-primary", "fingerprint": "3699bf1eb949323e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0c7f8ab9b7f91b36", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/SupervisorDashboard.tsx:121"}, "properties": {"repobilityId": "154ecf7527f09a52", "scanner": "scanner-primary", "fingerprint": "0c7f8ab9b7f91b36", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cd2173de32983ad7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/audit-prioritization.tsx:49"}, "properties": {"repobilityId": "d91351916f517197", "scanner": "scanner-primary", "fingerprint": "cd2173de32983ad7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b06f0b2c1b27a393", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/audit-planning.tsx:33"}, "properties": {"repobilityId": "505842fd628f1d54", "scanner": "scanner-primary", "fingerprint": "b06f0b2c1b27a393", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-21c7c37d1da45398", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/login.tsx:102"}, "properties": {"repobilityId": "7ee16f09cb9f1d73", "scanner": "scanner-primary", "fingerprint": "21c7c37d1da45398", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bfa7bdcaf6c27859", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/validation-hub.tsx:172"}, "properties": {"repobilityId": "31650d7b06d1bf0c", "scanner": "scanner-primary", "fingerprint": "bfa7bdcaf6c27859", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-41407c47191062f5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/audit-test-manual.tsx:92"}, "properties": {"repobilityId": "f6a6a512cb17cd57", "scanner": "scanner-primary", "fingerprint": "41407c47191062f5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-21d8b5783b5422d3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/organization.tsx:29"}, "properties": {"repobilityId": "369a0c9f4819c883", "scanner": "scanner-primary", "fingerprint": "21d8b5783b5422d3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fe3a43cd12ae105f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/audits.tsx:211"}, "properties": {"repobilityId": "121ec1ba8c74e3ad", "scanner": "scanner-primary", "fingerprint": "fe3a43cd12ae105f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-98ed6d5f66a46a36", "level": "none", "message": {"text": "Commented-code block (6 lines) in client/src/pages/risk-events.tsx:738"}, "properties": {"repobilityId": "524e4e1596fa8298", "scanner": "scanner-primary", "fingerprint": "98ed6d5f66a46a36", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5afd023aa0ae4c52", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/risk-events.tsx:227"}, "properties": {"repobilityId": "dfef4039f91ae017", "scanner": "scanner-primary", "fingerprint": "5afd023aa0ae4c52", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bd4bf7392f804161", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/users.tsx:52"}, "properties": {"repobilityId": "6e05369193a25c78", "scanner": "scanner-primary", "fingerprint": "bd4bf7392f804161", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-798eec6ca1673970", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/processes.tsx:287"}, "properties": {"repobilityId": "9fcd5cce55076f0e", "scanner": "scanner-primary", "fingerprint": "798eec6ca1673970", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3f325e05a6d52831", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/reports.tsx:151"}, "properties": {"repobilityId": "76d7b3687c9eb43b", "scanner": "scanner-primary", "fingerprint": "3f325e05a6d52831", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-dfab82c6d0f22da0", "level": "none", "message": {"text": "Commented-code block (5 lines) in client/src/pages/ExecutorDashboard.tsx:74"}, "properties": {"repobilityId": "0714f1bf27df3c97", "scanner": "scanner-primary", "fingerprint": "dfab82c6d0f22da0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3542dc9be2c85ee9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/ExecutorDashboard.tsx:82"}, "properties": {"repobilityId": "c6b9c1683895989a", "scanner": "scanner-primary", "fingerprint": "3542dc9be2c85ee9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cc9c151d031f7a3e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/risks.tsx:589"}, "properties": {"repobilityId": "8d788d88e9409958", "scanner": "scanner-primary", "fingerprint": "cc9c151d031f7a3e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b02b04811b5848da", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/compliance-audits.tsx:197"}, "properties": {"repobilityId": "6da9e78e3816c8e6", "scanner": "scanner-primary", "fingerprint": "b02b04811b5848da", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-670782452bd975db", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/validation-action-plans.tsx:175"}, "properties": {"repobilityId": "6540ab3b0540d8c5", "scanner": "scanner-primary", "fingerprint": "670782452bd975db", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1053455ccd6233fc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/audit-tests.tsx:160"}, "properties": {"repobilityId": "f7f7df8a6ada19d7", "scanner": "scanner-primary", "fingerprint": "1053455ccd6233fc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8cd0b7a4e492c129", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/regulations.tsx:256"}, "properties": {"repobilityId": "50be574ce0cf88ac", "scanner": "scanner-primary", "fingerprint": "8cd0b7a4e492c129", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-07cc3976886e7a32", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/public-batch-validation.tsx:99"}, "properties": {"repobilityId": "4f3836232fe76d31", "scanner": "scanner-primary", "fingerprint": "07cc3976886e7a32", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-573c78b0e3515ae1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/compliance-officers.tsx:166"}, "properties": {"repobilityId": "6eb475209509b196", "scanner": "scanner-primary", "fingerprint": "573c78b0e3515ae1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-987f7371ffbd882a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/compliance-tests.tsx:103"}, "properties": {"repobilityId": "85d8629f2070542d", "scanner": "scanner-primary", "fingerprint": "987f7371ffbd882a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6fb319dcd7e5013b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/audit-test-details.tsx:262"}, "properties": {"repobilityId": "516899c2d87bbd39", "scanner": "scanner-primary", "fingerprint": "6fb319dcd7e5013b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0b3c7d1620b3f2e5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/fiscal-entities.tsx:44"}, "properties": {"repobilityId": "3724ebe67784d105", "scanner": "scanner-primary", "fingerprint": "0b3c7d1620b3f2e5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0dad32a2bc600f5b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/audit-findings.tsx:217"}, "properties": {"repobilityId": "525e5491c8f42f57", "scanner": "scanner-primary", "fingerprint": "0dad32a2bc600f5b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4af05379a503ad1b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/controls.tsx:285"}, "properties": {"repobilityId": "26b08e60cd107776", "scanner": "scanner-primary", "fingerprint": "4af05379a503ad1b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8b447ac86e80a57f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/validation-risks.tsx:203"}, "properties": {"repobilityId": "ebf6e1cc419fb5ad", "scanner": "scanner-primary", "fingerprint": "8b447ac86e80a57f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2f3b311ddfccbede", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/audit-plan-list.tsx:147"}, "properties": {"repobilityId": "199238fb0baba118", "scanner": "scanner-primary", "fingerprint": "2f3b311ddfccbede", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-439e46696bf11d37", "level": "none", "message": {"text": "Commented-code block (5 lines) in client/src/pages/risk-matrix.tsx:185"}, "properties": {"repobilityId": "ed5480090b74c062", "scanner": "scanner-primary", "fingerprint": "439e46696bf11d37", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bf1ca724f356b346", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/public-action-plan-validation.tsx:57"}, "properties": {"repobilityId": "dc2310a0488932b0", "scanner": "scanner-primary", "fingerprint": "bf1ca724f356b346", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cba96eae55b2efdc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/trash.tsx:102"}, "properties": {"repobilityId": "9d3f4c689ee2ddf1", "scanner": "scanner-primary", "fingerprint": "cba96eae55b2efdc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9d357af091427ef3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/setup-wizard.tsx:355"}, "properties": {"repobilityId": "b33f5c7579761cca", "scanner": "scanner-primary", "fingerprint": "9d357af091427ef3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-738f1e0d72b50753", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/public-validation.tsx:94"}, "properties": {"repobilityId": "82c8e16cd8a21726", "scanner": "scanner-primary", "fingerprint": "738f1e0d72b50753", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e5e85e778d1c92ec", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/compliance-documents.tsx:110"}, "properties": {"repobilityId": "5b8c2a65b672c5af", "scanner": "scanner-primary", "fingerprint": "e5e85e778d1c92ec", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-07e8416cf55354c0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/change-password-required.tsx:51"}, "properties": {"repobilityId": "1f0d5f3449189fb0", "scanner": "scanner-primary", "fingerprint": "07e8416cf55354c0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ca45b4aeb0f0b8c9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/support.tsx:171"}, "properties": {"repobilityId": "50c7ec91c5b8e10d", "scanner": "scanner-primary", "fingerprint": "ca45b4aeb0f0b8c9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2c3b4c6b5a7516f6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/validation-controls.tsx:159"}, "properties": {"repobilityId": "0cbc26aacddf9d6d", "scanner": "scanner-primary", "fingerprint": "2c3b4c6b5a7516f6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0dab55b6266197e7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/coi/declarantes.tsx:68"}, "properties": {"repobilityId": "4618ad1de8723f39", "scanner": "scanner-primary", "fingerprint": "0dab55b6266197e7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f7d6fbbf9ff4676b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/coi/index.tsx:64"}, "properties": {"repobilityId": "e4190a5eb3ca1fa3", "scanner": "scanner-primary", "fingerprint": "f7d6fbbf9ff4676b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-dfc2390a83f9f1f3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/platform-admin/support.tsx:105"}, "properties": {"repobilityId": "71b1fce019fea786", "scanner": "scanner-primary", "fingerprint": "dfc2390a83f9f1f3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d227464a806cab2f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/organization/responsables.tsx:72"}, "properties": {"repobilityId": "8f115bf3a7ac8377", "scanner": "scanner-primary", "fingerprint": "d227464a806cab2f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3936ca22cdaa179b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/organization/processes.tsx:165"}, "properties": {"repobilityId": "a49782631659eaab", "scanner": "scanner-primary", "fingerprint": "3936ca22cdaa179b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ace665699f4ae518", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/organization/gerencias.tsx:124"}, "properties": {"repobilityId": "4bd01bcbe766be55", "scanner": "scanner-primary", "fingerprint": "ace665699f4ae518", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b7061c129ff49c6a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/config/branding.tsx:24"}, "properties": {"repobilityId": "d6dc3eba3b94b708", "scanner": "scanner-primary", "fingerprint": "b7061c129ff49c6a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bf18bfed6fcc25ca", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/config/palette.tsx:38"}, "properties": {"repobilityId": "9764ae4b9acbe02e", "scanner": "scanner-primary", "fingerprint": "bf18bfed6fcc25ca", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-60aaa43735f2bfd9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/rcsa/plantilla-detail.tsx:114"}, "properties": {"repobilityId": "7b50a3f044f26af0", "scanner": "scanner-primary", "fingerprint": "60aaa43735f2bfd9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c4396837e55a7e30", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/rcsa/reportes.tsx:66"}, "properties": {"repobilityId": "505a4f43b25db4ec", "scanner": "scanner-primary", "fingerprint": "c4396837e55a7e30", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1d284d6268bbb4f2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/rcsa/campana-detail.tsx:119"}, "properties": {"repobilityId": "7116d90996e16751", "scanner": "scanner-primary", "fingerprint": "1d284d6268bbb4f2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-26d2ad756e767567", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/rcsa/campanas.tsx:92"}, "properties": {"repobilityId": "81db4345bd2f2767", "scanner": "scanner-primary", "fingerprint": "26d2ad756e767567", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9bce4c839f42cf57", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/rcsa/submission-review.tsx:124"}, "properties": {"repobilityId": "2341c149eac84aed", "scanner": "scanner-primary", "fingerprint": "9bce4c839f42cf57", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e511e4cad2897ab9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/rcsa/index.tsx:73"}, "properties": {"repobilityId": "3917a983db291006", "scanner": "scanner-primary", "fingerprint": "e511e4cad2897ab9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-096282c0b8be88a4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/rcsa/plantillas.tsx:49"}, "properties": {"repobilityId": "abf4b48e59f3a023", "scanner": "scanner-primary", "fingerprint": "096282c0b8be88a4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d3d07b9603d1d580", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/lib/queryClient.ts:319"}, "properties": {"repobilityId": "1b970bb72339083b", "scanner": "scanner-primary", "fingerprint": "d3d07b9603d1d580", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bc2dceec86c7dbb1", "level": "none", "message": {"text": "Commented-code block (5 lines) in client/src/lib/auditTypeRegistry.ts:3"}, "properties": {"repobilityId": "a8d3d30a10dbc55f", "scanner": "scanner-primary", "fingerprint": "bc2dceec86c7dbb1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fd8b6f00c4f927fd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/lib/retry.ts:134"}, "properties": {"repobilityId": "c1bed57b2a32722c", "scanner": "scanner-primary", "fingerprint": "fd8b6f00c4f927fd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a362c7dc9f5a9587", "level": "none", "message": {"text": "Commented-code block (29 lines) in shared/schema.ts:444"}, "properties": {"repobilityId": "fedfec887f840f3c", "scanner": "scanner-primary", "fingerprint": "a362c7dc9f5a9587", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6bba2ef726650645", "level": "none", "message": {"text": "Commented-code block (6 lines) in shared/risk-validation-helpers.ts:84"}, "properties": {"repobilityId": "8bc3356aee828c38", "scanner": "scanner-primary", "fingerprint": "6bba2ef726650645", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ced1b7d63402e49b", "level": "note", "message": {"text": "Legacy-named symbol `action_plan_alerts_v1` in shared/action-plan-alerts.ts:3"}, "properties": {"repobilityId": "85886377f5fa156d", "scanner": "scanner-primary", "fingerprint": "ced1b7d63402e49b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-66bce55719c47e5f", "level": "note", "message": {"text": "92 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "95e0bcbf5ae0de77", "scanner": "scanner-primary", "fingerprint": "66bce55719c47e5f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-e94fb69ea025e885", "level": "warning", "message": {"text": "Frontend route `/reset-password/:token` has no Link/navigate to it \u2014 client/src/App.tsx"}, "properties": {"repobilityId": "d90058430f916442", "scanner": "scanner-primary", "fingerprint": "e94fb69ea025e885", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-cd4e4981a0f8697d", "level": "warning", "message": {"text": "Frontend route `/change-password-required` has no Link/navigate to it \u2014 client/src/App.tsx"}, "properties": {"repobilityId": "b8d41755cb099988", "scanner": "scanner-primary", "fingerprint": "cd4e4981a0f8697d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-2a106d3961a716c5", "level": "warning", "message": {"text": "Frontend route `/no-access` has no Link/navigate to it \u2014 client/src/App.tsx"}, "properties": {"repobilityId": "db26a5cc3c088e6f", "scanner": "scanner-primary", "fingerprint": "2a106d3961a716c5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-8bfda9d5ca8f5464", "level": "warning", "message": {"text": "Frontend route `/public/batch-validation/:token` has no Link/navigate to it \u2014 client/src/App.tsx"}, "properties": {"repobilityId": "513fc17c66c0c8e0", "scanner": "scanner-primary", "fingerprint": "8bfda9d5ca8f5464", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-be089e6c5384d628", "level": "warning", "message": {"text": "Frontend route `/public/validate-action-plan/:token` has no Link/navigate to it \u2014 client/src/App.tsx"}, "properties": {"repobilityId": "0f7852f1fd7b78ea", "scanner": "scanner-primary", "fingerprint": "be089e6c5384d628", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-ec4496700fe241ca", "level": "warning", "message": {"text": "Frontend route `/validate/:token` has no Link/navigate to it \u2014 client/src/App.tsx"}, "properties": {"repobilityId": "f2edd01fac526a41", "scanner": "scanner-primary", "fingerprint": "ec4496700fe241ca", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-ff8f04bd1d196f83", "level": "warning", "message": {"text": "Frontend route `/action-plan-upload/:token` has no Link/navigate to it \u2014 client/src/App.tsx"}, "properties": {"repobilityId": "5a3db4ef5fa6342e", "scanner": "scanner-primary", "fingerprint": "ff8f04bd1d196f83", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-d89dd20ed6a98ee7", "level": "warning", "message": {"text": "Frontend route `/coi/declaracion/:token` has no Link/navigate to it \u2014 client/src/App.tsx"}, "properties": {"repobilityId": "7c3bed133d6123bc", "scanner": "scanner-primary", "fingerprint": "d89dd20ed6a98ee7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-32c97c739a683ef9", "level": "warning", "message": {"text": "Frontend route `/rcsa/autoevaluacion/:token` has no Link/navigate to it \u2014 client/src/App.tsx"}, "properties": {"repobilityId": "abd91c5f0ca2a8c2", "scanner": "scanner-primary", "fingerprint": "32c97c739a683ef9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-9c7a9b006ea34337", "level": "warning", "message": {"text": "Frontend route `/dashboard/executor` has no Link/navigate to it \u2014 client/src/App.tsx"}, "properties": {"repobilityId": "2faaed282b6620e0", "scanner": "scanner-primary", "fingerprint": "9c7a9b006ea34337", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-e1c84dc4d651a426", "level": "warning", "message": {"text": "Frontend route `/dashboard/supervisor` has no Link/navigate to it \u2014 client/src/App.tsx"}, "properties": {"repobilityId": "273ab02e642b9bd8", "scanner": "scanner-primary", "fingerprint": "e1c84dc4d651a426", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-ebe050896bc58d7c", "level": "warning", "message": {"text": "Frontend route `/dashboard/admin` has no Link/navigate to it \u2014 client/src/App.tsx"}, "properties": {"repobilityId": "6f152575a72461ed", "scanner": "scanner-primary", "fingerprint": "ebe050896bc58d7c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-7d25bd512cc4cf02", "level": "warning", "message": {"text": "Frontend route `/probability-demo` has no Link/navigate to it \u2014 client/src/App.tsx"}, "properties": {"repobilityId": "4136115c560a995c", "scanner": "scanner-primary", "fingerprint": "7d25bd512cc4cf02", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-bf15f9f0fd838ae2", "level": "warning", "message": {"text": "Frontend route `/manual/shortcuts` has no Link/navigate to it \u2014 client/src/App.tsx"}, "properties": {"repobilityId": "c07f09563ee27e08", "scanner": "scanner-primary", "fingerprint": "bf15f9f0fd838ae2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-2cd94637cad82d2e", "level": "warning", "message": {"text": "Frontend route `/audits/:auditCode` has no Link/navigate to it \u2014 client/src/App.tsx"}, "properties": {"repobilityId": "a22d4dff2a75ba2d", "scanner": "scanner-primary", "fingerprint": "2cd94637cad82d2e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-0714312d0dbfa3c7", "level": "warning", "message": {"text": "Frontend route `/audit-test/:id` has no Link/navigate to it \u2014 client/src/App.tsx"}, "properties": {"repobilityId": "0ef64ab49436771f", "scanner": "scanner-primary", "fingerprint": "0714312d0dbfa3c7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-834701ee3a655a68", "level": "warning", "message": {"text": "Frontend route `/audits/:auditCode/create-test` has no Link/navigate to it \u2014 client/src/App.tsx"}, "properties": {"repobilityId": "fb23b55729bcaf22", "scanner": "scanner-primary", "fingerprint": "834701ee3a655a68", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-62e51cb47cae8671", "level": "warning", "message": {"text": "Frontend route `/audit-plan-wizard` has no Link/navigate to it \u2014 client/src/App.tsx"}, "properties": {"repobilityId": "a3cdc5d44b5d4763", "scanner": "scanner-primary", "fingerprint": "62e51cb47cae8671", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-aa539bba41d73e27", "level": "warning", "message": {"text": "Frontend route `/coi/formularios/:id/preview` has no Link/navigate to it \u2014 client/src/App.tsx"}, "properties": {"repobilityId": "95cd6f406330493d", "scanner": "scanner-primary", "fingerprint": "aa539bba41d73e27", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-aec75b24177f96fa", "level": "warning", "message": {"text": "Frontend route `/coi/formularios/:id` has no Link/navigate to it \u2014 client/src/App.tsx"}, "properties": {"repobilityId": "0afc39f75c494801", "scanner": "scanner-primary", "fingerprint": "aec75b24177f96fa", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-5f4334d38e4d4f12", "level": "warning", "message": {"text": "Frontend route `/coi/campanas/:id` has no Link/navigate to it \u2014 client/src/App.tsx"}, "properties": {"repobilityId": "4d7bf651227e44b3", "scanner": "scanner-primary", "fingerprint": "5f4334d38e4d4f12", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-4316c84ac9cebd1f", "level": "warning", "message": {"text": "Frontend route `/rcsa/plantillas/:id` has no Link/navigate to it \u2014 client/src/App.tsx"}, "properties": {"repobilityId": "e8dd2aeba82168a3", "scanner": "scanner-primary", "fingerprint": "4316c84ac9cebd1f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-c69e2810090eea07", "level": "warning", "message": {"text": "Frontend route `/rcsa/campanas/:id` has no Link/navigate to it \u2014 client/src/App.tsx"}, "properties": {"repobilityId": "548a7ad43c32b970", "scanner": "scanner-primary", "fingerprint": "c69e2810090eea07", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-c2021470584a32f3", "level": "warning", "message": {"text": "Frontend route `/rcsa/submissions/:id` has no Link/navigate to it \u2014 client/src/App.tsx"}, "properties": {"repobilityId": "802ad45467612f3d", "scanner": "scanner-primary", "fingerprint": "c2021470584a32f3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-e21fda27a6d29eb1", "level": "warning", "message": {"text": "Frontend route `/config/risk-aggregation` has no Link/navigate to it \u2014 client/src/App.tsx"}, "properties": {"repobilityId": "a5ab4793320335f7", "scanner": "scanner-primary", "fingerprint": "e21fda27a6d29eb1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-ab54cbd273044f44", "level": "warning", "message": {"text": "Frontend route `/config/criteria` has no Link/navigate to it \u2014 client/src/App.tsx"}, "properties": {"repobilityId": "2ef0b2e7fe231a08", "scanner": "scanner-primary", "fingerprint": "ab54cbd273044f44", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-b66ae807a95f46ff", "level": "error", "message": {"text": "Dangling fetch: POST https://cl.unigrc.app/api/admin/create-performance-indexes (crear-indices-navegador-simple.js:4)"}, "properties": {"repobilityId": "3c9a4480cb2138f4", "scanner": "scanner-primary", "fingerprint": "b66ae807a95f46ff", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5a3108d6559f4999", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/execute-sql (EJECUTAR-INDICES-CORREGIDOS-DIRECTO.js:96)"}, "properties": {"repobilityId": "8fe48b2475e5e202", "scanner": "scanner-primary", "fingerprint": "5a3108d6559f4999", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f84741b7a80832d1", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/execute-sql (EJECUTAR-INDICES-CORREGIDOS-DIRECTO.js:136)"}, "properties": {"repobilityId": "260ea93d2b414b36", "scanner": "scanner-primary", "fingerprint": "f84741b7a80832d1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-58dfc7e2cfea38b9", "level": "error", "message": {"text": "Dangling fetch: POST https://cl.unigrc.app/api/admin/create-performance-indexes (crear-indices-desde-navegador.js:19)"}, "properties": {"repobilityId": "f68e263fc5ea1db5", "scanner": "scanner-primary", "fingerprint": "58dfc7e2cfea38b9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-49cc976ed9024a72", "level": "error", "message": {"text": "Dangling fetch: GET /api/audit-review-comments/test/${auditTestId} (client/src/components/audit-test-workspace/SupervisorReview.tsx:111)"}, "properties": {"repobilityId": "be4e2f48298e906d", "scanner": "scanner-primary", "fingerprint": "49cc976ed9024a72", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e7b87a91407e2b18", "level": "error", "message": {"text": "Dangling fetch: GET /api/risk-processes/risk/${risk?.id}?fields=lite (client/src/components/forms/risk-form.tsx:247)"}, "properties": {"repobilityId": "0352a30a9d3203f3", "scanner": "scanner-primary", "fingerprint": "e7b87a91407e2b18", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4c6d831343cd770f", "level": "error", "message": {"text": "Dangling fetch: POST /api/${entity}/check-duplicates (client/src/components/ai/DuplicateCheckButton.tsx:69)"}, "properties": {"repobilityId": "b62f62617cfb8ecc", "scanner": "scanner-primary", "fingerprint": "4c6d831343cd770f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e80cd2825008e507", "level": "error", "message": {"text": "Dangling fetch: GET /api/dashboard/supervisor/${currentUser?.id} (client/src/pages/SupervisorDashboard.tsx:121)"}, "properties": {"repobilityId": "6f1b8c16cf90941f", "scanner": "scanner-primary", "fingerprint": "e80cd2825008e507", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2294a9196388570b", "level": "error", "message": {"text": "Dangling fetch: GET /api/audits/${auditId}/work-program/proposed-tests/risk/${selectedRiskId} (client/src/pages/audit-test-manual.tsx:92)"}, "properties": {"repobilityId": "01f9f37edb36f131", "scanner": "scanner-primary", "fingerprint": "2294a9196388570b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-015d2f798be8cd5c", "level": "error", "message": {"text": "Dangling fetch: GET /api/dashboard/executor/${currentUser?.id} (client/src/pages/ExecutorDashboard.tsx:82)"}, "properties": {"repobilityId": "a5a382cd08deabbe", "scanner": "scanner-primary", "fingerprint": "015d2f798be8cd5c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e633981dc8e88ee2", "level": "error", "message": {"text": "Dangling fetch: GET /api/dashboard/activity/${currentUser?.id} (client/src/pages/ExecutorDashboard.tsx:102)"}, "properties": {"repobilityId": "548dbf8bac58888b", "scanner": "scanner-primary", "fingerprint": "e633981dc8e88ee2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5b2e46229f7df16d", "level": "error", "message": {"text": "Dangling fetch: GET /api/dashboard/executor/${currentUser?.id}?refresh=true (client/src/pages/ExecutorDashboard.tsx:184)"}, "properties": {"repobilityId": "d3fa96b0cc892f58", "scanner": "scanner-primary", "fingerprint": "5b2e46229f7df16d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-592a25bf00864ef6", "level": "error", "message": {"text": "Dangling fetch: GET /api/dashboard/activity/${currentUser?.id}?refresh=true (client/src/pages/ExecutorDashboard.tsx:187)"}, "properties": {"repobilityId": "b3bafd327891640e", "scanner": "scanner-primary", "fingerprint": "592a25bf00864ef6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d1bb4d410353b955", "level": "error", "message": {"text": "Dangling fetch: GET /api/audit-findings/${editingFinding?.id}/actions (client/src/pages/audit-findings.tsx:236)"}, "properties": {"repobilityId": "70423ca4ec82a3ff", "scanner": "scanner-primary", "fingerprint": "d1bb4d410353b955", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9e3dcdb0dcb963ac", "level": "error", "message": {"text": "Dangling fetch: GET /api/coi-public/declaration/${token} (client/src/pages/coi/declaracion-publica.tsx:36)"}, "properties": {"repobilityId": "5758cb615b4757ef", "scanner": "scanner-primary", "fingerprint": "9e3dcdb0dcb963ac", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-06d4ae821e148172", "level": "error", "message": {"text": "Dangling fetch: POST /api/coi-public/declaration/${token}/sign (client/src/pages/coi/declaracion-publica.tsx:70)"}, "properties": {"repobilityId": "97d6ab7ec42be91f", "scanner": "scanner-primary", "fingerprint": "06d4ae821e148172", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3b7add8d53d95eaa", "level": "error", "message": {"text": "Dangling fetch: GET /api/coi-public/auth-config (client/src/pages/coi/declaracion-publica.tsx:204)"}, "properties": {"repobilityId": "2fe40a37c04faf7c", "scanner": "scanner-primary", "fingerprint": "3b7add8d53d95eaa", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-13465ade6a57a5de", "level": "error", "message": {"text": "Dangling fetch: POST /api/coi/declarants/import (client/src/pages/coi/declarantes.tsx:368)"}, "properties": {"repobilityId": "88cdff3c3dc4e5a7", "scanner": "scanner-primary", "fingerprint": "13465ade6a57a5de", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d78aede3e36583be", "level": "error", "message": {"text": "Dangling fetch: GET /api/coi/dashboard/stats (client/src/pages/coi/index.tsx:64)"}, "properties": {"repobilityId": "2210dfc4d760a667", "scanner": "scanner-primary", "fingerprint": "d78aede3e36583be", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-67d8bab4ee17122d", "level": "error", "message": {"text": "Dangling fetch: GET /api/rcsa/templates/${slugOrId} (client/src/pages/rcsa/plantilla-detail.tsx:114)"}, "properties": {"repobilityId": "7066c2329a3337f1", "scanner": "scanner-primary", "fingerprint": "67d8bab4ee17122d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-17511849dde4251d", "level": "error", "message": {"text": "Dangling fetch: GET /api/rcsa/templates/${templateId}/versions (client/src/pages/rcsa/plantilla-detail.tsx:124)"}, "properties": {"repobilityId": "0c21f5381a349e3a", "scanner": "scanner-primary", "fingerprint": "17511849dde4251d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d48b1a683a8d29f6", "level": "error", "message": {"text": "Dangling fetch: GET /api/rcsa-public/declaration/${token} (client/src/pages/rcsa/autoevaluacion-publica.tsx:119)"}, "properties": {"repobilityId": "687e6224888b0411", "scanner": "scanner-primary", "fingerprint": "d48b1a683a8d29f6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6197ad9dfe787f73", "level": "error", "message": {"text": "Dangling fetch: PUT /api/rcsa-public/declaration/${token}/draft (client/src/pages/rcsa/autoevaluacion-publica.tsx:159)"}, "properties": {"repobilityId": "db5d249d90a5e15a", "scanner": "scanner-primary", "fingerprint": "6197ad9dfe787f73", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a863ce3afd70b536", "level": "error", "message": {"text": "Dangling fetch: POST /api/rcsa-public/declaration/${token}/suggest-risks (client/src/pages/rcsa/autoevaluacion-publica.tsx:226)"}, "properties": {"repobilityId": "c67f266fd4e3959e", "scanner": "scanner-primary", "fingerprint": "a863ce3afd70b536", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4824af63fea96943", "level": "error", "message": {"text": "Dangling fetch: POST /api/rcsa-public/declaration/${token}/submit (client/src/pages/rcsa/autoevaluacion-publica.tsx:282)"}, "properties": {"repobilityId": "91e99b1921a9cd97", "scanner": "scanner-primary", "fingerprint": "4824af63fea96943", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1651f23fd47b9c80", "level": "error", "message": {"text": "Dangling fetch: GET /api/rcsa-public/auth-config (client/src/pages/rcsa/autoevaluacion-publica.tsx:655)"}, "properties": {"repobilityId": "3ebe42f94ccb5efe", "scanner": "scanner-primary", "fingerprint": "1651f23fd47b9c80", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6e93e6609e45fdb6", "level": "error", "message": {"text": "Dangling fetch: GET /api/rcsa/dashboard/stats (client/src/pages/rcsa/reportes.tsx:66)"}, "properties": {"repobilityId": "f81cc62a236a78b6", "scanner": "scanner-primary", "fingerprint": "6e93e6609e45fdb6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6a222c6d92cc7a11", "level": "error", "message": {"text": "Dangling fetch: GET /api/rcsa/campaigns (client/src/pages/rcsa/reportes.tsx:71)"}, "properties": {"repobilityId": "0da33786b0bcc825", "scanner": "scanner-primary", "fingerprint": "6a222c6d92cc7a11", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ee2fbd3582715bd3", "level": "error", "message": {"text": "Dangling fetch: GET /api/rcsa/campaigns/${id} (client/src/pages/rcsa/campana-detail.tsx:119)"}, "properties": {"repobilityId": "800b641de2678751", "scanner": "scanner-primary", "fingerprint": "ee2fbd3582715bd3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f8168225d9f0b5d9", "level": "error", "message": {"text": "Dangling fetch: GET /api/rcsa/campaigns/${id}/recipients (client/src/pages/rcsa/campana-detail.tsx:125)"}, "properties": {"repobilityId": "6159ab19bf8f1d6e", "scanner": "scanner-primary", "fingerprint": "f8168225d9f0b5d9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8d133a55e2cb7be0", "level": "error", "message": {"text": "Dangling fetch: GET /api/rcsa/campaigns/${id}/submissions (client/src/pages/rcsa/campana-detail.tsx:131)"}, "properties": {"repobilityId": "532bbc1296ded48f", "scanner": "scanner-primary", "fingerprint": "8d133a55e2cb7be0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-25972154c24b8b9b", "level": "error", "message": {"text": "Dangling fetch: GET /api/rcsa/campaigns (client/src/pages/rcsa/campanas.tsx:92)"}, "properties": {"repobilityId": "0c2e4f169bba9290", "scanner": "scanner-primary", "fingerprint": "25972154c24b8b9b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c5e2f1661c4387aa", "level": "error", "message": {"text": "Dangling fetch: GET /api/rcsa/templates (client/src/pages/rcsa/campanas.tsx:97)"}, "properties": {"repobilityId": "2dd87b1e630a660d", "scanner": "scanner-primary", "fingerprint": "c5e2f1661c4387aa", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-46a78e7968701ecd", "level": "error", "message": {"text": "Dangling fetch: GET /api/rcsa/submissions/${id} (client/src/pages/rcsa/submission-review.tsx:124)"}, "properties": {"repobilityId": "c5954f5c59f9b6bd", "scanner": "scanner-primary", "fingerprint": "46a78e7968701ecd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-04aa3df46fea9f4d", "level": "error", "message": {"text": "Dangling fetch: GET /api/rcsa/dashboard/stats (client/src/pages/rcsa/index.tsx:73)"}, "properties": {"repobilityId": "65586369780479f3", "scanner": "scanner-primary", "fingerprint": "04aa3df46fea9f4d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2ab782334dfdb187", "level": "error", "message": {"text": "Dangling fetch: GET /api/rcsa/templates (client/src/pages/rcsa/plantillas.tsx:49)"}, "properties": {"repobilityId": "98cc8092e7bc0327", "scanner": "scanner-primary", "fingerprint": "2ab782334dfdb187", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2dba25752f9055ef", "level": "note", "message": {"text": "Unused endpoint: GET /api/test"}, "properties": {"repobilityId": "358f80a7c810b869", "scanner": "scanner-primary", "fingerprint": "2dba25752f9055ef", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-dde3adb27bf7eebe", "level": "note", "message": {"text": "Unused endpoint: USE /api"}, "properties": {"repobilityId": "a3eddf5065ffbf6c", "scanner": "scanner-primary", "fingerprint": "dde3adb27bf7eebe", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c7901e6c90c81569", "level": "note", "message": {"text": "Unused endpoint: GET /api/auth/microsoft"}, "properties": {"repobilityId": "512bf0d699daa9e7", "scanner": "scanner-primary", "fingerprint": "c7901e6c90c81569", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-eccbff88156a774a", "level": "note", "message": {"text": "Unused endpoint: GET /api/auth/microsoft/callback"}, "properties": {"repobilityId": "17b32d0e774e56c4", "scanner": "scanner-primary", "fingerprint": "eccbff88156a774a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2936e06839221625", "level": "note", "message": {"text": "Unused endpoint: GET /api/auth/microsoft/debug"}, "properties": {"repobilityId": "4809c6aa7baead3d", "scanner": "scanner-primary", "fingerprint": "2936e06839221625", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3d72750b1a6cab38", "level": "note", "message": {"text": "Unused endpoint: GET /api/login"}, "properties": {"repobilityId": "83e3810e35fc14d0", "scanner": "scanner-primary", "fingerprint": "3d72750b1a6cab38", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e75f055deeb9fa12", "level": "note", "message": {"text": "Unused endpoint: GET /api/logout"}, "properties": {"repobilityId": "0f527f5860bcf8cd", "scanner": "scanner-primary", "fingerprint": "e75f055deeb9fa12", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3e56f91e051b759b", "level": "note", "message": {"text": "Unused endpoint: GET /api/callback"}, "properties": {"repobilityId": "0cee09a4a0407269", "scanner": "scanner-primary", "fingerprint": "3e56f91e051b759b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fb560244ecde23cc", "level": "note", "message": {"text": "Unused endpoint: GET /api/ai/status"}, "properties": {"repobilityId": "79f2eea61f5df07d", "scanner": "scanner-primary", "fingerprint": "fb560244ecde23cc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2bff7a3526b94127", "level": "note", "message": {"text": "Unused endpoint: POST /api/ai/test"}, "properties": {"repobilityId": "e525d076a79aa442", "scanner": "scanner-primary", "fingerprint": "2bff7a3526b94127", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d72cf599fa344fe8", "level": "note", "message": {"text": "Unused endpoint: POST /api/ai/test-stream"}, "properties": {"repobilityId": "05a1164d7f0a051a", "scanner": "scanner-primary", "fingerprint": "d72cf599fa344fe8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7ecfc13a0796068b", "level": "note", "message": {"text": "Unused endpoint: POST /api/ai/assistant-stream"}, "properties": {"repobilityId": "7f15ddb452105cc7", "scanner": "scanner-primary", "fingerprint": "7ecfc13a0796068b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1fde000f0a841000", "level": "note", "message": {"text": "Unused endpoint: POST /api/ai/risk-suggestions-stream"}, "properties": {"repobilityId": "7f8b609a2d37869a", "scanner": "scanner-primary", "fingerprint": "1fde000f0a841000", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-85bad0707ff041d0", "level": "note", "message": {"text": "Unused endpoint: GET /ServiceProviderConfig"}, "properties": {"repobilityId": "6e1bbd78c549a100", "scanner": "scanner-primary", "fingerprint": "85bad0707ff041d0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fd94c3f014c6e392", "level": "note", "message": {"text": "Unused endpoint: GET /Schemas"}, "properties": {"repobilityId": "407d34a4fc4d7d64", "scanner": "scanner-primary", "fingerprint": "fd94c3f014c6e392", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-99a78d4d5c4f63e2", "level": "note", "message": {"text": "Unused endpoint: POST /Users"}, "properties": {"repobilityId": "5277717f19a984a5", "scanner": "scanner-primary", "fingerprint": "99a78d4d5c4f63e2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-26b6282feec5532a", "level": "note", "message": {"text": "Unused endpoint: PUT /Users/:id"}, "properties": {"repobilityId": "6cd0250f55b17668", "scanner": "scanner-primary", "fingerprint": "26b6282feec5532a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e6a846a2107680ff", "level": "note", "message": {"text": "Unused endpoint: PATCH /Users/:id"}, "properties": {"repobilityId": "d59509d1f66b46ea", "scanner": "scanner-primary", "fingerprint": "e6a846a2107680ff", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3f9c45931ab933a4", "level": "note", "message": {"text": "Unused endpoint: DELETE /Users/:id"}, "properties": {"repobilityId": "53ecb792c393b0c5", "scanner": "scanner-primary", "fingerprint": "3f9c45931ab933a4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c449334b877202a3", "level": "note", "message": {"text": "Unused endpoint: GET /api/auth/saml/:tenantSlug"}, "properties": {"repobilityId": "6427e8e56dc514ec", "scanner": "scanner-primary", "fingerprint": "c449334b877202a3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-022dbaa9257d26b9", "level": "note", "message": {"text": "Unused endpoint: POST /api/auth/saml/:tenantSlug/callback"}, "properties": {"repobilityId": "2d4d0704c5a15a7e", "scanner": "scanner-primary", "fingerprint": "022dbaa9257d26b9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d54e63567510fde4", "level": "note", "message": {"text": "Unused endpoint: GET /api/auth/saml/:tenantSlug/metadata"}, "properties": {"repobilityId": "16a868c78a327c4f", "scanner": "scanner-primary", "fingerprint": "d54e63567510fde4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-00b920cf68e783e2", "level": "note", "message": {"text": "Unused endpoint: GET /api/control-owners"}, "properties": {"repobilityId": "f234ea36a81a36ac", "scanner": "scanner-primary", "fingerprint": "00b920cf68e783e2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-810ae023b80667c6", "level": "note", "message": {"text": "Unused endpoint: GET /api/control-owners/:id"}, "properties": {"repobilityId": "5a52a85f4f2b3e01", "scanner": "scanner-primary", "fingerprint": "810ae023b80667c6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a63fc8a4fbc4b38e", "level": "note", "message": {"text": "Unused endpoint: GET /api/control-owners/control/:controlId"}, "properties": {"repobilityId": "11d2b4fd811d31b2", "scanner": "scanner-primary", "fingerprint": "a63fc8a4fbc4b38e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-26897949908af36c", "level": "note", "message": {"text": "Unused endpoint: POST /api/control-owners"}, "properties": {"repobilityId": "26b14d3e410c2f7e", "scanner": "scanner-primary", "fingerprint": "26897949908af36c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c9b02410739e8708", "level": "note", "message": {"text": "Unused endpoint: PUT /api/control-owners/:id"}, "properties": {"repobilityId": "44b6ab92a7d632c2", "scanner": "scanner-primary", "fingerprint": "c9b02410739e8708", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-81caa5b7afa0d359", "level": "note", "message": {"text": "Unused endpoint: DELETE /api/control-owners/:id"}, "properties": {"repobilityId": "3e82b52cbc756d9f", "scanner": "scanner-primary", "fingerprint": "81caa5b7afa0d359", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-136c26df7371e891", "level": "note", "message": {"text": "Unused endpoint: GET /api/revalidations"}, "properties": {"repobilityId": "e528b2c31782e743", "scanner": "scanner-primary", "fingerprint": "136c26df7371e891", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6bf0cab63c4561ef", "level": "note", "message": {"text": "Unused endpoint: GET /api/revalidations/:id"}, "properties": {"repobilityId": "e33b489c652dca90", "scanner": "scanner-primary", "fingerprint": "6bf0cab63c4561ef", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1b4b99d0e259f786", "level": "note", "message": {"text": "Unused endpoint: GET /api/revalidations/control/:controlId"}, "properties": {"repobilityId": "e524684e99db0d17", "scanner": "scanner-primary", "fingerprint": "1b4b99d0e259f786", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7ca6dc12083c2615", "level": "note", "message": {"text": "Unused endpoint: GET /api/revalidations/latest/control/:controlId"}, "properties": {"repobilityId": "474f9b7d54a03079", "scanner": "scanner-primary", "fingerprint": "7ca6dc12083c2615", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4c6ebf4a3e7ce8f8", "level": "note", "message": {"text": "Unused endpoint: POST /api/revalidations"}, "properties": {"repobilityId": "72ee63462ed4d8ac", "scanner": "scanner-primary", "fingerprint": "4c6ebf4a3e7ce8f8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-368ce11fa7ec8d86", "level": "note", "message": {"text": "Unused endpoint: PUT /api/revalidations/:id"}, "properties": {"repobilityId": "03a3304e43af8c3a", "scanner": "scanner-primary", "fingerprint": "368ce11fa7ec8d86", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-11894c067ab0488b", "level": "note", "message": {"text": "Unused endpoint: GET /api/revalidation-policies"}, "properties": {"repobilityId": "41bff37dcef84ff8", "scanner": "scanner-primary", "fingerprint": "11894c067ab0488b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-bb2064ac715d711d", "level": "note", "message": {"text": "Unused endpoint: GET /api/revalidation-policies/:id"}, "properties": {"repobilityId": "376ab096c1ca06ce", "scanner": "scanner-primary", "fingerprint": "bb2064ac715d711d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-05023dc827139fd4", "level": "note", "message": {"text": "Unused endpoint: GET /api/revalidation-policies/risk-level/:riskLevel"}, "properties": {"repobilityId": "f740ba7af28912b2", "scanner": "scanner-primary", "fingerprint": "05023dc827139fd4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5f376170e14e1e27", "level": "note", "message": {"text": "Unused endpoint: POST /api/revalidation-policies"}, "properties": {"repobilityId": "9b530aa0f00cc47b", "scanner": "scanner-primary", "fingerprint": "5f376170e14e1e27", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1726ebc7df36bb93", "level": "note", "message": {"text": "Unused endpoint: PUT /api/revalidation-policies/:id"}, "properties": {"repobilityId": "fcf70496bd12e27e", "scanner": "scanner-primary", "fingerprint": "1726ebc7df36bb93", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6722276438d4e003", "level": "note", "message": {"text": "Unused endpoint: DELETE /api/revalidation-policies/:id"}, "properties": {"repobilityId": "ac2c18dcdf6f668c", "scanner": "scanner-primary", "fingerprint": "6722276438d4e003", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3e571fe15cdf5d1e", "level": "note", "message": {"text": "Unused endpoint: POST /api/revalidations/recalculate"}, "properties": {"repobilityId": "6e6170527ae2c362", "scanner": "scanner-primary", "fingerprint": "3e571fe15cdf5d1e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-99079e53c5639a17", "level": "note", "message": {"text": "Unused endpoint: GET /api/revalidations/status-summary"}, "properties": {"repobilityId": "dd3f65607505918f", "scanner": "scanner-primary", "fingerprint": "99079e53c5639a17", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-997465e2de383bb9", "level": "note", "message": {"text": "Unused endpoint: GET /api/revalidations/due-controls"}, "properties": {"repobilityId": "b0c52f5f2d589447", "scanner": "scanner-primary", "fingerprint": "997465e2de383bb9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-95f235fd6ce6304d", "level": "note", "message": {"text": "Unused endpoint: POST /evaluate"}, "properties": {"repobilityId": "bef3daa1339456d4", "scanner": "scanner-primary", "fingerprint": "95f235fd6ce6304d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fd278a3c91aa5b3c", "level": "note", "message": {"text": "Unused endpoint: POST /process"}, "properties": {"repobilityId": "a151f87d674ac498", "scanner": "scanner-primary", "fingerprint": "fd278a3c91aa5b3c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9de4cecd0e235584", "level": "note", "message": {"text": "Unused endpoint: GET /pending"}, "properties": {"repobilityId": "ab5571ad27a05944", "scanner": "scanner-primary", "fingerprint": "9de4cecd0e235584", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ceab2dc6c1bdde4b", "level": "note", "message": {"text": "Unused endpoint: POST /approve/:id"}, "properties": {"repobilityId": "ce0c469b07e7c95e", "scanner": "scanner-primary", "fingerprint": "ceab2dc6c1bdde4b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e60fc88ed5474046", "level": "note", "message": {"text": "Unused endpoint: POST /reject/:id"}, "properties": {"repobilityId": "fca064eaf58aadbe", "scanner": "scanner-primary", "fingerprint": "e60fc88ed5474046", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f415f9f3f0a1924c", "level": "note", "message": {"text": "Unused endpoint: POST /escalate/:id"}, "properties": {"repobilityId": "e989ac69b15ed84b", "scanner": "scanner-primary", "fingerprint": "f415f9f3f0a1924c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-85e7498f5b0b2828", "level": "note", "message": {"text": "Unused endpoint: POST /bulk-approve"}, "properties": {"repobilityId": "6d89339172dab761", "scanner": "scanner-primary", "fingerprint": "85e7498f5b0b2828", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}