{"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_blueprint_gap", "name": "Foundry mined blueprint gap alignment: TortoiseWolfe/eightysix", "shortDescription": {"text": "Foundry mined blueprint gap alignment: TortoiseWolfe/eightysix"}, "fullDescription": {"text": "Graph query export: Human feedback aligned with blueprint or architecture gaps\nQuery id: blueprint_gap_alignment\nQuery type: motif_query\nIntent: Curriculum-gap examples connecting issue threads to helicopter-view gaps.\nMotif: blueprint_gap_alignment\nTraining usage: curriculum_gap\nGraph gold label: supported_by_high_confidence_link\nRepo: TortoiseWolfe/eightysix\nThread: TortoiseWolfe/eightysix#2\nEvidence:\nGraph motif: Human feedback aligns with blueprint or architecture gaps\nMotif id: blueprint_gap_alignment\nPolarity: mixed\nTraining usage: curriculum_gap\nSeverity: medium\nRepo: TortoiseWolfe/eightysix\nThread: TortoiseWolfe/eightysix#2\nGraph gold label: supported_by_high_confidence_link\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: TortoiseWolfe/eightysix#2\nRepo: TortoiseWolfe/eightysix\nIssue/PR number: 2\nGraph consistency label: supported_by_high_confidence_link\nNodes: 29\nEdges: 56\nNode types: {'pr_file': 16, 'link_quality': 4, 'thread': 1, 'repo': 1, 'comment': 1, 'com"}, "properties": {"scanner": "foundry_dataset", "category": "tech_debt", "severity": "medium", "confidence": 0.7, "cwe": "", "owasp": ""}}, {"id": "foundry_test_ci_gap", "name": "Foundry mined test ci gap after feedback: TortoiseWolfe/eightysix", "shortDescription": {"text": "Foundry mined test ci gap after feedback: TortoiseWolfe/eightysix"}, "fullDescription": {"text": "Graph query export: Feedback exposes missing tests or CI\nQuery id: test_ci_gap_after_feedback\nQuery type: motif_query\nIntent: Hard negatives for feedback/fix chains without adequate guardrails.\nMotif: test_ci_gap_after_feedback\nTraining usage: hard_negative\nGraph gold label: supported_by_high_confidence_link\nRepo: TortoiseWolfe/eightysix\nThread: TortoiseWolfe/eightysix#1\nEvidence:\nGraph motif: Feedback or fix context exposes missing test/CI guardrails\nMotif id: test_ci_gap_after_feedback\nPolarity: bad\nTraining usage: hard_negative\nSeverity: high\nRepo: TortoiseWolfe/eightysix\nThread: TortoiseWolfe/eightysix#1\nGraph gold label: supported_by_high_confidence_link\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: TortoiseWolfe/eightysix#1\nRepo: TortoiseWolfe/eightysix\nIssue/PR number: 1\nGraph consistency label: supported_by_high_confidence_link\nNodes: 32\nEdges: 59\nNode types: {'pr_file': 19, 'link_quality': 4, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'commit'"}, "properties": {"scanner": "foundry_dataset", "category": "testing", "severity": "high", "confidence": 0.78, "cwe": "", "owasp": ""}}, {"id": "foundry_bad_chain", "name": "Foundry mined bad chains: TortoiseWolfe/eightysix", "shortDescription": {"text": "Foundry mined bad chains: TortoiseWolfe/eightysix"}, "fullDescription": {"text": "Comment chain pattern product: bad_chains\nRepo: TortoiseWolfe/eightysix\nThread: TortoiseWolfe/eightysix#3\nOutcome: claimed_resolved_with_failing_ci_signal\nThread label: thread_has_human_issue_and_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_high_confidence\nChain evidence:\nIssue/PR evidence chain: TortoiseWolfe/eightysix#3\nRepo: TortoiseWolfe/eightysix\nThread label: thread_has_human_issue_and_fix_context\nOutcome: claimed_resolved_with_failing_ci_signal\nComment count: 1\nLinked commit count: 3\nLinked CI commit count: 1\nLinked CI labels: {'ci_failure_signal': 1}\nChanged file count: 28\nLabels: {'agent_instruction_gap': 1}\nPolarities: {'bad': 1}\nChanged file labels: {'docs_or_claims': 8, 'dependency_or_build': 2, 'source_or_other': 18}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-430f026f15b18be1\",\n    \"kind\": \"pull_request_body\",\n    \""}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "high", "confidence": 0.84, "cwe": "", "owasp": ""}}, {"id": "foundry_fake_real_gap", "name": "Foundry mined mock as real or placeholder: TortoiseWolfe/eightysix", "shortDescription": {"text": "Foundry mined mock as real or placeholder: TortoiseWolfe/eightysix"}, "fullDescription": {"text": "Graph query export: Mock, sample, placeholder, or self-attested behavior treated as real\nQuery id: mock_as_real_or_placeholder\nQuery type: motif_query\nIntent: Hard negatives for fake completeness and missing real data paths.\nMotif: mock_as_real_or_placeholder\nTraining usage: hard_negative\nGraph gold label: supported_by_high_confidence_link\nRepo: TortoiseWolfe/eightysix\nThread: TortoiseWolfe/eightysix#2\nEvidence:\nGraph motif: Mock, sample, placeholder, or self-attested behavior treated as real\nMotif id: mock_as_real_or_placeholder\nPolarity: bad\nTraining usage: hard_negative\nSeverity: critical\nRepo: TortoiseWolfe/eightysix\nThread: TortoiseWolfe/eightysix#2\nGraph gold label: supported_by_high_confidence_link\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: TortoiseWolfe/eightysix#2\nRepo: TortoiseWolfe/eightysix\nIssue/PR number: 2\nGraph consistency label: supported_by_high_confidence_link\nNodes: 29\nEdges: 56\nNode types: {'pr_file': 16, 'link_quality': 4, 'thread': 1, 'repo'"}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "critical", "confidence": 0.82, "cwe": "", "owasp": ""}}, {"id": "foundry_failing_ci_claim", "name": "Foundry mined claimed resolved with failing ci: TortoiseWolfe/eightysix", "shortDescription": {"text": "Foundry mined claimed resolved with failing ci: TortoiseWolfe/eightysix"}, "fullDescription": {"text": "Graph query export: Claimed resolved with failing CI\nQuery id: claimed_resolved_with_failing_ci\nQuery type: motif_query\nIntent: Hard negatives where CI/failure evidence contradicts a resolution claim.\nMotif: claimed_resolved_with_failing_ci\nTraining usage: hard_negative\nGraph gold label: contradicted_by_ci_or_failure_signal\nRepo: TortoiseWolfe/eightysix\nThread: TortoiseWolfe/eightysix#3\nEvidence:\nGraph motif: Claimed resolved while CI or failure evidence contradicts it\nMotif id: claimed_resolved_with_failing_ci\nPolarity: bad\nTraining usage: hard_negative\nSeverity: critical\nRepo: TortoiseWolfe/eightysix\nThread: TortoiseWolfe/eightysix#3\nGraph gold label: contradicted_by_ci_or_failure_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: TortoiseWolfe/eightysix#3\nRepo: TortoiseWolfe/eightysix\nIssue/PR number: 3\nGraph consistency label: contradicted_by_ci_or_failure_signal\nNodes: 41\nEdges: 67\nNode types: {'pr_file': 28, 'commit': 3, 'link_quality': 3, 'thread': 1, 'repo'"}, "properties": {"scanner": "foundry_dataset", "category": "ci", "severity": "critical", "confidence": 0.86, "cwe": "", "owasp": ""}}, {"id": "scanner-b0e05cfa9fbe666b", "name": "Possibly dead Python function: refresh_skill_index", "shortDescription": {"text": "Possibly dead Python function: refresh_skill_index"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e1bfcd7c9602b9a7", "name": "Possibly dead Python function: refresh_dependency_graph", "shortDescription": {"text": "Possibly dead Python function: refresh_dependency_graph"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-28856779da6ede49", "name": "Possibly dead Python function: refresh_workflow_status", "shortDescription": {"text": "Possibly dead Python function: refresh_workflow_status"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bd6b8906b6791c8a", "name": "Possibly dead Python function: refresh_security_touchpoints", "shortDescription": {"text": "Possibly dead Python function: refresh_security_touchpoints"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5ab9254108175d81", "name": "Possibly dead Python function: refresh_screen_inventory", "shortDescription": {"text": "Possibly dead Python function: refresh_screen_inventory"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-23cb44825a18e3a0", "name": "Possibly dead Python function: refresh_acceptance_criteria", "shortDescription": {"text": "Possibly dead Python function: refresh_acceptance_criteria"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-961c3f43edaf1afe", "name": "Possibly dead Python function: count_decisions", "shortDescription": {"text": "Possibly dead Python function: count_decisions"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c201a2be22fb8ed4", "name": "Possibly dead Python function: extract_all", "shortDescription": {"text": "Possibly dead Python function: extract_all"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bf420346f2234b98", "name": "Possibly dead Python function: apply_fix", "shortDescription": {"text": "Possibly dead Python function: apply_fix"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-77ad9a5cf24642be", "name": "Possibly dead Python function: load_constitution", "shortDescription": {"text": "Possibly dead Python function: load_constitution"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8ad7da93bb78029c", "name": "Possibly dead Python function: cmd_export", "shortDescription": {"text": "Possibly dead Python function: cmd_export"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-74a9ee1777617073", "name": "Stray `console.log` in TS/JS \u2014 tests/fixtures/test-users.ts:152", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/fixtures/test-users.ts:152"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ff52fa0be1799b5f", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/global-setup.ts:22", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/global-setup.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-fa50e315f2822819", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/auth.setup.ts:43", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/auth.setup.ts:43"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-de4b8e92109cf593", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/tests/broken-links.spec.ts:30", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/tests/broken-links.spec.ts:30"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b9b5e12cb03d6968", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/tests/blog-touch-targets.spec.ts:97", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/tests/blog-touch-targets.spec.ts:97"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-351bfb4a97dcf4d6", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/tests/mobile-navigation.spec.ts:114", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/tests/mobile-navigation.spec.ts:114"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-079b60368af59c42", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/tests/pwa-installation.spec.ts:87", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/tests/pwa-installation.spec.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-7509f494101998ac", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/auth/rate-limiting.spec.ts:215", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/auth/rate-limiting.spec.ts:215"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d2fb543e17e3e7e6", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/auth/protected-routes.spec.ts:217", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/auth/protected-routes.spec.ts:217"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1c3ab93fd758c0f7", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/auth/sign-up.spec.ts:116", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/auth/sign-up.spec.ts:116"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7daa2e83176af912", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/auth/session-persistence.spec.ts:264", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/auth/session-persistence.spec.ts:264"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-072352e50f2b8acb", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/utils/test-user-factory.ts:147", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/utils/test-user-factory.ts:147"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2d2bb27148d841e0", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/utils/rate-limit-admin.ts:58", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/utils/rate-limit-admin.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-efe6f0ca601c5cc5", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/messaging/offline-queue.spec.ts:90", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/messaging/offline-queue.spec.ts:90"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bd0d1414cb69af3a", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/messaging/encrypted-messaging.spec.ts:94", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/messaging/encrypted-messaging.spec.ts:94"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-082b7480d06d15c3", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/messaging/complete-user-workflow.spec.ts:101", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/messaging/complete-user-workflow.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-453691130565ca78", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/messaging/group-chat-multiuser.spec.ts:113", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/messaging/group-chat-multiuser.spec.ts:113"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b1fbe9686fde03cd", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/messaging/message-editing.spec.ts:47", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/messaging/message-editing.spec.ts:47"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ec9547fad2f65748", "name": "TODO/FIXME marker in shipping code \u2014 tests/e2e/avatar/upload.spec.ts:445", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 tests/e2e/avatar/upload.spec.ts:445"}, "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-f8b582bf6ae06305", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/debug/capture-decryption-logs.spec.ts:84", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/debug/capture-decryption-logs.spec.ts:84"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a399250039f59ef1", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/payment/07-performance.spec.ts:69", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/payment/07-performance.spec.ts:69"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c9ac4d0d72f926fb", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/payment/04-gdpr-consent.spec.ts:120", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/payment/04-gdpr-consent.spec.ts:120"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-61480d5954d22279", "name": "Stray `console.log` in TS/JS \u2014 tests/rls/__setup__/cleanup-stale.ts:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/rls/__setup__/cleanup-stale.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-ae563bed9f257258", "name": "Stray `console.log` in TS/JS \u2014 docs/specs/040-feature-040-code/contracts/result.ts:85", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 docs/specs/040-feature-040-code/contracts/result.ts:85"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0aa6763368c57417", "name": "Stray `console.log` in TS/JS \u2014 scripts/generate-sitemap.js:46", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-sitemap.js:46"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c3a75d5343859cab", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-chunks.js:24", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-chunks.js: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-b9ee5510c790acfd", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-theme-contrast.js:45", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-theme-contrast.js: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-f320f70756ae278c", "name": "Stray `console.log` in TS/JS \u2014 scripts/update-task-completion.js:171", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/update-task-completion.js:171"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-841fa9e086ddd548", "name": "Stray `console.log` in TS/JS \u2014 scripts/detect-project.js:172", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/detect-project.js:172"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-62f1f817ef1df847", "name": "Stray `console.log` in TS/JS \u2014 scripts/verify-zero-knowledge.ts:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verify-zero-knowledge.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-74a034a82bb41c31", "name": "TODO/FIXME marker in shipping code \u2014 scripts/retry-failed-webhooks.ts:89", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 scripts/retry-failed-webhooks.ts:89"}, "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-e8f08990e5a3256b", "name": "Stray `console.log` in TS/JS \u2014 scripts/retry-failed-webhooks.ts:39", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/retry-failed-webhooks.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-9afed7f97be6b62f", "name": "Stray `console.log` in TS/JS \u2014 scripts/reset-database.ts:57", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/reset-database.ts:57"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-17d2b38b3ccd8fcb", "name": "Stray `console.log` in TS/JS \u2014 scripts/generate-deployment-history.js:126", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-deployment-history.js:126"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4af29c1079aade9d", "name": "Stray `console.log` in TS/JS \u2014 scripts/generate-author-config.js:40", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-author-config.js: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-d01091fa39b37adc", "name": "Stray `console.log` in TS/JS \u2014 scripts/initialize-test-keys.ts:29", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/initialize-test-keys.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-c298cba37bf1726e", "name": "Stray `console.log` in TS/JS \u2014 scripts/list-test-users.ts:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/list-test-users.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-408fcb1432fb802d", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-auto-key-generation.ts:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-auto-key-generation.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-f37746c32ab955ca", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-blog-stories.js:51", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-blog-stories.js:51"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bce46e096861e5e1", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-pwa.js:61", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-pwa.js:61"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b42a58e4397f4af9", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-blog-test-types.js:623", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-blog-test-types.js:623"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8470fe2ff65aa69d", "name": "Stray `console.log` in TS/JS \u2014 scripts/generate-rss.js:21", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-rss.js: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-a24cfb5102eaa9ca", "name": "Stray `console.log` in TS/JS \u2014 scripts/take-screenshot.js:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/take-screenshot.js: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-dbd90184c2302470", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-any-types.js:93", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-any-types.js:93"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-38adb7ba3bcaeb9b", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-encrypted-messages.ts:79", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-encrypted-messages.ts:79"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ce7d039006f5fb77", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-connections.ts:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-connections.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-189820411b08aab6", "name": "Stray `console.log` in TS/JS \u2014 scripts/prime-supabase.ts:27", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/prime-supabase.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-29112eca10fc4e4f", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-test-users.ts:114", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-test-users.ts:114"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-54770c2cac1f1630", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-all-blog-tests.js:569", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-all-blog-tests.js:569"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-278ffd93afb211b5", "name": "Stray `console.log` in TS/JS \u2014 scripts/generate-contract-fixtures.ts:65", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-contract-fixtures.ts:65"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3da6bc9103e8ec01", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-blog-tests.js:111", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-blog-tests.js:111"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f145295914421254", "name": "Stray `console.log` in TS/JS \u2014 scripts/validate-structure.js:280", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/validate-structure.js:280"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f45a490c82f2798b", "name": "Stray `console.log` in TS/JS \u2014 scripts/audit-components.js:130", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/audit-components.js:130"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c6a2893ff1a59e64", "name": "Stray `console.log` in TS/JS \u2014 scripts/generate-blog-data.js:138", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-blog-data.js:138"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b4adbb143faae25e", "name": "Stray `console.log` in TS/JS \u2014 scripts/create-test-conversation.ts:30", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/create-test-conversation.ts:30"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-65b6e1e2e412c65f", "name": "Stray `console.log` in TS/JS \u2014 scripts/validate-breakpoints.ts:60", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/validate-breakpoints.ts:60"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-50330c1de66c716f", "name": "Stray `console.log` in TS/JS \u2014 scripts/generate-manifest.js:196", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-manifest.js:196"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-60074e5a72816261", "name": "Stray `console.log` in TS/JS \u2014 scripts/generate-icons.js:33", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-icons.js: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-842c2c5680f5b980", "name": "TODO/FIXME marker in shipping code \u2014 scripts/migrate-components.js:304", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 scripts/migrate-components.js:304"}, "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-825010a6a5349150", "name": "Stray `console.log` in TS/JS \u2014 scripts/migrate-components.js:74", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-components.js: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-94563c81d18256da", "name": "Stray `console.log` in TS/JS \u2014 scripts/switch-env.js:90", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/switch-env.js:90"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-23be968fb1a5bdfc", "name": "Stray `console.log` in TS/JS \u2014 scripts/cleanup-expired-intents.ts:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/cleanup-expired-intents.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-75fbabb67478e5ef", "name": "TODO/FIXME marker in shipping code \u2014 scripts/__tests__/validate-structure.test.js:232", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 scripts/__tests__/validate-structure.test.js:232"}, "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-819a1c58d3318af6", "name": "Stray `console.log` in TS/JS \u2014 scripts/supabase/set-auth-config.ts:53", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/supabase/set-auth-config.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-9e5fe45fb46273fc", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/stripe-webhook/index.ts:63", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/stripe-webhook/index.ts:63"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a231a843443e86f3", "name": "Stray `console.log` in TS/JS \u2014 public/service-worker.js:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 public/service-worker.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-394775ecc056e36c", "name": "Stray `console.log` in TS/JS \u2014 src/types/result.ts:22", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/types/result.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-5d733fa1ac593503", "name": "Stray `console.log` in TS/JS \u2014 src/tests/integration/enhanced-processing.test.ts:115", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/tests/integration/enhanced-processing.test.ts:115"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-07b43512906fe07a", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/utils/metadata.tsx:218", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/utils/metadata.tsx:218"}, "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-4faf201dd60892d6", "name": "Stray `console.log` in TS/JS \u2014 src/utils/logger.ts:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/utils/logger.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-ef0016fbe44fcace", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/ThemeScript.tsx:87", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/ThemeScript.tsx:87"}, "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-a3046dfd0c326968", "name": "Stray `console.log` in TS/JS \u2014 src/components/molecular/AccountDeletionModal/AccountDeletionModal.stories.tsx:66", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/molecular/AccountDeletionModal/AccountDeletionModal.stories.tsx:66"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cd9020d3e72e0871", "name": "Stray `console.log` in TS/JS \u2014 src/components/molecular/AvatarUpload/AvatarUpload.stories.tsx:35", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/molecular/AvatarUpload/AvatarUpload.stories.tsx:35"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6854852a53e71a8d", "name": "Stray `console.log` in TS/JS \u2014 src/components/molecular/CodeBlock/CodeBlock.test.tsx:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/molecular/CodeBlock/CodeBlock.test.tsx: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-e2804422e2d2e3b0", "name": "Stray `console.log` in TS/JS \u2014 src/components/molecular/CodeBlock/CodeBlock.accessibility.test.tsx:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/molecular/CodeBlock/CodeBlock.accessibility.test.tsx: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-e93ad9816ecbc5ad", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/molecular/CodeBlock/CodeBlock.tsx:79", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/molecular/CodeBlock/CodeBlock.tsx:79"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ad24647c8aaf9432", "name": "Stray `console.log` in TS/JS \u2014 src/components/molecular/CodeBlock/CodeBlock.stories.tsx:29", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/molecular/CodeBlock/CodeBlock.stories.tsx: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-948757df808c489b", "name": "Stray `console.log` in TS/JS \u2014 src/components/molecular/BlogContent/BlogContent.test.tsx:79", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/molecular/BlogContent/BlogContent.test.tsx:79"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7e9e349f48c1f408", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/molecular/BlogContent/BlogContent.tsx:73", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/molecular/BlogContent/BlogContent.tsx:73"}, "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-d20f0d7d8a288ac7", "name": "Stray `console.log` in TS/JS \u2014 src/components/molecular/BlogContent/BlogContent.accessibility.test.tsx:49", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/molecular/BlogContent/BlogContent.accessibility.test.tsx: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-ec4b2dc6f5ae5c29", "name": "Stray `console.log` in TS/JS \u2014 src/components/molecular/BlogContent/BlogContent.stories.tsx:45", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/molecular/BlogContent/BlogContent.stories.tsx: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-25faeec29d959dfa", "name": "Stray `console.log` in TS/JS \u2014 src/components/molecular/IdleTimeoutModal/IdleTimeoutModal.stories.tsx:29", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/molecular/IdleTimeoutModal/IdleTimeoutModal.stories.tsx: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-abc3ff5597212db8", "name": "Stray `console.log` in TS/JS \u2014 src/components/molecular/MessageThread/MessageThread.stories.tsx:118", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/molecular/MessageThread/MessageThread.stories.tsx:118"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ccdcedcdea9ba5b8", "name": "Stray `console.log` in TS/JS \u2014 src/components/subatomic/Text/Text.stories.tsx:141", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/subatomic/Text/Text.stories.tsx:141"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-74c01da7ee66890b", "name": "Stray `console.log` in TS/JS \u2014 src/components/atomic/MessageBubble/MessageBubble.stories.tsx:86", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/atomic/MessageBubble/MessageBubble.stories.tsx:86"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0bb394bd4ee32639", "name": "Stray `console.log` in TS/JS \u2014 src/components/atomic/DataExportButton/DataExportButton.stories.tsx:50", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/atomic/DataExportButton/DataExportButton.stories.tsx: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-1c08499326d5f7e8", "name": "Stray `console.log` in TS/JS \u2014 src/components/atomic/QueuedMessageBubble/QueuedMessageBubble.stories.tsx:77", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/atomic/QueuedMessageBubble/QueuedMessageBubble.stories.tsx: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-bc1ceb7c0363d78f", "name": "Stray `console.log` in TS/JS \u2014 src/components/atomic/CopyButton/CopyButton.stories.tsx:33", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/atomic/CopyButton/CopyButton.stories.tsx: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-4e2a76ddf35aa705", "name": "Stray `console.log` in TS/JS \u2014 src/components/atomic/QueueStatusIndicator/QueueStatusIndicator.tsx:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/atomic/QueueStatusIndicator/QueueStatusIndicator.tsx: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-9b6e5d342d2952cd", "name": "React Flow <Controls> without dark theming \u2014 src/components/game/Controls/Controls.accessibility.test.tsx:24", "shortDescription": {"text": "React Flow <Controls> without dark theming \u2014 src/components/game/Controls/Controls.accessibility.test.tsx:24"}, "fullDescription": {"text": "`<Controls>` ships with white buttons. Override `.react-flow__controls` and `.react-flow__controls-button` in your stylesheet or pass a styled wrapper.\n\nWhy: P1 in CHECKLIST.md \u2014 vendor defaults bleed light through.\nRule id: fq.controls.no-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b9ffe6ec256a92d6", "name": "React Flow <Controls> without dark theming \u2014 src/components/game/Controls/Controls.test.tsx:34", "shortDescription": {"text": "React Flow <Controls> without dark theming \u2014 src/components/game/Controls/Controls.test.tsx:34"}, "fullDescription": {"text": "`<Controls>` ships with white buttons. Override `.react-flow__controls` and `.react-flow__controls-button` in your stylesheet or pass a styled wrapper.\n\nWhy: P1 in CHECKLIST.md \u2014 vendor defaults bleed light through.\nRule id: fq.controls.no-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-502d74eaca64c612", "name": "React Flow <Controls> without dark theming \u2014 src/components/game/Scene/Scene.tsx:213", "shortDescription": {"text": "React Flow <Controls> without dark theming \u2014 src/components/game/Scene/Scene.tsx:213"}, "fullDescription": {"text": "`<Controls>` ships with white buttons. Override `.react-flow__controls` and `.react-flow__controls-button` in your stylesheet or pass a styled wrapper.\n\nWhy: P1 in CHECKLIST.md \u2014 vendor defaults bleed light through.\nRule id: fq.controls.no-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-58d7b54afd6ceb75", "name": "Stray `console.log` in TS/JS \u2014 src/components/organisms/CreateGroupModal/CreateGroupModal.stories.tsx:25", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/organisms/CreateGroupModal/CreateGroupModal.stories.tsx: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-d6de5ae0d51feb38", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/organisms/CreateGroupModal/CreateGroupModal.tsx:211", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/organisms/CreateGroupModal/CreateGroupModal.tsx:211"}, "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-195ad5e552874ffe", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/organisms/A11yDevOverlay/A11yDevOverlay.tsx:279", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/organisms/A11yDevOverlay/A11yDevOverlay.tsx:279"}, "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-c5d4eaafcf9fc1d0", "name": "Stray `console.log` in TS/JS \u2014 src/components/privacy/ConsentModal/ConsentModal.stories.tsx:68", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/privacy/ConsentModal/ConsentModal.stories.tsx:68"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7b3a63692dd062f0", "name": "Stray `console.log` in TS/JS \u2014 src/components/privacy/PrivacyControls/PrivacyControls.stories.tsx:119", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/privacy/PrivacyControls/PrivacyControls.stories.tsx:119"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2ec5bec81c2af191", "name": "Stray `console.log` in TS/JS \u2014 src/components/privacy/CookieConsent/CookieConsent.stories.tsx:83", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/privacy/CookieConsent/CookieConsent.stories.tsx:83"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cf8e2a5efd35eaac", "name": "Stray `console.log` in TS/JS \u2014 src/components/map/LocationButton/LocationButton.stories.tsx:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/map/LocationButton/LocationButton.stories.tsx: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-43323d6bf57d80af", "name": "Stray `console.log` in TS/JS \u2014 src/components/map/LocationMarker/LocationMarker.stories.tsx:101", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/map/LocationMarker/LocationMarker.stories.tsx: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-331aa4c5d8b8d5b2", "name": "Stray `console.log` in TS/JS \u2014 src/components/map/GeolocationConsent/GeolocationConsent.stories.tsx:39", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/map/GeolocationConsent/GeolocationConsent.stories.tsx: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-2bbd92638699eca4", "name": "Stray `console.log` in TS/JS \u2014 src/components/forms/ContactForm/ContactForm.stories.tsx:37", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/forms/ContactForm/ContactForm.stories.tsx: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-a5894499eba8701f", "name": "Stray `console.log` in TS/JS \u2014 src/components/payment/PaymentStatusDisplay/PaymentStatusDisplay.stories.tsx:106", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/payment/PaymentStatusDisplay/PaymentStatusDisplay.stories.tsx:106"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8c8af9ca6d566d4e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/payment/PaymentQueuePanel/PaymentQueuePanel.tsx:164", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/payment/PaymentQueuePanel/PaymentQueuePanel.tsx:164"}, "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-11d77104783a357b", "name": "Stray `console.log` in TS/JS \u2014 src/components/payment/PaymentConsentModal/PaymentConsentModal.stories.tsx:82", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/payment/PaymentConsentModal/PaymentConsentModal.stories.tsx:82"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fa930b21a2c1b3ef", "name": "Stray `console.log` in TS/JS \u2014 src/components/payment/PaymentButton/PaymentButton.stories.tsx:151", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/payment/PaymentButton/PaymentButton.stories.tsx:151"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0dd323ec90c2adb4", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/blog/[slug]/page.tsx:201", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/blog/[slug]/page.tsx:201"}, "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-c59f54cf8fa5f1ed", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/messages/new-group/page.tsx:221", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/messages/new-group/page.tsx:221"}, "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-71fbcd810058631f", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/lib/analytics/GoogleAnalytics/GoogleAnalytics.test.tsx:32", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/lib/analytics/GoogleAnalytics/GoogleAnalytics.test.tsx:32"}, "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-7919952fba4e2b1f", "name": "Stray `console.log` in TS/JS \u2014 src/lib/messaging/cache.ts:37", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/messaging/cache.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-3dc7dd80bde00094", "name": "Stray `console.log` in TS/JS \u2014 src/services/messaging/connection-service.ts:376", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/services/messaging/connection-service.ts:376"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fdbe2a2345f9797e", "name": "Docker base image is tag-pinned but not digest-pinned: node:22-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: node:22-slim"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aa5acaa49eb8315b", "name": "Containers defined but no K8s/orchestration manifest found", "shortDescription": {"text": "Containers defined but no K8s/orchestration manifest found"}, "fullDescription": {"text": "Repo has Dockerfiles/compose but no Kubernetes/Nomad manifests. If the target deployment is K8s, the manifests may live in a separate ops repo."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3fbc5df82fde1639", "name": "Runtime dotenv file present in repo: .env.local-supabase", "shortDescription": {"text": "Runtime dotenv file present in repo: .env.local-supabase"}, "fullDescription": {"text": "`.env.local-supabase` looks like a runtime dotenv file. It contains secret-looking assignments for NEXT_PUBLIC_SUPABASE_ANON_KEY, SUPABASE_SERVICE_ROLE_KEY, SUPABASE_DB_PASSWORD. Move real values to a secret manager and keep only `.env.example` style templates in source control."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-ee810349675f4acf", "name": "Insecure pattern 'node_child_process' in next.config.ts:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in next.config.ts:2"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-df4b30768b1c922e", "name": "Insecure pattern 'document_write' in docs/lighthouse-report.json:1339", "shortDescription": {"text": "Insecure pattern 'document_write' in docs/lighthouse-report.json:1339"}, "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-6d43a83262969c1f", "name": "Insecure pattern 'node_child_process' in scripts/detect-project.js:8", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/detect-project.js:8"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fb6a2f9652636183", "name": "Insecure pattern 'node_child_process' in scripts/reset-database.ts:23", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/reset-database.ts:23"}, "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-62600b8c79e4e22b", "name": "Insecure pattern 'node_child_process' in scripts/generate-deployment-history.js:12", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/generate-deployment-history.js:12"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cf3c8e8086b283b7", "name": "Possible secret in scripts/initialize-test-keys.ts", "shortDescription": {"text": "Possible secret in scripts/initialize-test-keys.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-483fcc2210c1e832", "name": "Possible secret in scripts/test-auto-key-generation.ts", "shortDescription": {"text": "Possible secret in scripts/test-auto-key-generation.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-9f788d4ea9f04d0a", "name": "Possible secret in scripts/seed-encrypted-messages.ts", "shortDescription": {"text": "Possible secret in scripts/seed-encrypted-messages.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-16cea872b7ed64a6", "name": "Possible secret in scripts/seed-test-users.ts", "shortDescription": {"text": "Possible secret in scripts/seed-test-users.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-897d825cd8bf14ff", "name": "Insecure pattern 'node_child_process' in scripts/__tests__/detect-project.test.js:5", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/__tests__/detect-project.test.js:5"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-869499a73244ce1e", "name": "Insecure pattern 'document_write' in features/enhancements/047-threejs-game/lighthouse-report.json:3542", "shortDescription": {"text": "Insecure pattern 'document_write' in features/enhancements/047-threejs-game/lighthouse-report.json:3542"}, "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-784b3669c95dd2a5", "name": "Insecure pattern 'dangerous_innerhtml' in src/utils/metadata.tsx:218", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/utils/metadata.tsx:218"}, "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-4eeca5b1eee1f10c", "name": "Insecure pattern 'local_storage_auth_token' in src/utils/privacy.test.ts:101", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in src/utils/privacy.test.ts:101"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ae71bb7b067e2486", "name": "Insecure pattern 'dangerous_innerhtml' in src/components/ThemeScript.tsx:87", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/ThemeScript.tsx:87"}, "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-3d39bcf009fd7492", "name": "Insecure pattern 'dangerous_innerhtml' in src/components/molecular/CodeBlock/CodeBlock.tsx:79", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/molecular/CodeBlock/CodeBlock.tsx:79"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d90efc6e9d9b1608", "name": "Insecure pattern 'dangerous_innerhtml' in src/components/molecular/BlogContent/BlogContent.tsx:73", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/molecular/BlogContent/BlogContent.tsx:73"}, "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-a53d4bf3d20748c2", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/molecular/BlogContent/BlogContent.tsx:44", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/molecular/BlogContent/BlogContent.tsx:44"}, "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-0c50bad4cf0ba843", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/molecular/FontSwitcher/FontSwitcher.accessibility.test.", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/molecular/FontSwitcher/FontSwitcher.accessibility.test.tsx:12"}, "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-37f3693521941d55", "name": "Insecure pattern 'weak_hash' in src/components/atomic/Tooltip/Tooltip.tsx:138", "shortDescription": {"text": "Insecure pattern 'weak_hash' in src/components/atomic/Tooltip/Tooltip.tsx:138"}, "fullDescription": {"text": "Found a known-risky pattern (weak_hash). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fca3c2f36214a5da", "name": "Possible secret in src/components/atomic/PasswordStrengthIndicator/PasswordStrengthIndicator.stories.tsx", "shortDescription": {"text": "Possible secret in src/components/atomic/PasswordStrengthIndicator/PasswordStrengthIndicator.stories.tsx"}, "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-ca2bd82c31100b72", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/blog/[slug]/page.tsx:201", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/blog/[slug]/page.tsx:201"}, "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-0a6800f11112a0c7", "name": "Possible secret in src/lib/blog/blog-data.json", "shortDescription": {"text": "Possible secret in src/lib/blog/blog-data.json"}, "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-7636633e5c3f4c42", "name": "Insecure pattern 'dangerous_innerhtml' in src/lib/analytics/GoogleAnalytics/GoogleAnalytics.test.tsx:32", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/lib/analytics/GoogleAnalytics/GoogleAnalytics.test.tsx:32"}, "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-60daf8ca77aaa049", "name": "Possible secret in src/lib/logger/logger.stories.tsx", "shortDescription": {"text": "Possible secret in src/lib/logger/logger.stories.tsx"}, "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-557266578676ee0a", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/upload-artifact@v6 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f323fd6b9dd42207", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v5 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-28c4a04bd807da0c", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v5 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ad6701f0a8405e22", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a968acecb41930fa", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "treosh/lighthouse-ci-action@v12 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d25efd2efcdde921", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-27924aa79fa4a517", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v5 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-65c9bd56493a81d3", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v5 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bf55f09ffd0060bc", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v5 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cb639d9a10a47b23", "name": "package.json defines install-time lifecycle scripts", "shortDescription": {"text": "package.json defines install-time lifecycle scripts"}, "fullDescription": {"text": "preinstall/install/postinstall/prepare scripts execute during dependency installation. Review them carefully for network calls, obfuscation, shell execution, or credential access."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-21e20c47805f394a", "name": "Very large file: tests/e2e/utils/test-user-factory.ts (2387 lines)", "shortDescription": {"text": "Very large file: tests/e2e/utils/test-user-factory.ts (2387 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-59b435d91d726d08", "name": "Very large file: src/services/messaging/message-service.ts (1465 lines)", "shortDescription": {"text": "Very large file: src/services/messaging/message-service.ts (1465 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-786c8c22d3fe624f", "name": "48 TODO/FIXME markers", "shortDescription": {"text": "48 TODO/FIXME markers"}, "fullDescription": {"text": "High count of TODO/FIXME/HACK markers \u2014 track them as issues so they're not forgotten."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 1480 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 115 placeholder/mock markers across 62 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-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cc55229a7a3c078d", "name": "Agent authority lacks a verifier contract: .mcp.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .mcp.json"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-17d866d91a7c451e", "name": "Agent instruction/config may expose a secret: CLAUDE.md", "shortDescription": {"text": "Agent instruction/config may expose a secret: CLAUDE.md"}, "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-61f64af4e1b91986", "name": "Agent authority lacks a verifier contract: docs/CLAUDE.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: docs/CLAUDE.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-01ada338bcc813fa", "name": "Agent authority lacks a verifier contract: docs/interoffice/CLAUDE.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: docs/interoffice/CLAUDE.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6b0fa4b05bfb2b24", "name": "Agent authority lacks a verifier contract: .claude/commands/speckit.taskstoissues.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/speckit.taskstoissues.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-67c6c82748886b98", "name": "Agent authority lacks a verifier contract: .claude/commands/specify.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/specify.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2882da8270959730", "name": "Agent authority lacks a verifier contract: .claude/commands/speckit.plan.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/speckit.plan.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f1b84ff8cb7702db", "name": "Agent authority lacks a verifier contract: .claude/roles/qc-operator.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/roles/qc-operator.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-52ce1721e31f395e", "name": "Agent authority lacks a verifier contract: .claude/roles/council.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/roles/council.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c67029f5181d8ecd", "name": "Agent authority lacks a verifier contract: .claude/roles/docker-captain.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/roles/docker-captain.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9adc67bc4389bc2b", "name": "Agent authority lacks a verifier contract: .claude/roles/design.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/roles/design.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fa566d64f7015535", "name": "Agent authority lacks a verifier contract: .claude/skills/speckit-wireframe-prep/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/speckit-wireframe-prep/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-15f277c1e4739bb9", "name": "Agent instruction/config may expose a secret: .claude/knowledge/docker/nodejs_rocks_in_docker_dockercon2023.md", "shortDescription": {"text": "Agent instruction/config may expose a secret: .claude/knowledge/docker/nodejs_rocks_in_docker_dockercon2023.md"}, "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-e4e3b4eb4ada793a", "name": "Agent instruction contains unpinned remote install: .claude/knowledge/docker/nodejs_docker_best_practices_dockercon2019.", "shortDescription": {"text": "Agent instruction contains unpinned remote install: .claude/knowledge/docker/nodejs_docker_best_practices_dockercon2019.md"}, "fullDescription": {"text": "Remote install commands in agent instructions are a supply-chain risk, especially when an agent can execute shell commands."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-00101e05f314e6cb", "name": "Commented-code block (5 lines) in playwright.config.ts:140", "shortDescription": {"text": "Commented-code block (5 lines) in playwright.config.ts:140"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-755ee9e9a1c5847b", "name": "Commented-code block (6 lines) in tests/integration/auth/oauth-flow.test.ts:101", "shortDescription": {"text": "Commented-code block (6 lines) in tests/integration/auth/oauth-flow.test.ts:101"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d3c9d5466c87c6f3", "name": "Commented-code block (8 lines) in tests/integration/auth/sign-in-flow.test.ts:110", "shortDescription": {"text": "Commented-code block (8 lines) in tests/integration/auth/sign-in-flow.test.ts:110"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8a1e9412515be7fc", "name": "Commented-code block (5 lines) in tests/contract/admin/admin-access.contract.test.ts:192", "shortDescription": {"text": "Commented-code block (5 lines) in tests/contract/admin/admin-access.contract.test.ts:192"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-810704aec33c3f71", "name": "Commented-code block (7 lines) in tests/e2e/mobile-dropdown-screenshot.spec.ts:26", "shortDescription": {"text": "Commented-code block (7 lines) in tests/e2e/mobile-dropdown-screenshot.spec.ts:26"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-408f67a3d80cfeec", "name": "Commented-code block (5 lines) in tests/e2e/game-3d.spec.ts:22", "shortDescription": {"text": "Commented-code block (5 lines) in tests/e2e/game-3d.spec.ts:22"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7c5e2cc3ffe3fa8c", "name": "Commented-code block (5 lines) in tests/e2e/color-contrast.spec.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in tests/e2e/color-contrast.spec.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-76852d45c9129722", "name": "Commented-code block (5 lines) in tests/e2e/embed-theme-contrast.spec.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in tests/e2e/embed-theme-contrast.spec.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3f415b677067bea8", "name": "Commented-code block (7 lines) in tests/e2e/auth.setup.ts:75", "shortDescription": {"text": "Commented-code block (7 lines) in tests/e2e/auth.setup.ts:75"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-539b7ca89b6df17a", "name": "Commented-code block (5 lines) in tests/e2e/security/payment-isolation.spec.ts:60", "shortDescription": {"text": "Commented-code block (5 lines) in tests/e2e/security/payment-isolation.spec.ts:60"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a7828aa05208825a", "name": "Commented-code block (5 lines) in tests/e2e/tests/accessibility.spec.ts:208", "shortDescription": {"text": "Commented-code block (5 lines) in tests/e2e/tests/accessibility.spec.ts:208"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-35bb9374a1171bcc", "name": "Commented-code block (5 lines) in tests/e2e/tests/mobile-orientation.spec.ts:153", "shortDescription": {"text": "Commented-code block (5 lines) in tests/e2e/tests/mobile-orientation.spec.ts:153"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-47e1277e7db73e79", "name": "Commented-code block (7 lines) in tests/e2e/tests/cross-page-navigation.spec.ts:358", "shortDescription": {"text": "Commented-code block (7 lines) in tests/e2e/tests/cross-page-navigation.spec.ts:358"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-06dccec859b43e5e", "name": "Commented-code block (5 lines) in tests/e2e/auth/session-persistence.spec.ts:191", "shortDescription": {"text": "Commented-code block (5 lines) in tests/e2e/auth/session-persistence.spec.ts:191"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e36da2854a27e7f6", "name": "Commented-code block (5 lines) in tests/e2e/utils/test-user-factory.ts:87", "shortDescription": {"text": "Commented-code block (5 lines) in tests/e2e/utils/test-user-factory.ts:87"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-15ada732d3aa5e1c", "name": "Commented-code block (5 lines) in tests/e2e/admin/admin-user-pagination.spec.ts:242", "shortDescription": {"text": "Commented-code block (5 lines) in tests/e2e/admin/admin-user-pagination.spec.ts:242"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2c255efa63a55f77", "name": "Commented-code block (5 lines) in tests/e2e/admin/admin-dashboard.spec.ts:28", "shortDescription": {"text": "Commented-code block (5 lines) in tests/e2e/admin/admin-dashboard.spec.ts:28"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-22695501813b1baf", "name": "Commented-code block (5 lines) in tests/e2e/messaging/messaging-scroll.spec.ts:15", "shortDescription": {"text": "Commented-code block (5 lines) in tests/e2e/messaging/messaging-scroll.spec.ts:15"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ef2d9940f7418cc4", "name": "Commented-code block (5 lines) in tests/e2e/messaging/message-delete-placeholder.spec.ts:129", "shortDescription": {"text": "Commented-code block (5 lines) in tests/e2e/messaging/message-delete-placeholder.spec.ts:129"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fa7bea7ea8e2126e", "name": "Commented-code block (5 lines) in tests/e2e/messaging/cross-window-delivery.spec.ts:68", "shortDescription": {"text": "Commented-code block (5 lines) in tests/e2e/messaging/cross-window-delivery.spec.ts:68"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d723f3590e177334", "name": "Commented-code block (6 lines) in tests/e2e/messaging/offline-queue.spec.ts:380", "shortDescription": {"text": "Commented-code block (6 lines) in tests/e2e/messaging/offline-queue.spec.ts:380"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b4938013ef798694", "name": "Commented-code block (5 lines) in tests/e2e/messaging/complete-user-workflow.spec.ts:189", "shortDescription": {"text": "Commented-code block (5 lines) in tests/e2e/messaging/complete-user-workflow.spec.ts:189"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6d31c410b970a5fe", "name": "Commented-code block (11 lines) in tests/e2e/messaging/oauth-setup-modal.spec.ts:211", "shortDescription": {"text": "Commented-code block (11 lines) in tests/e2e/messaging/oauth-setup-modal.spec.ts:211"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bacff5fd2624064f", "name": "Commented-code block (7 lines) in tests/e2e/messaging/message-editing.spec.ts:93", "shortDescription": {"text": "Commented-code block (7 lines) in tests/e2e/messaging/message-editing.spec.ts:93"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d0caf22f2ec3bf98", "name": "Commented-code block (5 lines) in tests/e2e/debug/capture-decryption-logs.spec.ts:118", "shortDescription": {"text": "Commented-code block (5 lines) in tests/e2e/debug/capture-decryption-logs.spec.ts:118"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a8ed330d58ea8df8", "name": "Commented-code block (5 lines) in tests/e2e/payment/02-paypal-subscription.spec.ts:113", "shortDescription": {"text": "Commented-code block (5 lines) in tests/e2e/payment/02-paypal-subscription.spec.ts:113"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6a382f9bfc1e2e4e", "name": "Commented-code block (6 lines) in tests/e2e/payment/05-offline-queue.spec.ts:95", "shortDescription": {"text": "Commented-code block (6 lines) in tests/e2e/payment/05-offline-queue.spec.ts:95"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-edb94d874cc3faf7", "name": "Commented-code block (7 lines) in tests/e2e/payment/07-performance.spec.ts:71", "shortDescription": {"text": "Commented-code block (7 lines) in tests/e2e/payment/07-performance.spec.ts:71"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1da7aba72f00f171", "name": "Commented-code block (6 lines) in tests/e2e/payment/03-failed-payment-retry.spec.ts:82", "shortDescription": {"text": "Commented-code block (6 lines) in tests/e2e/payment/03-failed-payment-retry.spec.ts:82"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f7a2375e417d0360", "name": "Commented-code block (6 lines) in tests/rls/service-role.test.ts:123", "shortDescription": {"text": "Commented-code block (6 lines) in tests/rls/service-role.test.ts:123"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-251bdc6352e7596f", "name": "Commented-code block (5 lines) in tests/rls/__setup__/cleanup-stale-impl.ts:107", "shortDescription": {"text": "Commented-code block (5 lines) in tests/rls/__setup__/cleanup-stale-impl.ts:107"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cc169a51e214876a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 docs/specs/040-feature-040-code/contracts/result.ts:125", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 docs/specs/040-feature-040-code/contracts/result.ts:125"}, "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-6a08ac27e9ca4b14", "name": "`fetch()` without try/.catch or AbortSignal \u2014 docs/specs/023-user-messaging-system/contracts/api.ts:64", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 docs/specs/023-user-messaging-system/contracts/api.ts:64"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f667be2cff3bbb34", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/retry-failed-webhooks.ts:111", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/retry-failed-webhooks.ts:111"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f24377ea6b668c3d", "name": "Commented-code block (5 lines) in scripts/refresh-inventories.py:46", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/refresh-inventories.py:46"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8dbc78772f96adcc", "name": "Commented-code block (5 lines) in scripts/priority-calculator.py:107", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/priority-calculator.py:107"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fe6558d6939aa979", "name": "Commented-code block (5 lines) in scripts/seed-test-users.ts:185", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/seed-test-users.ts:185"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3d7907109c0b1518", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/generate-contract-fixtures.ts:42", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/generate-contract-fixtures.ts: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-de0ecaaab3f2cc29", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/contrast-audit.mjs:284", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/contrast-audit.mjs:284"}, "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-04fcd166fc759cf6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/send-test-message.mjs:34", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/send-test-message.mjs: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-be593cb8a9260ad7", "name": "Network/subprocess call without timeout or try/except \u2014 scripts/migrate-wireframes.py:59", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/migrate-wireframes.py:59"}, "fullDescription": {"text": "`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-58d0baffd45f8827", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/send-payment-email/index.ts:56", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/send-payment-email/index.ts:56"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b996d13d304e0057", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/resume-subscription/index.ts:70", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/resume-subscription/index.ts: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-637c623fa88beafc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/create-paypal-subscription/index.ts:72", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/create-paypal-subscription/index.ts:72"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d6b2353570910d8d", "name": "Commented-code block (6 lines) in supabase/functions/create-stripe-checkout/index.test.ts:50", "shortDescription": {"text": "Commented-code block (6 lines) in supabase/functions/create-stripe-checkout/index.test.ts:50"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8d15695f435ba8ee", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/paypal-webhook/index.ts:187", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/paypal-webhook/index.ts:187"}, "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-521ea151c84b3f20", "name": "Commented-code block (6 lines) in supabase/functions/stripe-webhook/index.ts:303", "shortDescription": {"text": "Commented-code block (6 lines) in supabase/functions/stripe-webhook/index.ts:303"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b77342e34348d598", "name": "Commented-code block (7 lines) in supabase/functions/create-stripe-subscription/index.test.ts:86", "shortDescription": {"text": "Commented-code block (7 lines) in supabase/functions/create-stripe-subscription/index.test.ts:86"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-19bbb4d44c82f125", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/cancel-subscription/index.ts:73", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/cancel-subscription/index.ts:73"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-caa2ed1a802c3cc2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/capture-paypal-order/index.ts:69", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/capture-paypal-order/index.ts: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-c8fd717a43dec6e8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/create-paypal-order/index.ts:64", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/create-paypal-order/index.ts:64"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-03d98b1595d8909a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/sw.js:114", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/sw.js:114"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2fb4cde5b2d0f153", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/mockServiceWorker.js:216", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/mockServiceWorker.js:216"}, "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-6729366caa997442", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/service-worker.js:71", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/service-worker.js:71"}, "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-d8ed00c0168457d7", "name": "Commented-code block (6 lines) in src/test/setup.ts:86", "shortDescription": {"text": "Commented-code block (6 lines) in src/test/setup.ts:86"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b7611609ecb6f820", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/utils/tasks-parser.ts:56", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/utils/tasks-parser.ts:56"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3f8ea937906141fb", "name": "Commented-code block (8 lines) in src/components/PWAInstall.tsx:49", "shortDescription": {"text": "Commented-code block (8 lines) in src/components/PWAInstall.tsx:49"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dd8b7c8269094bd6", "name": "Commented-code block (5 lines) in src/components/GlobalNav.tsx:309", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/GlobalNav.tsx:309"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2d87e0d057e875e8", "name": "Commented-code block (6 lines) in src/components/auth/EncryptionKeyGate/EncryptionKeyGate.tsx:58", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/auth/EncryptionKeyGate/EncryptionKeyGate.tsx:58"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d5eeddc3e85fa443", "name": "Commented-code block (7 lines) in src/components/auth/SignUpForm/SignUpForm.tsx:104", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/auth/SignUpForm/SignUpForm.tsx:104"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-717de83e05de3946", "name": "Commented-code block (5 lines) in src/components/auth/MessagingGate/MessagingGate.tsx:27", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/auth/MessagingGate/MessagingGate.tsx:27"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-03ffe922ab418a23", "name": "Commented-code block (5 lines) in src/components/auth/ProtectedRoute/ProtectedRoute.test.tsx:5", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/auth/ProtectedRoute/ProtectedRoute.test.tsx:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4a3aeb1af7cace25", "name": "Commented-code block (5 lines) in src/components/auth/ProtectedRoute/ProtectedRoute.tsx:50", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/auth/ProtectedRoute/ProtectedRoute.tsx:50"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-90295c1f8643ff6f", "name": "Commented-code block (5 lines) in src/components/auth/SignInForm/SignInForm.tsx:144", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/auth/SignInForm/SignInForm.tsx:144"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a5f83321cc26d357", "name": "Commented-code block (5 lines) in src/components/molecular/DisqusComments.tsx:12", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/molecular/DisqusComments.tsx:12"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-04ef011fefe84589", "name": "Commented-code block (5 lines) in src/components/molecular/MessagingTrendChart/MessagingTrendChart.tsx:26", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/molecular/MessagingTrendChart/MessagingTrendChart.tsx:26"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-289754745a125e44", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/molecular/CodeBlock/CodeBlock.stories.tsx:48", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/molecular/CodeBlock/CodeBlock.stories.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-903fc02adf6b4e6b", "name": "Commented-code block (5 lines) in src/components/molecular/AdminDataTable/AdminDataTable.test.tsx:121", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/molecular/AdminDataTable/AdminDataTable.test.tsx:121"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-83ff34721b0992d5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/molecular/BlogContent/BlogContent.stories.tsx:192", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/molecular/BlogContent/BlogContent.stories.tsx:192"}, "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-72b4d3395d6a24e7", "name": "Commented-code block (7 lines) in src/components/molecular/MessageThread/MessageThread.tsx:214", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/molecular/MessageThread/MessageThread.tsx:214"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3f136fffb31db487", "name": "Commented-code block (6 lines) in src/components/game/Controls/Controls.test.tsx:5", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/game/Controls/Controls.test.tsx:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ebfcf8e99bda67ba", "name": "Commented-code block (5 lines) in src/components/organisms/ConversationList/useConversationList.ts:364", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/organisms/ConversationList/useConversationList.ts:364"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9cddb71131ebf66c", "name": "Commented-code block (5 lines) in src/components/organisms/AdminDashboardOverview/AdminDashboardOverview.test.tsx:422", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/organisms/AdminDashboardOverview/AdminDashboardOverview.test.tsx:422"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-63dd851ed4e3bee9", "name": "Commented-code block (5 lines) in src/components/organisms/AdminDashboardOverview/AdminDashboardOverview.stories.tsx:138", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/organisms/AdminDashboardOverview/AdminDashboardOverview.stories.tsx:138"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c2f30659b8ce6b0a", "name": "Commented-code block (5 lines) in src/components/organisms/AdminDashboardOverview/AdminDashboardOverview.accessibility.t", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/organisms/AdminDashboardOverview/AdminDashboardOverview.accessibility.test.tsx:92"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-be9693e728b72dde", "name": "Commented-code block (5 lines) in src/components/organisms/AdminDashboardOverview/AdminDashboardOverview.tsx:38", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/organisms/AdminDashboardOverview/AdminDashboardOverview.tsx:38"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1a39fea604070f0b", "name": "Commented-code block (5 lines) in src/components/organisms/ConversationView/ConversationView.tsx:73", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/organisms/ConversationView/ConversationView.tsx:73"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d35e14af777d2b3c", "name": "Commented-code block (5 lines) in src/components/organisms/AdminConversationList/AdminConversationList.tsx:35", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/organisms/AdminConversationList/AdminConversationList.tsx:35"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6a29d700ab45b604", "name": "Commented-code block (6 lines) in src/components/organisms/AdminConversationList/AdminConversationList.test.tsx:9", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/organisms/AdminConversationList/AdminConversationList.test.tsx:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-24e14fccf711d6d9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/payment/SubscriptionManager/SubscriptionManager.tsx:113", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/payment/SubscriptionManager/SubscriptionManager.tsx:113"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cd5e817760c73447", "name": "Commented-code block (6 lines) in src/components/payment/PaymentConsentModal/PaymentConsentModal.test.tsx:130", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/payment/PaymentConsentModal/PaymentConsentModal.test.tsx:130"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4b27201b8fbd5bb9", "name": "Commented-code block (8 lines) in src/contexts/AuthContext.tsx:203", "shortDescription": {"text": "Commented-code block (8 lines) in src/contexts/AuthContext.tsx:203"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-de6c8db0c64f9050", "name": "Commented-code block (9 lines) in src/app/docs/page.tsx:5", "shortDescription": {"text": "Commented-code block (9 lines) in src/app/docs/page.tsx:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-24fd0bf4ebf198c9", "name": "Commented-code block (6 lines) in src/app/admin/AdminGate.test.tsx:142", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/admin/AdminGate.test.tsx:142"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-47d6792a132cbd40", "name": "Commented-code block (5 lines) in src/app/status/page.tsx:8", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/status/page.tsx:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-23fb50cb2c5fff64", "name": "Commented-code block (5 lines) in src/app/messages/setup/page.tsx:39", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/messages/setup/page.tsx:39"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f8a0f1f26248abc7", "name": "Commented-code block (7 lines) in src/lib/analytics/GoogleAnalytics/GoogleAnalytics.tsx:25", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/analytics/GoogleAnalytics/GoogleAnalytics.tsx:25"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-508129e226cf71be", "name": "Commented-code block (5 lines) in src/lib/messaging/cache.ts:51", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/messaging/cache.ts:51"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8cbb1d3cf3879a64", "name": "Commented-code block (5 lines) in src/lib/messaging/key-derivation.ts:119", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/messaging/key-derivation.ts:119"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-875e3fc2eb12940b", "name": "Commented-code block (5 lines) in src/lib/messaging/database.ts:37", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/messaging/database.ts:37"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-72b5a8bbf9bca2e7", "name": "Commented-code block (6 lines) in src/lib/messaging/__tests__/key-derivation.test.ts:115", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/messaging/__tests__/key-derivation.test.ts:115"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8222a1e65452751c", "name": "Commented-code block (6 lines) in src/lib/messaging/__tests__/encryption.test.ts:130", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/messaging/__tests__/encryption.test.ts:130"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-60be0e9149867f1b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/payments/stripe.ts:67", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/payments/stripe.ts:67"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-defcade0ffcb66a8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/payments/paypal.ts:91", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/payments/paypal.ts:91"}, "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-c9dea66692a02b7c", "name": "Commented-code block (10 lines) in src/lib/supabase/client.ts:153", "shortDescription": {"text": "Commented-code block (10 lines) in src/lib/supabase/client.ts:153"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f3f11c1dc9795804", "name": "Commented-code block (7 lines) in src/lib/offline-queue/base-queue.ts:238", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/offline-queue/base-queue.ts:238"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a85abd487f2510bc", "name": "Commented-code block (6 lines) in src/lib/offline-queue/form-adapter.ts:38", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/offline-queue/form-adapter.ts:38"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d2a5ecb9d7b2b889", "name": "Commented-code block (5 lines) in src/lib/offline-queue/payment-adapter.ts:42", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/offline-queue/payment-adapter.ts:42"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4c4baea86785e651", "name": "Commented-code block (6 lines) in src/hooks/useOfflineQueue.test.ts:226", "shortDescription": {"text": "Commented-code block (6 lines) in src/hooks/useOfflineQueue.test.ts:226"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e1d457edcb90d4b8", "name": "Commented-code block (6 lines) in src/hooks/useConnections.ts:100", "shortDescription": {"text": "Commented-code block (6 lines) in src/hooks/useConnections.ts:100"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4d83e01d7b286982", "name": "Commented-code block (5 lines) in src/hooks/useOfflineQueue.ts:153", "shortDescription": {"text": "Commented-code block (5 lines) in src/hooks/useOfflineQueue.ts:153"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d500bb441eb4c7e7", "name": "Commented-code block (6 lines) in src/hooks/useEmbedThemeColor.ts:28", "shortDescription": {"text": "Commented-code block (6 lines) in src/hooks/useEmbedThemeColor.ts:28"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1bf3b9fbcf3a69c2", "name": "Commented-code block (6 lines) in src/hooks/useReadReceipts.ts:81", "shortDescription": {"text": "Commented-code block (6 lines) in src/hooks/useReadReceipts.ts:81"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b4ed1aefdc4931d7", "name": "Commented-code block (6 lines) in src/services/messaging/gdpr-service.ts:431", "shortDescription": {"text": "Commented-code block (6 lines) in src/services/messaging/gdpr-service.ts:431"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4fb51b23734f7425", "name": "Commented-code block (7 lines) in src/services/messaging/message-service.ts:168", "shortDescription": {"text": "Commented-code block (7 lines) in src/services/messaging/message-service.ts:168"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4edba13899e2a30a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/messaging/message-service.ts:559", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/messaging/message-service.ts:559"}, "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-aa5422dc1c457052", "name": "Commented-code block (6 lines) in src/services/messaging/key-service.ts:40", "shortDescription": {"text": "Commented-code block (6 lines) in src/services/messaging/key-service.ts:40"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7dd08047f5fcfc36", "name": "Commented-code block (5 lines) in src/services/messaging/__tests__/key-service.test.ts:62", "shortDescription": {"text": "Commented-code block (5 lines) in src/services/messaging/__tests__/key-service.test.ts:62"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-14258bddbb48fe27", "name": "Commented-code block (6 lines) in src/services/messaging/__tests__/message-service.test.ts:26", "shortDescription": {"text": "Commented-code block (6 lines) in src/services/messaging/__tests__/message-service.test.ts:26"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-eab8b6346c2579e8", "name": "57 env vars used in code but missing from .env.example", "shortDescription": {"text": "57 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `ADMIN_EMAIL`, `BASE_URL`, `CI`, `GITHUB_ACTIONS`, `NEXT_PUBLIC_AUTHOR_AVATAR`, `NEXT_PUBLIC_AUTHOR_BIO`, `NEXT_PUBLIC_AUTHOR_EMAIL`, `NEXT_PUBLIC_AUTHOR_GITHUB` + 49 more. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-be46ea126aa5d8dc", "name": "Near-duplicate function bodies in 3 places", "shortDescription": {"text": "Near-duplicate function bodies in 3 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nscripts/project-status.py:load_status, scripts/queue-status.py:load_status, scripts/review-queue.py:load_status\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2c04133e54348533", "name": "Near-duplicate function bodies in 2 places", "shortDescription": {"text": "Near-duplicate function bodies in 2 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nscripts/generate-component.py:to_kebab_case, scripts/scaffold-test.py:to_kebab_case\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0aa34b3ed50de814", "name": "Dangling fetch: GET /api/user (docs/specs/040-feature-040-code/contracts/result.ts:125)", "shortDescription": {"text": "Dangling fetch: GET /api/user (docs/specs/040-feature-040-code/contracts/result.ts:125)"}, "fullDescription": {"text": "`docs/specs/040-feature-040-code/contracts/result.ts:125` calls `GET /api/user` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/user`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b5632245ebacb518", "name": "Dangling fetch: GET https://api.supabase.com/v1/projects/${projectRef}/config/auth (scripts/supabase/set-auth-config.ts:", "shortDescription": {"text": "Dangling fetch: GET https://api.supabase.com/v1/projects/${projectRef}/config/auth (scripts/supabase/set-auth-config.ts:72)"}, "fullDescription": {"text": "`scripts/supabase/set-auth-config.ts:72` calls `GET https://api.supabase.com/v1/projects/${projectRef}/config/auth` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.supabase.com/v1/projects/<p>/config/auth`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b9df4c4f1d613666", "name": "Dangling fetch: PATCH https://api.supabase.com/v1/projects/${projectRef}/config/auth (scripts/supabase/set-auth-config.t", "shortDescription": {"text": "Dangling fetch: PATCH https://api.supabase.com/v1/projects/${projectRef}/config/auth (scripts/supabase/set-auth-config.ts:93)"}, "fullDescription": {"text": "`scripts/supabase/set-auth-config.ts:93` calls `PATCH https://api.supabase.com/v1/projects/${projectRef}/config/auth` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.supabase.com/v1/projects/<p>/config/auth`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1fb8acf98635031a", "name": "Dangling fetch: POST https://api.resend.com/emails (supabase/functions/send-payment-email/index.ts:56)", "shortDescription": {"text": "Dangling fetch: POST https://api.resend.com/emails (supabase/functions/send-payment-email/index.ts:56)"}, "fullDescription": {"text": "`supabase/functions/send-payment-email/index.ts:56` calls `POST https://api.resend.com/emails` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.resend.com/emails`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-52b2fcb1b200f467", "name": "Dangling fetch: POST https://api-m.paypal.com/v1/oauth2/token (supabase/functions/paypal-webhook/index.ts:172)", "shortDescription": {"text": "Dangling fetch: POST https://api-m.paypal.com/v1/oauth2/token (supabase/functions/paypal-webhook/index.ts:172)"}, "fullDescription": {"text": "`supabase/functions/paypal-webhook/index.ts:172` calls `POST https://api-m.paypal.com/v1/oauth2/token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api-m.paypal.com/v1/oauth2/token`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-732b8a24809fe6b5", "name": "Dangling fetch: POST https://api-m.paypal.com/v1/notifications/verify-webhook-signature (supabase/functions/paypal-webho", "shortDescription": {"text": "Dangling fetch: POST https://api-m.paypal.com/v1/notifications/verify-webhook-signature (supabase/functions/paypal-webhook/index.ts:187)"}, "fullDescription": {"text": "`supabase/functions/paypal-webhook/index.ts:187` calls `POST https://api-m.paypal.com/v1/notifications/verify-webhook-signature` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api-m.paypal.com/v1/notifications/verify-webhook-signature`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-daa69b26966346f7", "name": "Dangling fetch: GET /api/user (src/types/result.ts:139)", "shortDescription": {"text": "Dangling fetch: GET /api/user (src/types/result.ts:139)"}, "fullDescription": {"text": "`src/types/result.ts:139` calls `GET /api/user` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/user`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e366f7a2ead96424", "name": "Dangling fetch: GET /api/data (src/components/molecular/CodeBlock/CodeBlock.stories.tsx:48)", "shortDescription": {"text": "Dangling fetch: GET /api/data (src/components/molecular/CodeBlock/CodeBlock.stories.tsx:48)"}, "fullDescription": {"text": "`src/components/molecular/CodeBlock/CodeBlock.stories.tsx:48` calls `GET /api/data` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/data`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a37069658568ab12", "name": "Unused endpoint: PUT /api/blog/posts", "shortDescription": {"text": "Unused endpoint: PUT /api/blog/posts"}, "fullDescription": {"text": "`public/service-worker.js` declares `PUT /api/blog/posts` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/21609"}, "properties": {"repository": "TortoiseWolfe/eightysix", "repoUrl": "https://github.com/TortoiseWolfe/eightysix", "branch": "main"}, "results": [{"ruleId": "foundry_blueprint_gap", "level": "warning", "message": {"text": "Foundry mined blueprint gap alignment: TortoiseWolfe/eightysix"}, "properties": {"repobilityId": 446961, "scanner": "foundry_dataset", "fingerprint": "3218dbe65a5440cba90956b06c246cd7bfa030fedabc53c60cd4c1aec27e1299", "category": "tech_debt", "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 aligned with blueprint or architecture gaps", "intent": "Curriculum-gap examples connecting issue threads to helicopter-view gaps.", "labels": {"docs_or_claims": 4, "source_or_other": 11, "ui_workflow_gap": 1, "dependency_or_build": 1, "generated_provenance": 1, "mostly follows blueprint": 1, "self_attested_unverified": 3, "issue_or_pull_request_thread": 1, "blueprint_human_gap_disagreement": 1, "thread_has_human_issue_and_fix_context": 2, "self_attested_or_generated_fix_unverified": 1}, "source": "graph_query_export", "motif_id": "blueprint_gap_alignment", "outcomes": {"self_attested_unverified": 6}, "polarity": "mixed", "query_id": "blueprint_gap_alignment", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 56, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 16, "alignment_uses_comment": 1, "alignment_uses_finding": 1, "chain_has_link_quality": 4, "comment_aligns_finding": 1, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 1, "comment_chain_links_commit": 1, "comment_chain_touches_file": 12, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 29, "node_types": {"repo": 1, "commit": 1, "thread": 1, "comment": 1, "pr_file": 16, "alignment": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 1, "blueprint_finding": 1}, "query_type": "motif_query", "thread_key": "TortoiseWolfe/eightysix#2", "issue_number": "2", "quality_tiers": {"high_confidence": 3, "assumption_check": 1}, "repo_full_name": "TortoiseWolfe/eightysix", "training_usage": "curriculum_gap", "source_motif_id": "graph-pattern-motif-thread-266f80f2380d6abd", "graph_gold_label": "supported_by_high_confidence_link", "changed_file_labels": {"docs_or_claims": 16, "source_or_other": 44, "dependency_or_build": 4}}, "text": "Graph query export: Human feedback aligned with blueprint or architecture gaps\nQuery id: blueprint_gap_alignment\nQuery type: motif_query\nIntent: Curriculum-gap examples connecting issue threads to helicopter-view gaps.\nMotif: blueprint_gap_alignment\nTraining usage: curriculum_gap\nGraph gold label: supported_by_high_confidence_link\nRepo: TortoiseWolfe/eightysix\nThread: TortoiseWolfe/eightysix#2\nEvidence:\nGraph motif: Human feedback aligns with blueprint or architecture gaps\nMotif id: blueprint_gap_alignment\nPolarity: mixed\nTraining usage: curriculum_gap\nSeverity: medium\nRepo: TortoiseWolfe/eightysix\nThread: TortoiseWolfe/eightysix#2\nGraph gold label: supported_by_high_confidence_link\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: TortoiseWolfe/eightysix#2\nRepo: TortoiseWolfe/eightysix\nIssue/PR number: 2\nGraph consistency label: supported_by_high_confidence_link\nNodes: 29\nEdges: 56\nNode types: {'pr_file': 16, 'link_quality': 4, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'commit': 1, 'issue_chain': 1, 'fix_outcome': 1, 'alignment': 1, 'blueprint_finding': 1}\nEdge types: {'thread_touches_file': 16, 'comment_chain_touches_file': 12, 'issue_chain_touches_file': 12, 'chain_has_link_quality': 4, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'comment_chain_links_commit': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1, 'alignment_uses_comment': 1, 'alignment_uses_finding': 1, 'comment_aligns_finding': 1}\nLabels: {'source_or_other': 11, 'docs_or_claims': 4, 'self_attested_unverified': 3, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'ui_workflow_gap': 1, 'dependency_or_build': 1, 'self_attested_or_generated_fix_unverified': 1, 'generated_provenance': 1, 'blueprint_human_gap_disagreement': 1, 'mostly follows blueprint': 1}\nOutcomes: {'self_attested_unverified': 6}\nQuality tiers: {'high_confidence': 3, 'assumption_check': 1}\nCI labels: {}\nCurriculum targets:\n- Use helicopter-view architecture/schema/design evidence beside issue threads.\n- Teach models to compare requested product class against implementation layers.\nAssumption checks:\n- Which blueprint layer is absent: frontend, API, data, auth, tests, or deployment?\n- Does human feedback confirm the same architectural gap?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/TortoiseWolfe/eightysix", "source_id": "graph-query-motif_query-2f63e9f126917009", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/blueprint_gap_alignment/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "TortoiseWolfe/eightysix", "source_dataset": "graph_queries/blueprint_gap_alignment", "training_usage": "curriculum_gap"}}}, {"ruleId": "foundry_blueprint_gap", "level": "warning", "message": {"text": "Foundry mined blueprint gap alignment: TortoiseWolfe/eightysix"}, "properties": {"repobilityId": 446960, "scanner": "foundry_dataset", "fingerprint": "93dc9553b3b63bee71ca714198a83a2cd0bb0783871e6cdf64e98df63a4ff101", "category": "tech_debt", "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 aligned with blueprint or architecture gaps", "intent": "Curriculum-gap examples connecting issue threads to helicopter-view gaps.", "labels": {"test_or_ci": 1, "test_ci_gap": 1, "docs_or_claims": 2, "source_or_other": 12, "dependency_or_build": 4, "generated_provenance": 1, "mostly follows blueprint": 1, "self_attested_unverified": 3, "issue_or_pull_request_thread": 1, "blueprint_human_gap_disagreement": 1, "thread_has_human_issue_and_fix_context": 2, "self_attested_or_generated_fix_unverified": 1}, "source": "graph_query_export", "motif_id": "blueprint_gap_alignment", "outcomes": {"self_attested_unverified": 6}, "polarity": "mixed", "query_id": "blueprint_gap_alignment", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 59, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 19, "alignment_uses_comment": 1, "alignment_uses_finding": 1, "chain_has_link_quality": 4, "comment_aligns_finding": 1, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 1, "comment_chain_links_commit": 1, "comment_chain_touches_file": 12, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 32, "node_types": {"repo": 1, "commit": 1, "thread": 1, "comment": 1, "pr_file": 19, "alignment": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 1, "blueprint_finding": 1}, "query_type": "motif_query", "thread_key": "TortoiseWolfe/eightysix#1", "issue_number": "1", "quality_tiers": {"high_confidence": 3, "assumption_check": 1}, "repo_full_name": "TortoiseWolfe/eightysix", "training_usage": "curriculum_gap", "source_motif_id": "graph-pattern-motif-thread-72874d83b0124738", "graph_gold_label": "supported_by_high_confidence_link", "changed_file_labels": {"test_or_ci": 4, "docs_or_claims": 8, "source_or_other": 48, "dependency_or_build": 16}}, "text": "Graph query export: Human feedback aligned with blueprint or architecture gaps\nQuery id: blueprint_gap_alignment\nQuery type: motif_query\nIntent: Curriculum-gap examples connecting issue threads to helicopter-view gaps.\nMotif: blueprint_gap_alignment\nTraining usage: curriculum_gap\nGraph gold label: supported_by_high_confidence_link\nRepo: TortoiseWolfe/eightysix\nThread: TortoiseWolfe/eightysix#1\nEvidence:\nGraph motif: Human feedback aligns with blueprint or architecture gaps\nMotif id: blueprint_gap_alignment\nPolarity: mixed\nTraining usage: curriculum_gap\nSeverity: medium\nRepo: TortoiseWolfe/eightysix\nThread: TortoiseWolfe/eightysix#1\nGraph gold label: supported_by_high_confidence_link\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: TortoiseWolfe/eightysix#1\nRepo: TortoiseWolfe/eightysix\nIssue/PR number: 1\nGraph consistency label: supported_by_high_confidence_link\nNodes: 32\nEdges: 59\nNode types: {'pr_file': 19, 'link_quality': 4, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'commit': 1, 'issue_chain': 1, 'fix_outcome': 1, 'alignment': 1, 'blueprint_finding': 1}\nEdge types: {'thread_touches_file': 19, 'comment_chain_touches_file': 12, 'issue_chain_touches_file': 12, 'chain_has_link_quality': 4, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'comment_chain_links_commit': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1, 'alignment_uses_comment': 1, 'alignment_uses_finding': 1, 'comment_aligns_finding': 1}\nLabels: {'source_or_other': 12, 'dependency_or_build': 4, 'self_attested_unverified': 3, 'docs_or_claims': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 1, 'test_or_ci': 1, 'self_attested_or_generated_fix_unverified': 1, 'generated_provenance': 1, 'blueprint_human_gap_disagreement': 1, 'mostly follows blueprint': 1}\nOutcomes: {'self_attested_unverified': 6}\nQuality tiers: {'high_confidence': 3, 'assumption_check': 1}\nCI labels: {}\nCurriculum targets:\n- Use helicopter-view architecture/schema/design evidence beside issue threads.\n- Teach models to compare requested product class against implementation layers.\nAssumption checks:\n- Which blueprint layer is absent: frontend, API, data, auth, tests, or deployment?\n- Does human feedback confirm the same architectural gap?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/TortoiseWolfe/eightysix", "source_id": "graph-query-motif_query-5783b33f1117bceb", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/blueprint_gap_alignment/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "TortoiseWolfe/eightysix", "source_dataset": "graph_queries/blueprint_gap_alignment", "training_usage": "curriculum_gap"}}}, {"ruleId": "foundry_test_ci_gap", "level": "error", "message": {"text": "Foundry mined test ci gap after feedback: TortoiseWolfe/eightysix"}, "properties": {"repobilityId": 457885, "scanner": "foundry_dataset", "fingerprint": "d46701a02b6a71bf9a24c0ac569ab232f8cac34114f15f382ac2cf1618176674", "category": "testing", "severity": "high", "confidence": 0.78, "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": "graph_query_record", "title": "Feedback exposes missing tests or CI", "intent": "Hard negatives for feedback/fix chains without adequate guardrails.", "labels": {"test_or_ci": 1, "test_ci_gap": 1, "docs_or_claims": 2, "source_or_other": 12, "dependency_or_build": 4, "generated_provenance": 1, "mostly follows blueprint": 1, "self_attested_unverified": 3, "issue_or_pull_request_thread": 1, "blueprint_human_gap_disagreement": 1, "thread_has_human_issue_and_fix_context": 2, "self_attested_or_generated_fix_unverified": 1}, "source": "graph_query_export", "motif_id": "test_ci_gap_after_feedback", "outcomes": {"self_attested_unverified": 6}, "polarity": "bad", "query_id": "test_ci_gap_after_feedback", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 59, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 19, "alignment_uses_comment": 1, "alignment_uses_finding": 1, "chain_has_link_quality": 4, "comment_aligns_finding": 1, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 1, "comment_chain_links_commit": 1, "comment_chain_touches_file": 12, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 32, "node_types": {"repo": 1, "commit": 1, "thread": 1, "comment": 1, "pr_file": 19, "alignment": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 1, "blueprint_finding": 1}, "query_type": "motif_query", "thread_key": "TortoiseWolfe/eightysix#1", "issue_number": "1", "quality_tiers": {"high_confidence": 3, "assumption_check": 1}, "repo_full_name": "TortoiseWolfe/eightysix", "training_usage": "hard_negative", "source_motif_id": "graph-pattern-motif-thread-848b2ed6150df0b1", "graph_gold_label": "supported_by_high_confidence_link", "changed_file_labels": {"test_or_ci": 4, "docs_or_claims": 8, "source_or_other": 48, "dependency_or_build": 16}}, "text": "Graph query export: Feedback exposes missing tests or CI\nQuery id: test_ci_gap_after_feedback\nQuery type: motif_query\nIntent: Hard negatives for feedback/fix chains without adequate guardrails.\nMotif: test_ci_gap_after_feedback\nTraining usage: hard_negative\nGraph gold label: supported_by_high_confidence_link\nRepo: TortoiseWolfe/eightysix\nThread: TortoiseWolfe/eightysix#1\nEvidence:\nGraph motif: Feedback or fix context exposes missing test/CI guardrails\nMotif id: test_ci_gap_after_feedback\nPolarity: bad\nTraining usage: hard_negative\nSeverity: high\nRepo: TortoiseWolfe/eightysix\nThread: TortoiseWolfe/eightysix#1\nGraph gold label: supported_by_high_confidence_link\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: TortoiseWolfe/eightysix#1\nRepo: TortoiseWolfe/eightysix\nIssue/PR number: 1\nGraph consistency label: supported_by_high_confidence_link\nNodes: 32\nEdges: 59\nNode types: {'pr_file': 19, 'link_quality': 4, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'commit': 1, 'issue_chain': 1, 'fix_outcome': 1, 'alignment': 1, 'blueprint_finding': 1}\nEdge types: {'thread_touches_file': 19, 'comment_chain_touches_file': 12, 'issue_chain_touches_file': 12, 'chain_has_link_quality': 4, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'comment_chain_links_commit': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1, 'alignment_uses_comment': 1, 'alignment_uses_finding': 1, 'comment_aligns_finding': 1}\nLabels: {'source_or_other': 12, 'dependency_or_build': 4, 'self_attested_unverified': 3, 'docs_or_claims': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 1, 'test_or_ci': 1, 'self_attested_or_generated_fix_unverified': 1, 'generated_provenance': 1, 'blueprint_human_gap_disagreement': 1, 'mostly follows blueprint': 1}\nOutcomes: {'self_attested_unverified': 6}\nQuality tiers: {'high_confidence': 3, 'assumption_check': 1}\nCI labels: {}\nCurriculum targets:\n- Turn human feedback into regression tests and CI gates.\n- Penalize fixes that do not add or exercise verification for affected workflows.\nAssumption checks:\n- Did the fix add tests for the exact complaint?\n- Does CI run those tests, or is verification only implied?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/TortoiseWolfe/eightysix", "source_id": "graph-query-motif_query-d34c7aee3ee16600", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/test_ci_gap_after_feedback/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "TortoiseWolfe/eightysix", "source_dataset": "graph_queries/test_ci_gap_after_feedback", "training_usage": "hard_negative"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: TortoiseWolfe/eightysix"}, "properties": {"repobilityId": 441699, "scanner": "foundry_dataset", "fingerprint": "ea13f43da3508333937aa8fb364c0fb68a2d1ffb7935e0f7378aea5fea0d689f", "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": "TortoiseWolfe/eightysix#3", "human_labels": ["agent_instruction_gap", "dependency_or_build", "docs_or_claims", "source_or_other"], "issue_number": "3", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "claimed_resolved_with_failing_ci_signal", "source_backed": true, "max_confidence": 0.82, "repo_full_name": "TortoiseWolfe/eightysix", "training_usage": "gold_candidate", "confidence_tier": "high_confidence", "source_chain_id": "evidence-chain-issue_chain-1bfcdea00408bcbe", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 28, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"docs_or_claims": 8, "source_or_other": 18, "dependency_or_build": 2}, "linked_commit_count": 3, "helicopter_view_count": 4, "source_artifact_count": 2, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_high_confidence"], "linked_ci_commit_count": 1, "verification_artifact_count": 1, "design_schema_api_artifact_count": 0}, "text": "Comment chain pattern product: bad_chains\nRepo: TortoiseWolfe/eightysix\nThread: TortoiseWolfe/eightysix#3\nOutcome: claimed_resolved_with_failing_ci_signal\nThread label: thread_has_human_issue_and_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_high_confidence\nChain evidence:\nIssue/PR evidence chain: TortoiseWolfe/eightysix#3\nRepo: TortoiseWolfe/eightysix\nThread label: thread_has_human_issue_and_fix_context\nOutcome: claimed_resolved_with_failing_ci_signal\nComment count: 1\nLinked commit count: 3\nLinked CI commit count: 1\nLinked CI labels: {'ci_failure_signal': 1}\nChanged file count: 28\nLabels: {'agent_instruction_gap': 1}\nPolarities: {'bad': 1}\nChanged file labels: {'docs_or_claims': 8, 'dependency_or_build': 2, 'source_or_other': 18}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-430f026f15b18be1\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"agent_instruction_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/TortoiseWolfe/eightysix/pull/3\",\n    \"text\": \"GitHub feedback: agent_instruction_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: TortoiseWolfe/eightysix\\nAuthor: TortoiseWolfe (User)\\nURL: https://github.com/TortoiseWolfe/eightysix/pull/3\\nTitle: 052-barcode-capture + 053-photo-capture-ai: specs + 8 wireframes\\nBody:\\n## What this is\\n\\nThe two remaining v1 capture modes, spec'd and wireframed for team review on the Pages preview:\\n\\n**052 \u2014 Barcode Capture** (Scan tab goes live)\\n- Live viewfinder (no shutter), shared `product_cache` \u2192 Open Food Facts lookup chain, unknown-barcode community naming, fallbacks for permission/offline/slow \u2014 every path preserves the barcode and lands at the 049 confirm step\\n- 4 frames: `01-scan-viewfinder` \u00b7 `02-scan-result-and-unknown` \u00b7 `03-scan-fallbacks` \u00b7 `04-barcode-lookup-flow` (dark)\\n\\n**053 \u2014 AI Photo Capture** (Snap tab goes live)\\n- Server-side recognition (`RECOGNITION_MODEL`, default claude-opus-4-8) returning `{name, category, confidence}`; \u22650.6 = badge'd suggestion, <0.6 = \\\"Best guess?\\\" with focused correction; per-user rate limit; **no path ever auto-adds**\\n- 4 frames: `01-snap-camera` \u00b7 `02-snap-confidence-confirm` \u00b7 `03-snap-fallbacks` \u00b7 `04-recognition-pipeline` (dark)\\n\\nAll 8 SVGs pass `va\"\n  }\n]\nChanged files:\n[\n  {\n    \"id\": \"github-pr-file-file-308ad65b65552688\",\n    \"filename\": \"docs/prp-docs/barcode-capture-prp.md\",\n    \"label\": \"docs_or_claims\",\n    \"status\": \"added\",\n    \"additions\": 55,\n    \"deletions\": 0,\n    \"changes\": 55,\n    \"blob_url\": \"https://github.com/TortoiseWolfe/eightysix/blob/e654854664d8e2a8b0a65504bc97a4c37098ca6f/docs%2Fprp-docs%2Fbarcode-capture-prp.md\"\n  },\n  {\n    \"id\": \"github-pr-file-file-afbf43f3477b541d\",\n    \"filename\": \"docs/prp-docs/photo-capture-ai-prp.md\",\n    \"label\": \"docs_or_claims\",\n    \"status\": \"added\",\n    \"additions\": 61,\n    \"deletions\": 0,\n    \"\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/TortoiseWolfe/eightysix", "source_id": "comment-chain-pattern-bad_chains-62138deec7ac49da", "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": "TortoiseWolfe/eightysix", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "gold_candidate"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: TortoiseWolfe/eightysix"}, "properties": {"repobilityId": 441698, "scanner": "foundry_dataset", "fingerprint": "196553aa01d72fac3bb2bbaed5342ea513752155a60b7945cbc256af78936122", "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": "TortoiseWolfe/eightysix#2", "human_labels": ["dependency_or_build", "docs_or_claims", "source_or_other", "ui_workflow_gap"], "issue_number": "2", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "self_attested_unverified", "source_backed": true, "max_confidence": 0.82, "repo_full_name": "TortoiseWolfe/eightysix", "training_usage": "gold_candidate", "confidence_tier": "high_confidence", "source_chain_id": "evidence-chain-issue_chain-f1507a462e7b3c9f", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 16, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"docs_or_claims": 4, "source_or_other": 11, "dependency_or_build": 1}, "linked_commit_count": 1, "helicopter_view_count": 4, "source_artifact_count": 2, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_high_confidence"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 0}, "text": "Comment chain pattern product: bad_chains\nRepo: TortoiseWolfe/eightysix\nThread: TortoiseWolfe/eightysix#2\nOutcome: self_attested_unverified\nThread label: thread_has_human_issue_and_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_high_confidence\nChain evidence:\nIssue/PR evidence chain: TortoiseWolfe/eightysix#2\nRepo: TortoiseWolfe/eightysix\nThread label: thread_has_human_issue_and_fix_context\nOutcome: self_attested_unverified\nComment count: 1\nLinked commit count: 1\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 16\nLabels: {'ui_workflow_gap': 1}\nPolarities: {'bad': 1}\nChanged file labels: {'dependency_or_build': 1, 'docs_or_claims': 4, 'source_or_other': 11}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-ce048c6492b09cfb\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"ui_workflow_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/TortoiseWolfe/eightysix/pull/2\",\n    \"text\": \"GitHub feedback: ui_workflow_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: TortoiseWolfe/eightysix\\nAuthor: TortoiseWolfe (User)\\nURL: https://github.com/TortoiseWolfe/eightysix/pull/2\\nTitle: 049-eighty-six-list: spec + 6 wireframes (the core product)\\nBody:\\n## What this is\\n\\nThe soul of **86**: the live out-of-stock list and the capture experience.\\n\\n- `features/_uncategorized/049-eighty-six-list/spec.md` \u2014 4 user stories, 17 FRs, 6 SCs; clarify encoded (restock = circle-check baseline **and** swipe power path, shared undo toast)\\n- **6 wireframes**, all passing `validate.py` with 0 errors:\\n  - `01-eighty-six-list` \u00b7 `02-add-item-type` \u00b7 `03-add-item-scan-snap-preview` \u00b7 `04-confirm-and-duplicate` \u00b7 `05-restock-and-history` (light UX)\\n  - `06-capture-data-flow` (dark \u2014 consent-gated event pipeline, Constitution Principles II/IV)\\n\\n## How to review\\n\\nThe GitHub Pages preview serves the wireframe viewer \u2014 review feature **049 - Eighty Six List** alongside **048 - Household Membership** and leave feedback here.\\n\\n**Wireframe sign-off deferred** until team feedback lands.\\n\\n\ud83e\udd16 Generated with [Claude Code](https://claude.com/claude-code)\"\n  }\n]\nChanged files:\n[\n  {\n    \"id\": \"github-pr-file-file-900b59b8318d86db\",\n    \"filename\": \"features/_uncategorized/049-eighty-six-list/checklists/requirements.md\",\n    \"label\": \"dependency_or_build\",\n    \"status\": \"added\",\n    \"additions\": 36,\n    \"deletions\": 0,\n    \"changes\": 36,\n    \"blob_url\": \"https://github.com/TortoiseWolfe/eightysix/blob/d9a62936d2b9dd899a0cf7e6d6cc109d53f4db0e/features%2F_uncategorized%2F049-eighty-six-list%2Fchecklists%2Frequirements.md\"\n  },\n  {\n    \"id\": \"github-pr-file-file-fb5fa0dc108440aa\",\n    \"filename\": \"features/_uncategorized/049-eighty-six-list/spec.md\",\n    \"label\": \"docs_or_claims\",\n    \"status\": \"added\",\n    \"additions\": 189,\n    \"deletions\": 0,\n    \"changes\": 189,\n    \"blob_url\"\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/TortoiseWolfe/eightysix", "source_id": "comment-chain-pattern-bad_chains-fc2801487c9b3a94", "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": "TortoiseWolfe/eightysix", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "gold_candidate"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: TortoiseWolfe/eightysix"}, "properties": {"repobilityId": 441697, "scanner": "foundry_dataset", "fingerprint": "2a8a2bac9ce8e8d51900b42c20ce3ab2a279edccd9b7108c60b21be5eabe28f4", "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": "TortoiseWolfe/eightysix#1", "human_labels": ["dependency_or_build", "docs_or_claims", "source_or_other", "test_ci_gap", "test_or_ci"], "issue_number": "1", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "self_attested_unverified", "source_backed": true, "max_confidence": 0.82, "repo_full_name": "TortoiseWolfe/eightysix", "training_usage": "gold_candidate", "confidence_tier": "high_confidence", "source_chain_id": "evidence-chain-issue_chain-3d700c1fa26e0f2c", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 19, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"test_or_ci": 1, "docs_or_claims": 2, "source_or_other": 12, "dependency_or_build": 4}, "linked_commit_count": 1, "helicopter_view_count": 4, "source_artifact_count": 2, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_high_confidence", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 0}, "text": "Comment chain pattern product: bad_chains\nRepo: TortoiseWolfe/eightysix\nThread: TortoiseWolfe/eightysix#1\nOutcome: self_attested_unverified\nThread label: thread_has_human_issue_and_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_high_confidence, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: TortoiseWolfe/eightysix#1\nRepo: TortoiseWolfe/eightysix\nThread label: thread_has_human_issue_and_fix_context\nOutcome: self_attested_unverified\nComment count: 1\nLinked commit count: 1\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 19\nLabels: {'test_ci_gap': 1}\nPolarities: {'bad': 1}\nChanged file labels: {'test_or_ci': 1, 'source_or_other': 12, 'dependency_or_build': 4, 'docs_or_claims': 2}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-4b278c5d69bd855b\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"test_ci_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/TortoiseWolfe/eightysix/pull/1\",\n    \"text\": \"GitHub feedback: test_ci_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: TortoiseWolfe/eightysix\\nAuthor: TortoiseWolfe (User)\\nURL: https://github.com/TortoiseWolfe/eightysix/pull/1\\nTitle: 048-household-membership: spec + 6 wireframes (preview for collaborator review)\\nBody:\\n## What this is\\n\\nFirst feature of **86** (household out-of-stock tracker) through the SpecKit cascade:\\n\\n- `features/_uncategorized/048-household-membership/spec.md` \u2014 4 user stories, 17 FRs, 6 SCs, clarify session encoded (rate-limited invite redemption, 20-member cap, 7-day/10-use invite defaults)\\n- **6 wireframes**, all passing `validate.py` with 0 errors:\\n  - `01-onboarding-create-or-join` \u00b7 `02-invite-roommates` \u00b7 `03-join-household` \u00b7 `04-household-settings` (light UX)\\n  - `05-rls-membership-architecture` \u00b7 `06-invite-redemption-sequence` (dark backend)\\n- Infra riders: validator signature regex accepts both brands; deploy workflow no longer hard-fails without a PageSpeed key\\n\\n## How to review\\n\\nOnce this merges, the GitHub Pages preview serves the wireframe viewer at `/wireframes` \u2014 review the six 048 frames there and leave feedback as comments here or on the repo.\\n\\n**Wireframe sign-off is intentionally defer\"\n  }\n]\nChanged files:\n[\n  {\n    \"id\": \"github-pr-file-file-5ff4b5e6c4ad6f87\",\n    \"filename\": \".github/workflows/deploy.yml\",\n    \"label\": \"test_or_ci\",\n    \"status\": \"modified\",\n    \"additions\": 3,\n    \"deletions\": 3,\n    \"changes\": 6,\n    \"blob_url\": \"https://github.com/TortoiseWolfe/eightysix/blob/a3e9150d812d34dce60e974013694b18f788c716/.github%2Fworkflows%2Fdeploy.yml\"\n  },\n  {\n    \"id\": \"github-pr-file-file-a2e3c018baba85a2\",\n    \"filename\": \".specify/extensions/wireframe/scripts/inspect-wireframes.py\",\n    \"label\": \"source_or_other\",\n    \"status\": \"modified\",\n    \"additions\": 2,\n    \"deletions\": 2,\n    \"changes\": 4,\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/TortoiseWolfe/eightysix", "source_id": "comment-chain-pattern-bad_chains-796e7f11875781ee", "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": "TortoiseWolfe/eightysix", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "gold_candidate"}}}, {"ruleId": "foundry_fake_real_gap", "level": "error", "message": {"text": "Foundry mined mock as real or placeholder: TortoiseWolfe/eightysix"}, "properties": {"repobilityId": 451085, "scanner": "foundry_dataset", "fingerprint": "9c5bd447e40aac239a6bee95efaed1c51373baedb76db0d9eeb9d8cd36a10271", "category": "practices", "severity": "critical", "confidence": 0.82, "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": "graph_query_record", "title": "Mock, sample, placeholder, or self-attested behavior treated as real", "intent": "Hard negatives for fake completeness and missing real data paths.", "labels": {"docs_or_claims": 4, "source_or_other": 11, "ui_workflow_gap": 1, "dependency_or_build": 1, "generated_provenance": 1, "mostly follows blueprint": 1, "self_attested_unverified": 3, "issue_or_pull_request_thread": 1, "blueprint_human_gap_disagreement": 1, "thread_has_human_issue_and_fix_context": 2, "self_attested_or_generated_fix_unverified": 1}, "source": "graph_query_export", "motif_id": "mock_as_real_or_placeholder", "outcomes": {"self_attested_unverified": 6}, "polarity": "bad", "query_id": "mock_as_real_or_placeholder", "severity": "critical", "ci_labels": {}, "synthetic": false, "edge_count": 56, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 16, "alignment_uses_comment": 1, "alignment_uses_finding": 1, "chain_has_link_quality": 4, "comment_aligns_finding": 1, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 1, "comment_chain_links_commit": 1, "comment_chain_touches_file": 12, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 29, "node_types": {"repo": 1, "commit": 1, "thread": 1, "comment": 1, "pr_file": 16, "alignment": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 1, "blueprint_finding": 1}, "query_type": "motif_query", "thread_key": "TortoiseWolfe/eightysix#2", "issue_number": "2", "quality_tiers": {"high_confidence": 3, "assumption_check": 1}, "repo_full_name": "TortoiseWolfe/eightysix", "training_usage": "hard_negative", "source_motif_id": "graph-pattern-motif-thread-c676627b6ddd8914", "graph_gold_label": "supported_by_high_confidence_link", "changed_file_labels": {"docs_or_claims": 16, "source_or_other": 44, "dependency_or_build": 4}}, "text": "Graph query export: Mock, sample, placeholder, or self-attested behavior treated as real\nQuery id: mock_as_real_or_placeholder\nQuery type: motif_query\nIntent: Hard negatives for fake completeness and missing real data paths.\nMotif: mock_as_real_or_placeholder\nTraining usage: hard_negative\nGraph gold label: supported_by_high_confidence_link\nRepo: TortoiseWolfe/eightysix\nThread: TortoiseWolfe/eightysix#2\nEvidence:\nGraph motif: Mock, sample, placeholder, or self-attested behavior treated as real\nMotif id: mock_as_real_or_placeholder\nPolarity: bad\nTraining usage: hard_negative\nSeverity: critical\nRepo: TortoiseWolfe/eightysix\nThread: TortoiseWolfe/eightysix#2\nGraph gold label: supported_by_high_confidence_link\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: TortoiseWolfe/eightysix#2\nRepo: TortoiseWolfe/eightysix\nIssue/PR number: 2\nGraph consistency label: supported_by_high_confidence_link\nNodes: 29\nEdges: 56\nNode types: {'pr_file': 16, 'link_quality': 4, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'commit': 1, 'issue_chain': 1, 'fix_outcome': 1, 'alignment': 1, 'blueprint_finding': 1}\nEdge types: {'thread_touches_file': 16, 'comment_chain_touches_file': 12, 'issue_chain_touches_file': 12, 'chain_has_link_quality': 4, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'comment_chain_links_commit': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1, 'alignment_uses_comment': 1, 'alignment_uses_finding': 1, 'comment_aligns_finding': 1}\nLabels: {'source_or_other': 11, 'docs_or_claims': 4, 'self_attested_unverified': 3, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'ui_workflow_gap': 1, 'dependency_or_build': 1, 'self_attested_or_generated_fix_unverified': 1, 'generated_provenance': 1, 'blueprint_human_gap_disagreement': 1, 'mostly follows blueprint': 1}\nOutcomes: {'self_attested_unverified': 6}\nQuality tiers: {'high_confidence': 3, 'assumption_check': 1}\nCI labels: {}\nCurriculum targets:\n- Train real-data plumbing and mock-removal tasks from source to UI.\n- Use as hard negatives for dashboards or apps claiming real runs without provenance.\nAssumption checks:\n- Is user-visible behavior backed by real storage/API/CI artifacts?\n- Are placeholders, sample data, or generated claims still in a production path?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/TortoiseWolfe/eightysix", "source_id": "graph-query-motif_query-874bcd355f825489", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/mock_as_real_or_placeholder/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "TortoiseWolfe/eightysix", "source_dataset": "graph_queries/mock_as_real_or_placeholder", "training_usage": "hard_negative"}}}, {"ruleId": "foundry_fake_real_gap", "level": "error", "message": {"text": "Foundry mined mock as real or placeholder: TortoiseWolfe/eightysix"}, "properties": {"repobilityId": 451084, "scanner": "foundry_dataset", "fingerprint": "781a2edd32849d294dc153f6cacf6b8305d925916f1e5517d8ecd90c3a2b8bf8", "category": "practices", "severity": "critical", "confidence": 0.82, "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": "graph_query_record", "title": "Mock, sample, placeholder, or self-attested behavior treated as real", "intent": "Hard negatives for fake completeness and missing real data paths.", "labels": {"test_or_ci": 1, "test_ci_gap": 1, "docs_or_claims": 2, "source_or_other": 12, "dependency_or_build": 4, "generated_provenance": 1, "mostly follows blueprint": 1, "self_attested_unverified": 3, "issue_or_pull_request_thread": 1, "blueprint_human_gap_disagreement": 1, "thread_has_human_issue_and_fix_context": 2, "self_attested_or_generated_fix_unverified": 1}, "source": "graph_query_export", "motif_id": "mock_as_real_or_placeholder", "outcomes": {"self_attested_unverified": 6}, "polarity": "bad", "query_id": "mock_as_real_or_placeholder", "severity": "critical", "ci_labels": {}, "synthetic": false, "edge_count": 59, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 19, "alignment_uses_comment": 1, "alignment_uses_finding": 1, "chain_has_link_quality": 4, "comment_aligns_finding": 1, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 1, "comment_chain_links_commit": 1, "comment_chain_touches_file": 12, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 32, "node_types": {"repo": 1, "commit": 1, "thread": 1, "comment": 1, "pr_file": 19, "alignment": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 1, "blueprint_finding": 1}, "query_type": "motif_query", "thread_key": "TortoiseWolfe/eightysix#1", "issue_number": "1", "quality_tiers": {"high_confidence": 3, "assumption_check": 1}, "repo_full_name": "TortoiseWolfe/eightysix", "training_usage": "hard_negative", "source_motif_id": "graph-pattern-motif-thread-19f8f3a14b4aa683", "graph_gold_label": "supported_by_high_confidence_link", "changed_file_labels": {"test_or_ci": 4, "docs_or_claims": 8, "source_or_other": 48, "dependency_or_build": 16}}, "text": "Graph query export: Mock, sample, placeholder, or self-attested behavior treated as real\nQuery id: mock_as_real_or_placeholder\nQuery type: motif_query\nIntent: Hard negatives for fake completeness and missing real data paths.\nMotif: mock_as_real_or_placeholder\nTraining usage: hard_negative\nGraph gold label: supported_by_high_confidence_link\nRepo: TortoiseWolfe/eightysix\nThread: TortoiseWolfe/eightysix#1\nEvidence:\nGraph motif: Mock, sample, placeholder, or self-attested behavior treated as real\nMotif id: mock_as_real_or_placeholder\nPolarity: bad\nTraining usage: hard_negative\nSeverity: critical\nRepo: TortoiseWolfe/eightysix\nThread: TortoiseWolfe/eightysix#1\nGraph gold label: supported_by_high_confidence_link\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: TortoiseWolfe/eightysix#1\nRepo: TortoiseWolfe/eightysix\nIssue/PR number: 1\nGraph consistency label: supported_by_high_confidence_link\nNodes: 32\nEdges: 59\nNode types: {'pr_file': 19, 'link_quality': 4, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'commit': 1, 'issue_chain': 1, 'fix_outcome': 1, 'alignment': 1, 'blueprint_finding': 1}\nEdge types: {'thread_touches_file': 19, 'comment_chain_touches_file': 12, 'issue_chain_touches_file': 12, 'chain_has_link_quality': 4, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'comment_chain_links_commit': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1, 'alignment_uses_comment': 1, 'alignment_uses_finding': 1, 'comment_aligns_finding': 1}\nLabels: {'source_or_other': 12, 'dependency_or_build': 4, 'self_attested_unverified': 3, 'docs_or_claims': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 1, 'test_or_ci': 1, 'self_attested_or_generated_fix_unverified': 1, 'generated_provenance': 1, 'blueprint_human_gap_disagreement': 1, 'mostly follows blueprint': 1}\nOutcomes: {'self_attested_unverified': 6}\nQuality tiers: {'high_confidence': 3, 'assumption_check': 1}\nCI labels: {}\nCurriculum targets:\n- Train real-data plumbing and mock-removal tasks from source to UI.\n- Use as hard negatives for dashboards or apps claiming real runs without provenance.\nAssumption checks:\n- Is user-visible behavior backed by real storage/API/CI artifacts?\n- Are placeholders, sample data, or generated claims still in a production path?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/TortoiseWolfe/eightysix", "source_id": "graph-query-motif_query-7424073283b8c7b8", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/mock_as_real_or_placeholder/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "TortoiseWolfe/eightysix", "source_dataset": "graph_queries/mock_as_real_or_placeholder", "training_usage": "hard_negative"}}}, {"ruleId": "foundry_failing_ci_claim", "level": "error", "message": {"text": "Foundry mined claimed resolved with failing ci: TortoiseWolfe/eightysix"}, "properties": {"repobilityId": 450383, "scanner": "foundry_dataset", "fingerprint": "826d4a46ca625b785323148694227ab767e58e4ae78bc1b65c7f9e5fecb7d125", "category": "ci", "severity": "critical", "confidence": 0.86, "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": "graph_query_record", "title": "Claimed resolved with failing CI", "intent": "Hard negatives where CI/failure evidence contradicts a resolution claim.", "labels": {"docs_or_claims": 8, "source_or_other": 18, "ci_failure_signal": 1, "dependency_or_build": 2, "security_or_secrets": 1, "generated_provenance": 2, "agent_instruction_gap": 1, "issue_or_pull_request_thread": 1, "thread_has_human_issue_and_fix_context": 2, "claimed_resolved_with_failing_ci_signal": 3, "human_reported_issue_then_failing_ci_fix_attempt": 1}, "source": "graph_query_export", "motif_id": "claimed_resolved_with_failing_ci", "outcomes": {"claimed_resolved_with_failing_ci_signal": 6}, "polarity": "bad", "query_id": "claimed_resolved_with_failing_ci", "severity": "critical", "ci_labels": {"ci_failure_signal": 2}, "synthetic": false, "edge_count": 67, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 28, "comment_chain_has_ci": 1, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 1, "comment_chain_links_commit": 3, "comment_chain_touches_file": 12, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 41, "node_types": {"repo": 1, "commit": 3, "thread": 1, "comment": 1, "pr_file": 28, "ci_summary": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "TortoiseWolfe/eightysix#3", "issue_number": "3", "quality_tiers": {"high_confidence": 3}, "repo_full_name": "TortoiseWolfe/eightysix", "training_usage": "hard_negative", "source_motif_id": "graph-pattern-motif-thread-dcd067d9aaf39d09", "graph_gold_label": "contradicted_by_ci_or_failure_signal", "changed_file_labels": {"docs_or_claims": 32, "source_or_other": 72, "dependency_or_build": 8}}, "text": "Graph query export: Claimed resolved with failing CI\nQuery id: claimed_resolved_with_failing_ci\nQuery type: motif_query\nIntent: Hard negatives where CI/failure evidence contradicts a resolution claim.\nMotif: claimed_resolved_with_failing_ci\nTraining usage: hard_negative\nGraph gold label: contradicted_by_ci_or_failure_signal\nRepo: TortoiseWolfe/eightysix\nThread: TortoiseWolfe/eightysix#3\nEvidence:\nGraph motif: Claimed resolved while CI or failure evidence contradicts it\nMotif id: claimed_resolved_with_failing_ci\nPolarity: bad\nTraining usage: hard_negative\nSeverity: critical\nRepo: TortoiseWolfe/eightysix\nThread: TortoiseWolfe/eightysix#3\nGraph gold label: contradicted_by_ci_or_failure_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: TortoiseWolfe/eightysix#3\nRepo: TortoiseWolfe/eightysix\nIssue/PR number: 3\nGraph consistency label: contradicted_by_ci_or_failure_signal\nNodes: 41\nEdges: 67\nNode types: {'pr_file': 28, 'commit': 3, 'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'ci_summary': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'thread_touches_file': 28, 'comment_chain_touches_file': 12, 'issue_chain_touches_file': 12, 'comment_chain_links_commit': 3, 'chain_has_link_quality': 3, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'comment_chain_has_ci': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'source_or_other': 18, 'docs_or_claims': 8, 'claimed_resolved_with_failing_ci_signal': 3, 'dependency_or_build': 2, 'generated_provenance': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'agent_instruction_gap': 1, 'human_reported_issue_then_failing_ci_fix_attempt': 1, 'security_or_secrets': 1, 'ci_failure_signal': 1}\nOutcomes: {'claimed_resolved_with_failing_ci_signal': 6}\nQuality tiers: {'high_confidence': 3}\nCI labels: {'ci_failure_signal': 2}\nCurriculum targets:\n- Reject confident fix summaries when CI or checks fail.\n- Teach judge models to prefer external verification over generated narrative.\nAssumption checks:\n- Did checks fail on the linked commit?\n- Does the thread claim resolution despite failing or incomplete verification?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/TortoiseWolfe/eightysix", "source_id": "graph-query-motif_query-dd0fc8a8b319ca23", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/claimed_resolved_with_failing_ci/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "TortoiseWolfe/eightysix", "source_dataset": "graph_queries/claimed_resolved_with_failing_ci", "training_usage": "hard_negative"}}}, {"ruleId": "scanner-b0e05cfa9fbe666b", "level": "note", "message": {"text": "Possibly dead Python function: refresh_skill_index"}, "properties": {"repobilityId": "34c7d21c37e916e4", "scanner": "scanner-primary", "fingerprint": "b0e05cfa9fbe666b", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/refresh-inventories.py:60"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e1bfcd7c9602b9a7", "level": "note", "message": {"text": "Possibly dead Python function: refresh_dependency_graph"}, "properties": {"repobilityId": "69bb1e4e2d834328", "scanner": "scanner-primary", "fingerprint": "e1bfcd7c9602b9a7", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/refresh-inventories.py:118"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-28856779da6ede49", "level": "note", "message": {"text": "Possibly dead Python function: refresh_workflow_status"}, "properties": {"repobilityId": "abef5c88d2c96de0", "scanner": "scanner-primary", "fingerprint": "28856779da6ede49", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/refresh-inventories.py:160"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-bd6b8906b6791c8a", "level": "note", "message": {"text": "Possibly dead Python function: refresh_security_touchpoints"}, "properties": {"repobilityId": "c84ce40184d8c82b", "scanner": "scanner-primary", "fingerprint": "bd6b8906b6791c8a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/refresh-inventories.py:205"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5ab9254108175d81", "level": "note", "message": {"text": "Possibly dead Python function: refresh_screen_inventory"}, "properties": {"repobilityId": "8bf862ee4bca3549", "scanner": "scanner-primary", "fingerprint": "5ab9254108175d81", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/refresh-inventories.py:249"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-23cb44825a18e3a0", "level": "note", "message": {"text": "Possibly dead Python function: refresh_acceptance_criteria"}, "properties": {"repobilityId": "ad187e0d103d2bdb", "scanner": "scanner-primary", "fingerprint": "23cb44825a18e3a0", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/refresh-inventories.py:286"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-961c3f43edaf1afe", "level": "note", "message": {"text": "Possibly dead Python function: count_decisions"}, "properties": {"repobilityId": "aa133b9a3cfd78d6", "scanner": "scanner-primary", "fingerprint": "961c3f43edaf1afe", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/project-status.py:138"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c201a2be22fb8ed4", "level": "note", "message": {"text": "Possibly dead Python function: extract_all"}, "properties": {"repobilityId": "b15a77e3806e3c02", "scanner": "scanner-primary", "fingerprint": "c201a2be22fb8ed4", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/extract-spec.py:182"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-bf420346f2234b98", "level": "note", "message": {"text": "Possibly dead Python function: apply_fix"}, "properties": {"repobilityId": "63568dd806bb6120", "scanner": "scanner-primary", "fingerprint": "bf420346f2234b98", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/svg-autofix.py:161"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-77ad9a5cf24642be", "level": "note", "message": {"text": "Possibly dead Python function: load_constitution"}, "properties": {"repobilityId": "e34830712ce85aef", "scanner": "scanner-primary", "fingerprint": "77ad9a5cf24642be", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/constitution-check.py:104"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8ad7da93bb78029c", "level": "note", "message": {"text": "Possibly dead Python function: cmd_export"}, "properties": {"repobilityId": "3b8bb19d51ab5ed8", "scanner": "scanner-primary", "fingerprint": "8ad7da93bb78029c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/build-inventory.py:303"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-74a9ee1777617073", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/fixtures/test-users.ts:152"}, "properties": {"repobilityId": "f6fe518ad8964c85", "scanner": "scanner-primary", "fingerprint": "74a9ee1777617073", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ff52fa0be1799b5f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/global-setup.ts:22"}, "properties": {"repobilityId": "be9e82038c157643", "scanner": "scanner-primary", "fingerprint": "ff52fa0be1799b5f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fa50e315f2822819", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/auth.setup.ts:43"}, "properties": {"repobilityId": "0280aad806fb45ec", "scanner": "scanner-primary", "fingerprint": "fa50e315f2822819", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-de4b8e92109cf593", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/tests/broken-links.spec.ts:30"}, "properties": {"repobilityId": "fbee486aa8df309d", "scanner": "scanner-primary", "fingerprint": "de4b8e92109cf593", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b9b5e12cb03d6968", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/tests/blog-touch-targets.spec.ts:97"}, "properties": {"repobilityId": "633b332c4770c05f", "scanner": "scanner-primary", "fingerprint": "b9b5e12cb03d6968", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-351bfb4a97dcf4d6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/tests/mobile-navigation.spec.ts:114"}, "properties": {"repobilityId": "53039945ed4d6fa2", "scanner": "scanner-primary", "fingerprint": "351bfb4a97dcf4d6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-079b60368af59c42", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/tests/pwa-installation.spec.ts:87"}, "properties": {"repobilityId": "84031891b7a15cd1", "scanner": "scanner-primary", "fingerprint": "079b60368af59c42", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7509f494101998ac", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/auth/rate-limiting.spec.ts:215"}, "properties": {"repobilityId": "2eb8297ea815142e", "scanner": "scanner-primary", "fingerprint": "7509f494101998ac", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d2fb543e17e3e7e6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/auth/protected-routes.spec.ts:217"}, "properties": {"repobilityId": "5f56c32406c5370a", "scanner": "scanner-primary", "fingerprint": "d2fb543e17e3e7e6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1c3ab93fd758c0f7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/auth/sign-up.spec.ts:116"}, "properties": {"repobilityId": "b5a1f8ea6bfcbd81", "scanner": "scanner-primary", "fingerprint": "1c3ab93fd758c0f7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7daa2e83176af912", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/auth/session-persistence.spec.ts:264"}, "properties": {"repobilityId": "4c230c75f3e90c35", "scanner": "scanner-primary", "fingerprint": "7daa2e83176af912", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-072352e50f2b8acb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/utils/test-user-factory.ts:147"}, "properties": {"repobilityId": "8ecc0c7a6eaf9485", "scanner": "scanner-primary", "fingerprint": "072352e50f2b8acb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2d2bb27148d841e0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/utils/rate-limit-admin.ts:58"}, "properties": {"repobilityId": "3452eebec06bb94d", "scanner": "scanner-primary", "fingerprint": "2d2bb27148d841e0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-efe6f0ca601c5cc5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/messaging/offline-queue.spec.ts:90"}, "properties": {"repobilityId": "f0c70e14f5b22308", "scanner": "scanner-primary", "fingerprint": "efe6f0ca601c5cc5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bd0d1414cb69af3a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/messaging/encrypted-messaging.spec.ts:94"}, "properties": {"repobilityId": "657448a6d992ec18", "scanner": "scanner-primary", "fingerprint": "bd0d1414cb69af3a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-082b7480d06d15c3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/messaging/complete-user-workflow.spec.ts:101"}, "properties": {"repobilityId": "4b25c1b92657d012", "scanner": "scanner-primary", "fingerprint": "082b7480d06d15c3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-453691130565ca78", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/messaging/group-chat-multiuser.spec.ts:113"}, "properties": {"repobilityId": "196048523c7eab33", "scanner": "scanner-primary", "fingerprint": "453691130565ca78", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b1fbe9686fde03cd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/messaging/message-editing.spec.ts:47"}, "properties": {"repobilityId": "693d364020ed287c", "scanner": "scanner-primary", "fingerprint": "b1fbe9686fde03cd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ec9547fad2f65748", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 tests/e2e/avatar/upload.spec.ts:445"}, "properties": {"repobilityId": "c81997952076f205", "scanner": "scanner-primary", "fingerprint": "ec9547fad2f65748", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-f8b582bf6ae06305", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/debug/capture-decryption-logs.spec.ts:84"}, "properties": {"repobilityId": "cbed8a365baa1e84", "scanner": "scanner-primary", "fingerprint": "f8b582bf6ae06305", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a399250039f59ef1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/payment/07-performance.spec.ts:69"}, "properties": {"repobilityId": "b552da4f26b445de", "scanner": "scanner-primary", "fingerprint": "a399250039f59ef1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c9ac4d0d72f926fb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/payment/04-gdpr-consent.spec.ts:120"}, "properties": {"repobilityId": "8393501bd79ee2ad", "scanner": "scanner-primary", "fingerprint": "c9ac4d0d72f926fb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-61480d5954d22279", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/rls/__setup__/cleanup-stale.ts:20"}, "properties": {"repobilityId": "595d28980ff42c1f", "scanner": "scanner-primary", "fingerprint": "61480d5954d22279", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ae563bed9f257258", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 docs/specs/040-feature-040-code/contracts/result.ts:85"}, "properties": {"repobilityId": "772583ed54b1b999", "scanner": "scanner-primary", "fingerprint": "ae563bed9f257258", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0aa6763368c57417", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-sitemap.js:46"}, "properties": {"repobilityId": "97c662424750e259", "scanner": "scanner-primary", "fingerprint": "0aa6763368c57417", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c3a75d5343859cab", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-chunks.js:24"}, "properties": {"repobilityId": "5b5e9c9754ceb5d0", "scanner": "scanner-primary", "fingerprint": "c3a75d5343859cab", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b9ee5510c790acfd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-theme-contrast.js:45"}, "properties": {"repobilityId": "3176e802b1aef203", "scanner": "scanner-primary", "fingerprint": "b9ee5510c790acfd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f320f70756ae278c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/update-task-completion.js:171"}, "properties": {"repobilityId": "498ae8c4ab0c5542", "scanner": "scanner-primary", "fingerprint": "f320f70756ae278c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-841fa9e086ddd548", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/detect-project.js:172"}, "properties": {"repobilityId": "b965dcfcc482eedd", "scanner": "scanner-primary", "fingerprint": "841fa9e086ddd548", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-62f1f817ef1df847", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verify-zero-knowledge.ts:28"}, "properties": {"repobilityId": "f13171bb842c5ce3", "scanner": "scanner-primary", "fingerprint": "62f1f817ef1df847", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-74a034a82bb41c31", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 scripts/retry-failed-webhooks.ts:89"}, "properties": {"repobilityId": "87f3ecf4e4852d6a", "scanner": "scanner-primary", "fingerprint": "74a034a82bb41c31", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-e8f08990e5a3256b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/retry-failed-webhooks.ts:39"}, "properties": {"repobilityId": "ed2e13f870b56687", "scanner": "scanner-primary", "fingerprint": "e8f08990e5a3256b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9afed7f97be6b62f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/reset-database.ts:57"}, "properties": {"repobilityId": "859996991c3803dc", "scanner": "scanner-primary", "fingerprint": "9afed7f97be6b62f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-17d2b38b3ccd8fcb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-deployment-history.js:126"}, "properties": {"repobilityId": "8a9955d1ccabdc01", "scanner": "scanner-primary", "fingerprint": "17d2b38b3ccd8fcb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4af29c1079aade9d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-author-config.js:40"}, "properties": {"repobilityId": "76e68ff36040bfec", "scanner": "scanner-primary", "fingerprint": "4af29c1079aade9d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d01091fa39b37adc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/initialize-test-keys.ts:29"}, "properties": {"repobilityId": "4709fce2df723428", "scanner": "scanner-primary", "fingerprint": "d01091fa39b37adc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c298cba37bf1726e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/list-test-users.ts:10"}, "properties": {"repobilityId": "fdb68b67d9650b7e", "scanner": "scanner-primary", "fingerprint": "c298cba37bf1726e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-408fcb1432fb802d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-auto-key-generation.ts:13"}, "properties": {"repobilityId": "91f3752f59b117b3", "scanner": "scanner-primary", "fingerprint": "408fcb1432fb802d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f37746c32ab955ca", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-blog-stories.js:51"}, "properties": {"repobilityId": "6210c202e6845e6c", "scanner": "scanner-primary", "fingerprint": "f37746c32ab955ca", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bce46e096861e5e1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-pwa.js:61"}, "properties": {"repobilityId": "2998167d916aadc2", "scanner": "scanner-primary", "fingerprint": "bce46e096861e5e1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b42a58e4397f4af9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-blog-test-types.js:623"}, "properties": {"repobilityId": "305e131bcef2ca69", "scanner": "scanner-primary", "fingerprint": "b42a58e4397f4af9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8470fe2ff65aa69d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-rss.js:21"}, "properties": {"repobilityId": "fe892d29ce9fb916", "scanner": "scanner-primary", "fingerprint": "8470fe2ff65aa69d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a24cfb5102eaa9ca", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/take-screenshot.js:16"}, "properties": {"repobilityId": "889afdf53bf60a8b", "scanner": "scanner-primary", "fingerprint": "a24cfb5102eaa9ca", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-dbd90184c2302470", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-any-types.js:93"}, "properties": {"repobilityId": "2217331c65e2cb70", "scanner": "scanner-primary", "fingerprint": "dbd90184c2302470", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-38adb7ba3bcaeb9b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-encrypted-messages.ts:79"}, "properties": {"repobilityId": "8a9a718267a3cb6c", "scanner": "scanner-primary", "fingerprint": "38adb7ba3bcaeb9b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ce7d039006f5fb77", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-connections.ts:18"}, "properties": {"repobilityId": "c97108a784f72cb5", "scanner": "scanner-primary", "fingerprint": "ce7d039006f5fb77", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-189820411b08aab6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/prime-supabase.ts:27"}, "properties": {"repobilityId": "fab0a28eeca6e7ba", "scanner": "scanner-primary", "fingerprint": "189820411b08aab6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-29112eca10fc4e4f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-test-users.ts:114"}, "properties": {"repobilityId": "4cc5f022e18c32a2", "scanner": "scanner-primary", "fingerprint": "29112eca10fc4e4f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-54770c2cac1f1630", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-all-blog-tests.js:569"}, "properties": {"repobilityId": "9727638cd8a632f5", "scanner": "scanner-primary", "fingerprint": "54770c2cac1f1630", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-278ffd93afb211b5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-contract-fixtures.ts:65"}, "properties": {"repobilityId": "5df60b93af7a7552", "scanner": "scanner-primary", "fingerprint": "278ffd93afb211b5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3da6bc9103e8ec01", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-blog-tests.js:111"}, "properties": {"repobilityId": "c589021efae35e85", "scanner": "scanner-primary", "fingerprint": "3da6bc9103e8ec01", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f145295914421254", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/validate-structure.js:280"}, "properties": {"repobilityId": "7d38c7ae1a9a06ba", "scanner": "scanner-primary", "fingerprint": "f145295914421254", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f45a490c82f2798b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/audit-components.js:130"}, "properties": {"repobilityId": "60658694bf78cbed", "scanner": "scanner-primary", "fingerprint": "f45a490c82f2798b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c6a2893ff1a59e64", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-blog-data.js:138"}, "properties": {"repobilityId": "f1bf844201ef3eec", "scanner": "scanner-primary", "fingerprint": "c6a2893ff1a59e64", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b4adbb143faae25e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/create-test-conversation.ts:30"}, "properties": {"repobilityId": "b909aec02de6cdc3", "scanner": "scanner-primary", "fingerprint": "b4adbb143faae25e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-65b6e1e2e412c65f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/validate-breakpoints.ts:60"}, "properties": {"repobilityId": "fce92751221490fc", "scanner": "scanner-primary", "fingerprint": "65b6e1e2e412c65f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-50330c1de66c716f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-manifest.js:196"}, "properties": {"repobilityId": "484535a33d1e37dd", "scanner": "scanner-primary", "fingerprint": "50330c1de66c716f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-60074e5a72816261", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-icons.js:33"}, "properties": {"repobilityId": "50ac322bf6978bfe", "scanner": "scanner-primary", "fingerprint": "60074e5a72816261", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-842c2c5680f5b980", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 scripts/migrate-components.js:304"}, "properties": {"repobilityId": "7c74457551471a80", "scanner": "scanner-primary", "fingerprint": "842c2c5680f5b980", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-825010a6a5349150", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-components.js:74"}, "properties": {"repobilityId": "81a1615f5ba6480d", "scanner": "scanner-primary", "fingerprint": "825010a6a5349150", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-94563c81d18256da", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/switch-env.js:90"}, "properties": {"repobilityId": "17157bacb028e7cb", "scanner": "scanner-primary", "fingerprint": "94563c81d18256da", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-23be968fb1a5bdfc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/cleanup-expired-intents.ts:28"}, "properties": {"repobilityId": "b5d28123f2012866", "scanner": "scanner-primary", "fingerprint": "23be968fb1a5bdfc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-75fbabb67478e5ef", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 scripts/__tests__/validate-structure.test.js:232"}, "properties": {"repobilityId": "ab84fbbe9c83b4db", "scanner": "scanner-primary", "fingerprint": "75fbabb67478e5ef", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-819a1c58d3318af6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/supabase/set-auth-config.ts:53"}, "properties": {"repobilityId": "1176d3faa3510e2e", "scanner": "scanner-primary", "fingerprint": "819a1c58d3318af6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9e5fe45fb46273fc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/stripe-webhook/index.ts:63"}, "properties": {"repobilityId": "7c738a141c293866", "scanner": "scanner-primary", "fingerprint": "9e5fe45fb46273fc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a231a843443e86f3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 public/service-worker.js:15"}, "properties": {"repobilityId": "6fcfbf0115e29d81", "scanner": "scanner-primary", "fingerprint": "a231a843443e86f3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-394775ecc056e36c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/types/result.ts:22"}, "properties": {"repobilityId": "10be85ad5635bb81", "scanner": "scanner-primary", "fingerprint": "394775ecc056e36c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5d733fa1ac593503", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/tests/integration/enhanced-processing.test.ts:115"}, "properties": {"repobilityId": "dbfc7e9d88366826", "scanner": "scanner-primary", "fingerprint": "5d733fa1ac593503", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-07b43512906fe07a", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/utils/metadata.tsx:218"}, "properties": {"repobilityId": "78846447aadfe37f", "scanner": "scanner-primary", "fingerprint": "07b43512906fe07a", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-4faf201dd60892d6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/utils/logger.ts:18"}, "properties": {"repobilityId": "cf9d3af0db9250f9", "scanner": "scanner-primary", "fingerprint": "4faf201dd60892d6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ef0016fbe44fcace", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/ThemeScript.tsx:87"}, "properties": {"repobilityId": "4f69472ce9ab5310", "scanner": "scanner-primary", "fingerprint": "ef0016fbe44fcace", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-a3046dfd0c326968", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/molecular/AccountDeletionModal/AccountDeletionModal.stories.tsx:66"}, "properties": {"repobilityId": "8e3ba896321e47d0", "scanner": "scanner-primary", "fingerprint": "a3046dfd0c326968", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cd9020d3e72e0871", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/molecular/AvatarUpload/AvatarUpload.stories.tsx:35"}, "properties": {"repobilityId": "61e6b8c879027a97", "scanner": "scanner-primary", "fingerprint": "cd9020d3e72e0871", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6854852a53e71a8d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/molecular/CodeBlock/CodeBlock.test.tsx:13"}, "properties": {"repobilityId": "014996aa7e3c9c76", "scanner": "scanner-primary", "fingerprint": "6854852a53e71a8d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e2804422e2d2e3b0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/molecular/CodeBlock/CodeBlock.accessibility.test.tsx:12"}, "properties": {"repobilityId": "56564689c721a3bf", "scanner": "scanner-primary", "fingerprint": "e2804422e2d2e3b0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e93ad9816ecbc5ad", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/molecular/CodeBlock/CodeBlock.tsx:79"}, "properties": {"repobilityId": "8b0ce788debc7a22", "scanner": "scanner-primary", "fingerprint": "e93ad9816ecbc5ad", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-ad24647c8aaf9432", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/molecular/CodeBlock/CodeBlock.stories.tsx:29"}, "properties": {"repobilityId": "5862fc5fdd63e777", "scanner": "scanner-primary", "fingerprint": "ad24647c8aaf9432", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-948757df808c489b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/molecular/BlogContent/BlogContent.test.tsx:79"}, "properties": {"repobilityId": "a7e44df1fda655ce", "scanner": "scanner-primary", "fingerprint": "948757df808c489b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7e9e349f48c1f408", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/molecular/BlogContent/BlogContent.tsx:73"}, "properties": {"repobilityId": "11f3517d4e26767c", "scanner": "scanner-primary", "fingerprint": "7e9e349f48c1f408", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-d20f0d7d8a288ac7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/molecular/BlogContent/BlogContent.accessibility.test.tsx:49"}, "properties": {"repobilityId": "851e666a49bcf186", "scanner": "scanner-primary", "fingerprint": "d20f0d7d8a288ac7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ec4b2dc6f5ae5c29", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/molecular/BlogContent/BlogContent.stories.tsx:45"}, "properties": {"repobilityId": "e60ea848a3b1b056", "scanner": "scanner-primary", "fingerprint": "ec4b2dc6f5ae5c29", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-25faeec29d959dfa", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/molecular/IdleTimeoutModal/IdleTimeoutModal.stories.tsx:29"}, "properties": {"repobilityId": "d27a6a6b379a82c4", "scanner": "scanner-primary", "fingerprint": "25faeec29d959dfa", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-abc3ff5597212db8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/molecular/MessageThread/MessageThread.stories.tsx:118"}, "properties": {"repobilityId": "baafdfb182240851", "scanner": "scanner-primary", "fingerprint": "abc3ff5597212db8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ccdcedcdea9ba5b8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/subatomic/Text/Text.stories.tsx:141"}, "properties": {"repobilityId": "f9201c8d0d75a97a", "scanner": "scanner-primary", "fingerprint": "ccdcedcdea9ba5b8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-74c01da7ee66890b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/atomic/MessageBubble/MessageBubble.stories.tsx:86"}, "properties": {"repobilityId": "4230fc3077dae05d", "scanner": "scanner-primary", "fingerprint": "74c01da7ee66890b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0bb394bd4ee32639", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/atomic/DataExportButton/DataExportButton.stories.tsx:50"}, "properties": {"repobilityId": "258bd8be627adf88", "scanner": "scanner-primary", "fingerprint": "0bb394bd4ee32639", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1c08499326d5f7e8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/atomic/QueuedMessageBubble/QueuedMessageBubble.stories.tsx:77"}, "properties": {"repobilityId": "455d46cab989533a", "scanner": "scanner-primary", "fingerprint": "1c08499326d5f7e8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bc1ceb7c0363d78f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/atomic/CopyButton/CopyButton.stories.tsx:33"}, "properties": {"repobilityId": "f53d894db16eaa5a", "scanner": "scanner-primary", "fingerprint": "bc1ceb7c0363d78f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4e2a76ddf35aa705", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/atomic/QueueStatusIndicator/QueueStatusIndicator.tsx:28"}, "properties": {"repobilityId": "bf5a0cdef640a909", "scanner": "scanner-primary", "fingerprint": "4e2a76ddf35aa705", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9b6e5d342d2952cd", "level": "note", "message": {"text": "React Flow <Controls> without dark theming \u2014 src/components/game/Controls/Controls.accessibility.test.tsx:24"}, "properties": {"repobilityId": "699d290491708cfc", "scanner": "scanner-primary", "fingerprint": "9b6e5d342d2952cd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.controls.no-bg"]}}, {"ruleId": "scanner-b9ffe6ec256a92d6", "level": "note", "message": {"text": "React Flow <Controls> without dark theming \u2014 src/components/game/Controls/Controls.test.tsx:34"}, "properties": {"repobilityId": "5f16ee50f67ff5c1", "scanner": "scanner-primary", "fingerprint": "b9ffe6ec256a92d6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.controls.no-bg"]}}, {"ruleId": "scanner-502d74eaca64c612", "level": "note", "message": {"text": "React Flow <Controls> without dark theming \u2014 src/components/game/Scene/Scene.tsx:213"}, "properties": {"repobilityId": "92be2ea127f71811", "scanner": "scanner-primary", "fingerprint": "502d74eaca64c612", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.controls.no-bg"]}}, {"ruleId": "scanner-58d7b54afd6ceb75", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/organisms/CreateGroupModal/CreateGroupModal.stories.tsx:25"}, "properties": {"repobilityId": "f26729bf882e473b", "scanner": "scanner-primary", "fingerprint": "58d7b54afd6ceb75", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d6de5ae0d51feb38", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/organisms/CreateGroupModal/CreateGroupModal.tsx:211"}, "properties": {"repobilityId": "3d88747a6e686d7e", "scanner": "scanner-primary", "fingerprint": "d6de5ae0d51feb38", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-195ad5e552874ffe", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/organisms/A11yDevOverlay/A11yDevOverlay.tsx:279"}, "properties": {"repobilityId": "c519a2ddc1e474e3", "scanner": "scanner-primary", "fingerprint": "195ad5e552874ffe", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c5d4eaafcf9fc1d0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/privacy/ConsentModal/ConsentModal.stories.tsx:68"}, "properties": {"repobilityId": "7c007e8c266e230c", "scanner": "scanner-primary", "fingerprint": "c5d4eaafcf9fc1d0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7b3a63692dd062f0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/privacy/PrivacyControls/PrivacyControls.stories.tsx:119"}, "properties": {"repobilityId": "271be549a5c107c3", "scanner": "scanner-primary", "fingerprint": "7b3a63692dd062f0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2ec5bec81c2af191", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/privacy/CookieConsent/CookieConsent.stories.tsx:83"}, "properties": {"repobilityId": "2e9e0aca8121e055", "scanner": "scanner-primary", "fingerprint": "2ec5bec81c2af191", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cf8e2a5efd35eaac", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/map/LocationButton/LocationButton.stories.tsx:12"}, "properties": {"repobilityId": "4eb76779a0bd086c", "scanner": "scanner-primary", "fingerprint": "cf8e2a5efd35eaac", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-43323d6bf57d80af", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/map/LocationMarker/LocationMarker.stories.tsx:101"}, "properties": {"repobilityId": "894644b428239ffb", "scanner": "scanner-primary", "fingerprint": "43323d6bf57d80af", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-331aa4c5d8b8d5b2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/map/GeolocationConsent/GeolocationConsent.stories.tsx:39"}, "properties": {"repobilityId": "7e54522f6b27a76d", "scanner": "scanner-primary", "fingerprint": "331aa4c5d8b8d5b2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2bbd92638699eca4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/forms/ContactForm/ContactForm.stories.tsx:37"}, "properties": {"repobilityId": "356782d85e107780", "scanner": "scanner-primary", "fingerprint": "2bbd92638699eca4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a5894499eba8701f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/payment/PaymentStatusDisplay/PaymentStatusDisplay.stories.tsx:106"}, "properties": {"repobilityId": "93bcfa9cee82492e", "scanner": "scanner-primary", "fingerprint": "a5894499eba8701f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8c8af9ca6d566d4e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/payment/PaymentQueuePanel/PaymentQueuePanel.tsx:164"}, "properties": {"repobilityId": "ec74621d0b68bb3b", "scanner": "scanner-primary", "fingerprint": "8c8af9ca6d566d4e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-11d77104783a357b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/payment/PaymentConsentModal/PaymentConsentModal.stories.tsx:82"}, "properties": {"repobilityId": "a24f2fb9f784436d", "scanner": "scanner-primary", "fingerprint": "11d77104783a357b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fa930b21a2c1b3ef", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/payment/PaymentButton/PaymentButton.stories.tsx:151"}, "properties": {"repobilityId": "f96bee8d19dc587f", "scanner": "scanner-primary", "fingerprint": "fa930b21a2c1b3ef", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0dd323ec90c2adb4", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/blog/[slug]/page.tsx:201"}, "properties": {"repobilityId": "edc166468e8868e7", "scanner": "scanner-primary", "fingerprint": "0dd323ec90c2adb4", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-c59f54cf8fa5f1ed", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/messages/new-group/page.tsx:221"}, "properties": {"repobilityId": "17cbdd2f816820bf", "scanner": "scanner-primary", "fingerprint": "c59f54cf8fa5f1ed", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-71fbcd810058631f", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/lib/analytics/GoogleAnalytics/GoogleAnalytics.test.tsx:32"}, "properties": {"repobilityId": "589210986cef3560", "scanner": "scanner-primary", "fingerprint": "71fbcd810058631f", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-7919952fba4e2b1f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/messaging/cache.ts:37"}, "properties": {"repobilityId": "2b2d0412bea742d2", "scanner": "scanner-primary", "fingerprint": "7919952fba4e2b1f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3dc7dd80bde00094", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/services/messaging/connection-service.ts:376"}, "properties": {"repobilityId": "fe26187e1ff4c68e", "scanner": "scanner-primary", "fingerprint": "3dc7dd80bde00094", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fdbe2a2345f9797e", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:22-slim"}, "properties": {"repobilityId": "5da63ae9c92b734f", "scanner": "scanner-primary", "fingerprint": "fdbe2a2345f9797e", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docker/Dockerfile"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-aa5acaa49eb8315b", "level": "note", "message": {"text": "Containers defined but no K8s/orchestration manifest found"}, "properties": {"repobilityId": "b230ea9b68736081", "scanner": "scanner-primary", "fingerprint": "aa5acaa49eb8315b", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["coverage", "deployment"]}}, {"ruleId": "scanner-3fbc5df82fde1639", "level": "error", "message": {"text": "Runtime dotenv file present in repo: .env.local-supabase"}, "properties": {"repobilityId": "dbfb1742821792bd", "scanner": "scanner-primary", "fingerprint": "3fbc5df82fde1639", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets", "config", "env-file", "runtime-env", "env_file_with_secret"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".env.local-supabase"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ee810349675f4acf", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in next.config.ts:2"}, "properties": {"repobilityId": "a3a25c0d08e89bbc", "scanner": "scanner-primary", "fingerprint": "ee810349675f4acf", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "next.config.ts"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-df4b30768b1c922e", "level": "note", "message": {"text": "Insecure pattern 'document_write' in docs/lighthouse-report.json:1339"}, "properties": {"repobilityId": "7b54f973309ce757", "scanner": "scanner-primary", "fingerprint": "df4b30768b1c922e", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "document_write"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/lighthouse-report.json"}, "region": {"startLine": 1339}}}]}, {"ruleId": "scanner-6d43a83262969c1f", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/detect-project.js:8"}, "properties": {"repobilityId": "bc3a42c7f8402c40", "scanner": "scanner-primary", "fingerprint": "6d43a83262969c1f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/detect-project.js"}, "region": {"startLine": 8}}}]}, {"ruleId": "scanner-fb6a2f9652636183", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/reset-database.ts:23"}, "properties": {"repobilityId": "bd4465ad68be8167", "scanner": "scanner-primary", "fingerprint": "fb6a2f9652636183", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/reset-database.ts"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-62600b8c79e4e22b", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/generate-deployment-history.js:12"}, "properties": {"repobilityId": "8fc4f9cbf8bc4d2f", "scanner": "scanner-primary", "fingerprint": "62600b8c79e4e22b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/generate-deployment-history.js"}, "region": {"startLine": 12}}}]}, {"ruleId": "scanner-cf3c8e8086b283b7", "level": "error", "message": {"text": "Possible secret in scripts/initialize-test-keys.ts"}, "properties": {"repobilityId": "a1a9381978c5453f", "scanner": "scanner-primary", "fingerprint": "cf3c8e8086b283b7", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/initialize-test-keys.ts"}, "region": {"startLine": 15}}}]}, {"ruleId": "scanner-cf3c8e8086b283b7", "level": "error", "message": {"text": "Possible secret in scripts/initialize-test-keys.ts"}, "properties": {"repobilityId": "a1a9381978c5453f", "scanner": "scanner-primary", "fingerprint": "cf3c8e8086b283b7", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/initialize-test-keys.ts"}, "region": {"startLine": 16}}}]}, {"ruleId": "scanner-483fcc2210c1e832", "level": "error", "message": {"text": "Possible secret in scripts/test-auto-key-generation.ts"}, "properties": {"repobilityId": "9382204dacb27515", "scanner": "scanner-primary", "fingerprint": "483fcc2210c1e832", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/test-auto-key-generation.ts"}, "region": {"startLine": 19}}}]}, {"ruleId": "scanner-9f788d4ea9f04d0a", "level": "error", "message": {"text": "Possible secret in scripts/seed-encrypted-messages.ts"}, "properties": {"repobilityId": "a2fb71895ced7944", "scanner": "scanner-primary", "fingerprint": "9f788d4ea9f04d0a", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/seed-encrypted-messages.ts"}, "region": {"startLine": 15}}}]}, {"ruleId": "scanner-16cea872b7ed64a6", "level": "error", "message": {"text": "Possible secret in scripts/seed-test-users.ts"}, "properties": {"repobilityId": "9990222c132035a0", "scanner": "scanner-primary", "fingerprint": "16cea872b7ed64a6", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/seed-test-users.ts"}, "region": {"startLine": 143}}}]}, {"ruleId": "scanner-897d825cd8bf14ff", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/__tests__/detect-project.test.js:5"}, "properties": {"repobilityId": "1b12473e07415ddd", "scanner": "scanner-primary", "fingerprint": "897d825cd8bf14ff", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/__tests__/detect-project.test.js"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-869499a73244ce1e", "level": "note", "message": {"text": "Insecure pattern 'document_write' in features/enhancements/047-threejs-game/lighthouse-report.json:3542"}, "properties": {"repobilityId": "ee2f1d906edd45bd", "scanner": "scanner-primary", "fingerprint": "869499a73244ce1e", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "document_write"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "features/enhancements/047-threejs-game/lighthouse-report.json"}, "region": {"startLine": 3542}}}]}, {"ruleId": "scanner-784b3669c95dd2a5", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/utils/metadata.tsx:218"}, "properties": {"repobilityId": "86808616d2c8aaec", "scanner": "scanner-primary", "fingerprint": "784b3669c95dd2a5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/utils/metadata.tsx"}, "region": {"startLine": 218}}}]}, {"ruleId": "scanner-4eeca5b1eee1f10c", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in src/utils/privacy.test.ts:101"}, "properties": {"repobilityId": "3cea696e8351555a", "scanner": "scanner-primary", "fingerprint": "4eeca5b1eee1f10c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/utils/privacy.test.ts"}, "region": {"startLine": 101}}}]}, {"ruleId": "scanner-ae71bb7b067e2486", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/ThemeScript.tsx:87"}, "properties": {"repobilityId": "6ea5d466c31a81a9", "scanner": "scanner-primary", "fingerprint": "ae71bb7b067e2486", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/ThemeScript.tsx"}, "region": {"startLine": 87}}}]}, {"ruleId": "scanner-3d39bcf009fd7492", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/molecular/CodeBlock/CodeBlock.tsx:79"}, "properties": {"repobilityId": "4acd49a129592277", "scanner": "scanner-primary", "fingerprint": "3d39bcf009fd7492", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/molecular/CodeBlock/CodeBlock.tsx"}, "region": {"startLine": 79}}}]}, {"ruleId": "scanner-d90efc6e9d9b1608", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/molecular/BlogContent/BlogContent.tsx:73"}, "properties": {"repobilityId": "0086bdb84923f0cb", "scanner": "scanner-primary", "fingerprint": "d90efc6e9d9b1608", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/molecular/BlogContent/BlogContent.tsx"}, "region": {"startLine": 73}}}]}, {"ruleId": "scanner-a53d4bf3d20748c2", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/molecular/BlogContent/BlogContent.tsx:44"}, "properties": {"repobilityId": "9adbb1053793dc6c", "scanner": "scanner-primary", "fingerprint": "a53d4bf3d20748c2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/molecular/BlogContent/BlogContent.tsx"}, "region": {"startLine": 44}}}]}, {"ruleId": "scanner-0c50bad4cf0ba843", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/molecular/FontSwitcher/FontSwitcher.accessibility.test.tsx:12"}, "properties": {"repobilityId": "ef1f17d86c1cbe55", "scanner": "scanner-primary", "fingerprint": "0c50bad4cf0ba843", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/molecular/FontSwitcher/FontSwitcher.accessibility.test.tsx"}, "region": {"startLine": 12}}}]}, {"ruleId": "scanner-37f3693521941d55", "level": "warning", "message": {"text": "Insecure pattern 'weak_hash' in src/components/atomic/Tooltip/Tooltip.tsx:138"}, "properties": {"repobilityId": "2ae72a6ff4f4f7b1", "scanner": "scanner-primary", "fingerprint": "37f3693521941d55", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "weak_hash"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/atomic/Tooltip/Tooltip.tsx"}, "region": {"startLine": 138}}}]}, {"ruleId": "scanner-fca3c2f36214a5da", "level": "error", "message": {"text": "Possible secret in src/components/atomic/PasswordStrengthIndicator/PasswordStrengthIndicator.stories.tsx"}, "properties": {"repobilityId": "55ac9a7e8bce1a62", "scanner": "scanner-primary", "fingerprint": "fca3c2f36214a5da", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/atomic/PasswordStrengthIndicator/PasswordStrengthIndicator.stories.tsx"}, "region": {"startLine": 44}}}]}, {"ruleId": "scanner-fca3c2f36214a5da", "level": "error", "message": {"text": "Possible secret in src/components/atomic/PasswordStrengthIndicator/PasswordStrengthIndicator.stories.tsx"}, "properties": {"repobilityId": "55ac9a7e8bce1a62", "scanner": "scanner-primary", "fingerprint": "fca3c2f36214a5da", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/atomic/PasswordStrengthIndicator/PasswordStrengthIndicator.stories.tsx"}, "region": {"startLine": 50}}}]}, {"ruleId": "scanner-fca3c2f36214a5da", "level": "error", "message": {"text": "Possible secret in src/components/atomic/PasswordStrengthIndicator/PasswordStrengthIndicator.stories.tsx"}, "properties": {"repobilityId": "55ac9a7e8bce1a62", "scanner": "scanner-primary", "fingerprint": "fca3c2f36214a5da", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/atomic/PasswordStrengthIndicator/PasswordStrengthIndicator.stories.tsx"}, "region": {"startLine": 62}}}]}, {"ruleId": "scanner-ca2bd82c31100b72", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/blog/[slug]/page.tsx:201"}, "properties": {"repobilityId": "df5a2a4c38f975f6", "scanner": "scanner-primary", "fingerprint": "ca2bd82c31100b72", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/blog/[slug]/page.tsx"}, "region": {"startLine": 201}}}]}, {"ruleId": "scanner-0a6800f11112a0c7", "level": "error", "message": {"text": "Possible secret in src/lib/blog/blog-data.json"}, "properties": {"repobilityId": "355cdc6b6511b34f", "scanner": "scanner-primary", "fingerprint": "0a6800f11112a0c7", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/lib/blog/blog-data.json"}, "region": {"startLine": 136}}}]}, {"ruleId": "scanner-7636633e5c3f4c42", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/lib/analytics/GoogleAnalytics/GoogleAnalytics.test.tsx:32"}, "properties": {"repobilityId": "a0e0c0248d8b15fd", "scanner": "scanner-primary", "fingerprint": "7636633e5c3f4c42", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/lib/analytics/GoogleAnalytics/GoogleAnalytics.test.tsx"}, "region": {"startLine": 32}}}]}, {"ruleId": "scanner-60daf8ca77aaa049", "level": "error", "message": {"text": "Possible secret in src/lib/logger/logger.stories.tsx"}, "properties": {"repobilityId": "735831678e3201bc", "scanner": "scanner-primary", "fingerprint": "60daf8ca77aaa049", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/lib/logger/logger.stories.tsx"}, "region": {"startLine": 267}}}]}, {"ruleId": "scanner-557266578676ee0a", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "6cd24c95a7f30185", "scanner": "scanner-primary", "fingerprint": "557266578676ee0a", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/accessibility.yml"}, "region": {"startLine": 46}}}]}, {"ruleId": "scanner-557266578676ee0a", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "aec0a6b635fdb1ab", "scanner": "scanner-primary", "fingerprint": "557266578676ee0a", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/accessibility.yml"}, "region": {"startLine": 53}}}]}, {"ruleId": "scanner-f323fd6b9dd42207", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "0643002ffac3f536", "scanner": "scanner-primary", "fingerprint": "f323fd6b9dd42207", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/component-structure.yml"}, "region": {"startLine": 22}}}]}, {"ruleId": "scanner-f323fd6b9dd42207", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "b137b417fc21ef9e", "scanner": "scanner-primary", "fingerprint": "f323fd6b9dd42207", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/component-structure.yml"}, "region": {"startLine": 25}}}]}, {"ruleId": "scanner-f323fd6b9dd42207", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "2fc49e11c691243a", "scanner": "scanner-primary", "fingerprint": "f323fd6b9dd42207", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/component-structure.yml"}, "region": {"startLine": 30}}}]}, {"ruleId": "scanner-f323fd6b9dd42207", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "2e6f6ab6a315102a", "scanner": "scanner-primary", "fingerprint": "f323fd6b9dd42207", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/component-structure.yml"}, "region": {"startLine": 50}}}]}, {"ruleId": "scanner-f323fd6b9dd42207", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "00d73306a2f5071c", "scanner": "scanner-primary", "fingerprint": "f323fd6b9dd42207", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/component-structure.yml"}, "region": {"startLine": 59}}}]}, {"ruleId": "scanner-28c4a04bd807da0c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "e90842e167ad707e", "scanner": "scanner-primary", "fingerprint": "28c4a04bd807da0c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy.yml"}, "region": {"startLine": 22}}}]}, {"ruleId": "scanner-28c4a04bd807da0c", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "24c28d8303f58301", "scanner": "scanner-primary", "fingerprint": "28c4a04bd807da0c", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy.yml"}, "region": {"startLine": 25}}}]}, {"ruleId": "scanner-28c4a04bd807da0c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ab9c1269f3f77e87", "scanner": "scanner-primary", "fingerprint": "28c4a04bd807da0c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy.yml"}, "region": {"startLine": 30}}}]}, {"ruleId": "scanner-28c4a04bd807da0c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "b70dbcc8f54d72ab", "scanner": "scanner-primary", "fingerprint": "28c4a04bd807da0c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy.yml"}, "region": {"startLine": 123}}}]}, {"ruleId": "scanner-28c4a04bd807da0c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "4544a649b35fa68b", "scanner": "scanner-primary", "fingerprint": "28c4a04bd807da0c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy.yml"}, "region": {"startLine": 136}}}]}, {"ruleId": "scanner-ad6701f0a8405e22", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "8384c23520d55657", "scanner": "scanner-primary", "fingerprint": "ad6701f0a8405e22", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a968acecb41930fa", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "1888801680a1cb2c", "scanner": "scanner-primary", "fingerprint": "a968acecb41930fa", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/monitor.yml"}, "region": {"startLine": 52}}}]}, {"ruleId": "scanner-a968acecb41930fa", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "71fc96b8d7f7c6dc", "scanner": "scanner-primary", "fingerprint": "a968acecb41930fa", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/monitor.yml"}, "region": {"startLine": 104}}}]}, {"ruleId": "scanner-a968acecb41930fa", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "71fc96b8d7f7c6dc", "scanner": "scanner-primary", "fingerprint": "a968acecb41930fa", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/monitor.yml"}, "region": {"startLine": 227}}}]}, {"ruleId": "scanner-d25efd2efcdde921", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "c313d840075d0d79", "scanner": "scanner-primary", "fingerprint": "d25efd2efcdde921", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/monitor.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "0b7984a0d98960fe", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 28}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "9e5617d449b061f6", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 31}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "e768aa78741098d0", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 36}}}]}, {"ruleId": "scanner-65c9bd56493a81d3", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "b44a73dd9c718042", "scanner": "scanner-primary", "fingerprint": "65c9bd56493a81d3", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/e2e.yml"}, "region": {"startLine": 60}}}]}, {"ruleId": "scanner-65c9bd56493a81d3", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "b74d4586a789d721", "scanner": "scanner-primary", "fingerprint": "65c9bd56493a81d3", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/e2e.yml"}, "region": {"startLine": 63}}}]}, {"ruleId": "scanner-65c9bd56493a81d3", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "b1ab3c3bf570d7b2", "scanner": "scanner-primary", "fingerprint": "65c9bd56493a81d3", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/e2e.yml"}, "region": {"startLine": 68}}}]}, {"ruleId": "scanner-65c9bd56493a81d3", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "802f2de8621fdede", "scanner": "scanner-primary", "fingerprint": "65c9bd56493a81d3", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/e2e.yml"}, "region": {"startLine": 94}}}]}, {"ruleId": "scanner-65c9bd56493a81d3", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "b44a73dd9c718042", "scanner": "scanner-primary", "fingerprint": "65c9bd56493a81d3", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/e2e.yml"}, "region": {"startLine": 111}}}]}, {"ruleId": "scanner-65c9bd56493a81d3", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "b74d4586a789d721", "scanner": "scanner-primary", "fingerprint": "65c9bd56493a81d3", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/e2e.yml"}, "region": {"startLine": 114}}}]}, {"ruleId": "scanner-65c9bd56493a81d3", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "b1ab3c3bf570d7b2", "scanner": "scanner-primary", "fingerprint": "65c9bd56493a81d3", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/e2e.yml"}, "region": {"startLine": 119}}}]}, {"ruleId": "scanner-65c9bd56493a81d3", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "f32b9cd39b0fcf45", "scanner": "scanner-primary", "fingerprint": "65c9bd56493a81d3", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/e2e.yml"}, "region": {"startLine": 136}}}]}, {"ruleId": "scanner-65c9bd56493a81d3", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "b44a73dd9c718042", "scanner": "scanner-primary", "fingerprint": "65c9bd56493a81d3", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/e2e.yml"}, "region": {"startLine": 212}}}]}, {"ruleId": "scanner-65c9bd56493a81d3", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "b74d4586a789d721", "scanner": "scanner-primary", "fingerprint": "65c9bd56493a81d3", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/e2e.yml"}, "region": {"startLine": 215}}}]}, {"ruleId": "scanner-65c9bd56493a81d3", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "b1ab3c3bf570d7b2", "scanner": "scanner-primary", "fingerprint": "65c9bd56493a81d3", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/e2e.yml"}, "region": {"startLine": 220}}}]}, {"ruleId": "scanner-65c9bd56493a81d3", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "f32b9cd39b0fcf45", "scanner": "scanner-primary", "fingerprint": "65c9bd56493a81d3", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/e2e.yml"}, "region": {"startLine": 237}}}]}, {"ruleId": "scanner-65c9bd56493a81d3", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "b44a73dd9c718042", "scanner": "scanner-primary", "fingerprint": "65c9bd56493a81d3", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/e2e.yml"}, "region": {"startLine": 303}}}]}, {"ruleId": "scanner-65c9bd56493a81d3", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "b74d4586a789d721", "scanner": "scanner-primary", "fingerprint": "65c9bd56493a81d3", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/e2e.yml"}, "region": {"startLine": 306}}}]}, {"ruleId": "scanner-65c9bd56493a81d3", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "b1ab3c3bf570d7b2", "scanner": "scanner-primary", "fingerprint": "65c9bd56493a81d3", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/e2e.yml"}, "region": {"startLine": 311}}}]}, {"ruleId": "scanner-65c9bd56493a81d3", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "f32b9cd39b0fcf45", "scanner": "scanner-primary", "fingerprint": "65c9bd56493a81d3", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/e2e.yml"}, "region": {"startLine": 328}}}]}, {"ruleId": "scanner-65c9bd56493a81d3", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "802f2de8621fdede", "scanner": "scanner-primary", "fingerprint": "65c9bd56493a81d3", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/e2e.yml"}, "region": {"startLine": 384}}}]}, {"ruleId": "scanner-65c9bd56493a81d3", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "b44a73dd9c718042", "scanner": "scanner-primary", "fingerprint": "65c9bd56493a81d3", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/e2e.yml"}, "region": {"startLine": 445}}}]}, {"ruleId": "scanner-65c9bd56493a81d3", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "b74d4586a789d721", "scanner": "scanner-primary", "fingerprint": "65c9bd56493a81d3", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/e2e.yml"}, "region": {"startLine": 448}}}]}, {"ruleId": "scanner-65c9bd56493a81d3", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "b1ab3c3bf570d7b2", "scanner": "scanner-primary", "fingerprint": "65c9bd56493a81d3", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/e2e.yml"}, "region": {"startLine": 453}}}]}, {"ruleId": "scanner-bf55f09ffd0060bc", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "eb55d4885444403d", "scanner": "scanner-primary", "fingerprint": "bf55f09ffd0060bc", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/supabase-keepalive.yml"}, "region": {"startLine": 17}}}]}, {"ruleId": "scanner-bf55f09ffd0060bc", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "0b4abdc4d6393849", "scanner": "scanner-primary", "fingerprint": "bf55f09ffd0060bc", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/supabase-keepalive.yml"}, "region": {"startLine": 20}}}]}, {"ruleId": "scanner-bf55f09ffd0060bc", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "a1151165e8c2929b", "scanner": "scanner-primary", "fingerprint": "bf55f09ffd0060bc", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/supabase-keepalive.yml"}, "region": {"startLine": 25}}}]}, {"ruleId": "scanner-cb639d9a10a47b23", "level": "note", "message": {"text": "package.json defines install-time lifecycle scripts"}, "properties": {"repobilityId": "b86179956da3a4a8", "scanner": "scanner-primary", "fingerprint": "cb639d9a10a47b23", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "npm", "install-scripts"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-21e20c47805f394a", "level": "note", "message": {"text": "Very large file: tests/e2e/utils/test-user-factory.ts (2387 lines)"}, "properties": {"repobilityId": "52964243dca57bea", "scanner": "scanner-primary", "fingerprint": "21e20c47805f394a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-59b435d91d726d08", "level": "note", "message": {"text": "Very large file: src/services/messaging/message-service.ts (1465 lines)"}, "properties": {"repobilityId": "e8998427ed068a1d", "scanner": "scanner-primary", "fingerprint": "59b435d91d726d08", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-786c8c22d3fe624f", "level": "note", "message": {"text": "48 TODO/FIXME markers"}, "properties": {"repobilityId": "4b38c118003e07d2", "scanner": "scanner-primary", "fingerprint": "786c8c22d3fe624f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["maintenance"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "0735ddebd8f49cbb", "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": "be108bff62ba9104", "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": "158a4339678c63e3", "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": "526570f459fc4639", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "b2e9564536f43813", "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": "30d5f2768d0c3e13", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-cc55229a7a3c078d", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .mcp.json"}, "properties": {"repobilityId": "51942fb3d5b8b5b4", "scanner": "scanner-primary", "fingerprint": "cc55229a7a3c078d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "mcp_config"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".mcp.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-17d866d91a7c451e", "level": "error", "message": {"text": "Agent instruction/config may expose a secret: CLAUDE.md"}, "properties": {"repobilityId": "ccce5984e58a48f0", "scanner": "scanner-primary", "fingerprint": "17d866d91a7c451e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["agent-instructions", "secrets", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "CLAUDE.md"}, "region": {"startLine": 275}}}]}, {"ruleId": "scanner-61f64af4e1b91986", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: docs/CLAUDE.md"}, "properties": {"repobilityId": "d2df5b4e51df9232", "scanner": "scanner-primary", "fingerprint": "61f64af4e1b91986", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/CLAUDE.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-01ada338bcc813fa", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: docs/interoffice/CLAUDE.md"}, "properties": {"repobilityId": "fce4e3edb3795274", "scanner": "scanner-primary", "fingerprint": "01ada338bcc813fa", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/interoffice/CLAUDE.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6b0fa4b05bfb2b24", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/speckit.taskstoissues.md"}, "properties": {"repobilityId": "25a2f2db8174b383", "scanner": "scanner-primary", "fingerprint": "6b0fa4b05bfb2b24", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/speckit.taskstoissues.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-67c6c82748886b98", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/specify.md"}, "properties": {"repobilityId": "ae07a7d20ddf949d", "scanner": "scanner-primary", "fingerprint": "67c6c82748886b98", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/specify.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2882da8270959730", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/speckit.plan.md"}, "properties": {"repobilityId": "e3b80b5ed1a4169d", "scanner": "scanner-primary", "fingerprint": "2882da8270959730", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/speckit.plan.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f1b84ff8cb7702db", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/roles/qc-operator.md"}, "properties": {"repobilityId": "3185b1805f71545b", "scanner": "scanner-primary", "fingerprint": "f1b84ff8cb7702db", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/roles/qc-operator.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-52ce1721e31f395e", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/roles/council.md"}, "properties": {"repobilityId": "84dbc0dd78e04065", "scanner": "scanner-primary", "fingerprint": "52ce1721e31f395e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/roles/council.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c67029f5181d8ecd", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/roles/docker-captain.md"}, "properties": {"repobilityId": "5e30cc9a3351cc2f", "scanner": "scanner-primary", "fingerprint": "c67029f5181d8ecd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/roles/docker-captain.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9adc67bc4389bc2b", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/roles/design.md"}, "properties": {"repobilityId": "5de898fb2807c8f4", "scanner": "scanner-primary", "fingerprint": "9adc67bc4389bc2b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/roles/design.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-fa566d64f7015535", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/speckit-wireframe-prep/SKILL.md"}, "properties": {"repobilityId": "94442f82bc990765", "scanner": "scanner-primary", "fingerprint": "fa566d64f7015535", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/speckit-wireframe-prep/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-15f277c1e4739bb9", "level": "error", "message": {"text": "Agent instruction/config may expose a secret: .claude/knowledge/docker/nodejs_rocks_in_docker_dockercon2023.md"}, "properties": {"repobilityId": "80a2d4255bd68c34", "scanner": "scanner-primary", "fingerprint": "15f277c1e4739bb9", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["agent-instructions", "secrets", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/knowledge/docker/nodejs_rocks_in_docker_dockercon2023.md"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-e4e3b4eb4ada793a", "level": "warning", "message": {"text": "Agent instruction contains unpinned remote install: .claude/knowledge/docker/nodejs_docker_best_practices_dockercon2019.md"}, "properties": {"repobilityId": "219c0579107eabf0", "scanner": "scanner-primary", "fingerprint": "e4e3b4eb4ada793a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "supply-chain", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/knowledge/docker/nodejs_docker_best_practices_dockercon2019.md"}, "region": {"startLine": 86}}}]}, {"ruleId": "scanner-00101e05f314e6cb", "level": "none", "message": {"text": "Commented-code block (5 lines) in playwright.config.ts:140"}, "properties": {"repobilityId": "b71d0640ca58bd98", "scanner": "scanner-primary", "fingerprint": "00101e05f314e6cb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-755ee9e9a1c5847b", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/integration/auth/oauth-flow.test.ts:101"}, "properties": {"repobilityId": "47e08676a61f75bc", "scanner": "scanner-primary", "fingerprint": "755ee9e9a1c5847b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d3c9d5466c87c6f3", "level": "none", "message": {"text": "Commented-code block (8 lines) in tests/integration/auth/sign-in-flow.test.ts:110"}, "properties": {"repobilityId": "c8760bf1b1c1ef53", "scanner": "scanner-primary", "fingerprint": "d3c9d5466c87c6f3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8a1e9412515be7fc", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/contract/admin/admin-access.contract.test.ts:192"}, "properties": {"repobilityId": "bc32c4e3623b198f", "scanner": "scanner-primary", "fingerprint": "8a1e9412515be7fc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-810704aec33c3f71", "level": "none", "message": {"text": "Commented-code block (7 lines) in tests/e2e/mobile-dropdown-screenshot.spec.ts:26"}, "properties": {"repobilityId": "6366734ab84888ee", "scanner": "scanner-primary", "fingerprint": "810704aec33c3f71", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-408f67a3d80cfeec", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/e2e/game-3d.spec.ts:22"}, "properties": {"repobilityId": "44d03a6170194d2a", "scanner": "scanner-primary", "fingerprint": "408f67a3d80cfeec", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7c5e2cc3ffe3fa8c", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/e2e/color-contrast.spec.ts:5"}, "properties": {"repobilityId": "7bc6864e8e1b23af", "scanner": "scanner-primary", "fingerprint": "7c5e2cc3ffe3fa8c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-76852d45c9129722", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/e2e/embed-theme-contrast.spec.ts:5"}, "properties": {"repobilityId": "c4b7594d77b49181", "scanner": "scanner-primary", "fingerprint": "76852d45c9129722", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3f415b677067bea8", "level": "none", "message": {"text": "Commented-code block (7 lines) in tests/e2e/auth.setup.ts:75"}, "properties": {"repobilityId": "07a3238fa7ade047", "scanner": "scanner-primary", "fingerprint": "3f415b677067bea8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-539b7ca89b6df17a", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/e2e/security/payment-isolation.spec.ts:60"}, "properties": {"repobilityId": "1363570ec109d9e5", "scanner": "scanner-primary", "fingerprint": "539b7ca89b6df17a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a7828aa05208825a", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/e2e/tests/accessibility.spec.ts:208"}, "properties": {"repobilityId": "bc404f618e9fbdea", "scanner": "scanner-primary", "fingerprint": "a7828aa05208825a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-35bb9374a1171bcc", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/e2e/tests/mobile-orientation.spec.ts:153"}, "properties": {"repobilityId": "b236191ff3db3585", "scanner": "scanner-primary", "fingerprint": "35bb9374a1171bcc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-47e1277e7db73e79", "level": "none", "message": {"text": "Commented-code block (7 lines) in tests/e2e/tests/cross-page-navigation.spec.ts:358"}, "properties": {"repobilityId": "5a8b2e62cc6c7e29", "scanner": "scanner-primary", "fingerprint": "47e1277e7db73e79", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-06dccec859b43e5e", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/e2e/auth/session-persistence.spec.ts:191"}, "properties": {"repobilityId": "11e97e7fb72d4506", "scanner": "scanner-primary", "fingerprint": "06dccec859b43e5e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e36da2854a27e7f6", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/e2e/utils/test-user-factory.ts:87"}, "properties": {"repobilityId": "8651d408d0fc76a7", "scanner": "scanner-primary", "fingerprint": "e36da2854a27e7f6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-15ada732d3aa5e1c", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/e2e/admin/admin-user-pagination.spec.ts:242"}, "properties": {"repobilityId": "22e6eb70d2fd1027", "scanner": "scanner-primary", "fingerprint": "15ada732d3aa5e1c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2c255efa63a55f77", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/e2e/admin/admin-dashboard.spec.ts:28"}, "properties": {"repobilityId": "c56bd9c1e17bbdf4", "scanner": "scanner-primary", "fingerprint": "2c255efa63a55f77", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-22695501813b1baf", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/e2e/messaging/messaging-scroll.spec.ts:15"}, "properties": {"repobilityId": "8149d601ec4b2a64", "scanner": "scanner-primary", "fingerprint": "22695501813b1baf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ef2d9940f7418cc4", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/e2e/messaging/message-delete-placeholder.spec.ts:129"}, "properties": {"repobilityId": "cf218bddda968151", "scanner": "scanner-primary", "fingerprint": "ef2d9940f7418cc4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fa7bea7ea8e2126e", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/e2e/messaging/cross-window-delivery.spec.ts:68"}, "properties": {"repobilityId": "800d01d0ddb165fb", "scanner": "scanner-primary", "fingerprint": "fa7bea7ea8e2126e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d723f3590e177334", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/e2e/messaging/offline-queue.spec.ts:380"}, "properties": {"repobilityId": "32df4e7b76a1930d", "scanner": "scanner-primary", "fingerprint": "d723f3590e177334", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b4938013ef798694", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/e2e/messaging/complete-user-workflow.spec.ts:189"}, "properties": {"repobilityId": "b061333d0afc326e", "scanner": "scanner-primary", "fingerprint": "b4938013ef798694", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6d31c410b970a5fe", "level": "none", "message": {"text": "Commented-code block (11 lines) in tests/e2e/messaging/oauth-setup-modal.spec.ts:211"}, "properties": {"repobilityId": "b595059398153d1b", "scanner": "scanner-primary", "fingerprint": "6d31c410b970a5fe", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bacff5fd2624064f", "level": "none", "message": {"text": "Commented-code block (7 lines) in tests/e2e/messaging/message-editing.spec.ts:93"}, "properties": {"repobilityId": "6b149c1a666a7aec", "scanner": "scanner-primary", "fingerprint": "bacff5fd2624064f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d0caf22f2ec3bf98", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/e2e/debug/capture-decryption-logs.spec.ts:118"}, "properties": {"repobilityId": "c92ae69ad1534b31", "scanner": "scanner-primary", "fingerprint": "d0caf22f2ec3bf98", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a8ed330d58ea8df8", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/e2e/payment/02-paypal-subscription.spec.ts:113"}, "properties": {"repobilityId": "d1a3d4a8fc89d1cf", "scanner": "scanner-primary", "fingerprint": "a8ed330d58ea8df8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6a382f9bfc1e2e4e", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/e2e/payment/05-offline-queue.spec.ts:95"}, "properties": {"repobilityId": "88890a3988e0a6ca", "scanner": "scanner-primary", "fingerprint": "6a382f9bfc1e2e4e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-edb94d874cc3faf7", "level": "none", "message": {"text": "Commented-code block (7 lines) in tests/e2e/payment/07-performance.spec.ts:71"}, "properties": {"repobilityId": "b615f288d837cb09", "scanner": "scanner-primary", "fingerprint": "edb94d874cc3faf7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1da7aba72f00f171", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/e2e/payment/03-failed-payment-retry.spec.ts:82"}, "properties": {"repobilityId": "288b211863eff9fa", "scanner": "scanner-primary", "fingerprint": "1da7aba72f00f171", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f7a2375e417d0360", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/rls/service-role.test.ts:123"}, "properties": {"repobilityId": "9496a3f17dd08efc", "scanner": "scanner-primary", "fingerprint": "f7a2375e417d0360", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-251bdc6352e7596f", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/rls/__setup__/cleanup-stale-impl.ts:107"}, "properties": {"repobilityId": "6c21c0b6714737f8", "scanner": "scanner-primary", "fingerprint": "251bdc6352e7596f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cc169a51e214876a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 docs/specs/040-feature-040-code/contracts/result.ts:125"}, "properties": {"repobilityId": "9a2bd1b36b9f9f6a", "scanner": "scanner-primary", "fingerprint": "cc169a51e214876a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6a08ac27e9ca4b14", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 docs/specs/023-user-messaging-system/contracts/api.ts:64"}, "properties": {"repobilityId": "9edeb685dad7f2ee", "scanner": "scanner-primary", "fingerprint": "6a08ac27e9ca4b14", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f667be2cff3bbb34", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/retry-failed-webhooks.ts:111"}, "properties": {"repobilityId": "75354892e2ec2509", "scanner": "scanner-primary", "fingerprint": "f667be2cff3bbb34", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f24377ea6b668c3d", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/refresh-inventories.py:46"}, "properties": {"repobilityId": "30d1824201a87521", "scanner": "scanner-primary", "fingerprint": "f24377ea6b668c3d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8dbc78772f96adcc", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/priority-calculator.py:107"}, "properties": {"repobilityId": "9f9bcf59351888cc", "scanner": "scanner-primary", "fingerprint": "8dbc78772f96adcc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fe6558d6939aa979", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/seed-test-users.ts:185"}, "properties": {"repobilityId": "5372a655e206786c", "scanner": "scanner-primary", "fingerprint": "fe6558d6939aa979", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3d7907109c0b1518", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/generate-contract-fixtures.ts:42"}, "properties": {"repobilityId": "61aadf77a7e40ff3", "scanner": "scanner-primary", "fingerprint": "3d7907109c0b1518", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-de0ecaaab3f2cc29", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/contrast-audit.mjs:284"}, "properties": {"repobilityId": "be20ee8b370505c8", "scanner": "scanner-primary", "fingerprint": "de0ecaaab3f2cc29", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-04fcd166fc759cf6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/send-test-message.mjs:34"}, "properties": {"repobilityId": "5393bc41b988d580", "scanner": "scanner-primary", "fingerprint": "04fcd166fc759cf6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-be593cb8a9260ad7", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/migrate-wireframes.py:59"}, "properties": {"repobilityId": "381438f5dac7374c", "scanner": "scanner-primary", "fingerprint": "be593cb8a9260ad7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-58d0baffd45f8827", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/send-payment-email/index.ts:56"}, "properties": {"repobilityId": "f7c720b39ea8f4ef", "scanner": "scanner-primary", "fingerprint": "58d0baffd45f8827", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b996d13d304e0057", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/resume-subscription/index.ts:70"}, "properties": {"repobilityId": "67105749140a8e42", "scanner": "scanner-primary", "fingerprint": "b996d13d304e0057", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-637c623fa88beafc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/create-paypal-subscription/index.ts:72"}, "properties": {"repobilityId": "e6e6fe202fd6df7f", "scanner": "scanner-primary", "fingerprint": "637c623fa88beafc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d6b2353570910d8d", "level": "none", "message": {"text": "Commented-code block (6 lines) in supabase/functions/create-stripe-checkout/index.test.ts:50"}, "properties": {"repobilityId": "e47723d49381341e", "scanner": "scanner-primary", "fingerprint": "d6b2353570910d8d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8d15695f435ba8ee", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/paypal-webhook/index.ts:187"}, "properties": {"repobilityId": "a7fedd5616d89358", "scanner": "scanner-primary", "fingerprint": "8d15695f435ba8ee", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-521ea151c84b3f20", "level": "none", "message": {"text": "Commented-code block (6 lines) in supabase/functions/stripe-webhook/index.ts:303"}, "properties": {"repobilityId": "8461fe593a5d076e", "scanner": "scanner-primary", "fingerprint": "521ea151c84b3f20", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b77342e34348d598", "level": "none", "message": {"text": "Commented-code block (7 lines) in supabase/functions/create-stripe-subscription/index.test.ts:86"}, "properties": {"repobilityId": "798b11720cea5dd9", "scanner": "scanner-primary", "fingerprint": "b77342e34348d598", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-19bbb4d44c82f125", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/cancel-subscription/index.ts:73"}, "properties": {"repobilityId": "9720aae5752d3603", "scanner": "scanner-primary", "fingerprint": "19bbb4d44c82f125", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-caa2ed1a802c3cc2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/capture-paypal-order/index.ts:69"}, "properties": {"repobilityId": "01fa41756f9b125f", "scanner": "scanner-primary", "fingerprint": "caa2ed1a802c3cc2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c8fd717a43dec6e8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/create-paypal-order/index.ts:64"}, "properties": {"repobilityId": "f8b5d4bc992631d3", "scanner": "scanner-primary", "fingerprint": "c8fd717a43dec6e8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-03d98b1595d8909a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/sw.js:114"}, "properties": {"repobilityId": "e82c421484401625", "scanner": "scanner-primary", "fingerprint": "03d98b1595d8909a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2fb4cde5b2d0f153", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/mockServiceWorker.js:216"}, "properties": {"repobilityId": "737cf00857f7581d", "scanner": "scanner-primary", "fingerprint": "2fb4cde5b2d0f153", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6729366caa997442", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/service-worker.js:71"}, "properties": {"repobilityId": "4814b7122c6304af", "scanner": "scanner-primary", "fingerprint": "6729366caa997442", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d8ed00c0168457d7", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/test/setup.ts:86"}, "properties": {"repobilityId": "5681d7b43668dff6", "scanner": "scanner-primary", "fingerprint": "d8ed00c0168457d7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b7611609ecb6f820", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/utils/tasks-parser.ts:56"}, "properties": {"repobilityId": "f0242ed9ce219a79", "scanner": "scanner-primary", "fingerprint": "b7611609ecb6f820", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3f8ea937906141fb", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/components/PWAInstall.tsx:49"}, "properties": {"repobilityId": "d4665c9cf6599f9c", "scanner": "scanner-primary", "fingerprint": "3f8ea937906141fb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dd8b7c8269094bd6", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/GlobalNav.tsx:309"}, "properties": {"repobilityId": "74e421b599a0ddec", "scanner": "scanner-primary", "fingerprint": "dd8b7c8269094bd6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2d87e0d057e875e8", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/auth/EncryptionKeyGate/EncryptionKeyGate.tsx:58"}, "properties": {"repobilityId": "48b9a681a8b28c5d", "scanner": "scanner-primary", "fingerprint": "2d87e0d057e875e8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d5eeddc3e85fa443", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/auth/SignUpForm/SignUpForm.tsx:104"}, "properties": {"repobilityId": "2d678bdc35ed0043", "scanner": "scanner-primary", "fingerprint": "d5eeddc3e85fa443", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-717de83e05de3946", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/auth/MessagingGate/MessagingGate.tsx:27"}, "properties": {"repobilityId": "9ac8544c0d57f686", "scanner": "scanner-primary", "fingerprint": "717de83e05de3946", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-03ffe922ab418a23", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/auth/ProtectedRoute/ProtectedRoute.test.tsx:5"}, "properties": {"repobilityId": "9f6f5ae1ca1d2d5c", "scanner": "scanner-primary", "fingerprint": "03ffe922ab418a23", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4a3aeb1af7cace25", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/auth/ProtectedRoute/ProtectedRoute.tsx:50"}, "properties": {"repobilityId": "8aaa1fc5c8560380", "scanner": "scanner-primary", "fingerprint": "4a3aeb1af7cace25", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-90295c1f8643ff6f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/auth/SignInForm/SignInForm.tsx:144"}, "properties": {"repobilityId": "45c14820abe2af07", "scanner": "scanner-primary", "fingerprint": "90295c1f8643ff6f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a5f83321cc26d357", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/molecular/DisqusComments.tsx:12"}, "properties": {"repobilityId": "944c3b1aee01a93f", "scanner": "scanner-primary", "fingerprint": "a5f83321cc26d357", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-04ef011fefe84589", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/molecular/MessagingTrendChart/MessagingTrendChart.tsx:26"}, "properties": {"repobilityId": "333eb8565a8b95af", "scanner": "scanner-primary", "fingerprint": "04ef011fefe84589", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-289754745a125e44", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/molecular/CodeBlock/CodeBlock.stories.tsx:48"}, "properties": {"repobilityId": "1b4c71397764d9cb", "scanner": "scanner-primary", "fingerprint": "289754745a125e44", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-903fc02adf6b4e6b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/molecular/AdminDataTable/AdminDataTable.test.tsx:121"}, "properties": {"repobilityId": "c6d70f77c972f181", "scanner": "scanner-primary", "fingerprint": "903fc02adf6b4e6b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-83ff34721b0992d5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/molecular/BlogContent/BlogContent.stories.tsx:192"}, "properties": {"repobilityId": "ce10d77af6e300db", "scanner": "scanner-primary", "fingerprint": "83ff34721b0992d5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-72b4d3395d6a24e7", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/molecular/MessageThread/MessageThread.tsx:214"}, "properties": {"repobilityId": "e24941d7dbf25d06", "scanner": "scanner-primary", "fingerprint": "72b4d3395d6a24e7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3f136fffb31db487", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/game/Controls/Controls.test.tsx:5"}, "properties": {"repobilityId": "d195d08badfb5611", "scanner": "scanner-primary", "fingerprint": "3f136fffb31db487", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ebfcf8e99bda67ba", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/organisms/ConversationList/useConversationList.ts:364"}, "properties": {"repobilityId": "7b9a21cd1aea5f20", "scanner": "scanner-primary", "fingerprint": "ebfcf8e99bda67ba", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9cddb71131ebf66c", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/organisms/AdminDashboardOverview/AdminDashboardOverview.test.tsx:422"}, "properties": {"repobilityId": "98cba800e79225aa", "scanner": "scanner-primary", "fingerprint": "9cddb71131ebf66c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-63dd851ed4e3bee9", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/organisms/AdminDashboardOverview/AdminDashboardOverview.stories.tsx:138"}, "properties": {"repobilityId": "9b4c593a4eccaeaf", "scanner": "scanner-primary", "fingerprint": "63dd851ed4e3bee9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c2f30659b8ce6b0a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/organisms/AdminDashboardOverview/AdminDashboardOverview.accessibility.test.tsx:92"}, "properties": {"repobilityId": "21ac191439db5e7c", "scanner": "scanner-primary", "fingerprint": "c2f30659b8ce6b0a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-be9693e728b72dde", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/organisms/AdminDashboardOverview/AdminDashboardOverview.tsx:38"}, "properties": {"repobilityId": "403433d7f3c8c4cc", "scanner": "scanner-primary", "fingerprint": "be9693e728b72dde", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1a39fea604070f0b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/organisms/ConversationView/ConversationView.tsx:73"}, "properties": {"repobilityId": "af070db60d1f08ef", "scanner": "scanner-primary", "fingerprint": "1a39fea604070f0b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d35e14af777d2b3c", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/organisms/AdminConversationList/AdminConversationList.tsx:35"}, "properties": {"repobilityId": "0e0a9270e4ca782d", "scanner": "scanner-primary", "fingerprint": "d35e14af777d2b3c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6a29d700ab45b604", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/organisms/AdminConversationList/AdminConversationList.test.tsx:9"}, "properties": {"repobilityId": "283abed7efd0cd40", "scanner": "scanner-primary", "fingerprint": "6a29d700ab45b604", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-24e14fccf711d6d9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/payment/SubscriptionManager/SubscriptionManager.tsx:113"}, "properties": {"repobilityId": "ada7f6c46357d00e", "scanner": "scanner-primary", "fingerprint": "24e14fccf711d6d9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cd5e817760c73447", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/payment/PaymentConsentModal/PaymentConsentModal.test.tsx:130"}, "properties": {"repobilityId": "0884c7006a9f90a9", "scanner": "scanner-primary", "fingerprint": "cd5e817760c73447", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4b27201b8fbd5bb9", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/contexts/AuthContext.tsx:203"}, "properties": {"repobilityId": "3b7cb464393d528d", "scanner": "scanner-primary", "fingerprint": "4b27201b8fbd5bb9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-de6c8db0c64f9050", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/app/docs/page.tsx:5"}, "properties": {"repobilityId": "a94ee67723662ff2", "scanner": "scanner-primary", "fingerprint": "de6c8db0c64f9050", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-24fd0bf4ebf198c9", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/admin/AdminGate.test.tsx:142"}, "properties": {"repobilityId": "088bb808c609bd72", "scanner": "scanner-primary", "fingerprint": "24fd0bf4ebf198c9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-47d6792a132cbd40", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/status/page.tsx:8"}, "properties": {"repobilityId": "29b916de9685a936", "scanner": "scanner-primary", "fingerprint": "47d6792a132cbd40", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-23fb50cb2c5fff64", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/messages/setup/page.tsx:39"}, "properties": {"repobilityId": "524f42a1666eda6c", "scanner": "scanner-primary", "fingerprint": "23fb50cb2c5fff64", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f8a0f1f26248abc7", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/analytics/GoogleAnalytics/GoogleAnalytics.tsx:25"}, "properties": {"repobilityId": "7d7e6fbad7e8c0d4", "scanner": "scanner-primary", "fingerprint": "f8a0f1f26248abc7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-508129e226cf71be", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/messaging/cache.ts:51"}, "properties": {"repobilityId": "6eda9aaf53df72e3", "scanner": "scanner-primary", "fingerprint": "508129e226cf71be", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8cbb1d3cf3879a64", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/messaging/key-derivation.ts:119"}, "properties": {"repobilityId": "341558245cafbb4b", "scanner": "scanner-primary", "fingerprint": "8cbb1d3cf3879a64", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-875e3fc2eb12940b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/messaging/database.ts:37"}, "properties": {"repobilityId": "ad5b791c343be46d", "scanner": "scanner-primary", "fingerprint": "875e3fc2eb12940b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-72b5a8bbf9bca2e7", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/messaging/__tests__/key-derivation.test.ts:115"}, "properties": {"repobilityId": "b5bc3480a8b4fb48", "scanner": "scanner-primary", "fingerprint": "72b5a8bbf9bca2e7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8222a1e65452751c", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/messaging/__tests__/encryption.test.ts:130"}, "properties": {"repobilityId": "946a363936aaffa9", "scanner": "scanner-primary", "fingerprint": "8222a1e65452751c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-60be0e9149867f1b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/payments/stripe.ts:67"}, "properties": {"repobilityId": "24e93a78cfef98b7", "scanner": "scanner-primary", "fingerprint": "60be0e9149867f1b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-defcade0ffcb66a8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/payments/paypal.ts:91"}, "properties": {"repobilityId": "8eff223245a7ab80", "scanner": "scanner-primary", "fingerprint": "defcade0ffcb66a8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c9dea66692a02b7c", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/lib/supabase/client.ts:153"}, "properties": {"repobilityId": "c27ebc78835179bf", "scanner": "scanner-primary", "fingerprint": "c9dea66692a02b7c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f3f11c1dc9795804", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/offline-queue/base-queue.ts:238"}, "properties": {"repobilityId": "a3694dcfa28162c1", "scanner": "scanner-primary", "fingerprint": "f3f11c1dc9795804", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a85abd487f2510bc", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/offline-queue/form-adapter.ts:38"}, "properties": {"repobilityId": "39818499d5ad3374", "scanner": "scanner-primary", "fingerprint": "a85abd487f2510bc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d2a5ecb9d7b2b889", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/offline-queue/payment-adapter.ts:42"}, "properties": {"repobilityId": "980470e4f347b508", "scanner": "scanner-primary", "fingerprint": "d2a5ecb9d7b2b889", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4c4baea86785e651", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/hooks/useOfflineQueue.test.ts:226"}, "properties": {"repobilityId": "08979c37b36f4e33", "scanner": "scanner-primary", "fingerprint": "4c4baea86785e651", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e1d457edcb90d4b8", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/hooks/useConnections.ts:100"}, "properties": {"repobilityId": "c6eecea5dac67a0a", "scanner": "scanner-primary", "fingerprint": "e1d457edcb90d4b8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4d83e01d7b286982", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/hooks/useOfflineQueue.ts:153"}, "properties": {"repobilityId": "86fbd6ed6bcf39b0", "scanner": "scanner-primary", "fingerprint": "4d83e01d7b286982", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d500bb441eb4c7e7", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/hooks/useEmbedThemeColor.ts:28"}, "properties": {"repobilityId": "b2262baad9feeef4", "scanner": "scanner-primary", "fingerprint": "d500bb441eb4c7e7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1bf3b9fbcf3a69c2", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/hooks/useReadReceipts.ts:81"}, "properties": {"repobilityId": "57bf7cf5d5a98e5a", "scanner": "scanner-primary", "fingerprint": "1bf3b9fbcf3a69c2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b4ed1aefdc4931d7", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/services/messaging/gdpr-service.ts:431"}, "properties": {"repobilityId": "b97c4468ef3a0b1f", "scanner": "scanner-primary", "fingerprint": "b4ed1aefdc4931d7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4fb51b23734f7425", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/services/messaging/message-service.ts:168"}, "properties": {"repobilityId": "177102231a41db1e", "scanner": "scanner-primary", "fingerprint": "4fb51b23734f7425", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4edba13899e2a30a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/messaging/message-service.ts:559"}, "properties": {"repobilityId": "5372243fe94eddb1", "scanner": "scanner-primary", "fingerprint": "4edba13899e2a30a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-aa5422dc1c457052", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/services/messaging/key-service.ts:40"}, "properties": {"repobilityId": "0f39df10173cea17", "scanner": "scanner-primary", "fingerprint": "aa5422dc1c457052", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7dd08047f5fcfc36", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/services/messaging/__tests__/key-service.test.ts:62"}, "properties": {"repobilityId": "43133de8112366bf", "scanner": "scanner-primary", "fingerprint": "7dd08047f5fcfc36", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-14258bddbb48fe27", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/services/messaging/__tests__/message-service.test.ts:26"}, "properties": {"repobilityId": "2b83278a92dba00a", "scanner": "scanner-primary", "fingerprint": "14258bddbb48fe27", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-eab8b6346c2579e8", "level": "note", "message": {"text": "57 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "87503ae5fa8c7c7d", "scanner": "scanner-primary", "fingerprint": "eab8b6346c2579e8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "cf41b37140e0de6d", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "58614d07a064b16a", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-0aa34b3ed50de814", "level": "error", "message": {"text": "Dangling fetch: GET /api/user (docs/specs/040-feature-040-code/contracts/result.ts:125)"}, "properties": {"repobilityId": "2fdd3086944f3071", "scanner": "scanner-primary", "fingerprint": "0aa34b3ed50de814", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b5632245ebacb518", "level": "error", "message": {"text": "Dangling fetch: GET https://api.supabase.com/v1/projects/${projectRef}/config/auth (scripts/supabase/set-auth-config.ts:72)"}, "properties": {"repobilityId": "f7d4297fe8cced52", "scanner": "scanner-primary", "fingerprint": "b5632245ebacb518", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b9df4c4f1d613666", "level": "error", "message": {"text": "Dangling fetch: PATCH https://api.supabase.com/v1/projects/${projectRef}/config/auth (scripts/supabase/set-auth-config.ts:93)"}, "properties": {"repobilityId": "b12375086e4dbd3a", "scanner": "scanner-primary", "fingerprint": "b9df4c4f1d613666", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1fb8acf98635031a", "level": "error", "message": {"text": "Dangling fetch: POST https://api.resend.com/emails (supabase/functions/send-payment-email/index.ts:56)"}, "properties": {"repobilityId": "d7cf1a677adc7f07", "scanner": "scanner-primary", "fingerprint": "1fb8acf98635031a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-52b2fcb1b200f467", "level": "error", "message": {"text": "Dangling fetch: POST https://api-m.paypal.com/v1/oauth2/token (supabase/functions/paypal-webhook/index.ts:172)"}, "properties": {"repobilityId": "372e7db184a3b7ab", "scanner": "scanner-primary", "fingerprint": "52b2fcb1b200f467", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-732b8a24809fe6b5", "level": "error", "message": {"text": "Dangling fetch: POST https://api-m.paypal.com/v1/notifications/verify-webhook-signature (supabase/functions/paypal-webhook/index.ts:187)"}, "properties": {"repobilityId": "8d957233bb995856", "scanner": "scanner-primary", "fingerprint": "732b8a24809fe6b5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-daa69b26966346f7", "level": "error", "message": {"text": "Dangling fetch: GET /api/user (src/types/result.ts:139)"}, "properties": {"repobilityId": "e47f0d383507e59e", "scanner": "scanner-primary", "fingerprint": "daa69b26966346f7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e366f7a2ead96424", "level": "error", "message": {"text": "Dangling fetch: GET /api/data (src/components/molecular/CodeBlock/CodeBlock.stories.tsx:48)"}, "properties": {"repobilityId": "f91a0fd55f0c0920", "scanner": "scanner-primary", "fingerprint": "e366f7a2ead96424", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a37069658568ab12", "level": "note", "message": {"text": "Unused endpoint: PUT /api/blog/posts"}, "properties": {"repobilityId": "cccc4e9aac91eeb1", "scanner": "scanner-primary", "fingerprint": "a37069658568ab12", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}