NEC-298: A word typed into a canvas card shows twice when the note is also open in a pane #300

Merged
nectenda-agent merged 3 commits from worktree-nec-298-a-word-typed-into-a-canvas-card-shows-tw into main 2026-10-17 00:19:06 +01:00
Collaborator

Task: NEC-298 — https://projectron.nerchure.com/tasks/311

A canvas card bound live to its note was logged by the recorder of unbound editors' edits (PendingEdits, SAFE-B5), although yCollab already carried its typing. The note's pane, binding next, replayed that log, and the card's word went into every vault twice. That is FLAKE-14 on main: runs 1450 and 1477. The recorder now carries the card as bound while it shows its note: nothing is logged, and other views' logs are cut on what it takes in. It logs the card again once the card lets go. Binding cuts the card's log rather than deleting it, so a log a reload interrupted still reaches the backup. Only the bound pane reports rewrites to ContentSync, as before. The cause was reproduced on demand before the fix: the e2e now opens the pane after the card's typing, the order that doubled the word every time. Local gate: every check except e2e passes. The two e2e failures in it, markdown-links and multi-pane, were shown unrelated: 12 reruns of multi-pane on main and on the branch all pass, and the duplication was a WebDriver execute retry. That is filed as NEC-300.

Spec: docs/changes/NEC-298-card-word-twice/spec.md

Changelog

A word typed into a note shown in a canvas card no longer appears twice when the same note is also open in a pane.

Task: NEC-298 — https://projectron.nerchure.com/tasks/311 A canvas card bound live to its note was logged by the recorder of unbound editors' edits (PendingEdits, SAFE-B5), although yCollab already carried its typing. The note's pane, binding next, replayed that log, and the card's word went into every vault twice. That is FLAKE-14 on main: runs 1450 and 1477. The recorder now carries the card as bound while it shows its note: nothing is logged, and other views' logs are cut on what it takes in. It logs the card again once the card lets go. Binding cuts the card's log rather than deleting it, so a log a reload interrupted still reaches the backup. Only the bound pane reports rewrites to ContentSync, as before. The cause was reproduced on demand before the fix: the e2e now opens the pane after the card's typing, the order that doubled the word every time. Local gate: every check except e2e passes. The two e2e failures in it, markdown-links and multi-pane, were shown unrelated: 12 reruns of multi-pane on main and on the branch all pass, and the duplication was a WebDriver execute retry. That is filed as NEC-300. Spec: `docs/changes/NEC-298-card-word-twice/spec.md` ## Changelog A word typed into a note shown in a canvas card no longer appears twice when the same note is also open in a pane.
A card bound live to its note has its typing carried by yCollab, but the
recorder of unbound editors' edits (SAFE-B5) knew only the pane's binding
and logged the card as well. The note's pane, binding after the card's
typing, took that log and replayed the typing into a document that already
had it, so the word went into every vault twice.

The recorder now carries the card as bound while it shows its note, cuts
other views' logs on what it takes in, and logs it again once it lets go.
The e2e opens the pane after the card's typing, the order that reproduced
the CI failure every time.

Task: NEC-298

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015Mnc3e1VSrfuXBhZXcGiDs
Review of the NEC-298 fix found:

- Binding a card deleted its whole log. A log a reload had interrupted still
  held the text from before the reload, which the next bind kept in a
  backup; deleted, it was gone without a word. The log is now cut at the
  text the card shows, as a save is, and the interruption stays.
- Nothing tested that a card is carried only once its editor took the
  binding. A test now binds an editor that refuses it.
- The carried card reported every mirrored rewrite to ContentSync, which
  would have had it set aside file changes after each key typed in the
  pane. Only the bound pane reports, as before.

Task: NEC-298

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015Mnc3e1VSrfuXBhZXcGiDs
Regenerate the conformance table for SAFE-B5's new tests
All checks were successful
Release note / release-note (pull_request) Successful in 29s
CI / build (pull_request) Successful in 6m16s
CI / e2e (pull_request) Successful in 12m29s
CI / promote (pull_request) Has been skipped
CI / build (push) Successful in 5m43s
CI / e2e (push) Successful in 12m17s
CI / promote (push) Successful in 32s
bd0f164bdc
Task: NEC-298

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015Mnc3e1VSrfuXBhZXcGiDs
Sign in to join this conversation.
No reviewers
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
Nectenda/nectenda!300
No description provided.