Wave 5 · Review and seal · record #36domain.factcell.reviewed
#36 · the decision
CellSpace seals the Cell and writes its seal (#37) and its export (#38).
Came froma personA person gave it at the door, after reading the assessment: the only thing a person adds in this wave. step 201
when it came in at the door
201Record #36 enters the logLOG · append
a wave is settlingengine: next: #36membrane: waiting at #36
The log - #0a listener
- #1a doer
- #2listener: the charter
- #3doer: the author
- #4listener: charter seen
- #5listener: blueprint seen
- #6doer: the planner
- #7listener: assess · charter
- #8listener: assess · result
- #9doer: the evaluator
- #10the charter wanted
- #11the blueprint
- #12readiness
- #13readiness
- #14a request: a charter
- #15the charter proposed
- #16the charter defined
- #17readiness
- #18readiness
- #19a request: a Cell
- #20the seed
- #21the Cell is open
- #22inner listener
- #23inner doer
- #24the Cell's context
- #25return listener
- #26return doer
- #27the return address
- #28the person's words
- #29readiness
- #30the private result
- #31the result, marked
- #32readiness
- #33a request: assess
- #34assessment proposed
- #35the Cell assessed
- #36the decisionnew
- end of the log
The log What before after records in the log 36 37 #36 — the decision · cell.reviewedThe door adds the decision as #36:
cell.reviewed, accept — who decided is stamped by the door, never typed.Where it happens
appendEmissions()Vol. 02 §4.1 · Vol. 03 §1The only function that adds records to the log. Each new record gets the next free number, at the end.
- Specification
- Vol. 02 §4.1 · Vol. 03 §1
- Code
appendEmissions()incore/registers/append-emissions.ts, line 14: the new record gets the next free number- Journal
LOG · append· offset: 36, kind: domain.fact · by engine- Picture
- records in the log: 36 → 37
core/registers/append-emissions.ts· build 043cc8b// The one LOG writer (Vol. 02 §4.1, Vol. 03 §1): emissions become tuples by// receiving the next dense absolute offset — `base + window.length` — and// nothing else ever grows the log. Each append is journalled under the// ambient context, so a batch born of a propagated tuple carries that// tuple's offset as its cause — the cube's provenance line (ADR-002).import type { WaveEmission, WaveTuple } from "../wave/gate";import type { RegisterFile } from "./register-file";import { recordTransition } from "./record-transition";export function appendEmissions(file: RegisterFile, emissions: readonly WaveEmission[]): void {const engine = file.registers.engine;for (const emission of emissions) {const tuple: WaveTuple = { ...emission, offset: engine.base + engine.window.length };↑ the new record gets the next free numberengine.window.push(tuple);↑ it is added at the end of the logrecordTransition(file, "engine", "LOG", "append", {↑ the change is written into the journaloffset: tuple.offset,kind: tuple.kind});}}
AGPL-3.0-onlyThe Lab's demonstration environment, as this fragment ran it (build 043cc8b). The code may change, and may differ from the code of a working machine.
Nest VM core, incubated in the CoAgnes garden · build 043cc8b (2026-09-21) · this file last changed in f36e70d (2026-08-18)
when the engine took #36
202The engine takes #36ENGINE.CURSOR · propagate
a wave is settlingengine: working on #36membrane: waiting at #36
The log - #0a listener
- #1a doer
- #2listener: the charter
- #3doer: the author
- #4listener: charter seen
- #5listener: blueprint seen
- #6doer: the planner
- #7listener: assess · charter
- #8listener: assess · result
- #9doer: the evaluator
- #10the charter wanted
- #11the blueprint
- #12readiness
- #13readiness
- #14a request: a charter
- #15the charter proposed
- #16the charter defined
- #17readiness
- #18readiness
- #19a request: a Cell
- #20the seed
- #21the Cell is open
- #22inner listener
- #23inner doer
- #24the Cell's context
- #25return listener
- #26return doer
- #27the return address
- #28the person's words
- #29readiness
- #30the private result
- #31the result, marked
- #32readiness
- #33a request: assess
- #34assessment proposed
- #35the Cell assessed
- #36the decision
- end of the log
The engine What before after pointer — the next record to take #36 #37 The engine's pointer moves past #36, the person's decision.
Where it happens
takeNextTuple()Vol. 02 §4.1The engine's step: take the record under its pointer and move the pointer on — or stop, if the pointer has reached the end.
- Specification
- Vol. 02 §4.1
- Code
takeNextTuple()incore/registers/take-next-tuple.ts, line 15: at the end of the log, the engine stops- Journal
- #36 ·
ENGINE.CURSOR · propagate· offset: 36 · by engine - Picture
- pointer — the next record to take: #36 → #37
core/registers/take-next-tuple.ts· build 043cc8b// ENGINE.CURSOR advance (Vol. 02 §4.1) — the machine's instruction pointer:// returns the tuple at the cursor and moves it forward exactly once, or null// at quiescence. Advancing IS the context switch: the ambient wave context// moves to the propagated tuple in the same movement, so every transition// journalled during its propagation is attributed to it — the cube's spine.// The cursor never rewinds.import type { WaveTuple } from "../wave/gate";import type { RegisterFile } from "./register-file";import { recordTransition } from "./record-transition";import { setDriver, setWaveContext } from "./set-wave-context";export function takeNextTuple(file: RegisterFile): WaveTuple | null {const engine = file.registers.engine;if (engine.cursor >= engine.base + engine.window.length) return null;↑ at the end of the log, the engine stopsconst tuple = engine.window[engine.cursor - engine.base];engine.cursor += 1;↑ the engine's pointer moves on by onesetWaveContext(file, { offset: tuple.offset, phase: "propagate" });setDriver(file, "engine");recordTransition(file, "engine", "ENGINE.CURSOR", "propagate", { offset: tuple.offset });↑ the change is written into the journalreturn tuple;}
AGPL-3.0-onlyThe Lab's demonstration environment, as this fragment ran it (build 043cc8b). The code may change, and may differ from the code of a working machine.
Nest VM core, incubated in the CoAgnes garden · build 043cc8b (2026-09-21) · this file last changed in 6730f58 (2026-09-13)
203The Cell is sealedCELL.STATE · close-sealed
a wave is settlingengine: working on #36membrane: waiting at #36
The log - #0a listener
- #1a doer
- #2listener: the charter
- #3doer: the author
- #4listener: charter seen
- #5listener: blueprint seen
- #6doer: the planner
- #7listener: assess · charter
- #8listener: assess · result
- #9doer: the evaluator
- #10the charter wanted
- #11the blueprint
- #12readiness
- #13readiness
- #14a request: a charter
- #15the charter proposed
- #16the charter defined
- #17readiness
- #18readiness
- #19a request: a Cell
- #20the seed
- #21the Cell is open
- #22inner listener
- #23inner doer
- #24the Cell's context
- #25return listener
- #26return doer
- #27the return address
- #28the person's words
- #29readiness
- #30the private result
- #31the result, marked
- #32readiness
- #33a request: assess
- #34assessment proposed
- #35the Cell assessed
- #36the decision
- end of the log
cellspace/cell:cell@20 What before after state “ready_for_review” “sealed” CellSpace acts on the decision at once: the Cell's state is closed as sealed, by the review at #36. Nothing inside it will move again.
Where it happens
closeCell()Vol. 12 §5.5 · Vol. 12 §8Closes a Cell for good — sealed, archived or failed. Nothing inside it moves again.
- Specification
- Vol. 12 §5.5 · Vol. 12 §8
- Code
closeCell()incore/registers/close-cell.ts, line 16: the Cell's last state- Journal
- #36 ·
CELL.STATE · close-sealed· reviewOffset: 36 · by cellspace - Picture
- state: “ready_for_review” → “sealed”
core/registers/close-cell.ts· build 043cc8b// Terminal Cell transitions (Vol. 12 §5.5, §8): `sealed` and `archived` are// committed human review outcomes; `failed` is the effect policy's one// honest closure. Only the first valid terminal stands — the station guards// the preconditions, this op is the movement.import type { CellRegisters } from "./cell-registers";import type { RegisterFile } from "./register-file";import { recordTransition } from "./record-transition";export function closeCell(file: RegisterFile,cell: CellRegisters,terminal: "sealed" | "archived" | "failed",detail?: unknown): void {cell.state = terminal;↑ the Cell's last staterecordTransition(file, `cellspace/cell:${cell.cellRef}`, "CELL.STATE", `close-${terminal}`, detail);↑ the change is written into the journal}
AGPL-3.0-onlyThe Lab's demonstration environment, as this fragment ran it (build 043cc8b). The code may change, and may differ from the code of a working machine.
Nest VM core, incubated in the CoAgnes garden · build 043cc8b (2026-09-21) · this file last changed in f36e70d (2026-08-18)
204The seal enters the log as #37LOG · append
a wave is settlingengine: working on #36membrane: waiting at #36
The log - #0a listener
- #1a doer
- #2listener: the charter
- #3doer: the author
- #4listener: charter seen
- #5listener: blueprint seen
- #6doer: the planner
- #7listener: assess · charter
- #8listener: assess · result
- #9doer: the evaluator
- #10the charter wanted
- #11the blueprint
- #12readiness
- #13readiness
- #14a request: a charter
- #15the charter proposed
- #16the charter defined
- #17readiness
- #18readiness
- #19a request: a Cell
- #20the seed
- #21the Cell is open
- #22inner listener
- #23inner doer
- #24the Cell's context
- #25return listener
- #26return doer
- #27the return address
- #28the person's words
- #29readiness
- #30the private result
- #31the result, marked
- #32readiness
- #33a request: assess
- #34assessment proposed
- #35the Cell assessed
- #36the decision
- #37the Cell sealednew
- end of the log
The log What before after records in the log 37 38 #37 — the Cell sealed · cell.sealedThe public mark of the closing,
cell.sealed, naming the assessment and the review it rests on, is written as #37.Where it happens
appendEmissions()Vol. 02 §4.1 · Vol. 03 §1The only function that adds records to the log. Each new record gets the next free number, at the end.
- Specification
- Vol. 02 §4.1 · Vol. 03 §1
- Code
appendEmissions()incore/registers/append-emissions.ts, line 14: the new record gets the next free number- Journal
- #36 ·
LOG · append· offset: 37, kind: domain.fact · by engine - Picture
- records in the log: 37 → 38
core/registers/append-emissions.ts· build 043cc8b// The one LOG writer (Vol. 02 §4.1, Vol. 03 §1): emissions become tuples by// receiving the next dense absolute offset — `base + window.length` — and// nothing else ever grows the log. Each append is journalled under the// ambient context, so a batch born of a propagated tuple carries that// tuple's offset as its cause — the cube's provenance line (ADR-002).import type { WaveEmission, WaveTuple } from "../wave/gate";import type { RegisterFile } from "./register-file";import { recordTransition } from "./record-transition";export function appendEmissions(file: RegisterFile, emissions: readonly WaveEmission[]): void {const engine = file.registers.engine;for (const emission of emissions) {const tuple: WaveTuple = { ...emission, offset: engine.base + engine.window.length };↑ the new record gets the next free numberengine.window.push(tuple);↑ it is added at the end of the logrecordTransition(file, "engine", "LOG", "append", {↑ the change is written into the journaloffset: tuple.offset,kind: tuple.kind});}}
AGPL-3.0-onlyThe Lab's demonstration environment, as this fragment ran it (build 043cc8b). The code may change, and may differ from the code of a working machine.
Nest VM core, incubated in the CoAgnes garden · build 043cc8b (2026-09-21) · this file last changed in f36e70d (2026-08-18)
205The export enters the log as #38LOG · append
a wave is settlingengine: working on #36membrane: waiting at #36
The log - #0a listener
- #1a doer
- #2listener: the charter
- #3doer: the author
- #4listener: charter seen
- #5listener: blueprint seen
- #6doer: the planner
- #7listener: assess · charter
- #8listener: assess · result
- #9doer: the evaluator
- #10the charter wanted
- #11the blueprint
- #12readiness
- #13readiness
- #14a request: a charter
- #15the charter proposed
- #16the charter defined
- #17readiness
- #18readiness
- #19a request: a Cell
- #20the seed
- #21the Cell is open
- #22inner listener
- #23inner doer
- #24the Cell's context
- #25return listener
- #26return doer
- #27the return address
- #28the person's words
- #29readiness
- #30the private result
- #31the result, marked
- #32readiness
- #33a request: assess
- #34assessment proposed
- #35the Cell assessed
- #36the decision
- #37the Cell sealed
- #38the exportnew
- end of the log
The log What before after records in the log 38 39 #38 — the export · knowledge.l1.acceptedThen the export, #38: the Cell's result, now trusted, as
knowledge.l1.accepted— with the charter, the assessment and the review it rests on. The only fact of the Cell root may act on.Where it happens
appendEmissions()Vol. 02 §4.1 · Vol. 03 §1The only function that adds records to the log. Each new record gets the next free number, at the end.
- Specification
- Vol. 02 §4.1 · Vol. 03 §1
- Code
appendEmissions()incore/registers/append-emissions.ts, line 14: the new record gets the next free number- Journal
- #36 ·
LOG · append· offset: 38, kind: domain.fact · by engine - Picture
- records in the log: 38 → 39
core/registers/append-emissions.ts· build 043cc8b// The one LOG writer (Vol. 02 §4.1, Vol. 03 §1): emissions become tuples by// receiving the next dense absolute offset — `base + window.length` — and// nothing else ever grows the log. Each append is journalled under the// ambient context, so a batch born of a propagated tuple carries that// tuple's offset as its cause — the cube's provenance line (ADR-002).import type { WaveEmission, WaveTuple } from "../wave/gate";import type { RegisterFile } from "./register-file";import { recordTransition } from "./record-transition";export function appendEmissions(file: RegisterFile, emissions: readonly WaveEmission[]): void {const engine = file.registers.engine;for (const emission of emissions) {const tuple: WaveTuple = { ...emission, offset: engine.base + engine.window.length };↑ the new record gets the next free numberengine.window.push(tuple);↑ it is added at the end of the logrecordTransition(file, "engine", "LOG", "append", {↑ the change is written into the journaloffset: tuple.offset,kind: tuple.kind});}}
AGPL-3.0-onlyThe Lab's demonstration environment, as this fragment ran it (build 043cc8b). The code may change, and may differ from the code of a working machine.
Nest VM core, incubated in the CoAgnes garden · build 043cc8b (2026-09-21) · this file last changed in f36e70d (2026-08-18)
when the membrane passed #36
214The membrane passes #36MEMBRANE.CURSOR · sweep
a wave is settlingengine: at the endmembrane: passing #36
The log - #0a listener
- #1a doer
- #2listener: the charter
- #3doer: the author
- #4listener: charter seen
- #5listener: blueprint seen
- #6doer: the planner
- #7listener: assess · charter
- #8listener: assess · result
- #9doer: the evaluator
- #10the charter wanted
- #11the blueprint
- #12readiness
- #13readiness
- #14a request: a charter
- #15the charter proposed
- #16the charter defined
- #17readiness
- #18readiness
- #19a request: a Cell
- #20the seed
- #21the Cell is open
- #22inner listener
- #23inner doer
- #24the Cell's context
- #25return listener
- #26return doer
- #27the return address
- #28the person's words
- #29readiness
- #30the private result
- #31the result, marked
- #32readiness
- #33a request: assess
- #34assessment proposed
- #35the Cell assessed
- #36the decision
- #37the Cell sealed
- #38the export
- #39readiness
- #40a request: present again
- end of the log
The membrane What before after pointer — the next record to pass #36 #37 #36 asks nothing of the world, so the membrane's pointer simply moves on.
Where it happens
sweepNextTuple()Vol. 02 §4.6 · Vol. 07 §3The membrane's step: pass over the record under its pointer and move the pointer on — exactly once per record.
- Specification
- Vol. 02 §4.6 · Vol. 07 §3
- Code
sweepNextTuple()incore/registers/sweep-next-tuple.ts, line 16: the membrane's pointer moves on by one- Journal
- #36 ·
MEMBRANE.CURSOR · sweep· offset: 36 · by membrane - Picture
- pointer — the next record to pass: #36 → #37
core/registers/sweep-next-tuple.ts· build 043cc8b// MEMBRANE.CURSOR advance (Vol. 02 §4.6, Vol. 07 §3): the membrane's own// reading of the one log — the second reception of one publication, never a// second truth. The cursor advances exactly once per offset per machine:// the exactly-once discharge guarantee lives in this movement.import type { WaveTuple } from "../wave/gate";import type { RegisterFile } from "./register-file";import { recordTransition } from "./record-transition";import { setDriver, setWaveContext } from "./set-wave-context";export function sweepNextTuple(file: RegisterFile): WaveTuple | null {const engine = file.registers.engine;const membrane = file.registers.membrane;if (membrane.cursor >= engine.base + engine.window.length) return null;const tuple = engine.window[membrane.cursor - engine.base];membrane.cursor += 1;↑ the membrane's pointer moves on by onesetWaveContext(file, { offset: tuple.offset, phase: "sweep" });setDriver(file, "membrane");recordTransition(file, "membrane", "MEMBRANE.CURSOR", "sweep", { offset: tuple.offset });↑ the change is written into the journalreturn tuple;}
AGPL-3.0-onlyThe Lab's demonstration environment, as this fragment ran it (build 043cc8b). The code may change, and may differ from the code of a working machine.
Nest VM core, incubated in the CoAgnes garden · build 043cc8b (2026-09-21) · this file last changed in 6730f58 (2026-09-13)
Choose a step in the stack — or press →.
A fact: the person's decision
A person's judgement, committed like any other fact — accept, revise or archive. The machine acts on it exactly once.
#36domain.factcell.reviewed a person
| envelope | |
|---|---|
offset | 36Its place in the log — the only address a record has. The engine gives it when the record is added, the next free number, and it never changes. |
kind | domain.factWhich of the four kinds of record the machine knows. The kind decides what the payload holds. |
key | fragment-one-cellThis session's lane. |
| payload | |
factType | cell.reviewedThe fact type — cell.reviewed. |
| payload.data | |
cellRef | cell@20The Cell reviewed. |
decision | acceptAccept: the Cell is sealed and its result becomes an export. |
actor | authorWho decided — stamped by the door, never typed. |
end · #36
In the specificationVol. 03 §1Vol. 03 §5Vol. 07 §6Vol. 12 §5.5
Names it shares with other records
The record as the machine keeps it
{
"offset": 36,
"kind": "domain.fact",
"key": "fragment-one-cell",
"payload": {
"factType": "cell.reviewed",
"data": {
"cellRef": "cell@20",
"decision": "accept",
"actor": "author"
}
}
}