//! The delta-feed JSON shapes, exactly as `GET /api/sync/changes` sends them. //! //! Mirrors the server's serializers (`notes/serialize.py` + `serialize.py`) — see //! `docs/sync.md` for the contract. Every field is `#[serde(default)]` or `Option` //! so a NEWER server adding fields, or an older one omitting one, degrades to a //! partial note rather than failing the whole page. Losing one attribute is //! recoverable; refusing a page stalls sync permanently at that cursor. use serde::Deserialize; #[derive(Debug, Clone, Deserialize, Default)] pub struct ChangesPage { #[serde(default)] pub notes: Vec, #[serde(default)] pub labels: Vec