{"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-6924ad1e7816fa2e", "name": "Possibly dead Python function: format_number", "shortDescription": {"text": "Possibly dead Python function: format_number"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5e92eaae0b6fef80", "name": "Possibly dead Python function: apply_style", "shortDescription": {"text": "Possibly dead Python function: apply_style"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4918dc5fd27171c3", "name": "Possibly dead Python function: format_num", "shortDescription": {"text": "Possibly dead Python function: format_num"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0cf87191924e4a57", "name": "Possibly dead Python function: format_number", "shortDescription": {"text": "Possibly dead Python function: format_number"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-24674087d58454f9", "name": "Possibly dead Python function: apply_style", "shortDescription": {"text": "Possibly dead Python function: apply_style"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5a6a3f253e7f4a8b", "name": "Possibly dead Python function: format_num", "shortDescription": {"text": "Possibly dead Python function: format_num"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-070866f2665a321b", "name": "Stray `console.log` in TS/JS \u2014 worker/youtube-dl/src/index.ts:40", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 worker/youtube-dl/src/index.ts:40"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1e6e13d6d806ab60", "name": "Stray `console.log` in TS/JS \u2014 worker/rfp-parser/src/index.ts:8", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 worker/rfp-parser/src/index.ts:8"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a6057dbe28b7e257", "name": "Stray `console.log` in TS/JS \u2014 worker/rfp-parser/src/poll.ts:141", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 worker/rfp-parser/src/poll.ts:141"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9303e2d2a83a7a9b", "name": "Stray `console.log` in TS/JS \u2014 rfp-system-export/rfp-system-export/server/rfp-normalizer.ts:590", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 rfp-system-export/rfp-system-export/server/rfp-normalizer.ts:590"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5da5ebf6fcd03b77", "name": "Stray `console.log` in TS/JS \u2014 rfp-system-export/rfp-system-export/server/rfp-crawler.ts:160", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 rfp-system-export/rfp-system-export/server/rfp-crawler.ts:160"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dc38082a1456429e", "name": "Stray `console.log` in TS/JS \u2014 rfp-system-export/rfp-system-export/server/rfp-scheduler.ts:25", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 rfp-system-export/rfp-system-export/server/rfp-scheduler.ts:25"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b791b82e1e01b137", "name": "Stray `console.log` in TS/JS \u2014 rfp-system-export/rfp-system-export/server/rfp-multihop-crawler.ts:58", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 rfp-system-export/rfp-system-export/server/rfp-multihop-crawler.ts:58"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e62a80020b52bbbf", "name": "Stray `console.log` in TS/JS \u2014 rfp-system-export/rfp-system-export/server/services/rfp-detail-extractor.ts:77", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 rfp-system-export/rfp-system-export/server/services/rfp-detail-extractor.ts:77"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3e5582ed3aa8204f", "name": "TODO/FIXME marker in shipping code \u2014 rfp-system-export/rfp-system-export/server/services/mice-rfp-crawler.ts:260", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 rfp-system-export/rfp-system-export/server/services/mice-rfp-crawler.ts:260"}, "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-285661d4c35f9f21", "name": "Stray `console.log` in TS/JS \u2014 rfp-system-export/rfp-system-export/server/services/mice-rfp-crawler.ts:257", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 rfp-system-export/rfp-system-export/server/services/mice-rfp-crawler.ts:257"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ccaf0d12c0c22087", "name": "Stray `console.log` in TS/JS \u2014 rfp-system-export/rfp-system-export/server/services/rfp-filter-service.ts:50", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 rfp-system-export/rfp-system-export/server/services/rfp-filter-service.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-2719e6b542640876", "name": "Stray `console.log` in TS/JS \u2014 rfp-system-export/rfp-system-export/server/services/rfp-attachment-processor.ts:179", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 rfp-system-export/rfp-system-export/server/services/rfp-attachment-processor.ts:179"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-90f4f71e0c39fb0f", "name": "Stray `console.log` in TS/JS \u2014 rfp-system-export/rfp-system-export/server/services/rfp-aggregate-parser.ts:141", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 rfp-system-export/rfp-system-export/server/services/rfp-aggregate-parser.ts:141"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aa4a6f45157308c1", "name": "`truncate` class without `title=` for hover reveal \u2014 rfp-system-export/rfp-system-export/client/RfpPage.tsx:352", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 rfp-system-export/rfp-system-export/client/RfpPage.tsx:352"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d1cac2c12fda16ee", "name": "Stray `console.log` in TS/JS \u2014 scripts/migrate-to-object-storage.ts:38", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-to-object-storage.ts:38"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e88f3accfccadb74", "name": "Stray `console.log` in TS/JS \u2014 scripts/reset-password.ts:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/reset-password.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-aaeb25371d6bd62b", "name": "Stray `console.log` in TS/JS \u2014 scripts/dedup-listings.ts:65", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/dedup-listings.ts:65"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e120e14aaa993f56", "name": "Stray `console.log` in TS/JS \u2014 scripts/migrate-legacy-data.ts:73", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-legacy-data.ts:73"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e84dd7580473cb1d", "name": "Stray `console.log` in TS/JS \u2014 scripts/sanity-check-r2.ts:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/sanity-check-r2.ts:10"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-499b90846212c9cd", "name": "Stray `console.log` in TS/JS \u2014 scripts/setup-dedup-index.ts:63", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/setup-dedup-index.ts:63"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-beb7cae61493cc89", "name": "Stray `console.log` in TS/JS \u2014 scripts/cleanup-g2b-irrelevant.ts:26", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/cleanup-g2b-irrelevant.ts:26"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3e6affd69973058e", "name": "Stray `console.log` in TS/JS \u2014 scripts/migrate-gcs-to-r2.ts:192", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-gcs-to-r2.ts:192"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9600ef73f0986be9", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-certificates.ts:63", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-certificates.ts:63"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5fb32eab1a6388a8", "name": "Stray `console.log` in TS/JS \u2014 scripts/sync-replit-disk-to-r2.ts:140", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/sync-replit-disk-to-r2.ts:140"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e9f77c9aaadfcc04", "name": "Stray `console.log` in TS/JS \u2014 scripts/create-admin.ts:8", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/create-admin.ts:8"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-656a8fd1cac412a8", "name": "Stray `console.log` in TS/JS \u2014 scripts/sync-uploads-to-object-storage.ts:8", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/sync-uploads-to-object-storage.ts:8"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f67ea93f58a7326f", "name": "Stray `console.log` in TS/JS \u2014 scripts/probe-award-participants.ts:156", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/probe-award-participants.ts:156"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-397b94a178c532fa", "name": "Stray `console.log` in TS/JS \u2014 script/cleanup-rfp-duplicates.ts:30", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 script/cleanup-rfp-duplicates.ts:30"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a7b51da80c1921d8", "name": "Stray `console.log` in TS/JS \u2014 script/seed-serpapi-queries.ts:49", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 script/seed-serpapi-queries.ts:49"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-173b2fdd1ba17305", "name": "Stray `console.log` in TS/JS \u2014 script/check-withholding.ts:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 script/check-withholding.ts:17"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6a8e5d3586ee72e0", "name": "Stray `console.log` in TS/JS \u2014 script/build.ts:78", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 script/build.ts:78"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-03a4ca8026692c86", "name": "Stray `console.log` in TS/JS \u2014 script/smoke/score-relevance.ts:6", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 script/smoke/score-relevance.ts:6"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dfb0707c90b08cf8", "name": "Stray `console.log` in TS/JS \u2014 script/smoke/serpapi-budget.ts:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 script/smoke/serpapi-budget.ts:13"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-07a4079981e3db4e", "name": "Stray `console.log` in TS/JS \u2014 server/index.ts:248", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/index.ts:248"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6e335d15b9f4b9f7", "name": "Stray `console.log` in TS/JS \u2014 server/analysis-worker.ts:37", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/analysis-worker.ts:37"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-354353377ce9707a", "name": "Stray `console.log` in TS/JS \u2014 server/storage.ts:2162", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/storage.ts:2162"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bd640009e47b91f1", "name": "Stray `console.log` in TS/JS \u2014 server/seed-research-lab.ts:30", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/seed-research-lab.ts:30"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ed5cdaddb20ab958", "name": "Stray `console.log` in TS/JS \u2014 server/crawler-scheduler.ts:57", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/crawler-scheduler.ts:57"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dc0c914843448f1b", "name": "Stray `console.log` in TS/JS \u2014 server/seed-dev-log.ts:8", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/seed-dev-log.ts:8"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9bc43eb0376bfa2e", "name": "Stray `console.log` in TS/JS \u2014 server/notification-scheduler.ts:125", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/notification-scheduler.ts:125"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-55645bcf84f337b9", "name": "Stray `console.log` in TS/JS \u2014 server/seed-leveling.ts:54", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/seed-leveling.ts:54"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-72e7abf961300372", "name": "Stray `console.log` in TS/JS \u2014 server/seed-question-bank.ts:69", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/seed-question-bank.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-ace3766f6d57319b", "name": "Stray `console.log` in TS/JS \u2014 server/pdf-service.ts:34", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/pdf-service.ts:34"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c7d89a710a872884", "name": "Stray `console.log` in TS/JS \u2014 server/routes.ts:402", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/routes.ts:402"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-45a26a464b23b0f5", "name": "Stray `console.log` in TS/JS \u2014 server/crawl-state.ts:61", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/crawl-state.ts:61"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bd17d489b2ae7222", "name": "Stray `console.log` in TS/JS \u2014 server/backup-service.ts:60", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/backup-service.ts:60"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cd3304ac3fa5b3bf", "name": "Stray `console.log` in TS/JS \u2014 server/rpa-workers/government24-worker.ts:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/rpa-workers/government24-worker.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-729d2e5f66ba7d61", "name": "Stray `console.log` in TS/JS \u2014 server/rpa-workers/wetax-worker.ts:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/rpa-workers/wetax-worker.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-c5ea1d3e66384cc2", "name": "Stray `console.log` in TS/JS \u2014 server/rpa-workers/hometax-worker.ts:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/rpa-workers/hometax-worker.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-915b3049befd7f04", "name": "Stray `console.log` in TS/JS \u2014 server/object-storage/objectStorage.ts:408", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/object-storage/objectStorage.ts:408"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5dee30e230959885", "name": "Stray `console.log` in TS/JS \u2014 server/middleware/login-lock-guard.ts:118", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/middleware/login-lock-guard.ts:118"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5844afd859b1c060", "name": "Stray `console.log` in TS/JS \u2014 server/middleware/quota-guard.ts:324", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/middleware/quota-guard.ts:324"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b1644cd146673343", "name": "Stray `console.log` in TS/JS \u2014 server/services/email-service.ts:146", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/services/email-service.ts: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-fb14d470f262c25d", "name": "Stray `console.log` in TS/JS \u2014 server/services/dev-log-screenshot.ts:49", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/services/dev-log-screenshot.ts:49"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e14b032ba1a0cff8", "name": "Stray `console.log` in TS/JS \u2014 server/services/file-text-extractor.ts:185", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/services/file-text-extractor.ts:185"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6266caeb0b074041", "name": "Stray `console.log` in TS/JS \u2014 server/services/rfp-analyzer.ts:115", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/services/rfp-analyzer.ts:115"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2ccd19fe98437e1e", "name": "Stray `console.log` in TS/JS \u2014 server/services/pikk-crawler.ts:195", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/services/pikk-crawler.ts:195"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f8100e459e6cf946", "name": "Stray `console.log` in TS/JS \u2014 server/services/serpapi-crawler.ts:617", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/services/serpapi-crawler.ts:617"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f18c602abd5a4ceb", "name": "Stray `console.log` in TS/JS \u2014 server/services/custom-url-crawler.ts:365", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/services/custom-url-crawler.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-1fe13db32fd3c34a", "name": "Stray `console.log` in TS/JS \u2014 server/services/dev-log-generator.ts:87", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/services/dev-log-generator.ts:87"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2459e097e2556c58", "name": "Stray `console.log` in TS/JS \u2014 server/services/lib/fetch-page.ts:121", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/services/lib/fetch-page.ts:121"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-561f205bd922673b", "name": "Stray `console.log` in TS/JS \u2014 server/routes/auth.ts:208", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/routes/auth.ts:208"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d92c9b0aece6dc4a", "name": "Stray `console.log` in TS/JS \u2014 server/routes/rfp.ts:83", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/routes/rfp.ts:83"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e6e70832e966fa25", "name": "Stray `console.log` in TS/JS \u2014 server/routes/ai-documents.ts:145", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/routes/ai-documents.ts:145"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-53fdcadcbb5dc6db", "name": "Stray `console.log` in TS/JS \u2014 server/routes/contracts.ts:494", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/routes/contracts.ts:494"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-49bcabfc4fc654ee", "name": "Stray `console.log` in TS/JS \u2014 server/routes/pdf.ts:75", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/routes/pdf.ts:75"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a0324778495886d3", "name": "Stray `console.log` in TS/JS \u2014 server/routes/utils.ts:145", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/routes/utils.ts:145"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b1f588cccb25d2d7", "name": "Stray `console.log` in TS/JS \u2014 server/routes/evaluation.ts:1397", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/routes/evaluation.ts:1397"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ebab6e526a1a1c65", "name": "Stray `console.log` in TS/JS \u2014 server/routes/gpt-image.ts:150", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/routes/gpt-image.ts:150"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-855b6550c5980cd2", "name": "Stray `console.log` in TS/JS \u2014 server/routes/admin-maintenance.ts:81", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/routes/admin-maintenance.ts:81"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6a646cf732673bb7", "name": "Stray `console.log` in TS/JS \u2014 client/src/hooks/use-upload.ts:34", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 client/src/hooks/use-upload.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-f85dcede104347e4", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/app-sidebar.tsx:238", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/app-sidebar.tsx:238"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ce369266be434ef2", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/project-files.tsx:231", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/project-files.tsx:231"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a16f821840208137", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 client/src/components/experience-pdf.tsx:88", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 client/src/components/experience-pdf.tsx:88"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-19d25db22a83de10", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/file-preview.tsx:182", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/file-preview.tsx:182"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fe7ad845619860e8", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/file-dropzone.tsx:167", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/file-dropzone.tsx:167"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-39677f1a1d029745", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/certificate-scanner.tsx:430", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/certificate-scanner.tsx:430"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-65b5b7ba7bc56448", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 client/src/components/bid-documents/employment-certificate.tsx:91", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 client/src/components/bid-documents/employment-certificate.tsx:91"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a7b3db9745e9c497", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 client/src/components/ui/chart.tsx:81", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 client/src/components/ui/chart.tsx:81"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-48702c7313d9a9ac", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/question-bank.tsx:757", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/question-bank.tsx:757"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-73bcd593bc508a88", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/certificate-issuance.tsx:741", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/certificate-issuance.tsx:741"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f41d9396dc4999d5", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/my-evaluation.tsx:901", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/my-evaluation.tsx:901"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3a4359d09eac6540", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/projects.tsx:830", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/projects.tsx:830"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8e7355c15c3fcfe4", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 client/src/pages/access-logs.tsx:382", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 client/src/pages/access-logs.tsx:382"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1b4526f4f72a2eb4", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/company-settings.tsx:844", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/company-settings.tsx:844"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cdb367a8329ced53", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/document-generator.tsx:3319", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/document-generator.tsx:3319"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1a6a442508be8f6c", "name": "Stray `console.log` in TS/JS \u2014 client/src/pages/document-generator.tsx:311", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 client/src/pages/document-generator.tsx:311"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a1f2c19579963b67", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 client/src/pages/document-generator.tsx:3064", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 client/src/pages/document-generator.tsx:3064"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-051565f1f24d2289", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/contracts.tsx:627", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/contracts.tsx:627"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-327fd6448b435cea", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/experiences.tsx:123", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/experiences.tsx:123"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ff50bc0ee6b62c2e", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/salary-converter.tsx:131", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/salary-converter.tsx:131"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2f316a3ba5939d89", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/documents.tsx:1328", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/documents.tsx:1328"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e909e056d02e18a2", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/kpi-dashboard.tsx:651", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/kpi-dashboard.tsx:651"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f866a43872bec3cb", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/calendar.tsx:413", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/calendar.tsx:413"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7bc75b774e16415b", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/employees.tsx:756", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/employees.tsx:756"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-33e3b3bc480b4642", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/rfp.tsx:1176", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/rfp.tsx:1176"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f1455123381a1711", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/estimates.tsx:1358", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/estimates.tsx:1358"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-84ac5ffa7c3ebd4c", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/sales-records.tsx:1638", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/sales-records.tsx:1638"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d4b5ac85d9335f14", "name": "Stray `console.log` in TS/JS \u2014 client/src/pages/sales-records.tsx:1296", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 client/src/pages/sales-records.tsx:1296"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d535f30bd643a8c6", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/company-certificates.tsx:462", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/company-certificates.tsx:462"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7da598f1011e77ee", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/hermes-control.tsx:609", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/hermes-control.tsx:609"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9ba3de1ea5617d4c", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/rfp-sources.tsx:420", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/rfp-sources.tsx:420"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b59dd57783f8f995", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/bid-analytics.tsx:827", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/bid-analytics.tsx:827"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f0b00ddb2f6ab317", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/menu-permissions.tsx:435", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/menu-permissions.tsx:435"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-17a0d7a7dc2f0c85", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/dashboard.tsx:255", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/dashboard.tsx:255"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0e04571ef3b2b228", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/service-performance.tsx:882", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/service-performance.tsx:882"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fb973a13474ea1d1", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 client/src/pages/service-performance.tsx:1070", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 client/src/pages/service-performance.tsx:1070"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-55a5b4a7e91c8050", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/dev-log.tsx:274", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/dev-log.tsx:274"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5d6f6bc35aabf054", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/gpt-image.tsx:789", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/gpt-image.tsx:789"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-70cf405b43965bbe", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/ai-document-generator.tsx:327", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/ai-document-generator.tsx:327"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b634d7f76040cefa", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 client/src/pages/ai-document-generator.tsx:313", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 client/src/pages/ai-document-generator.tsx:313"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-917fbf5ffd0b8940", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/bgm-cue-sheet/index.tsx:916", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/bgm-cue-sheet/index.tsx:916"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-47d01bec87a671a5", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/research-lab/projects-tab.tsx:275", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/research-lab/projects-tab.tsx:275"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7a803e70f53836b4", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/research-lab/devlog-tab.tsx:148", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/research-lab/devlog-tab.tsx:148"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c0351a4f16128088", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/research-lab/notes-tab.tsx:320", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/research-lab/notes-tab.tsx:320"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d17a01a991e8c704", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/bid-strategy/[id].tsx:444", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/bid-strategy/[id].tsx:444"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9f2231b88ca0cdd6", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/bid-strategy/index.tsx:539", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/bid-strategy/index.tsx:539"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-33eb01527126dfc0", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/bid-strategy/new.tsx:258", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/bid-strategy/new.tsx:258"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8e192b1b8be969a9", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/bid-strategy/components/HermesProposalPanel.tsx:11", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/bid-strategy/components/HermesProposalPanel.tsx:116"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6c56b607d400875d", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/bid-strategy/components/ScoringCard.tsx:154", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/bid-strategy/components/ScoringCard.tsx:154"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-64e60597ac5493e2", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/bid-strategy/components/DocumentQAPanel.tsx:183", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/bid-strategy/components/DocumentQAPanel.tsx:183"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-eb8bf70990c56316", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/bid-strategy/components/SubmissionChecklistCard.ts", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/bid-strategy/components/SubmissionChecklistCard.tsx:234"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8c6aa45dd8300634", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/bid-strategy/components/EligibilityCard.tsx:343", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/bid-strategy/components/EligibilityCard.tsx:343"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-58b245ff083f7b64", "name": "\"active\" state uses light bg in a dark theme \u2014 client/src/pages/bid-strategy/components/EligibilityCard.tsx:1277", "shortDescription": {"text": "\"active\" state uses light bg in a dark theme \u2014 client/src/pages/bid-strategy/components/EligibilityCard.tsx:1277"}, "fullDescription": {"text": "A ternary like `active ? 'bg-white' : '...'` (or bg-gray-100/200) on a dark theme produces jarring white pills. Use a dark-emphasized active state instead \u2014 border + ring or slightly brighter dark bg. Example: `active ? 'bg-gray-800 border-gray-500 ring-1 ring-blue-500/30' : '\u2026'`.\n\nWhy: P-E in CHECKLIST.md \u2014 light bg in a dark theme is a class of regression.\nRule id: fq.active-light-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2730277529c153e3", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/bid-strategy/components/AnalysisProgressDashboard.", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/bid-strategy/components/AnalysisProgressDashboard.tsx:99"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-adeef4257f05eede", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/bid-strategy/components/BidStrategyDropzone.tsx:14", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/bid-strategy/components/BidStrategyDropzone.tsx:147"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9dc314a6f3bc8152", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/comment-picker/components/BlacklistTab.tsx:153", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/comment-picker/components/BlacklistTab.tsx:153"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-53b591a4e548d763", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/comment-picker/components/DrawTab.tsx:103", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/comment-picker/components/DrawTab.tsx:103"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ecbe8ffa24d719a7", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/comment-picker/components/HistoryTab.tsx:90", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/comment-picker/components/HistoryTab.tsx:90"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-210ff3f4d102a90e", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/comment-picker/components/AuthorName.tsx:32", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/comment-picker/components/AuthorName.tsx:32"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-06e66b9c1f5f8538", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/evaluation/index.tsx:714", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/evaluation/index.tsx:714"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-795962fa39514e43", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/evaluation/components/ScoreTab.tsx:178", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/evaluation/components/ScoreTab.tsx:178"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6baf3ce665776b8c", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/evaluation/components/ResultsTab.tsx:271", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/evaluation/components/ResultsTab.tsx:271"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-054aa9bed5f520ca", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/evaluation/components/CycleOverview.tsx:162", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/evaluation/components/CycleOverview.tsx:162"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-80935b3a4f36dfda", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/evaluation/components/SettingsDialog.tsx:1975", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/evaluation/components/SettingsDialog.tsx:1975"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-775835a41ebad1df", "name": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/company-profile/index.tsx:198", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/company-profile/index.tsx:198"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5cd40151e6c42be0", "name": "Stray `console.log` in TS/JS \u2014 client/replit_integrations/audio/index.ts:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 client/replit_integrations/audio/index.ts:17"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6a35fc023999e2a6", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 artifacts/mockup-sandbox/src/components/ui/chart.tsx:79", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 artifacts/mockup-sandbox/src/components/ui/chart.tsx:79"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7813a42c95d8d687", "name": "Docker base image is tag-pinned but not digest-pinned: node:20-bookworm-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-bookworm-slim"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-025eda0c82e06286", "name": "Dockerfile runs as root: worker/g2b-award/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: worker/g2b-award/Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-aa907c09d8c03ab3", "name": "Docker base image is tag-pinned but not digest-pinned: node:20-bookworm-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-bookworm-slim"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6c7c98fa9a9a2ed8", "name": "Dockerfile runs as root: worker/rfp-parser/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: worker/rfp-parser/Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-aaa8165578f417d1", "name": "Docker base image is tag-pinned but not digest-pinned: node:20-bookworm-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-bookworm-slim"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0365577b7f3f4122", "name": "Insecure pattern 'node_child_process' in worker/youtube-dl/src/yt-dlp.ts:4", "shortDescription": {"text": "Insecure pattern 'node_child_process' in worker/youtube-dl/src/yt-dlp.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-3fb71921abb1ff3b", "name": "Insecure pattern 'node_child_process' in worker/rfp-parser/src/convert/run-cmd.ts:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in worker/rfp-parser/src/convert/run-cmd.ts:1"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c0c6bffd0733dad1", "name": "Insecure pattern 'node_child_process' in scripts/agent-control-hermes-runner.mjs:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/agent-control-hermes-runner.mjs:2"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d9251c0b78404c4f", "name": "Possible secret in scripts/create-admin.ts", "shortDescription": {"text": "Possible secret in scripts/create-admin.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-12c256b6aef840c5", "name": "Insecure pattern 'node_child_process' in scripts/agent-control-worker.mjs:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/agent-control-worker.mjs:2"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-db17da98cae55300", "name": "Insecure pattern 'node_child_process' in scripts/rpa/insurance4-local-agent.mjs:5", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/rpa/insurance4-local-agent.mjs:5"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-98ca321393686223", "name": "Insecure pattern 'node_child_process' in script/agent-safe-commit.mjs:14", "shortDescription": {"text": "Insecure pattern 'node_child_process' in script/agent-safe-commit.mjs:14"}, "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-84c18ffb63e9e281", "name": "Insecure pattern 'node_child_process' in script/check-vercel-api-wrapper.mjs:9", "shortDescription": {"text": "Insecure pattern 'node_child_process' in script/check-vercel-api-wrapper.mjs: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-bfd2ecde65839257", "name": "Insecure pattern 'node_child_process' in script/dev-freshness-check.mjs:8", "shortDescription": {"text": "Insecure pattern 'node_child_process' in script/dev-freshness-check.mjs:8"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9b94b08516c8414", "name": "Insecure pattern 'node_child_process' in script/harness-regression-audit.mjs:8", "shortDescription": {"text": "Insecure pattern 'node_child_process' in script/harness-regression-audit.mjs:8"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0fd4045403d77d2a", "name": "Insecure pattern 'node_child_process' in script/check-shared-locks.mjs:16", "shortDescription": {"text": "Insecure pattern 'node_child_process' in script/check-shared-locks.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-079a4a289d0ce259", "name": "Insecure pattern 'node_child_process' in script/agent-precheck.mjs:13", "shortDescription": {"text": "Insecure pattern 'node_child_process' in script/agent-precheck.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-1ebcb1802ad5ead5", "name": "Insecure pattern 'node_child_process' in script/build.ts:4", "shortDescription": {"text": "Insecure pattern 'node_child_process' in script/build.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-82c0e172dd8b4736", "name": "Insecure pattern 'node_child_process' in server/rpa-queue.ts:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in server/rpa-queue.ts:2"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d0825a1adb611366", "name": "Insecure pattern 'node_child_process' in server/integrations/audio/client.ts:3", "shortDescription": {"text": "Insecure pattern 'node_child_process' in server/integrations/audio/client.ts:3"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-47444337371d6a79", "name": "Insecure pattern 'node_child_process' in server/services/youtube-download.ts:10", "shortDescription": {"text": "Insecure pattern 'node_child_process' in server/services/youtube-download.ts:10"}, "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-f39449ef60bbd2ac", "name": "Insecure pattern 'node_child_process' in server/services/youtube-comments.ts:5", "shortDescription": {"text": "Insecure pattern 'node_child_process' in server/services/youtube-comments.ts:5"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ff9d477ba3a1b8b9", "name": "Insecure pattern 'node_child_process' in server/services/dev-log-generator.ts:5", "shortDescription": {"text": "Insecure pattern 'node_child_process' in server/services/dev-log-generator.ts:5"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-df7f4704871152bb", "name": "Insecure pattern 'dangerous_innerhtml' in client/src/components/experience-pdf.tsx:88", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in client/src/components/experience-pdf.tsx:88"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-45e484ec5b8111b4", "name": "Insecure pattern 'dangerous_innerhtml' in client/src/components/bid-documents/employment-certificate.tsx:91", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in client/src/components/bid-documents/employment-certificate.tsx:91"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8df37d9232a59094", "name": "Insecure pattern 'dangerous_innerhtml' in client/src/components/ui/chart.tsx:81", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in client/src/components/ui/chart.tsx:81"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-643e11e28c5e9140", "name": "Insecure pattern 'dangerous_innerhtml' in client/src/pages/access-logs.tsx:382", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in client/src/pages/access-logs.tsx:382"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-369f79462f5877ed", "name": "Insecure pattern 'document_write' in client/src/pages/document-generator.tsx:891", "shortDescription": {"text": "Insecure pattern 'document_write' in client/src/pages/document-generator.tsx:891"}, "fullDescription": {"text": "Found a known-risky pattern (document_write). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "low", "confidence": 1.0}}, {"id": "scanner-810a164cf326eb93", "name": "Insecure pattern 'dangerous_innerhtml' in client/src/pages/document-generator.tsx:3064", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in client/src/pages/document-generator.tsx:3064"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2ece30302b888bcf", "name": "Insecure pattern 'document_write' in client/src/pages/experiences.tsx:1365", "shortDescription": {"text": "Insecure pattern 'document_write' in client/src/pages/experiences.tsx:1365"}, "fullDescription": {"text": "Found a known-risky pattern (document_write). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7e1ea43c0ea401b8", "name": "Insecure pattern 'dangerous_innerhtml' in client/src/pages/service-performance.tsx:1070", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in client/src/pages/service-performance.tsx:1070"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5530c91b547b6697", "name": "Insecure pattern 'exec_used' in client/src/pages/ai-document-generator.tsx:110", "shortDescription": {"text": "Insecure pattern 'exec_used' in client/src/pages/ai-document-generator.tsx:110"}, "fullDescription": {"text": "Found a known-risky pattern (exec_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5aae25521e29c6ad", "name": "Insecure pattern 'dangerous_innerhtml' in client/src/pages/ai-document-generator.tsx:313", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in client/src/pages/ai-document-generator.tsx:313"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-43d2890c6d057da8", "name": "Insecure pattern 'direct_innerhtml_assignment' in client/src/pages/ai-document-generator.tsx:142", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in client/src/pages/ai-document-generator.tsx:142"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-35b7db190ef1d238", "name": "Insecure pattern 'domparser_html_parse' in client/src/pages/bgm-cue-sheet/fileText.ts:40", "shortDescription": {"text": "Insecure pattern 'domparser_html_parse' in client/src/pages/bgm-cue-sheet/fileText.ts:40"}, "fullDescription": {"text": "Found a known-risky pattern (domparser_html_parse). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-dcbc7f00b6e2e9b9", "name": "Insecure pattern 'document_write' in client/src/pages/research-lab/duty-assignment-tab.tsx:158", "shortDescription": {"text": "Insecure pattern 'document_write' in client/src/pages/research-lab/duty-assignment-tab.tsx:158"}, "fullDescription": {"text": "Found a known-risky pattern (document_write). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a7675516b66904e4", "name": "Insecure pattern 'document_write' in client/src/pages/research-lab/utils.tsx:70", "shortDescription": {"text": "Insecure pattern 'document_write' in client/src/pages/research-lab/utils.tsx:70"}, "fullDescription": {"text": "Found a known-risky pattern (document_write). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d4473a9ad0530868", "name": "Insecure pattern 'document_write' in client/src/pages/research-lab/projects-tab.tsx:583", "shortDescription": {"text": "Insecure pattern 'document_write' in client/src/pages/research-lab/projects-tab.tsx:583"}, "fullDescription": {"text": "Found a known-risky pattern (document_write). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dd0e3b6652c83d1c", "name": "Insecure pattern 'document_write' in client/src/pages/research-lab/labor-tab.tsx:284", "shortDescription": {"text": "Insecure pattern 'document_write' in client/src/pages/research-lab/labor-tab.tsx:284"}, "fullDescription": {"text": "Found a known-risky pattern (document_write). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "low", "confidence": 1.0}}, {"id": "scanner-58cc00a85ca23451", "name": "Insecure pattern 'domparser_html_parse' in client/src/lib/ai-document.ts:114", "shortDescription": {"text": "Insecure pattern 'domparser_html_parse' in client/src/lib/ai-document.ts:114"}, "fullDescription": {"text": "Found a known-risky pattern (domparser_html_parse). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3c53f0fd09b8db01", "name": "Insecure pattern 'domparser_html_parse' in client/src/lib/html.ts:44", "shortDescription": {"text": "Insecure pattern 'domparser_html_parse' in client/src/lib/html.ts:44"}, "fullDescription": {"text": "Found a known-risky pattern (domparser_html_parse). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8be6a5fc36902a6f", "name": "Insecure pattern 'dangerous_innerhtml' in artifacts/mockup-sandbox/src/components/ui/chart.tsx:79", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in artifacts/mockup-sandbox/src/components/ui/chart.tsx:79"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cb639d9a10a47b23", "name": "package.json defines install-time lifecycle scripts", "shortDescription": {"text": "package.json defines install-time lifecycle scripts"}, "fullDescription": {"text": "preinstall/install/postinstall/prepare scripts execute during dependency installation. Review them carefully for network calls, obfuscation, shell execution, or credential access."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-568e2ca46b4fad9f", "name": "Very large file: rfp-system-export/rfp-system-export/server/rfp-normalizer.ts (1579 lines)", "shortDescription": {"text": "Very large file: rfp-system-export/rfp-system-export/server/rfp-normalizer.ts (1579 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-782e12a549f08da0", "name": "Very large file: rfp-system-export/rfp-system-export/server/rfp-crawler.ts (3786 lines)", "shortDescription": {"text": "Very large file: rfp-system-export/rfp-system-export/server/rfp-crawler.ts (3786 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-e16f467c9cbfc375", "name": "Very large file: rfp-system-export/rfp-system-export/client/RfpPage.tsx (2487 lines)", "shortDescription": {"text": "Very large file: rfp-system-export/rfp-system-export/client/RfpPage.tsx (2487 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-00e775f6a9b11198", "name": "Very large file: scripts/smoke/bid-strategy-ux-invariants.mjs (1532 lines)", "shortDescription": {"text": "Very large file: scripts/smoke/bid-strategy-ux-invariants.mjs (1532 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-8d0ddecee11b89c7", "name": "Very large file: server/storage.ts (3026 lines)", "shortDescription": {"text": "Very large file: server/storage.ts (3026 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-5f4b6493cf4e4aef", "name": "Very large file: server/routes.ts (2338 lines)", "shortDescription": {"text": "Very large file: server/routes.ts (2338 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-c241e311976a1170", "name": "Very large file: server/services/serpapi-crawler.ts (1774 lines)", "shortDescription": {"text": "Very large file: server/services/serpapi-crawler.ts (1774 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-0d98969fa1cad8d0", "name": "Very large file: server/routes/bid-intelligence-award-jobs.ts (1561 lines)", "shortDescription": {"text": "Very large file: server/routes/bid-intelligence-award-jobs.ts (1561 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-c186351e2abcbc99", "name": "Very large file: server/routes/rfp.ts (1264 lines)", "shortDescription": {"text": "Very large file: server/routes/rfp.ts (1264 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-811bb24f29afb152", "name": "Very large file: server/routes/evaluation.ts (2896 lines)", "shortDescription": {"text": "Very large file: server/routes/evaluation.ts (2896 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-82be15ce2f4414fa", "name": "Very large file: server/routes/gpt-image.ts (1154 lines)", "shortDescription": {"text": "Very large file: server/routes/gpt-image.ts (1154 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-bbbb5921a155ff49", "name": "Very large file: server/routes/bid-strategy/shared.ts (1779 lines)", "shortDescription": {"text": "Very large file: server/routes/bid-strategy/shared.ts (1779 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-c2a28384adc9b5d0", "name": "Very large file: server/routes/bid-strategy/intake.ts (1562 lines)", "shortDescription": {"text": "Very large file: server/routes/bid-strategy/intake.ts (1562 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-5ca3138770f40167", "name": "Very large file: server/routes/bid-strategy/eligibility.ts (1102 lines)", "shortDescription": {"text": "Very large file: server/routes/bid-strategy/eligibility.ts (1102 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-5460479b7ded3708", "name": "Very large file: server/routes/bid-strategy/hermes.ts (868 lines)", "shortDescription": {"text": "Very large file: server/routes/bid-strategy/hermes.ts (868 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-2ac77ad8282e6bb4", "name": "Very large file: client/src/pages/question-bank.tsx (1400 lines)", "shortDescription": {"text": "Very large file: client/src/pages/question-bank.tsx (1400 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-6869893a8760a70a", "name": "Very large file: client/src/pages/my-evaluation.tsx (1265 lines)", "shortDescription": {"text": "Very large file: client/src/pages/my-evaluation.tsx (1265 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-6ad42cf17d894e36", "name": "Very large file: client/src/pages/projects.tsx (2133 lines)", "shortDescription": {"text": "Very large file: client/src/pages/projects.tsx (2133 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-f1c239f6d54bd344", "name": "Very large file: client/src/pages/leveling.tsx (1560 lines)", "shortDescription": {"text": "Very large file: client/src/pages/leveling.tsx (1560 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-58d34fb1f417456e", "name": "Very large file: client/src/pages/agent-conversations.tsx (1087 lines)", "shortDescription": {"text": "Very large file: client/src/pages/agent-conversations.tsx (1087 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-86c15259d00ee348", "name": "Very large file: client/src/pages/document-generator.tsx (4654 lines)", "shortDescription": {"text": "Very large file: client/src/pages/document-generator.tsx (4654 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-91b51c7f67b67636", "name": "Very large file: client/src/pages/calculator.tsx (1184 lines)", "shortDescription": {"text": "Very large file: client/src/pages/calculator.tsx (1184 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-56dd73acea866854", "name": "Very large file: client/src/pages/contracts.tsx (2113 lines)", "shortDescription": {"text": "Very large file: client/src/pages/contracts.tsx (2113 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-02db703ea71ce9a3", "name": "Very large file: client/src/pages/experiences.tsx (2098 lines)", "shortDescription": {"text": "Very large file: client/src/pages/experiences.tsx (2098 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-c2f05a213bab9e3e", "name": "Very large file: client/src/pages/documents.tsx (1722 lines)", "shortDescription": {"text": "Very large file: client/src/pages/documents.tsx (1722 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-008cda6458c39f42", "name": "Very large file: client/src/pages/kpi-dashboard.tsx (1675 lines)", "shortDescription": {"text": "Very large file: client/src/pages/kpi-dashboard.tsx (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-acc0523d7d895a75", "name": "Very large file: client/src/pages/research-lab-manual.tsx (1413 lines)", "shortDescription": {"text": "Very large file: client/src/pages/research-lab-manual.tsx (1413 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-275d16aa749b49f9", "name": "Very large file: client/src/pages/employees.tsx (2538 lines)", "shortDescription": {"text": "Very large file: client/src/pages/employees.tsx (2538 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-2f77831fe4f7190f", "name": "Very large file: client/src/pages/rfp.tsx (2641 lines)", "shortDescription": {"text": "Very large file: client/src/pages/rfp.tsx (2641 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-d2cdc5619f67adef", "name": "Very large file: client/src/pages/estimates.tsx (1812 lines)", "shortDescription": {"text": "Very large file: client/src/pages/estimates.tsx (1812 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-92347db9bd38c8e3", "name": "Very large file: client/src/pages/sales-records.tsx (2361 lines)", "shortDescription": {"text": "Very large file: client/src/pages/sales-records.tsx (2361 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-dca6f92e9de2c0d8", "name": "Very large file: client/src/pages/service-performance.tsx (1110 lines)", "shortDescription": {"text": "Very large file: client/src/pages/service-performance.tsx (1110 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-04ea26a15ad85c60", "name": "Very large file: client/src/pages/gpt-image.tsx (1310 lines)", "shortDescription": {"text": "Very large file: client/src/pages/gpt-image.tsx (1310 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-3a3acc465d8b620e", "name": "Very large file: client/src/pages/bgm-cue-sheet/index.tsx (3411 lines)", "shortDescription": {"text": "Very large file: client/src/pages/bgm-cue-sheet/index.tsx (3411 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-3b6c671bce9ae54f", "name": "Very large file: client/src/pages/research-lab/projects-tab.tsx (1523 lines)", "shortDescription": {"text": "Very large file: client/src/pages/research-lab/projects-tab.tsx (1523 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-ac76a894d3da0ed4", "name": "Very large file: client/src/pages/suno/components/InputForm.tsx (1047 lines)", "shortDescription": {"text": "Very large file: client/src/pages/suno/components/InputForm.tsx (1047 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-c19b5d3b2b3d1a0b", "name": "Very large file: client/src/pages/bid-strategy/[id].tsx (2208 lines)", "shortDescription": {"text": "Very large file: client/src/pages/bid-strategy/[id].tsx (2208 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-cf018c9354331dc0", "name": "Very large file: client/src/pages/bid-strategy/components/PastAwardsCard.tsx (2107 lines)", "shortDescription": {"text": "Very large file: client/src/pages/bid-strategy/components/PastAwardsCard.tsx (2107 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-ede555c1aa512355", "name": "Very large file: client/src/pages/bid-strategy/components/EligibilityCard.tsx (1842 lines)", "shortDescription": {"text": "Very large file: client/src/pages/bid-strategy/components/EligibilityCard.tsx (1842 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-6b2c1340423bb8a2", "name": "Very large file: client/src/pages/evaluation/index.tsx (1203 lines)", "shortDescription": {"text": "Very large file: client/src/pages/evaluation/index.tsx (1203 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-b4c61b1be5be9301", "name": "Very large file: client/src/pages/evaluation/components/FinalCycleTab.tsx (1131 lines)", "shortDescription": {"text": "Very large file: client/src/pages/evaluation/components/FinalCycleTab.tsx (1131 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-2227b0da70d6e48d", "name": "Very large file: client/src/pages/evaluation/components/ResultsTab.tsx (1157 lines)", "shortDescription": {"text": "Very large file: client/src/pages/evaluation/components/ResultsTab.tsx (1157 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-03a8cf7c472162a2", "name": "Very large file: client/src/pages/evaluation/components/SettingsDialog.tsx (3275 lines)", "shortDescription": {"text": "Very large file: client/src/pages/evaluation/components/SettingsDialog.tsx (3275 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-e189c2c0bb57b10a", "name": "Very large file: shared/schema.ts (3256 lines)", "shortDescription": {"text": "Very large file: shared/schema.ts (3256 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-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "47 test file(s) for 839 source file(s) (ratio 0.06). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "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-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 1225 console/debugger/print-style debug statements in non-test source. This is a common fast-generation residue before production cleanup."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-72b2a6250083a784", "name": "Placeholder or mock-heavy implementation detected", "shortDescription": {"text": "Placeholder or mock-heavy implementation detected"}, "fullDescription": {"text": "Found 595 placeholder/mock markers across 106 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9d79c4077342a7d0", "name": "Runtime service client appears to use placeholder configuration", "shortDescription": {"text": "Runtime service client appears to use placeholder configuration"}, "fullDescription": {"text": "A runtime source file appears to wire Supabase/Firebase/AI/payment-style clients to placeholder URLs, keys, or fallback values. In the Fable corpus this often means the UI/API shape is present while the backend service is not actually configured."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci. 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-bb69c38cd6b96624", "name": "Commented-code block (5 lines) in worker/g2b-award/src/hmac.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in worker/g2b-award/src/hmac.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-392bfdb3f82f4d91", "name": "Commented-code block (5 lines) in worker/g2b-award/src/g2b-client.ts:283", "shortDescription": {"text": "Commented-code block (5 lines) in worker/g2b-award/src/g2b-client.ts:283"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f57a3151895d994e", "name": "Commented-code block (5 lines) in worker/g2b-award/src/poll.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in worker/g2b-award/src/poll.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a279186a300c7161", "name": "`fetch()` without try/.catch or AbortSignal \u2014 worker/g2b-award/src/poll.ts:207", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 worker/g2b-award/src/poll.ts:207"}, "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-cb49a2d00307eba2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 worker/rfp-parser/src/poll.ts:53", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 worker/rfp-parser/src/poll.ts:53"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4e6403b53c3d2153", "name": "Commented-code block (8 lines) in rfp-system-export/rfp-system-export/server/rfp-crawler.ts:43", "shortDescription": {"text": "Commented-code block (8 lines) in rfp-system-export/rfp-system-export/server/rfp-crawler.ts:43"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-602ce9637c0d7a1e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 rfp-system-export/rfp-system-export/server/rfp-crawler.ts:1365", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 rfp-system-export/rfp-system-export/server/rfp-crawler.ts:1365"}, "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-9c1d3a6101cd4654", "name": "`fetch()` without try/.catch or AbortSignal \u2014 rfp-system-export/rfp-system-export/server/rfp-multihop-crawler.ts:127", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 rfp-system-export/rfp-system-export/server/rfp-multihop-crawler.ts:127"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d3162b6365712dd3", "name": "Legacy-named symbol `maxDaysOld` in rfp-system-export/rfp-system-export/server/services/mice-rfp-crawler.ts:225", "shortDescription": {"text": "Legacy-named symbol `maxDaysOld` in rfp-system-export/rfp-system-export/server/services/mice-rfp-crawler.ts:225"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-576a06c347dad478", "name": "Commented-code block (8 lines) in scripts/g2b-award-worker.mjs:120", "shortDescription": {"text": "Commented-code block (8 lines) in scripts/g2b-award-worker.mjs:120"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-860e22e89e512fc4", "name": "Commented-code block (5 lines) in scripts/dedup-listings.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/dedup-listings.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9c55122634ba8431", "name": "Legacy-named symbol `DocLegacy` in scripts/test-rbac.mjs:39", "shortDescription": {"text": "Legacy-named symbol `DocLegacy` in scripts/test-rbac.mjs:39"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3bef1c6a9cfe88d3", "name": "Commented-code block (5 lines) in scripts/test-submission-matcher.mjs:165", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/test-submission-matcher.mjs:165"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-884978cd43b19716", "name": "Commented-code block (5 lines) in scripts/backfill-llm-cost.mjs:7", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/backfill-llm-cost.mjs:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6b0b3622876e6232", "name": "Commented-code block (5 lines) in scripts/setup-dedup-index.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/setup-dedup-index.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b830423925db02d2", "name": "Commented-code block (7 lines) in scripts/test-asset-matcher.mjs:440", "shortDescription": {"text": "Commented-code block (7 lines) in scripts/test-asset-matcher.mjs:440"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-645de0da71e6dc70", "name": "Commented-code block (5 lines) in scripts/test-scoring-projector.mjs:531", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/test-scoring-projector.mjs:531"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-81633403221ac2a6", "name": "Commented-code block (5 lines) in scripts/smoke/bid-strategy-timeout-invariants.mjs:3", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/smoke/bid-strategy-timeout-invariants.mjs:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-078784d6b6467751", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/smoke/certificate-local-agent-dispatch.mjs:14", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/smoke/certificate-local-agent-dispatch.mjs:14"}, "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-51a826037bc0db24", "name": "Commented-code block (6 lines) in script/agent-safe-commit.mjs:7", "shortDescription": {"text": "Commented-code block (6 lines) in script/agent-safe-commit.mjs:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f8e3e10576f945b1", "name": "Commented-code block (5 lines) in script/cleanup-rfp-duplicates.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in script/cleanup-rfp-duplicates.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dda44a5ef43b8984", "name": "Commented-code block (6 lines) in script/dump-routes.mjs:8", "shortDescription": {"text": "Commented-code block (6 lines) in script/dump-routes.mjs:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-55587ad9d78dd6a7", "name": "Commented-code block (8 lines) in script/check-crawler-rules.mjs:5", "shortDescription": {"text": "Commented-code block (8 lines) in script/check-crawler-rules.mjs:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6069e3f656fc8521", "name": "Commented-code block (7 lines) in script/dev-freshness-check.mjs:1", "shortDescription": {"text": "Commented-code block (7 lines) in script/dev-freshness-check.mjs:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8480d7f9a6808253", "name": "`fetch()` without try/.catch or AbortSignal \u2014 script/dev-freshness-check.mjs:33", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 script/dev-freshness-check.mjs:33"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d62516ef4a6263cc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 script/verify-r2.mjs:105", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 script/verify-r2.mjs:105"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-13c07696b683227a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 script/harness-regression-audit.mjs:516", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 script/harness-regression-audit.mjs:516"}, "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-c497449263674eee", "name": "Commented-code block (5 lines) in script/check-shared-locks.mjs:4", "shortDescription": {"text": "Commented-code block (5 lines) in script/check-shared-locks.mjs:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-54bf68c99543aa9e", "name": "Commented-code block (5 lines) in script/agent-precheck.mjs:5", "shortDescription": {"text": "Commented-code block (5 lines) in script/agent-precheck.mjs:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d1bbe5c77874e8a2", "name": "Commented-code block (5 lines) in script/migrate-public-to-private.mjs:1", "shortDescription": {"text": "Commented-code block (5 lines) in script/migrate-public-to-private.mjs:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-261134ee5e67b14f", "name": "Commented-code block (5 lines) in script/build.ts:53", "shortDescription": {"text": "Commented-code block (5 lines) in script/build.ts:53"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0a82b4516d1010f6", "name": "Commented-code block (6 lines) in server/email.ts:78", "shortDescription": {"text": "Commented-code block (6 lines) in server/email.ts:78"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6c29110bede48fe5", "name": "Commented-code block (6 lines) in server/notification-scheduler.ts:536", "shortDescription": {"text": "Commented-code block (6 lines) in server/notification-scheduler.ts:536"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8957407bd15317b7", "name": "Commented-code block (5 lines) in server/db.ts:27", "shortDescription": {"text": "Commented-code block (5 lines) in server/db.ts:27"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c67bcd071f551acb", "name": "Commented-code block (5 lines) in server/services/g2b-attachments.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in server/services/g2b-attachments.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c759c3b35e1ee127", "name": "Commented-code block (6 lines) in server/services/price-score-extractor.ts:190", "shortDescription": {"text": "Commented-code block (6 lines) in server/services/price-score-extractor.ts:190"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1a64f3914e9fe395", "name": "Commented-code block (6 lines) in server/services/classify-category.ts:229", "shortDescription": {"text": "Commented-code block (6 lines) in server/services/classify-category.ts:229"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f02d6a6c03c4979c", "name": "Commented-code block (5 lines) in server/services/llm-usage-logger.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in server/services/llm-usage-logger.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2a63c03e43542c2b", "name": "Commented-code block (5 lines) in server/services/youtube-download.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in server/services/youtube-download.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4e09d82affb40e11", "name": "`fetch()` without try/.catch or AbortSignal \u2014 server/services/rfp-from-g2b-api.ts:56", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/services/rfp-from-g2b-api.ts:56"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-80df26a8f7fb47b3", "name": "Commented-code block (6 lines) in server/services/source-health-check.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in server/services/source-health-check.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-04b8c3405919b215", "name": "Commented-code block (5 lines) in server/services/bid-intelligence/decision-engine.ts:506", "shortDescription": {"text": "Commented-code block (5 lines) in server/services/bid-intelligence/decision-engine.ts:506"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-159ccea01b5cc3d6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 server/services/bid-intelligence/doc-ocr-store.ts:8", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/services/bid-intelligence/doc-ocr-store.ts:8"}, "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-0fd2fc4b57215caf", "name": "Commented-code block (5 lines) in server/services/bid-intelligence/eligibility-extractor.ts:164", "shortDescription": {"text": "Commented-code block (5 lines) in server/services/bid-intelligence/eligibility-extractor.ts:164"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-049ef50dec5c10d3", "name": "Commented-code block (7 lines) in server/services/bid-intelligence/notice-number-resolver.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in server/services/bid-intelligence/notice-number-resolver.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e1c918db7741b0e5", "name": "Commented-code block (8 lines) in server/services/bid-intelligence/analysis-execution-context.ts:57", "shortDescription": {"text": "Commented-code block (8 lines) in server/services/bid-intelligence/analysis-execution-context.ts:57"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0b9bf1c7c5c98247", "name": "Commented-code block (5 lines) in server/services/bid-intelligence/prompt-cache.ts:23", "shortDescription": {"text": "Commented-code block (5 lines) in server/services/bid-intelligence/prompt-cache.ts:23"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f8a7bd66388b72ba", "name": "Commented-code block (6 lines) in server/services/bid-intelligence/scoring-projector.ts:79", "shortDescription": {"text": "Commented-code block (6 lines) in server/services/bid-intelligence/scoring-projector.ts:79"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2334c9f7c2223295", "name": "Commented-code block (11 lines) in server/services/bid-intelligence/eligibility-aggregation.ts:551", "shortDescription": {"text": "Commented-code block (11 lines) in server/services/bid-intelligence/eligibility-aggregation.ts:551"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-112ddb4063776ef0", "name": "Commented-code block (5 lines) in server/services/bid-intelligence/lineage-tiers-pipeline.ts:136", "shortDescription": {"text": "Commented-code block (5 lines) in server/services/bid-intelligence/lineage-tiers-pipeline.ts:136"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-435e32258f293093", "name": "Commented-code block (7 lines) in server/services/bid-intelligence/g2b-portal-client.ts:24", "shortDescription": {"text": "Commented-code block (7 lines) in server/services/bid-intelligence/g2b-portal-client.ts:24"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cefffc222fc2d2a4", "name": "Commented-code block (5 lines) in server/services/suno/gemini.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in server/services/suno/gemini.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6acfa1ab619686ac", "name": "`fetch()` without try/.catch or AbortSignal \u2014 server/services/suno/provider/sunoapi.ts:151", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/services/suno/provider/sunoapi.ts:151"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4b16f693235f2212", "name": "Commented-code block (5 lines) in server/services/lib/korean-date.ts:19", "shortDescription": {"text": "Commented-code block (5 lines) in server/services/lib/korean-date.ts:19"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-667b40cca1c15690", "name": "Commented-code block (5 lines) in server/routes/certificates.ts:194", "shortDescription": {"text": "Commented-code block (5 lines) in server/routes/certificates.ts:194"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2aa90b1a9830fdca", "name": "Commented-code block (6 lines) in server/routes/bid-intelligence-award-jobs.ts:434", "shortDescription": {"text": "Commented-code block (6 lines) in server/routes/bid-intelligence-award-jobs.ts:434"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0cefdd3775bc23ac", "name": "Commented-code block (6 lines) in server/routes/cron-bid-strategy-recover.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in server/routes/cron-bid-strategy-recover.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ac64386f8a85b360", "name": "`fetch()` without try/.catch or AbortSignal \u2014 server/routes/rfp.ts:954", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/routes/rfp.ts:954"}, "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-f5e179139f9ff52f", "name": "Commented-code block (6 lines) in server/routes/bid-intelligence-attachment-jobs.ts:29", "shortDescription": {"text": "Commented-code block (6 lines) in server/routes/bid-intelligence-attachment-jobs.ts:29"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-217164beab1bc250", "name": "Commented-code block (5 lines) in server/routes/suno.ts:302", "shortDescription": {"text": "Commented-code block (5 lines) in server/routes/suno.ts:302"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-06f868c2969af71d", "name": "Commented-code block (5 lines) in server/routes/gpt-image.ts:126", "shortDescription": {"text": "Commented-code block (5 lines) in server/routes/gpt-image.ts:126"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8d7b90e709933966", "name": "Commented-code block (9 lines) in server/routes/bgm-cue-sheet.ts:1", "shortDescription": {"text": "Commented-code block (9 lines) in server/routes/bgm-cue-sheet.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1a2b9717d38d6163", "name": "Commented-code block (6 lines) in server/routes/bid-strategy/intake.ts:1129", "shortDescription": {"text": "Commented-code block (6 lines) in server/routes/bid-strategy/intake.ts:1129"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d08b83acc87066ba", "name": "Commented-code block (8 lines) in server/routes/bid-strategy/stages.ts:320", "shortDescription": {"text": "Commented-code block (8 lines) in server/routes/bid-strategy/stages.ts:320"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bedbd63183f9c05a", "name": "Commented-code block (5 lines) in server/routes/bid-strategy/eligibility.ts:670", "shortDescription": {"text": "Commented-code block (5 lines) in server/routes/bid-strategy/eligibility.ts:670"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-951beeee3ec24f5e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 server/routes/bid-strategy/eligibility.ts:211", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/routes/bid-strategy/eligibility.ts:211"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a19cdfe3caa35431", "name": "Commented-code block (7 lines) in docs/tool-starter/sandbox/vite.config.ts:8", "shortDescription": {"text": "Commented-code block (7 lines) in docs/tool-starter/sandbox/vite.config.ts:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0293dca1f73b55b4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 attached_assets/subadmin-certificates_1767672202250.tsx:247", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 attached_assets/subadmin-certificates_1767672202250.tsx:247"}, "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-c1f29cd22e04ae0c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 attached_assets/subadmin-certificates_1767671787374.tsx:247", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 attached_assets/subadmin-certificates_1767671787374.tsx:247"}, "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-1ebf59fbb8e000be", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/hooks/use-auth.ts:12", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/hooks/use-auth.ts:12"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b7e610ad4cef3412", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/hooks/use-upload.ts:97", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/hooks/use-upload.ts:97"}, "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-957e544b67249aac", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/project-files.tsx:48", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/project-files.tsx:48"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d05c1d22065a8169", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/project-analytics.tsx:145", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/project-analytics.tsx:145"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7a43d3e265960335", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/my-evaluation.tsx:113", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/my-evaluation.tsx:113"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-afb246b77e895bc6", "name": "Legacy-named symbol `rawOld` in client/src/pages/projects.tsx:566", "shortDescription": {"text": "Legacy-named symbol `rawOld` in client/src/pages/projects.tsx:566"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5ada62905c0621bb", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/projects.tsx:640", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/projects.tsx:640"}, "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-581a576ed9782b86", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/access-logs.tsx:196", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/access-logs.tsx:196"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7099f290f636e097", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/leveling.tsx:340", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/leveling.tsx:340"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d076a7caf415ed74", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/document-generator.tsx:109", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/document-generator.tsx:109"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1f18e725d8575369", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/contracts.tsx:365", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/contracts.tsx:365"}, "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-610a5f3a63ead5f2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/experiences.tsx:989", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/experiences.tsx:989"}, "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-77cb2bc693423113", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/llm-usage.tsx:114", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/llm-usage.tsx:114"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b03222c71bc3d018", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/kpi-dashboard.tsx:439", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/kpi-dashboard.tsx:439"}, "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-d476975c49a7c288", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/calendar.tsx:581", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/calendar.tsx:581"}, "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-a45de8a5f79c57f6", "name": "Legacy-named symbol `rawOld` in client/src/pages/employees.tsx:1376", "shortDescription": {"text": "Legacy-named symbol `rawOld` in client/src/pages/employees.tsx:1376"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d2eabee73e4d80d4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/rfp.tsx:356", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/rfp.tsx:356"}, "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-d2978bd2173b3e69", "name": "Commented-code block (6 lines) in client/src/pages/llm-usage-menu-map.ts:6", "shortDescription": {"text": "Commented-code block (6 lines) in client/src/pages/llm-usage-menu-map.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f6b7c58586e98c39", "name": "Commented-code block (5 lines) in client/src/pages/estimates.tsx:1022", "shortDescription": {"text": "Commented-code block (5 lines) in client/src/pages/estimates.tsx:1022"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fa6fe70206544650", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/sales-records.tsx:667", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/sales-records.tsx:667"}, "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-5b31c605af4e5c89", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/kpi-management.tsx:59", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/kpi-management.tsx:59"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-30f57ae86500b248", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/trash.tsx:65", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/trash.tsx:65"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-68c0a03ec253018d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/dashboard.tsx:159", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/dashboard.tsx:159"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-dce8e2ddbac3383f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/dev-log.tsx:146", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/dev-log.tsx:146"}, "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-60f507cd26867f22", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/gpt-image.tsx:376", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/gpt-image.tsx:376"}, "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-6551093684340639", "name": "Commented-code block (5 lines) in client/src/pages/youtube-download.tsx:129", "shortDescription": {"text": "Commented-code block (5 lines) in client/src/pages/youtube-download.tsx:129"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0e4b62ee2f1e4a7c", "name": "Commented-code block (5 lines) in client/src/pages/bgm-cue-sheet/contract.ts:49", "shortDescription": {"text": "Commented-code block (5 lines) in client/src/pages/bgm-cue-sheet/contract.ts:49"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-821ed34da061a995", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/bgm-cue-sheet/index.tsx:1811", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/bgm-cue-sheet/index.tsx:1811"}, "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-0c6b711e6162df32", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/research-lab/projects-tab.tsx:96", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/research-lab/projects-tab.tsx:96"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-50502e5def75743b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/research-lab/notes-tab.tsx:111", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/research-lab/notes-tab.tsx:111"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d06e1364a28986fa", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/research-lab/labor-tab.tsx:64", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/research-lab/labor-tab.tsx:64"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9898f858821357fa", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/research-lab/plans-tab.tsx:98", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/research-lab/plans-tab.tsx:98"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-db3d9e858315d1a5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/suno/components/InputForm.tsx:338", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/suno/components/InputForm.tsx:338"}, "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-4ddbae31057149e2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/bid-strategy/api.ts:594", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/bid-strategy/api.ts:594"}, "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-a5a9257b7ce39b09", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/bid-strategy/[id].tsx:881", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/bid-strategy/[id].tsx:881"}, "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-c3e1d232b1db0f48", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/bid-strategy/components/DocumentQAPanel.tsx:102", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/bid-strategy/components/DocumentQAPanel.tsx:102"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9c35ea642a1ce30a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/bid-strategy/components/BidLineageCard.tsx:128", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/bid-strategy/components/BidLineageCard.tsx:128"}, "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-d4bb3e43b32e1876", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/comment-picker/api.ts:141", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/comment-picker/api.ts:141"}, "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-4676d31bd5136f5b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/evaluation/components/SettingsDialog.tsx:169", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/evaluation/components/SettingsDialog.tsx:169"}, "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-98dd0225acdbf936", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/lib/queryClient.ts:26", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/lib/queryClient.ts:26"}, "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-0e011d96f7aa8af7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/replit_integrations/audio/useVoiceStream.ts:33", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/replit_integrations/audio/useVoiceStream.ts:33"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-484b0b2509dfe702", "name": "Legacy-named symbol `key_copy` in shared/schema.ts:1737", "shortDescription": {"text": "Legacy-named symbol `key_copy` in shared/schema.ts:1737"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-850b40e90ebe894b", "name": "Commented-code block (6 lines) in shared/schema.ts:1873", "shortDescription": {"text": "Commented-code block (6 lines) in shared/schema.ts:1873"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c9a1612d277ec0e3", "name": "Commented-code block (5 lines) in shared/bid-status.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in shared/bid-status.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-366df7685b627036", "name": "Commented-code block (5 lines) in shared/models/gpt-image.ts:65", "shortDescription": {"text": "Commented-code block (5 lines) in shared/models/gpt-image.ts:65"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2554fc9b745f3ad2", "name": "Commented-code block (5 lines) in shared/bid-strategy/document-extraction.schema.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in shared/bid-strategy/document-extraction.schema.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f738169992e41bd7", "name": "Commented-code block (5 lines) in shared/tax/withholding-config.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in shared/tax/withholding-config.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2c04133e54348533", "name": "Near-duplicate function bodies in 2 places", "shortDescription": {"text": "Near-duplicate function bodies in 2 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nWeb-Analyzer/main.py:main, Web-Analyzer/Web-Analyzer/main.py:main\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-49c98f7cedd9c977", "name": "Near-duplicate function bodies in 4 places", "shortDescription": {"text": "Near-duplicate function bodies in 4 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nWeb-Analyzer/app.py:format_number, Web-Analyzer/app.py:format_num, Web-Analyzer/Web-Analyzer/app.py:format_number, Web-Analyzer/Web-Analyzer/app.py:format_num\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0bd055d2aa52aa03", "name": "Frontend route `/login` has no Link/navigate to it \u2014 client/src/App.tsx", "shortDescription": {"text": "Frontend route `/login` has no Link/navigate to it \u2014 client/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5b5a5ec9b54ad535", "name": "Frontend route `/calculator` has no Link/navigate to it \u2014 client/src/components/authenticated-shell.tsx", "shortDescription": {"text": "Frontend route `/calculator` has no Link/navigate to it \u2014 client/src/components/authenticated-shell.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5f18178197910359", "name": "Frontend route `/vat-calculator` has no Link/navigate to it \u2014 client/src/components/authenticated-shell.tsx", "shortDescription": {"text": "Frontend route `/vat-calculator` has no Link/navigate to it \u2014 client/src/components/authenticated-shell.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-89f688413cc70fd1", "name": "Frontend route `/withholding-calculator` has no Link/navigate to it \u2014 client/src/components/authenticated-shell.tsx", "shortDescription": {"text": "Frontend route `/withholding-calculator` has no Link/navigate to it \u2014 client/src/components/authenticated-shell.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5da22dd0da916188", "name": "Dangling fetch: GET https://pikk.co.kr/bids (rfp-system-export/rfp-system-export/server/rfp-crawler.ts:1879)", "shortDescription": {"text": "Dangling fetch: GET https://pikk.co.kr/bids (rfp-system-export/rfp-system-export/server/rfp-crawler.ts:1879)"}, "fullDescription": {"text": "`rfp-system-export/rfp-system-export/server/rfp-crawler.ts:1879` calls `GET https://pikk.co.kr/bids` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/pikk.co.kr/bids`\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-58698304323393e3", "name": "Dangling fetch: POST https://api.perplexity.ai/chat/completions (rfp-system-export/rfp-system-export/server/rfp-ai-score", "shortDescription": {"text": "Dangling fetch: POST https://api.perplexity.ai/chat/completions (rfp-system-export/rfp-system-export/server/rfp-ai-scorer.ts:167)"}, "fullDescription": {"text": "`rfp-system-export/rfp-system-export/server/rfp-ai-scorer.ts:167` calls `POST https://api.perplexity.ai/chat/completions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.perplexity.ai/chat/completions`\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-d72946c16b72e883", "name": "Dangling fetch: GET https://api.country.is/${encodeURIComponent(ip)} (server/services/ip-country.ts:73)", "shortDescription": {"text": "Dangling fetch: GET https://api.country.is/${encodeURIComponent(ip)} (server/services/ip-country.ts:73)"}, "fullDescription": {"text": "`server/services/ip-country.ts:73` calls `GET https://api.country.is/${encodeURIComponent(ip)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.country.is/<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-263af96976d13ce3", "name": "Dangling fetch: GET https://open.er-api.com/v6/latest/USD (server/routes/gpt-image.ts:67)", "shortDescription": {"text": "Dangling fetch: GET https://open.er-api.com/v6/latest/USD (server/routes/gpt-image.ts:67)"}, "fullDescription": {"text": "`server/routes/gpt-image.ts:67` calls `GET https://open.er-api.com/v6/latest/USD` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/open.er-api.com/v6/latest/usd`\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-7dd481534ddb3419", "name": "Dangling fetch: POST /api/certificates/extract-from-image (attached_assets/subadmin-certificates_1767672202250.tsx:426)", "shortDescription": {"text": "Dangling fetch: POST /api/certificates/extract-from-image (attached_assets/subadmin-certificates_1767672202250.tsx:426)"}, "fullDescription": {"text": "`attached_assets/subadmin-certificates_1767672202250.tsx:426` calls `POST /api/certificates/extract-from-image` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/certificates/extract-from-image`\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-e7986a3225fdfc20", "name": "Dangling fetch: POST /api/certificates/extract-from-image (attached_assets/subadmin-certificates_1767671787374.tsx:426)", "shortDescription": {"text": "Dangling fetch: POST /api/certificates/extract-from-image (attached_assets/subadmin-certificates_1767671787374.tsx:426)"}, "fullDescription": {"text": "`attached_assets/subadmin-certificates_1767671787374.tsx:426` calls `POST /api/certificates/extract-from-image` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/certificates/extract-from-image`\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-d7e0b697eb4a2238", "name": "Dangling fetch: POST /api/bgm-cue-sheet/translate-prompt (client/src/pages/bgm-cue-sheet/index.tsx:628)", "shortDescription": {"text": "Dangling fetch: POST /api/bgm-cue-sheet/translate-prompt (client/src/pages/bgm-cue-sheet/index.tsx:628)"}, "fullDescription": {"text": "`client/src/pages/bgm-cue-sheet/index.tsx:628` calls `POST /api/bgm-cue-sheet/translate-prompt` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/bgm-cue-sheet/translate-prompt`\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-95d8f8eec7c1e704", "name": "Dangling fetch: POST /api/bgm-cue-sheet/fetch-audio (client/src/pages/bgm-cue-sheet/index.tsx:2118)", "shortDescription": {"text": "Dangling fetch: POST /api/bgm-cue-sheet/fetch-audio (client/src/pages/bgm-cue-sheet/index.tsx:2118)"}, "fullDescription": {"text": "`client/src/pages/bgm-cue-sheet/index.tsx:2118` calls `POST /api/bgm-cue-sheet/fetch-audio` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/bgm-cue-sheet/fetch-audio`\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-fbd98d9d0ee39171", "name": "Unused endpoint: POST /api/rpa/insurance4/jobs", "shortDescription": {"text": "Unused endpoint: POST /api/rpa/insurance4/jobs"}, "fullDescription": {"text": "`scripts/rpa/insurance4-local-agent.mjs` declares `POST /api/rpa/insurance4/jobs` 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-df2a85d2c45b364f", "name": "Unused endpoint: POST /api/agent-runs/:id/rfp-analysis-results", "shortDescription": {"text": "Unused endpoint: POST /api/agent-runs/:id/rfp-analysis-results"}, "fullDescription": {"text": "`scripts/smoke/agent-rfp-result-persistence.mjs` declares `POST /api/agent-runs/:id/rfp-analysis-results` 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-40d65c54806164e6", "name": "Unused endpoint: GET /api/bid-strategy/analyses/:id/agent-rfp-results", "shortDescription": {"text": "Unused endpoint: GET /api/bid-strategy/analyses/:id/agent-rfp-results"}, "fullDescription": {"text": "`scripts/smoke/agent-rfp-result-persistence.mjs` declares `GET /api/bid-strategy/analyses/:id/agent-rfp-results` 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-ffebc43712c6b6b8", "name": "Unused endpoint: GET /api/estimates", "shortDescription": {"text": "Unused endpoint: GET /api/estimates"}, "fullDescription": {"text": "`scripts/smoke/estimate-db-api.mjs` declares `GET /api/estimates` 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-744c292cfff45300", "name": "Unused endpoint: GET /api/estimates/form-templates", "shortDescription": {"text": "Unused endpoint: GET /api/estimates/form-templates"}, "fullDescription": {"text": "`scripts/smoke/estimate-db-api.mjs` declares `GET /api/estimates/form-templates` 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-b45721e93fce95ca", "name": "Unused endpoint: POST /api/estimates/form-templates", "shortDescription": {"text": "Unused endpoint: POST /api/estimates/form-templates"}, "fullDescription": {"text": "`scripts/smoke/estimate-db-api.mjs` declares `POST /api/estimates/form-templates` 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-6beacabe0da9ec2f", "name": "Unused endpoint: PATCH /api/estimates/form-templates/:id", "shortDescription": {"text": "Unused endpoint: PATCH /api/estimates/form-templates/:id"}, "fullDescription": {"text": "`scripts/smoke/estimate-db-api.mjs` declares `PATCH /api/estimates/form-templates/: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-640ed0aa674a69df", "name": "Unused endpoint: DELETE /api/estimates/form-templates/:id", "shortDescription": {"text": "Unused endpoint: DELETE /api/estimates/form-templates/:id"}, "fullDescription": {"text": "`scripts/smoke/estimate-db-api.mjs` declares `DELETE /api/estimates/form-templates/: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-2d909b29498db33e", "name": "Unused endpoint: POST /api/estimates", "shortDescription": {"text": "Unused endpoint: POST /api/estimates"}, "fullDescription": {"text": "`scripts/smoke/estimate-db-api.mjs` declares `POST /api/estimates` 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-583aacb6acbb28e1", "name": "Unused endpoint: GET /api/estimates/:id", "shortDescription": {"text": "Unused endpoint: GET /api/estimates/:id"}, "fullDescription": {"text": "`scripts/smoke/estimate-db-api.mjs` declares `GET /api/estimates/: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-a00fc107705fa186", "name": "Unused endpoint: PATCH /api/estimates/:id/draft", "shortDescription": {"text": "Unused endpoint: PATCH /api/estimates/:id/draft"}, "fullDescription": {"text": "`scripts/smoke/estimate-db-api.mjs` declares `PATCH /api/estimates/:id/draft` 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-b80ee1296b082147", "name": "Unused endpoint: POST /api/estimates/:id/send", "shortDescription": {"text": "Unused endpoint: POST /api/estimates/:id/send"}, "fullDescription": {"text": "`scripts/smoke/estimate-db-api.mjs` declares `POST /api/estimates/:id/send` 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-f0141f49c8bdaf5d", "name": "Unused endpoint: POST /api/estimates/:id/clone", "shortDescription": {"text": "Unused endpoint: POST /api/estimates/:id/clone"}, "fullDescription": {"text": "`scripts/smoke/estimate-db-api.mjs` declares `POST /api/estimates/:id/clone` 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-dd58d2fb784afc12", "name": "Unused endpoint: PATCH /api/estimates/:id/status", "shortDescription": {"text": "Unused endpoint: PATCH /api/estimates/:id/status"}, "fullDescription": {"text": "`scripts/smoke/estimate-db-api.mjs` declares `PATCH /api/estimates/:id/status` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-91ade9c2d8a2413f", "name": "Unused endpoint: POST /api/common-docs/:id/reanalyze", "shortDescription": {"text": "Unused endpoint: POST /api/common-docs/:id/reanalyze"}, "fullDescription": {"text": "`scripts/smoke/common-doc-analysis-state-invariants.mjs` declares `POST /api/common-docs/:id/reanalyze` 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-ca4906cfb6a69ba7", "name": "Unused endpoint: PATCH /api/common-docs/:id/verification", "shortDescription": {"text": "Unused endpoint: PATCH /api/common-docs/:id/verification"}, "fullDescription": {"text": "`scripts/smoke/common-doc-analysis-state-invariants.mjs` declares `PATCH /api/common-docs/:id/verification` 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-efcc9ee2fda9a571", "name": "Unused endpoint: POST /api/common-docs/reanalyze-batch", "shortDescription": {"text": "Unused endpoint: POST /api/common-docs/reanalyze-batch"}, "fullDescription": {"text": "`scripts/smoke/common-doc-analysis-state-invariants.mjs` declares `POST /api/common-docs/reanalyze-batch` 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-44030a1dbb03847e", "name": "Unused endpoint: POST /api/agent-data/company-certificates/reanalyze-batch", "shortDescription": {"text": "Unused endpoint: POST /api/agent-data/company-certificates/reanalyze-batch"}, "fullDescription": {"text": "`scripts/smoke/common-doc-analysis-state-invariants.mjs` declares `POST /api/agent-data/company-certificates/reanalyze-batch` 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-1596bc93e710e2b6", "name": "Unused endpoint: GET /api/company-profile/effective-summary", "shortDescription": {"text": "Unused endpoint: GET /api/company-profile/effective-summary"}, "fullDescription": {"text": "`scripts/smoke/company-profile-effective-api.mjs` declares `GET /api/company-profile/effective-summary` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-61ec50de6a0b1ccb", "name": "Unused endpoint: GET /api/v1/company-profile/effective", "shortDescription": {"text": "Unused endpoint: GET /api/v1/company-profile/effective"}, "fullDescription": {"text": "`scripts/smoke/company-profile-effective-api.mjs` declares `GET /api/v1/company-profile/effective` 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-049aeec777429db8", "name": "Unused endpoint: POST /api/bid-strategy/analyses/:id/source-document", "shortDescription": {"text": "Unused endpoint: POST /api/bid-strategy/analyses/:id/source-document"}, "fullDescription": {"text": "`scripts/smoke/bid-strategy-existing-document-reupload.mjs` declares `POST /api/bid-strategy/analyses/:id/source-document` 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-c7f4bfeaca98b795", "name": "Unused endpoint: USE /prefix", "shortDescription": {"text": "Unused endpoint: USE /prefix"}, "fullDescription": {"text": "`script/dump-routes.mjs` declares `USE /prefix` 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-d56377de0f04f92b", "name": "Unused endpoint: POST /jobs/video", "shortDescription": {"text": "Unused endpoint: POST /jobs/video"}, "fullDescription": {"text": "`worker/youtube-dl/src/routes/video.ts` declares `POST /jobs/video` 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-7d96f5f5efab651c", "name": "Unused endpoint: POST /jobs/thumbnail", "shortDescription": {"text": "Unused endpoint: POST /jobs/thumbnail"}, "fullDescription": {"text": "`worker/youtube-dl/src/routes/thumbnail.ts` declares `POST /jobs/thumbnail` 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-8a6e87283107a478", "name": "Unused endpoint: GET /jobs/:id/progress", "shortDescription": {"text": "Unused endpoint: GET /jobs/:id/progress"}, "fullDescription": {"text": "`worker/youtube-dl/src/routes/progress.ts` declares `GET /jobs/:id/progress` 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-50a6ecbda9765e0f", "name": "Unused endpoint: POST /jobs/subtitle", "shortDescription": {"text": "Unused endpoint: POST /jobs/subtitle"}, "fullDescription": {"text": "`worker/youtube-dl/src/routes/subtitle.ts` declares `POST /jobs/subtitle` 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-5197e41e01986f8c", "name": "Unused endpoint: POST /jobs/info", "shortDescription": {"text": "Unused endpoint: POST /jobs/info"}, "fullDescription": {"text": "`worker/youtube-dl/src/routes/info.ts` declares `POST /jobs/info` 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-8bf2f7ca3faa1f1b", "name": "Unused endpoint: USE /api/auth/login", "shortDescription": {"text": "Unused endpoint: USE /api/auth/login"}, "fullDescription": {"text": "`server/index.ts` declares `USE /api/auth/login` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-339c7e0b4e898322", "name": "Unused endpoint: USE /api/login", "shortDescription": {"text": "Unused endpoint: USE /api/login"}, "fullDescription": {"text": "`server/index.ts` declares `USE /api/login` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-797528a4ad45e705", "name": "Unused endpoint: GET /api/projects/:projectId/bid-documents", "shortDescription": {"text": "Unused endpoint: GET /api/projects/:projectId/bid-documents"}, "fullDescription": {"text": "`server/routes.ts` declares `GET /api/projects/:projectId/bid-documents` 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-3480dff9f3553d05", "name": "Unused endpoint: GET /api/project-bid-documents/:id", "shortDescription": {"text": "Unused endpoint: GET /api/project-bid-documents/:id"}, "fullDescription": {"text": "`server/routes.ts` declares `GET /api/project-bid-documents/: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-3a50c6151fc8ad66", "name": "Unused endpoint: POST /api/project-bid-documents", "shortDescription": {"text": "Unused endpoint: POST /api/project-bid-documents"}, "fullDescription": {"text": "`server/routes.ts` declares `POST /api/project-bid-documents` 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-205b56c88235f936", "name": "Unused endpoint: PATCH /api/project-bid-documents/:id", "shortDescription": {"text": "Unused endpoint: PATCH /api/project-bid-documents/:id"}, "fullDescription": {"text": "`server/routes.ts` declares `PATCH /api/project-bid-documents/: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-2ed0826da8e33bd1", "name": "Unused endpoint: DELETE /api/project-bid-documents/:id", "shortDescription": {"text": "Unused endpoint: DELETE /api/project-bid-documents/:id"}, "fullDescription": {"text": "`server/routes.ts` declares `DELETE /api/project-bid-documents/: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-1ee7100a6c69288f", "name": "Unused endpoint: GET /api/project-document-edits/:projectId", "shortDescription": {"text": "Unused endpoint: GET /api/project-document-edits/:projectId"}, "fullDescription": {"text": "`server/routes.ts` declares `GET /api/project-document-edits/:projectId` 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-54ced935c1a44ae4", "name": "Unused endpoint: DELETE /api/project-document-edits/:projectId", "shortDescription": {"text": "Unused endpoint: DELETE /api/project-document-edits/:projectId"}, "fullDescription": {"text": "`server/routes.ts` declares `DELETE /api/project-document-edits/:projectId` 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-f717791eabd84343", "name": "Unused endpoint: GET /api/projects/:projectId/merge-config", "shortDescription": {"text": "Unused endpoint: GET /api/projects/:projectId/merge-config"}, "fullDescription": {"text": "`server/routes.ts` declares `GET /api/projects/:projectId/merge-config` 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-bd5788c5beaa0532", "name": "Unused endpoint: GET /api/employee-statistics-overrides", "shortDescription": {"text": "Unused endpoint: GET /api/employee-statistics-overrides"}, "fullDescription": {"text": "`server/routes.ts` declares `GET /api/employee-statistics-overrides` 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-436858f226c44780", "name": "Unused endpoint: POST /api/employee-statistics-overrides", "shortDescription": {"text": "Unused endpoint: POST /api/employee-statistics-overrides"}, "fullDescription": {"text": "`server/routes.ts` declares `POST /api/employee-statistics-overrides` 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-d64c70cfff9448f6", "name": "Unused endpoint: GET /api/experiences/:id", "shortDescription": {"text": "Unused endpoint: GET /api/experiences/:id"}, "fullDescription": {"text": "`server/routes.ts` declares `GET /api/experiences/: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-46e5068aa4c9bdb3", "name": "Unused endpoint: POST /api/experiences", "shortDescription": {"text": "Unused endpoint: POST /api/experiences"}, "fullDescription": {"text": "`server/routes.ts` declares `POST /api/experiences` 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-2c6037c06e4e2d17", "name": "Unused endpoint: PATCH /api/experiences/:id", "shortDescription": {"text": "Unused endpoint: PATCH /api/experiences/:id"}, "fullDescription": {"text": "`server/routes.ts` declares `PATCH /api/experiences/: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-2210e27a6a136c09", "name": "Unused endpoint: DELETE /api/experiences/:id", "shortDescription": {"text": "Unused endpoint: DELETE /api/experiences/:id"}, "fullDescription": {"text": "`server/routes.ts` declares `DELETE /api/experiences/: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-71dc89a5570a519b", "name": "Unused endpoint: GET /api/employees/:employeeId/career-history", "shortDescription": {"text": "Unused endpoint: GET /api/employees/:employeeId/career-history"}, "fullDescription": {"text": "`server/routes.ts` declares `GET /api/employees/:employeeId/career-history` 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-b239656ccff9dd4c", "name": "Unused endpoint: POST /api/employees/:employeeId/career-history", "shortDescription": {"text": "Unused endpoint: POST /api/employees/:employeeId/career-history"}, "fullDescription": {"text": "`server/routes.ts` declares `POST /api/employees/:employeeId/career-history` 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-16720209d721c791", "name": "Unused endpoint: PATCH /api/career-history/:id", "shortDescription": {"text": "Unused endpoint: PATCH /api/career-history/:id"}, "fullDescription": {"text": "`server/routes.ts` declares `PATCH /api/career-history/: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-5dd3ddfd4eb8feab", "name": "Unused endpoint: DELETE /api/career-history/:id", "shortDescription": {"text": "Unused endpoint: DELETE /api/career-history/:id"}, "fullDescription": {"text": "`server/routes.ts` declares `DELETE /api/career-history/: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-e64393feefb26988", "name": "Unused endpoint: GET /api/user-docs", "shortDescription": {"text": "Unused endpoint: GET /api/user-docs"}, "fullDescription": {"text": "`server/routes.ts` declares `GET /api/user-docs` 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-cda010ddf41c77cc", "name": "Unused endpoint: GET /api/user-docs/:id", "shortDescription": {"text": "Unused endpoint: GET /api/user-docs/:id"}, "fullDescription": {"text": "`server/routes.ts` declares `GET /api/user-docs/: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-793bcead0d94ea0e", "name": "Unused endpoint: POST /api/user-docs", "shortDescription": {"text": "Unused endpoint: POST /api/user-docs"}, "fullDescription": {"text": "`server/routes.ts` declares `POST /api/user-docs` 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/25355"}, "properties": {"repository": "devilan1204-spec/MarsManager", "repoUrl": "https://github.com/devilan1204-spec/MarsManager", "branch": "main"}, "results": [{"ruleId": "scanner-6924ad1e7816fa2e", "level": "note", "message": {"text": "Possibly dead Python function: format_number"}, "properties": {"repobilityId": "9ff47ce1d2682fff", "scanner": "scanner-primary", "fingerprint": "6924ad1e7816fa2e", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Web-Analyzer/app.py:16"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5e92eaae0b6fef80", "level": "note", "message": {"text": "Possibly dead Python function: apply_style"}, "properties": {"repobilityId": "7d1e26b4746979e0", "scanner": "scanner-primary", "fingerprint": "5e92eaae0b6fef80", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Web-Analyzer/app.py:42"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4918dc5fd27171c3", "level": "note", "message": {"text": "Possibly dead Python function: format_num"}, "properties": {"repobilityId": "0c61ce62609395f2", "scanner": "scanner-primary", "fingerprint": "4918dc5fd27171c3", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Web-Analyzer/app.py:54"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0cf87191924e4a57", "level": "note", "message": {"text": "Possibly dead Python function: format_number"}, "properties": {"repobilityId": "9ff47ce1d2682fff", "scanner": "scanner-primary", "fingerprint": "0cf87191924e4a57", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Web-Analyzer/Web-Analyzer/app.py:16"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-24674087d58454f9", "level": "note", "message": {"text": "Possibly dead Python function: apply_style"}, "properties": {"repobilityId": "7d1e26b4746979e0", "scanner": "scanner-primary", "fingerprint": "24674087d58454f9", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Web-Analyzer/Web-Analyzer/app.py:42"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5a6a3f253e7f4a8b", "level": "note", "message": {"text": "Possibly dead Python function: format_num"}, "properties": {"repobilityId": "0c61ce62609395f2", "scanner": "scanner-primary", "fingerprint": "5a6a3f253e7f4a8b", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Web-Analyzer/Web-Analyzer/app.py:54"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-070866f2665a321b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 worker/youtube-dl/src/index.ts:40"}, "properties": {"repobilityId": "95fd19fcbbebf097", "scanner": "scanner-primary", "fingerprint": "070866f2665a321b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1e6e13d6d806ab60", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 worker/rfp-parser/src/index.ts:8"}, "properties": {"repobilityId": "cc82e078c8b45aca", "scanner": "scanner-primary", "fingerprint": "1e6e13d6d806ab60", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a6057dbe28b7e257", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 worker/rfp-parser/src/poll.ts:141"}, "properties": {"repobilityId": "7e1100ec38df03b8", "scanner": "scanner-primary", "fingerprint": "a6057dbe28b7e257", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9303e2d2a83a7a9b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 rfp-system-export/rfp-system-export/server/rfp-normalizer.ts:590"}, "properties": {"repobilityId": "4472d11ea37cc0b5", "scanner": "scanner-primary", "fingerprint": "9303e2d2a83a7a9b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5da5ebf6fcd03b77", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 rfp-system-export/rfp-system-export/server/rfp-crawler.ts:160"}, "properties": {"repobilityId": "d8587bbe6774e113", "scanner": "scanner-primary", "fingerprint": "5da5ebf6fcd03b77", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-dc38082a1456429e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 rfp-system-export/rfp-system-export/server/rfp-scheduler.ts:25"}, "properties": {"repobilityId": "6f538b6f3a5abc48", "scanner": "scanner-primary", "fingerprint": "dc38082a1456429e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b791b82e1e01b137", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 rfp-system-export/rfp-system-export/server/rfp-multihop-crawler.ts:58"}, "properties": {"repobilityId": "d5cef13d6c6175e1", "scanner": "scanner-primary", "fingerprint": "b791b82e1e01b137", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e62a80020b52bbbf", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 rfp-system-export/rfp-system-export/server/services/rfp-detail-extractor.ts:77"}, "properties": {"repobilityId": "df22f1c13220964e", "scanner": "scanner-primary", "fingerprint": "e62a80020b52bbbf", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3e5582ed3aa8204f", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 rfp-system-export/rfp-system-export/server/services/mice-rfp-crawler.ts:260"}, "properties": {"repobilityId": "8054a73b348ebe39", "scanner": "scanner-primary", "fingerprint": "3e5582ed3aa8204f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-285661d4c35f9f21", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 rfp-system-export/rfp-system-export/server/services/mice-rfp-crawler.ts:257"}, "properties": {"repobilityId": "0fca5b9f542807d5", "scanner": "scanner-primary", "fingerprint": "285661d4c35f9f21", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ccaf0d12c0c22087", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 rfp-system-export/rfp-system-export/server/services/rfp-filter-service.ts:50"}, "properties": {"repobilityId": "430a2fee922d05e9", "scanner": "scanner-primary", "fingerprint": "ccaf0d12c0c22087", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2719e6b542640876", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 rfp-system-export/rfp-system-export/server/services/rfp-attachment-processor.ts:179"}, "properties": {"repobilityId": "0b45c80e33f06775", "scanner": "scanner-primary", "fingerprint": "2719e6b542640876", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-90f4f71e0c39fb0f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 rfp-system-export/rfp-system-export/server/services/rfp-aggregate-parser.ts:141"}, "properties": {"repobilityId": "9fd5cbfc7cbe12f3", "scanner": "scanner-primary", "fingerprint": "90f4f71e0c39fb0f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-aa4a6f45157308c1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 rfp-system-export/rfp-system-export/client/RfpPage.tsx:352"}, "properties": {"repobilityId": "fba23a6ae8f15f28", "scanner": "scanner-primary", "fingerprint": "aa4a6f45157308c1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d1cac2c12fda16ee", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-to-object-storage.ts:38"}, "properties": {"repobilityId": "0a572850dc04ac95", "scanner": "scanner-primary", "fingerprint": "d1cac2c12fda16ee", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e88f3accfccadb74", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/reset-password.ts:14"}, "properties": {"repobilityId": "cff7b49d20a9d0b4", "scanner": "scanner-primary", "fingerprint": "e88f3accfccadb74", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-aaeb25371d6bd62b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/dedup-listings.ts:65"}, "properties": {"repobilityId": "0a942fc6885622b0", "scanner": "scanner-primary", "fingerprint": "aaeb25371d6bd62b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e120e14aaa993f56", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-legacy-data.ts:73"}, "properties": {"repobilityId": "89ef98ee7445f5dd", "scanner": "scanner-primary", "fingerprint": "e120e14aaa993f56", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e84dd7580473cb1d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/sanity-check-r2.ts:10"}, "properties": {"repobilityId": "d0c0a35f5a3ad743", "scanner": "scanner-primary", "fingerprint": "e84dd7580473cb1d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-499b90846212c9cd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/setup-dedup-index.ts:63"}, "properties": {"repobilityId": "ce52c1c3c7d6edac", "scanner": "scanner-primary", "fingerprint": "499b90846212c9cd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-beb7cae61493cc89", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/cleanup-g2b-irrelevant.ts:26"}, "properties": {"repobilityId": "fbe939b0ce1ab38d", "scanner": "scanner-primary", "fingerprint": "beb7cae61493cc89", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3e6affd69973058e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-gcs-to-r2.ts:192"}, "properties": {"repobilityId": "b0b78f3ee176b1c6", "scanner": "scanner-primary", "fingerprint": "3e6affd69973058e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9600ef73f0986be9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-certificates.ts:63"}, "properties": {"repobilityId": "3dd4b1403f679e8f", "scanner": "scanner-primary", "fingerprint": "9600ef73f0986be9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5fb32eab1a6388a8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/sync-replit-disk-to-r2.ts:140"}, "properties": {"repobilityId": "20c6a209b75fc2f1", "scanner": "scanner-primary", "fingerprint": "5fb32eab1a6388a8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e9f77c9aaadfcc04", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/create-admin.ts:8"}, "properties": {"repobilityId": "42bf929609ac2fd4", "scanner": "scanner-primary", "fingerprint": "e9f77c9aaadfcc04", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-656a8fd1cac412a8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/sync-uploads-to-object-storage.ts:8"}, "properties": {"repobilityId": "a6a4aa5cf1ec8bb1", "scanner": "scanner-primary", "fingerprint": "656a8fd1cac412a8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f67ea93f58a7326f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/probe-award-participants.ts:156"}, "properties": {"repobilityId": "2151eecc56688ad2", "scanner": "scanner-primary", "fingerprint": "f67ea93f58a7326f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-397b94a178c532fa", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 script/cleanup-rfp-duplicates.ts:30"}, "properties": {"repobilityId": "de399f2071a828bb", "scanner": "scanner-primary", "fingerprint": "397b94a178c532fa", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a7b51da80c1921d8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 script/seed-serpapi-queries.ts:49"}, "properties": {"repobilityId": "80d46aabca7f8253", "scanner": "scanner-primary", "fingerprint": "a7b51da80c1921d8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-173b2fdd1ba17305", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 script/check-withholding.ts:17"}, "properties": {"repobilityId": "20e962d1ba832b68", "scanner": "scanner-primary", "fingerprint": "173b2fdd1ba17305", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6a8e5d3586ee72e0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 script/build.ts:78"}, "properties": {"repobilityId": "47ceeaa6313fa094", "scanner": "scanner-primary", "fingerprint": "6a8e5d3586ee72e0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-03a4ca8026692c86", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 script/smoke/score-relevance.ts:6"}, "properties": {"repobilityId": "cd0ec8d4cc93f6ab", "scanner": "scanner-primary", "fingerprint": "03a4ca8026692c86", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-dfb0707c90b08cf8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 script/smoke/serpapi-budget.ts:13"}, "properties": {"repobilityId": "01d715121b1e5831", "scanner": "scanner-primary", "fingerprint": "dfb0707c90b08cf8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-07a4079981e3db4e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/index.ts:248"}, "properties": {"repobilityId": "b4961a877930fd2f", "scanner": "scanner-primary", "fingerprint": "07a4079981e3db4e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6e335d15b9f4b9f7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/analysis-worker.ts:37"}, "properties": {"repobilityId": "9724e08501ff0b1d", "scanner": "scanner-primary", "fingerprint": "6e335d15b9f4b9f7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-354353377ce9707a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/storage.ts:2162"}, "properties": {"repobilityId": "b441b886189d988b", "scanner": "scanner-primary", "fingerprint": "354353377ce9707a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bd640009e47b91f1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/seed-research-lab.ts:30"}, "properties": {"repobilityId": "985d74d5c81cdb35", "scanner": "scanner-primary", "fingerprint": "bd640009e47b91f1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ed5cdaddb20ab958", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/crawler-scheduler.ts:57"}, "properties": {"repobilityId": "7f21b8f49c27c4ce", "scanner": "scanner-primary", "fingerprint": "ed5cdaddb20ab958", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-dc0c914843448f1b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/seed-dev-log.ts:8"}, "properties": {"repobilityId": "05bc4455c8553267", "scanner": "scanner-primary", "fingerprint": "dc0c914843448f1b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9bc43eb0376bfa2e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/notification-scheduler.ts:125"}, "properties": {"repobilityId": "ecb85366213c0a52", "scanner": "scanner-primary", "fingerprint": "9bc43eb0376bfa2e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-55645bcf84f337b9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/seed-leveling.ts:54"}, "properties": {"repobilityId": "0d5d234682bdd8b9", "scanner": "scanner-primary", "fingerprint": "55645bcf84f337b9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-72e7abf961300372", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/seed-question-bank.ts:69"}, "properties": {"repobilityId": "fbc22e34c13e07c9", "scanner": "scanner-primary", "fingerprint": "72e7abf961300372", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ace3766f6d57319b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/pdf-service.ts:34"}, "properties": {"repobilityId": "c37c9cebdb1d866f", "scanner": "scanner-primary", "fingerprint": "ace3766f6d57319b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c7d89a710a872884", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/routes.ts:402"}, "properties": {"repobilityId": "0bee57c0b23c9def", "scanner": "scanner-primary", "fingerprint": "c7d89a710a872884", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-45a26a464b23b0f5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/crawl-state.ts:61"}, "properties": {"repobilityId": "1acb3ff73f78b8d3", "scanner": "scanner-primary", "fingerprint": "45a26a464b23b0f5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bd17d489b2ae7222", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/backup-service.ts:60"}, "properties": {"repobilityId": "61221967ff133c1a", "scanner": "scanner-primary", "fingerprint": "bd17d489b2ae7222", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cd3304ac3fa5b3bf", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/rpa-workers/government24-worker.ts:20"}, "properties": {"repobilityId": "9550d327db1d1c61", "scanner": "scanner-primary", "fingerprint": "cd3304ac3fa5b3bf", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-729d2e5f66ba7d61", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/rpa-workers/wetax-worker.ts:20"}, "properties": {"repobilityId": "2c8ec50234528c2f", "scanner": "scanner-primary", "fingerprint": "729d2e5f66ba7d61", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c5ea1d3e66384cc2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/rpa-workers/hometax-worker.ts:20"}, "properties": {"repobilityId": "596414652bf590e0", "scanner": "scanner-primary", "fingerprint": "c5ea1d3e66384cc2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-915b3049befd7f04", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/object-storage/objectStorage.ts:408"}, "properties": {"repobilityId": "1f6af2f03c893a07", "scanner": "scanner-primary", "fingerprint": "915b3049befd7f04", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5dee30e230959885", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/middleware/login-lock-guard.ts:118"}, "properties": {"repobilityId": "534aa401993a458f", "scanner": "scanner-primary", "fingerprint": "5dee30e230959885", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5844afd859b1c060", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/middleware/quota-guard.ts:324"}, "properties": {"repobilityId": "03b2c7b7461dccf9", "scanner": "scanner-primary", "fingerprint": "5844afd859b1c060", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b1644cd146673343", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/services/email-service.ts:146"}, "properties": {"repobilityId": "e8b49f32ad5337a6", "scanner": "scanner-primary", "fingerprint": "b1644cd146673343", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fb14d470f262c25d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/services/dev-log-screenshot.ts:49"}, "properties": {"repobilityId": "3809e9ea97b3090b", "scanner": "scanner-primary", "fingerprint": "fb14d470f262c25d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e14b032ba1a0cff8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/services/file-text-extractor.ts:185"}, "properties": {"repobilityId": "794e64025db5b92a", "scanner": "scanner-primary", "fingerprint": "e14b032ba1a0cff8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6266caeb0b074041", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/services/rfp-analyzer.ts:115"}, "properties": {"repobilityId": "860e2ac1c8d3143f", "scanner": "scanner-primary", "fingerprint": "6266caeb0b074041", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2ccd19fe98437e1e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/services/pikk-crawler.ts:195"}, "properties": {"repobilityId": "023926f38fd9da49", "scanner": "scanner-primary", "fingerprint": "2ccd19fe98437e1e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f8100e459e6cf946", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/services/serpapi-crawler.ts:617"}, "properties": {"repobilityId": "20188afc09420593", "scanner": "scanner-primary", "fingerprint": "f8100e459e6cf946", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f18c602abd5a4ceb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/services/custom-url-crawler.ts:365"}, "properties": {"repobilityId": "24d39216cc9c4452", "scanner": "scanner-primary", "fingerprint": "f18c602abd5a4ceb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1fe13db32fd3c34a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/services/dev-log-generator.ts:87"}, "properties": {"repobilityId": "653a5784e32faced", "scanner": "scanner-primary", "fingerprint": "1fe13db32fd3c34a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2459e097e2556c58", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/services/lib/fetch-page.ts:121"}, "properties": {"repobilityId": "8cf84f26e3f996f0", "scanner": "scanner-primary", "fingerprint": "2459e097e2556c58", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-561f205bd922673b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/routes/auth.ts:208"}, "properties": {"repobilityId": "91855e7856172722", "scanner": "scanner-primary", "fingerprint": "561f205bd922673b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d92c9b0aece6dc4a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/routes/rfp.ts:83"}, "properties": {"repobilityId": "cdd2d36bb4a02149", "scanner": "scanner-primary", "fingerprint": "d92c9b0aece6dc4a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e6e70832e966fa25", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/routes/ai-documents.ts:145"}, "properties": {"repobilityId": "5bbeca0e7f6bc768", "scanner": "scanner-primary", "fingerprint": "e6e70832e966fa25", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-53fdcadcbb5dc6db", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/routes/contracts.ts:494"}, "properties": {"repobilityId": "0cd288992f65cd85", "scanner": "scanner-primary", "fingerprint": "53fdcadcbb5dc6db", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-49bcabfc4fc654ee", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/routes/pdf.ts:75"}, "properties": {"repobilityId": "a9ec49e196d0ce38", "scanner": "scanner-primary", "fingerprint": "49bcabfc4fc654ee", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a0324778495886d3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/routes/utils.ts:145"}, "properties": {"repobilityId": "34c83d7f861d6d6c", "scanner": "scanner-primary", "fingerprint": "a0324778495886d3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b1f588cccb25d2d7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/routes/evaluation.ts:1397"}, "properties": {"repobilityId": "ba4de7c9cd222c00", "scanner": "scanner-primary", "fingerprint": "b1f588cccb25d2d7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ebab6e526a1a1c65", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/routes/gpt-image.ts:150"}, "properties": {"repobilityId": "f6c58771585adbb9", "scanner": "scanner-primary", "fingerprint": "ebab6e526a1a1c65", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-855b6550c5980cd2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/routes/admin-maintenance.ts:81"}, "properties": {"repobilityId": "75d427477295defd", "scanner": "scanner-primary", "fingerprint": "855b6550c5980cd2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6a646cf732673bb7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 client/src/hooks/use-upload.ts:34"}, "properties": {"repobilityId": "28566fafa8b49700", "scanner": "scanner-primary", "fingerprint": "6a646cf732673bb7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f85dcede104347e4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/app-sidebar.tsx:238"}, "properties": {"repobilityId": "9254f389c67ee33d", "scanner": "scanner-primary", "fingerprint": "f85dcede104347e4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ce369266be434ef2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/project-files.tsx:231"}, "properties": {"repobilityId": "5646e3b57a1c7c75", "scanner": "scanner-primary", "fingerprint": "ce369266be434ef2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a16f821840208137", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 client/src/components/experience-pdf.tsx:88"}, "properties": {"repobilityId": "5611a87ae6d0560c", "scanner": "scanner-primary", "fingerprint": "a16f821840208137", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-19d25db22a83de10", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/file-preview.tsx:182"}, "properties": {"repobilityId": "d7f604c31815f61b", "scanner": "scanner-primary", "fingerprint": "19d25db22a83de10", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fe7ad845619860e8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/file-dropzone.tsx:167"}, "properties": {"repobilityId": "67b5e227d6aac293", "scanner": "scanner-primary", "fingerprint": "fe7ad845619860e8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-39677f1a1d029745", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/components/certificate-scanner.tsx:430"}, "properties": {"repobilityId": "68136f154f91c94a", "scanner": "scanner-primary", "fingerprint": "39677f1a1d029745", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-65b5b7ba7bc56448", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 client/src/components/bid-documents/employment-certificate.tsx:91"}, "properties": {"repobilityId": "4e428edfdf646c4b", "scanner": "scanner-primary", "fingerprint": "65b5b7ba7bc56448", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-a7b3db9745e9c497", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 client/src/components/ui/chart.tsx:81"}, "properties": {"repobilityId": "1c3a04e593515dbe", "scanner": "scanner-primary", "fingerprint": "a7b3db9745e9c497", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-48702c7313d9a9ac", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/question-bank.tsx:757"}, "properties": {"repobilityId": "dbaebb3f305d814f", "scanner": "scanner-primary", "fingerprint": "48702c7313d9a9ac", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-73bcd593bc508a88", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/certificate-issuance.tsx:741"}, "properties": {"repobilityId": "576d5cb10192d60d", "scanner": "scanner-primary", "fingerprint": "73bcd593bc508a88", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f41d9396dc4999d5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/my-evaluation.tsx:901"}, "properties": {"repobilityId": "29eb37c9ee22da29", "scanner": "scanner-primary", "fingerprint": "f41d9396dc4999d5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3a4359d09eac6540", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/projects.tsx:830"}, "properties": {"repobilityId": "dd9808d912bb8e66", "scanner": "scanner-primary", "fingerprint": "3a4359d09eac6540", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8e7355c15c3fcfe4", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 client/src/pages/access-logs.tsx:382"}, "properties": {"repobilityId": "a716df4613bf9b97", "scanner": "scanner-primary", "fingerprint": "8e7355c15c3fcfe4", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-1b4526f4f72a2eb4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/company-settings.tsx:844"}, "properties": {"repobilityId": "aa7c1c40052ad8bf", "scanner": "scanner-primary", "fingerprint": "1b4526f4f72a2eb4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cdb367a8329ced53", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/document-generator.tsx:3319"}, "properties": {"repobilityId": "14b8c7bf8c950b8f", "scanner": "scanner-primary", "fingerprint": "cdb367a8329ced53", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1a6a442508be8f6c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 client/src/pages/document-generator.tsx:311"}, "properties": {"repobilityId": "4818479043932c97", "scanner": "scanner-primary", "fingerprint": "1a6a442508be8f6c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a1f2c19579963b67", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 client/src/pages/document-generator.tsx:3064"}, "properties": {"repobilityId": "90134d00f3921241", "scanner": "scanner-primary", "fingerprint": "a1f2c19579963b67", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-051565f1f24d2289", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/contracts.tsx:627"}, "properties": {"repobilityId": "64b48de7268be84b", "scanner": "scanner-primary", "fingerprint": "051565f1f24d2289", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-327fd6448b435cea", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/experiences.tsx:123"}, "properties": {"repobilityId": "4ba3f88eaa045bbf", "scanner": "scanner-primary", "fingerprint": "327fd6448b435cea", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ff50bc0ee6b62c2e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/salary-converter.tsx:131"}, "properties": {"repobilityId": "5e0f4ef139c919c2", "scanner": "scanner-primary", "fingerprint": "ff50bc0ee6b62c2e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2f316a3ba5939d89", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/documents.tsx:1328"}, "properties": {"repobilityId": "f80b21f37a8b6153", "scanner": "scanner-primary", "fingerprint": "2f316a3ba5939d89", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e909e056d02e18a2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/kpi-dashboard.tsx:651"}, "properties": {"repobilityId": "7ce7ac2f486cd76a", "scanner": "scanner-primary", "fingerprint": "e909e056d02e18a2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f866a43872bec3cb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/calendar.tsx:413"}, "properties": {"repobilityId": "ce294a2bf96e58fb", "scanner": "scanner-primary", "fingerprint": "f866a43872bec3cb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7bc75b774e16415b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/employees.tsx:756"}, "properties": {"repobilityId": "a672893918677290", "scanner": "scanner-primary", "fingerprint": "7bc75b774e16415b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-33e3b3bc480b4642", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/rfp.tsx:1176"}, "properties": {"repobilityId": "d52c5367702763fb", "scanner": "scanner-primary", "fingerprint": "33e3b3bc480b4642", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f1455123381a1711", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/estimates.tsx:1358"}, "properties": {"repobilityId": "bf76e4f1ce224b8b", "scanner": "scanner-primary", "fingerprint": "f1455123381a1711", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-84ac5ffa7c3ebd4c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/sales-records.tsx:1638"}, "properties": {"repobilityId": "84e462acbe5191f8", "scanner": "scanner-primary", "fingerprint": "84ac5ffa7c3ebd4c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d4b5ac85d9335f14", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 client/src/pages/sales-records.tsx:1296"}, "properties": {"repobilityId": "473ba061affaf664", "scanner": "scanner-primary", "fingerprint": "d4b5ac85d9335f14", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d535f30bd643a8c6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/company-certificates.tsx:462"}, "properties": {"repobilityId": "9c91547cd7bc3b16", "scanner": "scanner-primary", "fingerprint": "d535f30bd643a8c6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7da598f1011e77ee", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/hermes-control.tsx:609"}, "properties": {"repobilityId": "ae3739fecf5da59e", "scanner": "scanner-primary", "fingerprint": "7da598f1011e77ee", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9ba3de1ea5617d4c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/rfp-sources.tsx:420"}, "properties": {"repobilityId": "675c280e282ba402", "scanner": "scanner-primary", "fingerprint": "9ba3de1ea5617d4c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b59dd57783f8f995", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/bid-analytics.tsx:827"}, "properties": {"repobilityId": "1daffce5b6cf1f00", "scanner": "scanner-primary", "fingerprint": "b59dd57783f8f995", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f0b00ddb2f6ab317", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/menu-permissions.tsx:435"}, "properties": {"repobilityId": "4ed75a9fd310ce90", "scanner": "scanner-primary", "fingerprint": "f0b00ddb2f6ab317", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-17a0d7a7dc2f0c85", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/dashboard.tsx:255"}, "properties": {"repobilityId": "bd47345dcb14194b", "scanner": "scanner-primary", "fingerprint": "17a0d7a7dc2f0c85", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0e04571ef3b2b228", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/service-performance.tsx:882"}, "properties": {"repobilityId": "d08c3963d8575d56", "scanner": "scanner-primary", "fingerprint": "0e04571ef3b2b228", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fb973a13474ea1d1", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 client/src/pages/service-performance.tsx:1070"}, "properties": {"repobilityId": "02b6cd81f302290c", "scanner": "scanner-primary", "fingerprint": "fb973a13474ea1d1", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-55a5b4a7e91c8050", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/dev-log.tsx:274"}, "properties": {"repobilityId": "ab33181754847d32", "scanner": "scanner-primary", "fingerprint": "55a5b4a7e91c8050", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5d6f6bc35aabf054", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/gpt-image.tsx:789"}, "properties": {"repobilityId": "6151c830666433af", "scanner": "scanner-primary", "fingerprint": "5d6f6bc35aabf054", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-70cf405b43965bbe", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/ai-document-generator.tsx:327"}, "properties": {"repobilityId": "edbc6b0c0b81d7b2", "scanner": "scanner-primary", "fingerprint": "70cf405b43965bbe", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b634d7f76040cefa", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 client/src/pages/ai-document-generator.tsx:313"}, "properties": {"repobilityId": "2706117195df891f", "scanner": "scanner-primary", "fingerprint": "b634d7f76040cefa", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-917fbf5ffd0b8940", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/bgm-cue-sheet/index.tsx:916"}, "properties": {"repobilityId": "e79a7f2ce922e1cf", "scanner": "scanner-primary", "fingerprint": "917fbf5ffd0b8940", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-47d01bec87a671a5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/research-lab/projects-tab.tsx:275"}, "properties": {"repobilityId": "9fab524ee09b02a2", "scanner": "scanner-primary", "fingerprint": "47d01bec87a671a5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7a803e70f53836b4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/research-lab/devlog-tab.tsx:148"}, "properties": {"repobilityId": "25960ae3b907c5b4", "scanner": "scanner-primary", "fingerprint": "7a803e70f53836b4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c0351a4f16128088", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/research-lab/notes-tab.tsx:320"}, "properties": {"repobilityId": "a26dd7974dccb966", "scanner": "scanner-primary", "fingerprint": "c0351a4f16128088", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d17a01a991e8c704", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/bid-strategy/[id].tsx:444"}, "properties": {"repobilityId": "363889f6924ce997", "scanner": "scanner-primary", "fingerprint": "d17a01a991e8c704", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9f2231b88ca0cdd6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/bid-strategy/index.tsx:539"}, "properties": {"repobilityId": "6d5fecb7e228bfdd", "scanner": "scanner-primary", "fingerprint": "9f2231b88ca0cdd6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-33eb01527126dfc0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/bid-strategy/new.tsx:258"}, "properties": {"repobilityId": "d2eda953431efb93", "scanner": "scanner-primary", "fingerprint": "33eb01527126dfc0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8e192b1b8be969a9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/bid-strategy/components/HermesProposalPanel.tsx:116"}, "properties": {"repobilityId": "c848c2b47648f686", "scanner": "scanner-primary", "fingerprint": "8e192b1b8be969a9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6c56b607d400875d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/bid-strategy/components/ScoringCard.tsx:154"}, "properties": {"repobilityId": "6e917faa85265c19", "scanner": "scanner-primary", "fingerprint": "6c56b607d400875d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-64e60597ac5493e2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/bid-strategy/components/DocumentQAPanel.tsx:183"}, "properties": {"repobilityId": "24c1762a9da2ad8c", "scanner": "scanner-primary", "fingerprint": "64e60597ac5493e2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-eb8bf70990c56316", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/bid-strategy/components/SubmissionChecklistCard.tsx:234"}, "properties": {"repobilityId": "6a65939efdbd2613", "scanner": "scanner-primary", "fingerprint": "eb8bf70990c56316", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8c6aa45dd8300634", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/bid-strategy/components/EligibilityCard.tsx:343"}, "properties": {"repobilityId": "86d61010232ff572", "scanner": "scanner-primary", "fingerprint": "8c6aa45dd8300634", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-58b245ff083f7b64", "level": "note", "message": {"text": "\"active\" state uses light bg in a dark theme \u2014 client/src/pages/bid-strategy/components/EligibilityCard.tsx:1277"}, "properties": {"repobilityId": "3e9bbadf1543bbad", "scanner": "scanner-primary", "fingerprint": "58b245ff083f7b64", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.active-light-bg"]}}, {"ruleId": "scanner-2730277529c153e3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/bid-strategy/components/AnalysisProgressDashboard.tsx:99"}, "properties": {"repobilityId": "b2a61e0c0031d58e", "scanner": "scanner-primary", "fingerprint": "2730277529c153e3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-adeef4257f05eede", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/bid-strategy/components/BidStrategyDropzone.tsx:147"}, "properties": {"repobilityId": "758cc2be4b4832f0", "scanner": "scanner-primary", "fingerprint": "adeef4257f05eede", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9dc314a6f3bc8152", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/comment-picker/components/BlacklistTab.tsx:153"}, "properties": {"repobilityId": "6b690e3b47f1dede", "scanner": "scanner-primary", "fingerprint": "9dc314a6f3bc8152", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-53b591a4e548d763", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/comment-picker/components/DrawTab.tsx:103"}, "properties": {"repobilityId": "93a45a47cde2fc6b", "scanner": "scanner-primary", "fingerprint": "53b591a4e548d763", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ecbe8ffa24d719a7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/comment-picker/components/HistoryTab.tsx:90"}, "properties": {"repobilityId": "ca000057810cf070", "scanner": "scanner-primary", "fingerprint": "ecbe8ffa24d719a7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-210ff3f4d102a90e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/comment-picker/components/AuthorName.tsx:32"}, "properties": {"repobilityId": "d06ac2a5a35586c4", "scanner": "scanner-primary", "fingerprint": "210ff3f4d102a90e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-06e66b9c1f5f8538", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/evaluation/index.tsx:714"}, "properties": {"repobilityId": "28753f09f368658c", "scanner": "scanner-primary", "fingerprint": "06e66b9c1f5f8538", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-795962fa39514e43", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/evaluation/components/ScoreTab.tsx:178"}, "properties": {"repobilityId": "ec1d264e17724309", "scanner": "scanner-primary", "fingerprint": "795962fa39514e43", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6baf3ce665776b8c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/evaluation/components/ResultsTab.tsx:271"}, "properties": {"repobilityId": "c13a614b55ac9589", "scanner": "scanner-primary", "fingerprint": "6baf3ce665776b8c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-054aa9bed5f520ca", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/evaluation/components/CycleOverview.tsx:162"}, "properties": {"repobilityId": "c043878bda199757", "scanner": "scanner-primary", "fingerprint": "054aa9bed5f520ca", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-80935b3a4f36dfda", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/evaluation/components/SettingsDialog.tsx:1975"}, "properties": {"repobilityId": "3016bee2f659c56d", "scanner": "scanner-primary", "fingerprint": "80935b3a4f36dfda", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-775835a41ebad1df", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/src/pages/company-profile/index.tsx:198"}, "properties": {"repobilityId": "99f3d96e12d81c19", "scanner": "scanner-primary", "fingerprint": "775835a41ebad1df", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5cd40151e6c42be0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 client/replit_integrations/audio/index.ts:17"}, "properties": {"repobilityId": "98291856ab3b9fbd", "scanner": "scanner-primary", "fingerprint": "5cd40151e6c42be0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6a35fc023999e2a6", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 artifacts/mockup-sandbox/src/components/ui/chart.tsx:79"}, "properties": {"repobilityId": "5e73f33ec5db7797", "scanner": "scanner-primary", "fingerprint": "6a35fc023999e2a6", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-7813a42c95d8d687", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-bookworm-slim"}, "properties": {"repobilityId": "7d8c062db4ffaa94", "scanner": "scanner-primary", "fingerprint": "7813a42c95d8d687", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "worker/youtube-dl/Dockerfile"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-7813a42c95d8d687", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-bookworm-slim"}, "properties": {"repobilityId": "45f4887931ca1f2d", "scanner": "scanner-primary", "fingerprint": "7813a42c95d8d687", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "worker/youtube-dl/Dockerfile"}, "region": {"startLine": 15}}}]}, {"ruleId": "scanner-025eda0c82e06286", "level": "warning", "message": {"text": "Dockerfile runs as root: worker/g2b-award/Dockerfile"}, "properties": {"repobilityId": "3a42466d6e3fd51c", "scanner": "scanner-primary", "fingerprint": "025eda0c82e06286", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-aa907c09d8c03ab3", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-bookworm-slim"}, "properties": {"repobilityId": "a2368bd0818042ad", "scanner": "scanner-primary", "fingerprint": "aa907c09d8c03ab3", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "worker/g2b-award/Dockerfile"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-aa907c09d8c03ab3", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-bookworm-slim"}, "properties": {"repobilityId": "a473a43e6de18e1e", "scanner": "scanner-primary", "fingerprint": "aa907c09d8c03ab3", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "worker/g2b-award/Dockerfile"}, "region": {"startLine": 10}}}]}, {"ruleId": "scanner-6c7c98fa9a9a2ed8", "level": "warning", "message": {"text": "Dockerfile runs as root: worker/rfp-parser/Dockerfile"}, "properties": {"repobilityId": "c1f0cf9e3743af47", "scanner": "scanner-primary", "fingerprint": "6c7c98fa9a9a2ed8", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-aaa8165578f417d1", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-bookworm-slim"}, "properties": {"repobilityId": "b0d91f47fb69d723", "scanner": "scanner-primary", "fingerprint": "aaa8165578f417d1", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "worker/rfp-parser/Dockerfile"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-aaa8165578f417d1", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-bookworm-slim"}, "properties": {"repobilityId": "97387024cb510aad", "scanner": "scanner-primary", "fingerprint": "aaa8165578f417d1", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "worker/rfp-parser/Dockerfile"}, "region": {"startLine": 10}}}]}, {"ruleId": "scanner-0365577b7f3f4122", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in worker/youtube-dl/src/yt-dlp.ts:4"}, "properties": {"repobilityId": "303f1fc820a35146", "scanner": "scanner-primary", "fingerprint": "0365577b7f3f4122", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "worker/youtube-dl/src/yt-dlp.ts"}, "region": {"startLine": 4}}}]}, {"ruleId": "scanner-3fb71921abb1ff3b", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in worker/rfp-parser/src/convert/run-cmd.ts:1"}, "properties": {"repobilityId": "d5f05deadce9daad", "scanner": "scanner-primary", "fingerprint": "3fb71921abb1ff3b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "worker/rfp-parser/src/convert/run-cmd.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c0c6bffd0733dad1", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/agent-control-hermes-runner.mjs:2"}, "properties": {"repobilityId": "a282fb82ca987d87", "scanner": "scanner-primary", "fingerprint": "c0c6bffd0733dad1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/agent-control-hermes-runner.mjs"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-d9251c0b78404c4f", "level": "error", "message": {"text": "Possible secret in scripts/create-admin.ts"}, "properties": {"repobilityId": "8d9c2612f3304c63", "scanner": "scanner-primary", "fingerprint": "d9251c0b78404c4f", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/create-admin.ts"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-12c256b6aef840c5", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/agent-control-worker.mjs:2"}, "properties": {"repobilityId": "2e3c6186b3860232", "scanner": "scanner-primary", "fingerprint": "12c256b6aef840c5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/agent-control-worker.mjs"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-db17da98cae55300", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/rpa/insurance4-local-agent.mjs:5"}, "properties": {"repobilityId": "39e385941e518260", "scanner": "scanner-primary", "fingerprint": "db17da98cae55300", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/rpa/insurance4-local-agent.mjs"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-98ca321393686223", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in script/agent-safe-commit.mjs:14"}, "properties": {"repobilityId": "35d383d8ab706c74", "scanner": "scanner-primary", "fingerprint": "98ca321393686223", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "script/agent-safe-commit.mjs"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-84c18ffb63e9e281", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in script/check-vercel-api-wrapper.mjs:9"}, "properties": {"repobilityId": "93ac450bbe64edcf", "scanner": "scanner-primary", "fingerprint": "84c18ffb63e9e281", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "script/check-vercel-api-wrapper.mjs"}, "region": {"startLine": 9}}}]}, {"ruleId": "scanner-bfd2ecde65839257", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in script/dev-freshness-check.mjs:8"}, "properties": {"repobilityId": "4f17982e441d0fc0", "scanner": "scanner-primary", "fingerprint": "bfd2ecde65839257", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "script/dev-freshness-check.mjs"}, "region": {"startLine": 8}}}]}, {"ruleId": "scanner-b9b94b08516c8414", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in script/harness-regression-audit.mjs:8"}, "properties": {"repobilityId": "1122589aca05ce20", "scanner": "scanner-primary", "fingerprint": "b9b94b08516c8414", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "script/harness-regression-audit.mjs"}, "region": {"startLine": 8}}}]}, {"ruleId": "scanner-0fd4045403d77d2a", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in script/check-shared-locks.mjs:16"}, "properties": {"repobilityId": "46ca9c137e1e636b", "scanner": "scanner-primary", "fingerprint": "0fd4045403d77d2a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "script/check-shared-locks.mjs"}, "region": {"startLine": 16}}}]}, {"ruleId": "scanner-079a4a289d0ce259", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in script/agent-precheck.mjs:13"}, "properties": {"repobilityId": "f3d58bfd1c563c29", "scanner": "scanner-primary", "fingerprint": "079a4a289d0ce259", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "script/agent-precheck.mjs"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-1ebcb1802ad5ead5", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in script/build.ts:4"}, "properties": {"repobilityId": "5fa6a19deff99fff", "scanner": "scanner-primary", "fingerprint": "1ebcb1802ad5ead5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "script/build.ts"}, "region": {"startLine": 4}}}]}, {"ruleId": "scanner-82c0e172dd8b4736", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in server/rpa-queue.ts:2"}, "properties": {"repobilityId": "ebc47a1c29636e2d", "scanner": "scanner-primary", "fingerprint": "82c0e172dd8b4736", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/rpa-queue.ts"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-d0825a1adb611366", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in server/integrations/audio/client.ts:3"}, "properties": {"repobilityId": "df5638f78bee952e", "scanner": "scanner-primary", "fingerprint": "d0825a1adb611366", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/integrations/audio/client.ts"}, "region": {"startLine": 3}}}]}, {"ruleId": "scanner-47444337371d6a79", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in server/services/youtube-download.ts:10"}, "properties": {"repobilityId": "f0b94b97ae1336cd", "scanner": "scanner-primary", "fingerprint": "47444337371d6a79", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/services/youtube-download.ts"}, "region": {"startLine": 10}}}]}, {"ruleId": "scanner-f39449ef60bbd2ac", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in server/services/youtube-comments.ts:5"}, "properties": {"repobilityId": "ad062dae602f38ca", "scanner": "scanner-primary", "fingerprint": "f39449ef60bbd2ac", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/services/youtube-comments.ts"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-ff9d477ba3a1b8b9", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in server/services/dev-log-generator.ts:5"}, "properties": {"repobilityId": "78fc1349db11474f", "scanner": "scanner-primary", "fingerprint": "ff9d477ba3a1b8b9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/services/dev-log-generator.ts"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-df7f4704871152bb", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in client/src/components/experience-pdf.tsx:88"}, "properties": {"repobilityId": "a181cc1779ef2c9d", "scanner": "scanner-primary", "fingerprint": "df7f4704871152bb", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "client/src/components/experience-pdf.tsx"}, "region": {"startLine": 88}}}]}, {"ruleId": "scanner-45e484ec5b8111b4", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in client/src/components/bid-documents/employment-certificate.tsx:91"}, "properties": {"repobilityId": "bdb09d5ab7b08ff9", "scanner": "scanner-primary", "fingerprint": "45e484ec5b8111b4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "client/src/components/bid-documents/employment-certificate.tsx"}, "region": {"startLine": 91}}}]}, {"ruleId": "scanner-8df37d9232a59094", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in client/src/components/ui/chart.tsx:81"}, "properties": {"repobilityId": "298aaf10501f50f1", "scanner": "scanner-primary", "fingerprint": "8df37d9232a59094", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "client/src/components/ui/chart.tsx"}, "region": {"startLine": 81}}}]}, {"ruleId": "scanner-643e11e28c5e9140", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in client/src/pages/access-logs.tsx:382"}, "properties": {"repobilityId": "d7459ec1a1b90541", "scanner": "scanner-primary", "fingerprint": "643e11e28c5e9140", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "client/src/pages/access-logs.tsx"}, "region": {"startLine": 382}}}]}, {"ruleId": "scanner-369f79462f5877ed", "level": "note", "message": {"text": "Insecure pattern 'document_write' in client/src/pages/document-generator.tsx:891"}, "properties": {"repobilityId": "e79f0eaf207c873c", "scanner": "scanner-primary", "fingerprint": "369f79462f5877ed", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "document_write"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "client/src/pages/document-generator.tsx"}, "region": {"startLine": 891}}}]}, {"ruleId": "scanner-810a164cf326eb93", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in client/src/pages/document-generator.tsx:3064"}, "properties": {"repobilityId": "236af5fedeac9dae", "scanner": "scanner-primary", "fingerprint": "810a164cf326eb93", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "client/src/pages/document-generator.tsx"}, "region": {"startLine": 3064}}}]}, {"ruleId": "scanner-2ece30302b888bcf", "level": "note", "message": {"text": "Insecure pattern 'document_write' in client/src/pages/experiences.tsx:1365"}, "properties": {"repobilityId": "14dc6e6a77606b73", "scanner": "scanner-primary", "fingerprint": "2ece30302b888bcf", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "document_write"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "client/src/pages/experiences.tsx"}, "region": {"startLine": 1365}}}]}, {"ruleId": "scanner-7e1ea43c0ea401b8", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in client/src/pages/service-performance.tsx:1070"}, "properties": {"repobilityId": "c7e0d51eeec9e4a4", "scanner": "scanner-primary", "fingerprint": "7e1ea43c0ea401b8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "client/src/pages/service-performance.tsx"}, "region": {"startLine": 1070}}}]}, {"ruleId": "scanner-5530c91b547b6697", "level": "error", "message": {"text": "Insecure pattern 'exec_used' in client/src/pages/ai-document-generator.tsx:110"}, "properties": {"repobilityId": "1d796d608a9233de", "scanner": "scanner-primary", "fingerprint": "5530c91b547b6697", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "exec_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "client/src/pages/ai-document-generator.tsx"}, "region": {"startLine": 110}}}]}, {"ruleId": "scanner-5aae25521e29c6ad", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in client/src/pages/ai-document-generator.tsx:313"}, "properties": {"repobilityId": "377b81d9410ec1ff", "scanner": "scanner-primary", "fingerprint": "5aae25521e29c6ad", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "client/src/pages/ai-document-generator.tsx"}, "region": {"startLine": 313}}}]}, {"ruleId": "scanner-43d2890c6d057da8", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in client/src/pages/ai-document-generator.tsx:142"}, "properties": {"repobilityId": "6f29a468b5864653", "scanner": "scanner-primary", "fingerprint": "43d2890c6d057da8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "client/src/pages/ai-document-generator.tsx"}, "region": {"startLine": 142}}}]}, {"ruleId": "scanner-35b7db190ef1d238", "level": "warning", "message": {"text": "Insecure pattern 'domparser_html_parse' in client/src/pages/bgm-cue-sheet/fileText.ts:40"}, "properties": {"repobilityId": "14d590b348cef87f", "scanner": "scanner-primary", "fingerprint": "35b7db190ef1d238", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "domparser_html_parse"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "client/src/pages/bgm-cue-sheet/fileText.ts"}, "region": {"startLine": 40}}}]}, {"ruleId": "scanner-dcbc7f00b6e2e9b9", "level": "note", "message": {"text": "Insecure pattern 'document_write' in client/src/pages/research-lab/duty-assignment-tab.tsx:158"}, "properties": {"repobilityId": "a7ed1e43a299fce2", "scanner": "scanner-primary", "fingerprint": "dcbc7f00b6e2e9b9", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "document_write"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "client/src/pages/research-lab/duty-assignment-tab.tsx"}, "region": {"startLine": 158}}}]}, {"ruleId": "scanner-a7675516b66904e4", "level": "note", "message": {"text": "Insecure pattern 'document_write' in client/src/pages/research-lab/utils.tsx:70"}, "properties": {"repobilityId": "c64fd5d05c33678a", "scanner": "scanner-primary", "fingerprint": "a7675516b66904e4", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "document_write"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "client/src/pages/research-lab/utils.tsx"}, "region": {"startLine": 70}}}]}, {"ruleId": "scanner-d4473a9ad0530868", "level": "note", "message": {"text": "Insecure pattern 'document_write' in client/src/pages/research-lab/projects-tab.tsx:583"}, "properties": {"repobilityId": "4240b0dbe69fd3bc", "scanner": "scanner-primary", "fingerprint": "d4473a9ad0530868", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "document_write"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "client/src/pages/research-lab/projects-tab.tsx"}, "region": {"startLine": 583}}}]}, {"ruleId": "scanner-dd0e3b6652c83d1c", "level": "note", "message": {"text": "Insecure pattern 'document_write' in client/src/pages/research-lab/labor-tab.tsx:284"}, "properties": {"repobilityId": "8536f506952d5fb6", "scanner": "scanner-primary", "fingerprint": "dd0e3b6652c83d1c", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "document_write"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "client/src/pages/research-lab/labor-tab.tsx"}, "region": {"startLine": 284}}}]}, {"ruleId": "scanner-58cc00a85ca23451", "level": "warning", "message": {"text": "Insecure pattern 'domparser_html_parse' in client/src/lib/ai-document.ts:114"}, "properties": {"repobilityId": "bd0eb09a558191c4", "scanner": "scanner-primary", "fingerprint": "58cc00a85ca23451", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "domparser_html_parse"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "client/src/lib/ai-document.ts"}, "region": {"startLine": 114}}}]}, {"ruleId": "scanner-3c53f0fd09b8db01", "level": "warning", "message": {"text": "Insecure pattern 'domparser_html_parse' in client/src/lib/html.ts:44"}, "properties": {"repobilityId": "c72e9bd6be36afed", "scanner": "scanner-primary", "fingerprint": "3c53f0fd09b8db01", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "domparser_html_parse"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "client/src/lib/html.ts"}, "region": {"startLine": 44}}}]}, {"ruleId": "scanner-8be6a5fc36902a6f", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in artifacts/mockup-sandbox/src/components/ui/chart.tsx:79"}, "properties": {"repobilityId": "ac72f3f576911974", "scanner": "scanner-primary", "fingerprint": "8be6a5fc36902a6f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "artifacts/mockup-sandbox/src/components/ui/chart.tsx"}, "region": {"startLine": 79}}}]}, {"ruleId": "scanner-cb639d9a10a47b23", "level": "note", "message": {"text": "package.json defines install-time lifecycle scripts"}, "properties": {"repobilityId": "b86179956da3a4a8", "scanner": "scanner-primary", "fingerprint": "cb639d9a10a47b23", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "npm", "install-scripts"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-568e2ca46b4fad9f", "level": "note", "message": {"text": "Very large file: rfp-system-export/rfp-system-export/server/rfp-normalizer.ts (1579 lines)"}, "properties": {"repobilityId": "f5ad0bc9b935c20b", "scanner": "scanner-primary", "fingerprint": "568e2ca46b4fad9f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-782e12a549f08da0", "level": "note", "message": {"text": "Very large file: rfp-system-export/rfp-system-export/server/rfp-crawler.ts (3786 lines)"}, "properties": {"repobilityId": "e7f7c35029638f17", "scanner": "scanner-primary", "fingerprint": "782e12a549f08da0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e16f467c9cbfc375", "level": "note", "message": {"text": "Very large file: rfp-system-export/rfp-system-export/client/RfpPage.tsx (2487 lines)"}, "properties": {"repobilityId": "26cb2291b1e58d59", "scanner": "scanner-primary", "fingerprint": "e16f467c9cbfc375", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-00e775f6a9b11198", "level": "note", "message": {"text": "Very large file: scripts/smoke/bid-strategy-ux-invariants.mjs (1532 lines)"}, "properties": {"repobilityId": "33fc414d923b9f08", "scanner": "scanner-primary", "fingerprint": "00e775f6a9b11198", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-8d0ddecee11b89c7", "level": "note", "message": {"text": "Very large file: server/storage.ts (3026 lines)"}, "properties": {"repobilityId": "ed0b4d380eb95127", "scanner": "scanner-primary", "fingerprint": "8d0ddecee11b89c7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5f4b6493cf4e4aef", "level": "note", "message": {"text": "Very large file: server/routes.ts (2338 lines)"}, "properties": {"repobilityId": "d036dd4d935d8129", "scanner": "scanner-primary", "fingerprint": "5f4b6493cf4e4aef", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c241e311976a1170", "level": "note", "message": {"text": "Very large file: server/services/serpapi-crawler.ts (1774 lines)"}, "properties": {"repobilityId": "63d964b7f99f87d1", "scanner": "scanner-primary", "fingerprint": "c241e311976a1170", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0d98969fa1cad8d0", "level": "note", "message": {"text": "Very large file: server/routes/bid-intelligence-award-jobs.ts (1561 lines)"}, "properties": {"repobilityId": "d0888cd4c0262b54", "scanner": "scanner-primary", "fingerprint": "0d98969fa1cad8d0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c186351e2abcbc99", "level": "note", "message": {"text": "Very large file: server/routes/rfp.ts (1264 lines)"}, "properties": {"repobilityId": "181ab46a26cc3100", "scanner": "scanner-primary", "fingerprint": "c186351e2abcbc99", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-811bb24f29afb152", "level": "note", "message": {"text": "Very large file: server/routes/evaluation.ts (2896 lines)"}, "properties": {"repobilityId": "bcfc660090a3e588", "scanner": "scanner-primary", "fingerprint": "811bb24f29afb152", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-82be15ce2f4414fa", "level": "note", "message": {"text": "Very large file: server/routes/gpt-image.ts (1154 lines)"}, "properties": {"repobilityId": "19d096efe8377a4b", "scanner": "scanner-primary", "fingerprint": "82be15ce2f4414fa", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-bbbb5921a155ff49", "level": "note", "message": {"text": "Very large file: server/routes/bid-strategy/shared.ts (1779 lines)"}, "properties": {"repobilityId": "be89a1efcecc34a8", "scanner": "scanner-primary", "fingerprint": "bbbb5921a155ff49", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c2a28384adc9b5d0", "level": "note", "message": {"text": "Very large file: server/routes/bid-strategy/intake.ts (1562 lines)"}, "properties": {"repobilityId": "e9e0b740fcd7b96d", "scanner": "scanner-primary", "fingerprint": "c2a28384adc9b5d0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5ca3138770f40167", "level": "note", "message": {"text": "Very large file: server/routes/bid-strategy/eligibility.ts (1102 lines)"}, "properties": {"repobilityId": "463c1084611894e3", "scanner": "scanner-primary", "fingerprint": "5ca3138770f40167", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5460479b7ded3708", "level": "note", "message": {"text": "Very large file: server/routes/bid-strategy/hermes.ts (868 lines)"}, "properties": {"repobilityId": "6c500fafb027fcab", "scanner": "scanner-primary", "fingerprint": "5460479b7ded3708", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2ac77ad8282e6bb4", "level": "note", "message": {"text": "Very large file: client/src/pages/question-bank.tsx (1400 lines)"}, "properties": {"repobilityId": "6b3a60ebad12a6ba", "scanner": "scanner-primary", "fingerprint": "2ac77ad8282e6bb4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6869893a8760a70a", "level": "note", "message": {"text": "Very large file: client/src/pages/my-evaluation.tsx (1265 lines)"}, "properties": {"repobilityId": "1b1c91815686ef13", "scanner": "scanner-primary", "fingerprint": "6869893a8760a70a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6ad42cf17d894e36", "level": "note", "message": {"text": "Very large file: client/src/pages/projects.tsx (2133 lines)"}, "properties": {"repobilityId": "bead872dcefdee21", "scanner": "scanner-primary", "fingerprint": "6ad42cf17d894e36", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f1c239f6d54bd344", "level": "note", "message": {"text": "Very large file: client/src/pages/leveling.tsx (1560 lines)"}, "properties": {"repobilityId": "a53a0e2deb821a08", "scanner": "scanner-primary", "fingerprint": "f1c239f6d54bd344", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-58d34fb1f417456e", "level": "note", "message": {"text": "Very large file: client/src/pages/agent-conversations.tsx (1087 lines)"}, "properties": {"repobilityId": "ef5f95cbe32954ca", "scanner": "scanner-primary", "fingerprint": "58d34fb1f417456e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-86c15259d00ee348", "level": "note", "message": {"text": "Very large file: client/src/pages/document-generator.tsx (4654 lines)"}, "properties": {"repobilityId": "53af877815570ca8", "scanner": "scanner-primary", "fingerprint": "86c15259d00ee348", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-91b51c7f67b67636", "level": "note", "message": {"text": "Very large file: client/src/pages/calculator.tsx (1184 lines)"}, "properties": {"repobilityId": "dc5e3ee9474cf35f", "scanner": "scanner-primary", "fingerprint": "91b51c7f67b67636", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-56dd73acea866854", "level": "note", "message": {"text": "Very large file: client/src/pages/contracts.tsx (2113 lines)"}, "properties": {"repobilityId": "6f1477032e1257e4", "scanner": "scanner-primary", "fingerprint": "56dd73acea866854", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-02db703ea71ce9a3", "level": "note", "message": {"text": "Very large file: client/src/pages/experiences.tsx (2098 lines)"}, "properties": {"repobilityId": "8f279c4bf7da0dd4", "scanner": "scanner-primary", "fingerprint": "02db703ea71ce9a3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c2f05a213bab9e3e", "level": "note", "message": {"text": "Very large file: client/src/pages/documents.tsx (1722 lines)"}, "properties": {"repobilityId": "7f978fb2b09a314b", "scanner": "scanner-primary", "fingerprint": "c2f05a213bab9e3e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-008cda6458c39f42", "level": "note", "message": {"text": "Very large file: client/src/pages/kpi-dashboard.tsx (1675 lines)"}, "properties": {"repobilityId": "a11797db68fe5acc", "scanner": "scanner-primary", "fingerprint": "008cda6458c39f42", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-acc0523d7d895a75", "level": "note", "message": {"text": "Very large file: client/src/pages/research-lab-manual.tsx (1413 lines)"}, "properties": {"repobilityId": "54b52ed3272634bd", "scanner": "scanner-primary", "fingerprint": "acc0523d7d895a75", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-275d16aa749b49f9", "level": "note", "message": {"text": "Very large file: client/src/pages/employees.tsx (2538 lines)"}, "properties": {"repobilityId": "137dc3d4ac9e9578", "scanner": "scanner-primary", "fingerprint": "275d16aa749b49f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2f77831fe4f7190f", "level": "note", "message": {"text": "Very large file: client/src/pages/rfp.tsx (2641 lines)"}, "properties": {"repobilityId": "4147fd990d23f857", "scanner": "scanner-primary", "fingerprint": "2f77831fe4f7190f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d2cdc5619f67adef", "level": "note", "message": {"text": "Very large file: client/src/pages/estimates.tsx (1812 lines)"}, "properties": {"repobilityId": "3f9eb6bd87b4485c", "scanner": "scanner-primary", "fingerprint": "d2cdc5619f67adef", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-92347db9bd38c8e3", "level": "note", "message": {"text": "Very large file: client/src/pages/sales-records.tsx (2361 lines)"}, "properties": {"repobilityId": "4e243bd67eef4e41", "scanner": "scanner-primary", "fingerprint": "92347db9bd38c8e3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-dca6f92e9de2c0d8", "level": "note", "message": {"text": "Very large file: client/src/pages/service-performance.tsx (1110 lines)"}, "properties": {"repobilityId": "49e69e825bbeb7a7", "scanner": "scanner-primary", "fingerprint": "dca6f92e9de2c0d8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-04ea26a15ad85c60", "level": "note", "message": {"text": "Very large file: client/src/pages/gpt-image.tsx (1310 lines)"}, "properties": {"repobilityId": "9583ef155233808b", "scanner": "scanner-primary", "fingerprint": "04ea26a15ad85c60", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3a3acc465d8b620e", "level": "note", "message": {"text": "Very large file: client/src/pages/bgm-cue-sheet/index.tsx (3411 lines)"}, "properties": {"repobilityId": "eb8fb378295feba4", "scanner": "scanner-primary", "fingerprint": "3a3acc465d8b620e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3b6c671bce9ae54f", "level": "note", "message": {"text": "Very large file: client/src/pages/research-lab/projects-tab.tsx (1523 lines)"}, "properties": {"repobilityId": "cd4735c188cd5a15", "scanner": "scanner-primary", "fingerprint": "3b6c671bce9ae54f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ac76a894d3da0ed4", "level": "note", "message": {"text": "Very large file: client/src/pages/suno/components/InputForm.tsx (1047 lines)"}, "properties": {"repobilityId": "9e35bd28b181aa65", "scanner": "scanner-primary", "fingerprint": "ac76a894d3da0ed4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c19b5d3b2b3d1a0b", "level": "note", "message": {"text": "Very large file: client/src/pages/bid-strategy/[id].tsx (2208 lines)"}, "properties": {"repobilityId": "8a6842da7f928653", "scanner": "scanner-primary", "fingerprint": "c19b5d3b2b3d1a0b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-cf018c9354331dc0", "level": "note", "message": {"text": "Very large file: client/src/pages/bid-strategy/components/PastAwardsCard.tsx (2107 lines)"}, "properties": {"repobilityId": "0af693db49356a0f", "scanner": "scanner-primary", "fingerprint": "cf018c9354331dc0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ede555c1aa512355", "level": "note", "message": {"text": "Very large file: client/src/pages/bid-strategy/components/EligibilityCard.tsx (1842 lines)"}, "properties": {"repobilityId": "c74e62a8c663a6ff", "scanner": "scanner-primary", "fingerprint": "ede555c1aa512355", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6b2c1340423bb8a2", "level": "note", "message": {"text": "Very large file: client/src/pages/evaluation/index.tsx (1203 lines)"}, "properties": {"repobilityId": "220e7ea810296b18", "scanner": "scanner-primary", "fingerprint": "6b2c1340423bb8a2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b4c61b1be5be9301", "level": "note", "message": {"text": "Very large file: client/src/pages/evaluation/components/FinalCycleTab.tsx (1131 lines)"}, "properties": {"repobilityId": "1e0ee41e4b340b23", "scanner": "scanner-primary", "fingerprint": "b4c61b1be5be9301", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2227b0da70d6e48d", "level": "note", "message": {"text": "Very large file: client/src/pages/evaluation/components/ResultsTab.tsx (1157 lines)"}, "properties": {"repobilityId": "8a58ec50283bd961", "scanner": "scanner-primary", "fingerprint": "2227b0da70d6e48d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-03a8cf7c472162a2", "level": "note", "message": {"text": "Very large file: client/src/pages/evaluation/components/SettingsDialog.tsx (3275 lines)"}, "properties": {"repobilityId": "f0711c21ef74c2ef", "scanner": "scanner-primary", "fingerprint": "03a8cf7c472162a2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e189c2c0bb57b10a", "level": "note", "message": {"text": "Very large file: shared/schema.ts (3256 lines)"}, "properties": {"repobilityId": "43ade807c81236e6", "scanner": "scanner-primary", "fingerprint": "e189c2c0bb57b10a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "72f9a238bcd992b8", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "25cdd0ebfee76726", "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": "79718c1cf28fe0f6", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-9d79c4077342a7d0", "level": "warning", "message": {"text": "Runtime service client appears to use placeholder configuration"}, "properties": {"repobilityId": "a0648a3a35ecea8d", "scanner": "scanner-primary", "fingerprint": "9d79c4077342a7d0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "runtime-config", "service-client", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "18e854633965f90c", "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": "4cab1308eba82192", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-bb69c38cd6b96624", "level": "none", "message": {"text": "Commented-code block (5 lines) in worker/g2b-award/src/hmac.ts:1"}, "properties": {"repobilityId": "f43766c464ea57d3", "scanner": "scanner-primary", "fingerprint": "bb69c38cd6b96624", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-392bfdb3f82f4d91", "level": "none", "message": {"text": "Commented-code block (5 lines) in worker/g2b-award/src/g2b-client.ts:283"}, "properties": {"repobilityId": "f4652b8c4f37fdfe", "scanner": "scanner-primary", "fingerprint": "392bfdb3f82f4d91", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f57a3151895d994e", "level": "none", "message": {"text": "Commented-code block (5 lines) in worker/g2b-award/src/poll.ts:5"}, "properties": {"repobilityId": "07f48ce8a3f95358", "scanner": "scanner-primary", "fingerprint": "f57a3151895d994e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a279186a300c7161", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 worker/g2b-award/src/poll.ts:207"}, "properties": {"repobilityId": "27b526f6aed35039", "scanner": "scanner-primary", "fingerprint": "a279186a300c7161", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cb49a2d00307eba2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 worker/rfp-parser/src/poll.ts:53"}, "properties": {"repobilityId": "4ddad3d7b776dac2", "scanner": "scanner-primary", "fingerprint": "cb49a2d00307eba2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4e6403b53c3d2153", "level": "none", "message": {"text": "Commented-code block (8 lines) in rfp-system-export/rfp-system-export/server/rfp-crawler.ts:43"}, "properties": {"repobilityId": "ad71e383b798b110", "scanner": "scanner-primary", "fingerprint": "4e6403b53c3d2153", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-602ce9637c0d7a1e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 rfp-system-export/rfp-system-export/server/rfp-crawler.ts:1365"}, "properties": {"repobilityId": "07aac68b0d024d42", "scanner": "scanner-primary", "fingerprint": "602ce9637c0d7a1e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9c1d3a6101cd4654", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 rfp-system-export/rfp-system-export/server/rfp-multihop-crawler.ts:127"}, "properties": {"repobilityId": "f243de3918997a5c", "scanner": "scanner-primary", "fingerprint": "9c1d3a6101cd4654", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d3162b6365712dd3", "level": "note", "message": {"text": "Legacy-named symbol `maxDaysOld` in rfp-system-export/rfp-system-export/server/services/mice-rfp-crawler.ts:225"}, "properties": {"repobilityId": "231d290e792439f1", "scanner": "scanner-primary", "fingerprint": "d3162b6365712dd3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-576a06c347dad478", "level": "none", "message": {"text": "Commented-code block (8 lines) in scripts/g2b-award-worker.mjs:120"}, "properties": {"repobilityId": "418f24ab72101028", "scanner": "scanner-primary", "fingerprint": "576a06c347dad478", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-860e22e89e512fc4", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/dedup-listings.ts:5"}, "properties": {"repobilityId": "89249a3510e5fee2", "scanner": "scanner-primary", "fingerprint": "860e22e89e512fc4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9c55122634ba8431", "level": "note", "message": {"text": "Legacy-named symbol `DocLegacy` in scripts/test-rbac.mjs:39"}, "properties": {"repobilityId": "a0841ba5da3f9937", "scanner": "scanner-primary", "fingerprint": "9c55122634ba8431", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-3bef1c6a9cfe88d3", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/test-submission-matcher.mjs:165"}, "properties": {"repobilityId": "931a9605882e3184", "scanner": "scanner-primary", "fingerprint": "3bef1c6a9cfe88d3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-884978cd43b19716", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/backfill-llm-cost.mjs:7"}, "properties": {"repobilityId": "815f5ef2d7ad0654", "scanner": "scanner-primary", "fingerprint": "884978cd43b19716", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6b0b3622876e6232", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/setup-dedup-index.ts:1"}, "properties": {"repobilityId": "ebc8ea2b5983b4a6", "scanner": "scanner-primary", "fingerprint": "6b0b3622876e6232", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b830423925db02d2", "level": "none", "message": {"text": "Commented-code block (7 lines) in scripts/test-asset-matcher.mjs:440"}, "properties": {"repobilityId": "c75afa7952d09fdc", "scanner": "scanner-primary", "fingerprint": "b830423925db02d2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-645de0da71e6dc70", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/test-scoring-projector.mjs:531"}, "properties": {"repobilityId": "6ac8f4bbe60e2c0e", "scanner": "scanner-primary", "fingerprint": "645de0da71e6dc70", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-81633403221ac2a6", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/smoke/bid-strategy-timeout-invariants.mjs:3"}, "properties": {"repobilityId": "e3d9dbf2af4c8f94", "scanner": "scanner-primary", "fingerprint": "81633403221ac2a6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-078784d6b6467751", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/smoke/certificate-local-agent-dispatch.mjs:14"}, "properties": {"repobilityId": "ff98b5ac7f3060ed", "scanner": "scanner-primary", "fingerprint": "078784d6b6467751", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-51a826037bc0db24", "level": "none", "message": {"text": "Commented-code block (6 lines) in script/agent-safe-commit.mjs:7"}, "properties": {"repobilityId": "22eb8b708f64f346", "scanner": "scanner-primary", "fingerprint": "51a826037bc0db24", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f8e3e10576f945b1", "level": "none", "message": {"text": "Commented-code block (5 lines) in script/cleanup-rfp-duplicates.ts:1"}, "properties": {"repobilityId": "41c963cb4e891f04", "scanner": "scanner-primary", "fingerprint": "f8e3e10576f945b1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dda44a5ef43b8984", "level": "none", "message": {"text": "Commented-code block (6 lines) in script/dump-routes.mjs:8"}, "properties": {"repobilityId": "c2531cedac47b983", "scanner": "scanner-primary", "fingerprint": "dda44a5ef43b8984", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-55587ad9d78dd6a7", "level": "none", "message": {"text": "Commented-code block (8 lines) in script/check-crawler-rules.mjs:5"}, "properties": {"repobilityId": "d8fcd52042a7bf11", "scanner": "scanner-primary", "fingerprint": "55587ad9d78dd6a7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6069e3f656fc8521", "level": "none", "message": {"text": "Commented-code block (7 lines) in script/dev-freshness-check.mjs:1"}, "properties": {"repobilityId": "82026c0669cde5ce", "scanner": "scanner-primary", "fingerprint": "6069e3f656fc8521", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8480d7f9a6808253", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 script/dev-freshness-check.mjs:33"}, "properties": {"repobilityId": "f4b676bd089202e7", "scanner": "scanner-primary", "fingerprint": "8480d7f9a6808253", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d62516ef4a6263cc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 script/verify-r2.mjs:105"}, "properties": {"repobilityId": "bb08de56e33c62c2", "scanner": "scanner-primary", "fingerprint": "d62516ef4a6263cc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-13c07696b683227a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 script/harness-regression-audit.mjs:516"}, "properties": {"repobilityId": "01c05c45512f2d2a", "scanner": "scanner-primary", "fingerprint": "13c07696b683227a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c497449263674eee", "level": "none", "message": {"text": "Commented-code block (5 lines) in script/check-shared-locks.mjs:4"}, "properties": {"repobilityId": "88264c0aae835dc4", "scanner": "scanner-primary", "fingerprint": "c497449263674eee", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-54bf68c99543aa9e", "level": "none", "message": {"text": "Commented-code block (5 lines) in script/agent-precheck.mjs:5"}, "properties": {"repobilityId": "9e63d1688d1e599f", "scanner": "scanner-primary", "fingerprint": "54bf68c99543aa9e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d1bbe5c77874e8a2", "level": "none", "message": {"text": "Commented-code block (5 lines) in script/migrate-public-to-private.mjs:1"}, "properties": {"repobilityId": "7696d819fa7d384a", "scanner": "scanner-primary", "fingerprint": "d1bbe5c77874e8a2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-261134ee5e67b14f", "level": "none", "message": {"text": "Commented-code block (5 lines) in script/build.ts:53"}, "properties": {"repobilityId": "7dc820e9a1633d03", "scanner": "scanner-primary", "fingerprint": "261134ee5e67b14f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0a82b4516d1010f6", "level": "none", "message": {"text": "Commented-code block (6 lines) in server/email.ts:78"}, "properties": {"repobilityId": "4b7f027c9811c85d", "scanner": "scanner-primary", "fingerprint": "0a82b4516d1010f6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6c29110bede48fe5", "level": "none", "message": {"text": "Commented-code block (6 lines) in server/notification-scheduler.ts:536"}, "properties": {"repobilityId": "c600c4c72154b9cc", "scanner": "scanner-primary", "fingerprint": "6c29110bede48fe5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8957407bd15317b7", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/db.ts:27"}, "properties": {"repobilityId": "80996420262df6d5", "scanner": "scanner-primary", "fingerprint": "8957407bd15317b7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c67bcd071f551acb", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/services/g2b-attachments.ts:1"}, "properties": {"repobilityId": "6777880ac9490f92", "scanner": "scanner-primary", "fingerprint": "c67bcd071f551acb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c759c3b35e1ee127", "level": "none", "message": {"text": "Commented-code block (6 lines) in server/services/price-score-extractor.ts:190"}, "properties": {"repobilityId": "6c8fb4a351166dbf", "scanner": "scanner-primary", "fingerprint": "c759c3b35e1ee127", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1a64f3914e9fe395", "level": "none", "message": {"text": "Commented-code block (6 lines) in server/services/classify-category.ts:229"}, "properties": {"repobilityId": "08c5f07ccc2ccd80", "scanner": "scanner-primary", "fingerprint": "1a64f3914e9fe395", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f02d6a6c03c4979c", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/services/llm-usage-logger.ts:3"}, "properties": {"repobilityId": "b69f7f50f8147c46", "scanner": "scanner-primary", "fingerprint": "f02d6a6c03c4979c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2a63c03e43542c2b", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/services/youtube-download.ts:4"}, "properties": {"repobilityId": "418441e943ba1970", "scanner": "scanner-primary", "fingerprint": "2a63c03e43542c2b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4e09d82affb40e11", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/services/rfp-from-g2b-api.ts:56"}, "properties": {"repobilityId": "0b8bbadb249a0fc2", "scanner": "scanner-primary", "fingerprint": "4e09d82affb40e11", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-80df26a8f7fb47b3", "level": "none", "message": {"text": "Commented-code block (6 lines) in server/services/source-health-check.ts:4"}, "properties": {"repobilityId": "8406da0384ab430b", "scanner": "scanner-primary", "fingerprint": "80df26a8f7fb47b3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-04b8c3405919b215", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/services/bid-intelligence/decision-engine.ts:506"}, "properties": {"repobilityId": "c6466c1d2d5e1967", "scanner": "scanner-primary", "fingerprint": "04b8c3405919b215", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-159ccea01b5cc3d6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/services/bid-intelligence/doc-ocr-store.ts:8"}, "properties": {"repobilityId": "c75f496d6c8387ec", "scanner": "scanner-primary", "fingerprint": "159ccea01b5cc3d6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0fd2fc4b57215caf", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/services/bid-intelligence/eligibility-extractor.ts:164"}, "properties": {"repobilityId": "72974aee403da674", "scanner": "scanner-primary", "fingerprint": "0fd2fc4b57215caf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-049ef50dec5c10d3", "level": "none", "message": {"text": "Commented-code block (7 lines) in server/services/bid-intelligence/notice-number-resolver.ts:1"}, "properties": {"repobilityId": "16137dc98c3a5772", "scanner": "scanner-primary", "fingerprint": "049ef50dec5c10d3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e1c918db7741b0e5", "level": "none", "message": {"text": "Commented-code block (8 lines) in server/services/bid-intelligence/analysis-execution-context.ts:57"}, "properties": {"repobilityId": "f50eff16daa6888e", "scanner": "scanner-primary", "fingerprint": "e1c918db7741b0e5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0b9bf1c7c5c98247", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/services/bid-intelligence/prompt-cache.ts:23"}, "properties": {"repobilityId": "cdbf9f1d00a53867", "scanner": "scanner-primary", "fingerprint": "0b9bf1c7c5c98247", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f8a7bd66388b72ba", "level": "none", "message": {"text": "Commented-code block (6 lines) in server/services/bid-intelligence/scoring-projector.ts:79"}, "properties": {"repobilityId": "f3851fd856039f59", "scanner": "scanner-primary", "fingerprint": "f8a7bd66388b72ba", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2334c9f7c2223295", "level": "none", "message": {"text": "Commented-code block (11 lines) in server/services/bid-intelligence/eligibility-aggregation.ts:551"}, "properties": {"repobilityId": "5182e71b2277f459", "scanner": "scanner-primary", "fingerprint": "2334c9f7c2223295", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-112ddb4063776ef0", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/services/bid-intelligence/lineage-tiers-pipeline.ts:136"}, "properties": {"repobilityId": "fb59f80809c5f5fe", "scanner": "scanner-primary", "fingerprint": "112ddb4063776ef0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-435e32258f293093", "level": "none", "message": {"text": "Commented-code block (7 lines) in server/services/bid-intelligence/g2b-portal-client.ts:24"}, "properties": {"repobilityId": "832d31c62860f82b", "scanner": "scanner-primary", "fingerprint": "435e32258f293093", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cefffc222fc2d2a4", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/services/suno/gemini.ts:1"}, "properties": {"repobilityId": "5cffb4cc7d540cbd", "scanner": "scanner-primary", "fingerprint": "cefffc222fc2d2a4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6acfa1ab619686ac", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/services/suno/provider/sunoapi.ts:151"}, "properties": {"repobilityId": "d2286a4a0ed5cad9", "scanner": "scanner-primary", "fingerprint": "6acfa1ab619686ac", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4b16f693235f2212", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/services/lib/korean-date.ts:19"}, "properties": {"repobilityId": "2728644fbeb63f50", "scanner": "scanner-primary", "fingerprint": "4b16f693235f2212", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-667b40cca1c15690", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/routes/certificates.ts:194"}, "properties": {"repobilityId": "6050c05b25243de9", "scanner": "scanner-primary", "fingerprint": "667b40cca1c15690", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2aa90b1a9830fdca", "level": "none", "message": {"text": "Commented-code block (6 lines) in server/routes/bid-intelligence-award-jobs.ts:434"}, "properties": {"repobilityId": "3255482c14475e6a", "scanner": "scanner-primary", "fingerprint": "2aa90b1a9830fdca", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0cefdd3775bc23ac", "level": "none", "message": {"text": "Commented-code block (6 lines) in server/routes/cron-bid-strategy-recover.ts:3"}, "properties": {"repobilityId": "bec0a4497fd7202e", "scanner": "scanner-primary", "fingerprint": "0cefdd3775bc23ac", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ac64386f8a85b360", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/routes/rfp.ts:954"}, "properties": {"repobilityId": "d22ea1e5765db7ce", "scanner": "scanner-primary", "fingerprint": "ac64386f8a85b360", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f5e179139f9ff52f", "level": "none", "message": {"text": "Commented-code block (6 lines) in server/routes/bid-intelligence-attachment-jobs.ts:29"}, "properties": {"repobilityId": "caf96d5392062878", "scanner": "scanner-primary", "fingerprint": "f5e179139f9ff52f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-217164beab1bc250", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/routes/suno.ts:302"}, "properties": {"repobilityId": "bc80b7aaeb6dd980", "scanner": "scanner-primary", "fingerprint": "217164beab1bc250", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-06f868c2969af71d", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/routes/gpt-image.ts:126"}, "properties": {"repobilityId": "8b93db7c80dcf353", "scanner": "scanner-primary", "fingerprint": "06f868c2969af71d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8d7b90e709933966", "level": "none", "message": {"text": "Commented-code block (9 lines) in server/routes/bgm-cue-sheet.ts:1"}, "properties": {"repobilityId": "0ce63ef929b783d2", "scanner": "scanner-primary", "fingerprint": "8d7b90e709933966", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1a2b9717d38d6163", "level": "none", "message": {"text": "Commented-code block (6 lines) in server/routes/bid-strategy/intake.ts:1129"}, "properties": {"repobilityId": "c10e66e09017231f", "scanner": "scanner-primary", "fingerprint": "1a2b9717d38d6163", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d08b83acc87066ba", "level": "none", "message": {"text": "Commented-code block (8 lines) in server/routes/bid-strategy/stages.ts:320"}, "properties": {"repobilityId": "f403237099013eb9", "scanner": "scanner-primary", "fingerprint": "d08b83acc87066ba", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bedbd63183f9c05a", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/routes/bid-strategy/eligibility.ts:670"}, "properties": {"repobilityId": "131244ca1e1a18c5", "scanner": "scanner-primary", "fingerprint": "bedbd63183f9c05a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-951beeee3ec24f5e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/routes/bid-strategy/eligibility.ts:211"}, "properties": {"repobilityId": "9ecfad250e427d4e", "scanner": "scanner-primary", "fingerprint": "951beeee3ec24f5e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a19cdfe3caa35431", "level": "none", "message": {"text": "Commented-code block (7 lines) in docs/tool-starter/sandbox/vite.config.ts:8"}, "properties": {"repobilityId": "50540a658091ad35", "scanner": "scanner-primary", "fingerprint": "a19cdfe3caa35431", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0293dca1f73b55b4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 attached_assets/subadmin-certificates_1767672202250.tsx:247"}, "properties": {"repobilityId": "33314cce870b9dbc", "scanner": "scanner-primary", "fingerprint": "0293dca1f73b55b4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c1f29cd22e04ae0c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 attached_assets/subadmin-certificates_1767671787374.tsx:247"}, "properties": {"repobilityId": "018f817597012983", "scanner": "scanner-primary", "fingerprint": "c1f29cd22e04ae0c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1ebf59fbb8e000be", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/hooks/use-auth.ts:12"}, "properties": {"repobilityId": "326f2f7fec798a45", "scanner": "scanner-primary", "fingerprint": "1ebf59fbb8e000be", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b7e610ad4cef3412", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/hooks/use-upload.ts:97"}, "properties": {"repobilityId": "c86be7ee8f74fd4c", "scanner": "scanner-primary", "fingerprint": "b7e610ad4cef3412", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-957e544b67249aac", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/components/project-files.tsx:48"}, "properties": {"repobilityId": "459236a5dc34935d", "scanner": "scanner-primary", "fingerprint": "957e544b67249aac", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d05c1d22065a8169", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/project-analytics.tsx:145"}, "properties": {"repobilityId": "3f92779a0414fc5d", "scanner": "scanner-primary", "fingerprint": "d05c1d22065a8169", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7a43d3e265960335", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/my-evaluation.tsx:113"}, "properties": {"repobilityId": "691fd768c36bf86d", "scanner": "scanner-primary", "fingerprint": "7a43d3e265960335", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-afb246b77e895bc6", "level": "note", "message": {"text": "Legacy-named symbol `rawOld` in client/src/pages/projects.tsx:566"}, "properties": {"repobilityId": "69d6d7750616878c", "scanner": "scanner-primary", "fingerprint": "afb246b77e895bc6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-5ada62905c0621bb", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/projects.tsx:640"}, "properties": {"repobilityId": "d6ac9b6008472130", "scanner": "scanner-primary", "fingerprint": "5ada62905c0621bb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-581a576ed9782b86", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/access-logs.tsx:196"}, "properties": {"repobilityId": "a68b7035c28d4f9e", "scanner": "scanner-primary", "fingerprint": "581a576ed9782b86", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7099f290f636e097", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/leveling.tsx:340"}, "properties": {"repobilityId": "c44e39867d5a12ae", "scanner": "scanner-primary", "fingerprint": "7099f290f636e097", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d076a7caf415ed74", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/document-generator.tsx:109"}, "properties": {"repobilityId": "78fae67ed1ceb8bc", "scanner": "scanner-primary", "fingerprint": "d076a7caf415ed74", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1f18e725d8575369", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/contracts.tsx:365"}, "properties": {"repobilityId": "31e8cfe71d7cf65a", "scanner": "scanner-primary", "fingerprint": "1f18e725d8575369", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-610a5f3a63ead5f2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/experiences.tsx:989"}, "properties": {"repobilityId": "8e4f562108d8a054", "scanner": "scanner-primary", "fingerprint": "610a5f3a63ead5f2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-77cb2bc693423113", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/llm-usage.tsx:114"}, "properties": {"repobilityId": "2df3e48d9af4f514", "scanner": "scanner-primary", "fingerprint": "77cb2bc693423113", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b03222c71bc3d018", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/kpi-dashboard.tsx:439"}, "properties": {"repobilityId": "4fb8257f86ad37fc", "scanner": "scanner-primary", "fingerprint": "b03222c71bc3d018", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d476975c49a7c288", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/calendar.tsx:581"}, "properties": {"repobilityId": "39b97fda895c8e8f", "scanner": "scanner-primary", "fingerprint": "d476975c49a7c288", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a45de8a5f79c57f6", "level": "note", "message": {"text": "Legacy-named symbol `rawOld` in client/src/pages/employees.tsx:1376"}, "properties": {"repobilityId": "ba707fea53802325", "scanner": "scanner-primary", "fingerprint": "a45de8a5f79c57f6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-d2eabee73e4d80d4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/rfp.tsx:356"}, "properties": {"repobilityId": "f798c1f3f8a9b4f5", "scanner": "scanner-primary", "fingerprint": "d2eabee73e4d80d4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d2978bd2173b3e69", "level": "none", "message": {"text": "Commented-code block (6 lines) in client/src/pages/llm-usage-menu-map.ts:6"}, "properties": {"repobilityId": "57d839b1ccdfb581", "scanner": "scanner-primary", "fingerprint": "d2978bd2173b3e69", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f6b7c58586e98c39", "level": "none", "message": {"text": "Commented-code block (5 lines) in client/src/pages/estimates.tsx:1022"}, "properties": {"repobilityId": "317c665e7375c9a0", "scanner": "scanner-primary", "fingerprint": "f6b7c58586e98c39", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fa6fe70206544650", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/sales-records.tsx:667"}, "properties": {"repobilityId": "70a0aa9226df03ce", "scanner": "scanner-primary", "fingerprint": "fa6fe70206544650", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5b31c605af4e5c89", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/kpi-management.tsx:59"}, "properties": {"repobilityId": "29f98b284c1113e3", "scanner": "scanner-primary", "fingerprint": "5b31c605af4e5c89", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-30f57ae86500b248", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/trash.tsx:65"}, "properties": {"repobilityId": "ea9f2814953f3d67", "scanner": "scanner-primary", "fingerprint": "30f57ae86500b248", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-68c0a03ec253018d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/dashboard.tsx:159"}, "properties": {"repobilityId": "d37d5977e1b99e8b", "scanner": "scanner-primary", "fingerprint": "68c0a03ec253018d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-dce8e2ddbac3383f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/dev-log.tsx:146"}, "properties": {"repobilityId": "da72ef26d7d1cf7d", "scanner": "scanner-primary", "fingerprint": "dce8e2ddbac3383f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-60f507cd26867f22", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/gpt-image.tsx:376"}, "properties": {"repobilityId": "1963afa053bce651", "scanner": "scanner-primary", "fingerprint": "60f507cd26867f22", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6551093684340639", "level": "none", "message": {"text": "Commented-code block (5 lines) in client/src/pages/youtube-download.tsx:129"}, "properties": {"repobilityId": "055f999fe70d45e8", "scanner": "scanner-primary", "fingerprint": "6551093684340639", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0e4b62ee2f1e4a7c", "level": "none", "message": {"text": "Commented-code block (5 lines) in client/src/pages/bgm-cue-sheet/contract.ts:49"}, "properties": {"repobilityId": "4f46c3c71033dd46", "scanner": "scanner-primary", "fingerprint": "0e4b62ee2f1e4a7c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-821ed34da061a995", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/bgm-cue-sheet/index.tsx:1811"}, "properties": {"repobilityId": "80195e62d6a99964", "scanner": "scanner-primary", "fingerprint": "821ed34da061a995", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0c6b711e6162df32", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/research-lab/projects-tab.tsx:96"}, "properties": {"repobilityId": "16d79d620f0cb4e5", "scanner": "scanner-primary", "fingerprint": "0c6b711e6162df32", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-50502e5def75743b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/research-lab/notes-tab.tsx:111"}, "properties": {"repobilityId": "7364f292ea6e9a48", "scanner": "scanner-primary", "fingerprint": "50502e5def75743b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d06e1364a28986fa", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/research-lab/labor-tab.tsx:64"}, "properties": {"repobilityId": "61358625dd2cd166", "scanner": "scanner-primary", "fingerprint": "d06e1364a28986fa", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9898f858821357fa", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/research-lab/plans-tab.tsx:98"}, "properties": {"repobilityId": "6964f8c252a74df4", "scanner": "scanner-primary", "fingerprint": "9898f858821357fa", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-db3d9e858315d1a5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/suno/components/InputForm.tsx:338"}, "properties": {"repobilityId": "f8866263ba195d56", "scanner": "scanner-primary", "fingerprint": "db3d9e858315d1a5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4ddbae31057149e2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/bid-strategy/api.ts:594"}, "properties": {"repobilityId": "bcc7032e62a55f0f", "scanner": "scanner-primary", "fingerprint": "4ddbae31057149e2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a5a9257b7ce39b09", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/bid-strategy/[id].tsx:881"}, "properties": {"repobilityId": "baf781e2d4fbe28f", "scanner": "scanner-primary", "fingerprint": "a5a9257b7ce39b09", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c3e1d232b1db0f48", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/bid-strategy/components/DocumentQAPanel.tsx:102"}, "properties": {"repobilityId": "89cfaa272b0c9a31", "scanner": "scanner-primary", "fingerprint": "c3e1d232b1db0f48", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9c35ea642a1ce30a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/bid-strategy/components/BidLineageCard.tsx:128"}, "properties": {"repobilityId": "190f9f839a54fc29", "scanner": "scanner-primary", "fingerprint": "9c35ea642a1ce30a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d4bb3e43b32e1876", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/comment-picker/api.ts:141"}, "properties": {"repobilityId": "1d560dc5d3a67d90", "scanner": "scanner-primary", "fingerprint": "d4bb3e43b32e1876", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4676d31bd5136f5b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/pages/evaluation/components/SettingsDialog.tsx:169"}, "properties": {"repobilityId": "91f07924bcd70338", "scanner": "scanner-primary", "fingerprint": "4676d31bd5136f5b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-98dd0225acdbf936", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/src/lib/queryClient.ts:26"}, "properties": {"repobilityId": "90c00d0462953c5a", "scanner": "scanner-primary", "fingerprint": "98dd0225acdbf936", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0e011d96f7aa8af7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/replit_integrations/audio/useVoiceStream.ts:33"}, "properties": {"repobilityId": "296c3ca111860015", "scanner": "scanner-primary", "fingerprint": "0e011d96f7aa8af7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-484b0b2509dfe702", "level": "note", "message": {"text": "Legacy-named symbol `key_copy` in shared/schema.ts:1737"}, "properties": {"repobilityId": "178270283c89dc98", "scanner": "scanner-primary", "fingerprint": "484b0b2509dfe702", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-850b40e90ebe894b", "level": "none", "message": {"text": "Commented-code block (6 lines) in shared/schema.ts:1873"}, "properties": {"repobilityId": "2cb2eeed21c21da9", "scanner": "scanner-primary", "fingerprint": "850b40e90ebe894b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c9a1612d277ec0e3", "level": "none", "message": {"text": "Commented-code block (5 lines) in shared/bid-status.ts:5"}, "properties": {"repobilityId": "8d737efdfd3a5cc2", "scanner": "scanner-primary", "fingerprint": "c9a1612d277ec0e3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-366df7685b627036", "level": "none", "message": {"text": "Commented-code block (5 lines) in shared/models/gpt-image.ts:65"}, "properties": {"repobilityId": "59cdb389025240e5", "scanner": "scanner-primary", "fingerprint": "366df7685b627036", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2554fc9b745f3ad2", "level": "none", "message": {"text": "Commented-code block (5 lines) in shared/bid-strategy/document-extraction.schema.ts:4"}, "properties": {"repobilityId": "77caa7e958695a25", "scanner": "scanner-primary", "fingerprint": "2554fc9b745f3ad2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f738169992e41bd7", "level": "none", "message": {"text": "Commented-code block (5 lines) in shared/tax/withholding-config.ts:5"}, "properties": {"repobilityId": "16bb303415c1519f", "scanner": "scanner-primary", "fingerprint": "f738169992e41bd7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "8af7e684e89ad9b1", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "914848fb0ad5e83a", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "de1db1f3c2de2a2e", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "6e0a6f552539267e", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "0a5dd55d5e884010", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "5db0930b11a8740a", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "244a640fd2e3df18", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "20b4a90f49f3e00f", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "b52747ec0f93e704", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "850434a4fbcdeb2b", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-0bd055d2aa52aa03", "level": "warning", "message": {"text": "Frontend route `/login` has no Link/navigate to it \u2014 client/src/App.tsx"}, "properties": {"repobilityId": "da24d561efb2c0d6", "scanner": "scanner-primary", "fingerprint": "0bd055d2aa52aa03", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-5b5a5ec9b54ad535", "level": "warning", "message": {"text": "Frontend route `/calculator` has no Link/navigate to it \u2014 client/src/components/authenticated-shell.tsx"}, "properties": {"repobilityId": "64214ca9911344c3", "scanner": "scanner-primary", "fingerprint": "5b5a5ec9b54ad535", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-5f18178197910359", "level": "warning", "message": {"text": "Frontend route `/vat-calculator` has no Link/navigate to it \u2014 client/src/components/authenticated-shell.tsx"}, "properties": {"repobilityId": "3d6ac8614eed121b", "scanner": "scanner-primary", "fingerprint": "5f18178197910359", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-89f688413cc70fd1", "level": "warning", "message": {"text": "Frontend route `/withholding-calculator` has no Link/navigate to it \u2014 client/src/components/authenticated-shell.tsx"}, "properties": {"repobilityId": "f2895068077ba448", "scanner": "scanner-primary", "fingerprint": "89f688413cc70fd1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-5da22dd0da916188", "level": "error", "message": {"text": "Dangling fetch: GET https://pikk.co.kr/bids (rfp-system-export/rfp-system-export/server/rfp-crawler.ts:1879)"}, "properties": {"repobilityId": "e13531d1de021123", "scanner": "scanner-primary", "fingerprint": "5da22dd0da916188", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-58698304323393e3", "level": "error", "message": {"text": "Dangling fetch: POST https://api.perplexity.ai/chat/completions (rfp-system-export/rfp-system-export/server/rfp-ai-scorer.ts:167)"}, "properties": {"repobilityId": "fd311f128a617e75", "scanner": "scanner-primary", "fingerprint": "58698304323393e3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d72946c16b72e883", "level": "error", "message": {"text": "Dangling fetch: GET https://api.country.is/${encodeURIComponent(ip)} (server/services/ip-country.ts:73)"}, "properties": {"repobilityId": "da240d938a907b89", "scanner": "scanner-primary", "fingerprint": "d72946c16b72e883", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-263af96976d13ce3", "level": "error", "message": {"text": "Dangling fetch: GET https://open.er-api.com/v6/latest/USD (server/routes/gpt-image.ts:67)"}, "properties": {"repobilityId": "58bb42e159e34665", "scanner": "scanner-primary", "fingerprint": "263af96976d13ce3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7dd481534ddb3419", "level": "error", "message": {"text": "Dangling fetch: POST /api/certificates/extract-from-image (attached_assets/subadmin-certificates_1767672202250.tsx:426)"}, "properties": {"repobilityId": "21c963d53094008b", "scanner": "scanner-primary", "fingerprint": "7dd481534ddb3419", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e7986a3225fdfc20", "level": "error", "message": {"text": "Dangling fetch: POST /api/certificates/extract-from-image (attached_assets/subadmin-certificates_1767671787374.tsx:426)"}, "properties": {"repobilityId": "46bf6428d67cc58f", "scanner": "scanner-primary", "fingerprint": "e7986a3225fdfc20", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d7e0b697eb4a2238", "level": "error", "message": {"text": "Dangling fetch: POST /api/bgm-cue-sheet/translate-prompt (client/src/pages/bgm-cue-sheet/index.tsx:628)"}, "properties": {"repobilityId": "8c838f27be5755be", "scanner": "scanner-primary", "fingerprint": "d7e0b697eb4a2238", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-95d8f8eec7c1e704", "level": "error", "message": {"text": "Dangling fetch: POST /api/bgm-cue-sheet/fetch-audio (client/src/pages/bgm-cue-sheet/index.tsx:2118)"}, "properties": {"repobilityId": "35afeb1bf5bcf9c8", "scanner": "scanner-primary", "fingerprint": "95d8f8eec7c1e704", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fbd98d9d0ee39171", "level": "note", "message": {"text": "Unused endpoint: POST /api/rpa/insurance4/jobs"}, "properties": {"repobilityId": "11573458625a3154", "scanner": "scanner-primary", "fingerprint": "fbd98d9d0ee39171", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-df2a85d2c45b364f", "level": "note", "message": {"text": "Unused endpoint: POST /api/agent-runs/:id/rfp-analysis-results"}, "properties": {"repobilityId": "397f715d4ebdad46", "scanner": "scanner-primary", "fingerprint": "df2a85d2c45b364f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-40d65c54806164e6", "level": "note", "message": {"text": "Unused endpoint: GET /api/bid-strategy/analyses/:id/agent-rfp-results"}, "properties": {"repobilityId": "a172ffd90c92bc90", "scanner": "scanner-primary", "fingerprint": "40d65c54806164e6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ffebc43712c6b6b8", "level": "note", "message": {"text": "Unused endpoint: GET /api/estimates"}, "properties": {"repobilityId": "d04741747bc1ea89", "scanner": "scanner-primary", "fingerprint": "ffebc43712c6b6b8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-744c292cfff45300", "level": "note", "message": {"text": "Unused endpoint: GET /api/estimates/form-templates"}, "properties": {"repobilityId": "cd8968168424a0eb", "scanner": "scanner-primary", "fingerprint": "744c292cfff45300", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b45721e93fce95ca", "level": "note", "message": {"text": "Unused endpoint: POST /api/estimates/form-templates"}, "properties": {"repobilityId": "5adc53c7ae8df9c1", "scanner": "scanner-primary", "fingerprint": "b45721e93fce95ca", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6beacabe0da9ec2f", "level": "note", "message": {"text": "Unused endpoint: PATCH /api/estimates/form-templates/:id"}, "properties": {"repobilityId": "1017a2082a0b0e1e", "scanner": "scanner-primary", "fingerprint": "6beacabe0da9ec2f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-640ed0aa674a69df", "level": "note", "message": {"text": "Unused endpoint: DELETE /api/estimates/form-templates/:id"}, "properties": {"repobilityId": "faad28ceabf66e8a", "scanner": "scanner-primary", "fingerprint": "640ed0aa674a69df", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2d909b29498db33e", "level": "note", "message": {"text": "Unused endpoint: POST /api/estimates"}, "properties": {"repobilityId": "b344dff232d24eb0", "scanner": "scanner-primary", "fingerprint": "2d909b29498db33e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-583aacb6acbb28e1", "level": "note", "message": {"text": "Unused endpoint: GET /api/estimates/:id"}, "properties": {"repobilityId": "f3d1a6a0d7ca620d", "scanner": "scanner-primary", "fingerprint": "583aacb6acbb28e1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a00fc107705fa186", "level": "note", "message": {"text": "Unused endpoint: PATCH /api/estimates/:id/draft"}, "properties": {"repobilityId": "8d1c45eb0ab3d819", "scanner": "scanner-primary", "fingerprint": "a00fc107705fa186", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b80ee1296b082147", "level": "note", "message": {"text": "Unused endpoint: POST /api/estimates/:id/send"}, "properties": {"repobilityId": "333dcbd72625980b", "scanner": "scanner-primary", "fingerprint": "b80ee1296b082147", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f0141f49c8bdaf5d", "level": "note", "message": {"text": "Unused endpoint: POST /api/estimates/:id/clone"}, "properties": {"repobilityId": "99304a260a88d69f", "scanner": "scanner-primary", "fingerprint": "f0141f49c8bdaf5d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-dd58d2fb784afc12", "level": "note", "message": {"text": "Unused endpoint: PATCH /api/estimates/:id/status"}, "properties": {"repobilityId": "dedb093cb45cd771", "scanner": "scanner-primary", "fingerprint": "dd58d2fb784afc12", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-91ade9c2d8a2413f", "level": "note", "message": {"text": "Unused endpoint: POST /api/common-docs/:id/reanalyze"}, "properties": {"repobilityId": "693238cf77fce2a0", "scanner": "scanner-primary", "fingerprint": "91ade9c2d8a2413f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ca4906cfb6a69ba7", "level": "note", "message": {"text": "Unused endpoint: PATCH /api/common-docs/:id/verification"}, "properties": {"repobilityId": "08b6dbef2f0c3d18", "scanner": "scanner-primary", "fingerprint": "ca4906cfb6a69ba7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-efcc9ee2fda9a571", "level": "note", "message": {"text": "Unused endpoint: POST /api/common-docs/reanalyze-batch"}, "properties": {"repobilityId": "8a06cd17f72a852b", "scanner": "scanner-primary", "fingerprint": "efcc9ee2fda9a571", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-44030a1dbb03847e", "level": "note", "message": {"text": "Unused endpoint: POST /api/agent-data/company-certificates/reanalyze-batch"}, "properties": {"repobilityId": "22feb4a1f16eef90", "scanner": "scanner-primary", "fingerprint": "44030a1dbb03847e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1596bc93e710e2b6", "level": "note", "message": {"text": "Unused endpoint: GET /api/company-profile/effective-summary"}, "properties": {"repobilityId": "4c437e936229d852", "scanner": "scanner-primary", "fingerprint": "1596bc93e710e2b6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-61ec50de6a0b1ccb", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/company-profile/effective"}, "properties": {"repobilityId": "ad4598c0946d8c37", "scanner": "scanner-primary", "fingerprint": "61ec50de6a0b1ccb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-049aeec777429db8", "level": "note", "message": {"text": "Unused endpoint: POST /api/bid-strategy/analyses/:id/source-document"}, "properties": {"repobilityId": "d5b17051972429ed", "scanner": "scanner-primary", "fingerprint": "049aeec777429db8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c7f4bfeaca98b795", "level": "note", "message": {"text": "Unused endpoint: USE /prefix"}, "properties": {"repobilityId": "6c78be304feeb984", "scanner": "scanner-primary", "fingerprint": "c7f4bfeaca98b795", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d56377de0f04f92b", "level": "note", "message": {"text": "Unused endpoint: POST /jobs/video"}, "properties": {"repobilityId": "9d67906a40330abf", "scanner": "scanner-primary", "fingerprint": "d56377de0f04f92b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7d96f5f5efab651c", "level": "note", "message": {"text": "Unused endpoint: POST /jobs/thumbnail"}, "properties": {"repobilityId": "7d88803e8f18dd70", "scanner": "scanner-primary", "fingerprint": "7d96f5f5efab651c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8a6e87283107a478", "level": "note", "message": {"text": "Unused endpoint: GET /jobs/:id/progress"}, "properties": {"repobilityId": "33414deb4b6e86f8", "scanner": "scanner-primary", "fingerprint": "8a6e87283107a478", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-50a6ecbda9765e0f", "level": "note", "message": {"text": "Unused endpoint: POST /jobs/subtitle"}, "properties": {"repobilityId": "d8e94248c92837bf", "scanner": "scanner-primary", "fingerprint": "50a6ecbda9765e0f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5197e41e01986f8c", "level": "note", "message": {"text": "Unused endpoint: POST /jobs/info"}, "properties": {"repobilityId": "aecda3d7c68e8de3", "scanner": "scanner-primary", "fingerprint": "5197e41e01986f8c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8bf2f7ca3faa1f1b", "level": "note", "message": {"text": "Unused endpoint: USE /api/auth/login"}, "properties": {"repobilityId": "7e73c872865eae25", "scanner": "scanner-primary", "fingerprint": "8bf2f7ca3faa1f1b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-339c7e0b4e898322", "level": "note", "message": {"text": "Unused endpoint: USE /api/login"}, "properties": {"repobilityId": "f8b2088c81ba5793", "scanner": "scanner-primary", "fingerprint": "339c7e0b4e898322", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-797528a4ad45e705", "level": "note", "message": {"text": "Unused endpoint: GET /api/projects/:projectId/bid-documents"}, "properties": {"repobilityId": "315c9e5628fb5030", "scanner": "scanner-primary", "fingerprint": "797528a4ad45e705", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3480dff9f3553d05", "level": "note", "message": {"text": "Unused endpoint: GET /api/project-bid-documents/:id"}, "properties": {"repobilityId": "da5a1af9c7736e6b", "scanner": "scanner-primary", "fingerprint": "3480dff9f3553d05", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3a50c6151fc8ad66", "level": "note", "message": {"text": "Unused endpoint: POST /api/project-bid-documents"}, "properties": {"repobilityId": "6ede6584439af2c2", "scanner": "scanner-primary", "fingerprint": "3a50c6151fc8ad66", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-205b56c88235f936", "level": "note", "message": {"text": "Unused endpoint: PATCH /api/project-bid-documents/:id"}, "properties": {"repobilityId": "b7f4887ca03042ea", "scanner": "scanner-primary", "fingerprint": "205b56c88235f936", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2ed0826da8e33bd1", "level": "note", "message": {"text": "Unused endpoint: DELETE /api/project-bid-documents/:id"}, "properties": {"repobilityId": "9a77506cc798e656", "scanner": "scanner-primary", "fingerprint": "2ed0826da8e33bd1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1ee7100a6c69288f", "level": "note", "message": {"text": "Unused endpoint: GET /api/project-document-edits/:projectId"}, "properties": {"repobilityId": "e021a59d7ef07f41", "scanner": "scanner-primary", "fingerprint": "1ee7100a6c69288f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-54ced935c1a44ae4", "level": "note", "message": {"text": "Unused endpoint: DELETE /api/project-document-edits/:projectId"}, "properties": {"repobilityId": "17a85dcbe7fe6c75", "scanner": "scanner-primary", "fingerprint": "54ced935c1a44ae4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f717791eabd84343", "level": "note", "message": {"text": "Unused endpoint: GET /api/projects/:projectId/merge-config"}, "properties": {"repobilityId": "a9f7d14450af9925", "scanner": "scanner-primary", "fingerprint": "f717791eabd84343", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-bd5788c5beaa0532", "level": "note", "message": {"text": "Unused endpoint: GET /api/employee-statistics-overrides"}, "properties": {"repobilityId": "332493fa55db1bc3", "scanner": "scanner-primary", "fingerprint": "bd5788c5beaa0532", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-436858f226c44780", "level": "note", "message": {"text": "Unused endpoint: POST /api/employee-statistics-overrides"}, "properties": {"repobilityId": "fd0e1ae589e41d94", "scanner": "scanner-primary", "fingerprint": "436858f226c44780", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d64c70cfff9448f6", "level": "note", "message": {"text": "Unused endpoint: GET /api/experiences/:id"}, "properties": {"repobilityId": "fb629b872744407b", "scanner": "scanner-primary", "fingerprint": "d64c70cfff9448f6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-46e5068aa4c9bdb3", "level": "note", "message": {"text": "Unused endpoint: POST /api/experiences"}, "properties": {"repobilityId": "4fbffdf5a1afbbae", "scanner": "scanner-primary", "fingerprint": "46e5068aa4c9bdb3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2c6037c06e4e2d17", "level": "note", "message": {"text": "Unused endpoint: PATCH /api/experiences/:id"}, "properties": {"repobilityId": "3e9eed9efb341660", "scanner": "scanner-primary", "fingerprint": "2c6037c06e4e2d17", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2210e27a6a136c09", "level": "note", "message": {"text": "Unused endpoint: DELETE /api/experiences/:id"}, "properties": {"repobilityId": "8d060560570eac67", "scanner": "scanner-primary", "fingerprint": "2210e27a6a136c09", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-71dc89a5570a519b", "level": "note", "message": {"text": "Unused endpoint: GET /api/employees/:employeeId/career-history"}, "properties": {"repobilityId": "bcf9b97f02b5dbad", "scanner": "scanner-primary", "fingerprint": "71dc89a5570a519b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b239656ccff9dd4c", "level": "note", "message": {"text": "Unused endpoint: POST /api/employees/:employeeId/career-history"}, "properties": {"repobilityId": "68018058054f02e8", "scanner": "scanner-primary", "fingerprint": "b239656ccff9dd4c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-16720209d721c791", "level": "note", "message": {"text": "Unused endpoint: PATCH /api/career-history/:id"}, "properties": {"repobilityId": "ee976ac7755d0fe5", "scanner": "scanner-primary", "fingerprint": "16720209d721c791", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5dd3ddfd4eb8feab", "level": "note", "message": {"text": "Unused endpoint: DELETE /api/career-history/:id"}, "properties": {"repobilityId": "65436ba097f6689a", "scanner": "scanner-primary", "fingerprint": "5dd3ddfd4eb8feab", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e64393feefb26988", "level": "note", "message": {"text": "Unused endpoint: GET /api/user-docs"}, "properties": {"repobilityId": "585f36e4f342a903", "scanner": "scanner-primary", "fingerprint": "e64393feefb26988", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cda010ddf41c77cc", "level": "note", "message": {"text": "Unused endpoint: GET /api/user-docs/:id"}, "properties": {"repobilityId": "ba10cd3c016a86ad", "scanner": "scanner-primary", "fingerprint": "cda010ddf41c77cc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-793bcead0d94ea0e", "level": "note", "message": {"text": "Unused endpoint: POST /api/user-docs"}, "properties": {"repobilityId": "e5891116c99d54b9", "scanner": "scanner-primary", "fingerprint": "793bcead0d94ea0e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}