--- id: OCX-9 family: RT-OCX level: extended profiles: [runtime] posture: normative-target added: "1.0" changed: "1.0" source: https://flowdrop.io/spec/rules/rt-ocx/ocx-9 specification: FlowDrop Workflow Specification 1.0-draft licence: CC BY 4.0 --- # OCX-9 — Polls page, and paging never strands the caller *RT-OCX (Part II) · level: extended · profiles: runtime · added in 1.0* A first poll used to select every terminal run the installation had ever produced and load the lot, which is an out-of-memory failure rather than a slow query. ## The rule > **Normative.** This is the rule. > > 1. Every poll is bounded to a page: a first poll, or one whose cursor is empty or unparseable, costs no more than any other. > > 2. Paging is only sound if the caller can always walk to the end, so two things bind. > > 3. A page ordered by completion time is extended to cover every run sharing the last row's completion value, because completion times are not unique and a caller advancing its cursor past a split group would skip the remainder for good; the ordering is made total by a unique tiebreak so the held-back group is a clean suffix. > > 4. And a poll must not answer empty while rows remain: where scoping (OCX-3) is applied after the page is read, a page can filter down to nothing, and an empty answer reads to the caller as "nothing new" and parks its cursor forever, so paging continues until something is emitted or the result set is exhausted. ## Related rules - Names: OCX-3, OCX-8 - Referenced by: OCX-3, OCX-8 --- Rule identifiers are permanent and are never renumbered. This specification carries no implementation status: each implementation publishes its own standing against these rules. Licensed CC BY 4.0.