OptionalreportingOptionalreportingOptionalobservedOptionalsupersedesThe caller's current unsuperseded leaf, when the seller published one. A new statement must name it; omitting it on a chain that already has a leaf fails atomically rather than forking.
OptionalmismatchOptionalfailureOptionaldeadlineexpected_at + automated_recovery_window_seconds, when both are known.
True once the deadline has passed — the status is owed now, not at scope close.
OptionalstatusWhen the consumer established this status.
undefined while requiresConsumption is still true: a received
statement is dated from when the revision became consumable to this
consumer, which is not knowable until the buyer has actually read it.
Earliest instant this statement may legally carry: the later of the
instant it became true and the superseded leaf's own status_as_of, since
time forbids a chain from moving backwards.
OptionalrequiresTrue until the buyer has consumed the named revision and recomputed its
binding digest. received and content_mismatch both require that
recomputation, so neither may be posted while this is set.
OptionalsuppressedWhy this status was planned but not posted.
unchanged — the caller's current leaf already says exactly this. Posting
it again would supersede a statement with its own duplicate, forever;
retention_and_limits calls that pathological churn.leaf_undisclosed — the seller named a current leaf it did not return, so
the buyer cannot tell whether it has anything new to say and declines to
guess.consumption_unavailable — no exact-revision reader is wired, so the
buyer cannot honestly attest consumption.posting_unavailable — no syncReportingStatus is wired, so there is
nothing to append to. Without this the plan reads as live, due and
unsuppressed while silently going nowhere.period_identity_unknown — the seller supplied a period.source_timezone
that is not a recognized IANA zone. That value is part of the chain's
logical key, so substituting one produces a statement the seller refuses
on every run; iana_timezone forbids the substitution by name.local_budget_exhausted — the buyer's own read budget ran out before it
could consume the revision. Self-inflicted, so it is silence rather than
an unreadable claim against a seller that did nothing wrong.deadline_unknown — no posting deadline could be derived, so this period
will never post. Two causes, both named in reason: a pin the buyer has
to supply is missing, or the seller's own obligation.expected_at is
unreadable and its schedule.delivery_sla did not resolve one either.
Without this value a permanent misconfiguration renders exactly like a
period that is simply not due yet.chain_indeterminate — the seller's revision chain forked, or the buyer
could not walk it. That is the buyer failing to read, not the seller
failing to publish, and revision_missing would blame the wrong party.OptionaldeadlineSet when the seller's own expected_at is later than the buyer's pinned
expectation by more than its recovery window.
The statement is still not posted — expected_period makes the seller's
instant authoritative, and a locally derived one would be refused. But
without this the period sits at overdue: false with suppressed unset,
indistinguishable from one that is simply not due yet, which is a silent
kill switch for the whole loop. Alert on it.
Why this status, in adopter-readable terms. Never a measurement claim.
One consumer status the buyer owes for an expected period, with the deadline that makes it owed.
rc.3 moves the buyer's duty off "before you close the scope" and onto a clock: a current status is owed by
expected_atplus the seller's advertisedautomated_recovery_window_seconds. A buyer still retrying at that point postsrevision_missingorunreadableand supersedes it later rather than staying silent, because silence is what the seller counts inobligation_counts.consumer_status_pending.