OpenSentience.orgUnboxed PatternsChapter 17 of 32 · Progress

UP-017 · Progress · PROPOSED CHECKABLE RUNNABLE EXECUTED STAGED

Proven Quiescence

Silence is not completion: quiescence is established by a sweep over the loci, never read off idle carriers.

A system is quiescent only when a sweep establishes that no locus has admissible pending work; silence of the currently observed carriers is not completion.
Standing
PROPOSED CHECKABLE RUNNABLE EXECUTED STAGED PUBLISHED REPRODUCED
Last checked
never run
Source
none — this record cites no check
Limit
PROPOSED. The phrase appears nowhere in the tree. Dijkstra–Scholten solved termination detection in 1980 and this chapter adds no algorithm; its only content is that silence must not be read as completion.
Next rung
in_tree — a detector in this tree that distinguishes quiescent from merely-silent, and a case where it refuses.
Why this page says PROPOSED — the derivation, not the word
  • ✗ a witness is named
  • ✗ its evidence kind is one the ledger already uses
  • ✗ the witness path resolves in this tree
  • ✗ its rung is in_tree or above
  • ✗ a run is recorded for these exact bytes
  • ✓ no claim is cited that could be REFUTED
  • ✗ a counterexample is shipped (required once WITNESSED)
  • ✗ not staged on this site, so it cannot run from the page

WITNESSED requires every line above to hold. The label is computed from them by build.mjs and cannot be typed into the registry — the build refuses a record that carries it.

Intent

A system whose carriers are all idle may hold loci with pending work above the floor (Dormant But Alive). Declaring it finished because no observed worker is busy is False Quiescence. Proven quiescence is a sweep that asks every locus whether it has admissible pending work and carries, beside its assertion, what it does not assert.

Technical register

PROPOSED — the phrase appears nowhere in the tree. Nearest relatives: REVISION_REGISTER.md R79.2, where CompletedScan was renamed CompletedSweep because a multi-page enumeration is not a point-in-time snapshot, and the artifact gained a doesNotAssert field; and Super's ordered-participant semantics, where a timeout abandons the request but not the work. Prior art: Dijkstra–Scholten termination detection.

Problem

'All workers idle' is the completion signal in most systems, and it is wrong whenever work can wait somewhere a worker is not looking: a mailbox, a queue, a suspended locus. The failure is silent by construction — the system reports done and stops looking.

Solution

Enumerate the loci, not the carriers. Ask each for admissible pending work. Record the sweep as a sweep with a doesNotAssert field. Repeat until a full sweep finds nothing and no admission happened during it. Only then say quiescent.

Real-world analogy

A librarian who checks that no reader is at a desk, versus one who walks every shelf for a book left out. Only the second can say the library is in order, and only for the shelves walked.

Structure — on the surface

compute surfaceslot 0slot 1slot 2slot 3L0L1L2L3L4L5Four slots, all empty. Six loci above them. Is the system quiet?

An illustration on a compute surface: loci above, carriers below. Press Play or Step; the takeaways collect as you go. Nothing here is evidence — the witness section is.

The chapter in WRL — and the chain so far

Chapter 17 of 32 — the fragment _patterns/wrl/chain/proven-quiescence.wrl, sealed alone by wrl.js

; PROVEN QUIESCENCE — its OWN clock domain: pq_clock fires ONCE at epoch 2 and is then done; the signal is
; still travelling through two relays and opens the Door later. The pulser's silence is not completion.
; pq_b is a router: chapter 18 draws from the quiescence chain's last relay.
[pulser:pq_clock](once at 2){sig_out}
[relay:pq_a]{sig_in, sig_out}
[relay:pq_b]{sig_in, sig_out}
[door:pq_done]{sig_in}

[pq_clock] --sig--> [pq_a]
[pq_a] --sig--> [pq_b]
[pq_b] --sig--> [pq_done]

module + bench seal to → sem-3f0d499f7e69fc20f10dad37ccb88861c6c007fa0f62a482b82ca7df42bcdf70

Run inputs — a ScenarioV1, the forge's own document, bound to this world's id and never part of it (D3) · ScenarioDigest scen-66ce95db624331b0364… (the run inputs' own identity, computed by the forge)

No claims: the world runs on its clocks alone for 6 epochs.

Reduced by the native reducer (ic32); the reference reducer reproduces every epoch's film hash (0.005s).

compute surfacesigsigsigpq_a · Relaypq_arelaypq_b · Relaypq_brelaypq_clock · Pulserpq_clockpulserpq_done · Doorpq_donedoorThis chapter's world alone, before epoch 1. Reduced by TRVM's forge in 0.007s; the forge's id equals the seal above.
The Film, epoch by epoch (6)

epoch 1 · sha256:cf79d117b114bc68aa9998e0ee7752ba8e6cebc98cd96ff34e351bf4a5881c72

FILM v0.7
t=1
pulser:pq_clock:mode=once,p=2,phase=2,armed=0,done=1,nf=-1
door:pq_done:open=0,next_open=0
relay:pq_a:cur_out=0,next_out=0
relay:pq_b:cur_out=0,next_out=0
wire:w__pq_a__pq_b:cur=0,nxt=0
wire:w__pq_b__pq_done:cur=0,nxt=0
wire:w__pq_clock__pq_a:cur=0,nxt=1
admit:policy=admit_candidate_min_firstreceipt_v1,fact_capacity_fault=0,receipt_capacity_fault=0,capacity_fault=0

epoch 2 · sha256:a0ab27b931f701a78cc9d9df86df494435730f0b6749a978813decfdef365d54

FILM v0.7
t=2
pulser:pq_clock:mode=once,p=2,phase=2,armed=0,done=1,nf=-1
door:pq_done:open=0,next_open=0
relay:pq_a:cur_out=0,next_out=1
relay:pq_b:cur_out=0,next_out=0
wire:w__pq_a__pq_b:cur=0,nxt=0
wire:w__pq_b__pq_done:cur=0,nxt=0
wire:w__pq_clock__pq_a:cur=1,nxt=0
admit:policy=admit_candidate_min_firstreceipt_v1,fact_capacity_fault=0,receipt_capacity_fault=0,capacity_fault=0

epoch 3 · sha256:ff28404f356bab99e9191d01429c8c137401939ef7303592aec6df2d2adc0f90

FILM v0.7
t=3
pulser:pq_clock:mode=once,p=2,phase=2,armed=0,done=1,nf=-1
door:pq_done:open=0,next_open=0
relay:pq_a:cur_out=1,next_out=0
relay:pq_b:cur_out=0,next_out=0
wire:w__pq_a__pq_b:cur=0,nxt=1
wire:w__pq_b__pq_done:cur=0,nxt=0
wire:w__pq_clock__pq_a:cur=0,nxt=0
admit:policy=admit_candidate_min_firstreceipt_v1,fact_capacity_fault=0,receipt_capacity_fault=0,capacity_fault=0

epoch 4 · sha256:3e70dbe48616d04edd236557540f30e74dc2ea21296209ae319bbb790a8ffc74

FILM v0.7
t=4
pulser:pq_clock:mode=once,p=2,phase=2,armed=0,done=1,nf=-1
door:pq_done:open=0,next_open=0
relay:pq_a:cur_out=0,next_out=0
relay:pq_b:cur_out=0,next_out=1
wire:w__pq_a__pq_b:cur=1,nxt=0
wire:w__pq_b__pq_done:cur=0,nxt=0
wire:w__pq_clock__pq_a:cur=0,nxt=0
admit:policy=admit_candidate_min_firstreceipt_v1,fact_capacity_fault=0,receipt_capacity_fault=0,capacity_fault=0

epoch 5 · sha256:e9d3e5fc8035278c918cf87af6ff2a3d72fa454df4381cc34c677029205601d4

FILM v0.7
t=5
pulser:pq_clock:mode=once,p=2,phase=2,armed=0,done=1,nf=-1
door:pq_done:open=0,next_open=0
relay:pq_a:cur_out=0,next_out=0
relay:pq_b:cur_out=1,next_out=0
wire:w__pq_a__pq_b:cur=0,nxt=0
wire:w__pq_b__pq_done:cur=0,nxt=1
wire:w__pq_clock__pq_a:cur=0,nxt=0
admit:policy=admit_candidate_min_firstreceipt_v1,fact_capacity_fault=0,receipt_capacity_fault=0,capacity_fault=0

epoch 6 · sha256:6eda6d235deecf38f70527506146d06ea0fd2672ff6590a148106b9e3fcb7846

FILM v0.7
t=6
pulser:pq_clock:mode=once,p=2,phase=2,armed=0,done=1,nf=-1
door:pq_done:open=0,next_open=1
relay:pq_a:cur_out=0,next_out=0
relay:pq_b:cur_out=0,next_out=0
wire:w__pq_a__pq_b:cur=0,nxt=0
wire:w__pq_b__pq_done:cur=1,nxt=0
wire:w__pq_clock__pq_a:cur=0,nxt=0
admit:policy=admit_candidate_min_firstreceipt_v1,fact_capacity_fault=0,receipt_capacity_fault=0,capacity_fault=0

Composes with the 16 chapters before it

The chain through this chapter — every earlier fragment, this one, and the links — seals to sem-ea73561d17a864cf51ea185b76f7b5e283453725acbd1aee01e8c073932f69f2: 66 objects, 60 edges (was 62 / 57; every earlier object and edge is still present — checked, or the build refuses).

How to read this board

Five kinds of object, two kinds of wire, and one band per Part of the book. Signal flows left to right: it starts at a clock, travels through relays, and ends at a door — or turns a spinner, which drives an orb. Nothing below is the book's own vocabulary; each line is quoted from where the definition lives.

shapeisand so
a clock; the only source of signalEvery signal on the board starts at one of these. Nothing else can make one.
a pass-through, so signal can travelOne arrives, any number leave — a relay that fans out is the board's router.
a sink; signal arrives and stopsIt latches what reached it and passes nothing on. A door is where a path ends.
rotation: takes signal, drives a poseThe only object on the board that holds a value a claim can rewrite — and only if its config says configurable.
the thing that gets movedIt is driven, never driving: an orb is what you watch to see whether anything happened.
not a WRL role — the book's own drawing of the receipts in the epoch's FilmIt counts what the run admitted, and turns red on a Rejected outcome.
SignalWiresignal: a sig_out to a sig_inLegal from a Pulser or Relay, into a Relay, Door or Spinner. This is how the board moves.
SocketControlcontrol: a socket to a poseLegal only from a Spinner into an Orb. At most one may land on any input port — fan-in is a typed refusal.

Hover any object for what it is, which chapter put it there, and every field of its line in that epoch's Film — split into what it is doing now and how it was built. Click to pin the readout, then click a wired name to follow the signal. The field definitions come from TRVM/forge/film.py (the emitter), TRVM/forge/forge_state.py (nf, derived from the decoded counter and never from t), TRVM/forge/lower_e2a.py (the commit/react law), TRVM/FORGE_SEMANTIC_IR_v1_MEASURE.md §1.3; the shapes from WRL/learn.html and WRL/docs/spec/README.md. The build refuses if a Film emits a field this key does not explain.

compute surfaceI · The LocusII · CompositionIII · Progressal_locus · Spinneral_locusspinneral_view · Orbal_vieworbal_world · Pulseral_worldpulsercb_fixed · Spinnercb_fixedspinnercb_gate · Doorcb_gatedoorcb_in · Relaycb_inrelaycb_view · Orbcb_vieworbcc_carrier · Doorcc_carrierdoorcc_grant · Relaycc_grantrelaycm_in · Relaycm_inrelaycm_locus0 · Doorcm_locus0doorcm_locus1 · Doorcm_locus1doorcm_locus2 · Doorcm_locus2doorcm_locus3 · Doorcm_locus3doorcm_slot0 · Relaycm_slot0relaycm_slot1 · Relaycm_slot1relaycm_slot2 · Relaycm_slot2relaycm_slot3 · Relaycm_slot3relayct_in · Relayct_inrelayct_locus · Spinnerct_locusspinnerct_view · Orbct_vieworbdb_clock · Pulserdb_clockpulserdb_locus · Spinnerdb_locusspinnerdb_view · Orbdb_vieworbis_id · Orbis_idorbis_in · Relayis_inrelayis_seal · Spinneris_sealspinnerlc_core · Relaylc_corerelaylc_locus · Spinnerlc_locusspinnerlc_machine · Relaylc_machinerelaylc_thread · Relaylc_threadrelaylc_view · Orblc_vieworbpj_artifact · Spinnerpj_artifactspinnerpj_in · Relaypj_inrelaypj_view_a · Orbpj_view_aorbpj_view_b · Orbpj_view_borbpp_homeA · Relaypp_homeArelaypp_homeB · Relaypp_homeBrelaypp_in · Relaypp_inrelaypp_locus · Spinnerpp_locusspinnerpp_view · Orbpp_vieworbpq_a · Relaypq_arelaypq_b · Relaypq_brelaypq_clock · Pulserpq_clockpulserpq_done · Doorpq_donedoorpu_admitted · Orbpu_admittedorbpu_busy · Pulserpu_busypulserpu_hop0 · Relaypu_hop0relaypu_hop1 · Relaypu_hop1relaypu_hop2 · Relaypu_hop2relaypu_locus · Spinnerpu_locusspinnerpu_progress · Pulserpu_progresspulserpu_sink · Doorpu_sinkdoorrb_record · Orbrb_recordorbrd_in · Relayrd_inrelayrd_real · Spinnerrd_realspinnerrd_view · Orbrd_vieworbrj_join · Doorrj_joindoorrj_r · Relayrj_rrelaysm_in · Relaysm_inrelaysm_inside · Spinnersm_insidespinnersm_outside_a · Orbsm_outside_aorbsm_outside_b · Orbsm_outside_borbso_in · Relayso_inrelayso_pose · Orbso_poseorbso_rotor · Spinnerso_rotorspinner

The board so far: one band per Part, signal flowing left to right; relays that fan out are routers, doors are switches, pulsers are clock domains. Hover an object — or click the board and walk it with the arrow keys — for its role, its Part and what it is wired to. This board is the chain’s sealed shape; no Film drives it, so it has no state to report, and the whole board in the conclusion is where every object’s state is read epoch by epoch. Wheel zooms · drag pans · double-click fits.

Syntax — quoted from the tree at build time

The nearest thing the tree already says (REVISION_REGISTER.md R79.2) REVISION_REGISTER.md:99

| R79.2 | **A completed sweep is not a point-in-time snapshot, and R79 said it was.** Cloudflare guarantees that an object-list operation *"will list all objects at that point in time"* — for ONE list operation. A whole-bucket enumeration is many, and no first-party source says page 1 at T₁ and page 500 at T₅₀₀ share a snapshot, so an object created behind the cursor need not appear in the sweep that passed it. `CompletedScan` implied otherwise by its name. Renamed **`CompletedSweep`**, asserting only *every provider page traversed through a verified cursor chain from beginning to normal termination*, with `doesNotAssert` stated as a field beside it. R79's recoverability is therefore **eventual, through repeated authoritative sweeps**, not one-pass reconstruction under concurrent mutation. `CLOUD_V1.md` §6.9 | 2026-08-24 | Cloudflare consistency page read first-party; the multi-page question is **unanswered by the docs** and case **N** measures it (quiesce the bucket, or repeat until the delta converges to zero) |

Forces

A sweep is not atomic: work can arrive behind it. So a sweep must say what it asserts (nothing was pending as of each locus's visit) and what it does not (that nothing arrived since), and a consumer must treat the second as the honest part. Two sweeps in a row with no arrivals between them is the usual proof shape.

Applicability

Shutdown, checkpointing, 'the migration is complete', end-of-turn for an agent runtime, any place a supervisor decides nothing is pending.

Transformations

Preserving
  • repeating the sweep
  • narrowing the claim to the loci actually visited
Refusing
  • inferring quiescence from carrier idleness
  • a snapshot presented as a sweep
  • dropping the doesNotAssert field

A refusing transformation is not one that is discouraged: it is one that, applied, makes the invariant above false. The word is the tree's, and it is the same word the join uses.

Consequences

'Is it done?' gets an answer with a scope. The name is the book's; the pieces are the tree's, and P1 would label a witness for it the day one exists.

Failure mode it answers

False Quiescence — Declaring completion because no currently observed worker has work. Paid for at: REVISION_REGISTER.md:99 (CompletedScan renamed CompletedSweep; doesNotAssert added)

Witness

No witness. This pattern is PROPOSED — the tree has no check for its invariant.

Counterexample

No counterexample shipped (required only when WITNESSED).

What to take away

  1. from the animationEvery slot was idle and two loci held pending work; a sweep found them, and only a second clean sweep proved quiet.
  2. from the syntaxA sweep carries a doesNotAssert field: what it could not have seen is stated beside what it saw.
  3. from the literatureDijkstra–Scholten (1980) proved termination for diffusing computations; the shape is the same.
  4. from the witnessPROPOSED: no witness. The label says so and nothing on this page argues otherwise.

Prior art — and what is not claimed

workrelationwhat it shareswhere it differs
Dijkstra–Scholten termination detection (1980)antecedentquiescence must be established, not observednone claimed; this is the canonical result
Misra's ring algorithmantecedenta second classical detection schemenone claimed
REVISION_REGISTER.md:99 — CompletedScan→CompletedSweep with a doesNotAssert fieldpartial overlapthe tree's nearest relative: a completion that states what it does not assertone rename in one lane, not a general rule

Novelty not claimed. Termination detection was solved in 1980. The phrase 'proven quiescence' appears nowhere in the tree and is PROPOSED by the book; the classical algorithms are the answer, and the pattern's only job is to stop silence being read as completion.

Relations with other patterns

Three-Valued Outcome STATED