Codex's re-review of c50788c found four gaps; a fifth turned up while testing the teammate scenario. - Landing identity (P1). A fresh landing got its own uuid, but the cloud projection keys each item by its link id and hydration makes that the landing id, so every landing id changed on the first rehydrate. Retained actions then pointed at a missing landing: undoing a link edit could leave a link whose landing projection dropped (an empty-items group the server stores), undoing a fresh lineup orphaned a landing, and reconcile discarded landing edits. A landing made for a link now takes the link's id, so projection and hydration agree. Nodes also exist only while a link uses them, so no undo can leave an orphan. - Field-specific edits (P2). A LineUpEditAction records the target and only the field it changed (origin position, landing position, landing visibility, link details) and writes just that field onto the entry as it is now, so a teammate's weapon or anything else changed since is kept. Link edits never touch which origin and landing a link joins. - Overlapping side toggles (P2). The op queue publishes an op only after its durable write, so a second all-pages toggle starting before the first finished read the older side. The requested side is recorded per page synchronously and cleared by the call that set it, unless a later call replaced it. - Reconcile (P2). A lineup edit is kept while its target exists or any retained lineup addition or deletion, on either stack, can bring it back, so an edit made before a deletion stays undoable after the deletion lands. - Stale overlays after rehydration. When acks arrive, _reconcileAcks refreshes; the refreshed snapshot starts a rehydrate, which marks the page unhydrated, so the syncLocalPage that clears satisfied overlays skipped the page. The leftover overlay kept painting the local version over later remote changes to that entity and would eventually write it back over a teammate's edit. markPageHydrated now drops a page's overlays that no queued, in-flight, successor, paused or attention op still carries. Tests go through the real path: the editor places a lineup, live sync authors ops from the projection, the fake queue drains them in one update that publishes their acks, and the session reconciles and rehydrates from what the server stored; page settings mark which revision is on screen. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Dara Adedeji committed on 9/25/2026, 4:53:48 AMparentc50788c
6 files changedLine totals unavailable