{"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-dfcf838a2cd3d38f", "name": "Stray `console.log` in TS/JS \u2014 demo-all-modules.ts:71", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 demo-all-modules.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-34e3148151e0fc86", "name": "Stray `console.log` in TS/JS \u2014 __tests__/element-extractor.test.ts:439", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 __tests__/element-extractor.test.ts:439"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b7d253a7631881b2", "name": "Stray `console.log` in TS/JS \u2014 __tests__/venv-exclusion.test.ts:82", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 __tests__/venv-exclusion.test.ts:82"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6a1d1f512917a841", "name": "Stray `console.log` in TS/JS \u2014 __tests__/orphan-detection.test.ts:48", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 __tests__/orphan-detection.test.ts:48"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9adac776584d5238", "name": "Stray `console.log` in TS/JS \u2014 __tests__/accuracy-validation.test.ts:227", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 __tests__/accuracy-validation.test.ts:227"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b3bc0cfe05f04b4b", "name": "Stray `console.log` in TS/JS \u2014 __tests__/ast-element-scanner.test.ts:262", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 __tests__/ast-element-scanner.test.ts:262"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b4f673ff62b5691f", "name": "Stray `console.log` in TS/JS \u2014 __tests__/integration.test.ts:52", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 __tests__/integration.test.ts:52"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c691d2a377a791c8", "name": "Stray `console.log` in TS/JS \u2014 __tests__/pipeline-integration.test.ts:50", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 __tests__/pipeline-integration.test.ts:50"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f81ccf8c8701269c", "name": "Stray `console.log` in TS/JS \u2014 __tests__/scanner-standalone.test.ts:356", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 __tests__/scanner-standalone.test.ts:356"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-97b6bddc6f4c5dc8", "name": "Stray `console.log` in TS/JS \u2014 __tests__/pipeline/builtin-classification.test.ts:155", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 __tests__/pipeline/builtin-classification.test.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-0cde14fc1bfcd946", "name": "Stray `console.log` in TS/JS \u2014 scripts/generate-intelligence.js:97", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-intelligence.js:97"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-29b4e1c94328ceb3", "name": "Stray `console.log` in TS/JS \u2014 scripts/doc-gen/validate-docs.js:50", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/doc-gen/validate-docs.js:50"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-af1947d91d9d71c1", "name": "Stray `console.log` in TS/JS \u2014 scripts/doc-gen/generate-hotspots-md.js:193", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/doc-gen/generate-hotspots-md.js: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-ea7e398a3c44c24d", "name": "Stray `console.log` in TS/JS \u2014 scripts/doc-gen/generate-index-md.js:146", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/doc-gen/generate-index-md.js:146"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4ae0dead1ebb46e1", "name": "Stray `console.log` in TS/JS \u2014 scripts/doc-gen/generate-meta-json.js:70", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/doc-gen/generate-meta-json.js:70"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-45251319c8b0a40b", "name": "Stray `console.log` in TS/JS \u2014 scripts/doc-gen/utils.js:95", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/doc-gen/utils.js:95"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dd149f49556dfacd", "name": "Stray `console.log` in TS/JS \u2014 scripts/doc-gen/enhance-existing-docs.js:47", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/doc-gen/enhance-existing-docs.js:47"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f6463ce1956c5ee8", "name": "Stray `console.log` in TS/JS \u2014 scripts/doc-gen/generate-exports-md.js:212", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/doc-gen/generate-exports-md.js:212"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-75e4d37923afb773", "name": "Stray `console.log` in TS/JS \u2014 scripts/doc-gen/generate-relationships-md.js:221", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/doc-gen/generate-relationships-md.js:221"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d1321f60455a94be", "name": "Stray `console.log` in TS/JS \u2014 examples/nextjs-api-route.ts:365", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 examples/nextjs-api-route.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-55cd5439920dbdaf", "name": "Stray `console.log` in TS/JS \u2014 src/index.ts:148", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/index.ts:148"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d067fa193ee2475e", "name": "Stray `console.log` in TS/JS \u2014 src/integration/vector/vector-store.ts:266", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/integration/vector/vector-store.ts:266"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dc768ebb1114dabf", "name": "Stray `console.log` in TS/JS \u2014 src/integration/llm/llm-provider.ts:144", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/integration/llm/llm-provider.ts:144"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a6072a15bb75b9a2", "name": "Stray `console.log` in TS/JS \u2014 src/config/presets.ts:173", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/config/presets.ts:173"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bbf4fc09fd5548e3", "name": "Stray `console.log` in TS/JS \u2014 src/cli/coderef-rag-server.ts:93", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/cli/coderef-rag-server.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-1d67fb8052252ea3", "name": "Stray `console.log` in TS/JS \u2014 src/cli/rag-status.ts:90", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/cli/rag-status.ts:90"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-96166b6b873ea93b", "name": "Stray `console.log` in TS/JS \u2014 src/cli/detect-languages-cli.ts:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/cli/detect-languages-cli.ts:12"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d6702263e67ef408", "name": "Stray `console.log` in TS/JS \u2014 src/cli/rag-search.ts:210", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/cli/rag-search.ts:210"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-994c0e85b382eac9", "name": "Stray `console.log` in TS/JS \u2014 src/cli/validate-routes.ts:106", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/cli/validate-routes.ts:106"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f34ea07a052c5ec2", "name": "Stray `console.log` in TS/JS \u2014 src/cli/populate.ts:215", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/cli/populate.ts:215"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9f022af3c8081512", "name": "Stray `console.log` in TS/JS \u2014 src/cli/rag-eval.ts:203", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/cli/rag-eval.ts:203"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-14bade29bd959cf0", "name": "Stray `console.log` in TS/JS \u2014 src/cli/coderef-search.ts:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/cli/coderef-search.ts:14"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f5930822460f4fd1", "name": "Stray `console.log` in TS/JS \u2014 src/cli/rag-index.ts:207", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/cli/rag-index.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-982c94d303a68399", "name": "Stray `console.log` in TS/JS \u2014 src/cli/scan-frontend-calls.ts:69", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/cli/scan-frontend-calls.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-d0780db828a06f25", "name": "Stray `console.log` in TS/JS \u2014 src/cli/coderef-pipeline.ts:52", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/cli/coderef-pipeline.ts:52"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2421285f141413b9", "name": "Stray `console.log` in TS/JS \u2014 src/cli/coderef-query.ts:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/cli/coderef-query.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-d700afcd1fa7d87a", "name": "Stray `console.log` in TS/JS \u2014 src/cli/semantic-integration-cli.ts:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/cli/semantic-integration-cli.ts:12"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dbd9e6dbac19d887", "name": "Stray `console.log` in TS/JS \u2014 src/cli/scan.ts:34", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/cli/scan.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-9239cee0029ae8ea", "name": "Stray `console.log` in TS/JS \u2014 src/cli/coderef-analyze.ts:32", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/cli/coderef-analyze.ts:32"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a05d1f862e42b534", "name": "Stray `console.log` in TS/JS \u2014 src/cli/coderef-watch.ts:67", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/cli/coderef-watch.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-8b4cbd65eb066b9b", "name": "TODO/FIXME marker in shipping code \u2014 src/analyzer/js-call-detector/parser.ts:142", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/analyzer/js-call-detector/parser.ts:142"}, "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-a7c4c35a8e95d370", "name": "Stray `console.log` in TS/JS \u2014 src/scanner/error-reporter.ts:211", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/scanner/error-reporter.ts:211"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-237489dba3ed1512", "name": "Stray `console.log` in TS/JS \u2014 src/scanner/frontend-scanner.ts:139", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/scanner/frontend-scanner.ts:139"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d5873994799127b9", "name": "Stray `console.log` in TS/JS \u2014 src/scanner/__tests__/relationship-tracking.test.ts:224", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/scanner/__tests__/relationship-tracking.test.ts:224"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ed6c933df14d958", "name": "Stray `console.log` in TS/JS \u2014 src/scanner/__tests__/parallel-processing.test.ts:219", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/scanner/__tests__/parallel-processing.test.ts:219"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cd2a2221008c5663", "name": "TODO/FIXME marker in shipping code \u2014 src/validator/report-generator.ts:211", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/validator/report-generator.ts:211"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9d6b25b332430b06", "name": "Stray `console.log` in TS/JS \u2014 src/validator/migration-mapper.ts:288", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/validator/migration-mapper.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-5055fa34031f6188", "name": "Stray `console.log` in TS/JS \u2014 src/validator/route-validator.ts:377", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/validator/route-validator.ts:377"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4c3aed0c430e0a9e", "name": "Stray `console.log` in TS/JS \u2014 src/context/__tests__/complexity-scorer.test.ts:130", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/context/__tests__/complexity-scorer.test.ts:130"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4f2758d48a5bc24c", "name": "Stray `console.log` in TS/JS \u2014 src/fileGeneration/saveFrontendCalls.ts:183", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/fileGeneration/saveFrontendCalls.ts:183"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-439cc31aa6bf41c2", "name": "Insecure pattern 'node_child_process' in __tests__/foundation-docs-meta-writer.test.mjs:19", "shortDescription": {"text": "Insecure pattern 'node_child_process' in __tests__/foundation-docs-meta-writer.test.mjs:19"}, "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-16d1d0f2a16dfc8e", "name": "Insecure pattern 'node_child_process' in __tests__/coderef-watch-heartbeat-schema.test.mjs:15", "shortDescription": {"text": "Insecure pattern 'node_child_process' in __tests__/coderef-watch-heartbeat-schema.test.mjs: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-f263fe772b3f3cf9", "name": "Insecure pattern 'node_child_process' in __tests__/coderef-watch-debounce.test.mjs:13", "shortDescription": {"text": "Insecure pattern 'node_child_process' in __tests__/coderef-watch-debounce.test.mjs:13"}, "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-42b06f7b7c59f03b", "name": "Insecure pattern 'node_child_process' in __tests__/coderef-rag-server-query-degraded.test.mjs:19", "shortDescription": {"text": "Insecure pattern 'node_child_process' in __tests__/coderef-rag-server-query-degraded.test.mjs:19"}, "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-4f291b5e7bcdd718", "name": "Insecure pattern 'node_child_process' in __tests__/populate-cli.test.ts:4", "shortDescription": {"text": "Insecure pattern 'node_child_process' in __tests__/populate-cli.test.ts:4"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0779e2abb98d4fad", "name": "Insecure pattern 'node_child_process' in __tests__/coderef-rag-server-health.test.mjs:16", "shortDescription": {"text": "Insecure pattern 'node_child_process' in __tests__/coderef-rag-server-health.test.mjs:16"}, "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-a7ecece754dd907f", "name": "Insecure pattern 'node_child_process' in __tests__/pipeline/output-validation-strict-headers.test.ts:35", "shortDescription": {"text": "Insecure pattern 'node_child_process' in __tests__/pipeline/output-validation-strict-headers.test.ts:35"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-09472f56179be12e", "name": "Insecure pattern 'node_child_process' in __tests__/pipeline/output-validation-report.test.ts:30", "shortDescription": {"text": "Insecure pattern 'node_child_process' in __tests__/pipeline/output-validation-report.test.ts:30"}, "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-7fda7bb14b846535", "name": "Insecure pattern 'cors_wildcard' in coderef/ARCHIVED/coderef-intelligence-data-api/analysis.json:31", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in coderef/ARCHIVED/coderef-intelligence-data-api/analysis.json:31"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e64446d58190e124", "name": "Insecure pattern 'node_child_process' in src/cli/coderef-rag-server.ts:36", "shortDescription": {"text": "Insecure pattern 'node_child_process' in src/cli/coderef-rag-server.ts:36"}, "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-7e50d24d609a5ca2", "name": "Insecure pattern 'node_child_process' in src/cli/coderef-mcp-server.ts:34", "shortDescription": {"text": "Insecure pattern 'node_child_process' in src/cli/coderef-mcp-server.ts:34"}, "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-16a3467617dd10dd", "name": "Insecure pattern 'node_child_process' in src/cli/coderef-pipeline.ts:32", "shortDescription": {"text": "Insecure pattern 'node_child_process' in src/cli/coderef-pipeline.ts:32"}, "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-f528634f4bb84e53", "name": "Insecure pattern 'node_child_process' in src/cli/coderef-watch.ts:31", "shortDescription": {"text": "Insecure pattern 'node_child_process' in src/cli/coderef-watch.ts:31"}, "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-ae06b4da96881f31", "name": "Insecure pattern 'node_child_process' in src/cli/validate-routes.test.ts:9", "shortDescription": {"text": "Insecure pattern 'node_child_process' in src/cli/validate-routes.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-0dfa9e02707d95f5", "name": "Insecure pattern 'node_child_process' in src/analyzer/dependency-analyzer.ts:24", "shortDescription": {"text": "Insecure pattern 'node_child_process' in src/analyzer/dependency-analyzer.ts:24"}, "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-e7de1e3a4c16bc35", "name": "Very large file: src/scanner/tree-sitter-scanner.ts (1670 lines)", "shortDescription": {"text": "Very large file: src/scanner/tree-sitter-scanner.ts (1670 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-00ee95eee2a9944d", "name": "Very large file: src/scanner/scanner.ts (1675 lines)", "shortDescription": {"text": "Very large file: src/scanner/scanner.ts (1675 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-31d137036e3f2cd2", "name": "Very large file: src/pipeline/generators/context-generator.ts (2269 lines)", "shortDescription": {"text": "Very large file: src/pipeline/generators/context-generator.ts (2269 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-8de74df1655f87d6", "name": "Node manifest has dependencies but no lockfile: examples/plugins/example-detector/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: examples/plugins/example-detector/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 634 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 23 placeholder/mock markers across 14 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, lockfile. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license, lockfile. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-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-d9a1291e3c41996f", "name": "Agent authority lacks a verifier contract: .windsurf/workflows/generate-quickstart.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .windsurf/workflows/generate-quickstart.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-c85753a5d6cd9899", "name": "Agent authority lacks a verifier contract: .windsurf/workflows/read-session-dispatch.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .windsurf/workflows/read-session-dispatch.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-e725d2ab884fbd49", "name": "Multiple root agent instruction files without precedence", "shortDescription": {"text": "Multiple root agent instruction files without precedence"}, "fullDescription": {"text": "The repo has multiple top-level AI-coder instruction files. Without precedence rules, different agents may follow different policies."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-76aaad631d812100", "name": "Commented-code block (6 lines) in __tests__/element-extractor.test.ts:426", "shortDescription": {"text": "Commented-code block (6 lines) in __tests__/element-extractor.test.ts:426"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f57ddd1cee79dd7e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 __tests__/element-extractor.test.ts:74", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 __tests__/element-extractor.test.ts:74"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a45147c8f634e734", "name": "Commented-code block (5 lines) in __tests__/accuracy-validation.test.ts:102", "shortDescription": {"text": "Commented-code block (5 lines) in __tests__/accuracy-validation.test.ts:102"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-43463ea64093d439", "name": "`fetch()` without try/.catch or AbortSignal \u2014 __tests__/accuracy-validation.test.ts:121", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 __tests__/accuracy-validation.test.ts:121"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9b4c1b12c61b0628", "name": "`fetch()` without try/.catch or AbortSignal \u2014 __tests__/coderef-rag-server-query-degraded.test.mjs:57", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 __tests__/coderef-rag-server-query-degraded.test.mjs:57"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-856435b3c7f5f49e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 __tests__/ast-element-scanner.test.ts:37", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 __tests__/ast-element-scanner.test.ts:37"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a252385d020831cd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 __tests__/relationship-extractor.test.ts:154", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 __tests__/relationship-extractor.test.ts:154"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-592060fcbd915379", "name": "Commented-code block (5 lines) in __tests__/pipeline-integration.test.ts:183", "shortDescription": {"text": "Commented-code block (5 lines) in __tests__/pipeline-integration.test.ts:183"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-11921736977ee98a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 __tests__/tree-sitter-scanner.test.ts:76", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 __tests__/tree-sitter-scanner.test.ts:76"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-316a3d3b4fc278bf", "name": "`fetch()` without try/.catch or AbortSignal \u2014 __tests__/coderef-rag-server-health.test.mjs:73", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 __tests__/coderef-rag-server-health.test.mjs:73"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2c0196b96d21cd7c", "name": "Commented-code block (5 lines) in __tests__/integration/rag/indexing-orchestrator-stale-deletions.test.ts:13", "shortDescription": {"text": "Commented-code block (5 lines) in __tests__/integration/rag/indexing-orchestrator-stale-deletions.test.ts:13"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-684be8b8f33aa463", "name": "Commented-code block (7 lines) in __tests__/integration/rag/facet-filter.test.ts:14", "shortDescription": {"text": "Commented-code block (7 lines) in __tests__/integration/rag/facet-filter.test.ts:14"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-15a330f4915877c2", "name": "Commented-code block (6 lines) in __tests__/pipeline/header-import-facts.test.ts:63", "shortDescription": {"text": "Commented-code block (6 lines) in __tests__/pipeline/header-import-facts.test.ts:63"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-abbc71d96e2c4d21", "name": "Commented-code block (7 lines) in __tests__/pipeline/graph-ground-truth.test.ts:47", "shortDescription": {"text": "Commented-code block (7 lines) in __tests__/pipeline/graph-ground-truth.test.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-2b8ac2e980ad2dd5", "name": "Commented-code block (5 lines) in __tests__/pipeline/graph-construction-legacy-builders.test.ts:48", "shortDescription": {"text": "Commented-code block (5 lines) in __tests__/pipeline/graph-construction-legacy-builders.test.ts:48"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d6cd4e3b6faf8ff3", "name": "Commented-code block (7 lines) in __tests__/pipeline/header-import-facts-cardinality.test.ts:14", "shortDescription": {"text": "Commented-code block (7 lines) in __tests__/pipeline/header-import-facts-cardinality.test.ts:14"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ea2f2aab7632f194", "name": "Commented-code block (8 lines) in __tests__/pipeline/indexing-gate-invariant.test.ts:13", "shortDescription": {"text": "Commented-code block (8 lines) in __tests__/pipeline/indexing-gate-invariant.test.ts:13"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-34a92888faea72b9", "name": "Commented-code block (6 lines) in __tests__/pipeline/header-exports-cross-check.test.ts:87", "shortDescription": {"text": "Commented-code block (6 lines) in __tests__/pipeline/header-exports-cross-check.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-ff8e66282e3eb1e5", "name": "Commented-code block (5 lines) in __tests__/pipeline/output-validation-report.test.ts:145", "shortDescription": {"text": "Commented-code block (5 lines) in __tests__/pipeline/output-validation-report.test.ts:145"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7530424895ae405e", "name": "Commented-code block (6 lines) in __tests__/pipeline/header-layer-runtime-validation.test.ts:55", "shortDescription": {"text": "Commented-code block (6 lines) in __tests__/pipeline/header-layer-runtime-validation.test.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-db5384c0ddd5635b", "name": "Commented-code block (5 lines) in coderef/archived/rag-index-single-analyzer-slice/verify-dual-ac.mjs:39", "shortDescription": {"text": "Commented-code block (5 lines) in coderef/archived/rag-index-single-analyzer-slice/verify-dual-ac.mjs:39"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-31c6a366e9b7b11e", "name": "Commented-code block (5 lines) in scripts/check-header-coverage.mjs:93", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/check-header-coverage.mjs:93"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-025ac5bde2b60844", "name": "`fetch()` without try/.catch or AbortSignal \u2014 examples/nextjs-api-route.ts:74", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 examples/nextjs-api-route.ts:74"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-463beeb4be595bd1", "name": "Commented-code block (5 lines) in src/integration/vector/sqlite-store.ts:143", "shortDescription": {"text": "Commented-code block (5 lines) in src/integration/vector/sqlite-store.ts:143"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6cbc4fc15941402b", "name": "Commented-code block (6 lines) in src/integration/rag/chunk-converter.ts:159", "shortDescription": {"text": "Commented-code block (6 lines) in src/integration/rag/chunk-converter.ts:159"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-43d4149e6b9dfc85", "name": "Commented-code block (5 lines) in src/integration/rag/indexing-orchestrator.ts:464", "shortDescription": {"text": "Commented-code block (5 lines) in src/integration/rag/indexing-orchestrator.ts:464"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b691e3385c1902a9", "name": "Commented-code block (8 lines) in src/integration/rag/__tests__/integration/indexing-pipeline.test.ts:33", "shortDescription": {"text": "Commented-code block (8 lines) in src/integration/rag/__tests__/integration/indexing-pipeline.test.ts:33"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-143d999bdb524aed", "name": "Commented-code block (5 lines) in src/integration/llm/__tests__/ollama-provider-unreachable.test.ts:51", "shortDescription": {"text": "Commented-code block (5 lines) in src/integration/llm/__tests__/ollama-provider-unreachable.test.ts:51"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7f769659f814144c", "name": "Commented-code block (6 lines) in src/cli/rag-status.ts:193", "shortDescription": {"text": "Commented-code block (6 lines) in src/cli/rag-status.ts:193"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0c923e02ab6022d6", "name": "Commented-code block (5 lines) in src/cli/rag-search.ts:92", "shortDescription": {"text": "Commented-code block (5 lines) in src/cli/rag-search.ts:92"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-579689a7c5844527", "name": "Commented-code block (8 lines) in src/cli/populate.ts:365", "shortDescription": {"text": "Commented-code block (8 lines) in src/cli/populate.ts:365"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f53d610e6a209175", "name": "Commented-code block (5 lines) in src/cli/rag-index.ts:93", "shortDescription": {"text": "Commented-code block (5 lines) in src/cli/rag-index.ts:93"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-aa4f32bf04e2acb8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/cli/scan-frontend-calls.ts:175", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/cli/scan-frontend-calls.ts:175"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5ef32ff121f8bd96", "name": "Commented-code block (9 lines) in src/analyzer/ast-element-scanner.ts:206", "shortDescription": {"text": "Commented-code block (9 lines) in src/analyzer/ast-element-scanner.ts:206"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e4fedd67ce880a13", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/analyzer/frontend-call-parsers.ts:21", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/analyzer/frontend-call-parsers.ts:21"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b8a4d7e00eacb531", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/analyzer/frontend-call-parsers.test.ts:20", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/analyzer/frontend-call-parsers.test.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-9fd2c6f6c328ab5d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/scanner/scanner.ts:83", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scanner/scanner.ts:83"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cb7189ffe65d91d6", "name": "Commented-code block (6 lines) in src/pipeline/import-resolver.ts:346", "shortDescription": {"text": "Commented-code block (6 lines) in src/pipeline/import-resolver.ts:346"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2e2e1cdeef60045f", "name": "Commented-code block (5 lines) in src/pipeline/output-validator.ts:332", "shortDescription": {"text": "Commented-code block (5 lines) in src/pipeline/output-validator.ts:332"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-890d093bff5c21b8", "name": "Commented-code block (5 lines) in src/pipeline/graph-builder.ts:269", "shortDescription": {"text": "Commented-code block (5 lines) in src/pipeline/graph-builder.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-ac1c0f59a2e9115a", "name": "Commented-code block (6 lines) in src/pipeline/call-resolver.ts:692", "shortDescription": {"text": "Commented-code block (6 lines) in src/pipeline/call-resolver.ts:692"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3387830fb31534cf", "name": "Commented-code block (7 lines) in src/pipeline/orchestrator.ts:197", "shortDescription": {"text": "Commented-code block (7 lines) in src/pipeline/orchestrator.ts:197"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7505a5ae734a133b", "name": "Commented-code block (5 lines) in src/pipeline/extractors/element-extractor.ts:103", "shortDescription": {"text": "Commented-code block (5 lines) in src/pipeline/extractors/element-extractor.ts:103"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-42944260c8ea2675", "name": "Commented-code block (6 lines) in src/pipeline/generators/context-generator.ts:502", "shortDescription": {"text": "Commented-code block (6 lines) in src/pipeline/generators/context-generator.ts:502"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6cae70d708e6dae0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/validator/frontend-update-generator.test.ts:266", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/validator/frontend-update-generator.test.ts:266"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ba04f640f302ee66", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/fileGeneration/saveFrontendCalls.test.ts:162", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/fileGeneration/saveFrontendCalls.test.ts:162"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-51ab4b1a73cd34ec", "name": "Dangling fetch: GET http://127.0.0.1:${port}/api/health (__tests__/coderef-rag-server-query-degraded.test.mjs:121)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/health (__tests__/coderef-rag-server-query-degraded.test.mjs:121)"}, "fullDescription": {"text": "`__tests__/coderef-rag-server-query-degraded.test.mjs:121` calls `GET http://127.0.0.1:${port}/api/health` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/health`\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-7c5b150f0b46864b", "name": "Dangling fetch: POST http://127.0.0.1:${port}/api/rag/query (__tests__/coderef-rag-server-query-degraded.test.mjs:125)", "shortDescription": {"text": "Dangling fetch: POST http://127.0.0.1:${port}/api/rag/query (__tests__/coderef-rag-server-query-degraded.test.mjs:125)"}, "fullDescription": {"text": "`__tests__/coderef-rag-server-query-degraded.test.mjs:125` calls `POST http://127.0.0.1:${port}/api/rag/query` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/rag/query`\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-80bae3bdfa350172", "name": "Dangling fetch: GET http://127.0.0.1:${port}/api/health (__tests__/coderef-rag-server-health.test.mjs:65)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/health (__tests__/coderef-rag-server-health.test.mjs:65)"}, "fullDescription": {"text": "`__tests__/coderef-rag-server-health.test.mjs:65` calls `GET http://127.0.0.1:${port}/api/health` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/health`\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-e171327d440872d6", "name": "Dangling fetch: GET http://127.0.0.1:${port}/api/rag/status (__tests__/coderef-rag-server-health.test.mjs:73)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/rag/status (__tests__/coderef-rag-server-health.test.mjs:73)"}, "fullDescription": {"text": "`__tests__/coderef-rag-server-health.test.mjs:73` calls `GET http://127.0.0.1:${port}/api/rag/status` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/rag/status`\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-09f04dd304dfb7a8", "name": "Dangling fetch: GET http://127.0.0.1:${port}/nonexistent (__tests__/coderef-rag-server-health.test.mjs:83)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/nonexistent (__tests__/coderef-rag-server-health.test.mjs:83)"}, "fullDescription": {"text": "`__tests__/coderef-rag-server-health.test.mjs:83` calls `GET http://127.0.0.1:${port}/nonexistent` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/nonexistent`\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-f01909b7d2c57f96", "name": "Dangling fetch: GET /api (__tests__/ast-element-scanner.test.ts:37)", "shortDescription": {"text": "Dangling fetch: GET /api (__tests__/ast-element-scanner.test.ts:37)"}, "fullDescription": {"text": "`__tests__/ast-element-scanner.test.ts:37` calls `GET /api` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/`\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-f862b1702d2a1ee3", "name": "Dangling fetch: POST /api/scan (examples/nextjs-api-route.ts:74)", "shortDescription": {"text": "Dangling fetch: POST /api/scan (examples/nextjs-api-route.ts:74)"}, "fullDescription": {"text": "`examples/nextjs-api-route.ts:74` calls `POST /api/scan` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scan`\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-2813c18e2111bac8", "name": "Dangling fetch: POST /api/scan (examples/nextjs-api-route.ts:457)", "shortDescription": {"text": "Dangling fetch: POST /api/scan (examples/nextjs-api-route.ts:457)"}, "fullDescription": {"text": "`examples/nextjs-api-route.ts:457` calls `POST /api/scan` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scan`\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-d77ee44906d048c8", "name": "Dangling fetch: GET /api/users/${id} (src/analyzer/frontend-call-parsers.ts:33)", "shortDescription": {"text": "Dangling fetch: GET /api/users/${id} (src/analyzer/frontend-call-parsers.ts:33)"}, "fullDescription": {"text": "`src/analyzer/frontend-call-parsers.ts:33` calls `GET /api/users/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/users/<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-d249962e7e6b0839", "name": "Dangling fetch: GET /api/users/${id} (src/analyzer/frontend-call-parsers.ts:326)", "shortDescription": {"text": "Dangling fetch: GET /api/users/${id} (src/analyzer/frontend-call-parsers.ts:326)"}, "fullDescription": {"text": "`src/analyzer/frontend-call-parsers.ts:326` calls `GET /api/users/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/users/<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-41431cb0add9019f", "name": "Dangling fetch: GET /api/users/${id} (src/analyzer/frontend-call-parsers.test.ts:35)", "shortDescription": {"text": "Dangling fetch: GET /api/users/${id} (src/analyzer/frontend-call-parsers.test.ts:35)"}, "fullDescription": {"text": "`src/analyzer/frontend-call-parsers.test.ts:35` calls `GET /api/users/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/users/<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-80aa4109b199ab4d", "name": "Dangling fetch: GET /api/boards/${boardId}/cards/${cardId} (src/analyzer/frontend-call-parsers.test.ts:53)", "shortDescription": {"text": "Dangling fetch: GET /api/boards/${boardId}/cards/${cardId} (src/analyzer/frontend-call-parsers.test.ts:53)"}, "fullDescription": {"text": "`src/analyzer/frontend-call-parsers.test.ts:53` calls `GET /api/boards/${boardId}/cards/${cardId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/boards/<p>/cards/<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-afecc3950ad33658", "name": "Dangling fetch: POST /api/posts (src/analyzer/frontend-call-parsers.test.ts:84)", "shortDescription": {"text": "Dangling fetch: POST /api/posts (src/analyzer/frontend-call-parsers.test.ts:84)"}, "fullDescription": {"text": "`src/analyzer/frontend-call-parsers.test.ts:84` calls `POST /api/posts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/posts`\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-b248fe5a21406a24", "name": "Dangling fetch: GET /api/${type}/${id}/details (src/analyzer/frontend-call-parsers.test.ts:252)", "shortDescription": {"text": "Dangling fetch: GET /api/${type}/${id}/details (src/analyzer/frontend-call-parsers.test.ts:252)"}, "fullDescription": {"text": "`src/analyzer/frontend-call-parsers.test.ts:252` calls `GET /api/${type}/${id}/details` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/<p>/<p>/details`\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-19569296419d0357", "name": "Dangling fetch: GET /api/users/${id} (src/analyzer/frontend-call-parsers.test.ts:122)", "shortDescription": {"text": "Dangling fetch: GET /api/users/${id} (src/analyzer/frontend-call-parsers.test.ts:122)"}, "fullDescription": {"text": "`src/analyzer/frontend-call-parsers.test.ts:122` calls `GET /api/users/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/users/<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-3b2bc35a8d928033", "name": "Dangling fetch: PUT /api/users/1 (src/analyzer/frontend-call-parsers.test.ts:134)", "shortDescription": {"text": "Dangling fetch: PUT /api/users/1 (src/analyzer/frontend-call-parsers.test.ts:134)"}, "fullDescription": {"text": "`src/analyzer/frontend-call-parsers.test.ts:134` calls `PUT /api/users/1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/users/<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-83d67619f1736a68", "name": "Dangling fetch: DELETE /api/users/1 (src/analyzer/frontend-call-parsers.test.ts:135)", "shortDescription": {"text": "Dangling fetch: DELETE /api/users/1 (src/analyzer/frontend-call-parsers.test.ts:135)"}, "fullDescription": {"text": "`src/analyzer/frontend-call-parsers.test.ts:135` calls `DELETE /api/users/1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/users/<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-71f9f716a26e0458", "name": "Dangling fetch: PATCH /api/users/1 (src/analyzer/frontend-call-parsers.test.ts:136)", "shortDescription": {"text": "Dangling fetch: PATCH /api/users/1 (src/analyzer/frontend-call-parsers.test.ts:136)"}, "fullDescription": {"text": "`src/analyzer/frontend-call-parsers.test.ts:136` calls `PATCH /api/users/1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/users/<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-2e970a438d252670", "name": "Dangling fetch: GET /api/v1/users (src/validator/frontend-update-generator.test.ts:266)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/users (src/validator/frontend-update-generator.test.ts:266)"}, "fullDescription": {"text": "`src/validator/frontend-update-generator.test.ts:266` calls `GET /api/v1/users` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/users`\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-7fb05a998f42ca52", "name": "Dangling fetch: GET /api/v2/users (src/validator/frontend-update-generator.test.ts:267)", "shortDescription": {"text": "Dangling fetch: GET /api/v2/users (src/validator/frontend-update-generator.test.ts:267)"}, "fullDescription": {"text": "`src/validator/frontend-update-generator.test.ts:267` calls `GET /api/v2/users` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v2/users`\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-e3ab96b4257c85c3", "name": "Dangling fetch: GET /api/v1/users (src/validator/frontend-update-generator.test.ts:284)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/users (src/validator/frontend-update-generator.test.ts:284)"}, "fullDescription": {"text": "`src/validator/frontend-update-generator.test.ts:284` calls `GET /api/v1/users` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/users`\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-4a81e20a1c3e918c", "name": "Dangling fetch: GET /api/v2/users (src/validator/frontend-update-generator.test.ts:285)", "shortDescription": {"text": "Dangling fetch: GET /api/v2/users (src/validator/frontend-update-generator.test.ts:285)"}, "fullDescription": {"text": "`src/validator/frontend-update-generator.test.ts:285` calls `GET /api/v2/users` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v2/users`\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-2a258e8024348dc1", "name": "Dangling fetch: GET /api/v1/users (src/validator/frontend-update-generator.test.ts:295)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/users (src/validator/frontend-update-generator.test.ts:295)"}, "fullDescription": {"text": "`src/validator/frontend-update-generator.test.ts:295` calls `GET /api/v1/users` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/users`\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-2dfa2a3b8deb5170", "name": "Dangling fetch: GET /api/v2/users (src/validator/frontend-update-generator.test.ts:296)", "shortDescription": {"text": "Dangling fetch: GET /api/v2/users (src/validator/frontend-update-generator.test.ts:296)"}, "fullDescription": {"text": "`src/validator/frontend-update-generator.test.ts:296` calls `GET /api/v2/users` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v2/users`\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-38e360c5f8a1bb59", "name": "Dangling fetch: POST /api/v1/posts (src/validator/frontend-update-generator.test.ts:273)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/posts (src/validator/frontend-update-generator.test.ts:273)"}, "fullDescription": {"text": "`src/validator/frontend-update-generator.test.ts:273` calls `POST /api/v1/posts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/v1/posts`\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-66e3ea32a3551052", "name": "Dangling fetch: POST /api/v2/posts (src/validator/frontend-update-generator.test.ts:274)", "shortDescription": {"text": "Dangling fetch: POST /api/v2/posts (src/validator/frontend-update-generator.test.ts:274)"}, "fullDescription": {"text": "`src/validator/frontend-update-generator.test.ts:274` calls `POST /api/v2/posts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/v2/posts`\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-10d923db7498432f", "name": "Dangling fetch: GET /api/ignored (src/fileGeneration/saveFrontendCalls.test.ts:235)", "shortDescription": {"text": "Dangling fetch: GET /api/ignored (src/fileGeneration/saveFrontendCalls.test.ts:235)"}, "fullDescription": {"text": "`src/fileGeneration/saveFrontendCalls.test.ts:235` calls `GET /api/ignored` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/ignored`\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-2dde138746421efe", "name": "Dangling fetch: GET /api/posts (src/fileGeneration/saveFrontendCalls.test.ts:315)", "shortDescription": {"text": "Dangling fetch: GET /api/posts (src/fileGeneration/saveFrontendCalls.test.ts:315)"}, "fullDescription": {"text": "`src/fileGeneration/saveFrontendCalls.test.ts:315` calls `GET /api/posts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/posts`\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-c608d6ec58062a4d", "name": "Dangling fetch: GET /api/posts (src/fileGeneration/saveFrontendCalls.test.ts:260)", "shortDescription": {"text": "Dangling fetch: GET /api/posts (src/fileGeneration/saveFrontendCalls.test.ts:260)"}, "fullDescription": {"text": "`src/fileGeneration/saveFrontendCalls.test.ts:260` calls `GET /api/posts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/posts`\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-f9c7f9ffa31fac21", "name": "Dangling fetch: GET /api/posts (src/fileGeneration/saveFrontendCalls.test.ts:350)", "shortDescription": {"text": "Dangling fetch: GET /api/posts (src/fileGeneration/saveFrontendCalls.test.ts:350)"}, "fullDescription": {"text": "`src/fileGeneration/saveFrontendCalls.test.ts:350` calls `GET /api/posts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/posts`\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-7e79314830906ef4", "name": "Unused endpoint: GET /path", "shortDescription": {"text": "Unused endpoint: GET /path"}, "fullDescription": {"text": "`src/analyzer/route-parsers.ts` declares `GET /path` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-24839830176a6b46", "name": "Unused endpoint: GET /items/{item_id}", "shortDescription": {"text": "Unused endpoint: GET /items/{item_id}"}, "fullDescription": {"text": "`src/analyzer/route-parsers.ts` declares `GET /items/{item_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3a3c45156489b020", "name": "Unused endpoint: GET /api/users", "shortDescription": {"text": "Unused endpoint: GET /api/users"}, "fullDescription": {"text": "`src/analyzer/route-parsers.ts` declares `GET /api/users` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-618721b912bad1c2", "name": "Unused endpoint: POST /login", "shortDescription": {"text": "Unused endpoint: POST /login"}, "fullDescription": {"text": "`src/analyzer/route-parsers.ts` declares `POST /login` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/20205"}, "properties": {"repository": "srwlli/coderef-core", "repoUrl": "https://github.com/srwlli/coderef-core", "branch": "main"}, "results": [{"ruleId": "scanner-dfcf838a2cd3d38f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 demo-all-modules.ts:71"}, "properties": {"repobilityId": "a24b387fc85ea618", "scanner": "scanner-primary", "fingerprint": "dfcf838a2cd3d38f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-34e3148151e0fc86", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 __tests__/element-extractor.test.ts:439"}, "properties": {"repobilityId": "66b78bc64f06abc6", "scanner": "scanner-primary", "fingerprint": "34e3148151e0fc86", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b7d253a7631881b2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 __tests__/venv-exclusion.test.ts:82"}, "properties": {"repobilityId": "dd57d5eac00ec34d", "scanner": "scanner-primary", "fingerprint": "b7d253a7631881b2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6a1d1f512917a841", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 __tests__/orphan-detection.test.ts:48"}, "properties": {"repobilityId": "9dcb2b32b8b306d7", "scanner": "scanner-primary", "fingerprint": "6a1d1f512917a841", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9adac776584d5238", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 __tests__/accuracy-validation.test.ts:227"}, "properties": {"repobilityId": "1f9c1d11186b0141", "scanner": "scanner-primary", "fingerprint": "9adac776584d5238", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b3bc0cfe05f04b4b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 __tests__/ast-element-scanner.test.ts:262"}, "properties": {"repobilityId": "ed1c89bf0d1dfc14", "scanner": "scanner-primary", "fingerprint": "b3bc0cfe05f04b4b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b4f673ff62b5691f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 __tests__/integration.test.ts:52"}, "properties": {"repobilityId": "ce647d44a243b164", "scanner": "scanner-primary", "fingerprint": "b4f673ff62b5691f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c691d2a377a791c8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 __tests__/pipeline-integration.test.ts:50"}, "properties": {"repobilityId": "7320562973cd0775", "scanner": "scanner-primary", "fingerprint": "c691d2a377a791c8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f81ccf8c8701269c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 __tests__/scanner-standalone.test.ts:356"}, "properties": {"repobilityId": "ea2101696a72f789", "scanner": "scanner-primary", "fingerprint": "f81ccf8c8701269c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-97b6bddc6f4c5dc8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 __tests__/pipeline/builtin-classification.test.ts:155"}, "properties": {"repobilityId": "9ad232bea1677f22", "scanner": "scanner-primary", "fingerprint": "97b6bddc6f4c5dc8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0cde14fc1bfcd946", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-intelligence.js:97"}, "properties": {"repobilityId": "4b63d5dbc08ff74a", "scanner": "scanner-primary", "fingerprint": "0cde14fc1bfcd946", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-29b4e1c94328ceb3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/doc-gen/validate-docs.js:50"}, "properties": {"repobilityId": "1704a60caf2c238b", "scanner": "scanner-primary", "fingerprint": "29b4e1c94328ceb3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-af1947d91d9d71c1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/doc-gen/generate-hotspots-md.js:193"}, "properties": {"repobilityId": "34eb214bf2785db4", "scanner": "scanner-primary", "fingerprint": "af1947d91d9d71c1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ea7e398a3c44c24d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/doc-gen/generate-index-md.js:146"}, "properties": {"repobilityId": "28e77c4297762b5f", "scanner": "scanner-primary", "fingerprint": "ea7e398a3c44c24d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4ae0dead1ebb46e1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/doc-gen/generate-meta-json.js:70"}, "properties": {"repobilityId": "2e4518c96a507dcc", "scanner": "scanner-primary", "fingerprint": "4ae0dead1ebb46e1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-45251319c8b0a40b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/doc-gen/utils.js:95"}, "properties": {"repobilityId": "26ace86c77a88983", "scanner": "scanner-primary", "fingerprint": "45251319c8b0a40b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-dd149f49556dfacd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/doc-gen/enhance-existing-docs.js:47"}, "properties": {"repobilityId": "1bf3c1048a79a793", "scanner": "scanner-primary", "fingerprint": "dd149f49556dfacd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f6463ce1956c5ee8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/doc-gen/generate-exports-md.js:212"}, "properties": {"repobilityId": "6a77dbfd26172db9", "scanner": "scanner-primary", "fingerprint": "f6463ce1956c5ee8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-75e4d37923afb773", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/doc-gen/generate-relationships-md.js:221"}, "properties": {"repobilityId": "6879e6189ae96657", "scanner": "scanner-primary", "fingerprint": "75e4d37923afb773", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d1321f60455a94be", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 examples/nextjs-api-route.ts:365"}, "properties": {"repobilityId": "1198ca6b78aa5341", "scanner": "scanner-primary", "fingerprint": "d1321f60455a94be", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-55cd5439920dbdaf", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/index.ts:148"}, "properties": {"repobilityId": "867f5b4f120dafeb", "scanner": "scanner-primary", "fingerprint": "55cd5439920dbdaf", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d067fa193ee2475e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/integration/vector/vector-store.ts:266"}, "properties": {"repobilityId": "917e3d98d828ae5b", "scanner": "scanner-primary", "fingerprint": "d067fa193ee2475e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-dc768ebb1114dabf", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/integration/llm/llm-provider.ts:144"}, "properties": {"repobilityId": "28ee91241784b232", "scanner": "scanner-primary", "fingerprint": "dc768ebb1114dabf", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a6072a15bb75b9a2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/config/presets.ts:173"}, "properties": {"repobilityId": "dd316f4d40ce50e1", "scanner": "scanner-primary", "fingerprint": "a6072a15bb75b9a2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bbf4fc09fd5548e3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/cli/coderef-rag-server.ts:93"}, "properties": {"repobilityId": "9e72df1780ab1a2e", "scanner": "scanner-primary", "fingerprint": "bbf4fc09fd5548e3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1d67fb8052252ea3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/cli/rag-status.ts:90"}, "properties": {"repobilityId": "697bdccd4158d912", "scanner": "scanner-primary", "fingerprint": "1d67fb8052252ea3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-96166b6b873ea93b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/cli/detect-languages-cli.ts:12"}, "properties": {"repobilityId": "2e372931d3ddc431", "scanner": "scanner-primary", "fingerprint": "96166b6b873ea93b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d6702263e67ef408", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/cli/rag-search.ts:210"}, "properties": {"repobilityId": "d606208f97ddc24d", "scanner": "scanner-primary", "fingerprint": "d6702263e67ef408", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-994c0e85b382eac9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/cli/validate-routes.ts:106"}, "properties": {"repobilityId": "60c46262d10a9cfc", "scanner": "scanner-primary", "fingerprint": "994c0e85b382eac9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f34ea07a052c5ec2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/cli/populate.ts:215"}, "properties": {"repobilityId": "376df171b2bb9e8f", "scanner": "scanner-primary", "fingerprint": "f34ea07a052c5ec2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9f022af3c8081512", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/cli/rag-eval.ts:203"}, "properties": {"repobilityId": "638c2a0b990113c8", "scanner": "scanner-primary", "fingerprint": "9f022af3c8081512", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-14bade29bd959cf0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/cli/coderef-search.ts:14"}, "properties": {"repobilityId": "c0b36e2434309eac", "scanner": "scanner-primary", "fingerprint": "14bade29bd959cf0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f5930822460f4fd1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/cli/rag-index.ts:207"}, "properties": {"repobilityId": "b2a08a439c79574c", "scanner": "scanner-primary", "fingerprint": "f5930822460f4fd1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-982c94d303a68399", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/cli/scan-frontend-calls.ts:69"}, "properties": {"repobilityId": "dff5acca9511e135", "scanner": "scanner-primary", "fingerprint": "982c94d303a68399", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d0780db828a06f25", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/cli/coderef-pipeline.ts:52"}, "properties": {"repobilityId": "07c5ae4e14e5fb0c", "scanner": "scanner-primary", "fingerprint": "d0780db828a06f25", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2421285f141413b9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/cli/coderef-query.ts:20"}, "properties": {"repobilityId": "7fdcc26bdadfb58b", "scanner": "scanner-primary", "fingerprint": "2421285f141413b9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d700afcd1fa7d87a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/cli/semantic-integration-cli.ts:12"}, "properties": {"repobilityId": "3340502d657a5531", "scanner": "scanner-primary", "fingerprint": "d700afcd1fa7d87a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-dbd9e6dbac19d887", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/cli/scan.ts:34"}, "properties": {"repobilityId": "c9dcaf0888e85cdb", "scanner": "scanner-primary", "fingerprint": "dbd9e6dbac19d887", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9239cee0029ae8ea", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/cli/coderef-analyze.ts:32"}, "properties": {"repobilityId": "581aed193e1376a2", "scanner": "scanner-primary", "fingerprint": "9239cee0029ae8ea", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a05d1f862e42b534", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/cli/coderef-watch.ts:67"}, "properties": {"repobilityId": "e5aaf7f3bca2a2ef", "scanner": "scanner-primary", "fingerprint": "a05d1f862e42b534", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8b4cbd65eb066b9b", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/analyzer/js-call-detector/parser.ts:142"}, "properties": {"repobilityId": "c6b14735c3682df4", "scanner": "scanner-primary", "fingerprint": "8b4cbd65eb066b9b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-a7c4c35a8e95d370", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/scanner/error-reporter.ts:211"}, "properties": {"repobilityId": "35b2aef1a45ea14b", "scanner": "scanner-primary", "fingerprint": "a7c4c35a8e95d370", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-237489dba3ed1512", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/scanner/frontend-scanner.ts:139"}, "properties": {"repobilityId": "c2d0ac66fb896276", "scanner": "scanner-primary", "fingerprint": "237489dba3ed1512", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d5873994799127b9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/scanner/__tests__/relationship-tracking.test.ts:224"}, "properties": {"repobilityId": "d8f27f0e5c710b9d", "scanner": "scanner-primary", "fingerprint": "d5873994799127b9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3ed6c933df14d958", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/scanner/__tests__/parallel-processing.test.ts:219"}, "properties": {"repobilityId": "5db3963e143d1628", "scanner": "scanner-primary", "fingerprint": "3ed6c933df14d958", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cd2a2221008c5663", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/validator/report-generator.ts:211"}, "properties": {"repobilityId": "c59151ede017facc", "scanner": "scanner-primary", "fingerprint": "cd2a2221008c5663", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-9d6b25b332430b06", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/validator/migration-mapper.ts:288"}, "properties": {"repobilityId": "971643e582674cfe", "scanner": "scanner-primary", "fingerprint": "9d6b25b332430b06", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5055fa34031f6188", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/validator/route-validator.ts:377"}, "properties": {"repobilityId": "580d2f7e8349da1b", "scanner": "scanner-primary", "fingerprint": "5055fa34031f6188", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4c3aed0c430e0a9e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/context/__tests__/complexity-scorer.test.ts:130"}, "properties": {"repobilityId": "4a5f8c36b8d6177b", "scanner": "scanner-primary", "fingerprint": "4c3aed0c430e0a9e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4f2758d48a5bc24c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/fileGeneration/saveFrontendCalls.ts:183"}, "properties": {"repobilityId": "8eb3024001e7b306", "scanner": "scanner-primary", "fingerprint": "4f2758d48a5bc24c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-439cc31aa6bf41c2", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in __tests__/foundation-docs-meta-writer.test.mjs:19"}, "properties": {"repobilityId": "76e1c1bf312ecb92", "scanner": "scanner-primary", "fingerprint": "439cc31aa6bf41c2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "__tests__/foundation-docs-meta-writer.test.mjs"}, "region": {"startLine": 19}}}]}, {"ruleId": "scanner-16d1d0f2a16dfc8e", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in __tests__/coderef-watch-heartbeat-schema.test.mjs:15"}, "properties": {"repobilityId": "dc519dcd6e7c5b9c", "scanner": "scanner-primary", "fingerprint": "16d1d0f2a16dfc8e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "__tests__/coderef-watch-heartbeat-schema.test.mjs"}, "region": {"startLine": 15}}}]}, {"ruleId": "scanner-f263fe772b3f3cf9", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in __tests__/coderef-watch-debounce.test.mjs:13"}, "properties": {"repobilityId": "9edf1498d387cc23", "scanner": "scanner-primary", "fingerprint": "f263fe772b3f3cf9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "__tests__/coderef-watch-debounce.test.mjs"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-42b06f7b7c59f03b", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in __tests__/coderef-rag-server-query-degraded.test.mjs:19"}, "properties": {"repobilityId": "7ed78fa011a17678", "scanner": "scanner-primary", "fingerprint": "42b06f7b7c59f03b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "__tests__/coderef-rag-server-query-degraded.test.mjs"}, "region": {"startLine": 19}}}]}, {"ruleId": "scanner-4f291b5e7bcdd718", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in __tests__/populate-cli.test.ts:4"}, "properties": {"repobilityId": "38835f5808f98bd8", "scanner": "scanner-primary", "fingerprint": "4f291b5e7bcdd718", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "__tests__/populate-cli.test.ts"}, "region": {"startLine": 4}}}]}, {"ruleId": "scanner-0779e2abb98d4fad", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in __tests__/coderef-rag-server-health.test.mjs:16"}, "properties": {"repobilityId": "ee3411ec70ec05f5", "scanner": "scanner-primary", "fingerprint": "0779e2abb98d4fad", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "__tests__/coderef-rag-server-health.test.mjs"}, "region": {"startLine": 16}}}]}, {"ruleId": "scanner-a7ecece754dd907f", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in __tests__/pipeline/output-validation-strict-headers.test.ts:35"}, "properties": {"repobilityId": "bbf44230196934f2", "scanner": "scanner-primary", "fingerprint": "a7ecece754dd907f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "__tests__/pipeline/output-validation-strict-headers.test.ts"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-09472f56179be12e", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in __tests__/pipeline/output-validation-report.test.ts:30"}, "properties": {"repobilityId": "360404d6604b008a", "scanner": "scanner-primary", "fingerprint": "09472f56179be12e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "__tests__/pipeline/output-validation-report.test.ts"}, "region": {"startLine": 30}}}]}, {"ruleId": "scanner-7fda7bb14b846535", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in coderef/ARCHIVED/coderef-intelligence-data-api/analysis.json:31"}, "properties": {"repobilityId": "e53cf892eb7e3328", "scanner": "scanner-primary", "fingerprint": "7fda7bb14b846535", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "coderef/ARCHIVED/coderef-intelligence-data-api/analysis.json"}, "region": {"startLine": 31}}}]}, {"ruleId": "scanner-e64446d58190e124", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in src/cli/coderef-rag-server.ts:36"}, "properties": {"repobilityId": "fa73d09c212d6f52", "scanner": "scanner-primary", "fingerprint": "e64446d58190e124", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/cli/coderef-rag-server.ts"}, "region": {"startLine": 36}}}]}, {"ruleId": "scanner-7e50d24d609a5ca2", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in src/cli/coderef-mcp-server.ts:34"}, "properties": {"repobilityId": "6856c3206b0b9558", "scanner": "scanner-primary", "fingerprint": "7e50d24d609a5ca2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/cli/coderef-mcp-server.ts"}, "region": {"startLine": 34}}}]}, {"ruleId": "scanner-16a3467617dd10dd", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in src/cli/coderef-pipeline.ts:32"}, "properties": {"repobilityId": "bd2276bd389824a8", "scanner": "scanner-primary", "fingerprint": "16a3467617dd10dd", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/cli/coderef-pipeline.ts"}, "region": {"startLine": 32}}}]}, {"ruleId": "scanner-f528634f4bb84e53", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in src/cli/coderef-watch.ts:31"}, "properties": {"repobilityId": "75ba1fd33464c807", "scanner": "scanner-primary", "fingerprint": "f528634f4bb84e53", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/cli/coderef-watch.ts"}, "region": {"startLine": 31}}}]}, {"ruleId": "scanner-ae06b4da96881f31", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in src/cli/validate-routes.test.ts:9"}, "properties": {"repobilityId": "bdfb00d6693ea970", "scanner": "scanner-primary", "fingerprint": "ae06b4da96881f31", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/cli/validate-routes.test.ts"}, "region": {"startLine": 9}}}]}, {"ruleId": "scanner-0dfa9e02707d95f5", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in src/analyzer/dependency-analyzer.ts:24"}, "properties": {"repobilityId": "ba5a35e312fa24c4", "scanner": "scanner-primary", "fingerprint": "0dfa9e02707d95f5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/analyzer/dependency-analyzer.ts"}, "region": {"startLine": 24}}}]}, {"ruleId": "scanner-e7de1e3a4c16bc35", "level": "note", "message": {"text": "Very large file: src/scanner/tree-sitter-scanner.ts (1670 lines)"}, "properties": {"repobilityId": "d164fbc2e1496385", "scanner": "scanner-primary", "fingerprint": "e7de1e3a4c16bc35", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-00ee95eee2a9944d", "level": "note", "message": {"text": "Very large file: src/scanner/scanner.ts (1675 lines)"}, "properties": {"repobilityId": "1124419a8c74940f", "scanner": "scanner-primary", "fingerprint": "00ee95eee2a9944d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-31d137036e3f2cd2", "level": "note", "message": {"text": "Very large file: src/pipeline/generators/context-generator.ts (2269 lines)"}, "properties": {"repobilityId": "a934542720941888", "scanner": "scanner-primary", "fingerprint": "31d137036e3f2cd2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "6742056e633472ed", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-8de74df1655f87d6", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: examples/plugins/example-detector/package.json"}, "properties": {"repobilityId": "c3e843ed1c7ebb58", "scanner": "scanner-primary", "fingerprint": "8de74df1655f87d6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "examples/plugins/example-detector/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "c96403c56bb2dac4", "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": "ff129ae2643dd322", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "8bb9eefd4f9ec5ed", "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": "02c3a744b9a1be0e", "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": "ebc16d48f18ae9f8", "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": "fa0b63b4cbdc264d", "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": "a3ad49533f9bf7ab", "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-d9a1291e3c41996f", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .windsurf/workflows/generate-quickstart.md"}, "properties": {"repobilityId": "aca9e54ae8b5cd24", "scanner": "scanner-primary", "fingerprint": "d9a1291e3c41996f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "agent_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".windsurf/workflows/generate-quickstart.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c85753a5d6cd9899", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .windsurf/workflows/read-session-dispatch.md"}, "properties": {"repobilityId": "c1ef46dee90e7d57", "scanner": "scanner-primary", "fingerprint": "c85753a5d6cd9899", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "agent_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".windsurf/workflows/read-session-dispatch.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e725d2ab884fbd49", "level": "note", "message": {"text": "Multiple root agent instruction files without precedence"}, "properties": {"repobilityId": "1953db6c89508d22", "scanner": "scanner-primary", "fingerprint": "e725d2ab884fbd49", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["agent-instructions", "governance"]}}, {"ruleId": "scanner-76aaad631d812100", "level": "none", "message": {"text": "Commented-code block (6 lines) in __tests__/element-extractor.test.ts:426"}, "properties": {"repobilityId": "c3fd3aa4b6463ab3", "scanner": "scanner-primary", "fingerprint": "76aaad631d812100", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f57ddd1cee79dd7e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 __tests__/element-extractor.test.ts:74"}, "properties": {"repobilityId": "5d340f75bb89e9f1", "scanner": "scanner-primary", "fingerprint": "f57ddd1cee79dd7e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a45147c8f634e734", "level": "none", "message": {"text": "Commented-code block (5 lines) in __tests__/accuracy-validation.test.ts:102"}, "properties": {"repobilityId": "15981fe193183d49", "scanner": "scanner-primary", "fingerprint": "a45147c8f634e734", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-43463ea64093d439", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 __tests__/accuracy-validation.test.ts:121"}, "properties": {"repobilityId": "ee1afa20b84425fa", "scanner": "scanner-primary", "fingerprint": "43463ea64093d439", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9b4c1b12c61b0628", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 __tests__/coderef-rag-server-query-degraded.test.mjs:57"}, "properties": {"repobilityId": "b632444ec929ddc0", "scanner": "scanner-primary", "fingerprint": "9b4c1b12c61b0628", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-856435b3c7f5f49e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 __tests__/ast-element-scanner.test.ts:37"}, "properties": {"repobilityId": "91559be6811ffe4d", "scanner": "scanner-primary", "fingerprint": "856435b3c7f5f49e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a252385d020831cd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 __tests__/relationship-extractor.test.ts:154"}, "properties": {"repobilityId": "eee0e4e9a4da619d", "scanner": "scanner-primary", "fingerprint": "a252385d020831cd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-592060fcbd915379", "level": "none", "message": {"text": "Commented-code block (5 lines) in __tests__/pipeline-integration.test.ts:183"}, "properties": {"repobilityId": "436cdfdca8e8be7f", "scanner": "scanner-primary", "fingerprint": "592060fcbd915379", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-11921736977ee98a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 __tests__/tree-sitter-scanner.test.ts:76"}, "properties": {"repobilityId": "d0756c27e425624b", "scanner": "scanner-primary", "fingerprint": "11921736977ee98a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-316a3d3b4fc278bf", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 __tests__/coderef-rag-server-health.test.mjs:73"}, "properties": {"repobilityId": "fbef1ac051014411", "scanner": "scanner-primary", "fingerprint": "316a3d3b4fc278bf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2c0196b96d21cd7c", "level": "none", "message": {"text": "Commented-code block (5 lines) in __tests__/integration/rag/indexing-orchestrator-stale-deletions.test.ts:13"}, "properties": {"repobilityId": "4cfb98e0ee243677", "scanner": "scanner-primary", "fingerprint": "2c0196b96d21cd7c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-684be8b8f33aa463", "level": "none", "message": {"text": "Commented-code block (7 lines) in __tests__/integration/rag/facet-filter.test.ts:14"}, "properties": {"repobilityId": "fc727ad5651362f4", "scanner": "scanner-primary", "fingerprint": "684be8b8f33aa463", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-15a330f4915877c2", "level": "none", "message": {"text": "Commented-code block (6 lines) in __tests__/pipeline/header-import-facts.test.ts:63"}, "properties": {"repobilityId": "a438c99f2a4b2231", "scanner": "scanner-primary", "fingerprint": "15a330f4915877c2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-abbc71d96e2c4d21", "level": "none", "message": {"text": "Commented-code block (7 lines) in __tests__/pipeline/graph-ground-truth.test.ts:47"}, "properties": {"repobilityId": "d1788ba479ae9df0", "scanner": "scanner-primary", "fingerprint": "abbc71d96e2c4d21", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2b8ac2e980ad2dd5", "level": "none", "message": {"text": "Commented-code block (5 lines) in __tests__/pipeline/graph-construction-legacy-builders.test.ts:48"}, "properties": {"repobilityId": "5208dc6e4f820011", "scanner": "scanner-primary", "fingerprint": "2b8ac2e980ad2dd5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d6cd4e3b6faf8ff3", "level": "none", "message": {"text": "Commented-code block (7 lines) in __tests__/pipeline/header-import-facts-cardinality.test.ts:14"}, "properties": {"repobilityId": "c152380d073a70cb", "scanner": "scanner-primary", "fingerprint": "d6cd4e3b6faf8ff3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ea2f2aab7632f194", "level": "none", "message": {"text": "Commented-code block (8 lines) in __tests__/pipeline/indexing-gate-invariant.test.ts:13"}, "properties": {"repobilityId": "5d3680dbd665c13c", "scanner": "scanner-primary", "fingerprint": "ea2f2aab7632f194", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-34a92888faea72b9", "level": "none", "message": {"text": "Commented-code block (6 lines) in __tests__/pipeline/header-exports-cross-check.test.ts:87"}, "properties": {"repobilityId": "a191ac2c28831a4d", "scanner": "scanner-primary", "fingerprint": "34a92888faea72b9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ff8e66282e3eb1e5", "level": "none", "message": {"text": "Commented-code block (5 lines) in __tests__/pipeline/output-validation-report.test.ts:145"}, "properties": {"repobilityId": "692299bdfa1ef171", "scanner": "scanner-primary", "fingerprint": "ff8e66282e3eb1e5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7530424895ae405e", "level": "none", "message": {"text": "Commented-code block (6 lines) in __tests__/pipeline/header-layer-runtime-validation.test.ts:55"}, "properties": {"repobilityId": "9efcf53fc7e141b4", "scanner": "scanner-primary", "fingerprint": "7530424895ae405e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-db5384c0ddd5635b", "level": "none", "message": {"text": "Commented-code block (5 lines) in coderef/archived/rag-index-single-analyzer-slice/verify-dual-ac.mjs:39"}, "properties": {"repobilityId": "47caabcb4a5c2b74", "scanner": "scanner-primary", "fingerprint": "db5384c0ddd5635b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-31c6a366e9b7b11e", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/check-header-coverage.mjs:93"}, "properties": {"repobilityId": "ad2eaa9b2595fc3f", "scanner": "scanner-primary", "fingerprint": "31c6a366e9b7b11e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-025ac5bde2b60844", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 examples/nextjs-api-route.ts:74"}, "properties": {"repobilityId": "86c2ad582f5810a9", "scanner": "scanner-primary", "fingerprint": "025ac5bde2b60844", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-463beeb4be595bd1", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/integration/vector/sqlite-store.ts:143"}, "properties": {"repobilityId": "c79f8a1e175badac", "scanner": "scanner-primary", "fingerprint": "463beeb4be595bd1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6cbc4fc15941402b", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/integration/rag/chunk-converter.ts:159"}, "properties": {"repobilityId": "e153e60e576d4e30", "scanner": "scanner-primary", "fingerprint": "6cbc4fc15941402b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-43d4149e6b9dfc85", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/integration/rag/indexing-orchestrator.ts:464"}, "properties": {"repobilityId": "89af9bf9ffaf98ac", "scanner": "scanner-primary", "fingerprint": "43d4149e6b9dfc85", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b691e3385c1902a9", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/integration/rag/__tests__/integration/indexing-pipeline.test.ts:33"}, "properties": {"repobilityId": "73c936583a0d32ba", "scanner": "scanner-primary", "fingerprint": "b691e3385c1902a9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-143d999bdb524aed", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/integration/llm/__tests__/ollama-provider-unreachable.test.ts:51"}, "properties": {"repobilityId": "198307ab3f9f5b3e", "scanner": "scanner-primary", "fingerprint": "143d999bdb524aed", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7f769659f814144c", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/cli/rag-status.ts:193"}, "properties": {"repobilityId": "59ba8d998e8e277a", "scanner": "scanner-primary", "fingerprint": "7f769659f814144c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0c923e02ab6022d6", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/cli/rag-search.ts:92"}, "properties": {"repobilityId": "30d7854d1cd41bba", "scanner": "scanner-primary", "fingerprint": "0c923e02ab6022d6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-579689a7c5844527", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/cli/populate.ts:365"}, "properties": {"repobilityId": "28ec7781d8de5a0c", "scanner": "scanner-primary", "fingerprint": "579689a7c5844527", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f53d610e6a209175", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/cli/rag-index.ts:93"}, "properties": {"repobilityId": "ad3c5b69293f2a32", "scanner": "scanner-primary", "fingerprint": "f53d610e6a209175", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-aa4f32bf04e2acb8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/cli/scan-frontend-calls.ts:175"}, "properties": {"repobilityId": "907b21a1c6d3262a", "scanner": "scanner-primary", "fingerprint": "aa4f32bf04e2acb8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5ef32ff121f8bd96", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/analyzer/ast-element-scanner.ts:206"}, "properties": {"repobilityId": "7214cc2779201fdb", "scanner": "scanner-primary", "fingerprint": "5ef32ff121f8bd96", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e4fedd67ce880a13", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/analyzer/frontend-call-parsers.ts:21"}, "properties": {"repobilityId": "093816fae8dc9e95", "scanner": "scanner-primary", "fingerprint": "e4fedd67ce880a13", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b8a4d7e00eacb531", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/analyzer/frontend-call-parsers.test.ts:20"}, "properties": {"repobilityId": "49b09ec8889efc57", "scanner": "scanner-primary", "fingerprint": "b8a4d7e00eacb531", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9fd2c6f6c328ab5d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scanner/scanner.ts:83"}, "properties": {"repobilityId": "f342e151470227b4", "scanner": "scanner-primary", "fingerprint": "9fd2c6f6c328ab5d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cb7189ffe65d91d6", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/pipeline/import-resolver.ts:346"}, "properties": {"repobilityId": "9bf399931fcdeb79", "scanner": "scanner-primary", "fingerprint": "cb7189ffe65d91d6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2e2e1cdeef60045f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pipeline/output-validator.ts:332"}, "properties": {"repobilityId": "bf051475738a2806", "scanner": "scanner-primary", "fingerprint": "2e2e1cdeef60045f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-890d093bff5c21b8", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pipeline/graph-builder.ts:269"}, "properties": {"repobilityId": "ca10b18deb9bcc9b", "scanner": "scanner-primary", "fingerprint": "890d093bff5c21b8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ac1c0f59a2e9115a", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/pipeline/call-resolver.ts:692"}, "properties": {"repobilityId": "74acba4fe661bfff", "scanner": "scanner-primary", "fingerprint": "ac1c0f59a2e9115a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3387830fb31534cf", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/pipeline/orchestrator.ts:197"}, "properties": {"repobilityId": "d2cc151765522606", "scanner": "scanner-primary", "fingerprint": "3387830fb31534cf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7505a5ae734a133b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pipeline/extractors/element-extractor.ts:103"}, "properties": {"repobilityId": "a21c8c33d32c685a", "scanner": "scanner-primary", "fingerprint": "7505a5ae734a133b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-42944260c8ea2675", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/pipeline/generators/context-generator.ts:502"}, "properties": {"repobilityId": "53f6d8acc7d82d03", "scanner": "scanner-primary", "fingerprint": "42944260c8ea2675", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6cae70d708e6dae0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/validator/frontend-update-generator.test.ts:266"}, "properties": {"repobilityId": "22809f67e9f4b9ab", "scanner": "scanner-primary", "fingerprint": "6cae70d708e6dae0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ba04f640f302ee66", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/fileGeneration/saveFrontendCalls.test.ts:162"}, "properties": {"repobilityId": "4a646707348f27cc", "scanner": "scanner-primary", "fingerprint": "ba04f640f302ee66", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-51ab4b1a73cd34ec", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/health (__tests__/coderef-rag-server-query-degraded.test.mjs:121)"}, "properties": {"repobilityId": "1365d16fc6187f83", "scanner": "scanner-primary", "fingerprint": "51ab4b1a73cd34ec", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7c5b150f0b46864b", "level": "error", "message": {"text": "Dangling fetch: POST http://127.0.0.1:${port}/api/rag/query (__tests__/coderef-rag-server-query-degraded.test.mjs:125)"}, "properties": {"repobilityId": "af991da7a03c8b19", "scanner": "scanner-primary", "fingerprint": "7c5b150f0b46864b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-80bae3bdfa350172", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/health (__tests__/coderef-rag-server-health.test.mjs:65)"}, "properties": {"repobilityId": "833bb5eb2adbdffb", "scanner": "scanner-primary", "fingerprint": "80bae3bdfa350172", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e171327d440872d6", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/rag/status (__tests__/coderef-rag-server-health.test.mjs:73)"}, "properties": {"repobilityId": "56c9029a95e9ff33", "scanner": "scanner-primary", "fingerprint": "e171327d440872d6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-09f04dd304dfb7a8", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/nonexistent (__tests__/coderef-rag-server-health.test.mjs:83)"}, "properties": {"repobilityId": "5b6a6c765fd07148", "scanner": "scanner-primary", "fingerprint": "09f04dd304dfb7a8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f01909b7d2c57f96", "level": "error", "message": {"text": "Dangling fetch: GET /api (__tests__/ast-element-scanner.test.ts:37)"}, "properties": {"repobilityId": "2c2e51811398e378", "scanner": "scanner-primary", "fingerprint": "f01909b7d2c57f96", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f862b1702d2a1ee3", "level": "error", "message": {"text": "Dangling fetch: POST /api/scan (examples/nextjs-api-route.ts:74)"}, "properties": {"repobilityId": "393a7309b4f090b3", "scanner": "scanner-primary", "fingerprint": "f862b1702d2a1ee3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2813c18e2111bac8", "level": "error", "message": {"text": "Dangling fetch: POST /api/scan (examples/nextjs-api-route.ts:457)"}, "properties": {"repobilityId": "a4873afc2353eb56", "scanner": "scanner-primary", "fingerprint": "2813c18e2111bac8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d77ee44906d048c8", "level": "error", "message": {"text": "Dangling fetch: GET /api/users/${id} (src/analyzer/frontend-call-parsers.ts:33)"}, "properties": {"repobilityId": "2bba107344804931", "scanner": "scanner-primary", "fingerprint": "d77ee44906d048c8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d249962e7e6b0839", "level": "error", "message": {"text": "Dangling fetch: GET /api/users/${id} (src/analyzer/frontend-call-parsers.ts:326)"}, "properties": {"repobilityId": "88b565bebb7967e2", "scanner": "scanner-primary", "fingerprint": "d249962e7e6b0839", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-41431cb0add9019f", "level": "error", "message": {"text": "Dangling fetch: GET /api/users/${id} (src/analyzer/frontend-call-parsers.test.ts:35)"}, "properties": {"repobilityId": "3f815d09f82411cc", "scanner": "scanner-primary", "fingerprint": "41431cb0add9019f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-80aa4109b199ab4d", "level": "error", "message": {"text": "Dangling fetch: GET /api/boards/${boardId}/cards/${cardId} (src/analyzer/frontend-call-parsers.test.ts:53)"}, "properties": {"repobilityId": "4844d2ebaf96fcc0", "scanner": "scanner-primary", "fingerprint": "80aa4109b199ab4d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-afecc3950ad33658", "level": "error", "message": {"text": "Dangling fetch: POST /api/posts (src/analyzer/frontend-call-parsers.test.ts:84)"}, "properties": {"repobilityId": "73a7b0f0e876e5f6", "scanner": "scanner-primary", "fingerprint": "afecc3950ad33658", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b248fe5a21406a24", "level": "error", "message": {"text": "Dangling fetch: GET /api/${type}/${id}/details (src/analyzer/frontend-call-parsers.test.ts:252)"}, "properties": {"repobilityId": "2272bd0cee6808b0", "scanner": "scanner-primary", "fingerprint": "b248fe5a21406a24", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-19569296419d0357", "level": "error", "message": {"text": "Dangling fetch: GET /api/users/${id} (src/analyzer/frontend-call-parsers.test.ts:122)"}, "properties": {"repobilityId": "b0d4ee664e12434b", "scanner": "scanner-primary", "fingerprint": "19569296419d0357", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-3b2bc35a8d928033", "level": "error", "message": {"text": "Dangling fetch: PUT /api/users/1 (src/analyzer/frontend-call-parsers.test.ts:134)"}, "properties": {"repobilityId": "a98a6a08a4147c56", "scanner": "scanner-primary", "fingerprint": "3b2bc35a8d928033", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-83d67619f1736a68", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/users/1 (src/analyzer/frontend-call-parsers.test.ts:135)"}, "properties": {"repobilityId": "deb73791224d0712", "scanner": "scanner-primary", "fingerprint": "83d67619f1736a68", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-71f9f716a26e0458", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/users/1 (src/analyzer/frontend-call-parsers.test.ts:136)"}, "properties": {"repobilityId": "b4bc136f6ad0a3c3", "scanner": "scanner-primary", "fingerprint": "71f9f716a26e0458", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-2e970a438d252670", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/users (src/validator/frontend-update-generator.test.ts:266)"}, "properties": {"repobilityId": "6a33759781fffef8", "scanner": "scanner-primary", "fingerprint": "2e970a438d252670", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7fb05a998f42ca52", "level": "error", "message": {"text": "Dangling fetch: GET /api/v2/users (src/validator/frontend-update-generator.test.ts:267)"}, "properties": {"repobilityId": "3d2c659f4eade08e", "scanner": "scanner-primary", "fingerprint": "7fb05a998f42ca52", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e3ab96b4257c85c3", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/users (src/validator/frontend-update-generator.test.ts:284)"}, "properties": {"repobilityId": "cce058401b53cbc3", "scanner": "scanner-primary", "fingerprint": "e3ab96b4257c85c3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4a81e20a1c3e918c", "level": "error", "message": {"text": "Dangling fetch: GET /api/v2/users (src/validator/frontend-update-generator.test.ts:285)"}, "properties": {"repobilityId": "19fa8c8d4b60e087", "scanner": "scanner-primary", "fingerprint": "4a81e20a1c3e918c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2a258e8024348dc1", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/users (src/validator/frontend-update-generator.test.ts:295)"}, "properties": {"repobilityId": "446fda95aafd62e4", "scanner": "scanner-primary", "fingerprint": "2a258e8024348dc1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2dfa2a3b8deb5170", "level": "error", "message": {"text": "Dangling fetch: GET /api/v2/users (src/validator/frontend-update-generator.test.ts:296)"}, "properties": {"repobilityId": "e529202269148a94", "scanner": "scanner-primary", "fingerprint": "2dfa2a3b8deb5170", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-38e360c5f8a1bb59", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/posts (src/validator/frontend-update-generator.test.ts:273)"}, "properties": {"repobilityId": "b987183b040d945c", "scanner": "scanner-primary", "fingerprint": "38e360c5f8a1bb59", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-66e3ea32a3551052", "level": "error", "message": {"text": "Dangling fetch: POST /api/v2/posts (src/validator/frontend-update-generator.test.ts:274)"}, "properties": {"repobilityId": "7f91a3823174c53b", "scanner": "scanner-primary", "fingerprint": "66e3ea32a3551052", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-10d923db7498432f", "level": "error", "message": {"text": "Dangling fetch: GET /api/ignored (src/fileGeneration/saveFrontendCalls.test.ts:235)"}, "properties": {"repobilityId": "ff4a391495b9f144", "scanner": "scanner-primary", "fingerprint": "10d923db7498432f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2dde138746421efe", "level": "error", "message": {"text": "Dangling fetch: GET /api/posts (src/fileGeneration/saveFrontendCalls.test.ts:315)"}, "properties": {"repobilityId": "26f8da8215cdfcb3", "scanner": "scanner-primary", "fingerprint": "2dde138746421efe", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c608d6ec58062a4d", "level": "error", "message": {"text": "Dangling fetch: GET /api/posts (src/fileGeneration/saveFrontendCalls.test.ts:260)"}, "properties": {"repobilityId": "ae4f2d9e5f476364", "scanner": "scanner-primary", "fingerprint": "c608d6ec58062a4d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-f9c7f9ffa31fac21", "level": "error", "message": {"text": "Dangling fetch: GET /api/posts (src/fileGeneration/saveFrontendCalls.test.ts:350)"}, "properties": {"repobilityId": "235795148d15e1a6", "scanner": "scanner-primary", "fingerprint": "f9c7f9ffa31fac21", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-7e79314830906ef4", "level": "note", "message": {"text": "Unused endpoint: GET /path"}, "properties": {"repobilityId": "2627254a5955ed3a", "scanner": "scanner-primary", "fingerprint": "7e79314830906ef4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-24839830176a6b46", "level": "note", "message": {"text": "Unused endpoint: GET /items/{item_id}"}, "properties": {"repobilityId": "87b056bbc667a586", "scanner": "scanner-primary", "fingerprint": "24839830176a6b46", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3a3c45156489b020", "level": "note", "message": {"text": "Unused endpoint: GET /api/users"}, "properties": {"repobilityId": "a89c542e422b67ff", "scanner": "scanner-primary", "fingerprint": "3a3c45156489b020", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-618721b912bad1c2", "level": "note", "message": {"text": "Unused endpoint: POST /login"}, "properties": {"repobilityId": "b42fed07ec78b88d", "scanner": "scanner-primary", "fingerprint": "618721b912bad1c2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}