The data layer
Local store is the source of truth for reads; the network is an enhancement (decisions.md → 2026-06-27).
Shape
Plants, rooms, surveys and care events are four tables, mirrored locally. A care event is append-only: marking a plant watered writes a row, it never mutates a schedule.
Sync
Last-write-wins per record, with care events exempt because they are append-only and therefore mergeable. This is the whole reason the schema separates "what we believe about a plant" from "what happened to it."
The rule that keeps it honest
No screen may read from the network directly. If a view needs data, it needs a local query, and sync's job is to make that query's answer better later.