Take an Ack as the read position only after the catch-up #151
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
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
Nectenda/nectenda!151
Loading…
Reference in a new issue
No description provided.
Delete branch "worktree-nec-87-ack-floor"
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-87
A guest joining a shared folder never received a file the owner created at the same moment (CI runs 531 and 660). Run 660's
TRACE_BROADCASTStrace shows the cause on the folder listing:The Subscribe waits for the IndexedDB checkpoint and the push doesn't. The Ack handler took the acked seq as the read position, which is only valid for a socket that was already receiving the document. The position is persisted, so the loss was permanent and silent.
Change: an Ack moves
lastSeqonly once the connection's catch-up has ended (sub.synced). Before that, the SyncStatus sets it. Safe in either order, because the server registers the socket on the push and acks after the broadcast.provider-framing.test.tscovers it, including the exact CI ordering and a reconnect. Mutation-checked: dropping thesyncedguard fails the two new tests, and never advancing fails the two existing ones.decrypt-gap.test.tsAck test now syncs first, so it still fails only on the gap guard (mutation-checked).docs/sync-limitations.mdentry is now marked fixed, with the residual: plugin 0.1.5 keeps the bug, so the e2e compatibility pass can still hit it until a fixed release replaces 0.1.5. The e2e README says how to tell that apart from a new failure.Local:
pnpm test, typecheck, lint,build-mirror --check,spec-delta --check, conformance--check, andtest:e2e:multi(69 passed; the local run has no 0.1.5 pass). The built mirror bundle contains the guard.Changelog
Fixed a race condition where a note another member created just as you joined a shared folder could silently never reach your vault.
🤖 Generated with Claude Code
https://claude.ai/code/session_01Q6gkmHZ3pYvsZCCpiA9qe9