Wave 2 · The charter · record #16domain.factcharter.defined
#16 · the charter is defined
Two listeners hear it in one step — charter seen and assess · charter — and both announce that they are ready, as #17 and #18.
Came fromthe machineThe machine wrote it while the engine took #15: CellSpace defined the proposed charter. step 87
when the engine took #16
88The engine takes #16ENGINE.CURSOR · propagate
a wave is settlingengine: working on #16membrane: waiting at #15
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
- end of the log
The engine What before after pointer — the next record to take #16 #17 The engine moves on to #16 — the charter, defined under its reference.
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
- #16 ·
ENGINE.CURSOR · propagate· offset: 16 · by engine - Picture
- pointer — the next record to take: #16 → #17
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)
89Charter seen opens a laneCLEWS · open-clew
a wave is settlingengine: working on #16membrane: waiting at #15
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
- end of the log
The listener admit.note.gate--l1.seeking.charter.seenWhat before after lane · this session — open The first of two listeners that hear #16 in the same step: charter seen opens a lane for this session.
Where it happens
ensureClew()Vol. 02 §4.2 · Vol. 03 §5.1Opens a lane in a listener for a new key — the first time a fact with that key reaches it.
- Specification
- Vol. 02 §4.2 · Vol. 03 §5.1
- Code
ensureClew()incore/registers/ensure-clew.ts, line 15: a new lane is opened for this key- Journal
- #16 ·
CLEWS · open-clew· key: fragment-one-cell · by knot:admit.note.gate--l1.seeking.charter.seen - Picture
- lane · this session: — → open
core/registers/ensure-clew.ts· build 043cc8b// CLEWS lane creation (Vol. 02 §4.2): a clew is created lazily on the first// tuple of its key — parallel keys wind independent understanding (Vol. 05// §2, Vol. 03 §5.1). Creation is a transition (journalled); an existing lane// is a read and passes through silently.import type { ClewHandle, ClewRegisters } from "./topology-registers";import { recordTransition } from "./record-transition";export function ensureClew(clew: ClewHandle, init: () => ClewRegisters): ClewRegisters {const lanes = clew.region.clews.get(clew.knotId);if (!lanes) throw new Error(`Clew bank missing for knot '${clew.knotId}' — registration must precede facts (Vol. 02 §5.1).`);let registers = lanes.get(clew.key);if (!registers) {registers = init();lanes.set(clew.key, registers);↑ a new lane is opened for this keyrecordTransition(clew.file, `topology:${clew.region.regionId}/clew:${clew.knotId}`, "CLEWS", "open-clew", {↑ the change is written into the journalkey: clew.key});}return registers;}
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)
90Charter seen keeps the definitionCOLLECTED · collect
a wave is settlingengine: working on #16membrane: waiting at #15
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
- end of the log
The listener admit.note.gate--l1.seeking.charter.seenWhat before after lane · this session · slot definition empty ref = “charter@15” · digest = “sha256:d697d7f3224e3a44a0888949eb98ee5ecf54aa09b2fc4aba2addca763458ec…” · value = {"title":"Seeking","purpose":"What are we seeking to understand, and for whom does it matter?","question":"What is a Cell, and why does the machine open one instead of answering in place?","criteria":[{"id":"q1","question":"What is this material about, and what exactly are we seeking to understand in it?","weight":1,"minimum":0.6},{"id":"q2","question":"Whose problem does it address, and why does it exist?","weight":1,"minimum":0.6}]} The charter's definition — its reference, digest and value — goes into charter seen's slot definition. Its condition holds.
Where it happens
collectDeterministicSlot()Vol. 02 §4.4 · Vol. 05 §3.3Fills a slot of a listener with a value it heard.
- Specification
- Vol. 02 §4.4 · Vol. 05 §3.3
- Code
collectDeterministicSlot()incore/registers/collect-deterministic-slot.ts, line 20: the slot is filled- Journal
- #16 ·
COLLECTED · collect· key: fragment-one-cell, slot: definition, reduce: latest · by knot:admit.note.gate--l1.seeking.charter.seen - Picture
- lane · this session · slot definition: empty → ref = “charter@15” · digest = “sha256:d697d7f3224e3a44a0888949eb98ee5ecf54aa09b2fc4aba2addca763458ec…” · value = {"title":"Seeking","purpose":"What are we seeking to understand, and for whom does it matter?","question":"What is a Cell, and why does the machine open one instead of answering in place?","criteria":[{"id":"q1","question":"What is this material about, and what exactly are we seeking to understand in it?","weight":1,"minimum":0.6},{"id":"q2","question":"Whose problem does it address, and why does it exist?","weight":1,"minimum":0.6}]}
core/registers/collect-deterministic-slot.ts· build 043cc8b// COLLECTED write (Vol. 02 §4.4, Vol. 05 §3.3): the deterministic knot's// slot fills — `append` accumulates an array, otherwise the newest value// stands. The condition never runs here; this op records the landing.import type { DeterministicClewRegisters, ClewHandle } from "./topology-registers";import { recordTransition } from "./record-transition";export function collectDeterministicSlot(clew: ClewHandle,registers: DeterministicClewRegisters,slot: string,reduce: string,value: unknown): void {if (reduce === "append") {const existing = registers.collected.get(slot);if (Array.isArray(existing)) existing.push(value);else registers.collected.set(slot, [value]);} else {registers.collected.set(slot, value);↑ the slot is filled}recordTransition(clew.file, `topology:${clew.region.regionId}/clew:${clew.knotId}`, "COLLECTED", "collect", {↑ the change is written into the journalkey: clew.key,slot,reduce});}
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)
91Its slot is emptied againCOLLECTED · reset
a wave is settlingengine: working on #16membrane: waiting at #15
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
- end of the log
The listener admit.note.gate--l1.seeking.charter.seenWhat before after lane · this session · slot definition ref = “charter@15” · digest = “sha256:d697d7f3224e3a44a0888949eb98ee5ecf54aa09b2fc4aba2addca763458ec…” · value = {"title":"Seeking","purpose":"What are we seeking to understand, and for whom does it matter?","question":"What is a Cell, and why does the machine open one instead of answering in place?","criteria":[{"id":"q1","question":"What is this material about, and what exactly are we seeking to understand in it?","weight":1,"minimum":0.6},{"id":"q2","question":"Whose problem does it address, and why does it exist?","weight":1,"minimum":0.6}]} empty Charter seen empties its slot before it announces that it is ready; what it heard travels with the announcement.
Where it happens
resetDeterministicClew()Vol. 02 §4.4Empties a listener's slots once it has announced that it is ready.
- Specification
- Vol. 02 §4.4
- Code
resetDeterministicClew()incore/registers/reset-deterministic-clew.ts, line 9: the slots are emptied- Journal
- #16 ·
COLLECTED · reset· key: fragment-one-cell · by knot:admit.note.gate--l1.seeking.charter.seen - Picture
- lane · this session · slot definition: ref = “charter@15” · digest = “sha256:d697d7f3224e3a44a0888949eb98ee5ecf54aa09b2fc4aba2addca763458ec…” · value = {"title":"Seeking","purpose":"What are we seeking to understand, and for whom does it matter?","question":"What is a Cell, and why does the machine open one instead of answering in place?","criteria":[{"id":"q1","question":"What is this material about, and what exactly are we seeking to understand in it?","weight":1,"minimum":0.6},{"id":"q2","question":"Whose problem does it address, and why does it exist?","weight":1,"minimum":0.6}]} → empty
core/registers/reset-deterministic-clew.ts· build 043cc8b// The deterministic reset rule (Vol. 02 §4.4): COLLECTED clears at readiness// unless the policy says `never` — the station holds the policy, this op// holds the movement.import type { DeterministicClewRegisters, ClewHandle } from "./topology-registers";import { recordTransition } from "./record-transition";export function resetDeterministicClew(clew: ClewHandle, registers: DeterministicClewRegisters): void {registers.collected = new Map();↑ the slots are emptiedrecordTransition(clew.file, `topology:${clew.region.regionId}/clew:${clew.knotId}`, "COLLECTED", "reset", {↑ the change is written into the journalkey: clew.key});}
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)
92Assess · charter opens a laneCLEWS · open-clew
a wave is settlingengine: working on #16membrane: waiting at #15
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
- end of the log
The listener admit.note.gate--l1.seeking.assess.charterWhat before after lane · this session — open The second listener hearing #16: assess · charter, on the evaluator's side of the figure, opens its own lane for this session.
Where it happens
ensureClew()Vol. 02 §4.2 · Vol. 03 §5.1Opens a lane in a listener for a new key — the first time a fact with that key reaches it.
- Specification
- Vol. 02 §4.2 · Vol. 03 §5.1
- Code
ensureClew()incore/registers/ensure-clew.ts, line 15: a new lane is opened for this key- Journal
- #16 ·
CLEWS · open-clew· key: fragment-one-cell · by knot:admit.note.gate--l1.seeking.assess.charter - Picture
- lane · this session: — → open
core/registers/ensure-clew.ts· build 043cc8b// CLEWS lane creation (Vol. 02 §4.2): a clew is created lazily on the first// tuple of its key — parallel keys wind independent understanding (Vol. 05// §2, Vol. 03 §5.1). Creation is a transition (journalled); an existing lane// is a read and passes through silently.import type { ClewHandle, ClewRegisters } from "./topology-registers";import { recordTransition } from "./record-transition";export function ensureClew(clew: ClewHandle, init: () => ClewRegisters): ClewRegisters {const lanes = clew.region.clews.get(clew.knotId);if (!lanes) throw new Error(`Clew bank missing for knot '${clew.knotId}' — registration must precede facts (Vol. 02 §5.1).`);let registers = lanes.get(clew.key);if (!registers) {registers = init();lanes.set(clew.key, registers);↑ a new lane is opened for this keyrecordTransition(clew.file, `topology:${clew.region.regionId}/clew:${clew.knotId}`, "CLEWS", "open-clew", {↑ the change is written into the journalkey: clew.key});}return registers;}
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)
93Assess · charter keeps the definitionCOLLECTED · collect
a wave is settlingengine: working on #16membrane: waiting at #15
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
- end of the log
The listener admit.note.gate--l1.seeking.assess.charterWhat before after lane · this session · slot definition empty ref = “charter@15” · digest = “sha256:d697d7f3224e3a44a0888949eb98ee5ecf54aa09b2fc4aba2addca763458ec…” · value = {"title":"Seeking","purpose":"What are we seeking to understand, and for whom does it matter?","question":"What is a Cell, and why does the machine open one instead of answering in place?","criteria":[{"id":"q1","question":"What is this material about, and what exactly are we seeking to understand in it?","weight":1,"minimum":0.6},{"id":"q2","question":"Whose problem does it address, and why does it exist?","weight":1,"minimum":0.6}]} The same definition goes into assess · charter's slot definition. One record, two listeners, each winding it on its own.
Where it happens
collectDeterministicSlot()Vol. 02 §4.4 · Vol. 05 §3.3Fills a slot of a listener with a value it heard.
- Specification
- Vol. 02 §4.4 · Vol. 05 §3.3
- Code
collectDeterministicSlot()incore/registers/collect-deterministic-slot.ts, line 20: the slot is filled- Journal
- #16 ·
COLLECTED · collect· key: fragment-one-cell, slot: definition, reduce: latest · by knot:admit.note.gate--l1.seeking.assess.charter - Picture
- lane · this session · slot definition: empty → ref = “charter@15” · digest = “sha256:d697d7f3224e3a44a0888949eb98ee5ecf54aa09b2fc4aba2addca763458ec…” · value = {"title":"Seeking","purpose":"What are we seeking to understand, and for whom does it matter?","question":"What is a Cell, and why does the machine open one instead of answering in place?","criteria":[{"id":"q1","question":"What is this material about, and what exactly are we seeking to understand in it?","weight":1,"minimum":0.6},{"id":"q2","question":"Whose problem does it address, and why does it exist?","weight":1,"minimum":0.6}]}
core/registers/collect-deterministic-slot.ts· build 043cc8b// COLLECTED write (Vol. 02 §4.4, Vol. 05 §3.3): the deterministic knot's// slot fills — `append` accumulates an array, otherwise the newest value// stands. The condition never runs here; this op records the landing.import type { DeterministicClewRegisters, ClewHandle } from "./topology-registers";import { recordTransition } from "./record-transition";export function collectDeterministicSlot(clew: ClewHandle,registers: DeterministicClewRegisters,slot: string,reduce: string,value: unknown): void {if (reduce === "append") {const existing = registers.collected.get(slot);if (Array.isArray(existing)) existing.push(value);else registers.collected.set(slot, [value]);} else {registers.collected.set(slot, value);↑ the slot is filled}recordTransition(clew.file, `topology:${clew.region.regionId}/clew:${clew.knotId}`, "COLLECTED", "collect", {↑ the change is written into the journalkey: clew.key,slot,reduce});}
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)
94Its slot is emptied tooCOLLECTED · reset
a wave is settlingengine: working on #16membrane: waiting at #15
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
- end of the log
The listener admit.note.gate--l1.seeking.assess.charterWhat before after lane · this session · slot definition ref = “charter@15” · digest = “sha256:d697d7f3224e3a44a0888949eb98ee5ecf54aa09b2fc4aba2addca763458ec…” · value = {"title":"Seeking","purpose":"What are we seeking to understand, and for whom does it matter?","question":"What is a Cell, and why does the machine open one instead of answering in place?","criteria":[{"id":"q1","question":"What is this material about, and what exactly are we seeking to understand in it?","weight":1,"minimum":0.6},{"id":"q2","question":"Whose problem does it address, and why does it exist?","weight":1,"minimum":0.6}]} empty Assess · charter empties its slot before it announces that it is ready; the definition travels with the announcement.
Where it happens
resetDeterministicClew()Vol. 02 §4.4Empties a listener's slots once it has announced that it is ready.
- Specification
- Vol. 02 §4.4
- Code
resetDeterministicClew()incore/registers/reset-deterministic-clew.ts, line 9: the slots are emptied- Journal
- #16 ·
COLLECTED · reset· key: fragment-one-cell · by knot:admit.note.gate--l1.seeking.assess.charter - Picture
- lane · this session · slot definition: ref = “charter@15” · digest = “sha256:d697d7f3224e3a44a0888949eb98ee5ecf54aa09b2fc4aba2addca763458ec…” · value = {"title":"Seeking","purpose":"What are we seeking to understand, and for whom does it matter?","question":"What is a Cell, and why does the machine open one instead of answering in place?","criteria":[{"id":"q1","question":"What is this material about, and what exactly are we seeking to understand in it?","weight":1,"minimum":0.6},{"id":"q2","question":"Whose problem does it address, and why does it exist?","weight":1,"minimum":0.6}]} → empty
core/registers/reset-deterministic-clew.ts· build 043cc8b// The deterministic reset rule (Vol. 02 §4.4): COLLECTED clears at readiness// unless the policy says `never` — the station holds the policy, this op// holds the movement.import type { DeterministicClewRegisters, ClewHandle } from "./topology-registers";import { recordTransition } from "./record-transition";export function resetDeterministicClew(clew: ClewHandle, registers: DeterministicClewRegisters): void {registers.collected = new Map();↑ the slots are emptiedrecordTransition(clew.file, `topology:${clew.region.regionId}/clew:${clew.knotId}`, "COLLECTED", "reset", {↑ the change is written into the journalkey: clew.key});}
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)
95Charter seen's readiness enters as #17LOG · append
a wave is settlingengine: working on #16membrane: waiting at #15
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
- #17readinessnew
- end of the log
The log What before after records in the log 17 18 #17 — readiness · sys.knot.readyThe first announcement is written at the end of the log as #17: charter seen is ready.
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
- #16 ·
LOG · append· offset: 17, kind: sys.knot.ready · by engine - Picture
- records in the log: 17 → 18
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)
96Assess · charter's readiness enters as #18LOG · append
a wave is settlingengine: working on #16membrane: waiting at #15
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
- #18readinessnew
- end of the log
The log What before after records in the log 18 19 #18 — readiness · sys.knot.readyThe second follows as #18. Two readinesses from one record, in the order the listeners were described.
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
- #16 ·
LOG · append· offset: 18, kind: sys.knot.ready · by engine - Picture
- records in the log: 18 → 19
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 #16
109The membrane passes #16MEMBRANE.CURSOR · sweep
a wave is settlingengine: at the endmembrane: passing #16
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
- end of the log
The membrane What before after pointer — the next record to pass #16 #17 #16 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
- #16 ·
MEMBRANE.CURSOR · sweep· offset: 16 · by membrane - Picture
- pointer — the next record to pass: #16 → #17
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 charter, defined
CellSpace's record that a charter exists: its reference — the proposal's place in the log — its digest, its value, and what it answers. Everything of the Cell names this reference.
#16domain.factcharter.defined the machine
| envelope | |
|---|---|
offset | 16Its 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 | charter.definedThe fact type — charter.defined, written by CellSpace alone. |
| payload.data.definition | |
ref | charter@15The charter's reference: charter@ and the proposal's offset. |
digest | sha256:d697d7f3224e3a44a0888949eb98ee5ecf54aa09b2fc4aba2addca763458ec1bA digest of the charter's value — any change would make another charter. |
value | title · purpose · question · criteria ×2The charter itself: title, purpose, question, criteria. |
| payload.data | |
home | ∅The Cell whose charter it is — none (∅): this one belongs to root. |
parentRef | ∅The charter it refines — none (∅). |
proposalOffset | 15Where the proposal stands in the log. |
provenance | bindId · uid · serviceRequestOffsetThe doer, the intention and the request it answers. |
end · #16
In the specificationVol. 03 §1Vol. 03 §5Vol. 12 §4Vol. 12 §5.1Vol. 12 §7
The record as the machine keeps it
{
"offset": 16,
"kind": "domain.fact",
"key": "fragment-one-cell",
"payload": {
"factType": "charter.defined",
"data": {
"definition": {
"ref": "charter@15",
"digest": "sha256:d697d7f3224e3a44a0888949eb98ee5ecf54aa09b2fc4aba2addca763458ec1b",
"value": {
"title": "Seeking",
"purpose": "What are we seeking to understand, and for whom does it matter?",
"question": "What is a Cell, and why does the machine open one instead of answering in place?",
"criteria": [
{
"id": "q1",
"question": "What is this material about, and what exactly are we seeking to understand in it?",
"weight": 1,
"minimum": 0.6
},
{
"id": "q2",
"question": "Whose problem does it address, and why does it exist?",
"weight": 1,
"minimum": 0.6
}
]
}
},
"home": null,
"parentRef": null,
"proposalOffset": 15,
"provenance": {
"bindId": "admit.note.gate--l1.seeking.charter.author",
"uid": "admit.note.gate--l1.seeking.charter.author#1",
"serviceRequestOffset": 14
}
}
}
}