{"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-aa0a23df455d1b6f", "name": "Stray `console.log` in TS/JS \u2014 __tests__/economics/list-detail-tce-parity.test.ts:396", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 __tests__/economics/list-detail-tce-parity.test.ts:396"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e9a896f753070559", "name": "TODO/FIXME marker in shipping code \u2014 __tests__/api/draft-quote-greeting.test.ts:83", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 __tests__/api/draft-quote-greeting.test.ts:83"}, "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-efac5bdb5d9cbdb2", "name": "TODO/FIXME marker in shipping code \u2014 __tests__/api/llm-timeout-alignment.test.ts:159", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 __tests__/api/llm-timeout-alignment.test.ts:159"}, "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-3af32ae861e87383", "name": "Stray `console.log` in TS/JS \u2014 __tests__/api/compare-routes-perf.test.ts:120", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 __tests__/api/compare-routes-perf.test.ts:120"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-10b894cfb91625e2", "name": "TODO/FIXME marker in shipping code \u2014 __tests__/lib/knowledge/embeddings/pipeline.test.ts:96", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 __tests__/lib/knowledge/embeddings/pipeline.test.ts:96"}, "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-c7ce3e93da090a09", "name": "Stray `console.log` in TS/JS \u2014 __tests__/regression/test_chunker_entity_decode.test.ts:263", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 __tests__/regression/test_chunker_entity_decode.test.ts:263"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b4cdbc62b5469e6d", "name": "Stray `console.log` in TS/JS \u2014 __tests__/e2e/skeptical-forwarder.spec.ts:114", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 __tests__/e2e/skeptical-forwarder.spec.ts:114"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3692f994c38be1aa", "name": "Stray `console.log` in TS/JS \u2014 __tests__/e2e/spa-navigation-hydration.spec.ts:111", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 __tests__/e2e/spa-navigation-hydration.spec.ts:111"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d9172dadb9de4b38", "name": "Stray `console.log` in TS/JS \u2014 __tests__/e2e/rag-visual-verification.spec.ts:92", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 __tests__/e2e/rag-visual-verification.spec.ts:92"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-641d2b618c3b49ec", "name": "Stray `console.log` in TS/JS \u2014 __tests__/e2e/smoke/react-hydration.spec.ts:63", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 __tests__/e2e/smoke/react-hydration.spec.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-1cbd70250f04ca51", "name": "TODO/FIXME marker in shipping code \u2014 __tests__/e2e/smoke/tier2-match-detail.spec.ts:33", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 __tests__/e2e/smoke/tier2-match-detail.spec.ts:33"}, "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-11d310011f75e043", "name": "Stray `console.log` in TS/JS \u2014 scripts/knowledge-baltic-seed.ts:57", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/knowledge-baltic-seed.ts:57"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ef1fa976fa917132", "name": "Stray `console.log` in TS/JS \u2014 scripts/knowledge-igc-embed.ts:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/knowledge-igc-embed.ts:17"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-44141540b6c1e030", "name": "Stray `console.log` in TS/JS \u2014 scripts/knowledge-unlocode-seed.ts:217", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/knowledge-unlocode-seed.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-a1d4a0bb66983512", "name": "Stray `console.log` in TS/JS \u2014 scripts/verify-ports.ts:112", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verify-ports.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-cfefb0e57a89ebf8", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-bimco-clauses.ts:22", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-bimco-clauses.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-11fd4857c566c997", "name": "Stray `console.log` in TS/JS \u2014 scripts/build-sample-data.ts:165", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/build-sample-data.ts:165"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8c0fb7d1280a23a6", "name": "Stray `console.log` in TS/JS \u2014 scripts/setup-gmail-oauth.ts:125", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/setup-gmail-oauth.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-f8072dee55a8ed23", "name": "Stray `console.log` in TS/JS \u2014 scripts/progong-harness.ts:458", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/progong-harness.ts:458"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b159e418355bdf8f", "name": "Stray `console.log` in TS/JS \u2014 scripts/import-gmail-emails.ts:107", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import-gmail-emails.ts:107"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f02671af5776b8a9", "name": "Stray `console.log` in TS/JS \u2014 scripts/migrate-charterers-xss.ts:56", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-charterers-xss.ts:56"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4d248d2fe9aba2a0", "name": "Stray `console.log` in TS/JS \u2014 scripts/auto-prequote-cron.ts:93", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/auto-prequote-cron.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-de3f16ae073245bc", "name": "Stray `console.log` in TS/JS \u2014 scripts/extract-corpus-cases.ts:147", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/extract-corpus-cases.ts:147"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f9f8cf9d4677bc6e", "name": "Stray `console.log` in TS/JS \u2014 scripts/build-corpus.ts:57", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/build-corpus.ts:57"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b334e727d326b479", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-port-da.ts:231", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-port-da.ts:231"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-65fa7a1c92c1e86f", "name": "Stray `console.log` in TS/JS \u2014 scripts/refresh-canal-tariffs.ts:157", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/refresh-canal-tariffs.ts:157"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5c85fdede183a883", "name": "Stray `console.log` in TS/JS \u2014 scripts/migrate.ts:66", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate.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-c052c01bd815a5f0", "name": "Stray `console.log` in TS/JS \u2014 scripts/audit-grounding.ts:498", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/audit-grounding.ts:498"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-69cef0cfa4d654eb", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-sample-data.ts:36", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-sample-data.ts:36"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e83b6e377871b3a9", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-fx-rates.ts:72", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-fx-rates.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-3601ac0d01ce333c", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-market-history.ts:179", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-market-history.ts:179"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-38e3b84185fbeb65", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-vertex-datastores.ts:93", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-vertex-datastores.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-ce96db6abf5ff717", "name": "Stray `console.log` in TS/JS \u2014 scripts/knowledge-imsbc-embed.ts:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/knowledge-imsbc-embed.ts:17"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-badf769aab75cfdc", "name": "Stray `console.log` in TS/JS \u2014 scripts/data-integrity-check.ts:136", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/data-integrity-check.ts:136"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5dea76d56497a320", "name": "Stray `console.log` in TS/JS \u2014 scripts/knowledge-jwc-yaml-seed.ts:21", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/knowledge-jwc-yaml-seed.ts:21"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f3b8501668c1704b", "name": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/backfill-815-weights.ts:77", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/backfill-815-weights.ts:77"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0a963c3858d3ff79", "name": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/seed-all.ts:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/seed-all.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-cd8d1d4a9b0d48f3", "name": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/unfreeze-market.ts:38", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/unfreeze-market.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-e1d06267baf797a1", "name": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/reconcile.ts:193", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/reconcile.ts:193"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9523989c2f7ac44c", "name": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/regenerate-matches.ts:87", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/regenerate-matches.ts:87"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3335a943e5e1bd1e", "name": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/audit-matches.ts:45", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/audit-matches.ts:45"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0c800d92ed5b59f0", "name": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/seed-charterers.ts:114", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/seed-charterers.ts:114"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bd6363c013ddf6f5", "name": "TODO/FIXME marker in shipping code \u2014 scripts/demo-seed/real-matches.ts:320", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 scripts/demo-seed/real-matches.ts:320"}, "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-44f0975771a0bf8d", "name": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/real-matches.ts:147", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/real-matches.ts:147"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-54e3c23a537c80ef", "name": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/parse-via-devserver.ts:154", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/parse-via-devserver.ts:154"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-17464e24de33bf25", "name": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/backfill-charterer.ts:40", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/backfill-charterer.ts:40"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c5cafda7c221881e", "name": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/backfill-lastcargoes.ts:43", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/backfill-lastcargoes.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-c3d921ef8076ab03", "name": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/analyze.ts:395", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/analyze.ts:395"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0363656d20e4c1ef", "name": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/golden-candidates.ts:69", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/golden-candidates.ts:69"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aaf34fc85fa9ac49", "name": "TODO/FIXME marker in shipping code \u2014 scripts/demo-seed/build.ts:794", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 scripts/demo-seed/build.ts:794"}, "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-c60744bc823ad3ca", "name": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/build.ts:867", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/build.ts:867"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b8a562331cba9028", "name": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/patch-vessel-speed-consumption.ts:207", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/patch-vessel-speed-consumption.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-e6d8a04fc3ba3158", "name": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/patch-fit.ts:342", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/patch-fit.ts:342"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f41e9cd46290c464", "name": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/preview-ranking-shift.ts:72", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/preview-ranking-shift.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-4eeef4693eea2e6f", "name": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/parse-llm-direct.ts:105", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/parse-llm-direct.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-4a4a4b9a65bb4578", "name": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/validators.ts:88", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/validators.ts:88"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-73abae6d83f89eb5", "name": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/backfill-payout.ts:107", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/backfill-payout.ts:107"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fd8d94bd6160297f", "name": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/seed-tmi.ts:81", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/seed-tmi.ts: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-eb2ef011241a9354", "name": "Stray `console.log` in TS/JS \u2014 scripts/diag/verify-port-da-recalibration.ts:67", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/diag/verify-port-da-recalibration.ts:67"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f87b18930d90f043", "name": "Stray `console.log` in TS/JS \u2014 scripts/diag/da-51414-root-cause.ts:69", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/diag/da-51414-root-cause.ts:69"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bc1c05413f3856ef", "name": "Stray `console.log` in TS/JS \u2014 scripts/diag/war-risk-shift-table.ts:222", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/diag/war-risk-shift-table.ts:222"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cab30125115243d7", "name": "Stray `console.log` in TS/JS \u2014 scripts/diag/recalibrate-port-da.ts:72", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/diag/recalibrate-port-da.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-0726845818e28b52", "name": "Stray `console.log` in TS/JS \u2014 scripts/diag/tce-list-vs-detail-audit.ts:602", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/diag/tce-list-vs-detail-audit.ts:602"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-51e446e30208b2de", "name": "Stray `console.log` in TS/JS \u2014 scripts/diag/bunker-reco-check.ts:57", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/diag/bunker-reco-check.ts:57"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2caa8fc81286e5e0", "name": "Stray `console.log` in TS/JS \u2014 scripts/research/top-matches-broker-view.ts:376", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/research/top-matches-broker-view.ts:376"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5f1e63091bb67098", "name": "Stray `console.log` in TS/JS \u2014 scripts/research/match-realism-funnel.ts:218", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/research/match-realism-funnel.ts:218"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-802fbd8bd0f9b9a1", "name": "Stray `console.log` in TS/JS \u2014 scripts/smoke/genai-v2.ts:57", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/smoke/genai-v2.ts:57"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0dc3f5c41904896c", "name": "Stray `console.log` in TS/JS \u2014 scripts/l5c/extract-disagreements.ts:44", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/l5c/extract-disagreements.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-ae7ea21d830c26e5", "name": "Stray `console.log` in TS/JS \u2014 scripts/l5c/merge-pairs.ts:49", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/l5c/merge-pairs.ts:49"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5e5dbfe6e212dbbe", "name": "Stray `console.log` in TS/JS \u2014 scripts/eval/run-match-providers-comparison.ts:244", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/eval/run-match-providers-comparison.ts:244"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-393dedcba5e133d1", "name": "Stray `console.log` in TS/JS \u2014 scripts/eval/run-progonq-match.ts:157", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/eval/run-progonq-match.ts:157"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fe0c3f125dce2061", "name": "Stray `console.log` in TS/JS \u2014 scripts/eval/reparse-cargo-corpus.ts:116", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/eval/reparse-cargo-corpus.ts:116"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-772452e233870eba", "name": "Stray `console.log` in TS/JS \u2014 scripts/eval/parity-check-parsed-cargoes.ts:102", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/eval/parity-check-parsed-cargoes.ts:102"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0a5427bb2ffb386b", "name": "Stray `console.log` in TS/JS \u2014 scripts/eval/run-parser.ts:92", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/eval/run-parser.ts:92"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0ca917821f0296ab", "name": "Stray `console.log` in TS/JS \u2014 scripts/progonq/judge-match.ts:287", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/progonq/judge-match.ts:287"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-af0ab187ddc09189", "name": "Stray `console.log` in TS/JS \u2014 scripts/progonq/judge-explain-deal.ts:365", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/progonq/judge-explain-deal.ts:365"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2772d12ff483838a", "name": "Stray `console.log` in TS/JS \u2014 scripts/progonq/judge-draft-quote.ts:493", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/progonq/judge-draft-quote.ts:493"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f26ab673a9e1fa03", "name": "Stray `console.log` in TS/JS \u2014 scripts/progonq/__tests__/score-vessel.test.ts:230", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/progonq/__tests__/score-vessel.test.ts:230"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-caed06cee4212147", "name": "Stray `console.log` in TS/JS \u2014 scripts/wave-gamma-bake-off/redecide.ts:75", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/wave-gamma-bake-off/redecide.ts:75"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5fa49f5757094362", "name": "Stray `console.log` in TS/JS \u2014 scripts/wave-gamma-bake-off/build-ground-truth.ts:288", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/wave-gamma-bake-off/build-ground-truth.ts:288"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d3882ba71d44b7d4", "name": "Stray `console.log` in TS/JS \u2014 scripts/wave-gamma-bake-off/build-reference.ts:38", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/wave-gamma-bake-off/build-reference.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-05ef16f678972689", "name": "Stray `console.log` in TS/JS \u2014 scripts/wave-gamma-bake-off/cli.ts:78", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/wave-gamma-bake-off/cli.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-dfd6fbadc1b1724d", "name": "Stray `console.log` in TS/JS \u2014 scripts/wave-gamma-bake-off/analyze-degraded.ts:391", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/wave-gamma-bake-off/analyze-degraded.ts:391"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5734b2ed08248ad0", "name": "Stray `console.log` in TS/JS \u2014 scripts/wave-gamma-bake-off/validate-baseline.ts:346", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/wave-gamma-bake-off/validate-baseline.ts:346"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-07d3f513a712a7cf", "name": "Stray `console.log` in TS/JS \u2014 scripts/ports/ingest-wpi-cranes.ts:172", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/ports/ingest-wpi-cranes.ts:172"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6c2ac9ab55b17d16", "name": "Stray `console.log` in TS/JS \u2014 scripts/knowledge/status.ts:74", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/knowledge/status.ts:74"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-307d67966bb93f3d", "name": "Stray `console.log` in TS/JS \u2014 scripts/knowledge/load-market-indices.ts:71", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/knowledge/load-market-indices.ts:71"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-38226ef0d398ce41", "name": "Stray `console.log` in TS/JS \u2014 scripts/knowledge/refresh.ts:68", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/knowledge/refresh.ts:68"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a1e17a8a84e842e2", "name": "Stray `console.log` in TS/JS \u2014 scripts/knowledge/validate-data-files.ts:116", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/knowledge/validate-data-files.ts:116"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e8767dbc41463833", "name": "Stray `console.log` in TS/JS \u2014 scripts/knowledge/seeds/seed-psc-history.ts:36", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/knowledge/seeds/seed-psc-history.ts:36"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-db048bb9687b1162", "name": "Stray `console.log` in TS/JS \u2014 scripts/knowledge/seeds/seed-charterers.ts:206", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/knowledge/seeds/seed-charterers.ts:206"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-46f5eb95fa4b8901", "name": "Stray `console.log` in TS/JS \u2014 scripts/knowledge/seeds/seed-market-indices.ts:44", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/knowledge/seeds/seed-market-indices.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-ecbcfa91a2f263c3", "name": "Stray `console.log` in TS/JS \u2014 scripts/knowledge/sources/eca.ts:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/knowledge/sources/eca.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-079b85583184ed9a", "name": "Stray `console.log` in TS/JS \u2014 scripts/knowledge/sources/panama-tariffs.ts:38", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/knowledge/sources/panama-tariffs.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-f9709563a8b2004c", "name": "Stray `console.log` in TS/JS \u2014 scripts/knowledge/sources/distances.ts:155", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/knowledge/sources/distances.ts:155"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-48748f9be627590a", "name": "Stray `console.log` in TS/JS \u2014 scripts/knowledge/sources/ofac.ts:19", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/knowledge/sources/ofac.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-88f24071e1f71e20", "name": "Stray `console.log` in TS/JS \u2014 scripts/knowledge/sources/eu-sanctions.ts:19", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/knowledge/sources/eu-sanctions.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-5563973724db2bf3", "name": "Stray `console.log` in TS/JS \u2014 scripts/knowledge/sources/fx-rates.ts:21", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/knowledge/sources/fx-rates.ts:21"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4f859ed64a02e27b", "name": "Stray `console.log` in TS/JS \u2014 scripts/knowledge/cron/refresh-bimco-rag.ts:26", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/knowledge/cron/refresh-bimco-rag.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-f79b18c4ddb2da1b", "name": "Stray `console.log` in TS/JS \u2014 scripts/knowledge/cron/refresh-bunker.ts:34", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/knowledge/cron/refresh-bunker.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-1b527c2990a86806", "name": "Stray `console.log` in TS/JS \u2014 scripts/knowledge/cron/refresh-fx-rates.ts:23", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/knowledge/cron/refresh-fx-rates.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-1d40d72e6f032389", "name": "Stray `console.log` in TS/JS \u2014 scripts/knowledge/cron/refresh-sanctions.ts:56", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/knowledge/cron/refresh-sanctions.ts:56"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8cae8ddf5890744f", "name": "Stray `console.log` in TS/JS \u2014 scripts/knowledge/cron/refresh-market-indices.ts:38", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/knowledge/cron/refresh-market-indices.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-88ce6b2f07dc6b27", "name": "Stray `console.log` in TS/JS \u2014 scripts/knowledge/cron/refresh-eua.ts:36", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/knowledge/cron/refresh-eua.ts:36"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7e7778e4320ce1f2", "name": "`truncate` class without `title=` for hover reveal \u2014 components/source-quote-popover.tsx:66", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/source-quote-popover.tsx:66"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4791de262752fd5d", "name": "`truncate` class without `title=` for hover reveal \u2014 components/dashboard/DashboardTodoSection.tsx:75", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/dashboard/DashboardTodoSection.tsx:75"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-03aaf2e7161efb22", "name": "`truncate` class without `title=` for hover reveal \u2014 components/dashboard/DashboardFreshMatches.tsx:66", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/dashboard/DashboardFreshMatches.tsx:66"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3b1746ccb01829eb", "name": "`truncate` class without `title=` for hover reveal \u2014 components/market/KnowledgeFeed.tsx:92", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/market/KnowledgeFeed.tsx:92"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-12a37825f3f3a25a", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 app/layout.tsx:109", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/layout.tsx:109"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-29cc26a8bcf64c6d", "name": "`truncate` class without `title=` for hover reveal \u2014 app/matches/MatchesClient.tsx:504", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/matches/MatchesClient.tsx:504"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8bfb3051b535374b", "name": "`truncate` class without `title=` for hover reveal \u2014 app/processing/page.tsx:249", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/processing/page.tsx:249"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8508496ad3cff967", "name": "`truncate` class without `title=` for hover reveal \u2014 app/match/[id]/page.tsx:230", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/match/[id]/page.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-a7b6773cb0690b6e", "name": "`truncate` class without `title=` for hover reveal \u2014 app/cargo/CargoClient.tsx:580", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/cargo/CargoClient.tsx:580"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7cecaf3a7f9e27c7", "name": "`truncate` class without `title=` for hover reveal \u2014 app/email/page.tsx:110", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/email/page.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-93107b4414834286", "name": "`truncate` class without `title=` for hover reveal \u2014 app/vessels/VesselsClient.tsx:330", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/vessels/VesselsClient.tsx:330"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-53e3c9796eed05fa", "name": "`truncate` class without `title=` for hover reveal \u2014 app/recap/page.tsx:102", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/recap/page.tsx:102"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-173049b68e6be370", "name": "TODO/FIXME marker in shipping code \u2014 lib/matching/persist-session-matches.ts:174", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 lib/matching/persist-session-matches.ts:174"}, "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-f6f228f5b5a2a3c6", "name": "TODO/FIXME marker in shipping code \u2014 lib/matching/reason-enricher.ts:29", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 lib/matching/reason-enricher.ts:29"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3ce892644380084b", "name": "Stray `console.log` in TS/JS \u2014 lib/knowledge/alerts.ts:57", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 lib/knowledge/alerts.ts:57"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a010af3ed0730b3b", "name": "Stray `console.log` in TS/JS \u2014 lib/knowledge/sources/jwc-yaml/adapter.ts:108", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 lib/knowledge/sources/jwc-yaml/adapter.ts:108"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d5e2d78a6660002b", "name": "Stray `console.log` in TS/JS \u2014 lib/knowledge/embeddings/dry-run.ts:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 lib/knowledge/embeddings/dry-run.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-b95ab0ebedadeda1", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 design-system/__tests__/HelpTab.test.tsx:35", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 design-system/__tests__/HelpTab.test.tsx:35"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d8212ad379c2ca09", "name": "`truncate` class without `title=` for hover reveal \u2014 design-system/patterns/LiveStripCard.tsx:21", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 design-system/patterns/LiveStripCard.tsx:21"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-621a125c6d2a6d30", "name": "Privileged port 45 in use", "shortDescription": {"text": "Privileged port 45 in use"}, "fullDescription": {"text": "Port 45 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-129ad5fd929fa345", "name": "Privileged port 10 in use", "shortDescription": {"text": "Privileged port 10 in use"}, "fullDescription": {"text": "Port 10 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-4f8f2e6b65344b6a", "name": "Privileged port 3 in use", "shortDescription": {"text": "Privileged port 3 in use"}, "fullDescription": {"text": "Port 3 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-a0f2f364fba0fc15", "name": "Privileged port 40 in use", "shortDescription": {"text": "Privileged port 40 in use"}, "fullDescription": {"text": "Port 40 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-d63da3583b14afc0", "name": "Dockerfile runs as root: Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-835eae4c7f17a2f8", "name": "Docker base image is tag-pinned but not digest-pinned: node:22-alpine", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: node:22-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-182629e56f0780a1", "name": "Dockerfile runs as root: services/searoute/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: services/searoute/Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-dfdd2c0488b1cf8c", "name": "Docker base image is tag-pinned but not digest-pinned: python:3.11-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.11-slim"}, "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-a25e4d2fe3198570", "name": "Runtime dotenv file present in repo: .env.demo", "shortDescription": {"text": "Runtime dotenv file present in repo: .env.demo"}, "fullDescription": {"text": "`.env.demo` looks like a runtime dotenv file. No high-confidence secret value was matched, but runtime dotenv files often drift into live credentials. Move real values to a secret manager and keep only `.env.example` style templates in source control."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9981302d9037add0", "name": "Insecure pattern 'domparser_html_parse' in docs/superpowers/specs/r5e-market-claude-design-reference.html:136", "shortDescription": {"text": "Insecure pattern 'domparser_html_parse' in docs/superpowers/specs/r5e-market-claude-design-reference.html:136"}, "fullDescription": {"text": "Found a known-risky pattern (domparser_html_parse). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-086aa9aeec7d7e24", "name": "Insecure pattern 'domparser_html_parse' in docs/superpowers/specs/r5b-dashboard-claude-design-reference.html:140", "shortDescription": {"text": "Insecure pattern 'domparser_html_parse' in docs/superpowers/specs/r5b-dashboard-claude-design-reference.html:140"}, "fullDescription": {"text": "Found a known-risky pattern (domparser_html_parse). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c406e2b406aee610", "name": "Insecure pattern 'direct_innerhtml_assignment' in docs/superpowers/specs/r5d-charterers-claude-design-reference.html:181", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/superpowers/specs/r5d-charterers-claude-design-reference.html:181"}, "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-406e83f7c14b0161", "name": "Insecure pattern 'domparser_html_parse' in docs/superpowers/specs/r5d-charterers-claude-design-reference.html:139", "shortDescription": {"text": "Insecure pattern 'domparser_html_parse' in docs/superpowers/specs/r5d-charterers-claude-design-reference.html:139"}, "fullDescription": {"text": "Found a known-risky pattern (domparser_html_parse). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-40a8e3f64ab0ce1c", "name": "Insecure pattern 'domparser_html_parse' in docs/superpowers/specs/r5a-landing-claude-design-reference.html:140", "shortDescription": {"text": "Insecure pattern 'domparser_html_parse' in docs/superpowers/specs/r5a-landing-claude-design-reference.html:140"}, "fullDescription": {"text": "Found a known-risky pattern (domparser_html_parse). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-74d9114a16b72ee2", "name": "Insecure pattern 'domparser_html_parse' in docs/superpowers/specs/r5f-cargo-claude-design-reference.html:140", "shortDescription": {"text": "Insecure pattern 'domparser_html_parse' in docs/superpowers/specs/r5f-cargo-claude-design-reference.html:140"}, "fullDescription": {"text": "Found a known-risky pattern (domparser_html_parse). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-09456207165085d1", "name": "Insecure pattern 'domparser_html_parse' in docs/superpowers/specs/r5g-matches-claude-design-reference.html:144", "shortDescription": {"text": "Insecure pattern 'domparser_html_parse' in docs/superpowers/specs/r5g-matches-claude-design-reference.html:144"}, "fullDescription": {"text": "Found a known-risky pattern (domparser_html_parse). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-feeaf46368aec929", "name": "Insecure pattern 'domparser_html_parse' in docs/superpowers/specs/r5c-match-detail-claude-design-reference.html:143", "shortDescription": {"text": "Insecure pattern 'domparser_html_parse' in docs/superpowers/specs/r5c-match-detail-claude-design-reference.html:143"}, "fullDescription": {"text": "Found a known-risky pattern (domparser_html_parse). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-58a5389bebcd64c1", "name": "Insecure pattern 'domparser_html_parse' in docs/design-refs/dashboard.html:140", "shortDescription": {"text": "Insecure pattern 'domparser_html_parse' in docs/design-refs/dashboard.html:140"}, "fullDescription": {"text": "Found a known-risky pattern (domparser_html_parse). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2df201d41485f370", "name": "Insecure pattern 'domparser_html_parse' in docs/design-refs/market.html:136", "shortDescription": {"text": "Insecure pattern 'domparser_html_parse' in docs/design-refs/market.html:136"}, "fullDescription": {"text": "Found a known-risky pattern (domparser_html_parse). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-92b7f27cc8915363", "name": "Insecure pattern 'domparser_html_parse' in docs/design-refs/landing.html:140", "shortDescription": {"text": "Insecure pattern 'domparser_html_parse' in docs/design-refs/landing.html:140"}, "fullDescription": {"text": "Found a known-risky pattern (domparser_html_parse). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f4005154b09f9081", "name": "Insecure pattern 'domparser_html_parse' in docs/design-refs/cargo.html:140", "shortDescription": {"text": "Insecure pattern 'domparser_html_parse' in docs/design-refs/cargo.html:140"}, "fullDescription": {"text": "Found a known-risky pattern (domparser_html_parse). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5a7d07e2e25417dc", "name": "Insecure pattern 'direct_innerhtml_assignment' in docs/design-refs/charterers.html:181", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/design-refs/charterers.html:181"}, "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-7788dea3b0f29a4e", "name": "Insecure pattern 'domparser_html_parse' in docs/design-refs/charterers.html:139", "shortDescription": {"text": "Insecure pattern 'domparser_html_parse' in docs/design-refs/charterers.html:139"}, "fullDescription": {"text": "Found a known-risky pattern (domparser_html_parse). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a2465a86529c651a", "name": "Insecure pattern 'domparser_html_parse' in docs/design-refs/match-detail.html:143", "shortDescription": {"text": "Insecure pattern 'domparser_html_parse' in docs/design-refs/match-detail.html:143"}, "fullDescription": {"text": "Found a known-risky pattern (domparser_html_parse). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-297ef77d5ca712b9", "name": "Insecure pattern 'domparser_html_parse' in docs/design-refs/matches.html:144", "shortDescription": {"text": "Insecure pattern 'domparser_html_parse' in docs/design-refs/matches.html:144"}, "fullDescription": {"text": "Found a known-risky pattern (domparser_html_parse). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-04106a454c152028", "name": "Insecure pattern 'node_child_process' in scripts/setup-gmail-oauth.ts:17", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/setup-gmail-oauth.ts:17"}, "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-725664fe7898097d", "name": "Insecure pattern 'node_child_process' in scripts/__tests__/knowledge-refresh.test.ts:6", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/__tests__/knowledge-refresh.test.ts:6"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b23df436eb8ab404", "name": "Insecure pattern 'node_child_process' in scripts/__tests__/knowledge-status.test.ts:6", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/__tests__/knowledge-status.test.ts:6"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b645ec10d35fbca5", "name": "Insecure pattern 'node_child_process' in scripts/__tests__/data-integrity-check.test.ts:8", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/__tests__/data-integrity-check.test.ts: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-96b4bb2a489a891d", "name": "Insecure pattern 'node_child_process' in scripts/__tests__/migrate-charterers-xss.test.ts:9", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/__tests__/migrate-charterers-xss.test.ts:9"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2ed4bf5ec2333d48", "name": "Insecure pattern 'node_child_process' in scripts/demo-seed/seed-all.ts:5", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/demo-seed/seed-all.ts:5"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bdbc9a92ebbecbf0", "name": "Insecure pattern 'node_child_process' in scripts/demo-seed/unfreeze-market.ts:17", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/demo-seed/unfreeze-market.ts:17"}, "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-43b81d995678b14e", "name": "Insecure pattern 'node_child_process' in scripts/demo-seed/__tests__/backfill-815-weights.test.ts:12", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/demo-seed/__tests__/backfill-815-weights.test.ts:12"}, "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-0944fb1b307ef00c", "name": "Insecure pattern 'node_child_process' in scripts/demo-seed/__tests__/backfill-payout.test.ts:11", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/demo-seed/__tests__/backfill-payout.test.ts:11"}, "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-d2fb9dbaf2f16932", "name": "Insecure pattern 'node_child_process' in scripts/knowledge/cron/__tests__/refresh-sanctions.test.ts:15", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/knowledge/cron/__tests__/refresh-sanctions.test.ts:15"}, "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-ee779a265ab4990e", "name": "Insecure pattern 'dangerous_innerhtml' in app/layout.tsx:109", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in app/layout.tsx:109"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cae459303830b4b7", "name": "Insecure pattern 'node_child_process' in app/api/admin/knowledge/refresh/route.ts:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in app/api/admin/knowledge/refresh/route.ts:2"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-61c0527c350c02f1", "name": "Insecure pattern 'node_child_process' in lib/ai-provider.ts:430", "shortDescription": {"text": "Insecure pattern 'node_child_process' in lib/ai-provider.ts:430"}, "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-88a4d04d1587454a", "name": "Insecure pattern 'local_storage_auth_token' in lib/__tests__/csrf-client.test.ts:27", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in lib/__tests__/csrf-client.test.ts:27"}, "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-c0f4d36bdc819ff9", "name": "Insecure pattern 'node_child_process' in lib/quote-jobs/ensure-worker.ts:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in lib/quote-jobs/ensure-worker.ts:1"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-20facfc9e42f9ef4", "name": "Insecure pattern 'direct_innerhtml_assignment' in extensions/gmail/inserts/index.ts:61", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in extensions/gmail/inserts/index.ts:61"}, "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-233c82fc203dcb83", "name": "Insecure pattern 'direct_innerhtml_assignment' in extensions/gmail/src/sidebar/render.ts:20", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in extensions/gmail/src/sidebar/render.ts:20"}, "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-0c19fdb54e9dac6c", "name": "Insecure pattern 'dangerous_innerhtml' in design-system/__tests__/HelpTab.test.tsx:35", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in design-system/__tests__/HelpTab.test.tsx:35"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-768e8f28c1850d98", "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-769fdbe33092e92c", "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@v6 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-031830e2d34373f7", "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-bda6deb11902724f", "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-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-0a7543e2d0862080", "name": "Very large file: app/matches/MatchesClient.tsx (1303 lines)", "shortDescription": {"text": "Very large file: app/matches/MatchesClient.tsx (1303 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-9ae9805d1a451e0a", "name": "Very large file: lib/sailing/port-distances.ts (1461 lines)", "shortDescription": {"text": "Very large file: lib/sailing/port-distances.ts (1461 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-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-020046b8c1c2a12b", "name": "Node manifest has dependencies but no lockfile: scripts/post-deploy-smoke/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: scripts/post-deploy-smoke/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-bdcc10921c588ae1", "name": "Node manifest has dependencies but no lockfile: extensions/gmail/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: extensions/gmail/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 853 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 111 placeholder/mock markers across 49 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-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cc55229a7a3c078d", "name": "Agent authority lacks a verifier contract: .mcp.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .mcp.json"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-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-e79d940de5087d80", "name": "Agent authority lacks a verifier contract: .claude/analysis/decomp-07.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/analysis/decomp-07.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-92144b030d9f2009", "name": "Agent authority lacks a verifier contract: .claude/analysis/research-api-contracts.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/analysis/research-api-contracts.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2e4de6be8233f098", "name": "Commented-code block (7 lines) in middleware.ts:201", "shortDescription": {"text": "Commented-code block (7 lines) in middleware.ts:201"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8506a910400a4175", "name": "Commented-code block (5 lines) in jest.setup.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in jest.setup.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-421a6d94f512d7c4", "name": "Commented-code block (6 lines) in __tests__/mode-aware-content.test.ts:114", "shortDescription": {"text": "Commented-code block (6 lines) in __tests__/mode-aware-content.test.ts:114"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0474b18ff98b93aa", "name": "`fetch()` without try/.catch or AbortSignal \u2014 __tests__/matches-client-m3.test.tsx:12", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 __tests__/matches-client-m3.test.tsx:12"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-122a1c1e3b90f0e5", "name": "Commented-code block (5 lines) in __tests__/cargo/l5c-extras.test.ts:72", "shortDescription": {"text": "Commented-code block (5 lines) in __tests__/cargo/l5c-extras.test.ts:72"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-84120f55eb321801", "name": "Commented-code block (7 lines) in __tests__/api/clauses-security.test.ts:186", "shortDescription": {"text": "Commented-code block (7 lines) in __tests__/api/clauses-security.test.ts:186"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7b389ac72d6b17e7", "name": "Commented-code block (5 lines) in __tests__/api/voyage/bunker-recommendation-candidates.test.ts:43", "shortDescription": {"text": "Commented-code block (5 lines) in __tests__/api/voyage/bunker-recommendation-candidates.test.ts:43"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0ec419f2156ae2f7", "name": "Commented-code block (7 lines) in __tests__/api/voyage/bunker-recommendation.test.ts:50", "shortDescription": {"text": "Commented-code block (7 lines) in __tests__/api/voyage/bunker-recommendation.test.ts:50"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-06ebf871bfc6a072", "name": "Commented-code block (6 lines) in __tests__/ui/vessel-name-normalizer.test.ts:36", "shortDescription": {"text": "Commented-code block (6 lines) in __tests__/ui/vessel-name-normalizer.test.ts:36"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b813471e4e651229", "name": "Commented-code block (5 lines) in __tests__/components/match/EconomicsTab-pnl.test.tsx:250", "shortDescription": {"text": "Commented-code block (5 lines) in __tests__/components/match/EconomicsTab-pnl.test.tsx:250"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8ae96cffc8292800", "name": "`fetch()` without try/.catch or AbortSignal \u2014 __tests__/components/market/kpi-card-bdi-resolves.test.tsx:102", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 __tests__/components/market/kpi-card-bdi-resolves.test.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-df2bddc912ae0e96", "name": "Commented-code block (6 lines) in __tests__/lib/parse-vessel-cbft-explicit-unit.test.ts:70", "shortDescription": {"text": "Commented-code block (6 lines) in __tests__/lib/parse-vessel-cbft-explicit-unit.test.ts:70"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e3aa52aa065302b8", "name": "Commented-code block (7 lines) in __tests__/lib/economics/bunker-comparison.test.ts:68", "shortDescription": {"text": "Commented-code block (7 lines) in __tests__/lib/economics/bunker-comparison.test.ts:68"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-112a2c572be6e1d8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 __tests__/lib/market/benchmark.test.ts:6", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 __tests__/lib/market/benchmark.test.ts:6"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-756161120ddd9ce9", "name": "Commented-code block (5 lines) in __tests__/lib/matching/persist-session-matches-canonical-tce.test.ts:271", "shortDescription": {"text": "Commented-code block (5 lines) in __tests__/lib/matching/persist-session-matches-canonical-tce.test.ts:271"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bf8c62d9ff4f46c1", "name": "Commented-code block (5 lines) in __tests__/lib/knowledge/eua/eua-bunker-ets-adversarial.test.ts:20", "shortDescription": {"text": "Commented-code block (5 lines) in __tests__/lib/knowledge/eua/eua-bunker-ets-adversarial.test.ts:20"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9d085681d8a332d9", "name": "Commented-code block (5 lines) in __tests__/market/market-page.test.ts:198", "shortDescription": {"text": "Commented-code block (5 lines) in __tests__/market/market-page.test.ts:198"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d1b1346d1853e5bb", "name": "Commented-code block (6 lines) in __tests__/regression/test_retriever_sql_injection.test.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in __tests__/regression/test_retriever_sql_injection.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a05be7d6b9c4ac14", "name": "Commented-code block (5 lines) in __tests__/regression/test_email_body_viewer_overlapping_highlights.test.tsx:196", "shortDescription": {"text": "Commented-code block (5 lines) in __tests__/regression/test_email_body_viewer_overlapping_highlights.test.tsx:196"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7d1360b41193339e", "name": "Commented-code block (7 lines) in __tests__/regression/test_chunker_entity_decode.test.ts:257", "shortDescription": {"text": "Commented-code block (7 lines) in __tests__/regression/test_chunker_entity_decode.test.ts:257"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cc0706a4c5d6e542", "name": "Commented-code block (5 lines) in __tests__/regression/progonq-matching.test.ts:157", "shortDescription": {"text": "Commented-code block (5 lines) in __tests__/regression/progonq-matching.test.ts:157"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c5f1813bc88ac9c1", "name": "Legacy-named symbol `resultOld` in __tests__/regression/canonical-builder-adversarial.test.ts:101", "shortDescription": {"text": "Legacy-named symbol `resultOld` in __tests__/regression/canonical-builder-adversarial.test.ts:101"}, "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-6dccc150886d95b9", "name": "Commented-code block (5 lines) in __tests__/regression/RC4-ui-blind/spec-08-9-2-distance-ordering.test.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in __tests__/regression/RC4-ui-blind/spec-08-9-2-distance-ordering.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-70dd23d4b884d1cb", "name": "Commented-code block (5 lines) in __tests__/regression/RC3-magnitude/spec15-MED05-nan-subsectionindex.test.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in __tests__/regression/RC3-magnitude/spec15-MED05-nan-subsectionindex.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7462f94949b659a8", "name": "Commented-code block (5 lines) in __tests__/regression/RC3-magnitude/spec-08-D1-unbounded-topk-dos.test.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in __tests__/regression/RC3-magnitude/spec-08-D1-unbounded-topk-dos.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8fdd5193c7f989f9", "name": "Commented-code block (5 lines) in __tests__/regression/RC3-magnitude/spec01-HIGH02-nan-cost-fields.test.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in __tests__/regression/RC3-magnitude/spec01-HIGH02-nan-cost-fields.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ff9e89413b88784c", "name": "Commented-code block (5 lines) in __tests__/regression/RC3-magnitude/spec01-HIGH01-negative-port-dues.test.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in __tests__/regression/RC3-magnitude/spec01-HIGH01-negative-port-dues.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-51ff0f4cad729fb6", "name": "Commented-code block (5 lines) in __tests__/regression/RC3-magnitude/spec01-HIGH05-negative-vessel-dwt.test.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in __tests__/regression/RC3-magnitude/spec01-HIGH05-negative-vessel-dwt.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9a102f6c5783ebb5", "name": "Commented-code block (5 lines) in __tests__/regression/RC1-fail-open/spec-08-B1-special-floats-topk.test.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in __tests__/regression/RC1-fail-open/spec-08-B1-special-floats-topk.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a52d70c59a637c0e", "name": "Commented-code block (5 lines) in __tests__/regression/RC1-fail-open/spec15-HIGH01-null-db.test.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in __tests__/regression/RC1-fail-open/spec15-HIGH01-null-db.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3b8167c2380312cf", "name": "Commented-code block (5 lines) in __tests__/regression/RC1-fail-open/spec-08-A1-empty-tablename.test.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in __tests__/regression/RC1-fail-open/spec-08-A1-empty-tablename.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1ad51bd8a1878da2", "name": "Commented-code block (5 lines) in __tests__/regression/RC1-fail-open/spec12-HIGH02-file-protocol-baseurl.test.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in __tests__/regression/RC1-fail-open/spec12-HIGH02-file-protocol-baseurl.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cbc16a8add299f1f", "name": "Commented-code block (5 lines) in __tests__/regression/RC1-fail-open/spec12-CRIT04-javascript-protocol-baseurl.test.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in __tests__/regression/RC1-fail-open/spec12-CRIT04-javascript-protocol-baseurl.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0e73292bae5c9344", "name": "Commented-code block (5 lines) in __tests__/regression/RC1-fail-open/spec15-MED01-empty-tablename.test.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in __tests__/regression/RC1-fail-open/spec15-MED01-empty-tablename.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3e5d1bf88260f050", "name": "Commented-code block (5 lines) in __tests__/regression/RC1-fail-open/spec12-HIGH01-whitespace-only-baseurl.test.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in __tests__/regression/RC1-fail-open/spec12-HIGH01-whitespace-only-baseurl.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c6f6afa8d62f24a5", "name": "Commented-code block (5 lines) in __tests__/regression/RC1-fail-open/spec12-HIGH03-data-protocol-baseurl.test.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in __tests__/regression/RC1-fail-open/spec12-HIGH03-data-protocol-baseurl.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cf1b85682cc1dddc", "name": "Commented-code block (5 lines) in __tests__/regression/RC1-fail-open/spec12-HIGH04-path-traversal-in-href.test.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in __tests__/regression/RC1-fail-open/spec12-HIGH04-path-traversal-in-href.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-65967a08e9e73237", "name": "Commented-code block (5 lines) in __tests__/regression/RC1-fail-open/spec12-HIGH09-regex-no-html-links.test.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in __tests__/regression/RC1-fail-open/spec12-HIGH09-regex-no-html-links.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7d7ee40796f1616e", "name": "Commented-code block (5 lines) in __tests__/regression/RC6-security-blacklist/spec15-CRIT01-sql-injection-tablename.test", "shortDescription": {"text": "Commented-code block (5 lines) in __tests__/regression/RC6-security-blacklist/spec15-CRIT01-sql-injection-tablename.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0856e32e00ccbc8d", "name": "Commented-code block (5 lines) in __tests__/regression/RC6-security-blacklist/spec15-CRIT02-sql-injection-ftstable.test.", "shortDescription": {"text": "Commented-code block (5 lines) in __tests__/regression/RC6-security-blacklist/spec15-CRIT02-sql-injection-ftstable.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-67e28e3d3c6a1c9f", "name": "Commented-code block (5 lines) in __tests__/regression/RC6-security-blacklist/spec12-CRIT02-javascript-url-in-link.test.", "shortDescription": {"text": "Commented-code block (5 lines) in __tests__/regression/RC6-security-blacklist/spec12-CRIT02-javascript-url-in-link.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-21ef1bac82d22fc8", "name": "Commented-code block (5 lines) in __tests__/regression/RC6-security-blacklist/spec12-HIGH10-xss-vector-completeness.test", "shortDescription": {"text": "Commented-code block (5 lines) in __tests__/regression/RC6-security-blacklist/spec12-HIGH10-xss-vector-completeness.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5c7e23dbeed9b0c1", "name": "Commented-code block (5 lines) in __tests__/regression/RC6-security-blacklist/spec12-CRIT03-data-scheme-in-img.test.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in __tests__/regression/RC6-security-blacklist/spec12-CRIT03-data-scheme-in-img.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-83e65a1f76060b89", "name": "Commented-code block (5 lines) in __tests__/regression/RC6-security-blacklist/spec12-CRIT01-nested-script-bypass.test.ts", "shortDescription": {"text": "Commented-code block (5 lines) in __tests__/regression/RC6-security-blacklist/spec12-CRIT01-nested-script-bypass.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9d3ea791aed7b051", "name": "Commented-code block (5 lines) in __tests__/regression/RC6-security-blacklist/spec12-HIGH05-iframe-tag.test.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in __tests__/regression/RC6-security-blacklist/spec12-HIGH05-iframe-tag.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b243b1bcb595ad07", "name": "Commented-code block (5 lines) in __tests__/regression/RC6-security-blacklist/spec-08-F1-sql-injection-tablename.test.ts", "shortDescription": {"text": "Commented-code block (5 lines) in __tests__/regression/RC6-security-blacklist/spec-08-F1-sql-injection-tablename.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c254d2453fe954b4", "name": "Commented-code block (5 lines) in __tests__/regression/RC5-no-fallback/spec12-HIGH07-massive-toc-dos.test.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in __tests__/regression/RC5-no-fallback/spec12-HIGH07-massive-toc-dos.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-088ce0843e3cd2f3", "name": "Commented-code block (5 lines) in __tests__/regression/RC5-no-fallback/spec15-HIGH04-vertex-rate-limit.test.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in __tests__/regression/RC5-no-fallback/spec15-HIGH04-vertex-rate-limit.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8746378421e114dc", "name": "Commented-code block (5 lines) in __tests__/regression/RC5-no-fallback/spec12-HIGH06-large-response-dos.test.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in __tests__/regression/RC5-no-fallback/spec12-HIGH06-large-response-dos.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9009a2b94c3274e6", "name": "Commented-code block (5 lines) in __tests__/sailing/l5c-expansion.test.ts:41", "shortDescription": {"text": "Commented-code block (5 lines) in __tests__/sailing/l5c-expansion.test.ts:41"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-300a3db0ab97b0dc", "name": "Commented-code block (5 lines) in tests/unit/port-da/seed-values.test.ts:42", "shortDescription": {"text": "Commented-code block (5 lines) in tests/unit/port-da/seed-values.test.ts:42"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-885f3db71185ea36", "name": "Commented-code block (7 lines) in tests/regression/eu_ets_coverage_adversarial.test.ts:211", "shortDescription": {"text": "Commented-code block (7 lines) in tests/regression/eu_ets_coverage_adversarial.test.ts:211"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d0023e554621ee21", "name": "Commented-code block (6 lines) in tests/regression/ballast-size-cap-adversarial.test.ts:52", "shortDescription": {"text": "Commented-code block (6 lines) in tests/regression/ballast-size-cap-adversarial.test.ts:52"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-69e75c2745ad0e6a", "name": "Commented-code block (5 lines) in tests/regression/test_economics_confidence_adv.test.ts:10", "shortDescription": {"text": "Commented-code block (5 lines) in tests/regression/test_economics_confidence_adv.test.ts:10"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ba2e3d0a93d237de", "name": "Commented-code block (5 lines) in tests/regression/test_economics_edge_cases.test.ts:7", "shortDescription": {"text": "Commented-code block (5 lines) in tests/regression/test_economics_edge_cases.test.ts:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-db5a4570799e5bde", "name": "Commented-code block (8 lines) in tests/regression/test_validator_substring_2026_05_07.test.ts:69", "shortDescription": {"text": "Commented-code block (8 lines) in tests/regression/test_validator_substring_2026_05_07.test.ts:69"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6e1ee1042a1a69c1", "name": "Commented-code block (5 lines) in tests/regression/test_email_body_viewer_overlapping_highlights.test.tsx:196", "shortDescription": {"text": "Commented-code block (5 lines) in tests/regression/test_email_body_viewer_overlapping_highlights.test.tsx:196"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-da14696a8409b74f", "name": "Commented-code block (6 lines) in tests/regression/oilmonster-adversarial.test.ts:79", "shortDescription": {"text": "Commented-code block (6 lines) in tests/regression/oilmonster-adversarial.test.ts:79"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-140c783cb31701b0", "name": "Commented-code block (5 lines) in tests/regression/progonq-matching.test.ts:157", "shortDescription": {"text": "Commented-code block (5 lines) in tests/regression/progonq-matching.test.ts:157"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7fcead391373be30", "name": "Commented-code block (5 lines) in tests/regression/RC4-ui-blind/gamma-07-CONF-01-null-vs-undefined-despatch-rate.test.ts", "shortDescription": {"text": "Commented-code block (5 lines) in tests/regression/RC4-ui-blind/gamma-07-CONF-01-null-vs-undefined-despatch-rate.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-98623853e00a703e", "name": "Commented-code block (5 lines) in tests/regression/RC4-ui-blind/gamma-06-9-01-api-contract.test.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in tests/regression/RC4-ui-blind/gamma-06-9-01-api-contract.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cc863c8de6941680", "name": "Commented-code block (5 lines) in tests/regression/RC3-magnitude/gamma-07-D-02-large-negative-net-hours.test.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in tests/regression/RC3-magnitude/gamma-07-D-02-large-negative-net-hours.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-21d612d6ca4c335a", "name": "Commented-code block (5 lines) in tests/regression/RC3-magnitude/gamma-07-B-06-neg-infinity-despatch-rate.test.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in tests/regression/RC3-magnitude/gamma-07-B-06-neg-infinity-despatch-rate.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cd153f1b66addea1", "name": "Commented-code block (5 lines) in tests/regression/RC3-magnitude/gamma-06-B-02-infinity-time-delta.test.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in tests/regression/RC3-magnitude/gamma-06-B-02-infinity-time-delta.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fe568478f0604bf4", "name": "Commented-code block (5 lines) in tests/regression/RC3-magnitude/spec01-HIGH02-nan-cost-fields.test.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in tests/regression/RC3-magnitude/spec01-HIGH02-nan-cost-fields.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dfe78b2038576f97", "name": "Commented-code block (5 lines) in tests/regression/RC3-magnitude/gamma-06-B-01-nan-weather-delay.test.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in tests/regression/RC3-magnitude/gamma-06-B-01-nan-weather-delay.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-abf88b88e1ebf334", "name": "Commented-code block (5 lines) in tests/regression/RC3-magnitude/spec01-HIGH01-negative-port-dues.test.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in tests/regression/RC3-magnitude/spec01-HIGH01-negative-port-dues.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3e45aa2495be461b", "name": "Commented-code block (5 lines) in tests/regression/RC3-magnitude/spec01-HIGH05-negative-vessel-dwt.test.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in tests/regression/RC3-magnitude/spec01-HIGH05-negative-vessel-dwt.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2c3e6428f252d9bf", "name": "Commented-code block (5 lines) in tests/regression/RC1-fail-open/gamma-06-F-02-order-classification.test.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in tests/regression/RC1-fail-open/gamma-06-F-02-order-classification.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b4e88dc1a893b2e1", "name": "Commented-code block (5 lines) in tests/regression/RC1-fail-open/gamma-06-F-01-substring-classification.test.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in tests/regression/RC1-fail-open/gamma-06-F-01-substring-classification.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c7dc55c39f7b9c28", "name": "Commented-code block (5 lines) in tests/regression/RC1-fail-open/gamma-07-C-03-negative-allowed-laytime.test.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in tests/regression/RC1-fail-open/gamma-07-C-03-negative-allowed-laytime.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c6c844ef2de9ebdc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/knowledge-unlocode-seed.ts:218", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/knowledge-unlocode-seed.ts:218"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f1bf3b32c7c87498", "name": "Commented-code block (6 lines) in scripts/seed-distances.py:121", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/seed-distances.py:121"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-891ac9ce8527ed1e", "name": "Legacy-named symbol `gmail_v1` in scripts/import-gmail-emails.ts:24", "shortDescription": {"text": "Legacy-named symbol `gmail_v1` in scripts/import-gmail-emails.ts:24"}, "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-be7b08ab163c9cc3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/seed-vertex-datastores.ts:88", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/seed-vertex-datastores.ts: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-c298860ecae5a6b5", "name": "Commented-code block (5 lines) in scripts/__tests__/build-corpus.test.ts:11", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/__tests__/build-corpus.test.ts:11"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d11582c1ac456c7e", "name": "Legacy-named symbol `gmail_v1` in scripts/__tests__/import-gmail-emails.test.ts:81", "shortDescription": {"text": "Legacy-named symbol `gmail_v1` in scripts/__tests__/import-gmail-emails.test.ts:81"}, "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-47625058a87d5d62", "name": "Commented-code block (6 lines) in scripts/demo-seed/seed-all.ts:98", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/demo-seed/seed-all.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-ba83ad99ea02880e", "name": "Commented-code block (8 lines) in scripts/demo-seed/regenerate-matches.ts:576", "shortDescription": {"text": "Commented-code block (8 lines) in scripts/demo-seed/regenerate-matches.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-f65f3e11e304b724", "name": "Commented-code block (6 lines) in scripts/demo-seed/real-matches.ts:376", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/demo-seed/real-matches.ts:376"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-abc6d6b0b882e068", "name": "Commented-code block (5 lines) in scripts/demo-seed/build.ts:29", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/demo-seed/build.ts:29"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5b2740dde47af026", "name": "Commented-code block (5 lines) in scripts/demo-seed/preview-ranking-shift.ts:223", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/demo-seed/preview-ranking-shift.ts:223"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b8cde428dcadda1f", "name": "Legacy-named symbol `setupSchemaLegacy` in scripts/demo-seed/__tests__/real-matches-item-index.test.ts:45", "shortDescription": {"text": "Legacy-named symbol `setupSchemaLegacy` in scripts/demo-seed/__tests__/real-matches-item-index.test.ts:45"}, "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-65bd01d4d22b1828", "name": "Legacy-named symbol `totalOld` in scripts/diag/war-risk-shift-table.ts:158", "shortDescription": {"text": "Legacy-named symbol `totalOld` in scripts/diag/war-risk-shift-table.ts:158"}, "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-727536d509fb50be", "name": "Commented-code block (8 lines) in scripts/research/top-matches-broker-view.ts:160", "shortDescription": {"text": "Commented-code block (8 lines) in scripts/research/top-matches-broker-view.ts:160"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c8a7ef1b7a006901", "name": "Commented-code block (10 lines) in scripts/post-deploy-smoke/smoke.mjs:5", "shortDescription": {"text": "Commented-code block (10 lines) in scripts/post-deploy-smoke/smoke.mjs:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d4b53c2e752011b2", "name": "Legacy-named symbol `gmail_v1` in scripts/lib/oauth-shared.ts:7", "shortDescription": {"text": "Legacy-named symbol `gmail_v1` in scripts/lib/oauth-shared.ts:7"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ff90c576280e4d29", "name": "Commented-code block (6 lines) in scripts/lib/unlocode-parse.ts:52", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/lib/unlocode-parse.ts:52"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-735c62e89a6f3164", "name": "Commented-code block (6 lines) in scripts/lib/__tests__/unlocode-parse.test.ts:62", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/lib/__tests__/unlocode-parse.test.ts:62"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b5c7aa712deba2da", "name": "Commented-code block (5 lines) in scripts/l5c/merge-pairs.ts:89", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/l5c/merge-pairs.ts:89"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5ba0466ae048d063", "name": "Commented-code block (5 lines) in scripts/eval/run-progonq-match.ts:198", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/eval/run-progonq-match.ts:198"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-152beabf36996508", "name": "Commented-code block (8 lines) in scripts/progonq/judge-parse-cargo.ts:90", "shortDescription": {"text": "Commented-code block (8 lines) in scripts/progonq/judge-parse-cargo.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-365532c67b4dcd06", "name": "Commented-code block (5 lines) in scripts/wave-gamma-bake-off/judge.ts:268", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/wave-gamma-bake-off/judge.ts:268"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-988606b12526bbc9", "name": "Commented-code block (5 lines) in scripts/quote-workshop/worker.ts:47", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/quote-workshop/worker.ts:47"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6ad23dad87055593", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/ports/ingest-wpi-cranes.ts:173", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/ports/ingest-wpi-cranes.ts:173"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a3336997ab52fd31", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/knowledge/sources/fx-rates.ts:28", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/knowledge/sources/fx-rates.ts:28"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3bc2dbf5ab9b32fe", "name": "Commented-code block (5 lines) in components/clickable-field.tsx:21", "shortDescription": {"text": "Commented-code block (5 lines) in components/clickable-field.tsx:21"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c2f68d31aa53b37e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/economics/RouteCompareModal.tsx:84", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/economics/RouteCompareModal.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-412f1988fc451fbb", "name": "Commented-code block (5 lines) in components/__tests__/email-body-viewer.overlapping-highlights.test.tsx:196", "shortDescription": {"text": "Commented-code block (5 lines) in components/__tests__/email-body-viewer.overlapping-highlights.test.tsx:196"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-92e343949fadc70c", "name": "Commented-code block (8 lines) in components/match/EconomicsTab.tsx:169", "shortDescription": {"text": "Commented-code block (8 lines) in components/match/EconomicsTab.tsx:169"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-19b6e35b2cbc81e0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/match/EconomicsTab.tsx:145", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/match/EconomicsTab.tsx:145"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-26e6f76b60c25a87", "name": "Commented-code block (5 lines) in components/match/MatchWorksheet.tsx:99", "shortDescription": {"text": "Commented-code block (5 lines) in components/match/MatchWorksheet.tsx:99"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-21e3575904da7ea6", "name": "Commented-code block (5 lines) in components/match/__tests__/ExplainDealModal.flag.test.tsx:53", "shortDescription": {"text": "Commented-code block (5 lines) in components/match/__tests__/ExplainDealModal.flag.test.tsx:53"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ec090b5392b12f40", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/matches/MatchesClient.tsx:167", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/matches/MatchesClient.tsx:167"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d15dc0334ff688de", "name": "Commented-code block (6 lines) in app/match/[id]/page.tsx:70", "shortDescription": {"text": "Commented-code block (6 lines) in app/match/[id]/page.tsx:70"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-999d995c9bc7a45d", "name": "Commented-code block (5 lines) in app/cargo/page.tsx:70", "shortDescription": {"text": "Commented-code block (5 lines) in app/cargo/page.tsx:70"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3af52979b12d20ea", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/laytime/page.tsx:68", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/laytime/page.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-4f844e05b28cab91", "name": "Commented-code block (5 lines) in app/api/integrations/pipedrive/oauth/route.ts:50", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/integrations/pipedrive/oauth/route.ts:50"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-747b44c6458ee442", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/integrations/pipedrive/oauth/route.ts:99", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/integrations/pipedrive/oauth/route.ts:99"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8843bb06836f9bea", "name": "Commented-code block (5 lines) in app/api/ai/__tests__/match-lookup.test.ts:87", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/ai/__tests__/match-lookup.test.ts:87"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a5f18dc82c9663e7", "name": "Commented-code block (11 lines) in app/api/ai/parse-cargo/route.ts:151", "shortDescription": {"text": "Commented-code block (11 lines) in app/api/ai/parse-cargo/route.ts:151"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-56e0a14c6cc91d96", "name": "Commented-code block (5 lines) in app/api/ai/generate-route-map/route.ts:215", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/ai/generate-route-map/route.ts:215"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fd502bb87777b95c", "name": "Commented-code block (5 lines) in app/api/admin/knowledge/refresh/route.ts:88", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/admin/knowledge/refresh/route.ts:88"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5c13aab039a42105", "name": "Commented-code block (5 lines) in app/api/vessel/[imo]/__tests__/route.test.ts:26", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/vessel/[imo]/__tests__/route.test.ts:26"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fe13179e46a83d59", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/market/page.tsx:144", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/market/page.tsx:144"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7104713295a7c5c3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/charterers/page.tsx:176", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/charterers/page.tsx:176"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fc63878e1d61618d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 lib/csrf-client.ts:58", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/csrf-client.ts:58"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c2928622ea2c22ef", "name": "Commented-code block (5 lines) in lib/ai-provider.ts:432", "shortDescription": {"text": "Commented-code block (5 lines) in lib/ai-provider.ts:432"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6511e562c7c46874", "name": "Legacy-named symbol `gmail_v1` in lib/google.ts:1", "shortDescription": {"text": "Legacy-named symbol `gmail_v1` in lib/google.ts:1"}, "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-65a6747434aba6b5", "name": "Commented-code block (8 lines) in lib/economics/route-decision.ts:265", "shortDescription": {"text": "Commented-code block (8 lines) in lib/economics/route-decision.ts:265"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5624c737dc0568d5", "name": "Commented-code block (5 lines) in lib/__tests__/laytime-calculator.test.ts:391", "shortDescription": {"text": "Commented-code block (5 lines) in lib/__tests__/laytime-calculator.test.ts:391"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a391bcb7a764324a", "name": "Commented-code block (8 lines) in lib/__tests__/matching/match-realism-buckets.test.ts:179", "shortDescription": {"text": "Commented-code block (8 lines) in lib/__tests__/matching/match-realism-buckets.test.ts:179"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2128112441ab567d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 lib/ais/datalastic.ts:67", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/ais/datalastic.ts:67"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c7a376e55f17d80d", "name": "Commented-code block (6 lines) in lib/parsing/geared-fallback.ts:160", "shortDescription": {"text": "Commented-code block (6 lines) in lib/parsing/geared-fallback.ts:160"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ac0134ff3070cc7b", "name": "Commented-code block (5 lines) in lib/parsing/parse-vessel-helpers.ts:132", "shortDescription": {"text": "Commented-code block (5 lines) in lib/parsing/parse-vessel-helpers.ts:132"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b9f8479e4c982633", "name": "Commented-code block (5 lines) in lib/quote-jobs/__tests__/use-quote-job.test.tsx:185", "shortDescription": {"text": "Commented-code block (5 lines) in lib/quote-jobs/__tests__/use-quote-job.test.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-31d75c8a05037b6e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 lib/quote-jobs/__tests__/use-quote-job.test.tsx:186", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/quote-jobs/__tests__/use-quote-job.test.tsx:186"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f0c85778a57e1f94", "name": "`fetch()` without try/.catch or AbortSignal \u2014 lib/voice/whisper-transcribe.ts:40", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/voice/whisper-transcribe.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-cc896b4eda98d891", "name": "`fetch()` without try/.catch or AbortSignal \u2014 lib/whatsapp/image-ocr.ts:20", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/whatsapp/image-ocr.ts:20"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c4c24f8f7c5ab0b8", "name": "Commented-code block (7 lines) in lib/demo-mode/hydrate-demo-session.ts:112", "shortDescription": {"text": "Commented-code block (7 lines) in lib/demo-mode/hydrate-demo-session.ts:112"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dba91f38c27c76b9", "name": "Commented-code block (6 lines) in lib/port-da/__tests__/match-da.test.ts:7", "shortDescription": {"text": "Commented-code block (6 lines) in lib/port-da/__tests__/match-da.test.ts:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f55cab5e3fd333af", "name": "Commented-code block (5 lines) in lib/migrations/021-port-da-large-vessels.ts:7", "shortDescription": {"text": "Commented-code block (5 lines) in lib/migrations/021-port-da-large-vessels.ts:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-861492d45622dbb7", "name": "Commented-code block (6 lines) in lib/matching/tce-calculator.ts:200", "shortDescription": {"text": "Commented-code block (6 lines) in lib/matching/tce-calculator.ts:200"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dd8d042a9812a54c", "name": "Commented-code block (5 lines) in lib/matching/parse-vessel-fields.ts:12", "shortDescription": {"text": "Commented-code block (5 lines) in lib/matching/parse-vessel-fields.ts:12"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-50f3bf215b61f95a", "name": "Commented-code block (5 lines) in lib/matching/persist-session-matches.ts:100", "shortDescription": {"text": "Commented-code block (5 lines) in lib/matching/persist-session-matches.ts:100"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0f28963aabfdfe54", "name": "Commented-code block (6 lines) in lib/matching/pair-analyzer.ts:175", "shortDescription": {"text": "Commented-code block (6 lines) in lib/matching/pair-analyzer.ts:175"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-eec9f1320dc8fdeb", "name": "Commented-code block (11 lines) in lib/matching/compute-matches.ts:65", "shortDescription": {"text": "Commented-code block (11 lines) in lib/matching/compute-matches.ts:65"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ef33300af4e207c2", "name": "Commented-code block (5 lines) in lib/matching/freight-resolver.ts:66", "shortDescription": {"text": "Commented-code block (5 lines) in lib/matching/freight-resolver.ts:66"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6378d5bca7a3c589", "name": "Commented-code block (7 lines) in lib/matching/session-buckets.ts:55", "shortDescription": {"text": "Commented-code block (7 lines) in lib/matching/session-buckets.ts:55"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a01183566e6a0212", "name": "Commented-code block (5 lines) in lib/matching/__tests__/tce-calculator.test.ts:319", "shortDescription": {"text": "Commented-code block (5 lines) in lib/matching/__tests__/tce-calculator.test.ts:319"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3f25b857a45a3cec", "name": "Commented-code block (7 lines) in lib/matching/__tests__/compute-matches-m3-fields.test.ts:266", "shortDescription": {"text": "Commented-code block (7 lines) in lib/matching/__tests__/compute-matches-m3-fields.test.ts:266"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3490bff91268c009", "name": "Commented-code block (5 lines) in lib/matching/__tests__/freight-resolver.test.ts:89", "shortDescription": {"text": "Commented-code block (5 lines) in lib/matching/__tests__/freight-resolver.test.ts:89"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-72dc61ca6a5433e4", "name": "Legacy-named symbol `econLegacy` in lib/matching/__tests__/tce-calculator-warrisk-ballast.test.ts:45", "shortDescription": {"text": "Legacy-named symbol `econLegacy` in lib/matching/__tests__/tce-calculator-warrisk-ballast.test.ts:45"}, "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-fe38a25040be8cad", "name": "Commented-code block (10 lines) in lib/matching/__tests__/golden-set/golden-set.test.ts:9", "shortDescription": {"text": "Commented-code block (10 lines) in lib/matching/__tests__/golden-set/golden-set.test.ts:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e2ea02b56b1f2b6e", "name": "Commented-code block (5 lines) in lib/sailing/fit-breakdown.ts:46", "shortDescription": {"text": "Commented-code block (5 lines) in lib/sailing/fit-breakdown.ts:46"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7f18664242bf156e", "name": "Legacy-named symbol `daysOld` in lib/sailing/date-sanity.ts:61", "shortDescription": {"text": "Legacy-named symbol `daysOld` in lib/sailing/date-sanity.ts:61"}, "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-6335c7e5cbc40ce7", "name": "Commented-code block (13 lines) in lib/sailing/imsbc-check.ts:272", "shortDescription": {"text": "Commented-code block (13 lines) in lib/sailing/imsbc-check.ts:272"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5edd39a6b3ed57a4", "name": "Commented-code block (6 lines) in lib/sailing/date-parsing.ts:303", "shortDescription": {"text": "Commented-code block (6 lines) in lib/sailing/date-parsing.ts:303"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-23370c3fcd35a886", "name": "Commented-code block (5 lines) in lib/sailing/match-filters.ts:104", "shortDescription": {"text": "Commented-code block (5 lines) in lib/sailing/match-filters.ts:104"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-916529bde8eb45c2", "name": "Commented-code block (9 lines) in lib/sailing/match-scoring.ts:199", "shortDescription": {"text": "Commented-code block (9 lines) in lib/sailing/match-scoring.ts:199"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ebf1333e5613a129", "name": "Commented-code block (6 lines) in lib/sailing/readiness-gap.ts:119", "shortDescription": {"text": "Commented-code block (6 lines) in lib/sailing/readiness-gap.ts:119"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f4d8e515ab50842d", "name": "Commented-code block (6 lines) in lib/sailing/port-distances.ts:1014", "shortDescription": {"text": "Commented-code block (6 lines) in lib/sailing/port-distances.ts:1014"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4f2d27e01b305215", "name": "Commented-code block (5 lines) in lib/sailing/__tests__/score-cranes-discharge.test.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in lib/sailing/__tests__/score-cranes-discharge.test.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ae93d08aa49a4ff1", "name": "Commented-code block (5 lines) in lib/sailing/__tests__/score-cranes-rationale.test.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in lib/sailing/__tests__/score-cranes-rationale.test.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8a8434970b291bba", "name": "Commented-code block (5 lines) in lib/sailing/__tests__/readiness-gap.test.ts:269", "shortDescription": {"text": "Commented-code block (5 lines) in lib/sailing/__tests__/readiness-gap.test.ts:269"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-202384b801387248", "name": "Legacy-named symbol `daysOld` in lib/sailing/__tests__/date-sanity.test.ts:95", "shortDescription": {"text": "Legacy-named symbol `daysOld` in lib/sailing/__tests__/date-sanity.test.ts:95"}, "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-af28942d9ea13445", "name": "Commented-code block (5 lines) in lib/sailing/__tests__/port-distances.test.ts:6", "shortDescription": {"text": "Commented-code block (5 lines) in lib/sailing/__tests__/port-distances.test.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f0886e38ececa5c6", "name": "Legacy-named symbol `vesselOld` in lib/sailing/__tests__/fit-breakdown.test.ts:522", "shortDescription": {"text": "Legacy-named symbol `vesselOld` in lib/sailing/__tests__/fit-breakdown.test.ts:522"}, "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-4c33d9c0cbebe669", "name": "Commented-code block (5 lines) in lib/sailing/__tests__/match-filters.test.ts:566", "shortDescription": {"text": "Commented-code block (5 lines) in lib/sailing/__tests__/match-filters.test.ts:566"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1425912bc5e08031", "name": "Commented-code block (5 lines) in lib/sailing/__tests__/match-gates-adversarial.test.ts:139", "shortDescription": {"text": "Commented-code block (5 lines) in lib/sailing/__tests__/match-gates-adversarial.test.ts:139"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-82af19e3f94bb763", "name": "Commented-code block (6 lines) in lib/sailing/__tests__/match-scoring.test.ts:690", "shortDescription": {"text": "Commented-code block (6 lines) in lib/sailing/__tests__/match-scoring.test.ts:690"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e43f514d089a2982", "name": "Commented-code block (5 lines) in lib/sailing/__tests__/port-distances-searoute-json.test.ts:34", "shortDescription": {"text": "Commented-code block (5 lines) in lib/sailing/__tests__/port-distances-searoute-json.test.ts:34"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-674ed7d3546b0079", "name": "Commented-code block (5 lines) in lib/knowledge/sources/imsbc/scraper.ts:167", "shortDescription": {"text": "Commented-code block (5 lines) in lib/knowledge/sources/imsbc/scraper.ts:167"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2efd143242a72fb9", "name": "Commented-code block (5 lines) in lib/knowledge/sources/imsbc/chunker.ts:55", "shortDescription": {"text": "Commented-code block (5 lines) in lib/knowledge/sources/imsbc/chunker.ts:55"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-adb38f863ee0a4d2", "name": "Commented-code block (8 lines) in lib/knowledge/embeddings/pipeline.ts:121", "shortDescription": {"text": "Commented-code block (8 lines) in lib/knowledge/embeddings/pipeline.ts:121"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-620f1a855aa64396", "name": "Commented-code block (5 lines) in lib/knowledge/bunker/shipandbunker-adapter.ts:79", "shortDescription": {"text": "Commented-code block (5 lines) in lib/knowledge/bunker/shipandbunker-adapter.ts:79"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-570a9f2a048bdfed", "name": "`fetch()` without try/.catch or AbortSignal \u2014 lib/knowledge/sanctions/eu-adapter.ts:132", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/knowledge/sanctions/eu-adapter.ts:132"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0b137e5e0898e54d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 lib/knowledge/sanctions/ofac-adapter.ts:176", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/knowledge/sanctions/ofac-adapter.ts:176"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d4cc79c28683e194", "name": "`fetch()` without try/.catch or AbortSignal \u2014 extensions/gmail/src/background.ts:61", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 extensions/gmail/src/background.ts:61"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1e33a5d69a4021f3", "name": "FastAPI POST `distance` without auth dependency \u2014 services/searoute/main.py:52", "shortDescription": {"text": "FastAPI POST `distance` without auth dependency \u2014 services/searoute/main.py:52"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b770b0d830e3baff", "name": "Dangling fetch: GET /api/audit?inquiryId=${encodeURIComponent(inquiryId)} (components/audit-trail.tsx:26)", "shortDescription": {"text": "Dangling fetch: GET /api/audit?inquiryId=${encodeURIComponent(inquiryId)} (components/audit-trail.tsx:26)"}, "fullDescription": {"text": "`components/audit-trail.tsx:26` calls `GET /api/audit?inquiryId=${encodeURIComponent(inquiryId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/audit`\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-c5d3336ae275dcfa", "name": "Dangling fetch: POST /api/voyage/compare-routes (components/economics/RouteCompareModal.tsx:84)", "shortDescription": {"text": "Dangling fetch: POST /api/voyage/compare-routes (components/economics/RouteCompareModal.tsx:84)"}, "fullDescription": {"text": "`components/economics/RouteCompareModal.tsx:84` calls `POST /api/voyage/compare-routes` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/voyage/compare-routes`\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-3e8f748a8ce13ef1", "name": "Dangling fetch: GET /api/market/benchmark?indicator=EUA (components/match/EconomicsTab.tsx:108)", "shortDescription": {"text": "Dangling fetch: GET /api/market/benchmark?indicator=EUA (components/match/EconomicsTab.tsx:108)"}, "fullDescription": {"text": "`components/match/EconomicsTab.tsx:108` calls `GET /api/market/benchmark?indicator=EUA` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/market/benchmark`\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-f604cbd90a4c7d90", "name": "Dangling fetch: PATCH /api/matches/${matchDbId} (components/match/EconomicsTab.tsx:193)", "shortDescription": {"text": "Dangling fetch: PATCH /api/matches/${matchDbId} (components/match/EconomicsTab.tsx:193)"}, "fullDescription": {"text": "`components/match/EconomicsTab.tsx:193` calls `PATCH /api/matches/${matchDbId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/matches/<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-e4e102306405bef6", "name": "Dangling fetch: PATCH /api/matches/${matchDbId} (components/match/EconomicsTab.tsx:220)", "shortDescription": {"text": "Dangling fetch: PATCH /api/matches/${matchDbId} (components/match/EconomicsTab.tsx:220)"}, "fullDescription": {"text": "`components/match/EconomicsTab.tsx:220` calls `PATCH /api/matches/${matchDbId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/matches/<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-0efda589477ada43", "name": "Dangling fetch: POST /api/voyage/tce (components/match/EconomicsTab.tsx:384)", "shortDescription": {"text": "Dangling fetch: POST /api/voyage/tce (components/match/EconomicsTab.tsx:384)"}, "fullDescription": {"text": "`components/match/EconomicsTab.tsx:384` calls `POST /api/voyage/tce` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/voyage/tce`\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-7faaf484d0479e4a", "name": "Dangling fetch: POST /api/ai/explain-deal (components/match/ExplainDealModal.tsx:71)", "shortDescription": {"text": "Dangling fetch: POST /api/ai/explain-deal (components/match/ExplainDealModal.tsx:71)"}, "fullDescription": {"text": "`components/match/ExplainDealModal.tsx:71` calls `POST /api/ai/explain-deal` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/ai/explain-deal`\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-0cddcc5f2ef11004", "name": "Dangling fetch: GET /api/vessels/${imo}/psc-history (components/psc/PscSearchForm.tsx:44)", "shortDescription": {"text": "Dangling fetch: GET /api/vessels/${imo}/psc-history (components/psc/PscSearchForm.tsx:44)"}, "fullDescription": {"text": "`components/psc/PscSearchForm.tsx:44` calls `GET /api/vessels/${imo}/psc-history` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/vessels/<p>/psc-history`\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-90fdbcef7a56e640", "name": "Dangling fetch: POST /api/ai/draft-reply (components/recap/recap-actions.tsx:21)", "shortDescription": {"text": "Dangling fetch: POST /api/ai/draft-reply (components/recap/recap-actions.tsx:21)"}, "fullDescription": {"text": "`components/recap/recap-actions.tsx:21` calls `POST /api/ai/draft-reply` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/ai/draft-reply`\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-9a3c04ccd4922b34", "name": "Dangling fetch: GET /api/market/indices?name=${encodeURIComponent(kpiKey)}&days=30 (components/market/MetricHistoryPanel", "shortDescription": {"text": "Dangling fetch: GET /api/market/indices?name=${encodeURIComponent(kpiKey)}&days=30 (components/market/MetricHistoryPanel.tsx:25)"}, "fullDescription": {"text": "`components/market/MetricHistoryPanel.tsx:25` calls `GET /api/market/indices?name=${encodeURIComponent(kpiKey)}&days=30` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/market/indices`\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-2c6b56f59b150c53", "name": "Dangling fetch: POST /api/charterers (components/charterers/NewChartererModal.tsx:32)", "shortDescription": {"text": "Dangling fetch: POST /api/charterers (components/charterers/NewChartererModal.tsx:32)"}, "fullDescription": {"text": "`components/charterers/NewChartererModal.tsx:32` calls `POST /api/charterers` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/charterers`\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-a3e19b1ebdea56d7", "name": "Dangling fetch: POST /api/settings/notifications (app/settings/[section]/_forms/NotificationsForm.tsx:36)", "shortDescription": {"text": "Dangling fetch: POST /api/settings/notifications (app/settings/[section]/_forms/NotificationsForm.tsx:36)"}, "fullDescription": {"text": "`app/settings/[section]/_forms/NotificationsForm.tsx:36` calls `POST /api/settings/notifications` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/settings/notifications`\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-cf0b9c053169181a", "name": "Dangling fetch: POST /api/settings/profile (app/settings/[section]/_forms/ProfileForm.tsx:22)", "shortDescription": {"text": "Dangling fetch: POST /api/settings/profile (app/settings/[section]/_forms/ProfileForm.tsx:22)"}, "fullDescription": {"text": "`app/settings/[section]/_forms/ProfileForm.tsx:22` calls `POST /api/settings/profile` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/settings/profile`\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-b30eebcbd77a2571", "name": "Dangling fetch: POST /api/settings/password (app/settings/[section]/_forms/PasswordForm.tsx:23)", "shortDescription": {"text": "Dangling fetch: POST /api/settings/password (app/settings/[section]/_forms/PasswordForm.tsx:23)"}, "fullDescription": {"text": "`app/settings/[section]/_forms/PasswordForm.tsx:23` calls `POST /api/settings/password` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/settings/password`\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-0a5a502ba1b57e47", "name": "Dangling fetch: GET /api/matches (app/matches/MatchesClient.tsx:167)", "shortDescription": {"text": "Dangling fetch: GET /api/matches (app/matches/MatchesClient.tsx:167)"}, "fullDescription": {"text": "`app/matches/MatchesClient.tsx:167` calls `GET /api/matches` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/matches`\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-2c3e4da77a0c11b9", "name": "Dangling fetch: GET /api/matches (app/matches/MatchesClient.tsx:271)", "shortDescription": {"text": "Dangling fetch: GET /api/matches (app/matches/MatchesClient.tsx:271)"}, "fullDescription": {"text": "`app/matches/MatchesClient.tsx:271` calls `GET /api/matches` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/matches`\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-9396c004d599dbc0", "name": "Dangling fetch: PATCH /api/matches/${id} (app/matches/MatchesClient.tsx:280)", "shortDescription": {"text": "Dangling fetch: PATCH /api/matches/${id} (app/matches/MatchesClient.tsx:280)"}, "fullDescription": {"text": "`app/matches/MatchesClient.tsx:280` calls `PATCH /api/matches/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/matches/<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-4b9d7cbb97c450ae", "name": "Dangling fetch: GET /api/matches/bulk (app/matches/MatchesClient.tsx:301)", "shortDescription": {"text": "Dangling fetch: GET /api/matches/bulk (app/matches/MatchesClient.tsx:301)"}, "fullDescription": {"text": "`app/matches/MatchesClient.tsx:301` calls `GET /api/matches/bulk` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/matches/bulk`\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-54a485f395049579", "name": "Dangling fetch: GET /api/matches (app/matches/MatchesClient.tsx:313)", "shortDescription": {"text": "Dangling fetch: GET /api/matches (app/matches/MatchesClient.tsx:313)"}, "fullDescription": {"text": "`app/matches/MatchesClient.tsx:313` calls `GET /api/matches` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/matches`\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-77bf1d49acfbdf28", "name": "Dangling fetch: POST /api/cargo/import (app/cargo/CargoClient.tsx:188)", "shortDescription": {"text": "Dangling fetch: POST /api/cargo/import (app/cargo/CargoClient.tsx:188)"}, "fullDescription": {"text": "`app/cargo/CargoClient.tsx:188` calls `POST /api/cargo/import` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/cargo/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-76f2c9beb6324a55", "name": "Dangling fetch: POST /api/cargo/import (app/cargo/CargoClient.tsx:339)", "shortDescription": {"text": "Dangling fetch: POST /api/cargo/import (app/cargo/CargoClient.tsx:339)"}, "fullDescription": {"text": "`app/cargo/CargoClient.tsx:339` calls `POST /api/cargo/import` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/cargo/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-41f80cd0a75879c0", "name": "Dangling fetch: GET /api/vessels/${imo}/psc-history (app/vessels/[imo]/psc-history/page.tsx:43)", "shortDescription": {"text": "Dangling fetch: GET /api/vessels/${imo}/psc-history (app/vessels/[imo]/psc-history/page.tsx:43)"}, "fullDescription": {"text": "`app/vessels/[imo]/psc-history/page.tsx:43` calls `GET /api/vessels/${imo}/psc-history` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/vessels/<p>/psc-history`\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-8e30ca0d2b5511e5", "name": "Dangling fetch: POST /api/laytime/calculate (app/laytime/page.tsx:68)", "shortDescription": {"text": "Dangling fetch: POST /api/laytime/calculate (app/laytime/page.tsx:68)"}, "fullDescription": {"text": "`app/laytime/page.tsx:68` calls `POST /api/laytime/calculate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/laytime/calculate`\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-7359ddb8c0ec596c", "name": "Dangling fetch: POST /api/laytime/parse-sof (app/laytime/page.tsx:110)", "shortDescription": {"text": "Dangling fetch: POST /api/laytime/parse-sof (app/laytime/page.tsx:110)"}, "fullDescription": {"text": "`app/laytime/page.tsx:110` calls `POST /api/laytime/parse-sof` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/laytime/parse-sof`\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-4bc5eaa1d65a9e97", "name": "Dangling fetch: POST https://oauth.pipedrive.com/oauth/token (app/api/integrations/pipedrive/oauth/route.ts:99)", "shortDescription": {"text": "Dangling fetch: POST https://oauth.pipedrive.com/oauth/token (app/api/integrations/pipedrive/oauth/route.ts:99)"}, "fullDescription": {"text": "`app/api/integrations/pipedrive/oauth/route.ts:99` calls `POST https://oauth.pipedrive.com/oauth/token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/oauth.pipedrive.com/oauth/token`\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-d61cd3c5f2e55e25", "name": "Dangling fetch: POST /api/admin/knowledge/refresh (app/admin/knowledge/_components/SourceTable.tsx:47)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/knowledge/refresh (app/admin/knowledge/_components/SourceTable.tsx:47)"}, "fullDescription": {"text": "`app/admin/knowledge/_components/SourceTable.tsx:47` calls `POST /api/admin/knowledge/refresh` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/knowledge/refresh`\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-a005116204e9d607", "name": "Dangling fetch: GET /api/market/indices?name=bhsi&days=30 (app/market/page.tsx:142)", "shortDescription": {"text": "Dangling fetch: GET /api/market/indices?name=bhsi&days=30 (app/market/page.tsx:142)"}, "fullDescription": {"text": "`app/market/page.tsx:142` calls `GET /api/market/indices?name=bhsi&days=30` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/market/indices`\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-3589b2a8f35cc23a", "name": "Dangling fetch: GET /api/market/indices?name=tmi&days=30 (app/market/page.tsx:143)", "shortDescription": {"text": "Dangling fetch: GET /api/market/indices?name=tmi&days=30 (app/market/page.tsx:143)"}, "fullDescription": {"text": "`app/market/page.tsx:143` calls `GET /api/market/indices?name=tmi&days=30` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/market/indices`\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-6c9e1d720807c683", "name": "Dangling fetch: GET /api/market/indices?name=drewry-bb&days=30 (app/market/page.tsx:144)", "shortDescription": {"text": "Dangling fetch: GET /api/market/indices?name=drewry-bb&days=30 (app/market/page.tsx:144)"}, "fullDescription": {"text": "`app/market/page.tsx:144` calls `GET /api/market/indices?name=drewry-bb&days=30` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/market/indices`\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-61b34d85a52e7156", "name": "Dangling fetch: GET /api/market/baltic-kpi?code=BDI (app/market/page.tsx:145)", "shortDescription": {"text": "Dangling fetch: GET /api/market/baltic-kpi?code=BDI (app/market/page.tsx:145)"}, "fullDescription": {"text": "`app/market/page.tsx:145` calls `GET /api/market/baltic-kpi?code=BDI` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/market/baltic-kpi`\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-53315e4f97e414c7", "name": "Dangling fetch: GET /api/market/indices?name=${key}&days=30 (app/market/page.tsx:174)", "shortDescription": {"text": "Dangling fetch: GET /api/market/indices?name=${key}&days=30 (app/market/page.tsx:174)"}, "fullDescription": {"text": "`app/market/page.tsx:174` calls `GET /api/market/indices?name=${key}&days=30` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/market/indices`\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-a4dd190ff3e7da71", "name": "Dangling fetch: GET /api/knowledge/clauses?${params.toString()} (app/clauses/page.tsx:49)", "shortDescription": {"text": "Dangling fetch: GET /api/knowledge/clauses?${params.toString()} (app/clauses/page.tsx:49)"}, "fullDescription": {"text": "`app/clauses/page.tsx:49` calls `GET /api/knowledge/clauses?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/knowledge/clauses`\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-79c6b377819a5b85", "name": "Dangling fetch: GET /api/charterers (app/charterers/page.tsx:41)", "shortDescription": {"text": "Dangling fetch: GET /api/charterers (app/charterers/page.tsx:41)"}, "fullDescription": {"text": "`app/charterers/page.tsx:41` calls `GET /api/charterers` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/charterers`\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-a02dda650eda4264", "name": "Dangling fetch: GET /api/charterers (app/charterers/page.tsx:176)", "shortDescription": {"text": "Dangling fetch: GET /api/charterers (app/charterers/page.tsx:176)"}, "fullDescription": {"text": "`app/charterers/page.tsx:176` calls `GET /api/charterers` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/charterers`\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-f75b054fe52dd75b", "name": "Dangling fetch: GET /api/charterers/${id} (app/charterers/[id]/page.tsx:51)", "shortDescription": {"text": "Dangling fetch: GET /api/charterers/${id} (app/charterers/[id]/page.tsx:51)"}, "fullDescription": {"text": "`app/charterers/[id]/page.tsx:51` calls `GET /api/charterers/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/charterers/<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-e484198cd456fabf", "name": "Dangling fetch: GET https://www.eex.com/en/market-data/environmental-markets/spot-market/european-emission-allowances#!/", "shortDescription": {"text": "Dangling fetch: GET https://www.eex.com/en/market-data/environmental-markets/spot-market/european-emission-allowances#!/2026 (lib/economics/ets.ts:90)"}, "fullDescription": {"text": "`lib/economics/ets.ts:90` calls `GET https://www.eex.com/en/market-data/environmental-markets/spot-market/european-emission-allowances#!/2026` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/www.eex.com/en/market-data/environmental-markets/spot-market/european-emission-allowances`\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-b4005510a21d0585", "name": "Dangling fetch: POST https://api.openai.com/v1/audio/transcriptions (lib/voice/whisper-transcribe.ts:40)", "shortDescription": {"text": "Dangling fetch: POST https://api.openai.com/v1/audio/transcriptions (lib/voice/whisper-transcribe.ts:40)"}, "fullDescription": {"text": "`lib/voice/whisper-transcribe.ts:40` calls `POST https://api.openai.com/v1/audio/transcriptions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.openai.com/v1/audio/transcriptions`\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-37f4123dc45180be", "name": "Dangling fetch: GET /api/matches/${encodeURIComponent(matchId)} (extensions/gmail/inserts/economics.ts:22)", "shortDescription": {"text": "Dangling fetch: GET /api/matches/${encodeURIComponent(matchId)} (extensions/gmail/inserts/economics.ts:22)"}, "fullDescription": {"text": "`extensions/gmail/inserts/economics.ts:22` calls `GET /api/matches/${encodeURIComponent(matchId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/matches/<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-fb03021f7c7b7624", "name": "Dangling fetch: GET /vessel/${encodeURIComponent(vesselId)} (extensions/gmail/inserts/passport.ts:29)", "shortDescription": {"text": "Dangling fetch: GET /vessel/${encodeURIComponent(vesselId)} (extensions/gmail/inserts/passport.ts:29)"}, "fullDescription": {"text": "`extensions/gmail/inserts/passport.ts:29` calls `GET /vessel/${encodeURIComponent(vesselId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/vessel/<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-e92fb507ed4dc4dc", "name": "Dangling fetch: GET /api/benchmark?route=${encodeURIComponent(route)} (extensions/gmail/inserts/benchmark.ts:21)", "shortDescription": {"text": "Dangling fetch: GET /api/benchmark?route=${encodeURIComponent(route)} (extensions/gmail/inserts/benchmark.ts:21)"}, "fullDescription": {"text": "`extensions/gmail/inserts/benchmark.ts:21` calls `GET /api/benchmark?route=${encodeURIComponent(route)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/benchmark`\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-ea3a2207cf050446", "name": "Dangling fetch: POST /api/parser/email (design-system/patterns/CmdKPalette.tsx:38)", "shortDescription": {"text": "Dangling fetch: POST /api/parser/email (design-system/patterns/CmdKPalette.tsx:38)"}, "fullDescription": {"text": "`design-system/patterns/CmdKPalette.tsx:38` calls `POST /api/parser/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/parser/email`\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-e7f1df5d9e19fc50", "name": "Dangling fetch: PATCH /api/me (design-system/patterns/ModeProvider.tsx:33)", "shortDescription": {"text": "Dangling fetch: PATCH /api/me (design-system/patterns/ModeProvider.tsx:33)"}, "fullDescription": {"text": "`design-system/patterns/ModeProvider.tsx:33` calls `PATCH /api/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/me`\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-a710e0c6e0c30972", "name": "Dangling fetch: POST /api/help/ask (design-system/patterns/PaletteTabs/HelpTab.tsx:17)", "shortDescription": {"text": "Dangling fetch: POST /api/help/ask (design-system/patterns/PaletteTabs/HelpTab.tsx:17)"}, "fullDescription": {"text": "`design-system/patterns/PaletteTabs/HelpTab.tsx:17` calls `POST /api/help/ask` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/help/ask`\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-830082bde77ccb6a", "name": "Unused endpoint: POST /distance", "shortDescription": {"text": "Unused endpoint: POST /distance"}, "fullDescription": {"text": "`services/searoute/main.py` declares `POST /distance` 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/22376"}, "properties": {"repository": "Vitali2011/quantika-demo", "repoUrl": "https://github.com/Vitali2011/quantika-demo", "branch": "main"}, "results": [{"ruleId": "scanner-aa0a23df455d1b6f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 __tests__/economics/list-detail-tce-parity.test.ts:396"}, "properties": {"repobilityId": "a60abfeb869ec699", "scanner": "scanner-primary", "fingerprint": "aa0a23df455d1b6f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e9a896f753070559", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 __tests__/api/draft-quote-greeting.test.ts:83"}, "properties": {"repobilityId": "c620634b5d39d207", "scanner": "scanner-primary", "fingerprint": "e9a896f753070559", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-efac5bdb5d9cbdb2", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 __tests__/api/llm-timeout-alignment.test.ts:159"}, "properties": {"repobilityId": "f93ae6f06a10b4d3", "scanner": "scanner-primary", "fingerprint": "efac5bdb5d9cbdb2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-3af32ae861e87383", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 __tests__/api/compare-routes-perf.test.ts:120"}, "properties": {"repobilityId": "aa25935429b657f7", "scanner": "scanner-primary", "fingerprint": "3af32ae861e87383", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-10b894cfb91625e2", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 __tests__/lib/knowledge/embeddings/pipeline.test.ts:96"}, "properties": {"repobilityId": "f3675a80b3899288", "scanner": "scanner-primary", "fingerprint": "10b894cfb91625e2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-c7ce3e93da090a09", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 __tests__/regression/test_chunker_entity_decode.test.ts:263"}, "properties": {"repobilityId": "2563560188b49713", "scanner": "scanner-primary", "fingerprint": "c7ce3e93da090a09", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b4cdbc62b5469e6d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 __tests__/e2e/skeptical-forwarder.spec.ts:114"}, "properties": {"repobilityId": "40b4046b63d871c4", "scanner": "scanner-primary", "fingerprint": "b4cdbc62b5469e6d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3692f994c38be1aa", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 __tests__/e2e/spa-navigation-hydration.spec.ts:111"}, "properties": {"repobilityId": "93a584f739a1b5b3", "scanner": "scanner-primary", "fingerprint": "3692f994c38be1aa", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d9172dadb9de4b38", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 __tests__/e2e/rag-visual-verification.spec.ts:92"}, "properties": {"repobilityId": "ae5c5785f7481f91", "scanner": "scanner-primary", "fingerprint": "d9172dadb9de4b38", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-641d2b618c3b49ec", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 __tests__/e2e/smoke/react-hydration.spec.ts:63"}, "properties": {"repobilityId": "92947953c76364d8", "scanner": "scanner-primary", "fingerprint": "641d2b618c3b49ec", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1cbd70250f04ca51", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 __tests__/e2e/smoke/tier2-match-detail.spec.ts:33"}, "properties": {"repobilityId": "f3e2bf43e1a91aea", "scanner": "scanner-primary", "fingerprint": "1cbd70250f04ca51", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-11d310011f75e043", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/knowledge-baltic-seed.ts:57"}, "properties": {"repobilityId": "de50585bad81ab02", "scanner": "scanner-primary", "fingerprint": "11d310011f75e043", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ef1fa976fa917132", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/knowledge-igc-embed.ts:17"}, "properties": {"repobilityId": "c1b1ef58414383fb", "scanner": "scanner-primary", "fingerprint": "ef1fa976fa917132", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-44141540b6c1e030", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/knowledge-unlocode-seed.ts:217"}, "properties": {"repobilityId": "5ccf6024c71cc7a5", "scanner": "scanner-primary", "fingerprint": "44141540b6c1e030", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a1d4a0bb66983512", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verify-ports.ts:112"}, "properties": {"repobilityId": "a1677c197b7cf48d", "scanner": "scanner-primary", "fingerprint": "a1d4a0bb66983512", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cfefb0e57a89ebf8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-bimco-clauses.ts:22"}, "properties": {"repobilityId": "91547fb15d9888fa", "scanner": "scanner-primary", "fingerprint": "cfefb0e57a89ebf8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-11fd4857c566c997", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/build-sample-data.ts:165"}, "properties": {"repobilityId": "e350e60d9d7e3328", "scanner": "scanner-primary", "fingerprint": "11fd4857c566c997", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8c0fb7d1280a23a6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/setup-gmail-oauth.ts:125"}, "properties": {"repobilityId": "d0fe736aeb004484", "scanner": "scanner-primary", "fingerprint": "8c0fb7d1280a23a6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f8072dee55a8ed23", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/progong-harness.ts:458"}, "properties": {"repobilityId": "5b9b64057a131a7a", "scanner": "scanner-primary", "fingerprint": "f8072dee55a8ed23", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b159e418355bdf8f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import-gmail-emails.ts:107"}, "properties": {"repobilityId": "bfc5bdeac790c0cf", "scanner": "scanner-primary", "fingerprint": "b159e418355bdf8f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f02671af5776b8a9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-charterers-xss.ts:56"}, "properties": {"repobilityId": "4409302fca373038", "scanner": "scanner-primary", "fingerprint": "f02671af5776b8a9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4d248d2fe9aba2a0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/auto-prequote-cron.ts:93"}, "properties": {"repobilityId": "70abf30d0135a8d2", "scanner": "scanner-primary", "fingerprint": "4d248d2fe9aba2a0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-de3f16ae073245bc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/extract-corpus-cases.ts:147"}, "properties": {"repobilityId": "dfefd9ab8eef3c5b", "scanner": "scanner-primary", "fingerprint": "de3f16ae073245bc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f9f8cf9d4677bc6e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/build-corpus.ts:57"}, "properties": {"repobilityId": "d37f6d629132ed52", "scanner": "scanner-primary", "fingerprint": "f9f8cf9d4677bc6e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b334e727d326b479", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-port-da.ts:231"}, "properties": {"repobilityId": "c8ec43433fcd2d5b", "scanner": "scanner-primary", "fingerprint": "b334e727d326b479", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-65fa7a1c92c1e86f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/refresh-canal-tariffs.ts:157"}, "properties": {"repobilityId": "5286d719038d536c", "scanner": "scanner-primary", "fingerprint": "65fa7a1c92c1e86f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5c85fdede183a883", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate.ts:66"}, "properties": {"repobilityId": "886ea65b2e117422", "scanner": "scanner-primary", "fingerprint": "5c85fdede183a883", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c052c01bd815a5f0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/audit-grounding.ts:498"}, "properties": {"repobilityId": "968029b77542d860", "scanner": "scanner-primary", "fingerprint": "c052c01bd815a5f0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-69cef0cfa4d654eb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-sample-data.ts:36"}, "properties": {"repobilityId": "9c6f92d4f8496419", "scanner": "scanner-primary", "fingerprint": "69cef0cfa4d654eb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e83b6e377871b3a9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-fx-rates.ts:72"}, "properties": {"repobilityId": "ae9fa8fc184959cf", "scanner": "scanner-primary", "fingerprint": "e83b6e377871b3a9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3601ac0d01ce333c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-market-history.ts:179"}, "properties": {"repobilityId": "c06cba444707876e", "scanner": "scanner-primary", "fingerprint": "3601ac0d01ce333c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-38e3b84185fbeb65", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-vertex-datastores.ts:93"}, "properties": {"repobilityId": "9aa17ed12c770030", "scanner": "scanner-primary", "fingerprint": "38e3b84185fbeb65", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ce96db6abf5ff717", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/knowledge-imsbc-embed.ts:17"}, "properties": {"repobilityId": "3e9dda62eb015536", "scanner": "scanner-primary", "fingerprint": "ce96db6abf5ff717", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-badf769aab75cfdc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/data-integrity-check.ts:136"}, "properties": {"repobilityId": "204de79a350d407e", "scanner": "scanner-primary", "fingerprint": "badf769aab75cfdc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5dea76d56497a320", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/knowledge-jwc-yaml-seed.ts:21"}, "properties": {"repobilityId": "4352e337c4fe2d28", "scanner": "scanner-primary", "fingerprint": "5dea76d56497a320", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f3b8501668c1704b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/backfill-815-weights.ts:77"}, "properties": {"repobilityId": "30b5c903b7d2bad6", "scanner": "scanner-primary", "fingerprint": "f3b8501668c1704b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0a963c3858d3ff79", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/seed-all.ts:28"}, "properties": {"repobilityId": "db750524c47aa5d1", "scanner": "scanner-primary", "fingerprint": "0a963c3858d3ff79", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cd8d1d4a9b0d48f3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/unfreeze-market.ts:38"}, "properties": {"repobilityId": "385f2f2cfdcdeedd", "scanner": "scanner-primary", "fingerprint": "cd8d1d4a9b0d48f3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e1d06267baf797a1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/reconcile.ts:193"}, "properties": {"repobilityId": "f01bb3ab193878c2", "scanner": "scanner-primary", "fingerprint": "e1d06267baf797a1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9523989c2f7ac44c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/regenerate-matches.ts:87"}, "properties": {"repobilityId": "f8bc57e3f2229b63", "scanner": "scanner-primary", "fingerprint": "9523989c2f7ac44c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3335a943e5e1bd1e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/audit-matches.ts:45"}, "properties": {"repobilityId": "c92b902d5df779a0", "scanner": "scanner-primary", "fingerprint": "3335a943e5e1bd1e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0c800d92ed5b59f0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/seed-charterers.ts:114"}, "properties": {"repobilityId": "4c1b42bcc50394bb", "scanner": "scanner-primary", "fingerprint": "0c800d92ed5b59f0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bd6363c013ddf6f5", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 scripts/demo-seed/real-matches.ts:320"}, "properties": {"repobilityId": "4b225d555dc91e96", "scanner": "scanner-primary", "fingerprint": "bd6363c013ddf6f5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-44f0975771a0bf8d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/real-matches.ts:147"}, "properties": {"repobilityId": "d7667c0320418958", "scanner": "scanner-primary", "fingerprint": "44f0975771a0bf8d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-54e3c23a537c80ef", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/parse-via-devserver.ts:154"}, "properties": {"repobilityId": "b8efe9aca756fe0a", "scanner": "scanner-primary", "fingerprint": "54e3c23a537c80ef", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-17464e24de33bf25", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/backfill-charterer.ts:40"}, "properties": {"repobilityId": "ba3afd7d350d2450", "scanner": "scanner-primary", "fingerprint": "17464e24de33bf25", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c5cafda7c221881e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/backfill-lastcargoes.ts:43"}, "properties": {"repobilityId": "0de8872d42d7eeb3", "scanner": "scanner-primary", "fingerprint": "c5cafda7c221881e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c3d921ef8076ab03", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/analyze.ts:395"}, "properties": {"repobilityId": "72b0ed3d4be36bec", "scanner": "scanner-primary", "fingerprint": "c3d921ef8076ab03", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0363656d20e4c1ef", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/golden-candidates.ts:69"}, "properties": {"repobilityId": "d8e9ee4b01af6082", "scanner": "scanner-primary", "fingerprint": "0363656d20e4c1ef", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-aaf34fc85fa9ac49", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 scripts/demo-seed/build.ts:794"}, "properties": {"repobilityId": "3b4bc2598997454f", "scanner": "scanner-primary", "fingerprint": "aaf34fc85fa9ac49", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-c60744bc823ad3ca", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/build.ts:867"}, "properties": {"repobilityId": "4be22f103bb3f70c", "scanner": "scanner-primary", "fingerprint": "c60744bc823ad3ca", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b8a562331cba9028", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/patch-vessel-speed-consumption.ts:207"}, "properties": {"repobilityId": "897d81a833dd4f82", "scanner": "scanner-primary", "fingerprint": "b8a562331cba9028", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e6d8a04fc3ba3158", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/patch-fit.ts:342"}, "properties": {"repobilityId": "1d97c922f4513e88", "scanner": "scanner-primary", "fingerprint": "e6d8a04fc3ba3158", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f41e9cd46290c464", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/preview-ranking-shift.ts:72"}, "properties": {"repobilityId": "57ee71bf2ef69fe5", "scanner": "scanner-primary", "fingerprint": "f41e9cd46290c464", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4eeef4693eea2e6f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/parse-llm-direct.ts:105"}, "properties": {"repobilityId": "98529c4c948eae6e", "scanner": "scanner-primary", "fingerprint": "4eeef4693eea2e6f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4a4a4b9a65bb4578", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/validators.ts:88"}, "properties": {"repobilityId": "e957f7355f6b92a8", "scanner": "scanner-primary", "fingerprint": "4a4a4b9a65bb4578", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-73abae6d83f89eb5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/backfill-payout.ts:107"}, "properties": {"repobilityId": "0f49166bdb753316", "scanner": "scanner-primary", "fingerprint": "73abae6d83f89eb5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fd8d94bd6160297f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/demo-seed/seed-tmi.ts:81"}, "properties": {"repobilityId": "4e68f01b5837d95a", "scanner": "scanner-primary", "fingerprint": "fd8d94bd6160297f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-eb2ef011241a9354", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/diag/verify-port-da-recalibration.ts:67"}, "properties": {"repobilityId": "039a942bcc1ddc02", "scanner": "scanner-primary", "fingerprint": "eb2ef011241a9354", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f87b18930d90f043", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/diag/da-51414-root-cause.ts:69"}, "properties": {"repobilityId": "00b42f82a9bdbe45", "scanner": "scanner-primary", "fingerprint": "f87b18930d90f043", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bc1c05413f3856ef", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/diag/war-risk-shift-table.ts:222"}, "properties": {"repobilityId": "7c9f5b36b9885f67", "scanner": "scanner-primary", "fingerprint": "bc1c05413f3856ef", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cab30125115243d7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/diag/recalibrate-port-da.ts:72"}, "properties": {"repobilityId": "a33f2580e7873a16", "scanner": "scanner-primary", "fingerprint": "cab30125115243d7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0726845818e28b52", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/diag/tce-list-vs-detail-audit.ts:602"}, "properties": {"repobilityId": "5ae4de032c4cdeb2", "scanner": "scanner-primary", "fingerprint": "0726845818e28b52", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-51e446e30208b2de", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/diag/bunker-reco-check.ts:57"}, "properties": {"repobilityId": "fc9818b3d0bcd4e1", "scanner": "scanner-primary", "fingerprint": "51e446e30208b2de", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2caa8fc81286e5e0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/research/top-matches-broker-view.ts:376"}, "properties": {"repobilityId": "1e3933ff78b2d71d", "scanner": "scanner-primary", "fingerprint": "2caa8fc81286e5e0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5f1e63091bb67098", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/research/match-realism-funnel.ts:218"}, "properties": {"repobilityId": "2d5f17a46b7b3450", "scanner": "scanner-primary", "fingerprint": "5f1e63091bb67098", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-802fbd8bd0f9b9a1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/smoke/genai-v2.ts:57"}, "properties": {"repobilityId": "1915b3cb2624ef21", "scanner": "scanner-primary", "fingerprint": "802fbd8bd0f9b9a1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0dc3f5c41904896c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/l5c/extract-disagreements.ts:44"}, "properties": {"repobilityId": "ac672c2a879d3ca8", "scanner": "scanner-primary", "fingerprint": "0dc3f5c41904896c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ae7ea21d830c26e5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/l5c/merge-pairs.ts:49"}, "properties": {"repobilityId": "2ea8f148097cae29", "scanner": "scanner-primary", "fingerprint": "ae7ea21d830c26e5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5e5dbfe6e212dbbe", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/eval/run-match-providers-comparison.ts:244"}, "properties": {"repobilityId": "a46fc8fdd57244d8", "scanner": "scanner-primary", "fingerprint": "5e5dbfe6e212dbbe", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-393dedcba5e133d1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/eval/run-progonq-match.ts:157"}, "properties": {"repobilityId": "ad4ff2f412cae62c", "scanner": "scanner-primary", "fingerprint": "393dedcba5e133d1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fe0c3f125dce2061", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/eval/reparse-cargo-corpus.ts:116"}, "properties": {"repobilityId": "0a8557321278ae69", "scanner": "scanner-primary", "fingerprint": "fe0c3f125dce2061", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-772452e233870eba", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/eval/parity-check-parsed-cargoes.ts:102"}, "properties": {"repobilityId": "88d463fa4bd7ffc6", "scanner": "scanner-primary", "fingerprint": "772452e233870eba", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0a5427bb2ffb386b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/eval/run-parser.ts:92"}, "properties": {"repobilityId": "1693609564c3f19a", "scanner": "scanner-primary", "fingerprint": "0a5427bb2ffb386b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0ca917821f0296ab", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/progonq/judge-match.ts:287"}, "properties": {"repobilityId": "3f3d43de85ded7cf", "scanner": "scanner-primary", "fingerprint": "0ca917821f0296ab", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-af0ab187ddc09189", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/progonq/judge-explain-deal.ts:365"}, "properties": {"repobilityId": "2a574c0722a4b579", "scanner": "scanner-primary", "fingerprint": "af0ab187ddc09189", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2772d12ff483838a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/progonq/judge-draft-quote.ts:493"}, "properties": {"repobilityId": "fd8857508f30ac2b", "scanner": "scanner-primary", "fingerprint": "2772d12ff483838a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f26ab673a9e1fa03", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/progonq/__tests__/score-vessel.test.ts:230"}, "properties": {"repobilityId": "a6e5f4baa6a556a9", "scanner": "scanner-primary", "fingerprint": "f26ab673a9e1fa03", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-caed06cee4212147", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/wave-gamma-bake-off/redecide.ts:75"}, "properties": {"repobilityId": "8163901f2697ad71", "scanner": "scanner-primary", "fingerprint": "caed06cee4212147", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5fa49f5757094362", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/wave-gamma-bake-off/build-ground-truth.ts:288"}, "properties": {"repobilityId": "1dc1d2fa840a0063", "scanner": "scanner-primary", "fingerprint": "5fa49f5757094362", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d3882ba71d44b7d4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/wave-gamma-bake-off/build-reference.ts:38"}, "properties": {"repobilityId": "e2398b89f7327048", "scanner": "scanner-primary", "fingerprint": "d3882ba71d44b7d4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-05ef16f678972689", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/wave-gamma-bake-off/cli.ts:78"}, "properties": {"repobilityId": "d3f3592ace6735ef", "scanner": "scanner-primary", "fingerprint": "05ef16f678972689", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-dfd6fbadc1b1724d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/wave-gamma-bake-off/analyze-degraded.ts:391"}, "properties": {"repobilityId": "cf90a16f105202c5", "scanner": "scanner-primary", "fingerprint": "dfd6fbadc1b1724d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5734b2ed08248ad0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/wave-gamma-bake-off/validate-baseline.ts:346"}, "properties": {"repobilityId": "775059b69dc986d6", "scanner": "scanner-primary", "fingerprint": "5734b2ed08248ad0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-07d3f513a712a7cf", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/ports/ingest-wpi-cranes.ts:172"}, "properties": {"repobilityId": "dd9b2d71c10baf05", "scanner": "scanner-primary", "fingerprint": "07d3f513a712a7cf", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6c2ac9ab55b17d16", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/knowledge/status.ts:74"}, "properties": {"repobilityId": "231c134e2c638d85", "scanner": "scanner-primary", "fingerprint": "6c2ac9ab55b17d16", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-307d67966bb93f3d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/knowledge/load-market-indices.ts:71"}, "properties": {"repobilityId": "9fe674a67c531d6a", "scanner": "scanner-primary", "fingerprint": "307d67966bb93f3d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-38226ef0d398ce41", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/knowledge/refresh.ts:68"}, "properties": {"repobilityId": "c2fa906254155cd6", "scanner": "scanner-primary", "fingerprint": "38226ef0d398ce41", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a1e17a8a84e842e2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/knowledge/validate-data-files.ts:116"}, "properties": {"repobilityId": "f9dd60d0b82ada6e", "scanner": "scanner-primary", "fingerprint": "a1e17a8a84e842e2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e8767dbc41463833", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/knowledge/seeds/seed-psc-history.ts:36"}, "properties": {"repobilityId": "eaf6950e52ea9514", "scanner": "scanner-primary", "fingerprint": "e8767dbc41463833", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-db048bb9687b1162", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/knowledge/seeds/seed-charterers.ts:206"}, "properties": {"repobilityId": "bbac4207441ad0a8", "scanner": "scanner-primary", "fingerprint": "db048bb9687b1162", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-46f5eb95fa4b8901", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/knowledge/seeds/seed-market-indices.ts:44"}, "properties": {"repobilityId": "ed4ff5ba0af826b5", "scanner": "scanner-primary", "fingerprint": "46f5eb95fa4b8901", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ecbcfa91a2f263c3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/knowledge/sources/eca.ts:20"}, "properties": {"repobilityId": "e35b1117621f1ee5", "scanner": "scanner-primary", "fingerprint": "ecbcfa91a2f263c3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-079b85583184ed9a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/knowledge/sources/panama-tariffs.ts:38"}, "properties": {"repobilityId": "c40083cf0385a59f", "scanner": "scanner-primary", "fingerprint": "079b85583184ed9a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f9709563a8b2004c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/knowledge/sources/distances.ts:155"}, "properties": {"repobilityId": "b32fed3a616326f4", "scanner": "scanner-primary", "fingerprint": "f9709563a8b2004c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-48748f9be627590a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/knowledge/sources/ofac.ts:19"}, "properties": {"repobilityId": "99863b6646cde4d5", "scanner": "scanner-primary", "fingerprint": "48748f9be627590a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-88f24071e1f71e20", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/knowledge/sources/eu-sanctions.ts:19"}, "properties": {"repobilityId": "ce951f37d64d58f2", "scanner": "scanner-primary", "fingerprint": "88f24071e1f71e20", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5563973724db2bf3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/knowledge/sources/fx-rates.ts:21"}, "properties": {"repobilityId": "1770f7f2f3339e3e", "scanner": "scanner-primary", "fingerprint": "5563973724db2bf3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4f859ed64a02e27b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/knowledge/cron/refresh-bimco-rag.ts:26"}, "properties": {"repobilityId": "fd46f0eeeff94731", "scanner": "scanner-primary", "fingerprint": "4f859ed64a02e27b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f79b18c4ddb2da1b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/knowledge/cron/refresh-bunker.ts:34"}, "properties": {"repobilityId": "4f24f656442df9cd", "scanner": "scanner-primary", "fingerprint": "f79b18c4ddb2da1b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1b527c2990a86806", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/knowledge/cron/refresh-fx-rates.ts:23"}, "properties": {"repobilityId": "1b8d14dc31e45341", "scanner": "scanner-primary", "fingerprint": "1b527c2990a86806", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1d40d72e6f032389", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/knowledge/cron/refresh-sanctions.ts:56"}, "properties": {"repobilityId": "579bc0f0092dc052", "scanner": "scanner-primary", "fingerprint": "1d40d72e6f032389", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8cae8ddf5890744f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/knowledge/cron/refresh-market-indices.ts:38"}, "properties": {"repobilityId": "9a454546a3d9f450", "scanner": "scanner-primary", "fingerprint": "8cae8ddf5890744f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-88ce6b2f07dc6b27", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/knowledge/cron/refresh-eua.ts:36"}, "properties": {"repobilityId": "bf4b514e2cc97250", "scanner": "scanner-primary", "fingerprint": "88ce6b2f07dc6b27", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7e7778e4320ce1f2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/source-quote-popover.tsx:66"}, "properties": {"repobilityId": "79e4c789697a291e", "scanner": "scanner-primary", "fingerprint": "7e7778e4320ce1f2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4791de262752fd5d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/dashboard/DashboardTodoSection.tsx:75"}, "properties": {"repobilityId": "2037574ae376260e", "scanner": "scanner-primary", "fingerprint": "4791de262752fd5d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-03aaf2e7161efb22", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/dashboard/DashboardFreshMatches.tsx:66"}, "properties": {"repobilityId": "2f1d1f492bf52e3d", "scanner": "scanner-primary", "fingerprint": "03aaf2e7161efb22", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3b1746ccb01829eb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/market/KnowledgeFeed.tsx:92"}, "properties": {"repobilityId": "2faaf8ef907bd36f", "scanner": "scanner-primary", "fingerprint": "3b1746ccb01829eb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-12a37825f3f3a25a", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/layout.tsx:109"}, "properties": {"repobilityId": "6f16eb9b82a2dcd6", "scanner": "scanner-primary", "fingerprint": "12a37825f3f3a25a", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-29cc26a8bcf64c6d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/matches/MatchesClient.tsx:504"}, "properties": {"repobilityId": "cde17324c787ab7f", "scanner": "scanner-primary", "fingerprint": "29cc26a8bcf64c6d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8bfb3051b535374b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/processing/page.tsx:249"}, "properties": {"repobilityId": "8970b663febd291d", "scanner": "scanner-primary", "fingerprint": "8bfb3051b535374b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8508496ad3cff967", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/match/[id]/page.tsx:230"}, "properties": {"repobilityId": "c6bc048fc377eef1", "scanner": "scanner-primary", "fingerprint": "8508496ad3cff967", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a7b6773cb0690b6e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/cargo/CargoClient.tsx:580"}, "properties": {"repobilityId": "20f1af3920d9b164", "scanner": "scanner-primary", "fingerprint": "a7b6773cb0690b6e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7cecaf3a7f9e27c7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/email/page.tsx:110"}, "properties": {"repobilityId": "986e3e561a2c21d8", "scanner": "scanner-primary", "fingerprint": "7cecaf3a7f9e27c7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-93107b4414834286", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/vessels/VesselsClient.tsx:330"}, "properties": {"repobilityId": "65f5af84876d1dd7", "scanner": "scanner-primary", "fingerprint": "93107b4414834286", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-53e3c9796eed05fa", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/recap/page.tsx:102"}, "properties": {"repobilityId": "0652af2c1a5c9d0f", "scanner": "scanner-primary", "fingerprint": "53e3c9796eed05fa", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-173049b68e6be370", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 lib/matching/persist-session-matches.ts:174"}, "properties": {"repobilityId": "bff6e0c10b5f254e", "scanner": "scanner-primary", "fingerprint": "173049b68e6be370", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-f6f228f5b5a2a3c6", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 lib/matching/reason-enricher.ts:29"}, "properties": {"repobilityId": "3dce6fae6cf77c47", "scanner": "scanner-primary", "fingerprint": "f6f228f5b5a2a3c6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-3ce892644380084b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 lib/knowledge/alerts.ts:57"}, "properties": {"repobilityId": "10e874e2a6fb4bad", "scanner": "scanner-primary", "fingerprint": "3ce892644380084b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a010af3ed0730b3b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 lib/knowledge/sources/jwc-yaml/adapter.ts:108"}, "properties": {"repobilityId": "41963f9180ab2b8a", "scanner": "scanner-primary", "fingerprint": "a010af3ed0730b3b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d5e2d78a6660002b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 lib/knowledge/embeddings/dry-run.ts:20"}, "properties": {"repobilityId": "2561e0793c0a4c6b", "scanner": "scanner-primary", "fingerprint": "d5e2d78a6660002b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b95ab0ebedadeda1", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 design-system/__tests__/HelpTab.test.tsx:35"}, "properties": {"repobilityId": "df40a8e369b36321", "scanner": "scanner-primary", "fingerprint": "b95ab0ebedadeda1", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-d8212ad379c2ca09", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 design-system/patterns/LiveStripCard.tsx:21"}, "properties": {"repobilityId": "4d18c46747a977e0", "scanner": "scanner-primary", "fingerprint": "d8212ad379c2ca09", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-621a125c6d2a6d30", "level": "warning", "message": {"text": "Privileged port 45 in use"}, "properties": {"repobilityId": "73cf64d92574d41c", "scanner": "scanner-primary", "fingerprint": "621a125c6d2a6d30", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "__tests__/scripts/knowledge/sources/distances.test.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-129ad5fd929fa345", "level": "warning", "message": {"text": "Privileged port 10 in use"}, "properties": {"repobilityId": "735372d6b5594915", "scanner": "scanner-primary", "fingerprint": "129ad5fd929fa345", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "__tests__/scripts/knowledge/sources/distances.test.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4f8f2e6b65344b6a", "level": "warning", "message": {"text": "Privileged port 3 in use"}, "properties": {"repobilityId": "261b7b1c6a18d412", "scanner": "scanner-primary", "fingerprint": "4f8f2e6b65344b6a", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/ops/backup.sh"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a0f2f364fba0fc15", "level": "warning", "message": {"text": "Privileged port 40 in use"}, "properties": {"repobilityId": "28c59d470d4929c6", "scanner": "scanner-primary", "fingerprint": "a0f2f364fba0fc15", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "lib/prompts/parse-cargo.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d63da3583b14afc0", "level": "warning", "message": {"text": "Dockerfile runs as root: Dockerfile"}, "properties": {"repobilityId": "a2ed1bd120e507db", "scanner": "scanner-primary", "fingerprint": "d63da3583b14afc0", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-835eae4c7f17a2f8", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:22-alpine"}, "properties": {"repobilityId": "9ed3df87d30e6e44", "scanner": "scanner-primary", "fingerprint": "835eae4c7f17a2f8", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-835eae4c7f17a2f8", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:22-alpine"}, "properties": {"repobilityId": "fd52dff3730854fa", "scanner": "scanner-primary", "fingerprint": "835eae4c7f17a2f8", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 11}}}]}, {"ruleId": "scanner-182629e56f0780a1", "level": "warning", "message": {"text": "Dockerfile runs as root: services/searoute/Dockerfile"}, "properties": {"repobilityId": "11005c95992c1797", "scanner": "scanner-primary", "fingerprint": "182629e56f0780a1", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-dfdd2c0488b1cf8c", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.11-slim"}, "properties": {"repobilityId": "af18cab63fc40213", "scanner": "scanner-primary", "fingerprint": "dfdd2c0488b1cf8c", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/searoute/Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-aa5acaa49eb8315b", "level": "note", "message": {"text": "Containers defined but no K8s/orchestration manifest found"}, "properties": {"repobilityId": "b230ea9b68736081", "scanner": "scanner-primary", "fingerprint": "aa5acaa49eb8315b", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["coverage", "deployment"]}}, {"ruleId": "scanner-a25e4d2fe3198570", "level": "error", "message": {"text": "Runtime dotenv file present in repo: .env.demo"}, "properties": {"repobilityId": "57bd1786d44b5717", "scanner": "scanner-primary", "fingerprint": "a25e4d2fe3198570", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["secrets", "config", "env-file", "runtime-env"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".env.demo"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9981302d9037add0", "level": "warning", "message": {"text": "Insecure pattern 'domparser_html_parse' in docs/superpowers/specs/r5e-market-claude-design-reference.html:136"}, "properties": {"repobilityId": "9fe661e9fe8ff18c", "scanner": "scanner-primary", "fingerprint": "9981302d9037add0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "domparser_html_parse"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/superpowers/specs/r5e-market-claude-design-reference.html"}, "region": {"startLine": 136}}}]}, {"ruleId": "scanner-086aa9aeec7d7e24", "level": "warning", "message": {"text": "Insecure pattern 'domparser_html_parse' in docs/superpowers/specs/r5b-dashboard-claude-design-reference.html:140"}, "properties": {"repobilityId": "7becedcf6b85135d", "scanner": "scanner-primary", "fingerprint": "086aa9aeec7d7e24", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "domparser_html_parse"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/superpowers/specs/r5b-dashboard-claude-design-reference.html"}, "region": {"startLine": 140}}}]}, {"ruleId": "scanner-c406e2b406aee610", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/superpowers/specs/r5d-charterers-claude-design-reference.html:181"}, "properties": {"repobilityId": "b84e56ed99180b7e", "scanner": "scanner-primary", "fingerprint": "c406e2b406aee610", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/superpowers/specs/r5d-charterers-claude-design-reference.html"}, "region": {"startLine": 181}}}]}, {"ruleId": "scanner-406e83f7c14b0161", "level": "warning", "message": {"text": "Insecure pattern 'domparser_html_parse' in docs/superpowers/specs/r5d-charterers-claude-design-reference.html:139"}, "properties": {"repobilityId": "192f6baad972bda3", "scanner": "scanner-primary", "fingerprint": "406e83f7c14b0161", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "domparser_html_parse"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/superpowers/specs/r5d-charterers-claude-design-reference.html"}, "region": {"startLine": 139}}}]}, {"ruleId": "scanner-40a8e3f64ab0ce1c", "level": "warning", "message": {"text": "Insecure pattern 'domparser_html_parse' in docs/superpowers/specs/r5a-landing-claude-design-reference.html:140"}, "properties": {"repobilityId": "e0f8663aba87bd53", "scanner": "scanner-primary", "fingerprint": "40a8e3f64ab0ce1c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "domparser_html_parse"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/superpowers/specs/r5a-landing-claude-design-reference.html"}, "region": {"startLine": 140}}}]}, {"ruleId": "scanner-74d9114a16b72ee2", "level": "warning", "message": {"text": "Insecure pattern 'domparser_html_parse' in docs/superpowers/specs/r5f-cargo-claude-design-reference.html:140"}, "properties": {"repobilityId": "ecf0d5f235e89c02", "scanner": "scanner-primary", "fingerprint": "74d9114a16b72ee2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "domparser_html_parse"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/superpowers/specs/r5f-cargo-claude-design-reference.html"}, "region": {"startLine": 140}}}]}, {"ruleId": "scanner-09456207165085d1", "level": "warning", "message": {"text": "Insecure pattern 'domparser_html_parse' in docs/superpowers/specs/r5g-matches-claude-design-reference.html:144"}, "properties": {"repobilityId": "61d30a0ed6c66962", "scanner": "scanner-primary", "fingerprint": "09456207165085d1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "domparser_html_parse"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/superpowers/specs/r5g-matches-claude-design-reference.html"}, "region": {"startLine": 144}}}]}, {"ruleId": "scanner-feeaf46368aec929", "level": "warning", "message": {"text": "Insecure pattern 'domparser_html_parse' in docs/superpowers/specs/r5c-match-detail-claude-design-reference.html:143"}, "properties": {"repobilityId": "eb5e9cabcf410c41", "scanner": "scanner-primary", "fingerprint": "feeaf46368aec929", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "domparser_html_parse"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/superpowers/specs/r5c-match-detail-claude-design-reference.html"}, "region": {"startLine": 143}}}]}, {"ruleId": "scanner-58a5389bebcd64c1", "level": "warning", "message": {"text": "Insecure pattern 'domparser_html_parse' in docs/design-refs/dashboard.html:140"}, "properties": {"repobilityId": "23692e93532eb1c0", "scanner": "scanner-primary", "fingerprint": "58a5389bebcd64c1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "domparser_html_parse"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/design-refs/dashboard.html"}, "region": {"startLine": 140}}}]}, {"ruleId": "scanner-2df201d41485f370", "level": "warning", "message": {"text": "Insecure pattern 'domparser_html_parse' in docs/design-refs/market.html:136"}, "properties": {"repobilityId": "7ab7d73d27d78303", "scanner": "scanner-primary", "fingerprint": "2df201d41485f370", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "domparser_html_parse"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/design-refs/market.html"}, "region": {"startLine": 136}}}]}, {"ruleId": "scanner-92b7f27cc8915363", "level": "warning", "message": {"text": "Insecure pattern 'domparser_html_parse' in docs/design-refs/landing.html:140"}, "properties": {"repobilityId": "07e897a30cfe3911", "scanner": "scanner-primary", "fingerprint": "92b7f27cc8915363", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "domparser_html_parse"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/design-refs/landing.html"}, "region": {"startLine": 140}}}]}, {"ruleId": "scanner-f4005154b09f9081", "level": "warning", "message": {"text": "Insecure pattern 'domparser_html_parse' in docs/design-refs/cargo.html:140"}, "properties": {"repobilityId": "5382186bc35a2109", "scanner": "scanner-primary", "fingerprint": "f4005154b09f9081", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "domparser_html_parse"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/design-refs/cargo.html"}, "region": {"startLine": 140}}}]}, {"ruleId": "scanner-5a7d07e2e25417dc", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/design-refs/charterers.html:181"}, "properties": {"repobilityId": "95fdffb1cc247e23", "scanner": "scanner-primary", "fingerprint": "5a7d07e2e25417dc", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/design-refs/charterers.html"}, "region": {"startLine": 181}}}]}, {"ruleId": "scanner-7788dea3b0f29a4e", "level": "warning", "message": {"text": "Insecure pattern 'domparser_html_parse' in docs/design-refs/charterers.html:139"}, "properties": {"repobilityId": "6f8a6bd9eb04ab78", "scanner": "scanner-primary", "fingerprint": "7788dea3b0f29a4e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "domparser_html_parse"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/design-refs/charterers.html"}, "region": {"startLine": 139}}}]}, {"ruleId": "scanner-a2465a86529c651a", "level": "warning", "message": {"text": "Insecure pattern 'domparser_html_parse' in docs/design-refs/match-detail.html:143"}, "properties": {"repobilityId": "5ef2c225450182af", "scanner": "scanner-primary", "fingerprint": "a2465a86529c651a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "domparser_html_parse"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/design-refs/match-detail.html"}, "region": {"startLine": 143}}}]}, {"ruleId": "scanner-297ef77d5ca712b9", "level": "warning", "message": {"text": "Insecure pattern 'domparser_html_parse' in docs/design-refs/matches.html:144"}, "properties": {"repobilityId": "5ec39795ed79e3f5", "scanner": "scanner-primary", "fingerprint": "297ef77d5ca712b9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "domparser_html_parse"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/design-refs/matches.html"}, "region": {"startLine": 144}}}]}, {"ruleId": "scanner-04106a454c152028", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/setup-gmail-oauth.ts:17"}, "properties": {"repobilityId": "194937b833387be5", "scanner": "scanner-primary", "fingerprint": "04106a454c152028", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/setup-gmail-oauth.ts"}, "region": {"startLine": 17}}}]}, {"ruleId": "scanner-725664fe7898097d", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/__tests__/knowledge-refresh.test.ts:6"}, "properties": {"repobilityId": "928920d80b554fb1", "scanner": "scanner-primary", "fingerprint": "725664fe7898097d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/__tests__/knowledge-refresh.test.ts"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-b23df436eb8ab404", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/__tests__/knowledge-status.test.ts:6"}, "properties": {"repobilityId": "91e13d151484d840", "scanner": "scanner-primary", "fingerprint": "b23df436eb8ab404", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/__tests__/knowledge-status.test.ts"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-b645ec10d35fbca5", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/__tests__/data-integrity-check.test.ts:8"}, "properties": {"repobilityId": "1b2686ff15e0fa1f", "scanner": "scanner-primary", "fingerprint": "b645ec10d35fbca5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/__tests__/data-integrity-check.test.ts"}, "region": {"startLine": 8}}}]}, {"ruleId": "scanner-96b4bb2a489a891d", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/__tests__/migrate-charterers-xss.test.ts:9"}, "properties": {"repobilityId": "c79b6d4ac1266393", "scanner": "scanner-primary", "fingerprint": "96b4bb2a489a891d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/__tests__/migrate-charterers-xss.test.ts"}, "region": {"startLine": 9}}}]}, {"ruleId": "scanner-2ed4bf5ec2333d48", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/demo-seed/seed-all.ts:5"}, "properties": {"repobilityId": "9ba8947a141241de", "scanner": "scanner-primary", "fingerprint": "2ed4bf5ec2333d48", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/demo-seed/seed-all.ts"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-bdbc9a92ebbecbf0", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/demo-seed/unfreeze-market.ts:17"}, "properties": {"repobilityId": "bdc06689b29a09ca", "scanner": "scanner-primary", "fingerprint": "bdbc9a92ebbecbf0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/demo-seed/unfreeze-market.ts"}, "region": {"startLine": 17}}}]}, {"ruleId": "scanner-43b81d995678b14e", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/demo-seed/__tests__/backfill-815-weights.test.ts:12"}, "properties": {"repobilityId": "7a19ce1acdefeccf", "scanner": "scanner-primary", "fingerprint": "43b81d995678b14e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/demo-seed/__tests__/backfill-815-weights.test.ts"}, "region": {"startLine": 12}}}]}, {"ruleId": "scanner-0944fb1b307ef00c", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/demo-seed/__tests__/backfill-payout.test.ts:11"}, "properties": {"repobilityId": "cb1b6c97dc2af82d", "scanner": "scanner-primary", "fingerprint": "0944fb1b307ef00c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/demo-seed/__tests__/backfill-payout.test.ts"}, "region": {"startLine": 11}}}]}, {"ruleId": "scanner-d2fb9dbaf2f16932", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/knowledge/cron/__tests__/refresh-sanctions.test.ts:15"}, "properties": {"repobilityId": "167a4add85df9b56", "scanner": "scanner-primary", "fingerprint": "d2fb9dbaf2f16932", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/knowledge/cron/__tests__/refresh-sanctions.test.ts"}, "region": {"startLine": 15}}}]}, {"ruleId": "scanner-ee779a265ab4990e", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in app/layout.tsx:109"}, "properties": {"repobilityId": "69d4743587f721a0", "scanner": "scanner-primary", "fingerprint": "ee779a265ab4990e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/layout.tsx"}, "region": {"startLine": 109}}}]}, {"ruleId": "scanner-cae459303830b4b7", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in app/api/admin/knowledge/refresh/route.ts:2"}, "properties": {"repobilityId": "6a47d068671c940f", "scanner": "scanner-primary", "fingerprint": "cae459303830b4b7", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/api/admin/knowledge/refresh/route.ts"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-61c0527c350c02f1", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in lib/ai-provider.ts:430"}, "properties": {"repobilityId": "6a5f9af7ce97a166", "scanner": "scanner-primary", "fingerprint": "61c0527c350c02f1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "lib/ai-provider.ts"}, "region": {"startLine": 430}}}]}, {"ruleId": "scanner-88a4d04d1587454a", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in lib/__tests__/csrf-client.test.ts:27"}, "properties": {"repobilityId": "4c4184f498049c65", "scanner": "scanner-primary", "fingerprint": "88a4d04d1587454a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "lib/__tests__/csrf-client.test.ts"}, "region": {"startLine": 27}}}]}, {"ruleId": "scanner-c0f4d36bdc819ff9", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in lib/quote-jobs/ensure-worker.ts:1"}, "properties": {"repobilityId": "d8ee9e290612d07a", "scanner": "scanner-primary", "fingerprint": "c0f4d36bdc819ff9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "lib/quote-jobs/ensure-worker.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-20facfc9e42f9ef4", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in extensions/gmail/inserts/index.ts:61"}, "properties": {"repobilityId": "2d69fdd9fe64c2e7", "scanner": "scanner-primary", "fingerprint": "20facfc9e42f9ef4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "extensions/gmail/inserts/index.ts"}, "region": {"startLine": 61}}}]}, {"ruleId": "scanner-233c82fc203dcb83", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in extensions/gmail/src/sidebar/render.ts:20"}, "properties": {"repobilityId": "cfe5a889807cc6ab", "scanner": "scanner-primary", "fingerprint": "233c82fc203dcb83", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "extensions/gmail/src/sidebar/render.ts"}, "region": {"startLine": 20}}}]}, {"ruleId": "scanner-0c19fdb54e9dac6c", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in design-system/__tests__/HelpTab.test.tsx:35"}, "properties": {"repobilityId": "83635eaba1faab35", "scanner": "scanner-primary", "fingerprint": "0c19fdb54e9dac6c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "design-system/__tests__/HelpTab.test.tsx"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-768e8f28c1850d98", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "f3c306ca3743dfa1", "scanner": "scanner-primary", "fingerprint": "768e8f28c1850d98", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/dependabot-auto-merge.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-769fdbe33092e92c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "fd4212dab4ee9136", "scanner": "scanner-primary", "fingerprint": "769fdbe33092e92c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/post-deploy-smoke.yml"}, "region": {"startLine": 71}}}]}, {"ruleId": "scanner-769fdbe33092e92c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "387b3192d8b0401b", "scanner": "scanner-primary", "fingerprint": "769fdbe33092e92c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/post-deploy-smoke.yml"}, "region": {"startLine": 111}}}]}, {"ruleId": "scanner-031830e2d34373f7", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "a40b72e331e26ac2", "scanner": "scanner-primary", "fingerprint": "031830e2d34373f7", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/auto-rebase-prs.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-bda6deb11902724f", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "52fa6a3933670e49", "scanner": "scanner-primary", "fingerprint": "bda6deb11902724f", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/auto-merge.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-cb639d9a10a47b23", "level": "note", "message": {"text": "package.json defines install-time lifecycle scripts"}, "properties": {"repobilityId": "b86179956da3a4a8", "scanner": "scanner-primary", "fingerprint": "cb639d9a10a47b23", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "npm", "install-scripts"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0a7543e2d0862080", "level": "note", "message": {"text": "Very large file: app/matches/MatchesClient.tsx (1303 lines)"}, "properties": {"repobilityId": "b5dde15fe4167206", "scanner": "scanner-primary", "fingerprint": "0a7543e2d0862080", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-9ae9805d1a451e0a", "level": "note", "message": {"text": "Very large file: lib/sailing/port-distances.ts (1461 lines)"}, "properties": {"repobilityId": "af844e8b0c6861bd", "scanner": "scanner-primary", "fingerprint": "9ae9805d1a451e0a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "4d8538b4590ca778", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-020046b8c1c2a12b", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: scripts/post-deploy-smoke/package.json"}, "properties": {"repobilityId": "7fd3c54c50c12016", "scanner": "scanner-primary", "fingerprint": "020046b8c1c2a12b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/post-deploy-smoke/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-bdcc10921c588ae1", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: extensions/gmail/package.json"}, "properties": {"repobilityId": "c2cd8f91691840b9", "scanner": "scanner-primary", "fingerprint": "bdcc10921c588ae1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "extensions/gmail/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "a40cf6e0e1d06061", "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": "3b7407e19954ad3e", "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": "c1cd7c30c9f6bd58", "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": "72b4c1ba063a28f7", "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": "fc0086931929fb65", "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": "358a118b1989adc3", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "9ef76632a8898d6c", "scanner": "scanner-primary", "fingerprint": "ea8f3013f588db25", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-8424db9c75e04ba4", "level": "none", "message": {"text": "Very short observed git history"}, "properties": {"repobilityId": "107aa075bb56b125", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-cc55229a7a3c078d", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .mcp.json"}, "properties": {"repobilityId": "51942fb3d5b8b5b4", "scanner": "scanner-primary", "fingerprint": "cc55229a7a3c078d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "mcp_config"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".mcp.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-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-e79d940de5087d80", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/analysis/decomp-07.md"}, "properties": {"repobilityId": "86271736373bee62", "scanner": "scanner-primary", "fingerprint": "e79d940de5087d80", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/analysis/decomp-07.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-92144b030d9f2009", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/analysis/research-api-contracts.md"}, "properties": {"repobilityId": "12c772448474064d", "scanner": "scanner-primary", "fingerprint": "92144b030d9f2009", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/analysis/research-api-contracts.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2e4de6be8233f098", "level": "none", "message": {"text": "Commented-code block (7 lines) in middleware.ts:201"}, "properties": {"repobilityId": "ce90a3cfb036a492", "scanner": "scanner-primary", "fingerprint": "2e4de6be8233f098", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8506a910400a4175", "level": "none", "message": {"text": "Commented-code block (5 lines) in jest.setup.ts:3"}, "properties": {"repobilityId": "707ae3c52a6bd9f5", "scanner": "scanner-primary", "fingerprint": "8506a910400a4175", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-421a6d94f512d7c4", "level": "none", "message": {"text": "Commented-code block (6 lines) in __tests__/mode-aware-content.test.ts:114"}, "properties": {"repobilityId": "ca6baa005cb6f3d6", "scanner": "scanner-primary", "fingerprint": "421a6d94f512d7c4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0474b18ff98b93aa", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 __tests__/matches-client-m3.test.tsx:12"}, "properties": {"repobilityId": "dbebfb44c0bbb444", "scanner": "scanner-primary", "fingerprint": "0474b18ff98b93aa", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-122a1c1e3b90f0e5", "level": "none", "message": {"text": "Commented-code block (5 lines) in __tests__/cargo/l5c-extras.test.ts:72"}, "properties": {"repobilityId": "230b270d03b15099", "scanner": "scanner-primary", "fingerprint": "122a1c1e3b90f0e5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-84120f55eb321801", "level": "none", "message": {"text": "Commented-code block (7 lines) in __tests__/api/clauses-security.test.ts:186"}, "properties": {"repobilityId": "f045bbd4dad85069", "scanner": "scanner-primary", "fingerprint": "84120f55eb321801", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7b389ac72d6b17e7", "level": "none", "message": {"text": "Commented-code block (5 lines) in __tests__/api/voyage/bunker-recommendation-candidates.test.ts:43"}, "properties": {"repobilityId": "4f0ea9086e97c105", "scanner": "scanner-primary", "fingerprint": "7b389ac72d6b17e7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0ec419f2156ae2f7", "level": "none", "message": {"text": "Commented-code block (7 lines) in __tests__/api/voyage/bunker-recommendation.test.ts:50"}, "properties": {"repobilityId": "d517daaca2c1cade", "scanner": "scanner-primary", "fingerprint": "0ec419f2156ae2f7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-06ebf871bfc6a072", "level": "none", "message": {"text": "Commented-code block (6 lines) in __tests__/ui/vessel-name-normalizer.test.ts:36"}, "properties": {"repobilityId": "a9edcbf7416e89ff", "scanner": "scanner-primary", "fingerprint": "06ebf871bfc6a072", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b813471e4e651229", "level": "none", "message": {"text": "Commented-code block (5 lines) in __tests__/components/match/EconomicsTab-pnl.test.tsx:250"}, "properties": {"repobilityId": "e288a2a2263c44eb", "scanner": "scanner-primary", "fingerprint": "b813471e4e651229", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8ae96cffc8292800", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 __tests__/components/market/kpi-card-bdi-resolves.test.tsx:102"}, "properties": {"repobilityId": "0f767b4482e4df8b", "scanner": "scanner-primary", "fingerprint": "8ae96cffc8292800", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-df2bddc912ae0e96", "level": "none", "message": {"text": "Commented-code block (6 lines) in __tests__/lib/parse-vessel-cbft-explicit-unit.test.ts:70"}, "properties": {"repobilityId": "5b3a4c8d87ab324e", "scanner": "scanner-primary", "fingerprint": "df2bddc912ae0e96", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e3aa52aa065302b8", "level": "none", "message": {"text": "Commented-code block (7 lines) in __tests__/lib/economics/bunker-comparison.test.ts:68"}, "properties": {"repobilityId": "d6258b1b37ea270b", "scanner": "scanner-primary", "fingerprint": "e3aa52aa065302b8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-112a2c572be6e1d8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 __tests__/lib/market/benchmark.test.ts:6"}, "properties": {"repobilityId": "2b16aecb60b75e18", "scanner": "scanner-primary", "fingerprint": "112a2c572be6e1d8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-756161120ddd9ce9", "level": "none", "message": {"text": "Commented-code block (5 lines) in __tests__/lib/matching/persist-session-matches-canonical-tce.test.ts:271"}, "properties": {"repobilityId": "f3b4004c6c12ad30", "scanner": "scanner-primary", "fingerprint": "756161120ddd9ce9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bf8c62d9ff4f46c1", "level": "none", "message": {"text": "Commented-code block (5 lines) in __tests__/lib/knowledge/eua/eua-bunker-ets-adversarial.test.ts:20"}, "properties": {"repobilityId": "e7d4bee5b4bbd1fa", "scanner": "scanner-primary", "fingerprint": "bf8c62d9ff4f46c1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9d085681d8a332d9", "level": "none", "message": {"text": "Commented-code block (5 lines) in __tests__/market/market-page.test.ts:198"}, "properties": {"repobilityId": "b4ab04fb7c0a6c3c", "scanner": "scanner-primary", "fingerprint": "9d085681d8a332d9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d1b1346d1853e5bb", "level": "none", "message": {"text": "Commented-code block (6 lines) in __tests__/regression/test_retriever_sql_injection.test.ts:1"}, "properties": {"repobilityId": "5a0889e7211c744a", "scanner": "scanner-primary", "fingerprint": "d1b1346d1853e5bb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a05be7d6b9c4ac14", "level": "none", "message": {"text": "Commented-code block (5 lines) in __tests__/regression/test_email_body_viewer_overlapping_highlights.test.tsx:196"}, "properties": {"repobilityId": "7a37b5263811f0b2", "scanner": "scanner-primary", "fingerprint": "a05be7d6b9c4ac14", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7d1360b41193339e", "level": "none", "message": {"text": "Commented-code block (7 lines) in __tests__/regression/test_chunker_entity_decode.test.ts:257"}, "properties": {"repobilityId": "d62fe5e497b94e22", "scanner": "scanner-primary", "fingerprint": "7d1360b41193339e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cc0706a4c5d6e542", "level": "none", "message": {"text": "Commented-code block (5 lines) in __tests__/regression/progonq-matching.test.ts:157"}, "properties": {"repobilityId": "9345f199b3db868f", "scanner": "scanner-primary", "fingerprint": "cc0706a4c5d6e542", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c5f1813bc88ac9c1", "level": "note", "message": {"text": "Legacy-named symbol `resultOld` in __tests__/regression/canonical-builder-adversarial.test.ts:101"}, "properties": {"repobilityId": "9087ce7c1a7ef391", "scanner": "scanner-primary", "fingerprint": "c5f1813bc88ac9c1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-6dccc150886d95b9", "level": "none", "message": {"text": "Commented-code block (5 lines) in __tests__/regression/RC4-ui-blind/spec-08-9-2-distance-ordering.test.ts:1"}, "properties": {"repobilityId": "296c2d9482006cf4", "scanner": "scanner-primary", "fingerprint": "6dccc150886d95b9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-70dd23d4b884d1cb", "level": "none", "message": {"text": "Commented-code block (5 lines) in __tests__/regression/RC3-magnitude/spec15-MED05-nan-subsectionindex.test.ts:1"}, "properties": {"repobilityId": "61daab0cbbffcac2", "scanner": "scanner-primary", "fingerprint": "70dd23d4b884d1cb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7462f94949b659a8", "level": "none", "message": {"text": "Commented-code block (5 lines) in __tests__/regression/RC3-magnitude/spec-08-D1-unbounded-topk-dos.test.ts:1"}, "properties": {"repobilityId": "60136bbeb51bfc84", "scanner": "scanner-primary", "fingerprint": "7462f94949b659a8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8fdd5193c7f989f9", "level": "none", "message": {"text": "Commented-code block (5 lines) in __tests__/regression/RC3-magnitude/spec01-HIGH02-nan-cost-fields.test.ts:1"}, "properties": {"repobilityId": "078b22d423bd2c4d", "scanner": "scanner-primary", "fingerprint": "8fdd5193c7f989f9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ff9e89413b88784c", "level": "none", "message": {"text": "Commented-code block (5 lines) in __tests__/regression/RC3-magnitude/spec01-HIGH01-negative-port-dues.test.ts:1"}, "properties": {"repobilityId": "1067b1226364ccbd", "scanner": "scanner-primary", "fingerprint": "ff9e89413b88784c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-51ff0f4cad729fb6", "level": "none", "message": {"text": "Commented-code block (5 lines) in __tests__/regression/RC3-magnitude/spec01-HIGH05-negative-vessel-dwt.test.ts:1"}, "properties": {"repobilityId": "6c9f28bf2e6d9a46", "scanner": "scanner-primary", "fingerprint": "51ff0f4cad729fb6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9a102f6c5783ebb5", "level": "none", "message": {"text": "Commented-code block (5 lines) in __tests__/regression/RC1-fail-open/spec-08-B1-special-floats-topk.test.ts:1"}, "properties": {"repobilityId": "75221603e5501a2f", "scanner": "scanner-primary", "fingerprint": "9a102f6c5783ebb5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a52d70c59a637c0e", "level": "none", "message": {"text": "Commented-code block (5 lines) in __tests__/regression/RC1-fail-open/spec15-HIGH01-null-db.test.ts:1"}, "properties": {"repobilityId": "7bfcc7768701b3cf", "scanner": "scanner-primary", "fingerprint": "a52d70c59a637c0e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3b8167c2380312cf", "level": "none", "message": {"text": "Commented-code block (5 lines) in __tests__/regression/RC1-fail-open/spec-08-A1-empty-tablename.test.ts:1"}, "properties": {"repobilityId": "664b8c7b30b8beb6", "scanner": "scanner-primary", "fingerprint": "3b8167c2380312cf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1ad51bd8a1878da2", "level": "none", "message": {"text": "Commented-code block (5 lines) in __tests__/regression/RC1-fail-open/spec12-HIGH02-file-protocol-baseurl.test.ts:1"}, "properties": {"repobilityId": "cbe701b417fefc45", "scanner": "scanner-primary", "fingerprint": "1ad51bd8a1878da2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cbc16a8add299f1f", "level": "none", "message": {"text": "Commented-code block (5 lines) in __tests__/regression/RC1-fail-open/spec12-CRIT04-javascript-protocol-baseurl.test.ts:1"}, "properties": {"repobilityId": "998b361476d9e6ad", "scanner": "scanner-primary", "fingerprint": "cbc16a8add299f1f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0e73292bae5c9344", "level": "none", "message": {"text": "Commented-code block (5 lines) in __tests__/regression/RC1-fail-open/spec15-MED01-empty-tablename.test.ts:1"}, "properties": {"repobilityId": "39bcbfa506b79654", "scanner": "scanner-primary", "fingerprint": "0e73292bae5c9344", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3e5d1bf88260f050", "level": "none", "message": {"text": "Commented-code block (5 lines) in __tests__/regression/RC1-fail-open/spec12-HIGH01-whitespace-only-baseurl.test.ts:1"}, "properties": {"repobilityId": "447125da13333de7", "scanner": "scanner-primary", "fingerprint": "3e5d1bf88260f050", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c6f6afa8d62f24a5", "level": "none", "message": {"text": "Commented-code block (5 lines) in __tests__/regression/RC1-fail-open/spec12-HIGH03-data-protocol-baseurl.test.ts:1"}, "properties": {"repobilityId": "3b109c3887ddb0d3", "scanner": "scanner-primary", "fingerprint": "c6f6afa8d62f24a5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cf1b85682cc1dddc", "level": "none", "message": {"text": "Commented-code block (5 lines) in __tests__/regression/RC1-fail-open/spec12-HIGH04-path-traversal-in-href.test.ts:1"}, "properties": {"repobilityId": "aae1311465de7b33", "scanner": "scanner-primary", "fingerprint": "cf1b85682cc1dddc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-65967a08e9e73237", "level": "none", "message": {"text": "Commented-code block (5 lines) in __tests__/regression/RC1-fail-open/spec12-HIGH09-regex-no-html-links.test.ts:1"}, "properties": {"repobilityId": "25be4ed0a872145e", "scanner": "scanner-primary", "fingerprint": "65967a08e9e73237", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7d7ee40796f1616e", "level": "none", "message": {"text": "Commented-code block (5 lines) in __tests__/regression/RC6-security-blacklist/spec15-CRIT01-sql-injection-tablename.test.ts:1"}, "properties": {"repobilityId": "cd1c2f164770428f", "scanner": "scanner-primary", "fingerprint": "7d7ee40796f1616e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0856e32e00ccbc8d", "level": "none", "message": {"text": "Commented-code block (5 lines) in __tests__/regression/RC6-security-blacklist/spec15-CRIT02-sql-injection-ftstable.test.ts:1"}, "properties": {"repobilityId": "10ae21be7961ee4f", "scanner": "scanner-primary", "fingerprint": "0856e32e00ccbc8d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-67e28e3d3c6a1c9f", "level": "none", "message": {"text": "Commented-code block (5 lines) in __tests__/regression/RC6-security-blacklist/spec12-CRIT02-javascript-url-in-link.test.ts:1"}, "properties": {"repobilityId": "0523ca44012438f0", "scanner": "scanner-primary", "fingerprint": "67e28e3d3c6a1c9f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-21ef1bac82d22fc8", "level": "none", "message": {"text": "Commented-code block (5 lines) in __tests__/regression/RC6-security-blacklist/spec12-HIGH10-xss-vector-completeness.test.ts:1"}, "properties": {"repobilityId": "4d0961772493664f", "scanner": "scanner-primary", "fingerprint": "21ef1bac82d22fc8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5c7e23dbeed9b0c1", "level": "none", "message": {"text": "Commented-code block (5 lines) in __tests__/regression/RC6-security-blacklist/spec12-CRIT03-data-scheme-in-img.test.ts:1"}, "properties": {"repobilityId": "a7caa6a48158b84d", "scanner": "scanner-primary", "fingerprint": "5c7e23dbeed9b0c1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-83e65a1f76060b89", "level": "none", "message": {"text": "Commented-code block (5 lines) in __tests__/regression/RC6-security-blacklist/spec12-CRIT01-nested-script-bypass.test.ts:1"}, "properties": {"repobilityId": "0d8ef90cd5c5a035", "scanner": "scanner-primary", "fingerprint": "83e65a1f76060b89", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9d3ea791aed7b051", "level": "none", "message": {"text": "Commented-code block (5 lines) in __tests__/regression/RC6-security-blacklist/spec12-HIGH05-iframe-tag.test.ts:1"}, "properties": {"repobilityId": "f23eb2b051410bb1", "scanner": "scanner-primary", "fingerprint": "9d3ea791aed7b051", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b243b1bcb595ad07", "level": "none", "message": {"text": "Commented-code block (5 lines) in __tests__/regression/RC6-security-blacklist/spec-08-F1-sql-injection-tablename.test.ts:1"}, "properties": {"repobilityId": "02226f30b106fe4a", "scanner": "scanner-primary", "fingerprint": "b243b1bcb595ad07", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c254d2453fe954b4", "level": "none", "message": {"text": "Commented-code block (5 lines) in __tests__/regression/RC5-no-fallback/spec12-HIGH07-massive-toc-dos.test.ts:1"}, "properties": {"repobilityId": "481569067f938333", "scanner": "scanner-primary", "fingerprint": "c254d2453fe954b4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-088ce0843e3cd2f3", "level": "none", "message": {"text": "Commented-code block (5 lines) in __tests__/regression/RC5-no-fallback/spec15-HIGH04-vertex-rate-limit.test.ts:1"}, "properties": {"repobilityId": "4d3403ba813a6188", "scanner": "scanner-primary", "fingerprint": "088ce0843e3cd2f3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8746378421e114dc", "level": "none", "message": {"text": "Commented-code block (5 lines) in __tests__/regression/RC5-no-fallback/spec12-HIGH06-large-response-dos.test.ts:1"}, "properties": {"repobilityId": "780c7ecc42644630", "scanner": "scanner-primary", "fingerprint": "8746378421e114dc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9009a2b94c3274e6", "level": "none", "message": {"text": "Commented-code block (5 lines) in __tests__/sailing/l5c-expansion.test.ts:41"}, "properties": {"repobilityId": "67dc762871f7eae5", "scanner": "scanner-primary", "fingerprint": "9009a2b94c3274e6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-300a3db0ab97b0dc", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/unit/port-da/seed-values.test.ts:42"}, "properties": {"repobilityId": "4e904f87ffe0b7d3", "scanner": "scanner-primary", "fingerprint": "300a3db0ab97b0dc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-885f3db71185ea36", "level": "none", "message": {"text": "Commented-code block (7 lines) in tests/regression/eu_ets_coverage_adversarial.test.ts:211"}, "properties": {"repobilityId": "d1d4253d1ece7a2c", "scanner": "scanner-primary", "fingerprint": "885f3db71185ea36", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d0023e554621ee21", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/regression/ballast-size-cap-adversarial.test.ts:52"}, "properties": {"repobilityId": "50e2bda20f5acffd", "scanner": "scanner-primary", "fingerprint": "d0023e554621ee21", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-69e75c2745ad0e6a", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/regression/test_economics_confidence_adv.test.ts:10"}, "properties": {"repobilityId": "337fae7d18f3af88", "scanner": "scanner-primary", "fingerprint": "69e75c2745ad0e6a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ba2e3d0a93d237de", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/regression/test_economics_edge_cases.test.ts:7"}, "properties": {"repobilityId": "53e7b262c97ebc0c", "scanner": "scanner-primary", "fingerprint": "ba2e3d0a93d237de", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-db5a4570799e5bde", "level": "none", "message": {"text": "Commented-code block (8 lines) in tests/regression/test_validator_substring_2026_05_07.test.ts:69"}, "properties": {"repobilityId": "0de83e02761b9ad4", "scanner": "scanner-primary", "fingerprint": "db5a4570799e5bde", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6e1ee1042a1a69c1", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/regression/test_email_body_viewer_overlapping_highlights.test.tsx:196"}, "properties": {"repobilityId": "61c4a6c837ff3277", "scanner": "scanner-primary", "fingerprint": "6e1ee1042a1a69c1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-da14696a8409b74f", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/regression/oilmonster-adversarial.test.ts:79"}, "properties": {"repobilityId": "8e6feebaf69aaf19", "scanner": "scanner-primary", "fingerprint": "da14696a8409b74f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-140c783cb31701b0", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/regression/progonq-matching.test.ts:157"}, "properties": {"repobilityId": "0d6610fadb3078ef", "scanner": "scanner-primary", "fingerprint": "140c783cb31701b0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7fcead391373be30", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/regression/RC4-ui-blind/gamma-07-CONF-01-null-vs-undefined-despatch-rate.test.ts:1"}, "properties": {"repobilityId": "5d514b0d50eea097", "scanner": "scanner-primary", "fingerprint": "7fcead391373be30", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-98623853e00a703e", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/regression/RC4-ui-blind/gamma-06-9-01-api-contract.test.ts:1"}, "properties": {"repobilityId": "bcb8b6e3140efe06", "scanner": "scanner-primary", "fingerprint": "98623853e00a703e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cc863c8de6941680", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/regression/RC3-magnitude/gamma-07-D-02-large-negative-net-hours.test.ts:1"}, "properties": {"repobilityId": "5ced4ce2610aad95", "scanner": "scanner-primary", "fingerprint": "cc863c8de6941680", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-21d612d6ca4c335a", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/regression/RC3-magnitude/gamma-07-B-06-neg-infinity-despatch-rate.test.ts:1"}, "properties": {"repobilityId": "71b56c5b7cd2cc2a", "scanner": "scanner-primary", "fingerprint": "21d612d6ca4c335a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cd153f1b66addea1", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/regression/RC3-magnitude/gamma-06-B-02-infinity-time-delta.test.ts:1"}, "properties": {"repobilityId": "fb4967834bb21357", "scanner": "scanner-primary", "fingerprint": "cd153f1b66addea1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fe568478f0604bf4", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/regression/RC3-magnitude/spec01-HIGH02-nan-cost-fields.test.ts:1"}, "properties": {"repobilityId": "1cf5405b99edae09", "scanner": "scanner-primary", "fingerprint": "fe568478f0604bf4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dfe78b2038576f97", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/regression/RC3-magnitude/gamma-06-B-01-nan-weather-delay.test.ts:1"}, "properties": {"repobilityId": "bbab33712ccbf78c", "scanner": "scanner-primary", "fingerprint": "dfe78b2038576f97", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-abf88b88e1ebf334", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/regression/RC3-magnitude/spec01-HIGH01-negative-port-dues.test.ts:1"}, "properties": {"repobilityId": "5d4b5d4ccd532d00", "scanner": "scanner-primary", "fingerprint": "abf88b88e1ebf334", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3e45aa2495be461b", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/regression/RC3-magnitude/spec01-HIGH05-negative-vessel-dwt.test.ts:1"}, "properties": {"repobilityId": "119b0de7808df6d0", "scanner": "scanner-primary", "fingerprint": "3e45aa2495be461b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2c3e6428f252d9bf", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/regression/RC1-fail-open/gamma-06-F-02-order-classification.test.ts:1"}, "properties": {"repobilityId": "a53dd3d9d825dae7", "scanner": "scanner-primary", "fingerprint": "2c3e6428f252d9bf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b4e88dc1a893b2e1", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/regression/RC1-fail-open/gamma-06-F-01-substring-classification.test.ts:1"}, "properties": {"repobilityId": "e385ba3c9d69ffd2", "scanner": "scanner-primary", "fingerprint": "b4e88dc1a893b2e1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c7dc55c39f7b9c28", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/regression/RC1-fail-open/gamma-07-C-03-negative-allowed-laytime.test.ts:1"}, "properties": {"repobilityId": "7437ddb1421238df", "scanner": "scanner-primary", "fingerprint": "c7dc55c39f7b9c28", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c6c844ef2de9ebdc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/knowledge-unlocode-seed.ts:218"}, "properties": {"repobilityId": "8e84716f52c75d44", "scanner": "scanner-primary", "fingerprint": "c6c844ef2de9ebdc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f1bf3b32c7c87498", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/seed-distances.py:121"}, "properties": {"repobilityId": "3cffe405b62a6ccf", "scanner": "scanner-primary", "fingerprint": "f1bf3b32c7c87498", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-891ac9ce8527ed1e", "level": "note", "message": {"text": "Legacy-named symbol `gmail_v1` in scripts/import-gmail-emails.ts:24"}, "properties": {"repobilityId": "64954ca318ee47cd", "scanner": "scanner-primary", "fingerprint": "891ac9ce8527ed1e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-be7b08ab163c9cc3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/seed-vertex-datastores.ts:88"}, "properties": {"repobilityId": "8cb7a008c1f8fdcc", "scanner": "scanner-primary", "fingerprint": "be7b08ab163c9cc3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c298860ecae5a6b5", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/__tests__/build-corpus.test.ts:11"}, "properties": {"repobilityId": "40a3af6bc88e5a41", "scanner": "scanner-primary", "fingerprint": "c298860ecae5a6b5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d11582c1ac456c7e", "level": "note", "message": {"text": "Legacy-named symbol `gmail_v1` in scripts/__tests__/import-gmail-emails.test.ts:81"}, "properties": {"repobilityId": "4a058fb8e9eae464", "scanner": "scanner-primary", "fingerprint": "d11582c1ac456c7e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-47625058a87d5d62", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/demo-seed/seed-all.ts:98"}, "properties": {"repobilityId": "8c89bbd1fce64538", "scanner": "scanner-primary", "fingerprint": "47625058a87d5d62", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ba83ad99ea02880e", "level": "none", "message": {"text": "Commented-code block (8 lines) in scripts/demo-seed/regenerate-matches.ts:576"}, "properties": {"repobilityId": "d86a146d246e979c", "scanner": "scanner-primary", "fingerprint": "ba83ad99ea02880e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f65f3e11e304b724", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/demo-seed/real-matches.ts:376"}, "properties": {"repobilityId": "d372047d6f2e511f", "scanner": "scanner-primary", "fingerprint": "f65f3e11e304b724", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-abc6d6b0b882e068", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/demo-seed/build.ts:29"}, "properties": {"repobilityId": "2724630ad425a725", "scanner": "scanner-primary", "fingerprint": "abc6d6b0b882e068", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5b2740dde47af026", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/demo-seed/preview-ranking-shift.ts:223"}, "properties": {"repobilityId": "829ec58faeead242", "scanner": "scanner-primary", "fingerprint": "5b2740dde47af026", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b8cde428dcadda1f", "level": "note", "message": {"text": "Legacy-named symbol `setupSchemaLegacy` in scripts/demo-seed/__tests__/real-matches-item-index.test.ts:45"}, "properties": {"repobilityId": "edccf22fa1a0d023", "scanner": "scanner-primary", "fingerprint": "b8cde428dcadda1f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-65bd01d4d22b1828", "level": "note", "message": {"text": "Legacy-named symbol `totalOld` in scripts/diag/war-risk-shift-table.ts:158"}, "properties": {"repobilityId": "36d2b96e77513e0d", "scanner": "scanner-primary", "fingerprint": "65bd01d4d22b1828", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-727536d509fb50be", "level": "none", "message": {"text": "Commented-code block (8 lines) in scripts/research/top-matches-broker-view.ts:160"}, "properties": {"repobilityId": "b1dee0dfa3180446", "scanner": "scanner-primary", "fingerprint": "727536d509fb50be", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c8a7ef1b7a006901", "level": "none", "message": {"text": "Commented-code block (10 lines) in scripts/post-deploy-smoke/smoke.mjs:5"}, "properties": {"repobilityId": "3894549afe57b34f", "scanner": "scanner-primary", "fingerprint": "c8a7ef1b7a006901", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d4b53c2e752011b2", "level": "note", "message": {"text": "Legacy-named symbol `gmail_v1` in scripts/lib/oauth-shared.ts:7"}, "properties": {"repobilityId": "4ef25164ebe84ab7", "scanner": "scanner-primary", "fingerprint": "d4b53c2e752011b2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-ff90c576280e4d29", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/lib/unlocode-parse.ts:52"}, "properties": {"repobilityId": "4c7d519fa9eb6774", "scanner": "scanner-primary", "fingerprint": "ff90c576280e4d29", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-735c62e89a6f3164", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/lib/__tests__/unlocode-parse.test.ts:62"}, "properties": {"repobilityId": "86e2391fe8ca7ff6", "scanner": "scanner-primary", "fingerprint": "735c62e89a6f3164", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b5c7aa712deba2da", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/l5c/merge-pairs.ts:89"}, "properties": {"repobilityId": "44113f989cd20166", "scanner": "scanner-primary", "fingerprint": "b5c7aa712deba2da", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5ba0466ae048d063", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/eval/run-progonq-match.ts:198"}, "properties": {"repobilityId": "82f352f032433dd4", "scanner": "scanner-primary", "fingerprint": "5ba0466ae048d063", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-152beabf36996508", "level": "none", "message": {"text": "Commented-code block (8 lines) in scripts/progonq/judge-parse-cargo.ts:90"}, "properties": {"repobilityId": "a93346adc2b060b5", "scanner": "scanner-primary", "fingerprint": "152beabf36996508", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-365532c67b4dcd06", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/wave-gamma-bake-off/judge.ts:268"}, "properties": {"repobilityId": "e1f17bbdd06ac790", "scanner": "scanner-primary", "fingerprint": "365532c67b4dcd06", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-988606b12526bbc9", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/quote-workshop/worker.ts:47"}, "properties": {"repobilityId": "e6531d40a1611cf4", "scanner": "scanner-primary", "fingerprint": "988606b12526bbc9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6ad23dad87055593", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/ports/ingest-wpi-cranes.ts:173"}, "properties": {"repobilityId": "8e2f6e228437dcf2", "scanner": "scanner-primary", "fingerprint": "6ad23dad87055593", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a3336997ab52fd31", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/knowledge/sources/fx-rates.ts:28"}, "properties": {"repobilityId": "82969edce97c3b19", "scanner": "scanner-primary", "fingerprint": "a3336997ab52fd31", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3bc2dbf5ab9b32fe", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/clickable-field.tsx:21"}, "properties": {"repobilityId": "cd33d24017f477cc", "scanner": "scanner-primary", "fingerprint": "3bc2dbf5ab9b32fe", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c2f68d31aa53b37e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/economics/RouteCompareModal.tsx:84"}, "properties": {"repobilityId": "4162e0a242137342", "scanner": "scanner-primary", "fingerprint": "c2f68d31aa53b37e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-412f1988fc451fbb", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/__tests__/email-body-viewer.overlapping-highlights.test.tsx:196"}, "properties": {"repobilityId": "22da0db92bcce02c", "scanner": "scanner-primary", "fingerprint": "412f1988fc451fbb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-92e343949fadc70c", "level": "none", "message": {"text": "Commented-code block (8 lines) in components/match/EconomicsTab.tsx:169"}, "properties": {"repobilityId": "a964e7a65c90158a", "scanner": "scanner-primary", "fingerprint": "92e343949fadc70c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-19b6e35b2cbc81e0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/match/EconomicsTab.tsx:145"}, "properties": {"repobilityId": "e66db4fe5ae95e96", "scanner": "scanner-primary", "fingerprint": "19b6e35b2cbc81e0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-26e6f76b60c25a87", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/match/MatchWorksheet.tsx:99"}, "properties": {"repobilityId": "a1c2ca222a7d05ab", "scanner": "scanner-primary", "fingerprint": "26e6f76b60c25a87", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-21e3575904da7ea6", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/match/__tests__/ExplainDealModal.flag.test.tsx:53"}, "properties": {"repobilityId": "9ac6cca01110a044", "scanner": "scanner-primary", "fingerprint": "21e3575904da7ea6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ec090b5392b12f40", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/matches/MatchesClient.tsx:167"}, "properties": {"repobilityId": "7e4901be8aedf84d", "scanner": "scanner-primary", "fingerprint": "ec090b5392b12f40", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d15dc0334ff688de", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/match/[id]/page.tsx:70"}, "properties": {"repobilityId": "16ae6aa312127624", "scanner": "scanner-primary", "fingerprint": "d15dc0334ff688de", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-999d995c9bc7a45d", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/cargo/page.tsx:70"}, "properties": {"repobilityId": "55b65fdeec4fd84e", "scanner": "scanner-primary", "fingerprint": "999d995c9bc7a45d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3af52979b12d20ea", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/laytime/page.tsx:68"}, "properties": {"repobilityId": "d5b6ac4bd458a8ec", "scanner": "scanner-primary", "fingerprint": "3af52979b12d20ea", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4f844e05b28cab91", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/integrations/pipedrive/oauth/route.ts:50"}, "properties": {"repobilityId": "94e28f9622af7b1b", "scanner": "scanner-primary", "fingerprint": "4f844e05b28cab91", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-747b44c6458ee442", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/integrations/pipedrive/oauth/route.ts:99"}, "properties": {"repobilityId": "5e9a147c33094e7c", "scanner": "scanner-primary", "fingerprint": "747b44c6458ee442", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8843bb06836f9bea", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/ai/__tests__/match-lookup.test.ts:87"}, "properties": {"repobilityId": "498153c1c33f28cf", "scanner": "scanner-primary", "fingerprint": "8843bb06836f9bea", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a5f18dc82c9663e7", "level": "none", "message": {"text": "Commented-code block (11 lines) in app/api/ai/parse-cargo/route.ts:151"}, "properties": {"repobilityId": "0270ae268ace8c2d", "scanner": "scanner-primary", "fingerprint": "a5f18dc82c9663e7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-56e0a14c6cc91d96", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/ai/generate-route-map/route.ts:215"}, "properties": {"repobilityId": "9d7b94216931cb59", "scanner": "scanner-primary", "fingerprint": "56e0a14c6cc91d96", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fd502bb87777b95c", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/admin/knowledge/refresh/route.ts:88"}, "properties": {"repobilityId": "3c93c911ad6bf3d4", "scanner": "scanner-primary", "fingerprint": "fd502bb87777b95c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5c13aab039a42105", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/vessel/[imo]/__tests__/route.test.ts:26"}, "properties": {"repobilityId": "34f227b1e045a51e", "scanner": "scanner-primary", "fingerprint": "5c13aab039a42105", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fe13179e46a83d59", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/market/page.tsx:144"}, "properties": {"repobilityId": "9f55e5b59a943ed6", "scanner": "scanner-primary", "fingerprint": "fe13179e46a83d59", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7104713295a7c5c3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/charterers/page.tsx:176"}, "properties": {"repobilityId": "f24e4e1f9d838918", "scanner": "scanner-primary", "fingerprint": "7104713295a7c5c3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fc63878e1d61618d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/csrf-client.ts:58"}, "properties": {"repobilityId": "85285d2292000e54", "scanner": "scanner-primary", "fingerprint": "fc63878e1d61618d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c2928622ea2c22ef", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/ai-provider.ts:432"}, "properties": {"repobilityId": "698a29a736de8820", "scanner": "scanner-primary", "fingerprint": "c2928622ea2c22ef", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6511e562c7c46874", "level": "note", "message": {"text": "Legacy-named symbol `gmail_v1` in lib/google.ts:1"}, "properties": {"repobilityId": "f5e619d6e3f31339", "scanner": "scanner-primary", "fingerprint": "6511e562c7c46874", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-65a6747434aba6b5", "level": "none", "message": {"text": "Commented-code block (8 lines) in lib/economics/route-decision.ts:265"}, "properties": {"repobilityId": "933db8423258b4f2", "scanner": "scanner-primary", "fingerprint": "65a6747434aba6b5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5624c737dc0568d5", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/__tests__/laytime-calculator.test.ts:391"}, "properties": {"repobilityId": "149e919c8cbfd85f", "scanner": "scanner-primary", "fingerprint": "5624c737dc0568d5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a391bcb7a764324a", "level": "none", "message": {"text": "Commented-code block (8 lines) in lib/__tests__/matching/match-realism-buckets.test.ts:179"}, "properties": {"repobilityId": "06bc37558c9087bc", "scanner": "scanner-primary", "fingerprint": "a391bcb7a764324a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2128112441ab567d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/ais/datalastic.ts:67"}, "properties": {"repobilityId": "f242838a54ca9f95", "scanner": "scanner-primary", "fingerprint": "2128112441ab567d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c7a376e55f17d80d", "level": "none", "message": {"text": "Commented-code block (6 lines) in lib/parsing/geared-fallback.ts:160"}, "properties": {"repobilityId": "b443908e018208e7", "scanner": "scanner-primary", "fingerprint": "c7a376e55f17d80d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ac0134ff3070cc7b", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/parsing/parse-vessel-helpers.ts:132"}, "properties": {"repobilityId": "0189bb80f20fd7cd", "scanner": "scanner-primary", "fingerprint": "ac0134ff3070cc7b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b9f8479e4c982633", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/quote-jobs/__tests__/use-quote-job.test.tsx:185"}, "properties": {"repobilityId": "2820b80c73a13475", "scanner": "scanner-primary", "fingerprint": "b9f8479e4c982633", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-31d75c8a05037b6e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/quote-jobs/__tests__/use-quote-job.test.tsx:186"}, "properties": {"repobilityId": "670696efaf511948", "scanner": "scanner-primary", "fingerprint": "31d75c8a05037b6e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f0c85778a57e1f94", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/voice/whisper-transcribe.ts:40"}, "properties": {"repobilityId": "9f9d780bcbeddc2e", "scanner": "scanner-primary", "fingerprint": "f0c85778a57e1f94", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cc896b4eda98d891", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/whatsapp/image-ocr.ts:20"}, "properties": {"repobilityId": "35320777d36b5b60", "scanner": "scanner-primary", "fingerprint": "cc896b4eda98d891", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c4c24f8f7c5ab0b8", "level": "none", "message": {"text": "Commented-code block (7 lines) in lib/demo-mode/hydrate-demo-session.ts:112"}, "properties": {"repobilityId": "d8119279eed2d76e", "scanner": "scanner-primary", "fingerprint": "c4c24f8f7c5ab0b8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dba91f38c27c76b9", "level": "none", "message": {"text": "Commented-code block (6 lines) in lib/port-da/__tests__/match-da.test.ts:7"}, "properties": {"repobilityId": "e2c310ff641536fc", "scanner": "scanner-primary", "fingerprint": "dba91f38c27c76b9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f55cab5e3fd333af", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/migrations/021-port-da-large-vessels.ts:7"}, "properties": {"repobilityId": "f87ad52ea1236ef4", "scanner": "scanner-primary", "fingerprint": "f55cab5e3fd333af", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-861492d45622dbb7", "level": "none", "message": {"text": "Commented-code block (6 lines) in lib/matching/tce-calculator.ts:200"}, "properties": {"repobilityId": "2128372f5f0d1c1d", "scanner": "scanner-primary", "fingerprint": "861492d45622dbb7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dd8d042a9812a54c", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/matching/parse-vessel-fields.ts:12"}, "properties": {"repobilityId": "7e82fd5c7e9f7364", "scanner": "scanner-primary", "fingerprint": "dd8d042a9812a54c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-50f3bf215b61f95a", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/matching/persist-session-matches.ts:100"}, "properties": {"repobilityId": "4a58c822ad2abaa0", "scanner": "scanner-primary", "fingerprint": "50f3bf215b61f95a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0f28963aabfdfe54", "level": "none", "message": {"text": "Commented-code block (6 lines) in lib/matching/pair-analyzer.ts:175"}, "properties": {"repobilityId": "5a79ab9170eee4fe", "scanner": "scanner-primary", "fingerprint": "0f28963aabfdfe54", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-eec9f1320dc8fdeb", "level": "none", "message": {"text": "Commented-code block (11 lines) in lib/matching/compute-matches.ts:65"}, "properties": {"repobilityId": "6972c1a45fdf7f45", "scanner": "scanner-primary", "fingerprint": "eec9f1320dc8fdeb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ef33300af4e207c2", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/matching/freight-resolver.ts:66"}, "properties": {"repobilityId": "7610a613ee3e2a25", "scanner": "scanner-primary", "fingerprint": "ef33300af4e207c2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6378d5bca7a3c589", "level": "none", "message": {"text": "Commented-code block (7 lines) in lib/matching/session-buckets.ts:55"}, "properties": {"repobilityId": "70408033bbfee5e8", "scanner": "scanner-primary", "fingerprint": "6378d5bca7a3c589", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a01183566e6a0212", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/matching/__tests__/tce-calculator.test.ts:319"}, "properties": {"repobilityId": "94ac3c3c41134d97", "scanner": "scanner-primary", "fingerprint": "a01183566e6a0212", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3f25b857a45a3cec", "level": "none", "message": {"text": "Commented-code block (7 lines) in lib/matching/__tests__/compute-matches-m3-fields.test.ts:266"}, "properties": {"repobilityId": "d2b2be7965c0991f", "scanner": "scanner-primary", "fingerprint": "3f25b857a45a3cec", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3490bff91268c009", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/matching/__tests__/freight-resolver.test.ts:89"}, "properties": {"repobilityId": "038fc17630e015df", "scanner": "scanner-primary", "fingerprint": "3490bff91268c009", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-72dc61ca6a5433e4", "level": "note", "message": {"text": "Legacy-named symbol `econLegacy` in lib/matching/__tests__/tce-calculator-warrisk-ballast.test.ts:45"}, "properties": {"repobilityId": "5ae588706f82944f", "scanner": "scanner-primary", "fingerprint": "72dc61ca6a5433e4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-fe38a25040be8cad", "level": "none", "message": {"text": "Commented-code block (10 lines) in lib/matching/__tests__/golden-set/golden-set.test.ts:9"}, "properties": {"repobilityId": "975296412048a5e6", "scanner": "scanner-primary", "fingerprint": "fe38a25040be8cad", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e2ea02b56b1f2b6e", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/sailing/fit-breakdown.ts:46"}, "properties": {"repobilityId": "e9c20da52e4c22ef", "scanner": "scanner-primary", "fingerprint": "e2ea02b56b1f2b6e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7f18664242bf156e", "level": "note", "message": {"text": "Legacy-named symbol `daysOld` in lib/sailing/date-sanity.ts:61"}, "properties": {"repobilityId": "0455b180fefd9468", "scanner": "scanner-primary", "fingerprint": "7f18664242bf156e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-6335c7e5cbc40ce7", "level": "none", "message": {"text": "Commented-code block (13 lines) in lib/sailing/imsbc-check.ts:272"}, "properties": {"repobilityId": "7e7ce4ba7bcfebae", "scanner": "scanner-primary", "fingerprint": "6335c7e5cbc40ce7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5edd39a6b3ed57a4", "level": "none", "message": {"text": "Commented-code block (6 lines) in lib/sailing/date-parsing.ts:303"}, "properties": {"repobilityId": "7e6363eecb74f08c", "scanner": "scanner-primary", "fingerprint": "5edd39a6b3ed57a4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-23370c3fcd35a886", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/sailing/match-filters.ts:104"}, "properties": {"repobilityId": "8fb02b7c6f56fd7e", "scanner": "scanner-primary", "fingerprint": "23370c3fcd35a886", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-916529bde8eb45c2", "level": "none", "message": {"text": "Commented-code block (9 lines) in lib/sailing/match-scoring.ts:199"}, "properties": {"repobilityId": "eac64029aa015d20", "scanner": "scanner-primary", "fingerprint": "916529bde8eb45c2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ebf1333e5613a129", "level": "none", "message": {"text": "Commented-code block (6 lines) in lib/sailing/readiness-gap.ts:119"}, "properties": {"repobilityId": "e47c212b6f3b38a4", "scanner": "scanner-primary", "fingerprint": "ebf1333e5613a129", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f4d8e515ab50842d", "level": "none", "message": {"text": "Commented-code block (6 lines) in lib/sailing/port-distances.ts:1014"}, "properties": {"repobilityId": "a4f040270b125a34", "scanner": "scanner-primary", "fingerprint": "f4d8e515ab50842d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4f2d27e01b305215", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/sailing/__tests__/score-cranes-discharge.test.ts:3"}, "properties": {"repobilityId": "3e6b628034075e1f", "scanner": "scanner-primary", "fingerprint": "4f2d27e01b305215", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ae93d08aa49a4ff1", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/sailing/__tests__/score-cranes-rationale.test.ts:3"}, "properties": {"repobilityId": "3e9aacb9a6c9096c", "scanner": "scanner-primary", "fingerprint": "ae93d08aa49a4ff1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8a8434970b291bba", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/sailing/__tests__/readiness-gap.test.ts:269"}, "properties": {"repobilityId": "a5cae235cccdb11c", "scanner": "scanner-primary", "fingerprint": "8a8434970b291bba", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-202384b801387248", "level": "note", "message": {"text": "Legacy-named symbol `daysOld` in lib/sailing/__tests__/date-sanity.test.ts:95"}, "properties": {"repobilityId": "0307c2d693f2d870", "scanner": "scanner-primary", "fingerprint": "202384b801387248", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-af28942d9ea13445", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/sailing/__tests__/port-distances.test.ts:6"}, "properties": {"repobilityId": "01591eb722461c0b", "scanner": "scanner-primary", "fingerprint": "af28942d9ea13445", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f0886e38ececa5c6", "level": "note", "message": {"text": "Legacy-named symbol `vesselOld` in lib/sailing/__tests__/fit-breakdown.test.ts:522"}, "properties": {"repobilityId": "c1d2b226901545ab", "scanner": "scanner-primary", "fingerprint": "f0886e38ececa5c6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-4c33d9c0cbebe669", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/sailing/__tests__/match-filters.test.ts:566"}, "properties": {"repobilityId": "2e412eaed9b74548", "scanner": "scanner-primary", "fingerprint": "4c33d9c0cbebe669", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1425912bc5e08031", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/sailing/__tests__/match-gates-adversarial.test.ts:139"}, "properties": {"repobilityId": "dd2c7eec03447dd9", "scanner": "scanner-primary", "fingerprint": "1425912bc5e08031", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-82af19e3f94bb763", "level": "none", "message": {"text": "Commented-code block (6 lines) in lib/sailing/__tests__/match-scoring.test.ts:690"}, "properties": {"repobilityId": "eba0caad7a19a700", "scanner": "scanner-primary", "fingerprint": "82af19e3f94bb763", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e43f514d089a2982", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/sailing/__tests__/port-distances-searoute-json.test.ts:34"}, "properties": {"repobilityId": "7960a81fa9af2c36", "scanner": "scanner-primary", "fingerprint": "e43f514d089a2982", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-674ed7d3546b0079", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/knowledge/sources/imsbc/scraper.ts:167"}, "properties": {"repobilityId": "2109ce21a59cd6d6", "scanner": "scanner-primary", "fingerprint": "674ed7d3546b0079", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2efd143242a72fb9", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/knowledge/sources/imsbc/chunker.ts:55"}, "properties": {"repobilityId": "05c26e90b2cb6608", "scanner": "scanner-primary", "fingerprint": "2efd143242a72fb9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-adb38f863ee0a4d2", "level": "none", "message": {"text": "Commented-code block (8 lines) in lib/knowledge/embeddings/pipeline.ts:121"}, "properties": {"repobilityId": "51d97207a8d07cd2", "scanner": "scanner-primary", "fingerprint": "adb38f863ee0a4d2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-620f1a855aa64396", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/knowledge/bunker/shipandbunker-adapter.ts:79"}, "properties": {"repobilityId": "f1797f8b771c7a48", "scanner": "scanner-primary", "fingerprint": "620f1a855aa64396", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-570a9f2a048bdfed", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/knowledge/sanctions/eu-adapter.ts:132"}, "properties": {"repobilityId": "959bfb1467099097", "scanner": "scanner-primary", "fingerprint": "570a9f2a048bdfed", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0b137e5e0898e54d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/knowledge/sanctions/ofac-adapter.ts:176"}, "properties": {"repobilityId": "1e1c32560f927d0f", "scanner": "scanner-primary", "fingerprint": "0b137e5e0898e54d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d4cc79c28683e194", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 extensions/gmail/src/background.ts:61"}, "properties": {"repobilityId": "dc8c5dbf99be7a57", "scanner": "scanner-primary", "fingerprint": "d4cc79c28683e194", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1e33a5d69a4021f3", "level": "error", "message": {"text": "FastAPI POST `distance` without auth dependency \u2014 services/searoute/main.py:52"}, "properties": {"repobilityId": "116db43d40092cfb", "scanner": "scanner-primary", "fingerprint": "1e33a5d69a4021f3", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/searoute/main.py"}, "region": {"startLine": 52}}}]}, {"ruleId": "scanner-b770b0d830e3baff", "level": "error", "message": {"text": "Dangling fetch: GET /api/audit?inquiryId=${encodeURIComponent(inquiryId)} (components/audit-trail.tsx:26)"}, "properties": {"repobilityId": "8e3b13b85eb2bc5f", "scanner": "scanner-primary", "fingerprint": "b770b0d830e3baff", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c5d3336ae275dcfa", "level": "error", "message": {"text": "Dangling fetch: POST /api/voyage/compare-routes (components/economics/RouteCompareModal.tsx:84)"}, "properties": {"repobilityId": "46a4bf2e367bc885", "scanner": "scanner-primary", "fingerprint": "c5d3336ae275dcfa", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3e8f748a8ce13ef1", "level": "error", "message": {"text": "Dangling fetch: GET /api/market/benchmark?indicator=EUA (components/match/EconomicsTab.tsx:108)"}, "properties": {"repobilityId": "05cda07c118e0a29", "scanner": "scanner-primary", "fingerprint": "3e8f748a8ce13ef1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f604cbd90a4c7d90", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/matches/${matchDbId} (components/match/EconomicsTab.tsx:193)"}, "properties": {"repobilityId": "308144869fe89a6a", "scanner": "scanner-primary", "fingerprint": "f604cbd90a4c7d90", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e4e102306405bef6", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/matches/${matchDbId} (components/match/EconomicsTab.tsx:220)"}, "properties": {"repobilityId": "37e22d7e2f528309", "scanner": "scanner-primary", "fingerprint": "e4e102306405bef6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0efda589477ada43", "level": "error", "message": {"text": "Dangling fetch: POST /api/voyage/tce (components/match/EconomicsTab.tsx:384)"}, "properties": {"repobilityId": "bb1d93b753fbc7a5", "scanner": "scanner-primary", "fingerprint": "0efda589477ada43", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7faaf484d0479e4a", "level": "error", "message": {"text": "Dangling fetch: POST /api/ai/explain-deal (components/match/ExplainDealModal.tsx:71)"}, "properties": {"repobilityId": "b2f487360dfc9bfb", "scanner": "scanner-primary", "fingerprint": "7faaf484d0479e4a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0cddcc5f2ef11004", "level": "error", "message": {"text": "Dangling fetch: GET /api/vessels/${imo}/psc-history (components/psc/PscSearchForm.tsx:44)"}, "properties": {"repobilityId": "898cc9eea8c88db3", "scanner": "scanner-primary", "fingerprint": "0cddcc5f2ef11004", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-90fdbcef7a56e640", "level": "error", "message": {"text": "Dangling fetch: POST /api/ai/draft-reply (components/recap/recap-actions.tsx:21)"}, "properties": {"repobilityId": "94da405e08af655f", "scanner": "scanner-primary", "fingerprint": "90fdbcef7a56e640", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9a3c04ccd4922b34", "level": "error", "message": {"text": "Dangling fetch: GET /api/market/indices?name=${encodeURIComponent(kpiKey)}&days=30 (components/market/MetricHistoryPanel.tsx:25)"}, "properties": {"repobilityId": "1af2fecce8039aa7", "scanner": "scanner-primary", "fingerprint": "9a3c04ccd4922b34", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2c6b56f59b150c53", "level": "error", "message": {"text": "Dangling fetch: POST /api/charterers (components/charterers/NewChartererModal.tsx:32)"}, "properties": {"repobilityId": "f6bd67740d95f872", "scanner": "scanner-primary", "fingerprint": "2c6b56f59b150c53", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a3e19b1ebdea56d7", "level": "error", "message": {"text": "Dangling fetch: POST /api/settings/notifications (app/settings/[section]/_forms/NotificationsForm.tsx:36)"}, "properties": {"repobilityId": "8ced21a80e396b27", "scanner": "scanner-primary", "fingerprint": "a3e19b1ebdea56d7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cf0b9c053169181a", "level": "error", "message": {"text": "Dangling fetch: POST /api/settings/profile (app/settings/[section]/_forms/ProfileForm.tsx:22)"}, "properties": {"repobilityId": "24a1689e97f81473", "scanner": "scanner-primary", "fingerprint": "cf0b9c053169181a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b30eebcbd77a2571", "level": "error", "message": {"text": "Dangling fetch: POST /api/settings/password (app/settings/[section]/_forms/PasswordForm.tsx:23)"}, "properties": {"repobilityId": "7fecf965af1009b6", "scanner": "scanner-primary", "fingerprint": "b30eebcbd77a2571", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0a5a502ba1b57e47", "level": "error", "message": {"text": "Dangling fetch: GET /api/matches (app/matches/MatchesClient.tsx:167)"}, "properties": {"repobilityId": "e7a11c1fab5b72db", "scanner": "scanner-primary", "fingerprint": "0a5a502ba1b57e47", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2c3e4da77a0c11b9", "level": "error", "message": {"text": "Dangling fetch: GET /api/matches (app/matches/MatchesClient.tsx:271)"}, "properties": {"repobilityId": "27dddffd629664fd", "scanner": "scanner-primary", "fingerprint": "2c3e4da77a0c11b9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9396c004d599dbc0", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/matches/${id} (app/matches/MatchesClient.tsx:280)"}, "properties": {"repobilityId": "1666df68e1c21596", "scanner": "scanner-primary", "fingerprint": "9396c004d599dbc0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4b9d7cbb97c450ae", "level": "error", "message": {"text": "Dangling fetch: GET /api/matches/bulk (app/matches/MatchesClient.tsx:301)"}, "properties": {"repobilityId": "8f609e447e537271", "scanner": "scanner-primary", "fingerprint": "4b9d7cbb97c450ae", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-54a485f395049579", "level": "error", "message": {"text": "Dangling fetch: GET /api/matches (app/matches/MatchesClient.tsx:313)"}, "properties": {"repobilityId": "ffdebe0f78b4a3fb", "scanner": "scanner-primary", "fingerprint": "54a485f395049579", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-77bf1d49acfbdf28", "level": "error", "message": {"text": "Dangling fetch: POST /api/cargo/import (app/cargo/CargoClient.tsx:188)"}, "properties": {"repobilityId": "2ae4994b014d06e0", "scanner": "scanner-primary", "fingerprint": "77bf1d49acfbdf28", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-76f2c9beb6324a55", "level": "error", "message": {"text": "Dangling fetch: POST /api/cargo/import (app/cargo/CargoClient.tsx:339)"}, "properties": {"repobilityId": "43744c1b2e2f8982", "scanner": "scanner-primary", "fingerprint": "76f2c9beb6324a55", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-41f80cd0a75879c0", "level": "error", "message": {"text": "Dangling fetch: GET /api/vessels/${imo}/psc-history (app/vessels/[imo]/psc-history/page.tsx:43)"}, "properties": {"repobilityId": "e6105f1c46dbbe0d", "scanner": "scanner-primary", "fingerprint": "41f80cd0a75879c0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8e30ca0d2b5511e5", "level": "error", "message": {"text": "Dangling fetch: POST /api/laytime/calculate (app/laytime/page.tsx:68)"}, "properties": {"repobilityId": "db2b489c3543e847", "scanner": "scanner-primary", "fingerprint": "8e30ca0d2b5511e5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7359ddb8c0ec596c", "level": "error", "message": {"text": "Dangling fetch: POST /api/laytime/parse-sof (app/laytime/page.tsx:110)"}, "properties": {"repobilityId": "a1bff0d8f566e0aa", "scanner": "scanner-primary", "fingerprint": "7359ddb8c0ec596c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4bc5eaa1d65a9e97", "level": "error", "message": {"text": "Dangling fetch: POST https://oauth.pipedrive.com/oauth/token (app/api/integrations/pipedrive/oauth/route.ts:99)"}, "properties": {"repobilityId": "81dab788abd63ec4", "scanner": "scanner-primary", "fingerprint": "4bc5eaa1d65a9e97", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d61cd3c5f2e55e25", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/knowledge/refresh (app/admin/knowledge/_components/SourceTable.tsx:47)"}, "properties": {"repobilityId": "d6718db83869a305", "scanner": "scanner-primary", "fingerprint": "d61cd3c5f2e55e25", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a005116204e9d607", "level": "error", "message": {"text": "Dangling fetch: GET /api/market/indices?name=bhsi&days=30 (app/market/page.tsx:142)"}, "properties": {"repobilityId": "8ada6758d249884c", "scanner": "scanner-primary", "fingerprint": "a005116204e9d607", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3589b2a8f35cc23a", "level": "error", "message": {"text": "Dangling fetch: GET /api/market/indices?name=tmi&days=30 (app/market/page.tsx:143)"}, "properties": {"repobilityId": "98f77bb29066b19f", "scanner": "scanner-primary", "fingerprint": "3589b2a8f35cc23a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6c9e1d720807c683", "level": "error", "message": {"text": "Dangling fetch: GET /api/market/indices?name=drewry-bb&days=30 (app/market/page.tsx:144)"}, "properties": {"repobilityId": "26892d81fae7d5a8", "scanner": "scanner-primary", "fingerprint": "6c9e1d720807c683", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-61b34d85a52e7156", "level": "error", "message": {"text": "Dangling fetch: GET /api/market/baltic-kpi?code=BDI (app/market/page.tsx:145)"}, "properties": {"repobilityId": "778440c09e339e01", "scanner": "scanner-primary", "fingerprint": "61b34d85a52e7156", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-53315e4f97e414c7", "level": "error", "message": {"text": "Dangling fetch: GET /api/market/indices?name=${key}&days=30 (app/market/page.tsx:174)"}, "properties": {"repobilityId": "b1fa30fa1026e989", "scanner": "scanner-primary", "fingerprint": "53315e4f97e414c7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a4dd190ff3e7da71", "level": "error", "message": {"text": "Dangling fetch: GET /api/knowledge/clauses?${params.toString()} (app/clauses/page.tsx:49)"}, "properties": {"repobilityId": "37395c9dcb7c46d7", "scanner": "scanner-primary", "fingerprint": "a4dd190ff3e7da71", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-79c6b377819a5b85", "level": "error", "message": {"text": "Dangling fetch: GET /api/charterers (app/charterers/page.tsx:41)"}, "properties": {"repobilityId": "50cbd0a7df579dcd", "scanner": "scanner-primary", "fingerprint": "79c6b377819a5b85", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a02dda650eda4264", "level": "error", "message": {"text": "Dangling fetch: GET /api/charterers (app/charterers/page.tsx:176)"}, "properties": {"repobilityId": "606e766217c91d96", "scanner": "scanner-primary", "fingerprint": "a02dda650eda4264", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f75b054fe52dd75b", "level": "error", "message": {"text": "Dangling fetch: GET /api/charterers/${id} (app/charterers/[id]/page.tsx:51)"}, "properties": {"repobilityId": "2e7200513e7a4ec0", "scanner": "scanner-primary", "fingerprint": "f75b054fe52dd75b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e484198cd456fabf", "level": "error", "message": {"text": "Dangling fetch: GET https://www.eex.com/en/market-data/environmental-markets/spot-market/european-emission-allowances#!/2026 (lib/economics/ets.ts:90)"}, "properties": {"repobilityId": "4ea036ddb0d1057a", "scanner": "scanner-primary", "fingerprint": "e484198cd456fabf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b4005510a21d0585", "level": "error", "message": {"text": "Dangling fetch: POST https://api.openai.com/v1/audio/transcriptions (lib/voice/whisper-transcribe.ts:40)"}, "properties": {"repobilityId": "7b3181e7aaa16f44", "scanner": "scanner-primary", "fingerprint": "b4005510a21d0585", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-37f4123dc45180be", "level": "error", "message": {"text": "Dangling fetch: GET /api/matches/${encodeURIComponent(matchId)} (extensions/gmail/inserts/economics.ts:22)"}, "properties": {"repobilityId": "9bd1ad99bef238ae", "scanner": "scanner-primary", "fingerprint": "37f4123dc45180be", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fb03021f7c7b7624", "level": "error", "message": {"text": "Dangling fetch: GET /vessel/${encodeURIComponent(vesselId)} (extensions/gmail/inserts/passport.ts:29)"}, "properties": {"repobilityId": "f7cfaa7b13bc329b", "scanner": "scanner-primary", "fingerprint": "fb03021f7c7b7624", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e92fb507ed4dc4dc", "level": "error", "message": {"text": "Dangling fetch: GET /api/benchmark?route=${encodeURIComponent(route)} (extensions/gmail/inserts/benchmark.ts:21)"}, "properties": {"repobilityId": "688df4597761a2a0", "scanner": "scanner-primary", "fingerprint": "e92fb507ed4dc4dc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ea3a2207cf050446", "level": "error", "message": {"text": "Dangling fetch: POST /api/parser/email (design-system/patterns/CmdKPalette.tsx:38)"}, "properties": {"repobilityId": "09a13864f1335a43", "scanner": "scanner-primary", "fingerprint": "ea3a2207cf050446", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e7f1df5d9e19fc50", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/me (design-system/patterns/ModeProvider.tsx:33)"}, "properties": {"repobilityId": "48698ad6537affc8", "scanner": "scanner-primary", "fingerprint": "e7f1df5d9e19fc50", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a710e0c6e0c30972", "level": "error", "message": {"text": "Dangling fetch: POST /api/help/ask (design-system/patterns/PaletteTabs/HelpTab.tsx:17)"}, "properties": {"repobilityId": "6d8fef1be82956bb", "scanner": "scanner-primary", "fingerprint": "a710e0c6e0c30972", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-830082bde77ccb6a", "level": "note", "message": {"text": "Unused endpoint: POST /distance"}, "properties": {"repobilityId": "14e8201ae7ef4c8a", "scanner": "scanner-primary", "fingerprint": "830082bde77ccb6a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}