{"version": "2.1.0", "$schema": "https://json.schemastore.org/sarif-2.1.0.json", "runs": [{"tool": {"driver": {"name": "Repobility", "informationUri": "https://repobility.com", "rules": [{"id": "scanner-4de0b5bbb33c6b7e", "name": "Stray `console.log` in TS/JS \u2014 api/_tts.ts:1723", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 api/_tts.ts:1723"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cc26bb97f90f1a3a", "name": "Stray `console.log` in TS/JS \u2014 scripts/revoiceCanonTargeted.ts:290", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/revoiceCanonTargeted.ts:290"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-918550b24406bf64", "name": "Stray `console.log` in TS/JS \u2014 scripts/renderVoiceAudition.ts:317", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/renderVoiceAudition.ts:317"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b90d0889ec2ec5fa", "name": "Stray `console.log` in TS/JS \u2014 scripts/embed-pictures.ts:64", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/embed-pictures.ts:64"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ddf9c0f41ec71883", "name": "Stray `console.log` in TS/JS \u2014 scripts/verifyBlendBytePreservation.ts:145", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verifyBlendBytePreservation.ts:145"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-10660e23584cea89", "name": "Stray `console.log` in TS/JS \u2014 scripts/revoiceCanon.ts:167", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/revoiceCanon.ts:167"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4d6099378ac157a0", "name": "Stray `console.log` in TS/JS \u2014 scripts/renderBlendAudition.ts:237", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/renderBlendAudition.ts:237"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4be35c39335fadd1", "name": "Stray `console.log` in TS/JS \u2014 scripts/bakeRecapFocus.ts:232", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/bakeRecapFocus.ts:232"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1f8db832cb420935", "name": "Stray `console.log` in TS/JS \u2014 scripts/canonLint.ts:575", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/canonLint.ts:575"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fd9e9d9f6ffff639", "name": "Stray `console.log` in TS/JS \u2014 scripts/verifyThreeHintBytePreservation.ts:187", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verifyThreeHintBytePreservation.ts:187"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-342677c9faaf97e4", "name": "Stray `console.log` in TS/JS \u2014 scripts/compositionLint.ts:5246", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/compositionLint.ts:5246"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-505c316f39037e01", "name": "Stray `console.log` in TS/JS \u2014 scripts/verifyRecapFocusBytePreservation.ts:167", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verifyRecapFocusBytePreservation.ts:167"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-895cd66d038e1a7d", "name": "Stray `console.log` in TS/JS \u2014 scripts/rebakeBlendCandidateF.ts:140", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/rebakeBlendCandidateF.ts:140"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1b6a46a1437f2b08", "name": "Stray `console.log` in TS/JS \u2014 scripts/bakeLetterSoundsPinned.ts:251", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/bakeLetterSoundsPinned.ts:251"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-60ec4fffc7c1107e", "name": "Stray `console.log` in TS/JS \u2014 scripts/generateSessionCanon.ts:679", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generateSessionCanon.ts:679"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7120300e404d8655", "name": "Stray `console.log` in TS/JS \u2014 scripts/rebakeThreeHint.ts:517", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/rebakeThreeHint.ts:517"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6c3db63cb9471783", "name": "Stray `console.log` in TS/JS \u2014 src/App.tsx:194", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/App.tsx:194"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f52b3e8a01804350", "name": "Stray `console.log` in TS/JS \u2014 src/screens/Hub/Hub.tsx:348", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/screens/Hub/Hub.tsx:348"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3e88eca971aad65a", "name": "Stray `console.log` in TS/JS \u2014 src/screens/Hub/useParentGateLongPress.ts:119", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/screens/Hub/useParentGateLongPress.ts: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-dd68e964fe988482", "name": "Insecure pattern 'node_child_process' in scripts/verifyBlendBytePreservation.ts:25", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/verifyBlendBytePreservation.ts:25"}, "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-0dad02beb0cff1e5", "name": "Insecure pattern 'node_child_process' in scripts/revoiceCanon.ts:36", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/revoiceCanon.ts:36"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-155435a31b90a9a6", "name": "Insecure pattern 'node_child_process' in scripts/verifyThreeHintBytePreservation.ts:25", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/verifyThreeHintBytePreservation.ts:25"}, "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-1db9eba922e02dc2", "name": "Insecure pattern 'node_child_process' in scripts/verifyRecapFocusBytePreservation.ts:25", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/verifyRecapFocusBytePreservation.ts:25"}, "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-0f4d4e24a5ccc2b1", "name": "Insecure pattern 'new_function_used' in scripts/render-sfx-mp3s.mjs:72", "shortDescription": {"text": "Insecure pattern 'new_function_used' in scripts/render-sfx-mp3s.mjs:72"}, "fullDescription": {"text": "Found a known-risky pattern (new_function_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-41066ea81f2fde26", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/voice-audition.html:439", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/voice-audition.html:439"}, "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-bc183cab38ac8deb", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/voice-qa.html:896", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/voice-qa.html:896"}, "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-d86c6b62ce57f4c3", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/blend-audition.html:443", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/blend-audition.html:443"}, "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-63d11ce1453a3c66", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/letter-sounds-test.html:366", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/letter-sounds-test.html:366"}, "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-56d6eaedf7f7b57f", "name": "Insecure pattern 'local_storage_auth_token' in src/lib/debug/DebugOverlay.test.tsx:450", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in src/lib/debug/DebugOverlay.test.tsx:450"}, "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-6682d70fb9a94e5b", "name": "Insecure pattern 'cors_wildcard' in e2e/cvc-words-short-i-regression.spec.ts:202", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in e2e/cvc-words-short-i-regression.spec.ts:202"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7f4001f5ead7ce64", "name": "Insecure pattern 'cors_wildcard' in e2e/letter-sounds-regression.spec.ts:386", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in e2e/letter-sounds-regression.spec.ts:386"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6d59335688ac8027", "name": "Insecure pattern 'cors_wildcard' in e2e/cvc-cross-vowel-review-firing.spec.ts:151", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in e2e/cvc-cross-vowel-review-firing.spec.ts:151"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-488008023ee2f555", "name": "Insecure pattern 'cors_wildcard' in e2e/sub-to-10-payload-shape.spec.ts:244", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in e2e/sub-to-10-payload-shape.spec.ts:244"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cbe03d9719f735df", "name": "Insecure pattern 'cors_wildcard' in e2e/cvc-phoneme-blend.spec.ts:111", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in e2e/cvc-phoneme-blend.spec.ts:111"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c88f6a7964cfaa2b", "name": "Insecure pattern 'cors_wildcard' in e2e/simple-sentences-content.spec.ts:454", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in e2e/simple-sentences-content.spec.ts:454"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b0d8b381bcda13de", "name": "Insecure pattern 'cors_wildcard' in e2e/slow-fact-directive-injection.spec.ts:62", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in e2e/slow-fact-directive-injection.spec.ts:62"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-454be324758ea3f2", "name": "Insecure pattern 'cors_wildcard' in e2e/sight-words-content.spec.ts:299", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in e2e/sight-words-content.spec.ts:299"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-14034ad333e972ec", "name": "Insecure pattern 'cors_wildcard' in e2e/cvc-words-short-o-regression.spec.ts:194", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in e2e/cvc-words-short-o-regression.spec.ts:194"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0d03e9fb3f83273c", "name": "Insecure pattern 'cors_wildcard' in e2e/letter-sounds-per-vowel-progression.spec.ts:239", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in e2e/letter-sounds-per-vowel-progression.spec.ts:239"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e32c8f35d78f205b", "name": "Insecure pattern 'cors_wildcard' in e2e/digraphs-th-content.spec.ts:443", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in e2e/digraphs-th-content.spec.ts:443"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-44db2cc3b8239792", "name": "Insecure pattern 'cors_wildcard' in e2e/cvc-cross-vowel-mix-regression.spec.ts:151", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in e2e/cvc-cross-vowel-mix-regression.spec.ts:151"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-954c208167935b71", "name": "Insecure pattern 'cors_wildcard' in e2e/cvc-words-short-u-regression.spec.ts:180", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in e2e/cvc-words-short-u-regression.spec.ts:180"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-706e9b1d0801b947", "name": "Insecure pattern 'cors_wildcard' in e2e/simple-sentences-progression.spec.ts:382", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in e2e/simple-sentences-progression.spec.ts:382"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-06daff1c0b914ef6", "name": "Insecure pattern 'cors_wildcard' in e2e/digraphs-sh-content.spec.ts:277", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in e2e/digraphs-sh-content.spec.ts:277"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-38bcee8153a6a77c", "name": "Insecure pattern 'cors_wildcard' in e2e/sight-words-progression.spec.ts:81", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in e2e/sight-words-progression.spec.ts:81"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-625e4a6bb916e6f9", "name": "Insecure pattern 'cors_wildcard' in e2e/letter-names-regression.spec.ts:283", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in e2e/letter-names-regression.spec.ts:283"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-99621e3f6826422f", "name": "Insecure pattern 'cors_wildcard' in e2e/cvc-words-regression.spec.ts:219", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in e2e/cvc-words-regression.spec.ts:219"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-615da5397e8fcf6d", "name": "Insecure pattern 'cors_wildcard' in e2e/leitner-directive-injection.spec.ts:110", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in e2e/leitner-directive-injection.spec.ts:110"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3bd0c186a90f7860", "name": "Insecure pattern 'cors_wildcard' in e2e/digraphs-ch-content.spec.ts:350", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in e2e/digraphs-ch-content.spec.ts:350"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-aa31c92b5e54097d", "name": "Insecure pattern 'cors_wildcard' in e2e/math-three-hint.spec.ts:230", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in e2e/math-three-hint.spec.ts:230"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c6293491f640f03c", "name": "Insecure pattern 'cors_wildcard' in e2e/letter-names-first-time-experience.spec.ts:184", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in e2e/letter-names-first-time-experience.spec.ts:184"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-54c5f62855e673b1", "name": "Insecure pattern 'cors_wildcard' in e2e/_helpers/cloudSyncFixtures.ts:80", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in e2e/_helpers/cloudSyncFixtures.ts:80"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-913da39fe0f5a2a4", "name": "Insecure pattern 'cors_wildcard' in e2e/_helpers/mockClaude.ts:75", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in e2e/_helpers/mockClaude.ts:75"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6372cebde0220094", "name": "No auth library detected", "shortDescription": {"text": "No auth library detected"}, "fullDescription": {"text": "The scanner did not find any standard auth library (JWT, OAuth, NextAuth, Auth0, etc.). The repo has auth/admin/session surface indicators, so auth may live in custom code, in a separate service, or be missing."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "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/setup-node@v4 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-f77ff413f452d214", "name": "Very large file: api/_tts.ts (1805 lines)", "shortDescription": {"text": "Very large file: api/_tts.ts (1805 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-b1d6bdf341fc18ee", "name": "Very large file: api/_planner.ts (3350 lines)", "shortDescription": {"text": "Very large file: api/_planner.ts (3350 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-b94a1551ace5d9b3", "name": "Very large file: api/_tts.test.ts (2203 lines)", "shortDescription": {"text": "Very large file: api/_tts.test.ts (2203 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-a4718e1dfc019488", "name": "Very large file: api/claude.test.ts (2080 lines)", "shortDescription": {"text": "Very large file: api/claude.test.ts (2080 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-d299910d02efc1b5", "name": "Very large file: api/_planner.test.ts (5290 lines)", "shortDescription": {"text": "Very large file: api/_planner.test.ts (5290 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-bea6830714889dfb", "name": "Very large file: scripts/compositionLint.ts (5268 lines)", "shortDescription": {"text": "Very large file: scripts/compositionLint.ts (5268 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-3ca9eeb5fc7a6c20", "name": "Very large file: scripts/compositionLint.test.ts (8770 lines)", "shortDescription": {"text": "Very large file: scripts/compositionLint.test.ts (8770 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-f03adb9c2c1c1a4a", "name": "Very large file: src/App.tsx (1724 lines)", "shortDescription": {"text": "Very large file: src/App.tsx (1724 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-357c18498ae24a0a", "name": "Very large file: src/screens/Greet.tsx (1633 lines)", "shortDescription": {"text": "Very large file: src/screens/Greet.tsx (1633 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-83bc02b68164aa13", "name": "Very large file: src/screens/Greet.test.tsx (2041 lines)", "shortDescription": {"text": "Very large file: src/screens/Greet.test.tsx (2041 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-d0eebd5f998967f2", "name": "Very large file: src/screens/Math/distractors.test.ts (1663 lines)", "shortDescription": {"text": "Very large file: src/screens/Math/distractors.test.ts (1663 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-be9f9b06f4349039", "name": "Very large file: src/screens/Math/Math.tsx (3813 lines)", "shortDescription": {"text": "Very large file: src/screens/Math/Math.tsx (3813 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-377dacf8027b1487", "name": "Very large file: src/screens/Math/Math.test.tsx (5162 lines)", "shortDescription": {"text": "Very large file: src/screens/Math/Math.test.tsx (5162 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-5ee00cc4bb2701f0", "name": "Very large file: src/screens/SessionEnd/SessionEnd.tsx (1337 lines)", "shortDescription": {"text": "Very large file: src/screens/SessionEnd/SessionEnd.tsx (1337 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-d9ad3f7477443b9c", "name": "Very large file: src/screens/SessionEnd/progressHistory.test.ts (1558 lines)", "shortDescription": {"text": "Very large file: src/screens/SessionEnd/progressHistory.test.ts (1558 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-012784454d2e74c7", "name": "Very large file: src/screens/WordSong/plannerRoundTrip.test.ts (1419 lines)", "shortDescription": {"text": "Very large file: src/screens/WordSong/plannerRoundTrip.test.ts (1419 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-385dcd6633ea068c", "name": "Very large file: src/screens/WordSong/planFromServer.test.ts (1628 lines)", "shortDescription": {"text": "Very large file: src/screens/WordSong/planFromServer.test.ts (1628 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-c9099215b4c8da24", "name": "Very large file: src/screens/WordSong/WordSong.test.tsx (2966 lines)", "shortDescription": {"text": "Very large file: src/screens/WordSong/WordSong.test.tsx (2966 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-483bd8a5a196b6d9", "name": "Very large file: src/screens/WordSong/wordDistractors.test.ts (1820 lines)", "shortDescription": {"text": "Very large file: src/screens/WordSong/wordDistractors.test.ts (1820 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-c15bf9d6f3f35b7e", "name": "Very large file: src/screens/WordSong/WordSong.tsx (2746 lines)", "shortDescription": {"text": "Very large file: src/screens/WordSong/WordSong.tsx (2746 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-287aaf8b524a8a8a", "name": "Very large file: src/screens/WordSong/wordPack.ts (2455 lines)", "shortDescription": {"text": "Very large file: src/screens/WordSong/wordPack.ts (2455 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-2877a1e5fc0b7255", "name": "Very large file: src/lib/progress/mastery.test.ts (1953 lines)", "shortDescription": {"text": "Very large file: src/lib/progress/mastery.test.ts (1953 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-b8aa779fa21cd2a8", "name": "Very large file: e2e/two-digit-addsub.spec.ts (1411 lines)", "shortDescription": {"text": "Very large file: e2e/two-digit-addsub.spec.ts (1411 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 155 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 79 placeholder/mock markers across 35 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-122f91b7f2906dc4", "name": "Agent authority lacks a verifier contract: .claude/settings.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/settings.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-070bdfa9b29853ef", "name": "Agent instruction/config may expose a secret: .claude/docs/skill-trees-and-content.md", "shortDescription": {"text": "Agent instruction/config may expose a secret: .claude/docs/skill-trees-and-content.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-a983328cacd8d75c", "name": "Agent authority lacks a verifier contract: .claude/docs/audio-system.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/docs/audio-system.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-bc1ed6067a08bf53", "name": "Agent instruction/config may expose a secret: .claude/docs/progress-and-persistence.md", "shortDescription": {"text": "Agent instruction/config may expose a secret: .claude/docs/progress-and-persistence.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-3ff695835a3b78b7", "name": "Commented-code block (8 lines) in playwright.config.ts:34", "shortDescription": {"text": "Commented-code block (8 lines) in playwright.config.ts:34"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9f208bce8b8297b0", "name": "Commented-code block (5 lines) in vite.config.ts:81", "shortDescription": {"text": "Commented-code block (5 lines) in vite.config.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-8dcc7d0d66c1ed94", "name": "Commented-code block (5 lines) in tests/qa/noFlameInUI.test.ts:59", "shortDescription": {"text": "Commented-code block (5 lines) in tests/qa/noFlameInUI.test.ts:59"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-516c4408e7c27195", "name": "Commented-code block (5 lines) in tests/qa/mathScreenAccessibility.test.tsx:184", "shortDescription": {"text": "Commented-code block (5 lines) in tests/qa/mathScreenAccessibility.test.tsx:184"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f656a41f7cbf9872", "name": "Commented-code block (8 lines) in api/_progressStore.ts:3", "shortDescription": {"text": "Commented-code block (8 lines) in api/_progressStore.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bfe9f9d44dde9a88", "name": "Commented-code block (5 lines) in api/voice-qa-report.test.ts:106", "shortDescription": {"text": "Commented-code block (5 lines) in api/voice-qa-report.test.ts:106"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8bffc7f885ab8628", "name": "Commented-code block (8 lines) in api/_tts.ts:3", "shortDescription": {"text": "Commented-code block (8 lines) in api/_tts.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-af01e0dad4561c90", "name": "Commented-code block (5 lines) in api/_planner.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in api/_planner.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-39d5a633e0bf7570", "name": "Commented-code block (7 lines) in api/_tts.test.ts:172", "shortDescription": {"text": "Commented-code block (7 lines) in api/_tts.test.ts:172"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0535a5c1dbf48f00", "name": "Commented-code block (5 lines) in api/_sessionCache.test.ts:73", "shortDescription": {"text": "Commented-code block (5 lines) in api/_sessionCache.test.ts: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-785505b593336a1c", "name": "Commented-code block (7 lines) in api/claude.test.ts:102", "shortDescription": {"text": "Commented-code block (7 lines) in api/claude.test.ts:102"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d5cf3d867847bf37", "name": "Commented-code block (8 lines) in api/_canon.ts:3", "shortDescription": {"text": "Commented-code block (8 lines) in api/_canon.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6bca7d85341f1fce", "name": "Commented-code block (38 lines) in api/claude.ts:3", "shortDescription": {"text": "Commented-code block (38 lines) in api/claude.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ef734c774c81ca1c", "name": "Commented-code block (5 lines) in api/_session.test.ts:44", "shortDescription": {"text": "Commented-code block (5 lines) in api/_session.test.ts:44"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-66d9de8f4c7e83f7", "name": "Commented-code block (6 lines) in api/_types.ts:36", "shortDescription": {"text": "Commented-code block (6 lines) in api/_types.ts:36"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f7f79bd59bbdaae4", "name": "Commented-code block (6 lines) in api/_session.ts:14", "shortDescription": {"text": "Commented-code block (6 lines) in api/_session.ts:14"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-045ba29710a8f4b5", "name": "Commented-code block (7 lines) in api/progress.ts:6", "shortDescription": {"text": "Commented-code block (7 lines) in api/progress.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-aef4b5582565c755", "name": "Commented-code block (8 lines) in api/voice-qa-report.ts:8", "shortDescription": {"text": "Commented-code block (8 lines) in api/voice-qa-report.ts:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5a4ee2b2c4bbc1e7", "name": "Commented-code block (5 lines) in api/_firstEncounterGate.test.ts:99", "shortDescription": {"text": "Commented-code block (5 lines) in api/_firstEncounterGate.test.ts:99"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7b68776b6af35e3f", "name": "Commented-code block (11 lines) in api/_planner.test.ts:263", "shortDescription": {"text": "Commented-code block (11 lines) in api/_planner.test.ts:263"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5d57376411887e15", "name": "Commented-code block (6 lines) in api/_plannerWordList.ts:12", "shortDescription": {"text": "Commented-code block (6 lines) in api/_plannerWordList.ts:12"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-975539876bd59c19", "name": "Commented-code block (7 lines) in api/_rateLimit.ts:3", "shortDescription": {"text": "Commented-code block (7 lines) in api/_rateLimit.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3e0db955afa203a4", "name": "Commented-code block (7 lines) in api/_sessionCache.ts:3", "shortDescription": {"text": "Commented-code block (7 lines) in api/_sessionCache.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-240e91aa2e3a981e", "name": "Commented-code block (11 lines) in api/_firstEncounterGate.ts:5", "shortDescription": {"text": "Commented-code block (11 lines) in api/_firstEncounterGate.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-99bfaf6dd2ba1d42", "name": "Commented-code block (6 lines) in scripts/render-greet-mp3s.mjs:144", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/render-greet-mp3s.mjs: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-62d5dbdca46d64d9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/render-greet-mp3s.mjs:176", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/render-greet-mp3s.mjs:176"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1b9215323a156746", "name": "Commented-code block (7 lines) in scripts/tts-prosody-samples.mjs:246", "shortDescription": {"text": "Commented-code block (7 lines) in scripts/tts-prosody-samples.mjs:246"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-549103b76591faec", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/tts-prosody-samples.mjs:40", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/tts-prosody-samples.mjs:40"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b0db10cf7a2cc8ea", "name": "Commented-code block (5 lines) in scripts/revoiceCanon.ts:150", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/revoiceCanon.ts:150"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-45b22af90fcaa01a", "name": "Commented-code block (7 lines) in scripts/canonLint.ts:128", "shortDescription": {"text": "Commented-code block (7 lines) in scripts/canonLint.ts:128"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-32ace5672037e6cd", "name": "Commented-code block (36 lines) in scripts/generateSessionCanon.test.ts:45", "shortDescription": {"text": "Commented-code block (36 lines) in scripts/generateSessionCanon.test.ts:45"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1a600485a73793de", "name": "Commented-code block (6 lines) in scripts/embed-emma-assets.mjs:29", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/embed-emma-assets.mjs:29"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c6d4a468f9e6e13c", "name": "Commented-code block (11 lines) in scripts/voiceAuditionVariants.ts:90", "shortDescription": {"text": "Commented-code block (11 lines) in scripts/voiceAuditionVariants.ts:90"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-924c46453d954b89", "name": "Commented-code block (7 lines) in scripts/compositionLint.ts:138", "shortDescription": {"text": "Commented-code block (7 lines) in scripts/compositionLint.ts: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-f1f6bcb58456ae87", "name": "Commented-code block (5 lines) in scripts/compositionLint.test.ts:478", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/compositionLint.test.ts:478"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2b4ebc739a536227", "name": "Commented-code block (5 lines) in scripts/render-hub-mp3s.mjs:153", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/render-hub-mp3s.mjs: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-06c45cc2e1c17f34", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/render-hub-mp3s.mjs:212", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/render-hub-mp3s.mjs:212"}, "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-f47361346c334c32", "name": "Commented-code block (6 lines) in scripts/blendAuditionVariants.ts:186", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/blendAuditionVariants.ts:186"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1f98ecce2f42813e", "name": "Commented-code block (9 lines) in scripts/bakeLetterSoundsPinned.ts:59", "shortDescription": {"text": "Commented-code block (9 lines) in scripts/bakeLetterSoundsPinned.ts:59"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ee850298aa977b14", "name": "Commented-code block (9 lines) in scripts/generateSessionCanon.ts:184", "shortDescription": {"text": "Commented-code block (9 lines) in scripts/generateSessionCanon.ts:184"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-008c40983094acf8", "name": "Commented-code block (6 lines) in src/App.test.tsx:69", "shortDescription": {"text": "Commented-code block (6 lines) in src/App.test.tsx:69"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c7e50f2e4325975c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/App.test.tsx:266", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/App.test.tsx:266"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-af8057a8862bdd0f", "name": "Commented-code block (5 lines) in src/App.tsx:323", "shortDescription": {"text": "Commented-code block (5 lines) in src/App.tsx:323"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7e57c2a865fc625c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/App.tsx:1027", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/App.tsx:1027"}, "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-d7bd0441d7cae0d7", "name": "Commented-code block (6 lines) in src/test/setup.ts:11", "shortDescription": {"text": "Commented-code block (6 lines) in src/test/setup.ts:11"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f7b44c7622e5bd63", "name": "Commented-code block (5 lines) in src/screens/Greet.tsx:245", "shortDescription": {"text": "Commented-code block (5 lines) in src/screens/Greet.tsx:245"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7d56a4632769718f", "name": "Commented-code block (6 lines) in src/screens/greetSequence.test.ts:118", "shortDescription": {"text": "Commented-code block (6 lines) in src/screens/greetSequence.test.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-7bf1502de04e2796", "name": "Commented-code block (5 lines) in src/screens/greetSequence.ts:280", "shortDescription": {"text": "Commented-code block (5 lines) in src/screens/greetSequence.ts:280"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ed7c8a43416c0eb0", "name": "Commented-code block (7 lines) in src/screens/Greet.test.tsx:288", "shortDescription": {"text": "Commented-code block (7 lines) in src/screens/Greet.test.tsx:288"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-87d82100853d0067", "name": "Commented-code block (7 lines) in src/screens/Math/planFromServer.test.ts:93", "shortDescription": {"text": "Commented-code block (7 lines) in src/screens/Math/planFromServer.test.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-dac2f5c4f708c2b1", "name": "Commented-code block (5 lines) in src/screens/Math/distractors.test.ts:397", "shortDescription": {"text": "Commented-code block (5 lines) in src/screens/Math/distractors.test.ts:397"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2f6febd1154aad51", "name": "Commented-code block (5 lines) in src/screens/Math/Math.tsx:691", "shortDescription": {"text": "Commented-code block (5 lines) in src/screens/Math/Math.tsx:691"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d24ad0e2fc05391d", "name": "Commented-code block (6 lines) in src/screens/Math/subitisingScaffold.test.ts:241", "shortDescription": {"text": "Commented-code block (6 lines) in src/screens/Math/subitisingScaffold.test.ts:241"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-be780ea91c8228ce", "name": "Commented-code block (6 lines) in src/screens/Math/dotCard.test.ts:140", "shortDescription": {"text": "Commented-code block (6 lines) in src/screens/Math/dotCard.test.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-79c7f1e29c1b84ea", "name": "Commented-code block (14 lines) in src/screens/Math/DotCardOverlay.tsx:115", "shortDescription": {"text": "Commented-code block (14 lines) in src/screens/Math/DotCardOverlay.tsx: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-90e7c799190daab3", "name": "Commented-code block (5 lines) in src/screens/Math/sessionPlans.test.ts:209", "shortDescription": {"text": "Commented-code block (5 lines) in src/screens/Math/sessionPlans.test.ts:209"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4c492e2125df7936", "name": "Commented-code block (5 lines) in src/screens/Math/SubMinuendOverlay.tsx:108", "shortDescription": {"text": "Commented-code block (5 lines) in src/screens/Math/SubMinuendOverlay.tsx:108"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e021ddf17ca60c47", "name": "Legacy-named symbol `hasLegacy` in src/screens/Math/planFromServer.ts:386", "shortDescription": {"text": "Legacy-named symbol `hasLegacy` in src/screens/Math/planFromServer.ts:386"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dbfbf69765657a38", "name": "Commented-code block (6 lines) in src/screens/Math/planFromServer.ts:294", "shortDescription": {"text": "Commented-code block (6 lines) in src/screens/Math/planFromServer.ts:294"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-542302d948d78e99", "name": "Commented-code block (5 lines) in src/screens/Math/Math.test.tsx:818", "shortDescription": {"text": "Commented-code block (5 lines) in src/screens/Math/Math.test.tsx:818"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4c5a763d99d57f38", "name": "Commented-code block (6 lines) in src/screens/Math/sessionPlans.ts:359", "shortDescription": {"text": "Commented-code block (6 lines) in src/screens/Math/sessionPlans.ts:359"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4165301eff6b1434", "name": "Commented-code block (11 lines) in src/screens/Math/distractors.ts:283", "shortDescription": {"text": "Commented-code block (11 lines) in src/screens/Math/distractors.ts:283"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-97ec0d8e13058caa", "name": "Commented-code block (5 lines) in src/screens/Math/subitisingScaffold.ts:217", "shortDescription": {"text": "Commented-code block (5 lines) in src/screens/Math/subitisingScaffold.ts:217"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1e9144c7271cb559", "name": "Commented-code block (6 lines) in src/screens/Math/DotCardOverlay.test.tsx:190", "shortDescription": {"text": "Commented-code block (6 lines) in src/screens/Math/DotCardOverlay.test.tsx:190"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4d964582c82a4cc4", "name": "Commented-code block (6 lines) in src/screens/Math/__tests__/emma-pose-beats.test.tsx:221", "shortDescription": {"text": "Commented-code block (6 lines) in src/screens/Math/__tests__/emma-pose-beats.test.tsx:221"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-60bbfb8c421ae95f", "name": "Commented-code block (5 lines) in src/screens/ParentSettings/ParentSettings.tsx:314", "shortDescription": {"text": "Commented-code block (5 lines) in src/screens/ParentSettings/ParentSettings.tsx:314"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-66d91e4dde7eff78", "name": "Commented-code block (5 lines) in src/screens/Hub/progressProjection.ts:95", "shortDescription": {"text": "Commented-code block (5 lines) in src/screens/Hub/progressProjection.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-d07c737ccdfd168a", "name": "Commented-code block (8 lines) in src/screens/Hub/Hub.tsx:202", "shortDescription": {"text": "Commented-code block (8 lines) in src/screens/Hub/Hub.tsx:202"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4a92c5d905d6f60f", "name": "Commented-code block (7 lines) in src/screens/Hub/stages.ts:19", "shortDescription": {"text": "Commented-code block (7 lines) in src/screens/Hub/stages.ts:19"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-012c182793e53de5", "name": "Commented-code block (11 lines) in src/screens/Hub/promotionRoundTrip.test.tsx:209", "shortDescription": {"text": "Commented-code block (11 lines) in src/screens/Hub/promotionRoundTrip.test.tsx:209"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-02f4fc19f70e903e", "name": "Commented-code block (5 lines) in src/screens/Hub/Hub.test.tsx:68", "shortDescription": {"text": "Commented-code block (5 lines) in src/screens/Hub/Hub.test.tsx: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-b9972c7099b8694b", "name": "Commented-code block (5 lines) in src/screens/Hub/stageIcons.tsx:157", "shortDescription": {"text": "Commented-code block (5 lines) in src/screens/Hub/stageIcons.tsx:157"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-db2d822cb908e2c4", "name": "Commented-code block (9 lines) in src/screens/Hub/playHubLine.ts:245", "shortDescription": {"text": "Commented-code block (9 lines) in src/screens/Hub/playHubLine.ts:245"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8601fd0496ec338c", "name": "Commented-code block (8 lines) in src/screens/SessionEnd/SessionEnd.tsx:434", "shortDescription": {"text": "Commented-code block (8 lines) in src/screens/SessionEnd/SessionEnd.tsx:434"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b7636f17cd496ebf", "name": "Commented-code block (5 lines) in src/screens/SessionEnd/progressHistory.test.ts:172", "shortDescription": {"text": "Commented-code block (5 lines) in src/screens/SessionEnd/progressHistory.test.ts:172"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b4a1ee58d29529f1", "name": "Commented-code block (7 lines) in src/screens/SessionEnd/progressHistory.ts:345", "shortDescription": {"text": "Commented-code block (7 lines) in src/screens/SessionEnd/progressHistory.ts:345"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ee43a18816537a8c", "name": "Commented-code block (6 lines) in src/screens/SessionEnd/SessionEnd.test.tsx:90", "shortDescription": {"text": "Commented-code block (6 lines) in src/screens/SessionEnd/SessionEnd.test.tsx:90"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8aa27944dc63b4d5", "name": "Commented-code block (5 lines) in src/screens/SessionEnd/StardustCounter.tsx:48", "shortDescription": {"text": "Commented-code block (5 lines) in src/screens/SessionEnd/StardustCounter.tsx:48"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-37c02a573280b740", "name": "Commented-code block (5 lines) in src/screens/SessionEnd/sessionHistory.ts:355", "shortDescription": {"text": "Commented-code block (5 lines) in src/screens/SessionEnd/sessionHistory.ts:355"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f5475d4daa8f6abd", "name": "Commented-code block (8 lines) in src/screens/WordSong/wordDistractors.ts:159", "shortDescription": {"text": "Commented-code block (8 lines) in src/screens/WordSong/wordDistractors.ts:159"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-77f4c628ed8fce16", "name": "Commented-code block (6 lines) in src/screens/WordSong/plannerRoundTrip.test.ts:334", "shortDescription": {"text": "Commented-code block (6 lines) in src/screens/WordSong/plannerRoundTrip.test.ts:334"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7d6a9584ad49d276", "name": "Commented-code block (7 lines) in src/screens/WordSong/planFromServer.test.ts:55", "shortDescription": {"text": "Commented-code block (7 lines) in src/screens/WordSong/planFromServer.test.ts:55"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-853a131d965d6a87", "name": "Commented-code block (5 lines) in src/screens/WordSong/sceneRegistry.test.ts:55", "shortDescription": {"text": "Commented-code block (5 lines) in src/screens/WordSong/sceneRegistry.test.ts:55"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-907471081acc61c1", "name": "Commented-code block (11 lines) in src/screens/WordSong/letterSoundsPool.ts:127", "shortDescription": {"text": "Commented-code block (11 lines) in src/screens/WordSong/letterSoundsPool.ts:127"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b9ad311480a42899", "name": "Commented-code block (5 lines) in src/screens/WordSong/planFromServer.ts:122", "shortDescription": {"text": "Commented-code block (5 lines) in src/screens/WordSong/planFromServer.ts:122"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9e382e1f3512f4ac", "name": "Commented-code block (9 lines) in src/screens/WordSong/WordSong.test.tsx:189", "shortDescription": {"text": "Commented-code block (9 lines) in src/screens/WordSong/WordSong.test.tsx: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-27b05fd704f7a9d7", "name": "Commented-code block (5 lines) in src/screens/WordSong/wordDistractors.test.ts:19", "shortDescription": {"text": "Commented-code block (5 lines) in src/screens/WordSong/wordDistractors.test.ts:19"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6be9edf8eb0248e6", "name": "Commented-code block (9 lines) in src/screens/WordSong/wordPictures.test.tsx:37", "shortDescription": {"text": "Commented-code block (9 lines) in src/screens/WordSong/wordPictures.test.tsx: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-ba0b7582369c686f", "name": "Commented-code block (7 lines) in src/screens/WordSong/wordPictures.tsx:103", "shortDescription": {"text": "Commented-code block (7 lines) in src/screens/WordSong/wordPictures.tsx:103"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e47288a0669b2335", "name": "Commented-code block (5 lines) in src/screens/WordSong/WordSong.tsx:409", "shortDescription": {"text": "Commented-code block (5 lines) in src/screens/WordSong/WordSong.tsx:409"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-99cddc12a28e328f", "name": "Commented-code block (6 lines) in src/screens/WordSong/wordPack.ts:140", "shortDescription": {"text": "Commented-code block (6 lines) in src/screens/WordSong/wordPack.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-f931d61540f40d94", "name": "Commented-code block (5 lines) in src/screens/WordSong/__tests__/emma-pose-beats.test.tsx:280", "shortDescription": {"text": "Commented-code block (5 lines) in src/screens/WordSong/__tests__/emma-pose-beats.test.tsx:280"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e72f6b51a74b8cc1", "name": "Commented-code block (6 lines) in src/components/EmmaCharacter.test.tsx:250", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/EmmaCharacter.test.tsx:250"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7e0e6ddef2dc1c49", "name": "Commented-code block (7 lines) in src/components/PendingResumeAffordance.tsx:84", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/PendingResumeAffordance.tsx:84"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5d2255db169ad09c", "name": "Commented-code block (7 lines) in src/components/EmmaCharacter.tsx:60", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/EmmaCharacter.tsx: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-f6759e5ed791666e", "name": "Commented-code block (5 lines) in src/lib/progress/progress.test.ts:450", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/progress/progress.test.ts:450"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5bb1858049408fab", "name": "Commented-code block (5 lines) in src/lib/progress/focusNode.test.ts:152", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/progress/focusNode.test.ts:152"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7b8327d2e378794d", "name": "Commented-code block (7 lines) in src/lib/progress/storage.ts:58", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/progress/storage.ts: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-853ac57a5106cdf5", "name": "Legacy-named symbol `skillLevelsWithLegacy` in src/lib/progress/storage.test.ts:221", "shortDescription": {"text": "Legacy-named symbol `skillLevelsWithLegacy` in src/lib/progress/storage.test.ts:221"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2e3692eb393def39", "name": "Commented-code block (5 lines) in src/lib/progress/storage.test.ts:41", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/progress/storage.test.ts:41"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-064b8548d2118e5a", "name": "Commented-code block (5 lines) in src/lib/progress/lifetimeFirstEncounters.test.ts:153", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/progress/lifetimeFirstEncounters.test.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-b16e13472f6df8f5", "name": "Commented-code block (5 lines) in src/lib/progress/leitner.ts:86", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/progress/leitner.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-2cedfb5c5b86a57f", "name": "Commented-code block (5 lines) in src/lib/progress/deviceId.ts:101", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/progress/deviceId.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-fc80dbac4f9c8f73", "name": "Commented-code block (8 lines) in src/lib/progress/cloudSync.test.ts:455", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/progress/cloudSync.test.ts:455"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-32d0703d40a6b787", "name": "Commented-code block (6 lines) in src/lib/progress/parentSettings.test.ts:194", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/progress/parentSettings.test.ts:194"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b1ee7fdd5f353bea", "name": "Commented-code block (7 lines) in src/lib/progress/slowFacts.test.ts:449", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/progress/slowFacts.test.ts:449"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1bbdb1d31a8ba9a0", "name": "Commented-code block (7 lines) in src/lib/progress/focusNode.ts:84", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/progress/focusNode.ts:84"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0484c8b9c1c1f022", "name": "Commented-code block (6 lines) in src/lib/progress/mastery.ts:122", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/progress/mastery.ts:122"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8e59ea75f7fe171e", "name": "Commented-code block (5 lines) in src/lib/progress/mastery.test.ts:167", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/progress/mastery.test.ts:167"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d298131d1b2004a0", "name": "Commented-code block (7 lines) in src/lib/progress/parentSettings.ts:82", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/progress/parentSettings.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-756ce6ebcdd52d09", "name": "Commented-code block (5 lines) in src/lib/progress/defaults.ts:95", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/progress/defaults.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-f06dacf5b0f4415f", "name": "Commented-code block (6 lines) in src/lib/progress/cloudSync.ts:379", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/progress/cloudSync.ts:379"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c56d7fcb085e46db", "name": "Commented-code block (17 lines) in src/lib/progress/types.ts:15", "shortDescription": {"text": "Commented-code block (17 lines) in src/lib/progress/types.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-8562d5e18a683b1a", "name": "Commented-code block (5 lines) in src/lib/progress/migrate-additive-fields.test.ts:83", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/progress/migrate-additive-fields.test.ts:83"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d01984d9d0622960", "name": "Commented-code block (5 lines) in src/lib/progress/slowFacts.ts:167", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/progress/slowFacts.ts:167"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9288ce6410d5fc00", "name": "Commented-code block (7 lines) in src/lib/progress/guards.ts:28", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/progress/guards.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-5971c33c4be6f72a", "name": "Commented-code block (5 lines) in src/lib/audio/preRecorded.test.ts:132", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/audio/preRecorded.test.ts:132"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0cdb4ca8871daf96", "name": "Commented-code block (14 lines) in src/lib/audio/mathPathA.ts:242", "shortDescription": {"text": "Commented-code block (14 lines) in src/lib/audio/mathPathA.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-e6cc273d1764366c", "name": "Commented-code block (5 lines) in src/lib/audio/wordSongPathA.test.ts:443", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/audio/wordSongPathA.test.ts:443"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2d78f7ab0dd77843", "name": "Commented-code block (5 lines) in src/lib/audio/useAudioUnlockGate.test.tsx:99", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/audio/useAudioUnlockGate.test.tsx:99"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f72ffe635a3e5d2f", "name": "Commented-code block (5 lines) in src/lib/audio/sessionAudioCache.test.ts:142", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/audio/sessionAudioCache.test.ts: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-9de1a77ce8e333a2", "name": "Commented-code block (5 lines) in src/lib/audio/sessionAudio.test.ts:618", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/audio/sessionAudio.test.ts:618"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-116b0ddba229a326", "name": "Commented-code block (10 lines) in src/lib/audio/sessionAudio.ts:489", "shortDescription": {"text": "Commented-code block (10 lines) in src/lib/audio/sessionAudio.ts:489"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-54c3a3aeec1a5ada", "name": "Commented-code block (5 lines) in src/lib/audio/wordSongPathA.ts:204", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/audio/wordSongPathA.ts:204"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f8de4ecd9fa16a0d", "name": "Commented-code block (6 lines) in src/lib/audio/useAudioUnlockGate.ts:178", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/audio/useAudioUnlockGate.ts:178"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-639a4eb5d5afc6dd", "name": "Commented-code block (5 lines) in src/lib/audio/howlerContext.ts:514", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/audio/howlerContext.ts:514"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b8e34b8596d45ff0", "name": "Commented-code block (8 lines) in src/lib/audio/preRecorded.ts:338", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/audio/preRecorded.ts:338"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6b0563df1338c177", "name": "Commented-code block (6 lines) in src/lib/lifecycle/useHowlerSuspendOnHide.test.tsx:254", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/lifecycle/useHowlerSuspendOnHide.test.tsx:254"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f18e389794605397", "name": "Commented-code block (6 lines) in src/lib/lifecycle/useStorageSync.test.tsx:33", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/lifecycle/useStorageSync.test.tsx:33"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3ac07608b5e384a0", "name": "Commented-code block (6 lines) in src/lib/lifecycle/useHowlerSuspendOnHide.ts:117", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/lifecycle/useHowlerSuspendOnHide.ts:117"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cb61cfafd6f734d7", "name": "Commented-code block (8 lines) in src/lib/debug/debugSeed.test.ts:95", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/debug/debugSeed.test.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-65a87c86c2514b79", "name": "Commented-code block (5 lines) in src/lib/debug/debugBus.test.ts:365", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/debug/debugBus.test.ts:365"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-344af876fb0b200b", "name": "Commented-code block (6 lines) in src/lib/debug/DebugOverlay.tsx:13", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/debug/DebugOverlay.tsx:13"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5e8753df81df815a", "name": "Commented-code block (6 lines) in src/lib/debug/debugSeed.ts:260", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/debug/debugSeed.ts:260"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2fda72d7115d257f", "name": "Commented-code block (5 lines) in src/lib/debug/audioContextProbe.test.ts:788", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/debug/audioContextProbe.test.ts:788"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ec77f65267eeb4b8", "name": "Commented-code block (6 lines) in src/lib/debug/audioContextProbe.ts:577", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/debug/audioContextProbe.ts:577"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7f0a837eb4f8ff37", "name": "Commented-code block (6 lines) in src/lib/debug/DebugOverlay.test.tsx:481", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/debug/DebugOverlay.test.tsx:481"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-69b69849b900e94a", "name": "Commented-code block (6 lines) in e2e/m5-recap-beat.spec.ts:85", "shortDescription": {"text": "Commented-code block (6 lines) in e2e/m5-recap-beat.spec.ts:85"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0fedf4c41c79475c", "name": "Commented-code block (11 lines) in e2e/sub-to-10-slow-fact-warmup.spec.ts:73", "shortDescription": {"text": "Commented-code block (11 lines) in e2e/sub-to-10-slow-fact-warmup.spec.ts: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-e5a07564b96906b2", "name": "Commented-code block (8 lines) in e2e/sub-to-10-subitising.spec.ts:394", "shortDescription": {"text": "Commented-code block (8 lines) in e2e/sub-to-10-subitising.spec.ts:394"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6dbfe1dffa78b68c", "name": "Commented-code block (9 lines) in e2e/sub-to-10-first-encounter-gate.spec.ts:77", "shortDescription": {"text": "Commented-code block (9 lines) in e2e/sub-to-10-first-encounter-gate.spec.ts:77"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-56d8c1ff52205892", "name": "Commented-code block (5 lines) in e2e/cvc-words-short-i-regression.spec.ts:86", "shortDescription": {"text": "Commented-code block (5 lines) in e2e/cvc-words-short-i-regression.spec.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-a5498143e6af9020", "name": "Commented-code block (8 lines) in e2e/letter-sounds-regression.spec.ts:299", "shortDescription": {"text": "Commented-code block (8 lines) in e2e/letter-sounds-regression.spec.ts:299"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-37513d5dd7bb584f", "name": "Commented-code block (6 lines) in e2e/voice-qa-sw-bypass.spec.ts:116", "shortDescription": {"text": "Commented-code block (6 lines) in e2e/voice-qa-sw-bypass.spec.ts:116"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a8fef45571ebe67f", "name": "Commented-code block (11 lines) in e2e/add-to-20.spec.ts:445", "shortDescription": {"text": "Commented-code block (11 lines) in e2e/add-to-20.spec.ts:445"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-14222ffbc4dc5901", "name": "Commented-code block (8 lines) in e2e/cvc-cross-vowel-review-firing.spec.ts:221", "shortDescription": {"text": "Commented-code block (8 lines) in e2e/cvc-cross-vowel-review-firing.spec.ts:221"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-112af1da4fe831b4", "name": "Commented-code block (13 lines) in e2e/two-digit-addsub.spec.ts:406", "shortDescription": {"text": "Commented-code block (13 lines) in e2e/two-digit-addsub.spec.ts:406"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9697e3b3f4e48da9", "name": "Commented-code block (13 lines) in e2e/sub-to-10-payload-shape.spec.ts:64", "shortDescription": {"text": "Commented-code block (13 lines) in e2e/sub-to-10-payload-shape.spec.ts:64"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-96daf61246854eab", "name": "Commented-code block (6 lines) in e2e/cvc-phoneme-blend.spec.ts:169", "shortDescription": {"text": "Commented-code block (6 lines) in e2e/cvc-phoneme-blend.spec.ts:169"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c088c38297f3847f", "name": "Commented-code block (5 lines) in e2e/mastery-promotion.spec.ts:136", "shortDescription": {"text": "Commented-code block (5 lines) in e2e/mastery-promotion.spec.ts:136"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1d3b0f16083d0510", "name": "Commented-code block (10 lines) in e2e/sub-to-10-operator-glyph.spec.ts:44", "shortDescription": {"text": "Commented-code block (10 lines) in e2e/sub-to-10-operator-glyph.spec.ts:44"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c4d46d5a46148945", "name": "Commented-code block (11 lines) in e2e/voice-qa-stale-submit.spec.ts:148", "shortDescription": {"text": "Commented-code block (11 lines) in e2e/voice-qa-stale-submit.spec.ts:148"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b990af46c68cd123", "name": "Commented-code block (5 lines) in e2e/path-a-fetch-abort-rapid-route-bounce.spec.ts:91", "shortDescription": {"text": "Commented-code block (5 lines) in e2e/path-a-fetch-abort-rapid-route-bounce.spec.ts:91"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4a4cc2bf514bcd6b", "name": "Commented-code block (7 lines) in e2e/simple-sentences-content.spec.ts:388", "shortDescription": {"text": "Commented-code block (7 lines) in e2e/simple-sentences-content.spec.ts:388"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d2a0866504f54bb7", "name": "Commented-code block (5 lines) in e2e/latency-band-invariant.spec.ts:103", "shortDescription": {"text": "Commented-code block (5 lines) in e2e/latency-band-invariant.spec.ts:103"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-72b3384e445c4022", "name": "Commented-code block (11 lines) in e2e/sight-words-content.spec.ts:591", "shortDescription": {"text": "Commented-code block (11 lines) in e2e/sight-words-content.spec.ts:591"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6698291a41ef4f44", "name": "Commented-code block (6 lines) in e2e/digraphs-sh-progression.spec.ts:197", "shortDescription": {"text": "Commented-code block (6 lines) in e2e/digraphs-sh-progression.spec.ts:197"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7647ead46711a659", "name": "Commented-code block (6 lines) in e2e/cvc-words-short-o-regression.spec.ts:269", "shortDescription": {"text": "Commented-code block (6 lines) in e2e/cvc-words-short-o-regression.spec.ts:269"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d8fdced9c7b0a3be", "name": "Commented-code block (5 lines) in e2e/sub-to-10-progression-mastery.spec.ts:84", "shortDescription": {"text": "Commented-code block (5 lines) in e2e/sub-to-10-progression-mastery.spec.ts:84"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4ccd7bb35ca09318", "name": "Commented-code block (6 lines) in e2e/backgrounding-mid-session.spec.ts:208", "shortDescription": {"text": "Commented-code block (6 lines) in e2e/backgrounding-mid-session.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-17b6c0b52a0101fe", "name": "Commented-code block (5 lines) in e2e/multi-tab-same-key-desync.spec.ts:206", "shortDescription": {"text": "Commented-code block (5 lines) in e2e/multi-tab-same-key-desync.spec.ts:206"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4370076397385078", "name": "Commented-code block (5 lines) in e2e/letter-sounds-per-vowel-progression.spec.ts:218", "shortDescription": {"text": "Commented-code block (5 lines) in e2e/letter-sounds-per-vowel-progression.spec.ts:218"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d4eb6f1f760930f6", "name": "Commented-code block (7 lines) in e2e/sub-to-10-distractor-class-2.spec.ts:74", "shortDescription": {"text": "Commented-code block (7 lines) in e2e/sub-to-10-distractor-class-2.spec.ts:74"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4e234ac39fae037a", "name": "Commented-code block (5 lines) in e2e/digraphs-th-content.spec.ts:716", "shortDescription": {"text": "Commented-code block (5 lines) in e2e/digraphs-th-content.spec.ts:716"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f3eeae2b0d62ea6b", "name": "Commented-code block (5 lines) in e2e/dot-card-affordance.spec.ts:132", "shortDescription": {"text": "Commented-code block (5 lines) in e2e/dot-card-affordance.spec.ts:132"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3a3b80f60b87d1dc", "name": "Commented-code block (8 lines) in e2e/localstorage-corruption-recovery.spec.ts:182", "shortDescription": {"text": "Commented-code block (8 lines) in e2e/localstorage-corruption-recovery.spec.ts:182"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a128479aacfb6f3b", "name": "Commented-code block (9 lines) in e2e/cvc-cross-vowel-mix-regression.spec.ts:219", "shortDescription": {"text": "Commented-code block (9 lines) in e2e/cvc-cross-vowel-mix-regression.spec.ts:219"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a38142a7ffec393d", "name": "Commented-code block (5 lines) in e2e/schema-answer-value.spec.ts:195", "shortDescription": {"text": "Commented-code block (5 lines) in e2e/schema-answer-value.spec.ts:195"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fe7bdd274b8748c3", "name": "Commented-code block (5 lines) in e2e/cloud-sync-conflict.spec.ts:102", "shortDescription": {"text": "Commented-code block (5 lines) in e2e/cloud-sync-conflict.spec.ts:102"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-336dfcabefdb9458", "name": "Commented-code block (7 lines) in e2e/cvc-words-short-u-regression.spec.ts:71", "shortDescription": {"text": "Commented-code block (7 lines) in e2e/cvc-words-short-u-regression.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-4c70613e43ea475a", "name": "Commented-code block (5 lines) in e2e/m5-reset-affordance.spec.ts:134", "shortDescription": {"text": "Commented-code block (5 lines) in e2e/m5-reset-affordance.spec.ts:134"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3b016f702f502b16", "name": "Commented-code block (8 lines) in e2e/simple-sentences-progression.spec.ts:271", "shortDescription": {"text": "Commented-code block (8 lines) in e2e/simple-sentences-progression.spec.ts:271"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1f9fe09cd586c4bf", "name": "Commented-code block (5 lines) in e2e/hub-to-math.spec.ts:43", "shortDescription": {"text": "Commented-code block (5 lines) in e2e/hub-to-math.spec.ts:43"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-38fcea4cfa8e6b88", "name": "Commented-code block (8 lines) in e2e/sub-to-10-chip-zero-render.spec.ts:63", "shortDescription": {"text": "Commented-code block (8 lines) in e2e/sub-to-10-chip-zero-render.spec.ts:63"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-02135e1a3e89296c", "name": "Commented-code block (5 lines) in e2e/sub-to-20.spec.ts:637", "shortDescription": {"text": "Commented-code block (5 lines) in e2e/sub-to-20.spec.ts:637"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2a99d2fe6fc000ce", "name": "Commented-code block (9 lines) in e2e/digraphs-sh-content.spec.ts:528", "shortDescription": {"text": "Commented-code block (9 lines) in e2e/digraphs-sh-content.spec.ts:528"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-135fd4de288ca7e9", "name": "Commented-code block (5 lines) in e2e/letter-names-regression.spec.ts:239", "shortDescription": {"text": "Commented-code block (5 lines) in e2e/letter-names-regression.spec.ts:239"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d1f4572d0bd71723", "name": "Commented-code block (8 lines) in e2e/sub-to-10-dot-card-suppression.spec.ts:101", "shortDescription": {"text": "Commented-code block (8 lines) in e2e/sub-to-10-dot-card-suppression.spec.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-a6d1217b43a77909", "name": "Commented-code block (9 lines) in e2e/cvc-words-regression.spec.ts:151", "shortDescription": {"text": "Commented-code block (9 lines) in e2e/cvc-words-regression.spec.ts:151"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3eb2c1770e034843", "name": "Commented-code block (7 lines) in e2e/leitner-directive-injection.spec.ts:298", "shortDescription": {"text": "Commented-code block (7 lines) in e2e/leitner-directive-injection.spec.ts:298"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d62a094ce58951aa", "name": "Commented-code block (6 lines) in e2e/subitising-scaffold.spec.ts:267", "shortDescription": {"text": "Commented-code block (6 lines) in e2e/subitising-scaffold.spec.ts:267"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d53d1c3799c6a27a", "name": "Commented-code block (7 lines) in e2e/cold-mount-math-fetch-in-flight.spec.ts:81", "shortDescription": {"text": "Commented-code block (7 lines) in e2e/cold-mount-math-fetch-in-flight.spec.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-628bf9c24460ba60", "name": "Commented-code block (6 lines) in e2e/add-to-20-flower-row-fit.spec.ts:75", "shortDescription": {"text": "Commented-code block (6 lines) in e2e/add-to-20-flower-row-fit.spec.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-e5a1945441271b42", "name": "Commented-code block (5 lines) in e2e/digraphs-ch-content.spec.ts:740", "shortDescription": {"text": "Commented-code block (5 lines) in e2e/digraphs-ch-content.spec.ts:740"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-eb61e68d068a469e", "name": "Commented-code block (7 lines) in e2e/progression-mastery-loop.spec.ts:186", "shortDescription": {"text": "Commented-code block (7 lines) in e2e/progression-mastery-loop.spec.ts:186"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a073cab7232c755b", "name": "Commented-code block (7 lines) in e2e/per-problem-distractor-class-schema.spec.ts:127", "shortDescription": {"text": "Commented-code block (7 lines) in e2e/per-problem-distractor-class-schema.spec.ts:127"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-eb85802a52871463", "name": "Commented-code block (6 lines) in e2e/math-three-hint.spec.ts:100", "shortDescription": {"text": "Commented-code block (6 lines) in e2e/math-three-hint.spec.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-14b763a2451b03c4", "name": "Commented-code block (8 lines) in e2e/letter-names-first-time-experience.spec.ts:354", "shortDescription": {"text": "Commented-code block (8 lines) in e2e/letter-names-first-time-experience.spec.ts:354"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-356ce6e59fd8015f", "name": "Commented-code block (8 lines) in e2e/session-end-to-hub.spec.ts:117", "shortDescription": {"text": "Commented-code block (8 lines) in e2e/session-end-to-hub.spec.ts:117"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-608882d7d7e6415c", "name": "Commented-code block (12 lines) in e2e/two-digit-addsub-with-regroup-progression.spec.ts:295", "shortDescription": {"text": "Commented-code block (12 lines) in e2e/two-digit-addsub-with-regroup-progression.spec.ts:295"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-000489fb4f547953", "name": "Commented-code block (6 lines) in e2e/voice-qa-page.spec.ts:165", "shortDescription": {"text": "Commented-code block (6 lines) in e2e/voice-qa-page.spec.ts:165"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2306fe3f20013e76", "name": "Commented-code block (8 lines) in e2e/_helpers/cloudSyncFixtures.ts:258", "shortDescription": {"text": "Commented-code block (8 lines) in e2e/_helpers/cloudSyncFixtures.ts:258"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8d04a0143ececce9", "name": "Commented-code block (7 lines) in e2e/_helpers/slidingWindow.test.ts:12", "shortDescription": {"text": "Commented-code block (7 lines) in e2e/_helpers/slidingWindow.test.ts:12"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c487ee348cec0d09", "name": "Commented-code block (6 lines) in e2e/_helpers/seedStorage.ts:121", "shortDescription": {"text": "Commented-code block (6 lines) in e2e/_helpers/seedStorage.ts:121"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cc0f9d8e41b33b0e", "name": "11 env vars used in code but missing from .env.example", "shortDescription": {"text": "11 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `CI`, `GITHUB_TOKEN`, `NODE_ENV`, `PROD`, `TZ`, `VERCEL_GIT_COMMIT_SHA`, `VERCEL_URL`, `VITE_` + 3 more. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/21682"}, "properties": {"repository": "TSandvaer/MarianLearning", "repoUrl": "https://github.com/TSandvaer/MarianLearning", "branch": "main"}, "results": [{"ruleId": "scanner-4de0b5bbb33c6b7e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 api/_tts.ts:1723"}, "properties": {"repobilityId": "4f87d33b691ebc1b", "scanner": "scanner-primary", "fingerprint": "4de0b5bbb33c6b7e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cc26bb97f90f1a3a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/revoiceCanonTargeted.ts:290"}, "properties": {"repobilityId": "c169c92f54e81e7e", "scanner": "scanner-primary", "fingerprint": "cc26bb97f90f1a3a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-918550b24406bf64", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/renderVoiceAudition.ts:317"}, "properties": {"repobilityId": "2c42f61a77919a1c", "scanner": "scanner-primary", "fingerprint": "918550b24406bf64", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b90d0889ec2ec5fa", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/embed-pictures.ts:64"}, "properties": {"repobilityId": "8458ff81163c5905", "scanner": "scanner-primary", "fingerprint": "b90d0889ec2ec5fa", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ddf9c0f41ec71883", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verifyBlendBytePreservation.ts:145"}, "properties": {"repobilityId": "5e96dfa5a02e9ce4", "scanner": "scanner-primary", "fingerprint": "ddf9c0f41ec71883", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-10660e23584cea89", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/revoiceCanon.ts:167"}, "properties": {"repobilityId": "ee663c7d81a7c9be", "scanner": "scanner-primary", "fingerprint": "10660e23584cea89", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4d6099378ac157a0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/renderBlendAudition.ts:237"}, "properties": {"repobilityId": "003d96d9c149f6d2", "scanner": "scanner-primary", "fingerprint": "4d6099378ac157a0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4be35c39335fadd1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/bakeRecapFocus.ts:232"}, "properties": {"repobilityId": "174e73797a17cd5d", "scanner": "scanner-primary", "fingerprint": "4be35c39335fadd1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1f8db832cb420935", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/canonLint.ts:575"}, "properties": {"repobilityId": "b5948f6cbbad8b31", "scanner": "scanner-primary", "fingerprint": "1f8db832cb420935", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fd9e9d9f6ffff639", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verifyThreeHintBytePreservation.ts:187"}, "properties": {"repobilityId": "5576c56fcc41b2a6", "scanner": "scanner-primary", "fingerprint": "fd9e9d9f6ffff639", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-342677c9faaf97e4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/compositionLint.ts:5246"}, "properties": {"repobilityId": "c0999826348e54a9", "scanner": "scanner-primary", "fingerprint": "342677c9faaf97e4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-505c316f39037e01", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verifyRecapFocusBytePreservation.ts:167"}, "properties": {"repobilityId": "fca4c9196ce3abf9", "scanner": "scanner-primary", "fingerprint": "505c316f39037e01", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-895cd66d038e1a7d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/rebakeBlendCandidateF.ts:140"}, "properties": {"repobilityId": "089ae601d10f6121", "scanner": "scanner-primary", "fingerprint": "895cd66d038e1a7d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1b6a46a1437f2b08", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/bakeLetterSoundsPinned.ts:251"}, "properties": {"repobilityId": "89497ce1fb0821a1", "scanner": "scanner-primary", "fingerprint": "1b6a46a1437f2b08", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-60ec4fffc7c1107e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generateSessionCanon.ts:679"}, "properties": {"repobilityId": "6ca1b52b552456b7", "scanner": "scanner-primary", "fingerprint": "60ec4fffc7c1107e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7120300e404d8655", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/rebakeThreeHint.ts:517"}, "properties": {"repobilityId": "b7fe252ec0b42afd", "scanner": "scanner-primary", "fingerprint": "7120300e404d8655", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6c3db63cb9471783", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/App.tsx:194"}, "properties": {"repobilityId": "f3d63003b5dbefbd", "scanner": "scanner-primary", "fingerprint": "6c3db63cb9471783", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f52b3e8a01804350", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/screens/Hub/Hub.tsx:348"}, "properties": {"repobilityId": "08db4e1bb7bdc78b", "scanner": "scanner-primary", "fingerprint": "f52b3e8a01804350", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3e88eca971aad65a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/screens/Hub/useParentGateLongPress.ts:119"}, "properties": {"repobilityId": "5cd7efa76d98e632", "scanner": "scanner-primary", "fingerprint": "3e88eca971aad65a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-dd68e964fe988482", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/verifyBlendBytePreservation.ts:25"}, "properties": {"repobilityId": "1702f28528a97d1c", "scanner": "scanner-primary", "fingerprint": "dd68e964fe988482", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/verifyBlendBytePreservation.ts"}, "region": {"startLine": 25}}}]}, {"ruleId": "scanner-0dad02beb0cff1e5", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/revoiceCanon.ts:36"}, "properties": {"repobilityId": "d45772434e8259b0", "scanner": "scanner-primary", "fingerprint": "0dad02beb0cff1e5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/revoiceCanon.ts"}, "region": {"startLine": 36}}}]}, {"ruleId": "scanner-155435a31b90a9a6", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/verifyThreeHintBytePreservation.ts:25"}, "properties": {"repobilityId": "e3a66cc9ecce21b0", "scanner": "scanner-primary", "fingerprint": "155435a31b90a9a6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/verifyThreeHintBytePreservation.ts"}, "region": {"startLine": 25}}}]}, {"ruleId": "scanner-1db9eba922e02dc2", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/verifyRecapFocusBytePreservation.ts:25"}, "properties": {"repobilityId": "2e6b27f5de7d80d0", "scanner": "scanner-primary", "fingerprint": "1db9eba922e02dc2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/verifyRecapFocusBytePreservation.ts"}, "region": {"startLine": 25}}}]}, {"ruleId": "scanner-0f4d4e24a5ccc2b1", "level": "error", "message": {"text": "Insecure pattern 'new_function_used' in scripts/render-sfx-mp3s.mjs:72"}, "properties": {"repobilityId": "d989cb008f9a8074", "scanner": "scanner-primary", "fingerprint": "0f4d4e24a5ccc2b1", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "new_function_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/render-sfx-mp3s.mjs"}, "region": {"startLine": 72}}}]}, {"ruleId": "scanner-41066ea81f2fde26", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/voice-audition.html:439"}, "properties": {"repobilityId": "2ea929263f5ae0dd", "scanner": "scanner-primary", "fingerprint": "41066ea81f2fde26", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/voice-audition.html"}, "region": {"startLine": 439}}}]}, {"ruleId": "scanner-bc183cab38ac8deb", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/voice-qa.html:896"}, "properties": {"repobilityId": "c4c8c9125b2a5e76", "scanner": "scanner-primary", "fingerprint": "bc183cab38ac8deb", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/voice-qa.html"}, "region": {"startLine": 896}}}]}, {"ruleId": "scanner-d86c6b62ce57f4c3", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/blend-audition.html:443"}, "properties": {"repobilityId": "c21afc913b432a16", "scanner": "scanner-primary", "fingerprint": "d86c6b62ce57f4c3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/blend-audition.html"}, "region": {"startLine": 443}}}]}, {"ruleId": "scanner-63d11ce1453a3c66", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/letter-sounds-test.html:366"}, "properties": {"repobilityId": "d9a9f0b92e5ae51d", "scanner": "scanner-primary", "fingerprint": "63d11ce1453a3c66", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/letter-sounds-test.html"}, "region": {"startLine": 366}}}]}, {"ruleId": "scanner-56d6eaedf7f7b57f", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in src/lib/debug/DebugOverlay.test.tsx:450"}, "properties": {"repobilityId": "99a810a0d67e4ca2", "scanner": "scanner-primary", "fingerprint": "56d6eaedf7f7b57f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/lib/debug/DebugOverlay.test.tsx"}, "region": {"startLine": 450}}}]}, {"ruleId": "scanner-6682d70fb9a94e5b", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in e2e/cvc-words-short-i-regression.spec.ts:202"}, "properties": {"repobilityId": "02b1017a0fa7e6de", "scanner": "scanner-primary", "fingerprint": "6682d70fb9a94e5b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "e2e/cvc-words-short-i-regression.spec.ts"}, "region": {"startLine": 202}}}]}, {"ruleId": "scanner-7f4001f5ead7ce64", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in e2e/letter-sounds-regression.spec.ts:386"}, "properties": {"repobilityId": "32bd1b3bd4e76e4f", "scanner": "scanner-primary", "fingerprint": "7f4001f5ead7ce64", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "e2e/letter-sounds-regression.spec.ts"}, "region": {"startLine": 386}}}]}, {"ruleId": "scanner-6d59335688ac8027", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in e2e/cvc-cross-vowel-review-firing.spec.ts:151"}, "properties": {"repobilityId": "697bcefb500a88da", "scanner": "scanner-primary", "fingerprint": "6d59335688ac8027", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "e2e/cvc-cross-vowel-review-firing.spec.ts"}, "region": {"startLine": 151}}}]}, {"ruleId": "scanner-488008023ee2f555", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in e2e/sub-to-10-payload-shape.spec.ts:244"}, "properties": {"repobilityId": "e258241532135a28", "scanner": "scanner-primary", "fingerprint": "488008023ee2f555", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "e2e/sub-to-10-payload-shape.spec.ts"}, "region": {"startLine": 244}}}]}, {"ruleId": "scanner-cbe03d9719f735df", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in e2e/cvc-phoneme-blend.spec.ts:111"}, "properties": {"repobilityId": "d85deb4669b80ed6", "scanner": "scanner-primary", "fingerprint": "cbe03d9719f735df", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "e2e/cvc-phoneme-blend.spec.ts"}, "region": {"startLine": 111}}}]}, {"ruleId": "scanner-c88f6a7964cfaa2b", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in e2e/simple-sentences-content.spec.ts:454"}, "properties": {"repobilityId": "d8a40193467ca6cd", "scanner": "scanner-primary", "fingerprint": "c88f6a7964cfaa2b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "e2e/simple-sentences-content.spec.ts"}, "region": {"startLine": 454}}}]}, {"ruleId": "scanner-b0d8b381bcda13de", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in e2e/slow-fact-directive-injection.spec.ts:62"}, "properties": {"repobilityId": "c60f0f3b50d613d8", "scanner": "scanner-primary", "fingerprint": "b0d8b381bcda13de", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "e2e/slow-fact-directive-injection.spec.ts"}, "region": {"startLine": 62}}}]}, {"ruleId": "scanner-454be324758ea3f2", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in e2e/sight-words-content.spec.ts:299"}, "properties": {"repobilityId": "7e08a27c15e6b068", "scanner": "scanner-primary", "fingerprint": "454be324758ea3f2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "e2e/sight-words-content.spec.ts"}, "region": {"startLine": 299}}}]}, {"ruleId": "scanner-14034ad333e972ec", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in e2e/cvc-words-short-o-regression.spec.ts:194"}, "properties": {"repobilityId": "08b8c590818a862b", "scanner": "scanner-primary", "fingerprint": "14034ad333e972ec", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "e2e/cvc-words-short-o-regression.spec.ts"}, "region": {"startLine": 194}}}]}, {"ruleId": "scanner-0d03e9fb3f83273c", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in e2e/letter-sounds-per-vowel-progression.spec.ts:239"}, "properties": {"repobilityId": "f287d8edcfbe9f27", "scanner": "scanner-primary", "fingerprint": "0d03e9fb3f83273c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "e2e/letter-sounds-per-vowel-progression.spec.ts"}, "region": {"startLine": 239}}}]}, {"ruleId": "scanner-e32c8f35d78f205b", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in e2e/digraphs-th-content.spec.ts:443"}, "properties": {"repobilityId": "d21a45415180fb9b", "scanner": "scanner-primary", "fingerprint": "e32c8f35d78f205b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "e2e/digraphs-th-content.spec.ts"}, "region": {"startLine": 443}}}]}, {"ruleId": "scanner-44db2cc3b8239792", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in e2e/cvc-cross-vowel-mix-regression.spec.ts:151"}, "properties": {"repobilityId": "ff932ae16e5f4f18", "scanner": "scanner-primary", "fingerprint": "44db2cc3b8239792", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "e2e/cvc-cross-vowel-mix-regression.spec.ts"}, "region": {"startLine": 151}}}]}, {"ruleId": "scanner-954c208167935b71", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in e2e/cvc-words-short-u-regression.spec.ts:180"}, "properties": {"repobilityId": "2df93adac01bf94f", "scanner": "scanner-primary", "fingerprint": "954c208167935b71", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "e2e/cvc-words-short-u-regression.spec.ts"}, "region": {"startLine": 180}}}]}, {"ruleId": "scanner-706e9b1d0801b947", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in e2e/simple-sentences-progression.spec.ts:382"}, "properties": {"repobilityId": "3c0f1f75d5ccb55e", "scanner": "scanner-primary", "fingerprint": "706e9b1d0801b947", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "e2e/simple-sentences-progression.spec.ts"}, "region": {"startLine": 382}}}]}, {"ruleId": "scanner-06daff1c0b914ef6", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in e2e/digraphs-sh-content.spec.ts:277"}, "properties": {"repobilityId": "2cdafd286406b5a5", "scanner": "scanner-primary", "fingerprint": "06daff1c0b914ef6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "e2e/digraphs-sh-content.spec.ts"}, "region": {"startLine": 277}}}]}, {"ruleId": "scanner-38bcee8153a6a77c", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in e2e/sight-words-progression.spec.ts:81"}, "properties": {"repobilityId": "4f176af54dcc2e49", "scanner": "scanner-primary", "fingerprint": "38bcee8153a6a77c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "e2e/sight-words-progression.spec.ts"}, "region": {"startLine": 81}}}]}, {"ruleId": "scanner-625e4a6bb916e6f9", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in e2e/letter-names-regression.spec.ts:283"}, "properties": {"repobilityId": "390b6c0dda2e4782", "scanner": "scanner-primary", "fingerprint": "625e4a6bb916e6f9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "e2e/letter-names-regression.spec.ts"}, "region": {"startLine": 283}}}]}, {"ruleId": "scanner-99621e3f6826422f", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in e2e/cvc-words-regression.spec.ts:219"}, "properties": {"repobilityId": "49543a9a5014f21b", "scanner": "scanner-primary", "fingerprint": "99621e3f6826422f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "e2e/cvc-words-regression.spec.ts"}, "region": {"startLine": 219}}}]}, {"ruleId": "scanner-615da5397e8fcf6d", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in e2e/leitner-directive-injection.spec.ts:110"}, "properties": {"repobilityId": "917646dfe79ab8f5", "scanner": "scanner-primary", "fingerprint": "615da5397e8fcf6d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "e2e/leitner-directive-injection.spec.ts"}, "region": {"startLine": 110}}}]}, {"ruleId": "scanner-3bd0c186a90f7860", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in e2e/digraphs-ch-content.spec.ts:350"}, "properties": {"repobilityId": "246e20a2b803bc87", "scanner": "scanner-primary", "fingerprint": "3bd0c186a90f7860", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "e2e/digraphs-ch-content.spec.ts"}, "region": {"startLine": 350}}}]}, {"ruleId": "scanner-aa31c92b5e54097d", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in e2e/math-three-hint.spec.ts:230"}, "properties": {"repobilityId": "92f4ea6b26d64649", "scanner": "scanner-primary", "fingerprint": "aa31c92b5e54097d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "e2e/math-three-hint.spec.ts"}, "region": {"startLine": 230}}}]}, {"ruleId": "scanner-c6293491f640f03c", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in e2e/letter-names-first-time-experience.spec.ts:184"}, "properties": {"repobilityId": "fd8314e0b667f25e", "scanner": "scanner-primary", "fingerprint": "c6293491f640f03c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "e2e/letter-names-first-time-experience.spec.ts"}, "region": {"startLine": 184}}}]}, {"ruleId": "scanner-54c5f62855e673b1", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in e2e/_helpers/cloudSyncFixtures.ts:80"}, "properties": {"repobilityId": "d10f99ed536ea250", "scanner": "scanner-primary", "fingerprint": "54c5f62855e673b1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "e2e/_helpers/cloudSyncFixtures.ts"}, "region": {"startLine": 80}}}]}, {"ruleId": "scanner-913da39fe0f5a2a4", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in e2e/_helpers/mockClaude.ts:75"}, "properties": {"repobilityId": "01516c5abacd8a89", "scanner": "scanner-primary", "fingerprint": "913da39fe0f5a2a4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "e2e/_helpers/mockClaude.ts"}, "region": {"startLine": 75}}}]}, {"ruleId": "scanner-6372cebde0220094", "level": "warning", "message": {"text": "No auth library detected"}, "properties": {"repobilityId": "a5b6035a5bbf8054", "scanner": "scanner-primary", "fingerprint": "6372cebde0220094", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["coverage", "auth"]}}, {"ruleId": "scanner-65c9bd56493a81d3", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "c9c8d455a9d830b0", "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": 63}}}]}, {"ruleId": "scanner-65c9bd56493a81d3", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "c9c8d455a9d830b0", "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": 108}}}]}, {"ruleId": "scanner-65c9bd56493a81d3", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "3b3d8b8ee5da1f9b", "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": 117}}}]}, {"ruleId": "scanner-65c9bd56493a81d3", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "8e879d8d5d310b9f", "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": 137}}}]}, {"ruleId": "scanner-65c9bd56493a81d3", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "8e879d8d5d310b9f", "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": 145}}}]}, {"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-f77ff413f452d214", "level": "note", "message": {"text": "Very large file: api/_tts.ts (1805 lines)"}, "properties": {"repobilityId": "4dab0f30a9f2c056", "scanner": "scanner-primary", "fingerprint": "f77ff413f452d214", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b1d6bdf341fc18ee", "level": "note", "message": {"text": "Very large file: api/_planner.ts (3350 lines)"}, "properties": {"repobilityId": "ed16ada369f9d142", "scanner": "scanner-primary", "fingerprint": "b1d6bdf341fc18ee", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b94a1551ace5d9b3", "level": "note", "message": {"text": "Very large file: api/_tts.test.ts (2203 lines)"}, "properties": {"repobilityId": "3d1cce8aeae31af9", "scanner": "scanner-primary", "fingerprint": "b94a1551ace5d9b3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a4718e1dfc019488", "level": "note", "message": {"text": "Very large file: api/claude.test.ts (2080 lines)"}, "properties": {"repobilityId": "c7026dd7007fafcf", "scanner": "scanner-primary", "fingerprint": "a4718e1dfc019488", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d299910d02efc1b5", "level": "note", "message": {"text": "Very large file: api/_planner.test.ts (5290 lines)"}, "properties": {"repobilityId": "025c4b1f553b2541", "scanner": "scanner-primary", "fingerprint": "d299910d02efc1b5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-bea6830714889dfb", "level": "note", "message": {"text": "Very large file: scripts/compositionLint.ts (5268 lines)"}, "properties": {"repobilityId": "81d39fbf4c8770e8", "scanner": "scanner-primary", "fingerprint": "bea6830714889dfb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3ca9eeb5fc7a6c20", "level": "note", "message": {"text": "Very large file: scripts/compositionLint.test.ts (8770 lines)"}, "properties": {"repobilityId": "7d2d077d91ee6f93", "scanner": "scanner-primary", "fingerprint": "3ca9eeb5fc7a6c20", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f03adb9c2c1c1a4a", "level": "note", "message": {"text": "Very large file: src/App.tsx (1724 lines)"}, "properties": {"repobilityId": "57bfc71b44f5048a", "scanner": "scanner-primary", "fingerprint": "f03adb9c2c1c1a4a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-357c18498ae24a0a", "level": "note", "message": {"text": "Very large file: src/screens/Greet.tsx (1633 lines)"}, "properties": {"repobilityId": "b7ee8b3596975f70", "scanner": "scanner-primary", "fingerprint": "357c18498ae24a0a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-83bc02b68164aa13", "level": "note", "message": {"text": "Very large file: src/screens/Greet.test.tsx (2041 lines)"}, "properties": {"repobilityId": "9589be6e609f6725", "scanner": "scanner-primary", "fingerprint": "83bc02b68164aa13", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d0eebd5f998967f2", "level": "note", "message": {"text": "Very large file: src/screens/Math/distractors.test.ts (1663 lines)"}, "properties": {"repobilityId": "365944a2b0ca58ab", "scanner": "scanner-primary", "fingerprint": "d0eebd5f998967f2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-be9f9b06f4349039", "level": "note", "message": {"text": "Very large file: src/screens/Math/Math.tsx (3813 lines)"}, "properties": {"repobilityId": "33a9ffc35f23fa5b", "scanner": "scanner-primary", "fingerprint": "be9f9b06f4349039", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-377dacf8027b1487", "level": "note", "message": {"text": "Very large file: src/screens/Math/Math.test.tsx (5162 lines)"}, "properties": {"repobilityId": "b474e8356fb62b23", "scanner": "scanner-primary", "fingerprint": "377dacf8027b1487", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5ee00cc4bb2701f0", "level": "note", "message": {"text": "Very large file: src/screens/SessionEnd/SessionEnd.tsx (1337 lines)"}, "properties": {"repobilityId": "5595c2b58c32bdac", "scanner": "scanner-primary", "fingerprint": "5ee00cc4bb2701f0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d9ad3f7477443b9c", "level": "note", "message": {"text": "Very large file: src/screens/SessionEnd/progressHistory.test.ts (1558 lines)"}, "properties": {"repobilityId": "d60e46ba50152369", "scanner": "scanner-primary", "fingerprint": "d9ad3f7477443b9c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-012784454d2e74c7", "level": "note", "message": {"text": "Very large file: src/screens/WordSong/plannerRoundTrip.test.ts (1419 lines)"}, "properties": {"repobilityId": "4c440f711d302da9", "scanner": "scanner-primary", "fingerprint": "012784454d2e74c7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-385dcd6633ea068c", "level": "note", "message": {"text": "Very large file: src/screens/WordSong/planFromServer.test.ts (1628 lines)"}, "properties": {"repobilityId": "fee40ba6782a4049", "scanner": "scanner-primary", "fingerprint": "385dcd6633ea068c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c9099215b4c8da24", "level": "note", "message": {"text": "Very large file: src/screens/WordSong/WordSong.test.tsx (2966 lines)"}, "properties": {"repobilityId": "45f9bba6f2e1d343", "scanner": "scanner-primary", "fingerprint": "c9099215b4c8da24", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-483bd8a5a196b6d9", "level": "note", "message": {"text": "Very large file: src/screens/WordSong/wordDistractors.test.ts (1820 lines)"}, "properties": {"repobilityId": "01089cd7d2a19370", "scanner": "scanner-primary", "fingerprint": "483bd8a5a196b6d9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c15bf9d6f3f35b7e", "level": "note", "message": {"text": "Very large file: src/screens/WordSong/WordSong.tsx (2746 lines)"}, "properties": {"repobilityId": "8757ab08fce4b0ef", "scanner": "scanner-primary", "fingerprint": "c15bf9d6f3f35b7e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-287aaf8b524a8a8a", "level": "note", "message": {"text": "Very large file: src/screens/WordSong/wordPack.ts (2455 lines)"}, "properties": {"repobilityId": "b6d8b12a76884165", "scanner": "scanner-primary", "fingerprint": "287aaf8b524a8a8a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2877a1e5fc0b7255", "level": "note", "message": {"text": "Very large file: src/lib/progress/mastery.test.ts (1953 lines)"}, "properties": {"repobilityId": "8303e911d5e6a141", "scanner": "scanner-primary", "fingerprint": "2877a1e5fc0b7255", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b8aa779fa21cd2a8", "level": "note", "message": {"text": "Very large file: e2e/two-digit-addsub.spec.ts (1411 lines)"}, "properties": {"repobilityId": "e4f76c0654c72b63", "scanner": "scanner-primary", "fingerprint": "b8aa779fa21cd2a8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "81d55bc1cbf4ddb3", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "55c888503c0db454", "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": "2f77b212d77c9e17", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "6290cf0e0408a93f", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "91730ea1cf91cb44", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "fbc459f10f929ba7", "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": "ff03a6726db8023e", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-122f91b7f2906dc4", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/settings.json"}, "properties": {"repobilityId": "a2967269048b6a9d", "scanner": "scanner-primary", "fingerprint": "122f91b7f2906dc4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/settings.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-070bdfa9b29853ef", "level": "error", "message": {"text": "Agent instruction/config may expose a secret: .claude/docs/skill-trees-and-content.md"}, "properties": {"repobilityId": "56f3991f586a354b", "scanner": "scanner-primary", "fingerprint": "070bdfa9b29853ef", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["agent-instructions", "secrets", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/docs/skill-trees-and-content.md"}, "region": {"startLine": 352}}}]}, {"ruleId": "scanner-a983328cacd8d75c", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/docs/audio-system.md"}, "properties": {"repobilityId": "454a1978097c8d0d", "scanner": "scanner-primary", "fingerprint": "a983328cacd8d75c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/docs/audio-system.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-bc1ed6067a08bf53", "level": "error", "message": {"text": "Agent instruction/config may expose a secret: .claude/docs/progress-and-persistence.md"}, "properties": {"repobilityId": "ef54b2acb434c9c1", "scanner": "scanner-primary", "fingerprint": "bc1ed6067a08bf53", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["agent-instructions", "secrets", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/docs/progress-and-persistence.md"}, "region": {"startLine": 162}}}]}, {"ruleId": "scanner-3ff695835a3b78b7", "level": "none", "message": {"text": "Commented-code block (8 lines) in playwright.config.ts:34"}, "properties": {"repobilityId": "ab0adcde09764e01", "scanner": "scanner-primary", "fingerprint": "3ff695835a3b78b7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9f208bce8b8297b0", "level": "none", "message": {"text": "Commented-code block (5 lines) in vite.config.ts:81"}, "properties": {"repobilityId": "fb1691373201578b", "scanner": "scanner-primary", "fingerprint": "9f208bce8b8297b0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8dcc7d0d66c1ed94", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/qa/noFlameInUI.test.ts:59"}, "properties": {"repobilityId": "e6901d28fbab4aa2", "scanner": "scanner-primary", "fingerprint": "8dcc7d0d66c1ed94", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-516c4408e7c27195", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/qa/mathScreenAccessibility.test.tsx:184"}, "properties": {"repobilityId": "c024843d55d2b5f4", "scanner": "scanner-primary", "fingerprint": "516c4408e7c27195", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f656a41f7cbf9872", "level": "none", "message": {"text": "Commented-code block (8 lines) in api/_progressStore.ts:3"}, "properties": {"repobilityId": "2c61035669e0f16a", "scanner": "scanner-primary", "fingerprint": "f656a41f7cbf9872", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bfe9f9d44dde9a88", "level": "none", "message": {"text": "Commented-code block (5 lines) in api/voice-qa-report.test.ts:106"}, "properties": {"repobilityId": "1b0ebd09f712d91c", "scanner": "scanner-primary", "fingerprint": "bfe9f9d44dde9a88", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8bffc7f885ab8628", "level": "none", "message": {"text": "Commented-code block (8 lines) in api/_tts.ts:3"}, "properties": {"repobilityId": "f5385a367d2ea2f6", "scanner": "scanner-primary", "fingerprint": "8bffc7f885ab8628", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-af01e0dad4561c90", "level": "none", "message": {"text": "Commented-code block (5 lines) in api/_planner.ts:3"}, "properties": {"repobilityId": "479f8742635c0a72", "scanner": "scanner-primary", "fingerprint": "af01e0dad4561c90", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-39d5a633e0bf7570", "level": "none", "message": {"text": "Commented-code block (7 lines) in api/_tts.test.ts:172"}, "properties": {"repobilityId": "d49fe6bf2b0ccfee", "scanner": "scanner-primary", "fingerprint": "39d5a633e0bf7570", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0535a5c1dbf48f00", "level": "none", "message": {"text": "Commented-code block (5 lines) in api/_sessionCache.test.ts:73"}, "properties": {"repobilityId": "27ba5abd499fbc76", "scanner": "scanner-primary", "fingerprint": "0535a5c1dbf48f00", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-785505b593336a1c", "level": "none", "message": {"text": "Commented-code block (7 lines) in api/claude.test.ts:102"}, "properties": {"repobilityId": "24da58b2e04e06b3", "scanner": "scanner-primary", "fingerprint": "785505b593336a1c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d5cf3d867847bf37", "level": "none", "message": {"text": "Commented-code block (8 lines) in api/_canon.ts:3"}, "properties": {"repobilityId": "ffb4b08b05f990e6", "scanner": "scanner-primary", "fingerprint": "d5cf3d867847bf37", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6bca7d85341f1fce", "level": "none", "message": {"text": "Commented-code block (38 lines) in api/claude.ts:3"}, "properties": {"repobilityId": "6a1e07b063c4d5cf", "scanner": "scanner-primary", "fingerprint": "6bca7d85341f1fce", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ef734c774c81ca1c", "level": "none", "message": {"text": "Commented-code block (5 lines) in api/_session.test.ts:44"}, "properties": {"repobilityId": "2d6183ca607bc9a4", "scanner": "scanner-primary", "fingerprint": "ef734c774c81ca1c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-66d9de8f4c7e83f7", "level": "none", "message": {"text": "Commented-code block (6 lines) in api/_types.ts:36"}, "properties": {"repobilityId": "b41597a05488219f", "scanner": "scanner-primary", "fingerprint": "66d9de8f4c7e83f7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f7f79bd59bbdaae4", "level": "none", "message": {"text": "Commented-code block (6 lines) in api/_session.ts:14"}, "properties": {"repobilityId": "1beab78118312e04", "scanner": "scanner-primary", "fingerprint": "f7f79bd59bbdaae4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-045ba29710a8f4b5", "level": "none", "message": {"text": "Commented-code block (7 lines) in api/progress.ts:6"}, "properties": {"repobilityId": "4d1adc98ecc8dd8e", "scanner": "scanner-primary", "fingerprint": "045ba29710a8f4b5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-aef4b5582565c755", "level": "none", "message": {"text": "Commented-code block (8 lines) in api/voice-qa-report.ts:8"}, "properties": {"repobilityId": "b2d66cbfb61c93b3", "scanner": "scanner-primary", "fingerprint": "aef4b5582565c755", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5a4ee2b2c4bbc1e7", "level": "none", "message": {"text": "Commented-code block (5 lines) in api/_firstEncounterGate.test.ts:99"}, "properties": {"repobilityId": "1ea01983437c6511", "scanner": "scanner-primary", "fingerprint": "5a4ee2b2c4bbc1e7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7b68776b6af35e3f", "level": "none", "message": {"text": "Commented-code block (11 lines) in api/_planner.test.ts:263"}, "properties": {"repobilityId": "145daf46d9c20954", "scanner": "scanner-primary", "fingerprint": "7b68776b6af35e3f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5d57376411887e15", "level": "none", "message": {"text": "Commented-code block (6 lines) in api/_plannerWordList.ts:12"}, "properties": {"repobilityId": "3e2da21851913a7f", "scanner": "scanner-primary", "fingerprint": "5d57376411887e15", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-975539876bd59c19", "level": "none", "message": {"text": "Commented-code block (7 lines) in api/_rateLimit.ts:3"}, "properties": {"repobilityId": "7dcc7b79796504ba", "scanner": "scanner-primary", "fingerprint": "975539876bd59c19", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3e0db955afa203a4", "level": "none", "message": {"text": "Commented-code block (7 lines) in api/_sessionCache.ts:3"}, "properties": {"repobilityId": "46131b4982157a2a", "scanner": "scanner-primary", "fingerprint": "3e0db955afa203a4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-240e91aa2e3a981e", "level": "none", "message": {"text": "Commented-code block (11 lines) in api/_firstEncounterGate.ts:5"}, "properties": {"repobilityId": "a6deb95bf7b24844", "scanner": "scanner-primary", "fingerprint": "240e91aa2e3a981e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-99bfaf6dd2ba1d42", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/render-greet-mp3s.mjs:144"}, "properties": {"repobilityId": "d635ce47ba17878c", "scanner": "scanner-primary", "fingerprint": "99bfaf6dd2ba1d42", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-62d5dbdca46d64d9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/render-greet-mp3s.mjs:176"}, "properties": {"repobilityId": "cefa5a6d7ebd0abd", "scanner": "scanner-primary", "fingerprint": "62d5dbdca46d64d9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1b9215323a156746", "level": "none", "message": {"text": "Commented-code block (7 lines) in scripts/tts-prosody-samples.mjs:246"}, "properties": {"repobilityId": "edfcd1108780840a", "scanner": "scanner-primary", "fingerprint": "1b9215323a156746", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-549103b76591faec", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/tts-prosody-samples.mjs:40"}, "properties": {"repobilityId": "0ec11bc5cbd5b1dc", "scanner": "scanner-primary", "fingerprint": "549103b76591faec", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b0db10cf7a2cc8ea", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/revoiceCanon.ts:150"}, "properties": {"repobilityId": "8ae76db6f58240ba", "scanner": "scanner-primary", "fingerprint": "b0db10cf7a2cc8ea", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-45b22af90fcaa01a", "level": "none", "message": {"text": "Commented-code block (7 lines) in scripts/canonLint.ts:128"}, "properties": {"repobilityId": "6ae5b8f0bf36d784", "scanner": "scanner-primary", "fingerprint": "45b22af90fcaa01a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-32ace5672037e6cd", "level": "none", "message": {"text": "Commented-code block (36 lines) in scripts/generateSessionCanon.test.ts:45"}, "properties": {"repobilityId": "5222fd2069724ec7", "scanner": "scanner-primary", "fingerprint": "32ace5672037e6cd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1a600485a73793de", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/embed-emma-assets.mjs:29"}, "properties": {"repobilityId": "6369869ae13ed7a5", "scanner": "scanner-primary", "fingerprint": "1a600485a73793de", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c6d4a468f9e6e13c", "level": "none", "message": {"text": "Commented-code block (11 lines) in scripts/voiceAuditionVariants.ts:90"}, "properties": {"repobilityId": "a84a6ac56161e16b", "scanner": "scanner-primary", "fingerprint": "c6d4a468f9e6e13c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-924c46453d954b89", "level": "none", "message": {"text": "Commented-code block (7 lines) in scripts/compositionLint.ts:138"}, "properties": {"repobilityId": "15552f12cdf41a0a", "scanner": "scanner-primary", "fingerprint": "924c46453d954b89", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f1f6bcb58456ae87", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/compositionLint.test.ts:478"}, "properties": {"repobilityId": "165ef9038849122c", "scanner": "scanner-primary", "fingerprint": "f1f6bcb58456ae87", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2b4ebc739a536227", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/render-hub-mp3s.mjs:153"}, "properties": {"repobilityId": "ead2690d596d5497", "scanner": "scanner-primary", "fingerprint": "2b4ebc739a536227", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-06c45cc2e1c17f34", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/render-hub-mp3s.mjs:212"}, "properties": {"repobilityId": "0fb09d24d09a377b", "scanner": "scanner-primary", "fingerprint": "06c45cc2e1c17f34", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f47361346c334c32", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/blendAuditionVariants.ts:186"}, "properties": {"repobilityId": "f9738cdbd8b4d4f4", "scanner": "scanner-primary", "fingerprint": "f47361346c334c32", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1f98ecce2f42813e", "level": "none", "message": {"text": "Commented-code block (9 lines) in scripts/bakeLetterSoundsPinned.ts:59"}, "properties": {"repobilityId": "5377ae680a94b9b5", "scanner": "scanner-primary", "fingerprint": "1f98ecce2f42813e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ee850298aa977b14", "level": "none", "message": {"text": "Commented-code block (9 lines) in scripts/generateSessionCanon.ts:184"}, "properties": {"repobilityId": "d77e103e60151a0c", "scanner": "scanner-primary", "fingerprint": "ee850298aa977b14", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-008c40983094acf8", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/App.test.tsx:69"}, "properties": {"repobilityId": "23b53a0b9e2917f9", "scanner": "scanner-primary", "fingerprint": "008c40983094acf8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c7e50f2e4325975c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/App.test.tsx:266"}, "properties": {"repobilityId": "3ab3c149d7004ce4", "scanner": "scanner-primary", "fingerprint": "c7e50f2e4325975c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-af8057a8862bdd0f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/App.tsx:323"}, "properties": {"repobilityId": "e240b5d06e858658", "scanner": "scanner-primary", "fingerprint": "af8057a8862bdd0f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7e57c2a865fc625c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/App.tsx:1027"}, "properties": {"repobilityId": "49327716ea29e460", "scanner": "scanner-primary", "fingerprint": "7e57c2a865fc625c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d7bd0441d7cae0d7", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/test/setup.ts:11"}, "properties": {"repobilityId": "78d03c67f21b736e", "scanner": "scanner-primary", "fingerprint": "d7bd0441d7cae0d7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f7b44c7622e5bd63", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/screens/Greet.tsx:245"}, "properties": {"repobilityId": "6b583dd32271d703", "scanner": "scanner-primary", "fingerprint": "f7b44c7622e5bd63", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7d56a4632769718f", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/screens/greetSequence.test.ts:118"}, "properties": {"repobilityId": "8603e99440f1e4af", "scanner": "scanner-primary", "fingerprint": "7d56a4632769718f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7bf1502de04e2796", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/screens/greetSequence.ts:280"}, "properties": {"repobilityId": "a6ca962efc8b9882", "scanner": "scanner-primary", "fingerprint": "7bf1502de04e2796", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ed7c8a43416c0eb0", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/screens/Greet.test.tsx:288"}, "properties": {"repobilityId": "63f9dd14e8a3b4d4", "scanner": "scanner-primary", "fingerprint": "ed7c8a43416c0eb0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-87d82100853d0067", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/screens/Math/planFromServer.test.ts:93"}, "properties": {"repobilityId": "c93b0e155f8cd01a", "scanner": "scanner-primary", "fingerprint": "87d82100853d0067", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dac2f5c4f708c2b1", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/screens/Math/distractors.test.ts:397"}, "properties": {"repobilityId": "6a2c953f42a49b21", "scanner": "scanner-primary", "fingerprint": "dac2f5c4f708c2b1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2f6febd1154aad51", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/screens/Math/Math.tsx:691"}, "properties": {"repobilityId": "668cbaf80a5d79de", "scanner": "scanner-primary", "fingerprint": "2f6febd1154aad51", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d24ad0e2fc05391d", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/screens/Math/subitisingScaffold.test.ts:241"}, "properties": {"repobilityId": "f7f2a2f76470af79", "scanner": "scanner-primary", "fingerprint": "d24ad0e2fc05391d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-be780ea91c8228ce", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/screens/Math/dotCard.test.ts:140"}, "properties": {"repobilityId": "8396fc0cf89077de", "scanner": "scanner-primary", "fingerprint": "be780ea91c8228ce", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-79c7f1e29c1b84ea", "level": "none", "message": {"text": "Commented-code block (14 lines) in src/screens/Math/DotCardOverlay.tsx:115"}, "properties": {"repobilityId": "5c594fd417b1f887", "scanner": "scanner-primary", "fingerprint": "79c7f1e29c1b84ea", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-90e7c799190daab3", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/screens/Math/sessionPlans.test.ts:209"}, "properties": {"repobilityId": "2f3c19fc01b5c669", "scanner": "scanner-primary", "fingerprint": "90e7c799190daab3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4c492e2125df7936", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/screens/Math/SubMinuendOverlay.tsx:108"}, "properties": {"repobilityId": "57ffc6b50fdf3450", "scanner": "scanner-primary", "fingerprint": "4c492e2125df7936", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e021ddf17ca60c47", "level": "note", "message": {"text": "Legacy-named symbol `hasLegacy` in src/screens/Math/planFromServer.ts:386"}, "properties": {"repobilityId": "04187c543749a832", "scanner": "scanner-primary", "fingerprint": "e021ddf17ca60c47", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-dbfbf69765657a38", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/screens/Math/planFromServer.ts:294"}, "properties": {"repobilityId": "50536c6b0b5b99ed", "scanner": "scanner-primary", "fingerprint": "dbfbf69765657a38", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-542302d948d78e99", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/screens/Math/Math.test.tsx:818"}, "properties": {"repobilityId": "97ff71e4e7dd25ef", "scanner": "scanner-primary", "fingerprint": "542302d948d78e99", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4c5a763d99d57f38", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/screens/Math/sessionPlans.ts:359"}, "properties": {"repobilityId": "95ccd1ea76543649", "scanner": "scanner-primary", "fingerprint": "4c5a763d99d57f38", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4165301eff6b1434", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/screens/Math/distractors.ts:283"}, "properties": {"repobilityId": "4cf4bf841d83c4b3", "scanner": "scanner-primary", "fingerprint": "4165301eff6b1434", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-97ec0d8e13058caa", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/screens/Math/subitisingScaffold.ts:217"}, "properties": {"repobilityId": "652d0412240af67b", "scanner": "scanner-primary", "fingerprint": "97ec0d8e13058caa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1e9144c7271cb559", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/screens/Math/DotCardOverlay.test.tsx:190"}, "properties": {"repobilityId": "d579628c922d140c", "scanner": "scanner-primary", "fingerprint": "1e9144c7271cb559", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4d964582c82a4cc4", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/screens/Math/__tests__/emma-pose-beats.test.tsx:221"}, "properties": {"repobilityId": "1508ed198d2ff13e", "scanner": "scanner-primary", "fingerprint": "4d964582c82a4cc4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-60bbfb8c421ae95f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/screens/ParentSettings/ParentSettings.tsx:314"}, "properties": {"repobilityId": "7715ed24f74a9535", "scanner": "scanner-primary", "fingerprint": "60bbfb8c421ae95f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-66d91e4dde7eff78", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/screens/Hub/progressProjection.ts:95"}, "properties": {"repobilityId": "0072b8106ca0ff0b", "scanner": "scanner-primary", "fingerprint": "66d91e4dde7eff78", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d07c737ccdfd168a", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/screens/Hub/Hub.tsx:202"}, "properties": {"repobilityId": "edf8a830cbefbd7f", "scanner": "scanner-primary", "fingerprint": "d07c737ccdfd168a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4a92c5d905d6f60f", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/screens/Hub/stages.ts:19"}, "properties": {"repobilityId": "d2c515c4a09337f8", "scanner": "scanner-primary", "fingerprint": "4a92c5d905d6f60f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-012c182793e53de5", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/screens/Hub/promotionRoundTrip.test.tsx:209"}, "properties": {"repobilityId": "7da0deaa1c1b4292", "scanner": "scanner-primary", "fingerprint": "012c182793e53de5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-02f4fc19f70e903e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/screens/Hub/Hub.test.tsx:68"}, "properties": {"repobilityId": "796bb3cdf7b86536", "scanner": "scanner-primary", "fingerprint": "02f4fc19f70e903e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b9972c7099b8694b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/screens/Hub/stageIcons.tsx:157"}, "properties": {"repobilityId": "9665deee3868d2f3", "scanner": "scanner-primary", "fingerprint": "b9972c7099b8694b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-db2d822cb908e2c4", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/screens/Hub/playHubLine.ts:245"}, "properties": {"repobilityId": "6e00134f3492a687", "scanner": "scanner-primary", "fingerprint": "db2d822cb908e2c4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8601fd0496ec338c", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/screens/SessionEnd/SessionEnd.tsx:434"}, "properties": {"repobilityId": "067d3a1fbc6f8b42", "scanner": "scanner-primary", "fingerprint": "8601fd0496ec338c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b7636f17cd496ebf", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/screens/SessionEnd/progressHistory.test.ts:172"}, "properties": {"repobilityId": "78eb060b034550d3", "scanner": "scanner-primary", "fingerprint": "b7636f17cd496ebf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b4a1ee58d29529f1", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/screens/SessionEnd/progressHistory.ts:345"}, "properties": {"repobilityId": "83f760480cc428ef", "scanner": "scanner-primary", "fingerprint": "b4a1ee58d29529f1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ee43a18816537a8c", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/screens/SessionEnd/SessionEnd.test.tsx:90"}, "properties": {"repobilityId": "2c117905ffbf065e", "scanner": "scanner-primary", "fingerprint": "ee43a18816537a8c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8aa27944dc63b4d5", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/screens/SessionEnd/StardustCounter.tsx:48"}, "properties": {"repobilityId": "fb77dc7ecea60d9d", "scanner": "scanner-primary", "fingerprint": "8aa27944dc63b4d5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-37c02a573280b740", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/screens/SessionEnd/sessionHistory.ts:355"}, "properties": {"repobilityId": "91b43ae953b8a14c", "scanner": "scanner-primary", "fingerprint": "37c02a573280b740", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f5475d4daa8f6abd", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/screens/WordSong/wordDistractors.ts:159"}, "properties": {"repobilityId": "91e31efde8600e6e", "scanner": "scanner-primary", "fingerprint": "f5475d4daa8f6abd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-77f4c628ed8fce16", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/screens/WordSong/plannerRoundTrip.test.ts:334"}, "properties": {"repobilityId": "2614b4e216c8d313", "scanner": "scanner-primary", "fingerprint": "77f4c628ed8fce16", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7d6a9584ad49d276", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/screens/WordSong/planFromServer.test.ts:55"}, "properties": {"repobilityId": "2b1367d3e2c2b494", "scanner": "scanner-primary", "fingerprint": "7d6a9584ad49d276", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-853a131d965d6a87", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/screens/WordSong/sceneRegistry.test.ts:55"}, "properties": {"repobilityId": "eb4be729ead69bff", "scanner": "scanner-primary", "fingerprint": "853a131d965d6a87", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-907471081acc61c1", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/screens/WordSong/letterSoundsPool.ts:127"}, "properties": {"repobilityId": "f0eeace9075e7c67", "scanner": "scanner-primary", "fingerprint": "907471081acc61c1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b9ad311480a42899", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/screens/WordSong/planFromServer.ts:122"}, "properties": {"repobilityId": "bf1830d7b3965a46", "scanner": "scanner-primary", "fingerprint": "b9ad311480a42899", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9e382e1f3512f4ac", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/screens/WordSong/WordSong.test.tsx:189"}, "properties": {"repobilityId": "812356264a5cf73e", "scanner": "scanner-primary", "fingerprint": "9e382e1f3512f4ac", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-27b05fd704f7a9d7", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/screens/WordSong/wordDistractors.test.ts:19"}, "properties": {"repobilityId": "c03c23df935ee42e", "scanner": "scanner-primary", "fingerprint": "27b05fd704f7a9d7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6be9edf8eb0248e6", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/screens/WordSong/wordPictures.test.tsx:37"}, "properties": {"repobilityId": "ca20bfced841324e", "scanner": "scanner-primary", "fingerprint": "6be9edf8eb0248e6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ba0b7582369c686f", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/screens/WordSong/wordPictures.tsx:103"}, "properties": {"repobilityId": "e66158bb7e33ff53", "scanner": "scanner-primary", "fingerprint": "ba0b7582369c686f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e47288a0669b2335", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/screens/WordSong/WordSong.tsx:409"}, "properties": {"repobilityId": "6ac08fbf6322e056", "scanner": "scanner-primary", "fingerprint": "e47288a0669b2335", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-99cddc12a28e328f", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/screens/WordSong/wordPack.ts:140"}, "properties": {"repobilityId": "65fa5a5faca933f4", "scanner": "scanner-primary", "fingerprint": "99cddc12a28e328f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f931d61540f40d94", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/screens/WordSong/__tests__/emma-pose-beats.test.tsx:280"}, "properties": {"repobilityId": "774274ae3d919073", "scanner": "scanner-primary", "fingerprint": "f931d61540f40d94", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e72f6b51a74b8cc1", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/EmmaCharacter.test.tsx:250"}, "properties": {"repobilityId": "780bcc5e42684871", "scanner": "scanner-primary", "fingerprint": "e72f6b51a74b8cc1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7e0e6ddef2dc1c49", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/PendingResumeAffordance.tsx:84"}, "properties": {"repobilityId": "5df64e1c733971ba", "scanner": "scanner-primary", "fingerprint": "7e0e6ddef2dc1c49", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5d2255db169ad09c", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/EmmaCharacter.tsx:60"}, "properties": {"repobilityId": "74d9823ef1e5b355", "scanner": "scanner-primary", "fingerprint": "5d2255db169ad09c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f6759e5ed791666e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/progress/progress.test.ts:450"}, "properties": {"repobilityId": "2434ac2c54ea1c9f", "scanner": "scanner-primary", "fingerprint": "f6759e5ed791666e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5bb1858049408fab", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/progress/focusNode.test.ts:152"}, "properties": {"repobilityId": "235fc5b805e1fd2f", "scanner": "scanner-primary", "fingerprint": "5bb1858049408fab", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7b8327d2e378794d", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/progress/storage.ts:58"}, "properties": {"repobilityId": "907770ccb070322f", "scanner": "scanner-primary", "fingerprint": "7b8327d2e378794d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-853ac57a5106cdf5", "level": "note", "message": {"text": "Legacy-named symbol `skillLevelsWithLegacy` in src/lib/progress/storage.test.ts:221"}, "properties": {"repobilityId": "306b548d317d54dd", "scanner": "scanner-primary", "fingerprint": "853ac57a5106cdf5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-2e3692eb393def39", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/progress/storage.test.ts:41"}, "properties": {"repobilityId": "f6d4b61753aaf1d5", "scanner": "scanner-primary", "fingerprint": "2e3692eb393def39", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-064b8548d2118e5a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/progress/lifetimeFirstEncounters.test.ts:153"}, "properties": {"repobilityId": "cb6c105287bacf38", "scanner": "scanner-primary", "fingerprint": "064b8548d2118e5a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b16e13472f6df8f5", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/progress/leitner.ts:86"}, "properties": {"repobilityId": "c5caeaedb54c3574", "scanner": "scanner-primary", "fingerprint": "b16e13472f6df8f5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2cedfb5c5b86a57f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/progress/deviceId.ts:101"}, "properties": {"repobilityId": "68ed8095ac19758e", "scanner": "scanner-primary", "fingerprint": "2cedfb5c5b86a57f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fc80dbac4f9c8f73", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/progress/cloudSync.test.ts:455"}, "properties": {"repobilityId": "277c5d6770af4dd3", "scanner": "scanner-primary", "fingerprint": "fc80dbac4f9c8f73", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-32d0703d40a6b787", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/progress/parentSettings.test.ts:194"}, "properties": {"repobilityId": "5503de37032d2512", "scanner": "scanner-primary", "fingerprint": "32d0703d40a6b787", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b1ee7fdd5f353bea", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/progress/slowFacts.test.ts:449"}, "properties": {"repobilityId": "0440ece65a2e928a", "scanner": "scanner-primary", "fingerprint": "b1ee7fdd5f353bea", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1bbdb1d31a8ba9a0", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/progress/focusNode.ts:84"}, "properties": {"repobilityId": "fede440d15002e45", "scanner": "scanner-primary", "fingerprint": "1bbdb1d31a8ba9a0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0484c8b9c1c1f022", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/progress/mastery.ts:122"}, "properties": {"repobilityId": "ae1f5f0b028ac384", "scanner": "scanner-primary", "fingerprint": "0484c8b9c1c1f022", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8e59ea75f7fe171e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/progress/mastery.test.ts:167"}, "properties": {"repobilityId": "3658bb5158937f70", "scanner": "scanner-primary", "fingerprint": "8e59ea75f7fe171e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d298131d1b2004a0", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/progress/parentSettings.ts:82"}, "properties": {"repobilityId": "414951f1fffd474e", "scanner": "scanner-primary", "fingerprint": "d298131d1b2004a0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-756ce6ebcdd52d09", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/progress/defaults.ts:95"}, "properties": {"repobilityId": "4efb1f5554b6b334", "scanner": "scanner-primary", "fingerprint": "756ce6ebcdd52d09", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f06dacf5b0f4415f", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/progress/cloudSync.ts:379"}, "properties": {"repobilityId": "5d02aa9cceb61da9", "scanner": "scanner-primary", "fingerprint": "f06dacf5b0f4415f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c56d7fcb085e46db", "level": "none", "message": {"text": "Commented-code block (17 lines) in src/lib/progress/types.ts:15"}, "properties": {"repobilityId": "485af0d4ded41b52", "scanner": "scanner-primary", "fingerprint": "c56d7fcb085e46db", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8562d5e18a683b1a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/progress/migrate-additive-fields.test.ts:83"}, "properties": {"repobilityId": "6ae382fca0d4447e", "scanner": "scanner-primary", "fingerprint": "8562d5e18a683b1a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d01984d9d0622960", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/progress/slowFacts.ts:167"}, "properties": {"repobilityId": "bfc7ce16ec2cbe71", "scanner": "scanner-primary", "fingerprint": "d01984d9d0622960", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9288ce6410d5fc00", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/progress/guards.ts:28"}, "properties": {"repobilityId": "d7e2e341155b4871", "scanner": "scanner-primary", "fingerprint": "9288ce6410d5fc00", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5971c33c4be6f72a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/audio/preRecorded.test.ts:132"}, "properties": {"repobilityId": "7de499e1733843bf", "scanner": "scanner-primary", "fingerprint": "5971c33c4be6f72a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0cdb4ca8871daf96", "level": "none", "message": {"text": "Commented-code block (14 lines) in src/lib/audio/mathPathA.ts:242"}, "properties": {"repobilityId": "d118f3804e4d93af", "scanner": "scanner-primary", "fingerprint": "0cdb4ca8871daf96", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e6cc273d1764366c", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/audio/wordSongPathA.test.ts:443"}, "properties": {"repobilityId": "92a8e67659813d34", "scanner": "scanner-primary", "fingerprint": "e6cc273d1764366c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2d78f7ab0dd77843", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/audio/useAudioUnlockGate.test.tsx:99"}, "properties": {"repobilityId": "eaa5753b982bcdd8", "scanner": "scanner-primary", "fingerprint": "2d78f7ab0dd77843", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f72ffe635a3e5d2f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/audio/sessionAudioCache.test.ts:142"}, "properties": {"repobilityId": "03eb09041512b002", "scanner": "scanner-primary", "fingerprint": "f72ffe635a3e5d2f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9de1a77ce8e333a2", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/audio/sessionAudio.test.ts:618"}, "properties": {"repobilityId": "8d8a2f823d86f9d8", "scanner": "scanner-primary", "fingerprint": "9de1a77ce8e333a2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-116b0ddba229a326", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/lib/audio/sessionAudio.ts:489"}, "properties": {"repobilityId": "5e5734e87a471570", "scanner": "scanner-primary", "fingerprint": "116b0ddba229a326", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-54c3a3aeec1a5ada", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/audio/wordSongPathA.ts:204"}, "properties": {"repobilityId": "274eaee26f77691e", "scanner": "scanner-primary", "fingerprint": "54c3a3aeec1a5ada", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f8de4ecd9fa16a0d", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/audio/useAudioUnlockGate.ts:178"}, "properties": {"repobilityId": "1b8cfff052b3bb9d", "scanner": "scanner-primary", "fingerprint": "f8de4ecd9fa16a0d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-639a4eb5d5afc6dd", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/audio/howlerContext.ts:514"}, "properties": {"repobilityId": "ea4fba3ac65c51e9", "scanner": "scanner-primary", "fingerprint": "639a4eb5d5afc6dd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b8e34b8596d45ff0", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/audio/preRecorded.ts:338"}, "properties": {"repobilityId": "6c7c8df1d4c0941c", "scanner": "scanner-primary", "fingerprint": "b8e34b8596d45ff0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6b0563df1338c177", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/lifecycle/useHowlerSuspendOnHide.test.tsx:254"}, "properties": {"repobilityId": "29882cc339788444", "scanner": "scanner-primary", "fingerprint": "6b0563df1338c177", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f18e389794605397", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/lifecycle/useStorageSync.test.tsx:33"}, "properties": {"repobilityId": "12e39385123fe97e", "scanner": "scanner-primary", "fingerprint": "f18e389794605397", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3ac07608b5e384a0", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/lifecycle/useHowlerSuspendOnHide.ts:117"}, "properties": {"repobilityId": "e059a630fcd678f5", "scanner": "scanner-primary", "fingerprint": "3ac07608b5e384a0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cb61cfafd6f734d7", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/debug/debugSeed.test.ts:95"}, "properties": {"repobilityId": "515fda1a446d8506", "scanner": "scanner-primary", "fingerprint": "cb61cfafd6f734d7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-65a87c86c2514b79", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/debug/debugBus.test.ts:365"}, "properties": {"repobilityId": "55ebaf7a01c7d5c8", "scanner": "scanner-primary", "fingerprint": "65a87c86c2514b79", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-344af876fb0b200b", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/debug/DebugOverlay.tsx:13"}, "properties": {"repobilityId": "de9c9da206dc3ead", "scanner": "scanner-primary", "fingerprint": "344af876fb0b200b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5e8753df81df815a", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/debug/debugSeed.ts:260"}, "properties": {"repobilityId": "ef0e3dee1b136c64", "scanner": "scanner-primary", "fingerprint": "5e8753df81df815a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2fda72d7115d257f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/debug/audioContextProbe.test.ts:788"}, "properties": {"repobilityId": "f67f1044bbdca552", "scanner": "scanner-primary", "fingerprint": "2fda72d7115d257f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ec77f65267eeb4b8", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/debug/audioContextProbe.ts:577"}, "properties": {"repobilityId": "837e73b0863962b0", "scanner": "scanner-primary", "fingerprint": "ec77f65267eeb4b8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7f0a837eb4f8ff37", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/debug/DebugOverlay.test.tsx:481"}, "properties": {"repobilityId": "9a4abbcaf3e5bc21", "scanner": "scanner-primary", "fingerprint": "7f0a837eb4f8ff37", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-69b69849b900e94a", "level": "none", "message": {"text": "Commented-code block (6 lines) in e2e/m5-recap-beat.spec.ts:85"}, "properties": {"repobilityId": "fb4921a39b91812a", "scanner": "scanner-primary", "fingerprint": "69b69849b900e94a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0fedf4c41c79475c", "level": "none", "message": {"text": "Commented-code block (11 lines) in e2e/sub-to-10-slow-fact-warmup.spec.ts:73"}, "properties": {"repobilityId": "9218b691e44bf1a4", "scanner": "scanner-primary", "fingerprint": "0fedf4c41c79475c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e5a07564b96906b2", "level": "none", "message": {"text": "Commented-code block (8 lines) in e2e/sub-to-10-subitising.spec.ts:394"}, "properties": {"repobilityId": "e51be4b8a51f95dd", "scanner": "scanner-primary", "fingerprint": "e5a07564b96906b2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6dbfe1dffa78b68c", "level": "none", "message": {"text": "Commented-code block (9 lines) in e2e/sub-to-10-first-encounter-gate.spec.ts:77"}, "properties": {"repobilityId": "d250f1d9086197c2", "scanner": "scanner-primary", "fingerprint": "6dbfe1dffa78b68c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-56d8c1ff52205892", "level": "none", "message": {"text": "Commented-code block (5 lines) in e2e/cvc-words-short-i-regression.spec.ts:86"}, "properties": {"repobilityId": "1eae8bb401384f47", "scanner": "scanner-primary", "fingerprint": "56d8c1ff52205892", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a5498143e6af9020", "level": "none", "message": {"text": "Commented-code block (8 lines) in e2e/letter-sounds-regression.spec.ts:299"}, "properties": {"repobilityId": "255911c2addaaaee", "scanner": "scanner-primary", "fingerprint": "a5498143e6af9020", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-37513d5dd7bb584f", "level": "none", "message": {"text": "Commented-code block (6 lines) in e2e/voice-qa-sw-bypass.spec.ts:116"}, "properties": {"repobilityId": "2e4087ed8199b2bc", "scanner": "scanner-primary", "fingerprint": "37513d5dd7bb584f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a8fef45571ebe67f", "level": "none", "message": {"text": "Commented-code block (11 lines) in e2e/add-to-20.spec.ts:445"}, "properties": {"repobilityId": "653c9e49be2ba6fb", "scanner": "scanner-primary", "fingerprint": "a8fef45571ebe67f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-14222ffbc4dc5901", "level": "none", "message": {"text": "Commented-code block (8 lines) in e2e/cvc-cross-vowel-review-firing.spec.ts:221"}, "properties": {"repobilityId": "e34c3e0f131e4bb7", "scanner": "scanner-primary", "fingerprint": "14222ffbc4dc5901", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-112af1da4fe831b4", "level": "none", "message": {"text": "Commented-code block (13 lines) in e2e/two-digit-addsub.spec.ts:406"}, "properties": {"repobilityId": "d67e0692c791ca25", "scanner": "scanner-primary", "fingerprint": "112af1da4fe831b4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9697e3b3f4e48da9", "level": "none", "message": {"text": "Commented-code block (13 lines) in e2e/sub-to-10-payload-shape.spec.ts:64"}, "properties": {"repobilityId": "b2be545265dd19da", "scanner": "scanner-primary", "fingerprint": "9697e3b3f4e48da9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-96daf61246854eab", "level": "none", "message": {"text": "Commented-code block (6 lines) in e2e/cvc-phoneme-blend.spec.ts:169"}, "properties": {"repobilityId": "3458f65eacc67c1b", "scanner": "scanner-primary", "fingerprint": "96daf61246854eab", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c088c38297f3847f", "level": "none", "message": {"text": "Commented-code block (5 lines) in e2e/mastery-promotion.spec.ts:136"}, "properties": {"repobilityId": "15ece23db990c7d5", "scanner": "scanner-primary", "fingerprint": "c088c38297f3847f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1d3b0f16083d0510", "level": "none", "message": {"text": "Commented-code block (10 lines) in e2e/sub-to-10-operator-glyph.spec.ts:44"}, "properties": {"repobilityId": "31e0ef4016ae2ddf", "scanner": "scanner-primary", "fingerprint": "1d3b0f16083d0510", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c4d46d5a46148945", "level": "none", "message": {"text": "Commented-code block (11 lines) in e2e/voice-qa-stale-submit.spec.ts:148"}, "properties": {"repobilityId": "9cc5777757fda41a", "scanner": "scanner-primary", "fingerprint": "c4d46d5a46148945", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b990af46c68cd123", "level": "none", "message": {"text": "Commented-code block (5 lines) in e2e/path-a-fetch-abort-rapid-route-bounce.spec.ts:91"}, "properties": {"repobilityId": "a004765e3af8ef21", "scanner": "scanner-primary", "fingerprint": "b990af46c68cd123", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4a4cc2bf514bcd6b", "level": "none", "message": {"text": "Commented-code block (7 lines) in e2e/simple-sentences-content.spec.ts:388"}, "properties": {"repobilityId": "737b34a954e109d6", "scanner": "scanner-primary", "fingerprint": "4a4cc2bf514bcd6b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d2a0866504f54bb7", "level": "none", "message": {"text": "Commented-code block (5 lines) in e2e/latency-band-invariant.spec.ts:103"}, "properties": {"repobilityId": "22b9a6f7d68bc237", "scanner": "scanner-primary", "fingerprint": "d2a0866504f54bb7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-72b3384e445c4022", "level": "none", "message": {"text": "Commented-code block (11 lines) in e2e/sight-words-content.spec.ts:591"}, "properties": {"repobilityId": "11a656f4936eb25b", "scanner": "scanner-primary", "fingerprint": "72b3384e445c4022", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6698291a41ef4f44", "level": "none", "message": {"text": "Commented-code block (6 lines) in e2e/digraphs-sh-progression.spec.ts:197"}, "properties": {"repobilityId": "58613192ce18355d", "scanner": "scanner-primary", "fingerprint": "6698291a41ef4f44", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7647ead46711a659", "level": "none", "message": {"text": "Commented-code block (6 lines) in e2e/cvc-words-short-o-regression.spec.ts:269"}, "properties": {"repobilityId": "53b9616a1092423b", "scanner": "scanner-primary", "fingerprint": "7647ead46711a659", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d8fdced9c7b0a3be", "level": "none", "message": {"text": "Commented-code block (5 lines) in e2e/sub-to-10-progression-mastery.spec.ts:84"}, "properties": {"repobilityId": "c2d93fb5c223bc5d", "scanner": "scanner-primary", "fingerprint": "d8fdced9c7b0a3be", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4ccd7bb35ca09318", "level": "none", "message": {"text": "Commented-code block (6 lines) in e2e/backgrounding-mid-session.spec.ts:208"}, "properties": {"repobilityId": "5558e8267a5e29c9", "scanner": "scanner-primary", "fingerprint": "4ccd7bb35ca09318", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-17b6c0b52a0101fe", "level": "none", "message": {"text": "Commented-code block (5 lines) in e2e/multi-tab-same-key-desync.spec.ts:206"}, "properties": {"repobilityId": "537bb15f9e8a0b46", "scanner": "scanner-primary", "fingerprint": "17b6c0b52a0101fe", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4370076397385078", "level": "none", "message": {"text": "Commented-code block (5 lines) in e2e/letter-sounds-per-vowel-progression.spec.ts:218"}, "properties": {"repobilityId": "c4a6df372fc037d8", "scanner": "scanner-primary", "fingerprint": "4370076397385078", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d4eb6f1f760930f6", "level": "none", "message": {"text": "Commented-code block (7 lines) in e2e/sub-to-10-distractor-class-2.spec.ts:74"}, "properties": {"repobilityId": "a4709cd0ca50b896", "scanner": "scanner-primary", "fingerprint": "d4eb6f1f760930f6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4e234ac39fae037a", "level": "none", "message": {"text": "Commented-code block (5 lines) in e2e/digraphs-th-content.spec.ts:716"}, "properties": {"repobilityId": "8f73ba552f1c831a", "scanner": "scanner-primary", "fingerprint": "4e234ac39fae037a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f3eeae2b0d62ea6b", "level": "none", "message": {"text": "Commented-code block (5 lines) in e2e/dot-card-affordance.spec.ts:132"}, "properties": {"repobilityId": "5cbf153eb5161520", "scanner": "scanner-primary", "fingerprint": "f3eeae2b0d62ea6b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3a3b80f60b87d1dc", "level": "none", "message": {"text": "Commented-code block (8 lines) in e2e/localstorage-corruption-recovery.spec.ts:182"}, "properties": {"repobilityId": "0addf90a761a918f", "scanner": "scanner-primary", "fingerprint": "3a3b80f60b87d1dc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a128479aacfb6f3b", "level": "none", "message": {"text": "Commented-code block (9 lines) in e2e/cvc-cross-vowel-mix-regression.spec.ts:219"}, "properties": {"repobilityId": "25d41b024b7a18aa", "scanner": "scanner-primary", "fingerprint": "a128479aacfb6f3b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a38142a7ffec393d", "level": "none", "message": {"text": "Commented-code block (5 lines) in e2e/schema-answer-value.spec.ts:195"}, "properties": {"repobilityId": "a24d1323f26d0e44", "scanner": "scanner-primary", "fingerprint": "a38142a7ffec393d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fe7bdd274b8748c3", "level": "none", "message": {"text": "Commented-code block (5 lines) in e2e/cloud-sync-conflict.spec.ts:102"}, "properties": {"repobilityId": "889b8851c1573b1a", "scanner": "scanner-primary", "fingerprint": "fe7bdd274b8748c3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-336dfcabefdb9458", "level": "none", "message": {"text": "Commented-code block (7 lines) in e2e/cvc-words-short-u-regression.spec.ts:71"}, "properties": {"repobilityId": "a599747a6e9c4168", "scanner": "scanner-primary", "fingerprint": "336dfcabefdb9458", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4c70613e43ea475a", "level": "none", "message": {"text": "Commented-code block (5 lines) in e2e/m5-reset-affordance.spec.ts:134"}, "properties": {"repobilityId": "37e2c916056a7d28", "scanner": "scanner-primary", "fingerprint": "4c70613e43ea475a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3b016f702f502b16", "level": "none", "message": {"text": "Commented-code block (8 lines) in e2e/simple-sentences-progression.spec.ts:271"}, "properties": {"repobilityId": "badf96be0d0a41b5", "scanner": "scanner-primary", "fingerprint": "3b016f702f502b16", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1f9fe09cd586c4bf", "level": "none", "message": {"text": "Commented-code block (5 lines) in e2e/hub-to-math.spec.ts:43"}, "properties": {"repobilityId": "860a73ed0d9a4a8e", "scanner": "scanner-primary", "fingerprint": "1f9fe09cd586c4bf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-38fcea4cfa8e6b88", "level": "none", "message": {"text": "Commented-code block (8 lines) in e2e/sub-to-10-chip-zero-render.spec.ts:63"}, "properties": {"repobilityId": "cf1a50bffbbe07e4", "scanner": "scanner-primary", "fingerprint": "38fcea4cfa8e6b88", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-02135e1a3e89296c", "level": "none", "message": {"text": "Commented-code block (5 lines) in e2e/sub-to-20.spec.ts:637"}, "properties": {"repobilityId": "99db187943a10de5", "scanner": "scanner-primary", "fingerprint": "02135e1a3e89296c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2a99d2fe6fc000ce", "level": "none", "message": {"text": "Commented-code block (9 lines) in e2e/digraphs-sh-content.spec.ts:528"}, "properties": {"repobilityId": "a37815bdf6996024", "scanner": "scanner-primary", "fingerprint": "2a99d2fe6fc000ce", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-135fd4de288ca7e9", "level": "none", "message": {"text": "Commented-code block (5 lines) in e2e/letter-names-regression.spec.ts:239"}, "properties": {"repobilityId": "d1716d5984c69efa", "scanner": "scanner-primary", "fingerprint": "135fd4de288ca7e9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d1f4572d0bd71723", "level": "none", "message": {"text": "Commented-code block (8 lines) in e2e/sub-to-10-dot-card-suppression.spec.ts:101"}, "properties": {"repobilityId": "b7968844427f8ad6", "scanner": "scanner-primary", "fingerprint": "d1f4572d0bd71723", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a6d1217b43a77909", "level": "none", "message": {"text": "Commented-code block (9 lines) in e2e/cvc-words-regression.spec.ts:151"}, "properties": {"repobilityId": "4e4f38849e0f96cf", "scanner": "scanner-primary", "fingerprint": "a6d1217b43a77909", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3eb2c1770e034843", "level": "none", "message": {"text": "Commented-code block (7 lines) in e2e/leitner-directive-injection.spec.ts:298"}, "properties": {"repobilityId": "d310a73e9aa24128", "scanner": "scanner-primary", "fingerprint": "3eb2c1770e034843", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d62a094ce58951aa", "level": "none", "message": {"text": "Commented-code block (6 lines) in e2e/subitising-scaffold.spec.ts:267"}, "properties": {"repobilityId": "2c506cc19a42dbfa", "scanner": "scanner-primary", "fingerprint": "d62a094ce58951aa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d53d1c3799c6a27a", "level": "none", "message": {"text": "Commented-code block (7 lines) in e2e/cold-mount-math-fetch-in-flight.spec.ts:81"}, "properties": {"repobilityId": "4ad97eaccc0246c8", "scanner": "scanner-primary", "fingerprint": "d53d1c3799c6a27a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-628bf9c24460ba60", "level": "none", "message": {"text": "Commented-code block (6 lines) in e2e/add-to-20-flower-row-fit.spec.ts:75"}, "properties": {"repobilityId": "bc715a5f11ba0641", "scanner": "scanner-primary", "fingerprint": "628bf9c24460ba60", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e5a1945441271b42", "level": "none", "message": {"text": "Commented-code block (5 lines) in e2e/digraphs-ch-content.spec.ts:740"}, "properties": {"repobilityId": "7c2989475ad502fc", "scanner": "scanner-primary", "fingerprint": "e5a1945441271b42", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-eb61e68d068a469e", "level": "none", "message": {"text": "Commented-code block (7 lines) in e2e/progression-mastery-loop.spec.ts:186"}, "properties": {"repobilityId": "df18f5d0813fc86f", "scanner": "scanner-primary", "fingerprint": "eb61e68d068a469e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a073cab7232c755b", "level": "none", "message": {"text": "Commented-code block (7 lines) in e2e/per-problem-distractor-class-schema.spec.ts:127"}, "properties": {"repobilityId": "0f185491ade4101d", "scanner": "scanner-primary", "fingerprint": "a073cab7232c755b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-eb85802a52871463", "level": "none", "message": {"text": "Commented-code block (6 lines) in e2e/math-three-hint.spec.ts:100"}, "properties": {"repobilityId": "5d6c8a6d47e51b40", "scanner": "scanner-primary", "fingerprint": "eb85802a52871463", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-14b763a2451b03c4", "level": "none", "message": {"text": "Commented-code block (8 lines) in e2e/letter-names-first-time-experience.spec.ts:354"}, "properties": {"repobilityId": "81cfc7873b672b9e", "scanner": "scanner-primary", "fingerprint": "14b763a2451b03c4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-356ce6e59fd8015f", "level": "none", "message": {"text": "Commented-code block (8 lines) in e2e/session-end-to-hub.spec.ts:117"}, "properties": {"repobilityId": "212492f1390b31c1", "scanner": "scanner-primary", "fingerprint": "356ce6e59fd8015f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-608882d7d7e6415c", "level": "none", "message": {"text": "Commented-code block (12 lines) in e2e/two-digit-addsub-with-regroup-progression.spec.ts:295"}, "properties": {"repobilityId": "e213536707f4579c", "scanner": "scanner-primary", "fingerprint": "608882d7d7e6415c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-000489fb4f547953", "level": "none", "message": {"text": "Commented-code block (6 lines) in e2e/voice-qa-page.spec.ts:165"}, "properties": {"repobilityId": "36278918091d3a94", "scanner": "scanner-primary", "fingerprint": "000489fb4f547953", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2306fe3f20013e76", "level": "none", "message": {"text": "Commented-code block (8 lines) in e2e/_helpers/cloudSyncFixtures.ts:258"}, "properties": {"repobilityId": "06a8f156542d578c", "scanner": "scanner-primary", "fingerprint": "2306fe3f20013e76", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8d04a0143ececce9", "level": "none", "message": {"text": "Commented-code block (7 lines) in e2e/_helpers/slidingWindow.test.ts:12"}, "properties": {"repobilityId": "cf838e2ceb21a51f", "scanner": "scanner-primary", "fingerprint": "8d04a0143ececce9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c487ee348cec0d09", "level": "none", "message": {"text": "Commented-code block (6 lines) in e2e/_helpers/seedStorage.ts:121"}, "properties": {"repobilityId": "6b13992e64c62e2c", "scanner": "scanner-primary", "fingerprint": "c487ee348cec0d09", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cc0f9d8e41b33b0e", "level": "note", "message": {"text": "11 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "c82cd8cd626c3599", "scanner": "scanner-primary", "fingerprint": "cc0f9d8e41b33b0e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}]}]}