screenplay-scripter — Ralph progress log
=========================================

Project: Python CLI tool (uv+Typer+cliclick+pynput) for tutorial recording
Plan: .omc/plans/screenplay-scripter-plan.md (consensus-approved, 2 iterations)
PRD: .omc/prd.json (5 stories, 17 ACs total)

Key decisions from consensus:
- Script format: real Python .py file (from scripter import *)
- Player: exec(compile()) + warn-only AST scan + scripter.configure() before exec
- Recorder gate: Ctrl+Opt TOGGLE (not hold); pynput global listeners
- Smooth movement: batched cliclick -w <ms> m:… c: (one process per action, ≥30 m: tokens)
- Drag: dd: + N×dm: (NOT m:) + du: in one batch
- Scroll: cliclick m:x,y positioning + Quartz CGEventCreateScrollWheelEvent(kCGScrollEventUnitLine)
- key(): modifiers→kd:/ku: wrap, named keys→kp:, chars→t:
- Config: scripter.configure(dry_run,steps) with precedence CLI > SCRIPTER_DRY_RUN env > default
- ffmpeg: external wrapper (docs only, not built-in)
- Inter-event timing: capture gaps >150ms → sleep(); --no-timing disables

cliclick confirmed commands (5.1): c, cp, dc, dd, dm, du, kd, kp, ku, m, p, rc, t, tc, w
kp: key list: arrow-*, brightness-*, delete, end, enter, esc, f1-f16, fwd-delete, home,
  keys-light-*, mute, num-*, page-down, page-up, play-*, return, space, tab, volume-*
kd:/ku: only accepts modifiers: alt, cmd, ctrl, fn, shift

Iterations:
