frontend-patterns/research/candidates/LocalCommitBoundary.md

46 lines
2.4 KiB
Markdown
Raw Normal View History

---
title: Local Commit Boundary
status: draft
maturity: hypothesis
families: [mutation, authority]
scales: [L2, L6]
admission: research-candidate-only
---
# Local Commit Boundary
Context: an offline editor must survive an ordinary process restart after it tells
the user an edit is saved. Problem: immediate visual feedback is faster than storage
completion. `perceived-responsiveness` competes with `recoverability`; atomic storage
adds `implementation-complexity`.
Proposed solution: distinguish visible input from acknowledged local commit. Persist
the document revision and its pending-sync intent in one recoverable transaction;
only then report saved locally. This is a proposed design contract, not a claim
about Joplin or Obsidian internals. A storage error leaves the edit visibly unsaved.
Result: restart can reconstruct acknowledged work and pending propagation under the
selected storage assumptions. Remote acceptance is still unknown. Power loss, disk
corruption, quota exhaustion and device loss need separate guarantees and recovery.
The alternative of saving only in memory cannot satisfy the stated restart requirement;
waiting for a server commit cannot satisfy offline editing.
Evidence: LocalFirstEvidenceExpansion E01/E04/E05 motivates local storage and separate
sync; it does not establish this transaction or its crash guarantees. Known uses of
this exact boundary: unknown. Recurrence: unknown. Hypothesis only.
Proposed connection: enables [Pending Synchronization](PendingSynchronization.md)
when the transaction records the pending revision. This is a research relation,
not an admitted canonical edge. Test: [VC-02](../walkthroughs/VC02-OfflineFieldNotes.md).
## Recovery evidence boundary — 2026-09-26
Name the storage transaction and acknowledgement assumptions, then test ordinary
restart, interrupted commit and any claimed power-loss/flush behavior separately.
An untested guarantee is unknown, not demonstrated impossible. Synchronization or
a second copy on the same device does not establish independent backup protection.
Define a separate backup retention/failure scope and test restoration to a clean
store, including pending operations and their reconciliation, before promising
recovery from device loss or replicated deletion. Respect access and retention
policy during backup and restore. See [shared guidance revision](../reviews/SharedGuidanceRevision.md).