{"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": "foundry_unresolved_feedback", "name": "Foundry mined unresolved feedback: tdaniel1925/valor-2", "shortDescription": {"text": "Foundry mined unresolved feedback: tdaniel1925/valor-2"}, "fullDescription": {"text": "Graph query export: Human feedback without linked fix evidence\nQuery id: unresolved_feedback\nQuery type: motif_query\nIntent: Negative/unresolved examples that should not be hallucinated into fixes.\nMotif: unlinked_feedback_needs_evidence\nTraining usage: negative_or_unresolved\nGraph gold label: needs_more_evidence\nRepo: tdaniel1925/valor-2\nThread: tdaniel1925/valor-2#2\nEvidence:\nGraph motif: Human feedback exists without a linked fix\nMotif id: unlinked_feedback_needs_evidence\nPolarity: bad\nTraining usage: negative_or_unresolved\nSeverity: medium\nRepo: tdaniel1925/valor-2\nThread: tdaniel1925/valor-2#2\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: tdaniel1925/valor-2#2\nRepo: tdaniel1925/valor-2\nIssue/PR number: 2\nGraph consistency label: needs_more_evidence\nNodes: 14\nEdges: 24\nNode types: {'link_quality': 4, 'comment': 2, 'pr_file': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comme"}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "medium", "confidence": 0.7, "cwe": "", "owasp": ""}}, {"id": "foundry_bad_chain", "name": "Foundry mined bad chains: tdaniel1925/valor-2", "shortDescription": {"text": "Foundry mined bad chains: tdaniel1925/valor-2"}, "fullDescription": {"text": "Comment chain pattern product: bad_chains\nRepo: tdaniel1925/valor-2\nThread: tdaniel1925/valor-2#2\nOutcome: not_resolved_or_not_observed\nThread label: thread_has_human_issue_without_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_unresolved, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: tdaniel1925/valor-2#2\nRepo: tdaniel1925/valor-2\nThread label: thread_has_human_issue_without_fix_context\nOutcome: not_resolved_or_not_observed\nComment count: 2\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 2\nLabels: {'security_auth_secret': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {'dependency_or_build': 2}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-5079f36cd334b280\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"security_auth_secret\",\n    \"polarity\""}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "high", "confidence": 0.84, "cwe": "", "owasp": ""}}, {"id": "foundry_auth_guardrail_gap", "name": "Foundry mined security auth guardrail gaps: tdaniel1925/valor-2", "shortDescription": {"text": "Foundry mined security auth guardrail gaps: tdaniel1925/valor-2"}, "fullDescription": {"text": "Graph query export: Security/auth changes without enough guardrails\nQuery id: security_auth_guardrail_gaps\nQuery type: motif_query\nIntent: Assumption-check security/auth examples requiring stronger tests or CI.\nMotif: security_auth_without_guardrails\nTraining usage: assumption_check\nGraph gold label: needs_more_evidence\nRepo: tdaniel1925/valor-2\nThread: tdaniel1925/valor-2#2\nEvidence:\nGraph motif: Security/auth change without enough guardrails\nMotif id: security_auth_without_guardrails\nPolarity: bad\nTraining usage: assumption_check\nSeverity: critical\nRepo: tdaniel1925/valor-2\nThread: tdaniel1925/valor-2#2\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: tdaniel1925/valor-2#2\nRepo: tdaniel1925/valor-2\nIssue/PR number: 2\nGraph consistency label: needs_more_evidence\nNodes: 14\nEdges: 24\nNode types: {'link_quality': 4, 'comment': 2, 'pr_file': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: "}, "properties": {"scanner": "foundry_dataset", "category": "auth", "severity": "critical", "confidence": 0.78, "cwe": "", "owasp": ""}}, {"id": "scanner-bead75b0f9233e05", "name": "No API endpoints detected", "shortDescription": {"text": "No API endpoints detected"}, "fullDescription": {"text": "The scanner did not find FastAPI/Flask/Express/NestJS/GraphQL/gRPC routes. If this repo exposes APIs, the framework may be unsupported."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "info", "confidence": 1.0}}, {"id": "scanner-42d019510986d61d", "name": "Stray `console.log` in TS/JS \u2014 debug-saml.js:9", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 debug-saml.js:9"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-06c5c602e3dd7406", "name": "Stray `console.log` in TS/JS \u2014 analyze-smartoffice-data.js:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 analyze-smartoffice-data.js:11"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-87bbd0aa387a6558", "name": "Stray `console.log` in TS/JS \u2014 check-data.js:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 check-data.js:11"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-447fc4b8c7621798", "name": "Stray `console.log` in TS/JS \u2014 test-db-connection.js:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test-db-connection.js:11"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-37643dee78d49fe3", "name": "Stray `console.log` in TS/JS \u2014 test-ipipeline.js:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test-ipipeline.js:13"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d46be145124e4457", "name": "Stray `console.log` in TS/JS \u2014 verify-setup.js:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 verify-setup.js:7"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-61ab315bf4d966f0", "name": "Stray `console.log` in TS/JS \u2014 tests/integration/check-smartoffice-data.ts:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/integration/check-smartoffice-data.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-5fd41d28b39991a1", "name": "Stray `console.log` in TS/JS \u2014 tests/integration/find-duplicate-agents.ts:9", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/integration/find-duplicate-agents.ts:9"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b37bc015adb34c18", "name": "Stray `console.log` in TS/JS \u2014 tests/integration/analyze-agents-csv.ts:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/integration/analyze-agents-csv.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-6b0603de995c7856", "name": "Stray `console.log` in TS/JS \u2014 tests/integration/webhook-quick-test.ts:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/integration/webhook-quick-test.ts:16"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7c0a5278d12a353b", "name": "Stray `console.log` in TS/JS \u2014 tests/integration/verify-stats-source-of-truth.ts:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/integration/verify-stats-source-of-truth.ts:16"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a0111c4903ac1439", "name": "Stray `console.log` in TS/JS \u2014 tests/integration/smartoffice-webhook-flow.test.ts:168", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/integration/smartoffice-webhook-flow.test.ts:168"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c26368b5277640cd", "name": "Stray `console.log` in TS/JS \u2014 tests/utils/test-database.ts:144", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/utils/test-database.ts:144"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5987c1f5e0427715", "name": "Stray `console.log` in TS/JS \u2014 tests/setup/setup-test-tenants.ts:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/setup/setup-test-tenants.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-d4c416d38b7e6413", "name": "Stray `console.log` in TS/JS \u2014 tests/setup/test-tenants.ts:50", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/setup/test-tenants.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-511082a7f862f857", "name": "TODO/FIXME marker in shipping code \u2014 tests/e2e/cross-tenant-security.spec.ts:450", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 tests/e2e/cross-tenant-security.spec.ts:450"}, "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-0de6a0eb47913032", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/cross-tenant-security.spec.ts:101", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/cross-tenant-security.spec.ts:101"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-faac3dfff6810667", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/complete-app-flow.spec.ts:245", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/complete-app-flow.spec.ts:245"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f2a04bbffbe5dad6", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/smartoffice-features.spec.ts:1346", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/smartoffice-features.spec.ts:1346"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-47827187dafed8b2", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/smartoffice-complete-flow.spec.ts:369", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/smartoffice-complete-flow.spec.ts:369"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-395ed7f443b7001e", "name": "Stray `console.log` in TS/JS \u2014 scripts/debug-rls.ts:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/debug-rls.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-bf52ba60f8aa2a02", "name": "Stray `console.log` in TS/JS \u2014 scripts/reassign-commissions.ts:49", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/reassign-commissions.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-90476a248ad9002d", "name": "Stray `console.log` in TS/JS \u2014 scripts/create-trent-admin.ts:22", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/create-trent-admin.ts:22"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-de102736904029f5", "name": "Stray `console.log` in TS/JS \u2014 scripts/analyze-cases-excel2.ts:6", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/analyze-cases-excel2.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-011eb328ac3c9848", "name": "Stray `console.log` in TS/JS \u2014 scripts/simple-3mark-browser.ts:22", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/simple-3mark-browser.ts:22"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-99dd7858fa575e2b", "name": "Stray `console.log` in TS/JS \u2014 scripts/compare-excel-policies.ts:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/compare-excel-policies.ts:11"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-edde4b77591d2690", "name": "Stray `console.log` in TS/JS \u2014 scripts/generate-inbound-emails.ts:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-inbound-emails.ts:7"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-56124e653b8fd973", "name": "Stray `console.log` in TS/JS \u2014 scripts/inspect-smartoffice-excel.js:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/inspect-smartoffice-excel.js:18"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ccd91a079732d9cf", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-email-imports.ts:6", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-email-imports.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-e6992a97bacfcab9", "name": "Stray `console.log` in TS/JS \u2014 scripts/download-libraip-pdfs.ts:24", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/download-libraip-pdfs.ts:24"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-811c7f79461e316c", "name": "Stray `console.log` in TS/JS \u2014 scripts/find-user.ts:25", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/find-user.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-314fd8fc5bcd490c", "name": "Stray `console.log` in TS/JS \u2014 scripts/import-smartoffice-contracts.ts:76", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import-smartoffice-contracts.ts:76"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cfd126baa18c5a55", "name": "Stray `console.log` in TS/JS \u2014 scripts/manual-3mark-navigation.ts:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/manual-3mark-navigation.ts:18"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b218408cb1b84c54", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-premium-totals.ts:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-premium-totals.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-d5f3333b4ec17910", "name": "Stray `console.log` in TS/JS \u2014 scripts/find-buchholz.ts:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/find-buchholz.ts:15"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-544a5cf5992f6ba6", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-smartoffice-data.ts:4", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-smartoffice-data.ts:4"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cbb56315e9647937", "name": "Stray `console.log` in TS/JS \u2014 scripts/apply-status-migration.ts:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-status-migration.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-3a3720b522e91085", "name": "Stray `console.log` in TS/JS \u2014 scripts/analyze-skipped-records.ts:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/analyze-skipped-records.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-110858415dbb6d34", "name": "Stray `console.log` in TS/JS \u2014 scripts/confirm-test-users.ts:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/confirm-test-users.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-456b15d94215001e", "name": "Stray `console.log` in TS/JS \u2014 scripts/find-exact-duplicates.ts:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/find-exact-duplicates.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-ce2d2c93ffa2e69f", "name": "Stray `console.log` in TS/JS \u2014 scripts/verify-production-rls.ts:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verify-production-rls.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-4a21509ff4d2b32a", "name": "Stray `console.log` in TS/JS \u2014 scripts/firelight-watcher-vps.js:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/firelight-watcher-vps.js: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-a37694b090bd7701", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-user-tenant.ts:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-user-tenant.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-e8b828241dd32145", "name": "Stray `console.log` in TS/JS \u2014 scripts/quick-agent-count.ts:8", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/quick-agent-count.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-35dd63a973c98aa9", "name": "Stray `console.log` in TS/JS \u2014 scripts/list-db-policies.ts:22", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/list-db-policies.ts:22"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c4fa6e9aa72454fd", "name": "Stray `console.log` in TS/JS \u2014 scripts/find-trent.ts:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/find-trent.ts:18"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-084491ee0fd12cd7", "name": "Stray `console.log` in TS/JS \u2014 scripts/set-super-admin.ts:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/set-super-admin.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-9251beab9faea6c9", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-admin-users.ts:26", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-admin-users.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-b792bc610f60c7fb", "name": "Stray `console.log` in TS/JS \u2014 scripts/sync-smartoffice-to-cases.ts:156", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/sync-smartoffice-to-cases.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-794a23f61f35aabc", "name": "Stray `console.log` in TS/JS \u2014 scripts/download-3mark-pdfs.ts:38", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/download-3mark-pdfs.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-cc899755df5df863", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-policy-duplicates.ts:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-policy-duplicates.ts:11"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1c7a7528e03133ba", "name": "Stray `console.log` in TS/JS \u2014 scripts/simple-commission-import.ts:21", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/simple-commission-import.ts:21"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2c0faabb75a3b819", "name": "Stray `console.log` in TS/JS \u2014 scripts/debug-excel-parsing.ts:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/debug-excel-parsing.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-b274f6e7a460b011", "name": "Stray `console.log` in TS/JS \u2014 scripts/firelight-watcher.ts:49", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/firelight-watcher.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-6e1dda76860bf3aa", "name": "Stray `console.log` in TS/JS \u2014 scripts/cleanup-seed-data.ts:9", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/cleanup-seed-data.ts:9"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-015a8049f0ce8dd6", "name": "Stray `console.log` in TS/JS \u2014 scripts/assign-to-phil.ts:34", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/assign-to-phil.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-74909093e204607b", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-smartoffice-policies.ts:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-smartoffice-policies.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-4f8307b20c7d435c", "name": "Stray `console.log` in TS/JS \u2014 scripts/inspect-3mark-page.ts:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/inspect-3mark-page.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-51652e1cad587a83", "name": "Stray `console.log` in TS/JS \u2014 scripts/show-tenant-emails.ts:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/show-tenant-emails.ts:15"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1a6f534c3f6955c2", "name": "Stray `console.log` in TS/JS \u2014 scripts/apply-rls-policies.ts:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-rls-policies.ts:15"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c8c1884cd6c010d8", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-commission-years.ts:31", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-commission-years.ts:31"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4e48e82e66ad990e", "name": "Stray `console.log` in TS/JS \u2014 scripts/sync-smartoffice-to-contracts.ts:74", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/sync-smartoffice-to-contracts.ts:74"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b58cffcc70c88872", "name": "Stray `console.log` in TS/JS \u2014 scripts/find-duplicates.ts:45", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/find-duplicates.ts:45"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2276fffef03d3198", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-tenant.ts:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-tenant.ts:12"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-425b56f2a1593c16", "name": "Stray `console.log` in TS/JS \u2014 scripts/move-tdaniel-to-valor.ts:9", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/move-tdaniel-to-valor.ts:9"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cf7e28805ee5fa25", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-login.ts:9", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-login.ts:9"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3a157ae5add4d9bc", "name": "Stray `console.log` in TS/JS \u2014 scripts/manual-reimport.ts:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/manual-reimport.ts:12"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b25cc6d9f1115630", "name": "Stray `console.log` in TS/JS \u2014 scripts/import-smartoffice-commissions.ts:87", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import-smartoffice-commissions.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-71d5dab1ed0faac1", "name": "Stray `console.log` in TS/JS \u2014 scripts/add-missing-columns.ts:9", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-missing-columns.ts:9"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8066501375a12104", "name": "Stray `console.log` in TS/JS \u2014 scripts/run-migration.ts:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/run-migration.ts:16"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f450afe6daa26ede", "name": "Stray `console.log` in TS/JS \u2014 scripts/cleanup-duplicate-agents.ts:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/cleanup-duplicate-agents.ts:11"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-431c0edd534c6d1e", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-commissions.ts:39", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-commissions.ts:39"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-90a709e2640cb9d9", "name": "Stray `console.log` in TS/JS \u2014 scripts/inspect-agent-data.ts:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/inspect-agent-data.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-69165708eb6444f5", "name": "Stray `console.log` in TS/JS \u2014 scripts/import-cases-from-excel.ts:31", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import-cases-from-excel.ts:31"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8e507687b0dde701", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-add-columns.ts:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-add-columns.ts:16"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-94cdc2333bf00f6d", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-contract-parsing.ts:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-contract-parsing.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-a0a0b29dd35e40e2", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-rls-policies.ts:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-rls-policies.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-9bf6f0a4096baaeb", "name": "Stray `console.log` in TS/JS \u2014 scripts/remove-bypassrls.ts:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/remove-bypassrls.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-bb18a01e2b78ee8f", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-sso-tables.ts:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-sso-tables.ts:15"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c6d3a7abf3c29009", "name": "Stray `console.log` in TS/JS \u2014 scripts/examine-excel-structure.ts:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/examine-excel-structure.ts:11"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2ff8954b7bca2311", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-connection.ts:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-connection.ts:12"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ac7c38c5a490867c", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-recent-syncs.ts:6", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-recent-syncs.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-07e868285ebeac0a", "name": "Stray `console.log` in TS/JS \u2014 scripts/generate-catalog-data.js:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-catalog-data.js:15"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4b5b6e169a63ebbf", "name": "Stray `console.log` in TS/JS \u2014 scripts/import-commissions-data.ts:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import-commissions-data.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-ec5efaad15ab3283", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-tenant-isolation.ts:26", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-tenant-isolation.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-a00c7abda384ffc4", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-excel-headers.ts:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-excel-headers.ts:15"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-55e3833aa9aa52cf", "name": "Stray `console.log` in TS/JS \u2014 scripts/record-and-download-pdfs.ts:34", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/record-and-download-pdfs.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-dfb49539b509200a", "name": "Stray `console.log` in TS/JS \u2014 scripts/setup-admin-access.ts:22", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/setup-admin-access.ts:22"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c1149db18c9f5f27", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-case-tenants.ts:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-case-tenants.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-b7bff5e2b899aa73", "name": "Stray `console.log` in TS/JS \u2014 scripts/run-sso-migration.ts:9", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/run-sso-migration.ts:9"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5955c7eb9eaefb39", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-smartoffice-parser.ts:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-smartoffice-parser.ts:11"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-541feeb2a601322a", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-bypassrls.ts:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-bypassrls.ts:16"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3553e552e65ecfe8", "name": "Stray `console.log` in TS/JS \u2014 scripts/force-rls.ts:29", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/force-rls.ts:29"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-641235c508a983b7", "name": "Stray `console.log` in TS/JS \u2014 scripts/create-test-tenants-via-api.ts:27", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/create-test-tenants-via-api.ts:27"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d2a4e759756a847f", "name": "Stray `console.log` in TS/JS \u2014 scripts/export-intellisheets-json.ts:45", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/export-intellisheets-json.ts:45"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a98686feee24be2b", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-dashboard-data.ts:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-dashboard-data.ts:7"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-305a3730e67662b8", "name": "Stray `console.log` in TS/JS \u2014 scripts/create-test-user.ts:33", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/create-test-user.ts:33"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-160b47bfdacffe3e", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-test-tenants.ts:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-test-tenants.ts:18"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bc0a3da4b7370d75", "name": "Stray `console.log` in TS/JS \u2014 scripts/rename-catalog-pdfs.js:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/rename-catalog-pdfs.js:15"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ffc38c781dddae89", "name": "Stray `console.log` in TS/JS \u2014 scripts/create-oauth-client.ts:50", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/create-oauth-client.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-c1464fa8c7a566b0", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-remaining-duplicates.ts:6", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-remaining-duplicates.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-7ddb88ebe0ae52b3", "name": "Stray `console.log` in TS/JS \u2014 scripts/read-intellisheets.ts:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/read-intellisheets.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-f4d1b8db5f7cf073", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-specific-policy.ts:21", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-specific-policy.ts:21"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1e7e05f96b036086", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-statuses-in-file.ts:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-statuses-in-file.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-a2b9907b3899d797", "name": "Stray `console.log` in TS/JS \u2014 scripts/investigate-sync-issue.ts:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/investigate-sync-issue.ts:11"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-756157280bc9db5c", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-env.ts:74", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-env.ts:74"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-321668e0e4b40c09", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-winflex-sso.ts:19", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-winflex-sso.ts:19"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8ff6b7b26e94a0fa", "name": "Stray `console.log` in TS/JS \u2014 scripts/analyze-cases-excel.ts:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/analyze-cases-excel.ts:7"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-390cf824f79c1532", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-rls-policies.ts:29", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-rls-policies.ts:29"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f333fe9139d6bcb9", "name": "Stray `console.log` in TS/JS \u2014 scripts/experimental-contract-parser.ts:159", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/experimental-contract-parser.ts:159"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a8459d7c17a4dcb2", "name": "Stray `console.log` in TS/JS \u2014 scripts/set-admin-sql.ts:8", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/set-admin-sql.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-6e1f8d33b1dfb871", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-parser.js:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-parser.js:15"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4ef2ece2ae80b420", "name": "Stray `console.log` in TS/JS \u2014 scripts/auto-import-smartoffice.ts:23", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/auto-import-smartoffice.ts:23"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7cd8c0bc0ef8dddd", "name": "Stray `console.log` in TS/JS \u2014 prisma/seed.ts:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 prisma/seed.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-5a23dbfe49eb15eb", "name": "Stray `console.log` in TS/JS \u2014 prisma/seed-help.ts:6", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 prisma/seed-help.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-721066ffb45b55ed", "name": "`truncate` class without `title=` for hover reveal \u2014 components/layout/NotificationCenter.tsx:155", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/layout/NotificationCenter.tsx:155"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0ec338169e1252e5", "name": "`truncate` class without `title=` for hover reveal \u2014 components/layout/OrganizationSwitcher.tsx:75", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/layout/OrganizationSwitcher.tsx:75"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-26465be227f812d4", "name": "TODO/FIXME marker in shipping code \u2014 components/layout/OrganizationSwitcher.tsx:29", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 components/layout/OrganizationSwitcher.tsx:29"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f3732e0149194857", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 components/help/MarkdownContent.tsx:67", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 components/help/MarkdownContent.tsx:67"}, "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-060afbda90d66c93", "name": "TODO/FIXME marker in shipping code \u2014 components/auth/RoleGuard.tsx:80", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 components/auth/RoleGuard.tsx:80"}, "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-25ca3dbb8fc8bee9", "name": "`truncate` class without `title=` for hover reveal \u2014 components/dashboard/DashboardWidget.tsx:137", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/dashboard/DashboardWidget.tsx:137"}, "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-214131a61b74d27e", "name": "`truncate` class without `title=` for hover reveal \u2014 components/dashboard/NewAgentsWidget.tsx:119", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/dashboard/NewAgentsWidget.tsx:119"}, "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-bca56b194cfb1ddc", "name": "`truncate` class without `title=` for hover reveal \u2014 components/organizations/OrganizationTree.tsx:121", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/organizations/OrganizationTree.tsx:121"}, "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-c50f33988b1b7b13", "name": "TODO/FIXME marker in shipping code \u2014 components/contracts/ContractRequestForm.tsx:67", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 components/contracts/ContractRequestForm.tsx:67"}, "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-04aee2dd533d42bb", "name": "`truncate` class without `title=` for hover reveal \u2014 app/cases/page.tsx:383", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/cases/page.tsx:383"}, "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-7890387e879dead6", "name": "`truncate` class without `title=` for hover reveal \u2014 app/intellisheets/page.tsx:349", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/intellisheets/page.tsx:349"}, "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-2b718f3523c3248c", "name": "Stray `console.log` in TS/JS \u2014 app/api/notifications/route.ts:21", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/notifications/route.ts:21"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e4bd17ea25aef9a7", "name": "Stray `console.log` in TS/JS \u2014 app/api/inbound/smartoffice/route.ts:99", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/inbound/smartoffice/route.ts:99"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-810adf2e65f7552d", "name": "TODO/FIXME marker in shipping code \u2014 app/api/reports/forecast/route.ts:163", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 app/api/reports/forecast/route.ts:163"}, "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-413ddc31ff3017f7", "name": "TODO/FIXME marker in shipping code \u2014 app/api/reports/goal-tracking/route.ts:143", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 app/api/reports/goal-tracking/route.ts:143"}, "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-a68fee2b0985558d", "name": "Stray `console.log` in TS/JS \u2014 app/api/smartoffice/webhook/route.ts:91", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/smartoffice/webhook/route.ts:91"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-60b12a4c4c89b380", "name": "Stray `console.log` in TS/JS \u2014 app/api/smartoffice/import/route.ts:59", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/smartoffice/import/route.ts:59"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b80092ab29138db1", "name": "Stray `console.log` in TS/JS \u2014 app/api/video-library/videos/sync/route.ts:77", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/video-library/videos/sync/route.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-0bd6f8fd2e3437b2", "name": "Stray `console.log` in TS/JS \u2014 app/api/webhooks/[source]/route.ts:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/webhooks/[source]/route.ts:18"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-95857b108326b70c", "name": "TODO/FIXME marker in shipping code \u2014 app/api/quotes/life/route.ts:88", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 app/api/quotes/life/route.ts:88"}, "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-ec268f9849000914", "name": "TODO/FIXME marker in shipping code \u2014 app/api/training/courses/route.ts:69", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 app/api/training/courses/route.ts:69"}, "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-c991f639930bd8ee", "name": "`truncate` class without `title=` for hover reveal \u2014 app/learning/[courseId]/page.tsx:124", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/learning/[courseId]/page.tsx:124"}, "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-eb7c57444c4db4cf", "name": "`truncate` class without `title=` for hover reveal \u2014 app/commissions/page.tsx:427", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/commissions/page.tsx:427"}, "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-ed9ab1b3232fdf2c", "name": "Stray `console.log` in TS/JS \u2014 app/dashboard/page.tsx:81", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/dashboard/page.tsx: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-7ced2d21d92f4754", "name": "`truncate` class without `title=` for hover reveal \u2014 app/community/page.tsx:238", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/community/page.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-9002675b34838a8a", "name": "`truncate` class without `title=` for hover reveal \u2014 app/admin/integrations/page.tsx:262", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/integrations/page.tsx:262"}, "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-03b64ccb6e5c20c7", "name": "`truncate` class without `title=` for hover reveal \u2014 app/admin/learning/page.tsx:180", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/learning/page.tsx:180"}, "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-33643ad17cfcd828", "name": "`truncate` class without `title=` for hover reveal \u2014 app/admin/learning/[courseId]/page.tsx:284", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/learning/[courseId]/page.tsx:284"}, "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-ac002a82a813ca26", "name": "TODO/FIXME marker in shipping code \u2014 app/profile/page.tsx:296", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 app/profile/page.tsx:296"}, "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-d2ae05ecbd2a61a3", "name": "Stray `console.log` in TS/JS \u2014 app/reports/builder/page.tsx:120", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/reports/builder/page.tsx:120"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-75a2daafaddd49ed", "name": "Stray `console.log` in TS/JS \u2014 lib/integrations/audit.ts:24", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 lib/integrations/audit.ts:24"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ef87f41b5adf7353", "name": "Stray `console.log` in TS/JS \u2014 lib/integrations/webhook-handler.ts:101", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 lib/integrations/webhook-handler.ts:101"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-44ec0f74f5c6cbd0", "name": "Stray `console.log` in TS/JS \u2014 lib/integrations/resend/client.ts:41", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 lib/integrations/resend/client.ts:41"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-99fe0c14b3db502a", "name": "Stray `console.log` in TS/JS \u2014 lib/integrations/ratewatch/client.ts:40", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 lib/integrations/ratewatch/client.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-2f19bbc0d85bc728", "name": "Stray `console.log` in TS/JS \u2014 lib/integrations/ipipeline/client.ts:37", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 lib/integrations/ipipeline/client.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-9c618293cf274bee", "name": "Stray `console.log` in TS/JS \u2014 lib/integrations/vapi/client.ts:53", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 lib/integrations/vapi/client.ts:53"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f646af6027516c98", "name": "Stray `console.log` in TS/JS \u2014 lib/email/resend-client.ts:87", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 lib/email/resend-client.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-37fdb5b3a4b6ce35", "name": "Stray `console.log` in TS/JS \u2014 lib/auth/get-tenant-context.ts:58", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 lib/auth/get-tenant-context.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-43303ce200118815", "name": "TODO/FIXME marker in shipping code \u2014 lib/auth/hooks.ts:54", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 lib/auth/hooks.ts:54"}, "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-263be047bbcae837", "name": "Stray `console.log` in TS/JS \u2014 lib/storage/smartoffice-storage.ts:74", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 lib/storage/smartoffice-storage.ts:74"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-11bce7051353040e", "name": "Stray `console.log` in TS/JS \u2014 lib/storage/setup-bucket.ts:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 lib/storage/setup-bucket.ts:28"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1d7af59d54a7e3c8", "name": "Stray `console.log` in TS/JS \u2014 lib/storage/setup-smartoffice-bucket.ts:31", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 lib/storage/setup-smartoffice-bucket.ts:31"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fbdd59b877655c57", "name": "Insecure pattern 'node_child_process' in test-ipipeline.js:76", "shortDescription": {"text": "Insecure pattern 'node_child_process' in test-ipipeline.js:76"}, "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-5c711c8057e4500b", "name": "Insecure pattern 'document_write' in downloads/3mark-page.html:1757", "shortDescription": {"text": "Insecure pattern 'document_write' in downloads/3mark-page.html:1757"}, "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-e416c0eef70ca097", "name": "Insecure pattern 'direct_innerhtml_assignment' in downloads/3mark-page.html:1509", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in downloads/3mark-page.html:1509"}, "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-6c07ed80c01fd80c", "name": "Possible secret in scripts/create-test-user.ts", "shortDescription": {"text": "Possible secret in scripts/create-test-user.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-3fab358be55a3d58", "name": "Possible secret in scripts/lms-smoke-test.mjs", "shortDescription": {"text": "Possible secret in scripts/lms-smoke-test.mjs"}, "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-b7ad2404e3659a00", "name": "Insecure pattern 'document_write' in components/integrations/IPipelineLauncher.tsx:147", "shortDescription": {"text": "Insecure pattern 'document_write' in components/integrations/IPipelineLauncher.tsx:147"}, "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-cfa83681d2ba1245", "name": "Insecure pattern 'dangerous_innerhtml' in components/help/MarkdownContent.tsx:67", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in components/help/MarkdownContent.tsx:67"}, "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-8e2793f72f9d275a", "name": "Insecure pattern 'eval_used' in app/api/smartoffice/chat/route.ts:226", "shortDescription": {"text": "Insecure pattern 'eval_used' in app/api/smartoffice/chat/route.ts:226"}, "fullDescription": {"text": "Found a known-risky pattern (eval_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "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-4601e3ad3bb28677", "name": "No CI/CD pipelines detected", "shortDescription": {"text": "No CI/CD pipelines detected"}, "fullDescription": {"text": "No GitHub Actions, GitLab CI, or CircleCI configs found. Without CI you can't gate deploys on tests/lints."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f8eacf47416ae55d", "name": "Very large file: tests/e2e/smartoffice-features.spec.ts (1518 lines)", "shortDescription": {"text": "Very large file: tests/e2e/smartoffice-features.spec.ts (1518 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-092a881cdafc4d3c", "name": "Very large file: components/layout/AppLayout.tsx (1469 lines)", "shortDescription": {"text": "Very large file: components/layout/AppLayout.tsx (1469 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ea3b5e389d8c9c0f", "name": "Low test-to-source ratio", "shortDescription": {"text": "Low test-to-source ratio"}, "fullDescription": {"text": "52 tests / 512 src (ratio 0.10)."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 1671 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 239 placeholder/mock markers across 78 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-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license, ci. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-505bc666a82f9849", "name": "Agent instruction/config may expose a secret: .claude/settings.local.json", "shortDescription": {"text": "Agent instruction/config may expose a secret: .claude/settings.local.json"}, "fullDescription": {"text": "Agent-facing files are routinely pasted into LLM/tool contexts. Move literal tokens, keys, and passwords into a secret manager or document them as placeholders only."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9d218b7226665a58", "name": "Agent authority lacks a verifier contract: .cursor/mcp-config.example.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .cursor/mcp-config.example.json"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ac32c16909101428", "name": "`fetch()` without try/.catch or AbortSignal \u2014 middleware.ts:45", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 middleware.ts:45"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bc45a1d3f712a91b", "name": "Commented-code block (7 lines) in tests/unit/lib/auth/tenant-context.test.ts:178", "shortDescription": {"text": "Commented-code block (7 lines) in tests/unit/lib/auth/tenant-context.test.ts:178"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e188e6fcb7925194", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/firelight-watcher-vps.js:31", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/firelight-watcher-vps.js:31"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e99dea246c2a9041", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/firelight-watcher.ts:74", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/firelight-watcher.ts:74"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-577065fa698fd7e5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/create-test-tenants-via-api.ts:7", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/create-test-tenants-via-api.ts:7"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-88b348c8beece2ac", "name": "Legacy-named symbol `syncIsOld` in scripts/investigate-sync-issue.ts:140", "shortDescription": {"text": "Legacy-named symbol `syncIsOld` in scripts/investigate-sync-issue.ts:140"}, "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-93ef13a2f3ddb87c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/lms-smoke-test.mjs:40", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/lms-smoke-test.mjs:40"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8140f208d8ecc02b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/layout/OrganizationSwitcher.tsx:31", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/layout/OrganizationSwitcher.tsx:31"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3418489e3e2441e4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/auth/RoleGuard.tsx:30", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/auth/RoleGuard.tsx:30"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-54338c8cf7ee6bca", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/dashboard/NewAgentsWidget.tsx:38", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/dashboard/NewAgentsWidget.tsx:38"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-03d7c92cda44316b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/profile/ProfilePhotoUpload.tsx:52", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/profile/ProfilePhotoUpload.tsx:52"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d78b59ea5d35406f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/contracts/ContractRequestForm.tsx:68", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/contracts/ContractRequestForm.tsx:68"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2bba5ff47e32b084", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/contracts/ContractExpirationAlerts.tsx:24", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/contracts/ContractExpirationAlerts.tsx:24"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0251e53beabba069", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/smartoffice/DashboardContent.tsx:218", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/smartoffice/DashboardContent.tsx:218"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f1a47083ccbd86a3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/smartoffice/ExportButton.tsx:30", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/smartoffice/ExportButton.tsx:30"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4620a720bbb42b9e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/quotes/ProductComparison.tsx:90", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/quotes/ProductComparison.tsx:90"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c45db1ae2b0cf5d2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/cases/page.tsx:80", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/cases/page.tsx:80"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-dcf74203310fe9d2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/cases/[id]/page.tsx:61", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/cases/[id]/page.tsx:61"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2fdbfa665c87e7fa", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/help/page.tsx:172", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/help/page.tsx:172"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c985985ea50d2582", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/help/videos/page.tsx:54", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/help/videos/page.tsx:54"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d39bd29127ae0097", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/help/articles/[slug]/page.tsx:65", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/help/articles/[slug]/page.tsx:65"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e643d2ad117dc9af", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/goals/page.tsx:32", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/goals/page.tsx:32"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0bb8239d6966e677", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/integrations/winflex/sso/route.ts:138", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/integrations/winflex/sso/route.ts:138"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3d5ffba26db03385", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/inbound/smartoffice/route.ts:122", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/inbound/smartoffice/route.ts:122"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3b020c081451df46", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/video-library/videos/sync/route.ts:80", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/video-library/videos/sync/route.ts:80"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0df6b169df2fd9ff", "name": "Commented-code block (9 lines) in app/api/quotes/life/route.ts:88", "shortDescription": {"text": "Commented-code block (9 lines) in app/api/quotes/life/route.ts:88"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5b59d22e0e59c612", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/resources/page.tsx:54", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/resources/page.tsx:54"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a7eae3b370c9b378", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/learning/page.tsx:34", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/learning/page.tsx:34"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-32b6254f2022f8a4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/learning/[courseId]/page.tsx:45", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/learning/[courseId]/page.tsx:45"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-95b9d365d74151be", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/learning/[courseId]/[lessonId]/page.tsx:49", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/learning/[courseId]/[lessonId]/page.tsx:49"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ad56046867eb777a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/commissions/page.tsx:52", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/commissions/page.tsx:52"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a63023c78c3fb4dd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/dashboard/page.tsx:82", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/dashboard/page.tsx:82"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b7cee2fcdcd658b3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/integrations/page.tsx:42", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/integrations/page.tsx:42"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-267023197344fc5c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/users/page.tsx:50", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/users/page.tsx:50"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f42c58d2e60eb608", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/learning/page.tsx:42", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/learning/page.tsx:42"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-567d93afb4f279b0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/learning/[courseId]/page.tsx:78", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/learning/[courseId]/page.tsx:78"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6e0fb1a48c96d7eb", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/learning/reports/page.tsx:118", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/learning/reports/page.tsx:118"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a89d63895770ad6b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/roles/page.tsx:70", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/roles/page.tsx:70"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-73a3954031f3e27a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/organizations/page.tsx:44", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/organizations/page.tsx:44"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b5fa6b6f3b2e2aab", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/organizations/[id]/page.tsx:51", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/organizations/[id]/page.tsx:51"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-32e9c37b663cd737", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/organizations/[id]/settings/page.tsx:31", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/organizations/[id]/settings/page.tsx:31"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e79494573e19bfad", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/audit-logs/page.tsx:60", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/audit-logs/page.tsx:60"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b394c5bca67680b1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/contracts/page.tsx:61", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/contracts/page.tsx:61"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6364e247014fddfd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/smartoffice-upload/page.tsx:46", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/smartoffice-upload/page.tsx:46"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-13d98380480a3809", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/(authenticated)/video-library/page.tsx:56", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/(authenticated)/video-library/page.tsx:56"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-dfe40fe0c3bfcc1e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/profile/page.tsx:40", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/profile/page.tsx:40"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c7b91a86019fa27e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/contracts/page.tsx:56", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/contracts/page.tsx:56"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a268dc037dd6cd5c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/contracts/[id]/page.tsx:48", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/contracts/[id]/page.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-ab2ffa5cccb2d35d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/reports/carriers/page.tsx:55", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/reports/carriers/page.tsx:55"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0f50912f1b3b20af", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/reports/forecast/page.tsx:51", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/reports/forecast/page.tsx:51"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-03150a3feb713c7d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/reports/agents/page.tsx:57", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/reports/agents/page.tsx:57"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5ff7f27a31ab98e5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/reports/goal-tracking/page.tsx:51", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/reports/goal-tracking/page.tsx:51"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c3054dfafda7467c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/smartoffice/agents/page.tsx:69", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/smartoffice/agents/page.tsx:69"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6a3876265c5504da", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/smartoffice/policies/page.tsx:78", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/smartoffice/policies/page.tsx:78"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-eba44b24ee9378e3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/quotes/page.tsx:37", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/quotes/page.tsx:37"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4c4c916b81536fcd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/quotes/life/new/page.tsx:59", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/quotes/life/new/page.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-0fbbd4b0960802b5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/quotes/long-term-care/new/page.tsx:96", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/quotes/long-term-care/new/page.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-459b7e820f5e9c69", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/quotes/term/new/page.tsx:59", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/quotes/term/new/page.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-896a04d292a96172", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/quotes/annuity/new/page.tsx:38", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/quotes/annuity/new/page.tsx:38"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-974c933c6f0e9ad8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/quotes/inforce-review/new/page.tsx:98", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/quotes/inforce-review/new/page.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-db5263f6cbc0c369", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/quotes/disability/new/page.tsx:92", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/quotes/disability/new/page.tsx:92"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d6573b08e6490ff5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/quotes/income-focused/new/page.tsx:84", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/quotes/income-focused/new/page.tsx:84"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8f91b01ea67e1ace", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/(public)/signup/tenant/page.tsx:105", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/(public)/signup/tenant/page.tsx:105"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-01bb661c222bf608", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/training/courses/page.tsx:50", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/training/courses/page.tsx:50"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-48a23901e725800b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/training/my-learning/page.tsx:39", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/training/my-learning/page.tsx:39"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea9ffb444800f1c8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 lib/integrations/retry.ts:62", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/integrations/retry.ts:62"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f9b110bad3cc2446", "name": "Commented-code block (5 lines) in lib/integrations/audit.ts:17", "shortDescription": {"text": "Commented-code block (5 lines) in lib/integrations/audit.ts:17"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6d045660253b7f8f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 lib/auth/hooks.ts:32", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/auth/hooks.ts:32"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3c37538349b900f1", "name": "109 env vars used in code but missing from .env.example", "shortDescription": {"text": "109 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `AWS_LAMBDA_FUNCTION_NAME`, `CALENDLY_API_KEY`, `CALENDLY_BASE_URL`, `CALENDLY_ENABLED`, `CALENDLY_RETRY_ATTEMPTS`, `CALENDLY_RETRY_DELAY`, `CALENDLY_TIMEOUT`, `CI` + 101 more. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/20885"}, "properties": {"repository": "tdaniel1925/valor-2", "repoUrl": "https://github.com/tdaniel1925/valor-2", "branch": "main"}, "results": [{"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: tdaniel1925/valor-2"}, "properties": {"repobilityId": 370841, "scanner": "foundry_dataset", "fingerprint": "b619b357aee73de360427543a8cc8841db1592052c9a7491075cc26b00cf99c4", "category": "practices", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback without linked fix evidence", "intent": "Negative/unresolved examples that should not be hallucinated into fixes.", "labels": {"deployment_env_gap": 1, "dependency_or_build": 2, "security_auth_secret": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "human_reported_issue_no_linked_fix": 2, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "unlinked_feedback_needs_evidence", "outcomes": {"not_resolved_or_not_observed": 8}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 24, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 2, "chain_has_link_quality": 4, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 2, "thread_has_comment_chain": 2, "comment_chain_touches_file": 4, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 14, "node_types": {"repo": 1, "thread": 1, "comment": 2, "pr_file": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "tdaniel1925/valor-2#2", "issue_number": "2", "quality_tiers": {"unresolved": 4}, "repo_full_name": "tdaniel1925/valor-2", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-df143542d68ebc50", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"dependency_or_build": 10}}, "text": "Graph query export: Human feedback without linked fix evidence\nQuery id: unresolved_feedback\nQuery type: motif_query\nIntent: Negative/unresolved examples that should not be hallucinated into fixes.\nMotif: unlinked_feedback_needs_evidence\nTraining usage: negative_or_unresolved\nGraph gold label: needs_more_evidence\nRepo: tdaniel1925/valor-2\nThread: tdaniel1925/valor-2#2\nEvidence:\nGraph motif: Human feedback exists without a linked fix\nMotif id: unlinked_feedback_needs_evidence\nPolarity: bad\nTraining usage: negative_or_unresolved\nSeverity: medium\nRepo: tdaniel1925/valor-2\nThread: tdaniel1925/valor-2#2\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: tdaniel1925/valor-2#2\nRepo: tdaniel1925/valor-2\nIssue/PR number: 2\nGraph consistency label: needs_more_evidence\nNodes: 14\nEdges: 24\nNode types: {'link_quality': 4, 'comment': 2, 'pr_file': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_touches_file': 4, 'chain_has_link_quality': 4, 'thread_has_comment': 2, 'thread_touches_file': 2, 'thread_has_comment_chain': 2, 'comment_has_chain': 2, 'issue_chain_has_comment_chain': 2, 'issue_chain_touches_file': 2, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 4, 'dependency_or_build': 2, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'security_auth_secret': 1, 'deployment_env_gap': 1}\nOutcomes: {'not_resolved_or_not_observed': 8}\nQuality tiers: {'unresolved': 4}\nCI labels: {}\nCurriculum targets:\n- Teach models to preserve unresolved human feedback instead of hallucinating fixes.\n- Build issue-to-regression examples where no accepted fix exists yet.\nAssumption checks:\n- Can a commit be linked by issue number, SHA, changed path, or time window?\n- If no link exists, is this explicitly labelled unresolved?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/tdaniel1925/valor-2", "source_id": "graph-query-motif_query-192a38b29c62a8bb", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/unresolved_feedback/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "tdaniel1925/valor-2", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: tdaniel1925/valor-2"}, "properties": {"repobilityId": 370840, "scanner": "foundry_dataset", "fingerprint": "cd21883ef371504519ccf3a6c24d914ed0cd5a88abd2b5acf63a8d8a85a6d38d", "category": "practices", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback without linked fix evidence", "intent": "Negative/unresolved examples that should not be hallucinated into fixes.", "labels": {"deployment_env_gap": 1, "dependency_or_build": 2, "security_auth_secret": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "human_reported_issue_no_linked_fix": 2, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "unlinked_feedback_needs_evidence", "outcomes": {"not_resolved_or_not_observed": 8}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 24, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 2, "chain_has_link_quality": 4, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 2, "thread_has_comment_chain": 2, "comment_chain_touches_file": 4, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 14, "node_types": {"repo": 1, "thread": 1, "comment": 2, "pr_file": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "tdaniel1925/valor-2#1", "issue_number": "1", "quality_tiers": {"unresolved": 4}, "repo_full_name": "tdaniel1925/valor-2", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-66545e3fc215161b", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"dependency_or_build": 10}}, "text": "Graph query export: Human feedback without linked fix evidence\nQuery id: unresolved_feedback\nQuery type: motif_query\nIntent: Negative/unresolved examples that should not be hallucinated into fixes.\nMotif: unlinked_feedback_needs_evidence\nTraining usage: negative_or_unresolved\nGraph gold label: needs_more_evidence\nRepo: tdaniel1925/valor-2\nThread: tdaniel1925/valor-2#1\nEvidence:\nGraph motif: Human feedback exists without a linked fix\nMotif id: unlinked_feedback_needs_evidence\nPolarity: bad\nTraining usage: negative_or_unresolved\nSeverity: medium\nRepo: tdaniel1925/valor-2\nThread: tdaniel1925/valor-2#1\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: tdaniel1925/valor-2#1\nRepo: tdaniel1925/valor-2\nIssue/PR number: 1\nGraph consistency label: needs_more_evidence\nNodes: 14\nEdges: 24\nNode types: {'link_quality': 4, 'comment': 2, 'pr_file': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_touches_file': 4, 'chain_has_link_quality': 4, 'thread_has_comment': 2, 'thread_touches_file': 2, 'thread_has_comment_chain': 2, 'comment_has_chain': 2, 'issue_chain_has_comment_chain': 2, 'issue_chain_touches_file': 2, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 4, 'dependency_or_build': 2, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'security_auth_secret': 1, 'deployment_env_gap': 1}\nOutcomes: {'not_resolved_or_not_observed': 8}\nQuality tiers: {'unresolved': 4}\nCI labels: {}\nCurriculum targets:\n- Teach models to preserve unresolved human feedback instead of hallucinating fixes.\n- Build issue-to-regression examples where no accepted fix exists yet.\nAssumption checks:\n- Can a commit be linked by issue number, SHA, changed path, or time window?\n- If no link exists, is this explicitly labelled unresolved?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/tdaniel1925/valor-2", "source_id": "graph-query-motif_query-c7a761f66fda6697", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/unresolved_feedback/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "tdaniel1925/valor-2", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: tdaniel1925/valor-2"}, "properties": {"repobilityId": 323412, "scanner": "foundry_dataset", "fingerprint": "f0d1595333f41f5063755de2f57ba167b376f878b596eb410b8fe83bfa4a4a51", "category": "practices", "severity": "high", "confidence": 0.84, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "comment_chain_pattern_product", "source": "comment_chain_pattern_miner", "product": "bad_chains", "synthetic": false, "thread_key": "tdaniel1925/valor-2#2", "human_labels": ["dependency_or_build", "deployment_env_gap", "security_auth_secret"], "issue_number": "2", "thread_label": "thread_has_human_issue_without_fix_context", "outcome_label": "not_resolved_or_not_observed", "source_backed": true, "max_confidence": 0.0, "repo_full_name": "tdaniel1925/valor-2", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-fed294c47a5a26c7", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"docs": 4, "schemas": 2, "architecture": 1, "generated_claims": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 2, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"dependency_or_build": 2}, "linked_commit_count": 0, "helicopter_view_count": 4, "source_artifact_count": 8, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_unresolved", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 2, "design_schema_api_artifact_count": 3}, "text": "Comment chain pattern product: bad_chains\nRepo: tdaniel1925/valor-2\nThread: tdaniel1925/valor-2#2\nOutcome: not_resolved_or_not_observed\nThread label: thread_has_human_issue_without_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_unresolved, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: tdaniel1925/valor-2#2\nRepo: tdaniel1925/valor-2\nThread label: thread_has_human_issue_without_fix_context\nOutcome: not_resolved_or_not_observed\nComment count: 2\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 2\nLabels: {'security_auth_secret': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {'dependency_or_build': 2}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-5079f36cd334b280\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"security_auth_secret\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/tdaniel1925/valor-2/pull/2\",\n    \"text\": \"GitHub feedback: security_auth_secret\\nPolarity: bad\\nKind: pull_request_body\\nRepo: tdaniel1925/valor-2\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/tdaniel1925/valor-2/pull/2\\nTitle: Fix React Server Components CVE vulnerabilities\\nBody:\\n> [!IMPORTANT]\\n> This is an automatic PR generated by Vercel to help you with patching efforts. We can't guarantee it's comprehensive, and it may contain mistakes. Please review our [guidance](https://vercel.link/additional-checks) before merging these changes.\\n\\nA critical remote code execution (RCE) vulnerability in React Server Components, impacting frameworks such as Next.js, was identified in the project [valor-2](https://vercel.com/bot-makers/valor-2). The vulnerability enables unauthenticated RCE on the server via insecure deserialization in the React Flight protocol.\\n\\nThis issue is tracked under:\\n\\n- GitHub Security Advisory: [GHSA-9qr9-h5gf-34mp](https://github.com/vercel/next.js/security/advisories/GHSA-9qr9-h5gf-34mp)\\n- React Advisory: [CVE-2025-55182](https://react.dev/blog/2025/12/03/critical-security-vulnerability-in-react-server-components)\\n- Next.js Advisory: [CVE-2025-66478](https://nextjs.org/blog/CVE-2025-66478)\\n\\nThis automated p\"\n  },\n  {\n    \"id\": \"github-feedback-comment-8abcaa274502bc29\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/tdaniel1925/valor-2/pull/2#issuecomment-3658779950\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: tdaniel1925/valor-2\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/tdaniel1925/valor-2/pull/2#issuecomment-3658779950\\nTitle: \\nBody:\\n[vc]: #B6RaXoDVUBzWJ5BCVAD96OvafK8YkrvROBFd4oAbz0E=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJ2YWxvci0yIiwicm9vdERpcmVjdG9yeSI6bnVsbCwiaW5zcGVjdG9yVXJsIjoiaHR0cHM6Ly9\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/tdaniel1925/valor-2", "source_id": "comment-chain-pattern-bad_chains-46406a388288b6c6", "synthetic": false, "gold_label": "", "graph_label": "source_backed_multi_signal_graph", "source_path": "/data/distillate/foundry_data/comment_chain_patterns/bad_chains/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "tdaniel1925/valor-2", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: tdaniel1925/valor-2"}, "properties": {"repobilityId": 323411, "scanner": "foundry_dataset", "fingerprint": "c06b440f98195d6ab36cb233959c17fd5e478498107becbcc4b6bc01f1a15381", "category": "practices", "severity": "high", "confidence": 0.84, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "comment_chain_pattern_product", "source": "comment_chain_pattern_miner", "product": "bad_chains", "synthetic": false, "thread_key": "tdaniel1925/valor-2#1", "human_labels": ["dependency_or_build", "deployment_env_gap", "security_auth_secret"], "issue_number": "1", "thread_label": "thread_has_human_issue_without_fix_context", "outcome_label": "not_resolved_or_not_observed", "source_backed": true, "max_confidence": 0.0, "repo_full_name": "tdaniel1925/valor-2", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-0b8d2f423c68c6fc", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"docs": 4, "schemas": 2, "architecture": 1, "generated_claims": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 2, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"dependency_or_build": 2}, "linked_commit_count": 0, "helicopter_view_count": 4, "source_artifact_count": 8, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_unresolved", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 2, "design_schema_api_artifact_count": 3}, "text": "Comment chain pattern product: bad_chains\nRepo: tdaniel1925/valor-2\nThread: tdaniel1925/valor-2#1\nOutcome: not_resolved_or_not_observed\nThread label: thread_has_human_issue_without_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_unresolved, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: tdaniel1925/valor-2#1\nRepo: tdaniel1925/valor-2\nThread label: thread_has_human_issue_without_fix_context\nOutcome: not_resolved_or_not_observed\nComment count: 2\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 2\nLabels: {'security_auth_secret': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {'dependency_or_build': 2}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-a7ac3a18395cd354\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"security_auth_secret\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/tdaniel1925/valor-2/pull/1\",\n    \"text\": \"GitHub feedback: security_auth_secret\\nPolarity: bad\\nKind: pull_request_body\\nRepo: tdaniel1925/valor-2\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/tdaniel1925/valor-2/pull/1\\nTitle: Fix React Server Components CVE vulnerabilities\\nBody:\\n> [!IMPORTANT]\\n> This is an automatic PR generated by Vercel to help you with patching efforts. We can't guarantee it's comprehensive, and it may contain mistakes. Please review our [guidance](https://vercel.link/additional-checks) before merging these changes.\\n\\nA critical remote code execution (RCE) vulnerability in React Server Components, impacting frameworks such as Next.js, was identified in the project [valor-2](https://vercel.com/bot-makers/valor-2). The vulnerability enables unauthenticated RCE on the server via insecure deserialization in the React Flight protocol.\\n\\nThis issue is tracked under:\\n\\n- GitHub Security Advisory: [GHSA-9qr9-h5gf-34mp](https://github.com/vercel/next.js/security/advisories/GHSA-9qr9-h5gf-34mp)\\n- React Advisory: [CVE-2025-55182](https://react.dev/blog/2025/12/03/critical-security-vulnerability-in-react-server-components)\\n- Next.js Advisory: [CVE-2025-66478](https://nextjs.org/blog/CVE-2025-66478)\\n\\nThis automated p\"\n  },\n  {\n    \"id\": \"github-feedback-comment-5b3bcd5d581a71d6\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/tdaniel1925/valor-2/pull/1#issuecomment-3658779953\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: tdaniel1925/valor-2\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/tdaniel1925/valor-2/pull/1#issuecomment-3658779953\\nTitle: \\nBody:\\n[vc]: #6KzI69eXpzUsHj3PHo4qNFOEnsweb/1yJkSl9dhcgkQ=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJ2YWxvci0yIiwicm9vdERpcmVjdG9yeSI6bnVsbCwiaW5zcGVjdG9yVXJsIjoiaHR0cHM6Ly9\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/tdaniel1925/valor-2", "source_id": "comment-chain-pattern-bad_chains-91309e9ac813eacc", "synthetic": false, "gold_label": "", "graph_label": "source_backed_multi_signal_graph", "source_path": "/data/distillate/foundry_data/comment_chain_patterns/bad_chains/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "tdaniel1925/valor-2", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_auth_guardrail_gap", "level": "error", "message": {"text": "Foundry mined security auth guardrail gaps: tdaniel1925/valor-2"}, "properties": {"repobilityId": 335074, "scanner": "foundry_dataset", "fingerprint": "4db155a1b63d0b52ee667bb6657c490b7715ac53e1c54932741f4d108ad51e74", "category": "auth", "severity": "critical", "confidence": 0.78, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Security/auth changes without enough guardrails", "intent": "Assumption-check security/auth examples requiring stronger tests or CI.", "labels": {"deployment_env_gap": 1, "dependency_or_build": 2, "security_auth_secret": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "human_reported_issue_no_linked_fix": 2, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "security_auth_without_guardrails", "outcomes": {"not_resolved_or_not_observed": 8}, "polarity": "bad", "query_id": "security_auth_guardrail_gaps", "severity": "critical", "ci_labels": {}, "synthetic": false, "edge_count": 24, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 2, "chain_has_link_quality": 4, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 2, "thread_has_comment_chain": 2, "comment_chain_touches_file": 4, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 14, "node_types": {"repo": 1, "thread": 1, "comment": 2, "pr_file": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "tdaniel1925/valor-2#2", "issue_number": "2", "quality_tiers": {"unresolved": 4}, "repo_full_name": "tdaniel1925/valor-2", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-9d9ca3aaa8a120b6", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"dependency_or_build": 10}}, "text": "Graph query export: Security/auth changes without enough guardrails\nQuery id: security_auth_guardrail_gaps\nQuery type: motif_query\nIntent: Assumption-check security/auth examples requiring stronger tests or CI.\nMotif: security_auth_without_guardrails\nTraining usage: assumption_check\nGraph gold label: needs_more_evidence\nRepo: tdaniel1925/valor-2\nThread: tdaniel1925/valor-2#2\nEvidence:\nGraph motif: Security/auth change without enough guardrails\nMotif id: security_auth_without_guardrails\nPolarity: bad\nTraining usage: assumption_check\nSeverity: critical\nRepo: tdaniel1925/valor-2\nThread: tdaniel1925/valor-2#2\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: tdaniel1925/valor-2#2\nRepo: tdaniel1925/valor-2\nIssue/PR number: 2\nGraph consistency label: needs_more_evidence\nNodes: 14\nEdges: 24\nNode types: {'link_quality': 4, 'comment': 2, 'pr_file': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_touches_file': 4, 'chain_has_link_quality': 4, 'thread_has_comment': 2, 'thread_touches_file': 2, 'thread_has_comment_chain': 2, 'comment_has_chain': 2, 'issue_chain_has_comment_chain': 2, 'issue_chain_touches_file': 2, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 4, 'dependency_or_build': 2, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'security_auth_secret': 1, 'deployment_env_gap': 1}\nOutcomes: {'not_resolved_or_not_observed': 8}\nQuality tiers: {'unresolved': 4}\nCI labels: {}\nCurriculum targets:\n- Train auth boundary repair with tests, permission matrices, and secret-handling checks.\n- Keep risky auth changes separate from ordinary bug-fix examples.\nAssumption checks:\n- Are auth/permission paths covered by tests?\n- Are secrets, CORS, or access rules verified rather than summarized?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/tdaniel1925/valor-2", "source_id": "graph-query-motif_query-3858a7622e2781fc", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/security_auth_guardrail_gaps/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "tdaniel1925/valor-2", "source_dataset": "graph_queries/security_auth_guardrail_gaps", "training_usage": "assumption_check"}}}, {"ruleId": "foundry_auth_guardrail_gap", "level": "error", "message": {"text": "Foundry mined security auth guardrail gaps: tdaniel1925/valor-2"}, "properties": {"repobilityId": 335073, "scanner": "foundry_dataset", "fingerprint": "77acb00a9deda23e9fd7dc62ba0a763f7024fbe6d23722c45a462d017fb90837", "category": "auth", "severity": "critical", "confidence": 0.78, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Security/auth changes without enough guardrails", "intent": "Assumption-check security/auth examples requiring stronger tests or CI.", "labels": {"deployment_env_gap": 1, "dependency_or_build": 2, "security_auth_secret": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "human_reported_issue_no_linked_fix": 2, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "security_auth_without_guardrails", "outcomes": {"not_resolved_or_not_observed": 8}, "polarity": "bad", "query_id": "security_auth_guardrail_gaps", "severity": "critical", "ci_labels": {}, "synthetic": false, "edge_count": 24, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 2, "chain_has_link_quality": 4, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 2, "thread_has_comment_chain": 2, "comment_chain_touches_file": 4, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 14, "node_types": {"repo": 1, "thread": 1, "comment": 2, "pr_file": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "tdaniel1925/valor-2#1", "issue_number": "1", "quality_tiers": {"unresolved": 4}, "repo_full_name": "tdaniel1925/valor-2", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-c44a18852897f188", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"dependency_or_build": 10}}, "text": "Graph query export: Security/auth changes without enough guardrails\nQuery id: security_auth_guardrail_gaps\nQuery type: motif_query\nIntent: Assumption-check security/auth examples requiring stronger tests or CI.\nMotif: security_auth_without_guardrails\nTraining usage: assumption_check\nGraph gold label: needs_more_evidence\nRepo: tdaniel1925/valor-2\nThread: tdaniel1925/valor-2#1\nEvidence:\nGraph motif: Security/auth change without enough guardrails\nMotif id: security_auth_without_guardrails\nPolarity: bad\nTraining usage: assumption_check\nSeverity: critical\nRepo: tdaniel1925/valor-2\nThread: tdaniel1925/valor-2#1\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: tdaniel1925/valor-2#1\nRepo: tdaniel1925/valor-2\nIssue/PR number: 1\nGraph consistency label: needs_more_evidence\nNodes: 14\nEdges: 24\nNode types: {'link_quality': 4, 'comment': 2, 'pr_file': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_touches_file': 4, 'chain_has_link_quality': 4, 'thread_has_comment': 2, 'thread_touches_file': 2, 'thread_has_comment_chain': 2, 'comment_has_chain': 2, 'issue_chain_has_comment_chain': 2, 'issue_chain_touches_file': 2, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 4, 'dependency_or_build': 2, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'security_auth_secret': 1, 'deployment_env_gap': 1}\nOutcomes: {'not_resolved_or_not_observed': 8}\nQuality tiers: {'unresolved': 4}\nCI labels: {}\nCurriculum targets:\n- Train auth boundary repair with tests, permission matrices, and secret-handling checks.\n- Keep risky auth changes separate from ordinary bug-fix examples.\nAssumption checks:\n- Are auth/permission paths covered by tests?\n- Are secrets, CORS, or access rules verified rather than summarized?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/tdaniel1925/valor-2", "source_id": "graph-query-motif_query-0e23ab47159458c2", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/security_auth_guardrail_gaps/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "tdaniel1925/valor-2", "source_dataset": "graph_queries/security_auth_guardrail_gaps", "training_usage": "assumption_check"}}}, {"ruleId": "scanner-bead75b0f9233e05", "level": "none", "message": {"text": "No API endpoints detected"}, "properties": {"repobilityId": "0f8bb852027c38f8", "scanner": "scanner-primary", "fingerprint": "bead75b0f9233e05", "layer": "api", "severity": "info", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-42d019510986d61d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 debug-saml.js:9"}, "properties": {"repobilityId": "45b4002c319cb0e7", "scanner": "scanner-primary", "fingerprint": "42d019510986d61d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-06c5c602e3dd7406", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 analyze-smartoffice-data.js:11"}, "properties": {"repobilityId": "19481c6fb2cf4f92", "scanner": "scanner-primary", "fingerprint": "06c5c602e3dd7406", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-87bbd0aa387a6558", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 check-data.js:11"}, "properties": {"repobilityId": "5c5e74814fbd0be0", "scanner": "scanner-primary", "fingerprint": "87bbd0aa387a6558", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-447fc4b8c7621798", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test-db-connection.js:11"}, "properties": {"repobilityId": "9207744e2023bb8a", "scanner": "scanner-primary", "fingerprint": "447fc4b8c7621798", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-37643dee78d49fe3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test-ipipeline.js:13"}, "properties": {"repobilityId": "6611ef3af4315320", "scanner": "scanner-primary", "fingerprint": "37643dee78d49fe3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d46be145124e4457", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 verify-setup.js:7"}, "properties": {"repobilityId": "0e242d1736ef2283", "scanner": "scanner-primary", "fingerprint": "d46be145124e4457", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-61ab315bf4d966f0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/integration/check-smartoffice-data.ts:10"}, "properties": {"repobilityId": "5f65f9ce7e6b8a32", "scanner": "scanner-primary", "fingerprint": "61ab315bf4d966f0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5fd41d28b39991a1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/integration/find-duplicate-agents.ts:9"}, "properties": {"repobilityId": "acd731f50c83f714", "scanner": "scanner-primary", "fingerprint": "5fd41d28b39991a1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b37bc015adb34c18", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/integration/analyze-agents-csv.ts:10"}, "properties": {"repobilityId": "ff782dd9ec27ce51", "scanner": "scanner-primary", "fingerprint": "b37bc015adb34c18", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6b0603de995c7856", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/integration/webhook-quick-test.ts:16"}, "properties": {"repobilityId": "78514aae331ccb8b", "scanner": "scanner-primary", "fingerprint": "6b0603de995c7856", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7c0a5278d12a353b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/integration/verify-stats-source-of-truth.ts:16"}, "properties": {"repobilityId": "9587f7466c300edc", "scanner": "scanner-primary", "fingerprint": "7c0a5278d12a353b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a0111c4903ac1439", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/integration/smartoffice-webhook-flow.test.ts:168"}, "properties": {"repobilityId": "e8c649021258e45e", "scanner": "scanner-primary", "fingerprint": "a0111c4903ac1439", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c26368b5277640cd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/utils/test-database.ts:144"}, "properties": {"repobilityId": "324264c42d2f15eb", "scanner": "scanner-primary", "fingerprint": "c26368b5277640cd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5987c1f5e0427715", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/setup/setup-test-tenants.ts:17"}, "properties": {"repobilityId": "c1ad3cc6088e55c5", "scanner": "scanner-primary", "fingerprint": "5987c1f5e0427715", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d4c416d38b7e6413", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/setup/test-tenants.ts:50"}, "properties": {"repobilityId": "c17c3387c8850ae1", "scanner": "scanner-primary", "fingerprint": "d4c416d38b7e6413", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-511082a7f862f857", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 tests/e2e/cross-tenant-security.spec.ts:450"}, "properties": {"repobilityId": "40d0bd4800d64416", "scanner": "scanner-primary", "fingerprint": "511082a7f862f857", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-0de6a0eb47913032", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/cross-tenant-security.spec.ts:101"}, "properties": {"repobilityId": "d1c13e1e6f508d20", "scanner": "scanner-primary", "fingerprint": "0de6a0eb47913032", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-faac3dfff6810667", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/complete-app-flow.spec.ts:245"}, "properties": {"repobilityId": "98a7a32e0935d812", "scanner": "scanner-primary", "fingerprint": "faac3dfff6810667", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f2a04bbffbe5dad6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/smartoffice-features.spec.ts:1346"}, "properties": {"repobilityId": "d32aea675bb640dc", "scanner": "scanner-primary", "fingerprint": "f2a04bbffbe5dad6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-47827187dafed8b2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/smartoffice-complete-flow.spec.ts:369"}, "properties": {"repobilityId": "7dd99dad29075c07", "scanner": "scanner-primary", "fingerprint": "47827187dafed8b2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-395ed7f443b7001e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/debug-rls.ts:10"}, "properties": {"repobilityId": "d92ff6a49df43e36", "scanner": "scanner-primary", "fingerprint": "395ed7f443b7001e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bf52ba60f8aa2a02", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/reassign-commissions.ts:49"}, "properties": {"repobilityId": "acb9cd2dc4e5994e", "scanner": "scanner-primary", "fingerprint": "bf52ba60f8aa2a02", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-90476a248ad9002d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/create-trent-admin.ts:22"}, "properties": {"repobilityId": "6dc95ca20f2c2713", "scanner": "scanner-primary", "fingerprint": "90476a248ad9002d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-de102736904029f5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/analyze-cases-excel2.ts:6"}, "properties": {"repobilityId": "0bbfdb7434361bb6", "scanner": "scanner-primary", "fingerprint": "de102736904029f5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-011eb328ac3c9848", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/simple-3mark-browser.ts:22"}, "properties": {"repobilityId": "f593ec2ccff76e13", "scanner": "scanner-primary", "fingerprint": "011eb328ac3c9848", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-99dd7858fa575e2b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/compare-excel-policies.ts:11"}, "properties": {"repobilityId": "868262dcc466788a", "scanner": "scanner-primary", "fingerprint": "99dd7858fa575e2b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-edde4b77591d2690", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-inbound-emails.ts:7"}, "properties": {"repobilityId": "e5a224dffe88b131", "scanner": "scanner-primary", "fingerprint": "edde4b77591d2690", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-56124e653b8fd973", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/inspect-smartoffice-excel.js:18"}, "properties": {"repobilityId": "97ef0b2d8454dd53", "scanner": "scanner-primary", "fingerprint": "56124e653b8fd973", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ccd91a079732d9cf", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-email-imports.ts:6"}, "properties": {"repobilityId": "115fe39a978f5a0b", "scanner": "scanner-primary", "fingerprint": "ccd91a079732d9cf", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e6992a97bacfcab9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/download-libraip-pdfs.ts:24"}, "properties": {"repobilityId": "c1aacedcfc65f595", "scanner": "scanner-primary", "fingerprint": "e6992a97bacfcab9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-811c7f79461e316c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/find-user.ts:25"}, "properties": {"repobilityId": "58d7b28f764c23f7", "scanner": "scanner-primary", "fingerprint": "811c7f79461e316c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-314fd8fc5bcd490c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import-smartoffice-contracts.ts:76"}, "properties": {"repobilityId": "530a210a36500d9e", "scanner": "scanner-primary", "fingerprint": "314fd8fc5bcd490c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cfd126baa18c5a55", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/manual-3mark-navigation.ts:18"}, "properties": {"repobilityId": "d513767c897ee001", "scanner": "scanner-primary", "fingerprint": "cfd126baa18c5a55", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b218408cb1b84c54", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-premium-totals.ts:20"}, "properties": {"repobilityId": "e635787e9875ab3e", "scanner": "scanner-primary", "fingerprint": "b218408cb1b84c54", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d5f3333b4ec17910", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/find-buchholz.ts:15"}, "properties": {"repobilityId": "f75c3bf81409c8e3", "scanner": "scanner-primary", "fingerprint": "d5f3333b4ec17910", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-544a5cf5992f6ba6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-smartoffice-data.ts:4"}, "properties": {"repobilityId": "d4a44885646103d3", "scanner": "scanner-primary", "fingerprint": "544a5cf5992f6ba6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cbb56315e9647937", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-status-migration.ts:17"}, "properties": {"repobilityId": "b57717dc627be409", "scanner": "scanner-primary", "fingerprint": "cbb56315e9647937", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3a3720b522e91085", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/analyze-skipped-records.ts:20"}, "properties": {"repobilityId": "7f50e742e8f28233", "scanner": "scanner-primary", "fingerprint": "3a3720b522e91085", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-110858415dbb6d34", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/confirm-test-users.ts:14"}, "properties": {"repobilityId": "d2abbcf8c4921c7b", "scanner": "scanner-primary", "fingerprint": "110858415dbb6d34", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-456b15d94215001e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/find-exact-duplicates.ts:17"}, "properties": {"repobilityId": "12334c6aa9c4978a", "scanner": "scanner-primary", "fingerprint": "456b15d94215001e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ce2d2c93ffa2e69f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verify-production-rls.ts:17"}, "properties": {"repobilityId": "cdeef65274203519", "scanner": "scanner-primary", "fingerprint": "ce2d2c93ffa2e69f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4a21509ff4d2b32a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/firelight-watcher-vps.js:20"}, "properties": {"repobilityId": "51b5d33a6089753d", "scanner": "scanner-primary", "fingerprint": "4a21509ff4d2b32a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a37694b090bd7701", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-user-tenant.ts:20"}, "properties": {"repobilityId": "0269aed048c4d454", "scanner": "scanner-primary", "fingerprint": "a37694b090bd7701", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e8b828241dd32145", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/quick-agent-count.ts:8"}, "properties": {"repobilityId": "3cf93989f8d2860b", "scanner": "scanner-primary", "fingerprint": "e8b828241dd32145", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-35dd63a973c98aa9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/list-db-policies.ts:22"}, "properties": {"repobilityId": "5369543253f2ed55", "scanner": "scanner-primary", "fingerprint": "35dd63a973c98aa9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c4fa6e9aa72454fd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/find-trent.ts:18"}, "properties": {"repobilityId": "5a26e3b08fa3b7fb", "scanner": "scanner-primary", "fingerprint": "c4fa6e9aa72454fd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-084491ee0fd12cd7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/set-super-admin.ts:10"}, "properties": {"repobilityId": "aea8b75149df6da5", "scanner": "scanner-primary", "fingerprint": "084491ee0fd12cd7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9251beab9faea6c9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-admin-users.ts:26"}, "properties": {"repobilityId": "6c03d8571d14636e", "scanner": "scanner-primary", "fingerprint": "9251beab9faea6c9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b792bc610f60c7fb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/sync-smartoffice-to-cases.ts:156"}, "properties": {"repobilityId": "9c0606fdf07e1a8f", "scanner": "scanner-primary", "fingerprint": "b792bc610f60c7fb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-794a23f61f35aabc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/download-3mark-pdfs.ts:38"}, "properties": {"repobilityId": "259b1739b297360f", "scanner": "scanner-primary", "fingerprint": "794a23f61f35aabc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cc899755df5df863", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-policy-duplicates.ts:11"}, "properties": {"repobilityId": "ec7131a7ec57d758", "scanner": "scanner-primary", "fingerprint": "cc899755df5df863", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1c7a7528e03133ba", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/simple-commission-import.ts:21"}, "properties": {"repobilityId": "771ffa9abe3d2344", "scanner": "scanner-primary", "fingerprint": "1c7a7528e03133ba", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2c0faabb75a3b819", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/debug-excel-parsing.ts:20"}, "properties": {"repobilityId": "2dc7da2ce120ab73", "scanner": "scanner-primary", "fingerprint": "2c0faabb75a3b819", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b274f6e7a460b011", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/firelight-watcher.ts:49"}, "properties": {"repobilityId": "d62ff10b75e4c74e", "scanner": "scanner-primary", "fingerprint": "b274f6e7a460b011", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6e1dda76860bf3aa", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/cleanup-seed-data.ts:9"}, "properties": {"repobilityId": "daa0da953988795e", "scanner": "scanner-primary", "fingerprint": "6e1dda76860bf3aa", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-015a8049f0ce8dd6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/assign-to-phil.ts:34"}, "properties": {"repobilityId": "33cc92b9971d3b20", "scanner": "scanner-primary", "fingerprint": "015a8049f0ce8dd6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-74909093e204607b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-smartoffice-policies.ts:14"}, "properties": {"repobilityId": "7d0c2e9707e8ad20", "scanner": "scanner-primary", "fingerprint": "74909093e204607b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4f8307b20c7d435c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/inspect-3mark-page.ts:20"}, "properties": {"repobilityId": "64db85ecc5cd2071", "scanner": "scanner-primary", "fingerprint": "4f8307b20c7d435c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-51652e1cad587a83", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/show-tenant-emails.ts:15"}, "properties": {"repobilityId": "17a3f362c13d725e", "scanner": "scanner-primary", "fingerprint": "51652e1cad587a83", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1a6f534c3f6955c2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-rls-policies.ts:15"}, "properties": {"repobilityId": "d94152ab2c9cd9e0", "scanner": "scanner-primary", "fingerprint": "1a6f534c3f6955c2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c8c1884cd6c010d8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-commission-years.ts:31"}, "properties": {"repobilityId": "cdd575a1bd12e8be", "scanner": "scanner-primary", "fingerprint": "c8c1884cd6c010d8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4e48e82e66ad990e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/sync-smartoffice-to-contracts.ts:74"}, "properties": {"repobilityId": "5fdd2ae81d5efef5", "scanner": "scanner-primary", "fingerprint": "4e48e82e66ad990e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b58cffcc70c88872", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/find-duplicates.ts:45"}, "properties": {"repobilityId": "d70b0a62dcd9f958", "scanner": "scanner-primary", "fingerprint": "b58cffcc70c88872", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2276fffef03d3198", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-tenant.ts:12"}, "properties": {"repobilityId": "1559570b1f510c51", "scanner": "scanner-primary", "fingerprint": "2276fffef03d3198", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-425b56f2a1593c16", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/move-tdaniel-to-valor.ts:9"}, "properties": {"repobilityId": "95b624434eb1985c", "scanner": "scanner-primary", "fingerprint": "425b56f2a1593c16", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cf7e28805ee5fa25", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-login.ts:9"}, "properties": {"repobilityId": "31d97dce8da270f9", "scanner": "scanner-primary", "fingerprint": "cf7e28805ee5fa25", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3a157ae5add4d9bc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/manual-reimport.ts:12"}, "properties": {"repobilityId": "a49b6339aa684a8d", "scanner": "scanner-primary", "fingerprint": "3a157ae5add4d9bc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b25cc6d9f1115630", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import-smartoffice-commissions.ts:87"}, "properties": {"repobilityId": "aceab67b406b5d5e", "scanner": "scanner-primary", "fingerprint": "b25cc6d9f1115630", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-71d5dab1ed0faac1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-missing-columns.ts:9"}, "properties": {"repobilityId": "8a86db58114cb4df", "scanner": "scanner-primary", "fingerprint": "71d5dab1ed0faac1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8066501375a12104", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/run-migration.ts:16"}, "properties": {"repobilityId": "f55dcd7ae950aa5e", "scanner": "scanner-primary", "fingerprint": "8066501375a12104", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f450afe6daa26ede", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/cleanup-duplicate-agents.ts:11"}, "properties": {"repobilityId": "033dc8cbbfb43e21", "scanner": "scanner-primary", "fingerprint": "f450afe6daa26ede", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-431c0edd534c6d1e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-commissions.ts:39"}, "properties": {"repobilityId": "3e498fcdf19bb98e", "scanner": "scanner-primary", "fingerprint": "431c0edd534c6d1e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-90a709e2640cb9d9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/inspect-agent-data.ts:10"}, "properties": {"repobilityId": "0beb7a01ecc963c1", "scanner": "scanner-primary", "fingerprint": "90a709e2640cb9d9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-69165708eb6444f5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import-cases-from-excel.ts:31"}, "properties": {"repobilityId": "f0314736844c5230", "scanner": "scanner-primary", "fingerprint": "69165708eb6444f5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8e507687b0dde701", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-add-columns.ts:16"}, "properties": {"repobilityId": "10b89ef8fa017fa8", "scanner": "scanner-primary", "fingerprint": "8e507687b0dde701", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-94cdc2333bf00f6d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-contract-parsing.ts:13"}, "properties": {"repobilityId": "c36ef0898e647fae", "scanner": "scanner-primary", "fingerprint": "94cdc2333bf00f6d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a0a0b29dd35e40e2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-rls-policies.ts:10"}, "properties": {"repobilityId": "77c28b7c693569dc", "scanner": "scanner-primary", "fingerprint": "a0a0b29dd35e40e2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9bf6f0a4096baaeb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/remove-bypassrls.ts:10"}, "properties": {"repobilityId": "e7e628457b4a3537", "scanner": "scanner-primary", "fingerprint": "9bf6f0a4096baaeb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bb18a01e2b78ee8f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-sso-tables.ts:15"}, "properties": {"repobilityId": "2380bc31af53588b", "scanner": "scanner-primary", "fingerprint": "bb18a01e2b78ee8f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c6d3a7abf3c29009", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/examine-excel-structure.ts:11"}, "properties": {"repobilityId": "dc6044bbbfa3c745", "scanner": "scanner-primary", "fingerprint": "c6d3a7abf3c29009", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2ff8954b7bca2311", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-connection.ts:12"}, "properties": {"repobilityId": "5cb735984d56eb4b", "scanner": "scanner-primary", "fingerprint": "2ff8954b7bca2311", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ac7c38c5a490867c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-recent-syncs.ts:6"}, "properties": {"repobilityId": "e9b130a4bde3b079", "scanner": "scanner-primary", "fingerprint": "ac7c38c5a490867c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-07e868285ebeac0a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-catalog-data.js:15"}, "properties": {"repobilityId": "00d91d13e979f6dd", "scanner": "scanner-primary", "fingerprint": "07e868285ebeac0a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4b5b6e169a63ebbf", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import-commissions-data.ts:10"}, "properties": {"repobilityId": "f4e5772b87c4b2f9", "scanner": "scanner-primary", "fingerprint": "4b5b6e169a63ebbf", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ec5efaad15ab3283", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-tenant-isolation.ts:26"}, "properties": {"repobilityId": "9f47e24d6d7c188e", "scanner": "scanner-primary", "fingerprint": "ec5efaad15ab3283", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a00c7abda384ffc4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-excel-headers.ts:15"}, "properties": {"repobilityId": "b7095d860ae02b7d", "scanner": "scanner-primary", "fingerprint": "a00c7abda384ffc4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-55e3833aa9aa52cf", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/record-and-download-pdfs.ts:34"}, "properties": {"repobilityId": "f17c74295fcf9c5f", "scanner": "scanner-primary", "fingerprint": "55e3833aa9aa52cf", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-dfb49539b509200a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/setup-admin-access.ts:22"}, "properties": {"repobilityId": "e21ced02f0a4ac23", "scanner": "scanner-primary", "fingerprint": "dfb49539b509200a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c1149db18c9f5f27", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-case-tenants.ts:14"}, "properties": {"repobilityId": "d14fcfdd7a282d45", "scanner": "scanner-primary", "fingerprint": "c1149db18c9f5f27", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b7bff5e2b899aa73", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/run-sso-migration.ts:9"}, "properties": {"repobilityId": "e53efd4056eb71f2", "scanner": "scanner-primary", "fingerprint": "b7bff5e2b899aa73", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5955c7eb9eaefb39", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-smartoffice-parser.ts:11"}, "properties": {"repobilityId": "ed46691e4e7ec2bf", "scanner": "scanner-primary", "fingerprint": "5955c7eb9eaefb39", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-541feeb2a601322a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-bypassrls.ts:16"}, "properties": {"repobilityId": "71ddabb3cace0cd8", "scanner": "scanner-primary", "fingerprint": "541feeb2a601322a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3553e552e65ecfe8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/force-rls.ts:29"}, "properties": {"repobilityId": "b83e2f13a5dec590", "scanner": "scanner-primary", "fingerprint": "3553e552e65ecfe8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-641235c508a983b7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/create-test-tenants-via-api.ts:27"}, "properties": {"repobilityId": "ddc4a4023f08354e", "scanner": "scanner-primary", "fingerprint": "641235c508a983b7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d2a4e759756a847f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/export-intellisheets-json.ts:45"}, "properties": {"repobilityId": "457d9ced4cc3d52f", "scanner": "scanner-primary", "fingerprint": "d2a4e759756a847f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a98686feee24be2b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-dashboard-data.ts:7"}, "properties": {"repobilityId": "d6b0ddfc56c2db87", "scanner": "scanner-primary", "fingerprint": "a98686feee24be2b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-305a3730e67662b8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/create-test-user.ts:33"}, "properties": {"repobilityId": "6132da1f26bd9e89", "scanner": "scanner-primary", "fingerprint": "305a3730e67662b8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-160b47bfdacffe3e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-test-tenants.ts:18"}, "properties": {"repobilityId": "cd32361e46b0a286", "scanner": "scanner-primary", "fingerprint": "160b47bfdacffe3e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bc0a3da4b7370d75", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/rename-catalog-pdfs.js:15"}, "properties": {"repobilityId": "563c4ba7a6879f54", "scanner": "scanner-primary", "fingerprint": "bc0a3da4b7370d75", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ffc38c781dddae89", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/create-oauth-client.ts:50"}, "properties": {"repobilityId": "844fba4bcbb45456", "scanner": "scanner-primary", "fingerprint": "ffc38c781dddae89", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c1464fa8c7a566b0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-remaining-duplicates.ts:6"}, "properties": {"repobilityId": "bcb23db79fbee364", "scanner": "scanner-primary", "fingerprint": "c1464fa8c7a566b0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7ddb88ebe0ae52b3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/read-intellisheets.ts:10"}, "properties": {"repobilityId": "dbcb6ee0beda889a", "scanner": "scanner-primary", "fingerprint": "7ddb88ebe0ae52b3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f4d1b8db5f7cf073", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-specific-policy.ts:21"}, "properties": {"repobilityId": "e0c8be2a351c7849", "scanner": "scanner-primary", "fingerprint": "f4d1b8db5f7cf073", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1e7e05f96b036086", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-statuses-in-file.ts:17"}, "properties": {"repobilityId": "d48976f128204393", "scanner": "scanner-primary", "fingerprint": "1e7e05f96b036086", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a2b9907b3899d797", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/investigate-sync-issue.ts:11"}, "properties": {"repobilityId": "299a47caa10b979e", "scanner": "scanner-primary", "fingerprint": "a2b9907b3899d797", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-756157280bc9db5c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-env.ts:74"}, "properties": {"repobilityId": "3911d610672d429f", "scanner": "scanner-primary", "fingerprint": "756157280bc9db5c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-321668e0e4b40c09", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-winflex-sso.ts:19"}, "properties": {"repobilityId": "4d35a2e082874402", "scanner": "scanner-primary", "fingerprint": "321668e0e4b40c09", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8ff6b7b26e94a0fa", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/analyze-cases-excel.ts:7"}, "properties": {"repobilityId": "5b1efdf3790e465d", "scanner": "scanner-primary", "fingerprint": "8ff6b7b26e94a0fa", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-390cf824f79c1532", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-rls-policies.ts:29"}, "properties": {"repobilityId": "1c6a453e62624352", "scanner": "scanner-primary", "fingerprint": "390cf824f79c1532", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f333fe9139d6bcb9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/experimental-contract-parser.ts:159"}, "properties": {"repobilityId": "9743ab95ecc56f7f", "scanner": "scanner-primary", "fingerprint": "f333fe9139d6bcb9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a8459d7c17a4dcb2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/set-admin-sql.ts:8"}, "properties": {"repobilityId": "c9e3fb201a8890ff", "scanner": "scanner-primary", "fingerprint": "a8459d7c17a4dcb2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6e1f8d33b1dfb871", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-parser.js:15"}, "properties": {"repobilityId": "3278638a63522b0b", "scanner": "scanner-primary", "fingerprint": "6e1f8d33b1dfb871", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4ef2ece2ae80b420", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/auto-import-smartoffice.ts:23"}, "properties": {"repobilityId": "823042f6564c013e", "scanner": "scanner-primary", "fingerprint": "4ef2ece2ae80b420", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7cd8c0bc0ef8dddd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 prisma/seed.ts:10"}, "properties": {"repobilityId": "f77d7e0fb34b08e2", "scanner": "scanner-primary", "fingerprint": "7cd8c0bc0ef8dddd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5a23dbfe49eb15eb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 prisma/seed-help.ts:6"}, "properties": {"repobilityId": "7ff2e2de8a855457", "scanner": "scanner-primary", "fingerprint": "5a23dbfe49eb15eb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-721066ffb45b55ed", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/layout/NotificationCenter.tsx:155"}, "properties": {"repobilityId": "d86aa5d637611151", "scanner": "scanner-primary", "fingerprint": "721066ffb45b55ed", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0ec338169e1252e5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/layout/OrganizationSwitcher.tsx:75"}, "properties": {"repobilityId": "9052eef0ec4679d5", "scanner": "scanner-primary", "fingerprint": "0ec338169e1252e5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-26465be227f812d4", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 components/layout/OrganizationSwitcher.tsx:29"}, "properties": {"repobilityId": "88f4461f239349d5", "scanner": "scanner-primary", "fingerprint": "26465be227f812d4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-f3732e0149194857", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 components/help/MarkdownContent.tsx:67"}, "properties": {"repobilityId": "f6c3a1107ab81696", "scanner": "scanner-primary", "fingerprint": "f3732e0149194857", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-060afbda90d66c93", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 components/auth/RoleGuard.tsx:80"}, "properties": {"repobilityId": "0cd4e22df58be948", "scanner": "scanner-primary", "fingerprint": "060afbda90d66c93", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-25ca3dbb8fc8bee9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/dashboard/DashboardWidget.tsx:137"}, "properties": {"repobilityId": "f7e220e58e5af70f", "scanner": "scanner-primary", "fingerprint": "25ca3dbb8fc8bee9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-214131a61b74d27e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/dashboard/NewAgentsWidget.tsx:119"}, "properties": {"repobilityId": "aa6a2941ac83bf98", "scanner": "scanner-primary", "fingerprint": "214131a61b74d27e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bca56b194cfb1ddc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/organizations/OrganizationTree.tsx:121"}, "properties": {"repobilityId": "7bbbfdcf97bf0461", "scanner": "scanner-primary", "fingerprint": "bca56b194cfb1ddc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c50f33988b1b7b13", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 components/contracts/ContractRequestForm.tsx:67"}, "properties": {"repobilityId": "48991832a55997d0", "scanner": "scanner-primary", "fingerprint": "c50f33988b1b7b13", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-04aee2dd533d42bb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/cases/page.tsx:383"}, "properties": {"repobilityId": "9fc42d34822e6865", "scanner": "scanner-primary", "fingerprint": "04aee2dd533d42bb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7890387e879dead6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/intellisheets/page.tsx:349"}, "properties": {"repobilityId": "2337f51b42cae374", "scanner": "scanner-primary", "fingerprint": "7890387e879dead6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2b718f3523c3248c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/notifications/route.ts:21"}, "properties": {"repobilityId": "eba3405c1dd3058b", "scanner": "scanner-primary", "fingerprint": "2b718f3523c3248c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e4bd17ea25aef9a7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/inbound/smartoffice/route.ts:99"}, "properties": {"repobilityId": "cf965ef958b14cc8", "scanner": "scanner-primary", "fingerprint": "e4bd17ea25aef9a7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-810adf2e65f7552d", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 app/api/reports/forecast/route.ts:163"}, "properties": {"repobilityId": "4d18755a9a933a3d", "scanner": "scanner-primary", "fingerprint": "810adf2e65f7552d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-413ddc31ff3017f7", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 app/api/reports/goal-tracking/route.ts:143"}, "properties": {"repobilityId": "27de4a838be2e2e0", "scanner": "scanner-primary", "fingerprint": "413ddc31ff3017f7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-a68fee2b0985558d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/smartoffice/webhook/route.ts:91"}, "properties": {"repobilityId": "bc714d6984b47376", "scanner": "scanner-primary", "fingerprint": "a68fee2b0985558d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-60b12a4c4c89b380", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/smartoffice/import/route.ts:59"}, "properties": {"repobilityId": "2c6a1f8338f19b29", "scanner": "scanner-primary", "fingerprint": "60b12a4c4c89b380", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b80092ab29138db1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/video-library/videos/sync/route.ts:77"}, "properties": {"repobilityId": "50ab54f015557da4", "scanner": "scanner-primary", "fingerprint": "b80092ab29138db1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0bd6f8fd2e3437b2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/webhooks/[source]/route.ts:18"}, "properties": {"repobilityId": "3e2a0e5536520954", "scanner": "scanner-primary", "fingerprint": "0bd6f8fd2e3437b2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-95857b108326b70c", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 app/api/quotes/life/route.ts:88"}, "properties": {"repobilityId": "26af107488482792", "scanner": "scanner-primary", "fingerprint": "95857b108326b70c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-ec268f9849000914", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 app/api/training/courses/route.ts:69"}, "properties": {"repobilityId": "73cbe79bbdb57a8e", "scanner": "scanner-primary", "fingerprint": "ec268f9849000914", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-c991f639930bd8ee", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/learning/[courseId]/page.tsx:124"}, "properties": {"repobilityId": "e6fd148650c5c5b7", "scanner": "scanner-primary", "fingerprint": "c991f639930bd8ee", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-eb7c57444c4db4cf", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/commissions/page.tsx:427"}, "properties": {"repobilityId": "064c3f6302211f98", "scanner": "scanner-primary", "fingerprint": "eb7c57444c4db4cf", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ed9ab1b3232fdf2c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/dashboard/page.tsx:81"}, "properties": {"repobilityId": "236c4ac135ad8cc2", "scanner": "scanner-primary", "fingerprint": "ed9ab1b3232fdf2c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7ced2d21d92f4754", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/community/page.tsx:238"}, "properties": {"repobilityId": "e0d8b8b1e6965d20", "scanner": "scanner-primary", "fingerprint": "7ced2d21d92f4754", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9002675b34838a8a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/integrations/page.tsx:262"}, "properties": {"repobilityId": "561cdd739bd29557", "scanner": "scanner-primary", "fingerprint": "9002675b34838a8a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-03b64ccb6e5c20c7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/learning/page.tsx:180"}, "properties": {"repobilityId": "3fb82e2b51d8c200", "scanner": "scanner-primary", "fingerprint": "03b64ccb6e5c20c7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-33643ad17cfcd828", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/learning/[courseId]/page.tsx:284"}, "properties": {"repobilityId": "94f214c594c57b42", "scanner": "scanner-primary", "fingerprint": "33643ad17cfcd828", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ac002a82a813ca26", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 app/profile/page.tsx:296"}, "properties": {"repobilityId": "e584b88918f0bd90", "scanner": "scanner-primary", "fingerprint": "ac002a82a813ca26", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-d2ae05ecbd2a61a3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/reports/builder/page.tsx:120"}, "properties": {"repobilityId": "0bbe7735d043b475", "scanner": "scanner-primary", "fingerprint": "d2ae05ecbd2a61a3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-75a2daafaddd49ed", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 lib/integrations/audit.ts:24"}, "properties": {"repobilityId": "3645f965ddf9f5ba", "scanner": "scanner-primary", "fingerprint": "75a2daafaddd49ed", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ef87f41b5adf7353", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 lib/integrations/webhook-handler.ts:101"}, "properties": {"repobilityId": "cb1b3d38914c3d32", "scanner": "scanner-primary", "fingerprint": "ef87f41b5adf7353", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-44ec0f74f5c6cbd0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 lib/integrations/resend/client.ts:41"}, "properties": {"repobilityId": "18eab26193acfcde", "scanner": "scanner-primary", "fingerprint": "44ec0f74f5c6cbd0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-99fe0c14b3db502a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 lib/integrations/ratewatch/client.ts:40"}, "properties": {"repobilityId": "6ae6ed8f173cfb06", "scanner": "scanner-primary", "fingerprint": "99fe0c14b3db502a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2f19bbc0d85bc728", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 lib/integrations/ipipeline/client.ts:37"}, "properties": {"repobilityId": "9135463185b9672c", "scanner": "scanner-primary", "fingerprint": "2f19bbc0d85bc728", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9c618293cf274bee", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 lib/integrations/vapi/client.ts:53"}, "properties": {"repobilityId": "37498e1cb828b31b", "scanner": "scanner-primary", "fingerprint": "9c618293cf274bee", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f646af6027516c98", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 lib/email/resend-client.ts:87"}, "properties": {"repobilityId": "17c5fedc1270d9b1", "scanner": "scanner-primary", "fingerprint": "f646af6027516c98", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-37fdb5b3a4b6ce35", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 lib/auth/get-tenant-context.ts:58"}, "properties": {"repobilityId": "fb2249b4517e9135", "scanner": "scanner-primary", "fingerprint": "37fdb5b3a4b6ce35", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-43303ce200118815", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 lib/auth/hooks.ts:54"}, "properties": {"repobilityId": "86635776806abe2d", "scanner": "scanner-primary", "fingerprint": "43303ce200118815", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-263be047bbcae837", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 lib/storage/smartoffice-storage.ts:74"}, "properties": {"repobilityId": "a7a840959cf9e46c", "scanner": "scanner-primary", "fingerprint": "263be047bbcae837", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-11bce7051353040e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 lib/storage/setup-bucket.ts:28"}, "properties": {"repobilityId": "7a0cba97fa329128", "scanner": "scanner-primary", "fingerprint": "11bce7051353040e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1d7af59d54a7e3c8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 lib/storage/setup-smartoffice-bucket.ts:31"}, "properties": {"repobilityId": "8dd7d980d6b49657", "scanner": "scanner-primary", "fingerprint": "1d7af59d54a7e3c8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fbdd59b877655c57", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in test-ipipeline.js:76"}, "properties": {"repobilityId": "670d8889e5147d1a", "scanner": "scanner-primary", "fingerprint": "fbdd59b877655c57", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "test-ipipeline.js"}, "region": {"startLine": 76}}}]}, {"ruleId": "scanner-5c711c8057e4500b", "level": "note", "message": {"text": "Insecure pattern 'document_write' in downloads/3mark-page.html:1757"}, "properties": {"repobilityId": "d193b31f342213bd", "scanner": "scanner-primary", "fingerprint": "5c711c8057e4500b", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "document_write"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "downloads/3mark-page.html"}, "region": {"startLine": 1757}}}]}, {"ruleId": "scanner-e416c0eef70ca097", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in downloads/3mark-page.html:1509"}, "properties": {"repobilityId": "b5722b782c52490e", "scanner": "scanner-primary", "fingerprint": "e416c0eef70ca097", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "downloads/3mark-page.html"}, "region": {"startLine": 1509}}}]}, {"ruleId": "scanner-6c07ed80c01fd80c", "level": "error", "message": {"text": "Possible secret in scripts/create-test-user.ts"}, "properties": {"repobilityId": "b16e6d446769d277", "scanner": "scanner-primary", "fingerprint": "6c07ed80c01fd80c", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/create-test-user.ts"}, "region": {"startLine": 18}}}]}, {"ruleId": "scanner-3fab358be55a3d58", "level": "error", "message": {"text": "Possible secret in scripts/lms-smoke-test.mjs"}, "properties": {"repobilityId": "3a981bf8824fb802", "scanner": "scanner-primary", "fingerprint": "3fab358be55a3d58", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/lms-smoke-test.mjs"}, "region": {"startLine": 18}}}]}, {"ruleId": "scanner-3fab358be55a3d58", "level": "error", "message": {"text": "Possible secret in scripts/lms-smoke-test.mjs"}, "properties": {"repobilityId": "3a981bf8824fb802", "scanner": "scanner-primary", "fingerprint": "3fab358be55a3d58", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/lms-smoke-test.mjs"}, "region": {"startLine": 19}}}]}, {"ruleId": "scanner-3fab358be55a3d58", "level": "error", "message": {"text": "Possible secret in scripts/lms-smoke-test.mjs"}, "properties": {"repobilityId": "3a981bf8824fb802", "scanner": "scanner-primary", "fingerprint": "3fab358be55a3d58", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/lms-smoke-test.mjs"}, "region": {"startLine": 292}}}]}, {"ruleId": "scanner-b7ad2404e3659a00", "level": "note", "message": {"text": "Insecure pattern 'document_write' in components/integrations/IPipelineLauncher.tsx:147"}, "properties": {"repobilityId": "b56ae7666c082148", "scanner": "scanner-primary", "fingerprint": "b7ad2404e3659a00", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "document_write"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "components/integrations/IPipelineLauncher.tsx"}, "region": {"startLine": 147}}}]}, {"ruleId": "scanner-cfa83681d2ba1245", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in components/help/MarkdownContent.tsx:67"}, "properties": {"repobilityId": "0d75f3488ad4f395", "scanner": "scanner-primary", "fingerprint": "cfa83681d2ba1245", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "components/help/MarkdownContent.tsx"}, "region": {"startLine": 67}}}]}, {"ruleId": "scanner-8e2793f72f9d275a", "level": "error", "message": {"text": "Insecure pattern 'eval_used' in app/api/smartoffice/chat/route.ts:226"}, "properties": {"repobilityId": "9aaafd305b71514b", "scanner": "scanner-primary", "fingerprint": "8e2793f72f9d275a", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "eval_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/api/smartoffice/chat/route.ts"}, "region": {"startLine": 226}}}]}, {"ruleId": "scanner-cb639d9a10a47b23", "level": "note", "message": {"text": "package.json defines install-time lifecycle scripts"}, "properties": {"repobilityId": "edeab51902066991", "scanner": "scanner-primary", "fingerprint": "cb639d9a10a47b23", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "npm", "install-scripts"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4601e3ad3bb28677", "level": "warning", "message": {"text": "No CI/CD pipelines detected"}, "properties": {"repobilityId": "c3ee439bce2bc51e", "scanner": "scanner-primary", "fingerprint": "4601e3ad3bb28677", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-f8eacf47416ae55d", "level": "note", "message": {"text": "Very large file: tests/e2e/smartoffice-features.spec.ts (1518 lines)"}, "properties": {"repobilityId": "7713a2056054eb63", "scanner": "scanner-primary", "fingerprint": "f8eacf47416ae55d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-092a881cdafc4d3c", "level": "note", "message": {"text": "Very large file: components/layout/AppLayout.tsx (1469 lines)"}, "properties": {"repobilityId": "58d0cd8ff0e744b7", "scanner": "scanner-primary", "fingerprint": "092a881cdafc4d3c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ea3b5e389d8c9c0f", "level": "note", "message": {"text": "Low test-to-source ratio"}, "properties": {"repobilityId": "ef7b2552cc00a375", "scanner": "scanner-primary", "fingerprint": "ea3b5e389d8c9c0f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["tests"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "ffb70d83118c4aa9", "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": "b272906a2059624b", "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": "0246c4946d77ae46", "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": "988837976aa775ce", "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": "8b70041d62ae9d41", "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": "64656761429af662", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "cb42653490f85999", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "1651e7f9855e0409", "scanner": "scanner-primary", "fingerprint": "ea8f3013f588db25", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-8424db9c75e04ba4", "level": "none", "message": {"text": "Very short observed git history"}, "properties": {"repobilityId": "8baf3af9f1b781f1", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-505bc666a82f9849", "level": "error", "message": {"text": "Agent instruction/config may expose a secret: .claude/settings.local.json"}, "properties": {"repobilityId": "777970b0fce0a93b", "scanner": "scanner-primary", "fingerprint": "505bc666a82f9849", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["agent-instructions", "secrets", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/settings.local.json"}, "region": {"startLine": 45}}}]}, {"ruleId": "scanner-9d218b7226665a58", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .cursor/mcp-config.example.json"}, "properties": {"repobilityId": "fcd50576a35e7ece", "scanner": "scanner-primary", "fingerprint": "9d218b7226665a58", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "cursor_rule"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".cursor/mcp-config.example.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ac32c16909101428", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 middleware.ts:45"}, "properties": {"repobilityId": "c834e6fa519e0502", "scanner": "scanner-primary", "fingerprint": "ac32c16909101428", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bc45a1d3f712a91b", "level": "none", "message": {"text": "Commented-code block (7 lines) in tests/unit/lib/auth/tenant-context.test.ts:178"}, "properties": {"repobilityId": "39f168bf5c60fa8f", "scanner": "scanner-primary", "fingerprint": "bc45a1d3f712a91b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e188e6fcb7925194", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/firelight-watcher-vps.js:31"}, "properties": {"repobilityId": "80ed3b6ef28decc3", "scanner": "scanner-primary", "fingerprint": "e188e6fcb7925194", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e99dea246c2a9041", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/firelight-watcher.ts:74"}, "properties": {"repobilityId": "12fe22873be8e5aa", "scanner": "scanner-primary", "fingerprint": "e99dea246c2a9041", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-577065fa698fd7e5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/create-test-tenants-via-api.ts:7"}, "properties": {"repobilityId": "85b692dbd4955677", "scanner": "scanner-primary", "fingerprint": "577065fa698fd7e5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-88b348c8beece2ac", "level": "note", "message": {"text": "Legacy-named symbol `syncIsOld` in scripts/investigate-sync-issue.ts:140"}, "properties": {"repobilityId": "db7ca590e5586476", "scanner": "scanner-primary", "fingerprint": "88b348c8beece2ac", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-93ef13a2f3ddb87c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/lms-smoke-test.mjs:40"}, "properties": {"repobilityId": "f7448a76b5e76034", "scanner": "scanner-primary", "fingerprint": "93ef13a2f3ddb87c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8140f208d8ecc02b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/layout/OrganizationSwitcher.tsx:31"}, "properties": {"repobilityId": "955a6d2ee1664182", "scanner": "scanner-primary", "fingerprint": "8140f208d8ecc02b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3418489e3e2441e4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/auth/RoleGuard.tsx:30"}, "properties": {"repobilityId": "dbdd892ffeccae37", "scanner": "scanner-primary", "fingerprint": "3418489e3e2441e4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-54338c8cf7ee6bca", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/dashboard/NewAgentsWidget.tsx:38"}, "properties": {"repobilityId": "6dbe48b21ba49b6f", "scanner": "scanner-primary", "fingerprint": "54338c8cf7ee6bca", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-03d7c92cda44316b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/profile/ProfilePhotoUpload.tsx:52"}, "properties": {"repobilityId": "7928421b34d32136", "scanner": "scanner-primary", "fingerprint": "03d7c92cda44316b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d78b59ea5d35406f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/contracts/ContractRequestForm.tsx:68"}, "properties": {"repobilityId": "3ea0c44fa34b17f2", "scanner": "scanner-primary", "fingerprint": "d78b59ea5d35406f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2bba5ff47e32b084", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/contracts/ContractExpirationAlerts.tsx:24"}, "properties": {"repobilityId": "babe356ebec5800b", "scanner": "scanner-primary", "fingerprint": "2bba5ff47e32b084", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0251e53beabba069", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/smartoffice/DashboardContent.tsx:218"}, "properties": {"repobilityId": "9635bb5184cec3e9", "scanner": "scanner-primary", "fingerprint": "0251e53beabba069", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f1a47083ccbd86a3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/smartoffice/ExportButton.tsx:30"}, "properties": {"repobilityId": "528bd59cd2de6ab3", "scanner": "scanner-primary", "fingerprint": "f1a47083ccbd86a3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4620a720bbb42b9e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/quotes/ProductComparison.tsx:90"}, "properties": {"repobilityId": "040ff8e6496d9987", "scanner": "scanner-primary", "fingerprint": "4620a720bbb42b9e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c45db1ae2b0cf5d2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/cases/page.tsx:80"}, "properties": {"repobilityId": "27c788fb5fe594f4", "scanner": "scanner-primary", "fingerprint": "c45db1ae2b0cf5d2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-dcf74203310fe9d2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/cases/[id]/page.tsx:61"}, "properties": {"repobilityId": "a5d13828e42a25d9", "scanner": "scanner-primary", "fingerprint": "dcf74203310fe9d2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2fdbfa665c87e7fa", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/help/page.tsx:172"}, "properties": {"repobilityId": "eb7b2593a216f4d4", "scanner": "scanner-primary", "fingerprint": "2fdbfa665c87e7fa", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c985985ea50d2582", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/help/videos/page.tsx:54"}, "properties": {"repobilityId": "a92397e30fb435a0", "scanner": "scanner-primary", "fingerprint": "c985985ea50d2582", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d39bd29127ae0097", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/help/articles/[slug]/page.tsx:65"}, "properties": {"repobilityId": "c489cb30bf680848", "scanner": "scanner-primary", "fingerprint": "d39bd29127ae0097", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e643d2ad117dc9af", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/goals/page.tsx:32"}, "properties": {"repobilityId": "ff6de99ca6f08b1f", "scanner": "scanner-primary", "fingerprint": "e643d2ad117dc9af", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0bb8239d6966e677", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/integrations/winflex/sso/route.ts:138"}, "properties": {"repobilityId": "9e44f0c15bb32b5e", "scanner": "scanner-primary", "fingerprint": "0bb8239d6966e677", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3d5ffba26db03385", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/inbound/smartoffice/route.ts:122"}, "properties": {"repobilityId": "7e2f5876642f46fd", "scanner": "scanner-primary", "fingerprint": "3d5ffba26db03385", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3b020c081451df46", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/video-library/videos/sync/route.ts:80"}, "properties": {"repobilityId": "0c579d4a7bcf79b7", "scanner": "scanner-primary", "fingerprint": "3b020c081451df46", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0df6b169df2fd9ff", "level": "none", "message": {"text": "Commented-code block (9 lines) in app/api/quotes/life/route.ts:88"}, "properties": {"repobilityId": "f8d487f907ec5751", "scanner": "scanner-primary", "fingerprint": "0df6b169df2fd9ff", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5b59d22e0e59c612", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/resources/page.tsx:54"}, "properties": {"repobilityId": "ea83bdad1b3189ad", "scanner": "scanner-primary", "fingerprint": "5b59d22e0e59c612", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a7eae3b370c9b378", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/learning/page.tsx:34"}, "properties": {"repobilityId": "d2711a9243914ab9", "scanner": "scanner-primary", "fingerprint": "a7eae3b370c9b378", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-32b6254f2022f8a4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/learning/[courseId]/page.tsx:45"}, "properties": {"repobilityId": "6c8585e666823562", "scanner": "scanner-primary", "fingerprint": "32b6254f2022f8a4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-95b9d365d74151be", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/learning/[courseId]/[lessonId]/page.tsx:49"}, "properties": {"repobilityId": "b842b38b411261ba", "scanner": "scanner-primary", "fingerprint": "95b9d365d74151be", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ad56046867eb777a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/commissions/page.tsx:52"}, "properties": {"repobilityId": "36d0730e6de804cf", "scanner": "scanner-primary", "fingerprint": "ad56046867eb777a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a63023c78c3fb4dd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/dashboard/page.tsx:82"}, "properties": {"repobilityId": "702829b4e48b14a5", "scanner": "scanner-primary", "fingerprint": "a63023c78c3fb4dd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b7cee2fcdcd658b3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/integrations/page.tsx:42"}, "properties": {"repobilityId": "7c0125330c424a32", "scanner": "scanner-primary", "fingerprint": "b7cee2fcdcd658b3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-267023197344fc5c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/users/page.tsx:50"}, "properties": {"repobilityId": "cec94c4bf7e5a781", "scanner": "scanner-primary", "fingerprint": "267023197344fc5c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f42c58d2e60eb608", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/learning/page.tsx:42"}, "properties": {"repobilityId": "59cc822eaa3d8701", "scanner": "scanner-primary", "fingerprint": "f42c58d2e60eb608", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-567d93afb4f279b0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/learning/[courseId]/page.tsx:78"}, "properties": {"repobilityId": "0d23eb4cd70dbb3c", "scanner": "scanner-primary", "fingerprint": "567d93afb4f279b0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6e0fb1a48c96d7eb", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/learning/reports/page.tsx:118"}, "properties": {"repobilityId": "34b0ce9dd72423d5", "scanner": "scanner-primary", "fingerprint": "6e0fb1a48c96d7eb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a89d63895770ad6b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/roles/page.tsx:70"}, "properties": {"repobilityId": "d6d7398b4254d462", "scanner": "scanner-primary", "fingerprint": "a89d63895770ad6b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-73a3954031f3e27a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/organizations/page.tsx:44"}, "properties": {"repobilityId": "7ecf7c6edc2b0467", "scanner": "scanner-primary", "fingerprint": "73a3954031f3e27a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b5fa6b6f3b2e2aab", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/organizations/[id]/page.tsx:51"}, "properties": {"repobilityId": "a9f7f1c82111d3d4", "scanner": "scanner-primary", "fingerprint": "b5fa6b6f3b2e2aab", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-32e9c37b663cd737", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/organizations/[id]/settings/page.tsx:31"}, "properties": {"repobilityId": "b13c0d3a80fc03e4", "scanner": "scanner-primary", "fingerprint": "32e9c37b663cd737", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e79494573e19bfad", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/audit-logs/page.tsx:60"}, "properties": {"repobilityId": "250e86503dcb4885", "scanner": "scanner-primary", "fingerprint": "e79494573e19bfad", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b394c5bca67680b1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/contracts/page.tsx:61"}, "properties": {"repobilityId": "4202b813d0805258", "scanner": "scanner-primary", "fingerprint": "b394c5bca67680b1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6364e247014fddfd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/smartoffice-upload/page.tsx:46"}, "properties": {"repobilityId": "454530823dbce82a", "scanner": "scanner-primary", "fingerprint": "6364e247014fddfd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-13d98380480a3809", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/(authenticated)/video-library/page.tsx:56"}, "properties": {"repobilityId": "a84203fcc60c540a", "scanner": "scanner-primary", "fingerprint": "13d98380480a3809", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-dfe40fe0c3bfcc1e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/profile/page.tsx:40"}, "properties": {"repobilityId": "773d66d5975cc7ce", "scanner": "scanner-primary", "fingerprint": "dfe40fe0c3bfcc1e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c7b91a86019fa27e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/contracts/page.tsx:56"}, "properties": {"repobilityId": "6124eb9f18dfa8db", "scanner": "scanner-primary", "fingerprint": "c7b91a86019fa27e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a268dc037dd6cd5c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/contracts/[id]/page.tsx:48"}, "properties": {"repobilityId": "099c9fe6e7d74709", "scanner": "scanner-primary", "fingerprint": "a268dc037dd6cd5c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ab2ffa5cccb2d35d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/reports/carriers/page.tsx:55"}, "properties": {"repobilityId": "ec039ac50b335be1", "scanner": "scanner-primary", "fingerprint": "ab2ffa5cccb2d35d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0f50912f1b3b20af", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/reports/forecast/page.tsx:51"}, "properties": {"repobilityId": "69d7d3a1e3231dff", "scanner": "scanner-primary", "fingerprint": "0f50912f1b3b20af", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-03150a3feb713c7d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/reports/agents/page.tsx:57"}, "properties": {"repobilityId": "cc7092626fd42b94", "scanner": "scanner-primary", "fingerprint": "03150a3feb713c7d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5ff7f27a31ab98e5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/reports/goal-tracking/page.tsx:51"}, "properties": {"repobilityId": "4d475bd5e247f96f", "scanner": "scanner-primary", "fingerprint": "5ff7f27a31ab98e5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c3054dfafda7467c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/smartoffice/agents/page.tsx:69"}, "properties": {"repobilityId": "fe73c301cb04999a", "scanner": "scanner-primary", "fingerprint": "c3054dfafda7467c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6a3876265c5504da", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/smartoffice/policies/page.tsx:78"}, "properties": {"repobilityId": "67816b05c00c333e", "scanner": "scanner-primary", "fingerprint": "6a3876265c5504da", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-eba44b24ee9378e3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/quotes/page.tsx:37"}, "properties": {"repobilityId": "fc7438a8e06292fb", "scanner": "scanner-primary", "fingerprint": "eba44b24ee9378e3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4c4c916b81536fcd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/quotes/life/new/page.tsx:59"}, "properties": {"repobilityId": "b3f665e72495d57d", "scanner": "scanner-primary", "fingerprint": "4c4c916b81536fcd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0fbbd4b0960802b5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/quotes/long-term-care/new/page.tsx:96"}, "properties": {"repobilityId": "e020e59efcf346bc", "scanner": "scanner-primary", "fingerprint": "0fbbd4b0960802b5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-459b7e820f5e9c69", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/quotes/term/new/page.tsx:59"}, "properties": {"repobilityId": "c69246be02a308c6", "scanner": "scanner-primary", "fingerprint": "459b7e820f5e9c69", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-896a04d292a96172", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/quotes/annuity/new/page.tsx:38"}, "properties": {"repobilityId": "77e9325b952f55ae", "scanner": "scanner-primary", "fingerprint": "896a04d292a96172", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-974c933c6f0e9ad8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/quotes/inforce-review/new/page.tsx:98"}, "properties": {"repobilityId": "26a3547c259043df", "scanner": "scanner-primary", "fingerprint": "974c933c6f0e9ad8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-db5263f6cbc0c369", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/quotes/disability/new/page.tsx:92"}, "properties": {"repobilityId": "7c72beafa0218fcb", "scanner": "scanner-primary", "fingerprint": "db5263f6cbc0c369", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d6573b08e6490ff5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/quotes/income-focused/new/page.tsx:84"}, "properties": {"repobilityId": "93dd6f73cd2b3d04", "scanner": "scanner-primary", "fingerprint": "d6573b08e6490ff5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8f91b01ea67e1ace", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/(public)/signup/tenant/page.tsx:105"}, "properties": {"repobilityId": "37687d5c7e0a6845", "scanner": "scanner-primary", "fingerprint": "8f91b01ea67e1ace", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-01bb661c222bf608", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/training/courses/page.tsx:50"}, "properties": {"repobilityId": "bd018ad50b593f56", "scanner": "scanner-primary", "fingerprint": "01bb661c222bf608", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-48a23901e725800b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/training/my-learning/page.tsx:39"}, "properties": {"repobilityId": "eb235977e52c0bc7", "scanner": "scanner-primary", "fingerprint": "48a23901e725800b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ea9ffb444800f1c8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/integrations/retry.ts:62"}, "properties": {"repobilityId": "94db22541d3a0a90", "scanner": "scanner-primary", "fingerprint": "ea9ffb444800f1c8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f9b110bad3cc2446", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/integrations/audit.ts:17"}, "properties": {"repobilityId": "35d7af8295ddabda", "scanner": "scanner-primary", "fingerprint": "f9b110bad3cc2446", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6d045660253b7f8f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/auth/hooks.ts:32"}, "properties": {"repobilityId": "d895c702c5f4a489", "scanner": "scanner-primary", "fingerprint": "6d045660253b7f8f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3c37538349b900f1", "level": "note", "message": {"text": "109 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "7f57fb17091e98e6", "scanner": "scanner-primary", "fingerprint": "3c37538349b900f1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}]}]}