| Concept / learning goal wrong | W1 storyboard |
| Confusing visuals / object choice | W2 visual-design (Visual Contract) |
| Script content or narration pacing | W2 audio/captions (script content) OR voice config |
| Caption timing off | W3 voice/ASR — re-check transcript before adjusting |
| Label overlaps art / element inside wrong region | W2 visual-design — zones not declared (kids-eye §1.5) |
| Comparison sides don't match (different vocab) | W2 visual-design — identity-preserved-transformation broken (kids-eye §4) |
| Teaching object doesn't read at glance | W3 primitive-gap-scan — finger-cover test was skipped |
| Teacher marks / pointer misaligned | W4 sketch-layer (cue-relative offsets) OR composer (frame literal bug) |
| Sketch marks render past video end / wrong cue | W4 composer — frame literals used instead of cue-relative |
| Two marks overlap, or a mark covers the glyph it annotates | W4 composer/sketch — anchor geometry wrong (park the mark in the clear gap; not a frame-literal issue) |
| Duplicate / "twin" components stacked (e.g. a migrated glyph and its destination both rendered) | W4 composer — handoff visibility window + landing position (source must fade before/as destination lands) |
| Primitives crammed / overlapping with no gap inside one zone | W2 visual-design (multiplicity doesn't fit the canvas) + W4 composer (compute pitch ≥ size + gap) |
| Number / label overflows its card / wrapper (no padding) | W3 primitive — glyph inset on the wrapper (e.g. NumberCard) |
| Audio jumps straight to the next sentence / no breath at a cue boundary | W3 voice generation — enforce a min inter-cue silence in voice.json / generate-voice |
| Voice spoke wrong / truncated narration | W3 voice — re-prompt with audio-captions ASR-flag fix |
| Voice rushes / pacing mismatched to motion | Wave-order failure — composer ran before voice + ASR existed; check Wave 3 happened |
| Voice ends mid-video / picture static after audio ends / captions linger past audio | Padded-hold regression — <X>LessonTimeline.ts re-introduced PADDED_CUE_DURATIONS_FRAMES or similar. Per docs/pipeline-architecture.md, the timeline must be the Wave 3.5 reconciled cues only. Fix: re-run Wave 3.5, ensure timeline file exports the reconciled cues directly. |
| Audio cue N plays while visual still shows cue N-1 | Same root cause as above — visual+caption on a padded timeline, audio on raw. Fix at Wave 3.5; no recomposition needed. |
| Broken shape, layout, scene mount | W4 composer or W3 primitive build |
| Voice tone / language | pipeline.json voice config |
| Render artifact | render step — inspect ffprobe, re-run |