Orders editor — execution section, timeline lens

UX mock for P8 (docs PR #69) · absorbs + replaces SyncMatrix on PLAN · table and timeline are two lenses over PlanRecord.tasks[]

OPORD 003 — SQN CLEARANCE, OBJ COPPER

v3 (seq 3) · edited 12:10Z by 0B
acks 6/9

EXECUTION — TASKS

⚠ B21 untasked H-hour 0600Z 05 JUL · drag bar = retime · drag edge = duration
ORBAT ▸ H-HOUR
H−2
H−1
H
H+1
H+2
H+3
H+4
H+5
SQN HQ
ESTABLISH CP
0B
COMMS CHECK ALL NETS
A TROOP
CLEAR OBJ COPPER EAST
HOLD + REORG
A11
BREACH FUP GOLD
B TROOP
SUPPORT BY FIRE, RL AMBER
B21 ⚠
untasked — click track to add task
■ movement/action■ enabling■ C2/sustainment timings H-hour-relative · stored on PlanRecord.tasks[]
Distribution (automatic): A TROOP, B TROOP, SQN HQ + chain of command
publish = seq 4 · all versions kept for replay

Implementer notes (P8 steer)

  1. One record, two lenses. Table and Timeline both edit PlanRecord.tasks[] {unit-or-callsign, text, timing}. No separate task store — the sync_tasks domain, its API and useSyncTasks retire; existing rows migrate into a plan record per operation (or drop if disposable). PLAN page's map | estimate | matrix toggle loses matrix.
  2. Timing model. H-hour-relative offset + duration per task (P1 schema must carry duration, not just a point). The order sets H; absolute DTG shown on hover/table. Android's Q5/Q6 views render the same fields.
  3. Lanes are the ORBAT. Unit lanes in tree order, callsign lanes indented beneath when tasked individually. Untasked callsigns get a flagged empty lane — same red flag the Q5 roster and plan-tree gap surface use; click the track to task them.
  4. Interaction. Drag bar = retime; drag right edge = duration; click = select + edit in a popover (text, assignee from ORBAT picker). Keep the drag math pure (timeline_layout.ts pattern survives as *_helpers.ts, Vitest-covered). Zoom: H-window presets (H±2, H±6, full) over pinch-precision.
  5. Edits are draft-local until publish. Publish bumps seq; the strip shows automatic distribution (tasked subtree + chain of command), ack coverage, and version history. No save button per bar.
  6. Replay export. New plan NDJSON layer (every seq version) supersedes sync_task; keep the old layer exporting until migration completes, then remove.
  7. Not pixel spec. daisyUI + waypoint tokens; colours here are task-category placeholders — reuse the drawing palette tokens rather than inventing a new ramp.