.
This commit is contained in:
parent
4c002f9acd
commit
b07aa589ff
1 changed files with 728 additions and 530 deletions
|
|
@ -18,11 +18,22 @@ UUID is rejected.
|
|||
|
||||
## Reconciliation
|
||||
|
||||
A new client reads a coherent vault snapshot, applies it, then replays
|
||||
An absent event cursor marks a new client or a durable history reset. The client
|
||||
reads a coherent vault snapshot, applies it, then replays
|
||||
subsequent events over HTTP. Pages are folded in memory to their final document
|
||||
heads and manifest before changing local files. Interrupted fetching restarts from
|
||||
the last incorporated cursor without saved pagination state. This avoids applying
|
||||
intermediate remote edits that were already reverted.
|
||||
intermediate remote edits that were already reverted. Bootstrap snapshots are
|
||||
refetched after interruption rather than persisted. One reconciliation pass
|
||||
handles the folded events, local scans, and previously deferred downloads.
|
||||
|
||||
Each document stores a base version/hash and the last observed disk hash. A remote
|
||||
head is retained only until it can be applied. The observed hash records local
|
||||
presence as well as rename evidence; there are no separate bootstrap or
|
||||
materialization flags. Scans rebuild physical exclusions. Original server paths
|
||||
remain saved while excluded, so ignoring a file cannot publish a deletion or
|
||||
forget a deferred rename. Rejected payloads and messages live on the retained
|
||||
requests that event replay already needs for uncertain acknowledgements.
|
||||
|
||||
For text, the client compares the common base, current local bytes and current
|
||||
remote bytes using `reconcile-text`. Configured extensions and valid UTF-8 without
|
||||
|
|
@ -75,9 +86,11 @@ The client persists and echoes it; the server rejects a checkpoint from a discar
|
|||
history before executing its request. Each new event gets a fresh token even if
|
||||
its numeric ID or request UUID was used on the discarded branch.
|
||||
|
||||
After a mismatch, the client records reset intent, clears old history-dependent state and bootstraps against the restored
|
||||
server. Clean files reconcile against the restored snapshot. Unsent edits with an
|
||||
old base are preserved as separate local documents, with conflict names if needed.
|
||||
After a mismatch, the client clears the event cursor and old history-dependent
|
||||
state before releasing the transport checkpoint, then bootstraps against the
|
||||
restored server. Clean files retain only their hash, with no old version ID or
|
||||
content copy. Unsent edits, including changes made while recovery is interrupted,
|
||||
are preserved as separate local documents, with conflict names if needed.
|
||||
Interrupted recovery saves are replayable. Backups must be restored with the server
|
||||
stopped.
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue