Status: Shipped
PR: #126
Depends on: milestones/timing-json-parse.md (PR #89),
milestones/cli-segments-all.md (PR #125)
load_bundle_timing required the timing.json root to be a JSON
object. Per-stem values were untyped. A list, string, number, or null under
a stem then:
scene-spec-generate/ compile treated the stem as missing words (pace: nonecompiled as if timestamps had never been run).sync_audio_tail_waits_in_scenescalled.geton a list and raisedAttributeError.- Wizard freshness treated a list stem as a present timestamps entry.
Every present stem value must be a JSON object. Missing timing.json
is still {}. A present non-object stem raises TimestampError.
-
load_bundle_timingrejects list / string / number / null stems - paced and
pace: nonecompile fail with the parse error - validate
timing_syncand scene-asset checks surface the error -
extract_all/ wizard statuses do not merge or treat list stems as valid -
ruff check src/ tests/ -
pytest tests/(725 passed, 1 skipped) -
docgen benchmark(no clock change; meets baseline)
- Empty
segments.allstill leavestiming.jsonunchanged (#78) - Inner
words/segmentslist typing (paced compile already fails whenwordsis missing) - Bootstrap
_load_timinghelpers inside compiledscenes.py(Manim render still usesjson.loads; compile/validate gate first)