Plan timeline — COP (live) and Replay (cursor)

UX mock for P9 (amendment to docs PR #69) · one shared read-only PlanTimeline component, two hosts · bottom panel, never a map overlay

A — COP · live now-line · 09:42Z (H+3:42)

live map — tracks, detections, published overlays
OBJ COPPER
A10 A11 B20 SIGHTING 041

PLAN — OPORD 003

v3 · latest H 0600Z ⚠ 1 task past due, no report — B TROOP
acks 8/9 ▾ collapse
ORBAT ▸ H-HOUR
H−2
H−1
H
H+1
H+2
H+3
H+4
H+5
NOW 09:42Z
SQN HQ
ESTABLISH CP ✓
A TROOP
CLEAR OBJ COPPER EAST ✓
HOLD + REORG
B TROOP
SUPPORT BY FIRE, RL AMBER ⚠
■ complete (reported) ■ in window ■ past due, unreported ▢ upcoming click bar = task detail + unit's latest report · unit lanes only (callsigns expand)

B — Replay · cursor 08:15Z · plan as it existed at T

historical map — tracks as at 08:15Z
OBJ COPPER
A10 A11 B20

PLAN — OPORD 003

v2 · active at cursor superseded 12:10Z by v3
▾ collapse
ORBAT ▸ H-HOUR
H−2
H−1
H
H+1
H+2
H+3
H+4
H+5
T 08:15Z
SQN HQ
ESTABLISH CP ✓
A TROOP
CLEAR OBJ COPPER EAST
REORG ON OBJ
B TROOP
SUPPORT BY FIRE, RL AMBER
v2 differs from v3: A TROOP reorg task later retimed + extended task states derived from reports received ≤ T, never later knowledge
06:00Z
14:30Z ▮ plan version published

Implementer notes (P9 steer)

  1. One component, three hosts. PlanTimeline is presentational; pure lane/bar/cursor math in *_helpers.ts (Vitest). Hosts supply {tasks, hHour, cursor, taskStates, editable}. Orders editor (P8) is the editable host; COP and Replay render read-only with a cursor.
  2. Placement. Collapsible bottom panel in the same slot family as the comms panel — never a map overlay, never a COP view toggle. Collapsed state = one-line strip: plan name, version, now-position, past-due count.
  3. COP host. Tasks from the operation's current plan tree (latest seq per plan id). Now-line ticks live. Task state derives from reports: complete (report received covering the task window), in-window, past due + unreported = red — the visual sibling of the silent-unit rule in the compliance matrix. Click bar = task detail + that unit's latest report. Unit lanes by default; expand a unit for callsign lanes.
  4. Replay host. Plan folded from the plan NDJSON layer: at cursor T render the highest seq ≤ T per plan id (same fold-forward as orbat_change / target_transition). Version chip shows which seq is active and when superseded. Task states computed from reports ≤ T only — no future knowledge leaks. Plan-publish moments render as marks on the replay scrubber.
  5. No compat. sync_task export layer removed in the same storm; plan layer replaces it outright.
  6. ORBAT at T. Replay lanes use ORBAT as at cursor (fold orbat_change), so a provisional team formed mid-op appears in lanes only after its formation moment.
  7. Not pixel spec. daisyUI + waypoint tokens; state colours map to NATO-aligned status tokens already in the theme.