Remote / Server-derived state
One owner per datum
A logical piece of state should have one authoritative owner. Surface composes the owners; it does not erase the boundary.
| State | Owner |
|---|---|
| Current route, selected item, transient errors | the local Model, plain update |
| Server-derived, disposable cache | foldkit-remote |
| Client-owned replicated state, offline writes, convergence | foldkit-sync |
| Local state the URL shows or a store remembers (a filter, a page, a draft) | the local Model, mirrored by foldkit-mirror |
Reaching for the wrong owner is the usual source of double-fetch bugs: a collaborative draft belongs to Sync, an analytics summary to Remote, and the currently selected project to the local Model. A Surface may project all three at once.