### A plan counts the symbols its asker holds, and a run dates its groups, object receipts and envelopes

- **What is held counts** ([extensions/timeliness.md](extensions/timeliness.md) §7.1, §7.2): a plan may state what its
  asker holds of objects on bearer instances (`symbols`), and a bearer's arrival is carousel §7's plan from that holding,
  which is what that section already plans from. Symbols held on one instance count for that instance alone. A plan or
  run that states none plans from nothing, as before, byte for byte. A statement that does not fit its entry is
  `holding_invalid`, and a malformed one `symbols_invalid`.
- **A wanted object that names none** (§7.1): `wanted_invalid`, the last of §7.1's checks, refuses a `wanted` that is not
  a list, an entry that is not an object, a `group` that is not 64 lowercase hexadecimal digits, and an `index` that is
  not an integer from 0 to 2<sup>53</sup> − 1. A run raises it at §7.5.1 check 2, and one object wanted twice stays
  `plans_invalid`. A position past that bound, which read as `deadline_not_stated`, is now refused.
- **In a run** (§7.5.1): `symbols` is a trace on the sink's clock, and each plan counts the last statement of each object
  on each instance by its own instant. A later statement cannot fall, change the count of blocks, or repeat an instant.
  A vector shows a rung reached only for what the sink already held, and both implementations derive the sink's fetch.
- **Groups, object receipts and envelopes are dated** (§4.3, §7.5.1): `groups_at_ms` and `receipts_at_ms` are optional
  and parallel to what they date, an envelope is read from its object's arrival in a run that states either, and a run
  that states neither reads them whole at every plan, as before, byte for byte. A malformed list, one group twice, or a
  group held before it starts is `groups_invalid`. A group that fails its signature is compared with nothing, and
  refuses the run only where a plan reads it.
- **A `passed` a later plan contradicts** (§7.5.4): it stands. The object is no longer run, its fetch is abandoned, a
  primary that arrives after is not presented, and no `ended` follows. This states what a run already did.
- **A gap in a claim's chain** ([extensions/jwp-receipts.md](extensions/jwp-receipts.md) §3.1 step 5): by the previous
  claim alone a verifier cannot tell a fork from a gap and reports both `chain_break`, and the text now says a gap is
  recoverable as `parent_not_held` is. No verdict changes.
- **An instant that is not an integer** is refused by the rule for its list, in both implementations, with vectors for
  plans, arrivals, claims, records, groups, object receipts and symbols.
- **Breaking:** `api:rust:wai::timeliness::PlanInputs::symbols`, `api:rust:wai::timeliness::scheduler::RunInputs::groups_at`,
  `api:rust:wai::timeliness::scheduler::RunInputs::receipts_at` and `api:rust:wai::timeliness::scheduler::RunInputs::symbols`:
  a caller that builds these field by field sets `symbols` empty and the instants to `None`, and reads the same plan or run.
