Editor delete and edit conflict did not reach both peers #364

Closed
opened 2026-09-28 16:36:40 +00:00 by kayg · 5 comments
Owner

The adversarial editor probe did not observe a delete/edit conflict reach both peers within its 10-second wait.

Probe: tests/adversarial/editor.mjs, seed 25608414, case editor delete and edit of one block. The probe reported timed out waiting for delete conflict reached both peers; its conflict propagation helper allows 10 seconds. Other editor collaboration cases passed in the same run, including concurrent same-block writes and offline reconciliation.

Please reproduce this case and inspect the peer state captured by the probe before changing behavior. The check was run on a shared, heavily loaded host and may be load-sensitive. This finding is outside the mobile-focus job scope.

The adversarial editor probe did not observe a delete/edit conflict reach both peers within its 10-second wait. Probe: `tests/adversarial/editor.mjs`, seed `25608414`, case `editor delete and edit of one block`. The probe reported `timed out waiting for delete conflict reached both peers`; its conflict propagation helper allows 10 seconds. Other editor collaboration cases passed in the same run, including concurrent same-block writes and offline reconciliation. Please reproduce this case and inspect the peer state captured by the probe before changing behavior. The check was run on a shared, heavily loaded host and may be load-sensitive. This finding is outside the mobile-focus job scope.
Author
Owner

The same adversarial run at seed 25608414 again timed out in editor delete and edit of one block: timed out waiting for delete conflict reached both peers. Other collaboration cases in that run passed, including concurrent same-block writes and offline edit reconciliation. This remains load-sensitive evidence for the existing issue; I did not change collaboration code in this UI job.

The same adversarial run at seed 25608414 again timed out in `editor delete and edit of one block`: `timed out waiting for delete conflict reached both peers`. Other collaboration cases in that run passed, including concurrent same-block writes and offline edit reconciliation. This remains load-sensitive evidence for the existing issue; I did not change collaboration code in this UI job.
Author
Owner

Adversarial evidence for this existing issue: tests/adversarial/editor_chaos.py reported on seed 25608414 that a delete/edit conflict did not reach both peers before the probe timeout (timed out waiting for delete conflict reached both peers). I left Editor code unchanged in this UI job. The observation belongs with #364.

Adversarial evidence for this existing issue: `tests/adversarial/editor_chaos.py` reported on seed `25608414` that a delete/edit conflict did not reach both peers before the probe timeout (`timed out waiting for delete conflict reached both peers`). I left Editor code unchanged in this UI job. The observation belongs with #364.
Author
Owner

Editor-integrity job final report — branch job/editor-integrity, head b824878e (pushed).

  • #332 and #364: fixed the Yrs conflict-shadow merge that discarded the surviving edit when another client deleted that block. Deterministic tests cover both update orders and a same-connection redo update. The real-server delete/edit probe passed.
  • #346: the concurrent delete/edit loss is fixed by the same change. The history-text finding is not closed by this work; see #314 and #363 below.
  • #225 and #262: added structure-level editor history coverage, but did not rerun the 500-step production browser ID storm after the final branch state. Persistence of unique IDs in that exact storm remains unconfirmed.
  • #280 and #281: the focused history test keeps one pasted image over 50 undo/redo pairs. The 500-step production browser image storm was not rerun after the final branch state, so this exact case remains unconfirmed.
  • #314 and #363: focused Yjs/ProseMirror structure tests pass. The fixed-seed production browser history probe remained timing-sensitive: clean runs reported a stale or mismatched mounted ProseMirror view after Ctrl+Z, while one instrumented run passed 50 paste and IME round trips. I removed the unverified key scheduling change and kept the failure evidence for follow-up.

Verification:

  • bun run test src/collaborationUndo.test.ts: 4 passed.
  • cargo fmt --check: exit 0, no output.
  • cargo clippy --all-targets -- -D warnings: stopped at the four-hour job limit (exit 130) while compiling workspace dependencies.
  • cargo test, bun run check, and bun run test for the full web workspace were not run before the time limit.

Decision: conflict-shadow merge filters each incoming Yrs update against that update's own delete set. This keeps a later text edit that follows a root deletion while avoiding replay of a duplicate root insertion from the same redo update. The issue-specific tests pass; the full gates and listed browser storms remain for follow-up. Issues remain open.

Editor-integrity job final report — branch `job/editor-integrity`, head `b824878e` (pushed). - #332 and #364: fixed the Yrs conflict-shadow merge that discarded the surviving edit when another client deleted that block. Deterministic tests cover both update orders and a same-connection redo update. The real-server delete/edit probe passed. - #346: the concurrent delete/edit loss is fixed by the same change. The history-text finding is not closed by this work; see #314 and #363 below. - #225 and #262: added structure-level editor history coverage, but did not rerun the 500-step production browser ID storm after the final branch state. Persistence of unique IDs in that exact storm remains unconfirmed. - #280 and #281: the focused history test keeps one pasted image over 50 undo/redo pairs. The 500-step production browser image storm was not rerun after the final branch state, so this exact case remains unconfirmed. - #314 and #363: focused Yjs/ProseMirror structure tests pass. The fixed-seed production browser history probe remained timing-sensitive: clean runs reported a stale or mismatched mounted ProseMirror view after Ctrl+Z, while one instrumented run passed 50 paste and IME round trips. I removed the unverified key scheduling change and kept the failure evidence for follow-up. Verification: - `bun run test src/collaborationUndo.test.ts`: 4 passed. - `cargo fmt --check`: exit 0, no output. - `cargo clippy --all-targets -- -D warnings`: stopped at the four-hour job limit (exit 130) while compiling workspace dependencies. - `cargo test`, `bun run check`, and `bun run test` for the full web workspace were not run before the time limit. Decision: conflict-shadow merge filters each incoming Yrs update against that update's own delete set. This keeps a later text edit that follows a root deletion while avoiding replay of a duplicate root insertion from the same redo update. The issue-specific tests pass; the full gates and listed browser storms remain for follow-up. Issues remain open.
Author
Owner

The one-time adversarial run on job/touch-369 also timed out waiting 10 seconds for the delete/edit conflict to reach both peers (tests/adversarial/editor.mjs, seed 25608414). Concurrent same-block writes and offline reconciliation passed in that run. The host was heavily loaded; no editor code was changed here.

The one-time adversarial run on `job/touch-369` also timed out waiting 10 seconds for the delete/edit conflict to reach both peers (`tests/adversarial/editor.mjs`, seed `25608414`). Concurrent same-block writes and offline reconciliation passed in that run. The host was heavily loaded; no editor code was changed here.
Author
Owner

Merged into dev by Claude after review; deployed to calternal.cloud. Closing.

Merged into dev by Claude after review; deployed to calternal.cloud. Closing.
kayg closed this issue 2026-09-29 00:53:19 +00:00
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
kayg/calternal#364
No description provided.