OpenSentience.orgUnboxed PatternsChapter 22 of 32 · Persistence and World

UP-022 · Persistence and World · WITNESSED CHECKABLE RUNNABLE EXECUTED STAGED

Meaning Is a Hash

The meaning of a WRL world is its SemanticArtifactID.

The semantics of a WRL world is its SemanticArtifactID; a change of meaning is a change of hash and a preserved hash is a preserved meaning on every host, forever.
Standing
WITNESSED CHECKABLE RUNNABLE EXECUTED STAGED PUBLISHED REPRODUCED
Last checked
2026-09-11 15:25:45 UTC
Source
WRL/test/conformance.mjs @ 32160fec77a1 · bytes e1f1e313eefe0001…
Limit
Unison, IPFS and Nix are direct prior art and the hashing is not the contribution. What the build establishes is that this tree's seal is stable under comment changes and moves under a topology change — one property of one sealer.
Next rung
live_local — sealWorld exposed to the page, so a reader supplies source and watches the id move under a topology change and hold under a comment change. The build does this 33 times; nothing yet lets the page do it once.
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

A WRL program is a network of durable identities joined by textured routes and separated by boundaries, and the whole network is one content address. Change the meaning and the hash changes; keep the hash and the meaning is kept, on every host, forever. There is no version flag beside it to consult.

Technical register

WallRiderLang Core 0.1.2: 'an executable topology language whose meaning is a hash'. wrl.js is the browser identity spine that seals real sem- ids; the starter world seals to sem-67e954cf…; test/conformance.mjs pins the fixtures (924 checks, 0 failed at the last run). Committed projection vectors round-trip byte-exact through TRVM Forge's independent Python spine.

Problem

Meaning lives in prose and version numbers, both of which are asserted rather than computed. Two implementations disagree about what a document means and there is nothing either can recompute to settle it.

Solution

Specify the canonical form. Seal it. Pin fixtures. Put the sealed id on the wire and let receivers recompute it (Refusable Divergence). Run a second implementation in a second language against the same vectors.

Real-world analogy

A recipe written so precisely that any two kitchens produce the same dish, and the dish's name is a fingerprint of the recipe. Change the salt and it is, by name, a different dish.

Structure — on the surface

compute surfacecanonical formWRL sourceWRL sourcehost Ahost Ahost Bhost BW4 objects · 3 routesWRL source, its canonical form, and two hosts that each compute what it means.

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 22 of 32 — the fragment _patterns/wrl/chain/meaning-is-a-hash.wrl, sealed alone by wrl.js

; MEANING IS A HASH — its OWN clock domain and a door; the variant beside this changes `every 3` to `every 4`
; and seals to a different id. There is no version number to consult.
[pulser:mh_clock](every 3){sig_out}
[door:mh_gate]{sig_in}

[mh_clock] --sig--> [mh_gate]

module + bench seal to → sem-c66fd7afc7b435c992b6439068982a95ee11777c2dd38ece148efeed76c71565

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

compute surfacesigmh_clock · Pulsermh_clockpulsermh_gate · Doormh_gatedoorThis chapter's world alone, before epoch 1. Reduced by TRVM's forge in 0.004s; the forge's id equals the seal above.
The Film, epoch by epoch (4)

epoch 1 · sha256:c008a436c9f531e14ad39a94ab227703c13c8500c32a1ed52439d6241e33ca79

FILM v0.7
t=1
pulser:mh_clock:mode=periodic,p=3,phase=0,armed=0,done=0,nf=1
door:mh_gate:open=0,next_open=0
wire:w__mh_clock__mh_gate: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:67e2eadffb17349b29ffa6bcfab9b3958e72de14c0f841552559d24a761705a4

FILM v0.7
t=2
pulser:mh_clock:mode=periodic,p=3,phase=0,armed=0,done=0,nf=3
door:mh_gate:open=0,next_open=0
wire:w__mh_clock__mh_gate: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:c669196417097ec9ccdfe7a7c7de0ed8ba35c1f1f75f18480a24b59d41354d9b

FILM v0.7
t=3
pulser:mh_clock:mode=periodic,p=3,phase=0,armed=0,done=0,nf=2
door:mh_gate:open=0,next_open=1
wire:w__mh_clock__mh_gate:cur=1,nxt=0
admit:policy=admit_candidate_min_firstreceipt_v1,fact_capacity_fault=0,receipt_capacity_fault=0,capacity_fault=0

epoch 4 · sha256:f373f3ad2d7ba1e4d809587fb65efe8c7a0d7fc31397456c610de7a1e002f892

FILM v0.7
t=4
pulser:mh_clock:mode=periodic,p=3,phase=0,armed=0,done=0,nf=1
door:mh_gate:open=1,next_open=0
wire:w__mh_clock__mh_gate:cur=0,nxt=0
admit:policy=admit_candidate_min_firstreceipt_v1,fact_capacity_fault=0,receipt_capacity_fault=0,capacity_fault=0

A variant beside it _patterns/wrl/meaning-is-a-hash.variant.wrl

profile forge.world.core.v1

; the same world with one period changed — a different meaning, a different id
[pulser:p0](every 3){sig_out}
[relay:r0]{sig_in, sig_out}
[spinner:sp](w=16, n=8, rotor=quarter_turn_z, configurable){sig_in, socket}
[orb:ob]{pose}

[p0] --sig--> [r0]
[r0] --sig--> [sp]
[sp] --socket--> [ob]

sem-4b46880e9a7ebe17586dfa39c6d05c7e83674182e21a6d6202369f9b0300ab80

Composes with the 21 chapters before it

The chain through this chapter — every earlier fragment, this one, and the links — seals to sem-c592c564b68bf8e458d01477c65cdff547d1b367f30ce5c484fc956773c4e0f1: 78 objects, 69 edges (was 76 / 68; 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 · ProgressIV · Persistence and Worldal_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_vieworbmh_clock · Pulsermh_clockpulsermh_gate · Doormh_gatedoorop_clock · Pulserop_clockpulserop_locus · Spinnerop_locusspinnerop_view · Orbop_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_rotorspinnerts_root · Doorts_rootdoorts_version · Pulserts_versionpulsertv_a · Orbtv_aorbtv_b · Orbtv_borbtv_fixed · Spinnertv_fixedspinnertv_in · Relaytv_inrelaytv_open · Spinnertv_openspinner

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

WRL in one sentence (WRL/README.md) WRL/README.md:3

**An executable topology language whose meaning is a hash.**

The world that seals to sem-67e954cf… WRL/README.md:16

profile forge.world.core.v1

[pulser:p0](every 2){sig_out}
[relay:r0]{sig_in, sig_out}
[spinner:sp](w=16, n=8, rotor=quarter_turn_z, configurable){sig_in, socket}
[orb:ob]{pose}

[p0] --sig--> [r0]
[r0] --sig--> [sp]
[sp] --socket--> [ob]

Forces

A hash of the source is not enough — whitespace is not meaning — so a canonical form has to be defined and both implementations have to produce it identically. The cost is a canonicalizer as carefully specified as the language; the benefit is that cross-implementation agreement becomes a vector file rather than a meeting.

Applicability

Any language or format whose documents must mean the same thing in two places: world descriptions, manifests, contracts, projections.

Transformations

Preserving
  • re-serializing the source (same canonical form, same id)
  • adding an implementation that reproduces the same ids
  • editing the world — which makes a new world
Refusing
  • a version flag standing in for the id
  • an id assigned by a registry rather than derived
  • two implementations that disagree without one of them refusing

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

Meaning becomes portable and checkable. Unison did this for functions and Nix for packages; the prior-art field credits both, because the contribution here is the executable topology and the refusal names, not the hashing.

Failure mode it answers

Replica Theater — Calling independent mutable copies 'the same thing'. Paid for at: CLAUDE.md: the served box-and-box copy is a MANUAL COPY and nothing syncs it

Witness

Source identity: WRL/test/conformance.mjs · shape side-effect · evidence kind constructive_witness · rung in_tree (WRL/README.md: the starter world seals to sem-67e954cf… on every host)

Execution identity: 2026-09-11T15:25:45.285Z on PX13 · bytes e1f1e313eefe0001… · repo HEAD 32160fec77a1

Not staged on this site: the page cannot run this witness. It runs from the command line: node test/conformance.mjs in WRL.

Counterexample

Fixture WRL/test/projection-negative-vectors.json: 15 vectors, each expected REFUSED.

What to take away

  1. from the animationTwo hosts computed the same id from the same canonical form, and a different one after a single edit.
  2. from the syntaxNine lines of source are the whole world; the sem- id below them is its meaning.
  3. from the literatureUnison identifies every definition by the hash of its syntax tree; IPFS and Nix by content. Direct prior art, credited.
  4. from the witness924 conformance checks ran today under a receipt; the suite is not staged on this page and the page says so.

Prior art — and what is not claimed

workrelationwhat it shareswhere it differs
Unison (content-addressed definitions)antecedentthe identity of a meaning is the hash of its structurenone at the level of the idea
IPFS; Nixantecedentcontent addressing at the storage and build layersthese address bytes and build inputs; the seal here addresses a semantic topology

Novelty not claimed. The hashing is not the contribution and this page says so twice. What the tree adds is an executable topology and a fixed set of refusal names — and only the first of those is witnessed.

Realizations in the tree

Relations with other patterns

Confidentiality Under Content Addressing STATED · Exact Replay STATED · Identity Is a Seal WITNESSED · Refusable Divergence WITNESSED

A marks a relation named on the other page. Relations are symmetric here and the reverse is derived, so neither side can go missing by being written once.

← World BoundaryPersistence and WorldExact Replay →Persistence and World