NEC-318: A live drawing never draws an element Excalidraw re-indexes on reconcile, and retries silently #310
No reviewers
Labels
No labels
area:docs
area:identity
area:ops
area:plugin
area:server
channel:community
channel:direct
channel:owned
channel:press
channel:social
e2ee-constrained
gate:at-ga
gate:pre-ga
marketing
parity
relay:absent
relay:planned
relay:requested
relay:supported
risk:additive
risk:contract
risk:none
usability
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
Nectenda/nectenda!310
Loading…
Reference in a new issue
No description provided.
Delete branch "worktree-nec-318-a-live-drawing-never-draws-an-element-ex"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Task: NEC-318 — https://projectron.nerchure.com/tasks/338
A live Excalidraw drawing never drew a remote shape that Excalidraw re-ordered as it reconciled it: reconcile repairs the shape's fractional index in place and bumps its version, so the binding took it for the view's own newer version, held it back and retried every pass. The view now draws it, and syncs the repaired place as an edit carried on the version it repaired with a nonce from the top of Excalidraw's range, so it loses every tie: an edit made anywhere at the same version stands over it, and the repair converges with nothing kept (index is not content). A repair the document has already moved past is not carried, and gives way in the view once the shape is not being edited. The third design: carrying the repair as Excalidraw made it lost a recolour (hardness seed 1523149228), and keeping it local left two vaults stacking shapes in opposite orders. Both are recorded in the spec and docs/sync-limitations.md.
Also fixed here, found on main while working this card: an edit made while a remote change to the same shape was held back could be removed silently (NEC-321; it is now carried as a rival judged against the version it was made on, removing nothing), and a version that does not stand was re-offered every capture until the runaway guard silently unbound the drawing (NEC-320, folded in at the user's call rather than filed as a ride-along; each such version is now offered once per binding). Ride-along NEC-319: spec-delta.mjs now counts a rule's nested clauses.
SAFE-A29 updated. Verified: plugin unit tests (2332), local gate (247 e2e, 2 skipped), every new rule mutation-checked both ways, and a 60-minute Excalidraw hardness run on the final code (A on 2.28.1, B on 2.27.3; seeds 1523149228, 1528500687, 1955423520), with repairs in every run and no bounce or long hold. Installed for the user's manual test before opening.
Also fixes NEC-320.
🤖 Generated with Claude Code
https://claude.ai/code/session_01AFBXMDJhig8T4bgUzjLYhK
Spec:
docs/changes/NEC-318-live-drawing-reindexed-element/spec.mdAlso fixes NEC-319: spec-delta reads a rule only up to its first sub-bullet, so a reworded nested clause escapes the gate
Also fixes NEC-321: An edit made on a shape held back for a remote change is never carried in, and is drawn over
Changelog
A live Excalidraw drawing now shows a shape another vault adds or changes even when Excalidraw re-orders it on the way in, instead of leaving it out.