OpenSentience.orgUnboxed PatternsChapter 7 of 32 · Composition

UP-007 · Composition · WITNESSED CHECKABLE RUNNABLE EXECUTED STAGED

Shared Observable

Every state variable that can determine the future must be in the observable bytes.

A canonical shared observable carries every state variable that can determine future behaviour within its declared domain; two states with different futures have different observable bytes.
Standing
WITNESSED CHECKABLE RUNNABLE EXECUTED STAGED PUBLISHED REPRODUCED
Last checked
2026-07-22 UTC
Source
TRVM/forge/FORGE_BINDING_RESULTS.md
Limit
Two standings stand unresolved. TRVM/LAWS.md:80 ratifies Law 6 for Film bytes; the frontier package finds it too strong lifted to arbitrary observables. Neither standing is a result about shared observables in general, and the scope axis between them is a hypothesis.
Next rung
live_local — A ruling on the scope axis — for which class of observables the law holds. Until that ruling the pattern cites a law it cannot fully claim.
Why this page says WITNESSED — the derivation, not the word
  • ✓ a witness is named
  • ✓ its evidence kind is one the ledger already uses (constructive_witness)
  • ✓ the witness path resolves in this tree
  • ✓ its rung is in_tree or above (in_tree)
  • ✓ 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

If two states can lead to different futures, their observable bytes must differ. Anything that changes a future transition while leaving the bytes alone is hidden state, and hidden state is the bug that every replay, every cache key and every 'it works on my machine' eventually finds.

Technical register

TRVM Law 6, ratified 2026-07-22, GLOBAL (no longer horizon-scoped): 'A canonical shared observable must carry every state variable that can determine future behavior; if two states can lead to different futures, their Film bytes must differ.' Witnesses in forge/FORGE_BINDING_RESULTS.md; enforced by binding_run3k.py and binding_run3h.py (hidden-state → Film divergence). In the frontier package it is adjudicated as the Markov / sufficient-statistic condition — known property, new name — and too strong when lifted to arbitrary observables, surviving there as the ADEQUACY/EQUIVARIANCE pair.

Problem

A rotor position, a receipt flag, a once-latch — each changed a future transition and none was in the Film. Replays diverged; the divergence was invisible in the bytes that were supposed to be the whole story. Three witnesses, then a law.

Solution

Enumerate the variables that can change a future transition. Put them in the observable, canonically. Write a witness that constructs two states differing only in a candidate variable and checks that the bytes differ. Scope the law to the observable it was ratified for; lifting it is a new claim.

Real-world analogy

A flight recorder that logs everything except the trim wheel. Two flights with identical recordings end differently, and the investigation cannot say why. Law 6 is the rule that the trim wheel goes in the recording.

Structure — on the surface

compute surfaceFilm v0.7 — the observable bytesstatestatefuture Afuture Afuture Bfuture BS₁rotor=0 · receipt=∅A state, the bytes it exposes, and the futures those bytes must be able to tell apart.

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 7 of 32 — the fragment _patterns/wrl/chain/shared-observable.wrl, sealed alone by wrl.js

; SHARED OBSERVABLE — the rotor determines the pose and is in the Film; a numeric fault on the orb is seeded
; as INITIAL runtime state and healed by ResetFault at epoch 3. so_in is the entry, fed by Part II's router.
[relay:so_in]{sig_in, sig_out}
[spinner:so_rotor](w=16, n=8, rotor=quarter_turn_z, configurable){sig_in, socket}
[orb:so_pose]{pose}

[so_in] --sig--> [so_rotor]
[so_rotor] --socket--> [so_pose]

Its test bench _patterns/wrl/chain/shared-observable.bench.wrl — drives the entry for this chapter's own film; never part of the chain

; TEST BENCH — drives this chapter's entry alone; the chain replaces it with a wire from an earlier chapter
[pulser:so_bench](every 1){sig_out}
[so_bench] --sig--> [so_in]

module + bench seal to → sem-b1c7c86b1852789452673cdaa06eb1f02cee6b99a52857776935b68d7fce306c

Run inputs — a ScenarioV1, the forge's own document, bound to this world's id and never part of it (D3) · initial numeric fault on so_pose · ScenarioDigest scen-3051b13b6cf8c9c6197… (the run inputs' own identity, computed by the forge)

epochwriter · seqoptargetrotorlabel
3w1 s1ResetFaultso_poseResetFault so_pose

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

compute surfacesigsigsocketso_bench · Pulserso_benchpulserso_in · Relayso_inrelayso_pose · Orbso_poseorbso_rotor · Spinnerso_rotorspinnerledger · receipts · Ledgerledger · receiptsno receiptsThis chapter's world alone, before epoch 1. Reduced by TRVM's forge in 2.338s; the forge's id equals the seal above.

Receipts in the last epoch's Film

receipt:w=1,s=1,accepted=c8,apkey=1.0.0.0.0.0,epoch=3,outcome=Applied
The Film, epoch by epoch (6)

epoch 1 · sha256:2a00d4a9a1196165a011f579f79670e0ebb3a501b03d8ec91d3ede051cea836d

FILM v0.7
t=1
spinner:so_rotor:policy=forge_motor_widemac_tz_sat_v1,quat4,w=16,n=8,rotor=00b5,0000,0000,00b5,socket=so_pose,config=configurable
orb:so_pose:policy=forge_motor_widemac_tz_sat_v1,quat4,w=16,n=8,pose=0100,0000,0000,0000,controller=so_rotor,fault=1
pulser:so_bench:mode=periodic,p=1,phase=0,armed=0,done=0,nf=1
relay:so_in:cur_out=0,next_out=1
wire:w__so_bench__so_in:cur=1,nxt=1
wire:w__so_in__so_rotor:cur=0,nxt=0
admit:policy=admit_candidate_min_firstreceipt_v1,fact_capacity_fault=0,receipt_capacity_fault=0,capacity_fault=0

epoch 2 · sha256:c91931f812e1b5c74bfe58f438d596add80c0eefa4c1a92bd4aeaaad03cbcbce

FILM v0.7
t=2
spinner:so_rotor:policy=forge_motor_widemac_tz_sat_v1,quat4,w=16,n=8,rotor=00b5,0000,0000,00b5,socket=so_pose,config=configurable
orb:so_pose:policy=forge_motor_widemac_tz_sat_v1,quat4,w=16,n=8,pose=0100,0000,0000,0000,controller=so_rotor,fault=1
pulser:so_bench:mode=periodic,p=1,phase=0,armed=0,done=0,nf=1
relay:so_in:cur_out=1,next_out=1
wire:w__so_bench__so_in:cur=1,nxt=1
wire:w__so_in__so_rotor:cur=0,nxt=1
admit:policy=admit_candidate_min_firstreceipt_v1,fact_capacity_fault=0,receipt_capacity_fault=0,capacity_fault=0

epoch 3 · sha256:e5dc331db749713da4088b6b0ace10f2d1e062ffff85b83aaec1fe92c270b3ea

FILM v0.7
t=3
spinner:so_rotor:policy=forge_motor_widemac_tz_sat_v1,quat4,w=16,n=8,rotor=00b5,0000,0000,00b5,socket=so_pose,config=configurable
orb:so_pose:policy=forge_motor_widemac_tz_sat_v1,quat4,w=16,n=8,pose=00b5,0000,0000,00b5,controller=so_rotor,fault=0
pulser:so_bench:mode=periodic,p=1,phase=0,armed=0,done=0,nf=1
relay:so_in:cur_out=1,next_out=1
wire:w__so_bench__so_in:cur=1,nxt=1
wire:w__so_in__so_rotor:cur=1,nxt=1
admit:policy=admit_candidate_min_firstreceipt_v1,fact_capacity_fault=0,receipt_capacity_fault=0,capacity_fault=0
claim:w=1,s=1,digest=c8,pkey=1.0.0.0.0.0,payload=ResetFault:so_pose
receipt:w=1,s=1,accepted=c8,apkey=1.0.0.0.0.0,epoch=3,outcome=Applied
recognition:w=1,s=1,state=unambiguous

epoch 4 · sha256:a7cc537b202901b33563a7122c4801c16526aa024d5cddf7bfcabc40220061da

FILM v0.7
t=4
spinner:so_rotor:policy=forge_motor_widemac_tz_sat_v1,quat4,w=16,n=8,rotor=00b5,0000,0000,00b5,socket=so_pose,config=configurable
orb:so_pose:policy=forge_motor_widemac_tz_sat_v1,quat4,w=16,n=8,pose=0000,0000,0000,00ff,controller=so_rotor,fault=0
pulser:so_bench:mode=periodic,p=1,phase=0,armed=0,done=0,nf=1
relay:so_in:cur_out=1,next_out=1
wire:w__so_bench__so_in:cur=1,nxt=1
wire:w__so_in__so_rotor:cur=1,nxt=1
admit:policy=admit_candidate_min_firstreceipt_v1,fact_capacity_fault=0,receipt_capacity_fault=0,capacity_fault=0
claim:w=1,s=1,digest=c8,pkey=1.0.0.0.0.0,payload=ResetFault:so_pose
receipt:w=1,s=1,accepted=c8,apkey=1.0.0.0.0.0,epoch=3,outcome=Applied
recognition:w=1,s=1,state=unambiguous

epoch 5 · sha256:6345e4424a1070b8d6bd34477862a535664d960f2593b0e55b2fc43cd482620e

FILM v0.7
t=5
spinner:so_rotor:policy=forge_motor_widemac_tz_sat_v1,quat4,w=16,n=8,rotor=00b5,0000,0000,00b5,socket=so_pose,config=configurable
orb:so_pose:policy=forge_motor_widemac_tz_sat_v1,quat4,w=16,n=8,pose=ff4c,0000,0000,00b4,controller=so_rotor,fault=0
pulser:so_bench:mode=periodic,p=1,phase=0,armed=0,done=0,nf=1
relay:so_in:cur_out=1,next_out=1
wire:w__so_bench__so_in:cur=1,nxt=1
wire:w__so_in__so_rotor:cur=1,nxt=1
admit:policy=admit_candidate_min_firstreceipt_v1,fact_capacity_fault=0,receipt_capacity_fault=0,capacity_fault=0
claim:w=1,s=1,digest=c8,pkey=1.0.0.0.0.0,payload=ResetFault:so_pose
receipt:w=1,s=1,accepted=c8,apkey=1.0.0.0.0.0,epoch=3,outcome=Applied
recognition:w=1,s=1,state=unambiguous

epoch 6 · sha256:eaa26e059946f32f1b71ce11201a6273a580c1d5f0011cd496eac77f27278062

FILM v0.7
t=6
spinner:so_rotor:policy=forge_motor_widemac_tz_sat_v1,quat4,w=16,n=8,rotor=00b5,0000,0000,00b5,socket=so_pose,config=configurable
orb:so_pose:policy=forge_motor_widemac_tz_sat_v1,quat4,w=16,n=8,pose=ff02,0000,0000,0000,controller=so_rotor,fault=0
pulser:so_bench:mode=periodic,p=1,phase=0,armed=0,done=0,nf=1
relay:so_in:cur_out=1,next_out=1
wire:w__so_bench__so_in:cur=1,nxt=1
wire:w__so_in__so_rotor:cur=1,nxt=1
admit:policy=admit_candidate_min_firstreceipt_v1,fact_capacity_fault=0,receipt_capacity_fault=0,capacity_fault=0
claim:w=1,s=1,digest=c8,pkey=1.0.0.0.0.0,payload=ResetFault:so_pose
receipt:w=1,s=1,accepted=c8,apkey=1.0.0.0.0.0,epoch=3,outcome=Applied
recognition:w=1,s=1,state=unambiguous

Composes with the 6 chapters before it

The chain through this chapter — every earlier fragment, this one, and the links — seals to sem-1a5ac07a8ea810364e675b1fd04231d08d04f3b10272e7a697ac74eb6a69d5b5: 20 objects, 19 edges (was 17 / 16; every earlier object and edge is still present — checked, or the build refuses).

Links only the chain carries

[rj_r] --sig--> [so_in]
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 · Compositional_locus · Spinneral_locusspinneral_view · Orbal_vieworbal_world · Pulseral_worldpulserct_in · Relayct_inrelayct_locus · Spinnerct_locusspinnerct_view · Orbct_vieworbis_id · Orbis_idorbis_in · Relayis_inrelayis_seal · Spinneris_sealspinnerlc_core · Relaylc_corerelaylc_locus · Spinnerlc_locusspinnerlc_machine · Relaylc_machinerelaylc_thread · Relaylc_threadrelaylc_view · Orblc_vieworbrb_record · Orbrb_recordorbrj_join · Doorrj_joindoorrj_r · Relayrj_rrelayso_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

Law 6, verbatim (TRVM/LAWS.md) TRVM/LAWS.md:81

- **Statement:** *A canonical shared observable must carry every state variable
  that can determine future behavior; if two states can lead to different
  futures, their Film bytes must differ.* This unifies all surviving witnesses:

The enforcing witness in the forge binding run TRVM/forge/binding_run3k.py:313

    # ---- 16) Law 6 witness: receipt state -> Film v0.7 divergence
    E = mk_claim(11, 1, setA)
    stateA = init_claimstate()                         # no receipt for E

Forces

Carrying every variable is the easy reading and the wrong one: byte-level variables break convergence, so the frontier package demotes the naked statement to P1 and pairs it with equivariance. The honest form is scoped: for this observable, in this domain, these are the variables that determine the future. Two lanes hold two standings for exactly this reason, and neither cites the other.

Applicability

Any system with a replay, a cache, a memoization key or a canonical serialization. Law 23 in the same file is the memoization corollary: the key must include every dimension the generator ranges over.

Transformations

Preserving
  • adding a variable to the observable when a witness shows it determines a future
  • quotienting the observable by an equivariance that provably does not change futures
Refusing
  • a variable outside the observable that changes a future transition (Invisible State)
  • lifting the law to another observable without its own witness
  • treating two lanes' standings as one

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

Replay becomes exact and cache keys become correct, because the bytes are sufficient. The methodological consequence is the one this page is honest about: a law carries its domain.

Failure mode it answers

Invisible State — Allowing state that affects future behaviour to remain outside the shared observable. Paid for at: TRVM/LAWS.md:80 (Law 6 witnesses: rotor, receipt, once-latch)

Witness

Source identity: TRVM/forge/FORGE_BINDING_RESULTS.md · shape receipt · evidence kind constructive_witness · rung in_tree (TRVM/LAWS.md:80-95 Law 6 witnesses list)

Execution identity: 2026-07-22 — the witness is itself an execution record

Not staged on this site: the page cannot run this witness. Its shape (receipt) is a document, not a run.

Counterexample

TRVM/forge/binding_run3k.py — marker Law 6, expected REFUSED.

A marker, not a resolved law. The build checked that this string is present in the file, and it occurs there 3 times, so it does not pick out one place. A string being present proves the file mentions it, not that the file refuses anything — this record cites no law id that could be resolved against a suite index. It is the weaker of the two forms this catalog uses.

What to take away

  1. from the animationSame bytes, different futures: that is the whole violation, and the witness names the hidden variable.
  2. from the syntaxThe law is stated for Film bytes; 'GLOBAL' means no longer horizon-scoped, not 'true of every observable'.
  3. from the literatureNerode's quotient and the sufficient-statistic condition are the prior art; the frontier package says so and demotes the naked law to P1.
  4. from the witnessThe witness is a results document from the forge; this page cannot re-run it, and the two lanes' standings are reported side by side.

Prior art — and what is not claimed

workrelationwhat it shareswhere it differs
Nerode quotient; PSR sufficient statisticantecedentthe minimal state that determines future behaviournone that has been established — invariant-r10/package-v2.8/v1-provenance/00_EXECUTIVE_FINDINGS.md:45 records it as 'known property, new name; P1'
Markov conditionclose analoguethe present screens the future from the paststated over probability; here over observable state at a boundary

Novelty not claimed. The tree has already demoted this to P1 as a renaming. Two standings stand unresolved: TRVM/LAWS.md:80 ratifies Law 6 for Film bytes ('GLOBAL' = not horizon-scoped), and the frontier package finds it too strong lifted to arbitrary observables. The axis is scope, and it is a hypothesis.

Realizations in the tree

Relations with other patterns

Projection, Not Duplication WITNESSED · Semantic Membrane PROPOSED