Claude
ea59bb0e27
feat(02-04): implement ChoreographyScheduler with absolute monotonic clock dispatch
- Absolute monotonic timestamp scheduling (D-07): fire_at = start_time + pause_offset + event.timestamp
- 5ms poll interval keeps asyncio loop responsive
- pause() records paused_at; resume() accumulates pause_offset (D-09)
- seek() restarts dispatch loop skipping events before seek position
- _dispatch() builds {zone, animation, params} dict without v:1 (transport responsibility)
- CHR-05 fulfilled: drift < 20ms validated by tests