a wave is settlingengine working on #29membrane waiting at #28

Wave 4 · Inside the Cell · record #29sys.knot.ready

#29 · the inner listener is ready

The inner doer wakes, gathers the words, acts once and releases them as the Cell's private result, #30. The Cell counts a second effect.

Came fromthe machineThe machine wrote it while the engine took #28, inside the Cell. step 159

Read as

when the engine took #29

  1. 160The engine takes #29ENGINE.CURSOR · propagate

    a wave is settlingengine: working on #29membrane: waiting at #28

    The log
    1. #0a listener
    2. #1a doer
    3. #2listener: the charter
    4. #3doer: the author
    5. #4listener: charter seen
    6. #5listener: blueprint seen
    7. #6doer: the planner
    8. #7listener: assess · charter
    9. #8listener: assess · result
    10. #9doer: the evaluator
    11. #10the charter wanted
    12. #11the blueprint
    13. #12readiness
    14. #13readiness
    15. #14a request: a charter
    16. #15the charter proposed
    17. #16the charter defined
    18. #17readiness
    19. #18readiness
    20. #19a request: a Cell
    21. #20the seed
    22. #21the Cell is open
    23. #22inner listener
    24. #23inner doer
    25. #24the Cell's context
    26. #25return listener
    27. #26return doer
    28. #27the return address
    29. #28the person's wordsmembrane
    30. #29readinessengine · working
    31. end of the log
    The engine
    Whatbeforeafter
    pointer — the next record to take#29#30

    The engine moves on to #29 — the inner listener's readiness, inside the Cell.

    Where it happens takeNextTuple()Vol. 02 §4.1

    The 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() in core/registers/take-next-tuple.ts, line 15: at the end of the log, the engine stops
    Journal
    #29 · ENGINE.CURSOR · propagate · offset: 29 · by engine
    Picture
    pointer — the next record to take: #29 → #30
    core/registers/take-next-tuple.ts · build 043cc8b
    1. // ENGINE.CURSOR advance (Vol. 02 §4.1) — the machine's instruction pointer:
    2. // returns the tuple at the cursor and moves it forward exactly once, or null
    3. // at quiescence. Advancing IS the context switch: the ambient wave context
    4. // moves to the propagated tuple in the same movement, so every transition
    5. // journalled during its propagation is attributed to it — the cube's spine.
    6. // The cursor never rewinds.
    7. import type { WaveTuple } from "../wave/gate";
    8. import type { RegisterFile } from "./register-file";
    9. import { recordTransition } from "./record-transition";
    10. import { setDriver, setWaveContext } from "./set-wave-context";
    11. export function takeNextTuple(file: RegisterFile): WaveTuple | null {
    12. const engine = file.registers.engine;
    13. if (engine.cursor >= engine.base + engine.window.length) return null;↑ at the end of the log, the engine stops
    14. const tuple = engine.window[engine.cursor - engine.base];
    15. engine.cursor += 1;↑ the engine's pointer moves on by one
    16. setWaveContext(file, { offset: tuple.offset, phase: "propagate" });
    17. setDriver(file, "engine");
    18. recordTransition(file, "engine", "ENGINE.CURSOR", "propagate", { offset: tuple.offset });↑ the change is written into the journal
    19. return tuple;
    20. }

    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)

  2. 161The inner doer opens its rendezvousRDV · open-bank

    a wave is settlingengine: working on #29membrane: waiting at #28

    The log
    1. #0a listener
    2. #1a doer
    3. #2listener: the charter
    4. #3doer: the author
    5. #4listener: charter seen
    6. #5listener: blueprint seen
    7. #6doer: the planner
    8. #7listener: assess · charter
    9. #8listener: assess · result
    10. #9doer: the evaluator
    11. #10the charter wanted
    12. #11the blueprint
    13. #12readiness
    14. #13readiness
    15. #14a request: a charter
    16. #15the charter proposed
    17. #16the charter defined
    18. #17readiness
    19. #18readiness
    20. #19a request: a Cell
    21. #20the seed
    22. #21the Cell is open
    23. #22inner listener
    24. #23inner doer
    25. #24the Cell's context
    26. #25return listener
    27. #26return doer
    28. #27the return address
    29. #28the person's wordsmembrane
    30. #29readinessengine · working
    31. end of the log
    The figure of cell@20
    Whatbeforeafter
    rendezvous opened—cell@20::l1.seeking.release

    The inner doer waits for the inner listener, so this readiness wakes it: it opens its rendezvous, in the Cell's region.

    Where it happens ensureRendezvous()Vol. 02 §4.5 · Vol. 06 §4.5

    Opens a doer's rendezvous the first time it is woken, and a lane in it for each new key.

    Specification
    Vol. 02 §4.5 · Vol. 06 §4.5
    Code
    ensureRendezvous() in core/registers/ensure-rendezvous.ts, line 13: a rendezvous for this doer
    Journal
    #29 · RDV · open-bank · bindId: cell@20::l1.seeking.release · by bind:cell@20::l1.seeking.release
    Picture
    rendezvous opened: — → cell@20::l1.seeking.release
    core/registers/ensure-rendezvous.ts · build 043cc8b
    1. // RDV lane access (Vol. 02 §4.5): one rendezvous state per key lane, created
    2. // lazily on the first readiness that reaches the bind — activated at birth
    3. // when the bind declares no `on` (a demands-only bind, Vol. 06 §4.5).
    4. // Creation is a transition; an existing lane passes through as a read.
    5. import type { BindHandle, RendezvousLane, RendezvousRegisters } from "./topology-registers";
    6. import { recordTransition } from "./record-transition";
    7. export function ensureRendezvous(bind: BindHandle, key: string | null, activatedAtBirth: boolean): RendezvousLane {
    8. let bank: RendezvousRegisters | undefined = bind.region.rdv.get(bind.bindId);
    9. if (!bank) {
    10. bank = { lanes: new Map(), intentCtr: 0 };
    11. bind.region.rdv.set(bind.bindId, bank);↑ a rendezvous for this doer
    12. // A new bank changes the REGION's RDV register set (Vol. 02 §4.5) — the
    13. // region station journals it, so its document (rdvOrder) folds true
    14. // (the fold oracle, ADR-004 d11).
    15. recordTransition(bind.file, `topology:${bind.region.regionId}`, "RDV", "open-bank", { bindId: bind.bindId });↑ the change is written into the journal
    16. }
    17. let lane = bank.lanes.get(key);
    18. if (!lane) {
    19. lane = { activated: activatedAtBirth, scope: new Map(), projected: false };
    20. bank.lanes.set(key, lane);↑ a lane for this key
    21. recordTransition(bind.file, `topology:${bind.region.regionId}/bind:${bind.bindId}`, "RDV", "open-lane", {↑ the change is written into the journal
    22. key,
    23. activatedAtBirth
    24. });
    25. }
    26. return lane;
    27. }

    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 3530f2c (2026-09-07)

  3. 162A lane for this sessionRDV · open-lane

    a wave is settlingengine: working on #29membrane: waiting at #28

    The log
    1. #0a listener
    2. #1a doer
    3. #2listener: the charter
    4. #3doer: the author
    5. #4listener: charter seen
    6. #5listener: blueprint seen
    7. #6doer: the planner
    8. #7listener: assess · charter
    9. #8listener: assess · result
    10. #9doer: the evaluator
    11. #10the charter wanted
    12. #11the blueprint
    13. #12readiness
    14. #13readiness
    15. #14a request: a charter
    16. #15the charter proposed
    17. #16the charter defined
    18. #17readiness
    19. #18readiness
    20. #19a request: a Cell
    21. #20the seed
    22. #21the Cell is open
    23. #22inner listener
    24. #23inner doer
    25. #24the Cell's context
    26. #25return listener
    27. #26return doer
    28. #27the return address
    29. #28the person's wordsmembrane
    30. #29readinessengine · working
    31. end of the log
    The doer cell@20::l1.seeking.release · appears
    Whatbeforeafter
    lane · this session—open
    lane · this session · active—no
    lane · this session · has acted—no
    intentions named so far—0

    Inside the rendezvous, a lane for this session's key — not active yet: it becomes active when the listener it acts on is ready.

    Where it happens ensureRendezvous()Vol. 02 §4.5 · Vol. 06 §4.5

    Opens a doer's rendezvous the first time it is woken, and a lane in it for each new key.

    Specification
    Vol. 02 §4.5 · Vol. 06 §4.5
    Code
    ensureRendezvous() in core/registers/ensure-rendezvous.ts, line 13: a rendezvous for this doer
    Journal
    #29 · RDV · open-lane · key: fragment-one-cell, activatedAtBirth: false · by bind:cell@20::l1.seeking.release
    Picture
    lane · this session: — → open
    core/registers/ensure-rendezvous.ts · build 043cc8b
    1. // RDV lane access (Vol. 02 §4.5): one rendezvous state per key lane, created
    2. // lazily on the first readiness that reaches the bind — activated at birth
    3. // when the bind declares no `on` (a demands-only bind, Vol. 06 §4.5).
    4. // Creation is a transition; an existing lane passes through as a read.
    5. import type { BindHandle, RendezvousLane, RendezvousRegisters } from "./topology-registers";
    6. import { recordTransition } from "./record-transition";
    7. export function ensureRendezvous(bind: BindHandle, key: string | null, activatedAtBirth: boolean): RendezvousLane {
    8. let bank: RendezvousRegisters | undefined = bind.region.rdv.get(bind.bindId);
    9. if (!bank) {
    10. bank = { lanes: new Map(), intentCtr: 0 };
    11. bind.region.rdv.set(bind.bindId, bank);↑ a rendezvous for this doer
    12. // A new bank changes the REGION's RDV register set (Vol. 02 §4.5) — the
    13. // region station journals it, so its document (rdvOrder) folds true
    14. // (the fold oracle, ADR-004 d11).
    15. recordTransition(bind.file, `topology:${bind.region.regionId}`, "RDV", "open-bank", { bindId: bind.bindId });↑ the change is written into the journal
    16. }
    17. let lane = bank.lanes.get(key);
    18. if (!lane) {
    19. lane = { activated: activatedAtBirth, scope: new Map(), projected: false };
    20. bank.lanes.set(key, lane);↑ a lane for this key
    21. recordTransition(bind.file, `topology:${bind.region.regionId}/bind:${bind.bindId}`, "RDV", "open-lane", {↑ the change is written into the journal
    22. key,
    23. activatedAtBirth
    24. });
    25. }
    26. return lane;
    27. }

    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 3530f2c (2026-09-07)

  4. 163The words are gatheredRDV.ACTIVATED,RDV.SCOPE · latch-scope

    a wave is settlingengine: working on #29membrane: waiting at #28

    The log
    1. #0a listener
    2. #1a doer
    3. #2listener: the charter
    4. #3doer: the author
    5. #4listener: charter seen
    6. #5listener: blueprint seen
    7. #6doer: the planner
    8. #7listener: assess · charter
    9. #8listener: assess · result
    10. #9doer: the evaluator
    11. #10the charter wanted
    12. #11the blueprint
    13. #12readiness
    14. #13readiness
    15. #14a request: a charter
    16. #15the charter proposed
    17. #16the charter defined
    18. #17readiness
    19. #18readiness
    20. #19a request: a Cell
    21. #20the seed
    22. #21the Cell is open
    23. #22inner listener
    24. #23inner doer
    25. #24the Cell's context
    26. #25return listener
    27. #26return doer
    28. #27the return address
    29. #28the person's wordsmembrane
    30. #29readinessengine · working
    31. end of the log
    The doer cell@20::l1.seeking.release
    Whatbeforeafter
    lane · this session · activenoyes
    lane · this session · gathered activation—text = “A Cell is a bounded study the machine opens when a slot needs more th…”

    The readiness activates the lane, and the person's words enter the inner doer's scope under the name activation.

    Where it happens latchRendezvousScope()Vol. 02 §4.5 · Vol. 06 §4

    Gathers what a listener understood into the doer's scope — and, from the listener the doer acts on, activates the lane.

    Specification
    Vol. 02 §4.5 · Vol. 06 §4
    Code
    latchRendezvousScope() in core/registers/latch-rendezvous-scope.ts, line 17: the lane is activated
    Journal
    #29 · RDV.ACTIVATED,RDV.SCOPE · latch-scope · key: fragment-one-cell, as: activation · by bind:cell@20::l1.seeking.release
    Picture
    lane · this session · active: no → yes
    core/registers/latch-rendezvous-scope.ts · build 043cc8b
    1. // RDV scope latch (Vol. 02 §4.5, Vol. 06 §4): a readiness understanding
    2. // enters the bound scope under its declared name — a later readiness of the
    3. // same demand refreshes its entry until projection (the latching barrier).
    4. // Activation readiness additionally opens the lane (ACTIVATED).
    5. import type { BindHandle, RendezvousLane } from "./topology-registers";
    6. import { recordTransition } from "./record-transition";
    7. export function latchRendezvousScope(
    8. bind: BindHandle,
    9. lane: RendezvousLane,
    10. key: string | null,
    11. as: string,
    12. understanding: unknown,
    13. options: { activates: boolean }
    14. ): void {
    15. if (options.activates) lane.activated = true;↑ the lane is activated
    16. lane.scope.set(as, understanding);↑ the understanding is gathered
    17. recordTransition(↑ the change is written into the journal
    18. bind.file,
    19. `topology:${bind.region.regionId}/bind:${bind.bindId}`,
    20. options.activates ? "RDV.ACTIVATED,RDV.SCOPE" : "RDV.SCOPE",
    21. "latch-scope",
    22. { key, as }
    23. );
    24. }

    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)

  5. 164The inner doer acts — onceRDV.PROJECTED · latch-projection

    a wave is settlingengine: working on #29membrane: waiting at #28

    The log
    1. #0a listener
    2. #1a doer
    3. #2listener: the charter
    4. #3doer: the author
    5. #4listener: charter seen
    6. #5listener: blueprint seen
    7. #6doer: the planner
    8. #7listener: assess · charter
    9. #8listener: assess · result
    10. #9doer: the evaluator
    11. #10the charter wanted
    12. #11the blueprint
    13. #12readiness
    14. #13readiness
    15. #14a request: a charter
    16. #15the charter proposed
    17. #16the charter defined
    18. #17readiness
    19. #18readiness
    20. #19a request: a Cell
    21. #20the seed
    22. #21the Cell is open
    23. #22inner listener
    24. #23inner doer
    25. #24the Cell's context
    26. #25return listener
    27. #26return doer
    28. #27the return address
    29. #28the person's wordsmembrane
    30. #29readinessengine · working
    31. end of the log
    The doer cell@20::l1.seeking.release
    Whatbeforeafter
    lane · this session · has actednoyes

    The lane is latched: the inner doer acts now, and never again on this lane.

    Where it happens latchRendezvousProjection()Vol. 02 §4.5 · Vol. 06 §4.2

    Latches a doer's lane after it acts, so that it never acts on that lane again.

    Specification
    Vol. 02 §4.5 · Vol. 06 §4.2
    Code
    latchRendezvousProjection() in core/registers/latch-rendezvous-projection.ts, line 9: the lane is latched for good
    Journal
    #29 · RDV.PROJECTED · latch-projection · key: fragment-one-cell · by bind:cell@20::l1.seeking.release
    Picture
    lane · this session · has acted: no → yes
    core/registers/latch-rendezvous-projection.ts · build 043cc8b
    1. // RDV.PROJECTED latch (Vol. 02 §4.5, Vol. 06 §4.2): one-shot — once the
    2. // scope is judged and the intention projected (or rejected at a gate), the
    3. // lane never fires again. The latch never reopens; revision is fresh binds.
    4. import type { BindHandle, RendezvousLane } from "./topology-registers";
    5. import { recordTransition } from "./record-transition";
    6. export function latchRendezvousProjection(bind: BindHandle, lane: RendezvousLane, key: string | null): void {
    7. lane.projected = true;↑ the lane is latched for good
    8. recordTransition(bind.file, `topology:${bind.region.regionId}/bind:${bind.bindId}`, "RDV.PROJECTED", "latch-projection", {↑ the change is written into the journal
    9. key
    10. });
    11. }

    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)

  6. 165The intention gets its nameINTENT.CTR · mint-uid

    a wave is settlingengine: working on #29membrane: waiting at #28

    The log
    1. #0a listener
    2. #1a doer
    3. #2listener: the charter
    4. #3doer: the author
    5. #4listener: charter seen
    6. #5listener: blueprint seen
    7. #6doer: the planner
    8. #7listener: assess · charter
    9. #8listener: assess · result
    10. #9doer: the evaluator
    11. #10the charter wanted
    12. #11the blueprint
    13. #12readiness
    14. #13readiness
    15. #14a request: a charter
    16. #15the charter proposed
    17. #16the charter defined
    18. #17readiness
    19. #18readiness
    20. #19a request: a Cell
    21. #20the seed
    22. #21the Cell is open
    23. #22inner listener
    24. #23inner doer
    25. #24the Cell's context
    26. #25return listener
    27. #26return doer
    28. #27the return address
    29. #28the person's wordsmembrane
    30. #29readinessengine · working
    31. end of the log
    The doer cell@20::l1.seeking.release
    Whatbeforeafter
    intentions named so far01

    What the inner doer is about to do gets its unique name, cell@20::l1.seeking.release#1, from a counter that never goes back.

    Where it happens nextIntentionUid()Vol. 02 §4.5 · Vol. 02 §4.7

    Gives a doer's next intention its unique name, from a counter that never goes back.

    Specification
    Vol. 02 §4.5 · Vol. 02 §4.7
    Code
    nextIntentionUid() in core/registers/next-intention-uid.ts, line 12: the counter moves on
    Journal
    #29 · INTENT.CTR · mint-uid · uid: cell@20::l1.seeking.release#1 · by bind:cell@20::l1.seeking.release
    Picture
    intentions named so far: 0 → 1
    core/registers/next-intention-uid.ts · build 043cc8b
    1. // INTENT.CTR advance (Vol. 02 §4.5, §4.7 rule 3): the service-intention uid
    2. // sequence, shared across lanes and never reset — uids stay unique per
    3. // machine instance, which is exactly why this counter belongs to the durable
    4. // stratum and must survive a snapshot/restore (ADR-002 decision 4).
    5. import type { BindHandle } from "./topology-registers";
    6. import { recordTransition } from "./record-transition";
    7. export function nextIntentionUid(bind: BindHandle): string {
    8. const bank = bind.region.rdv.get(bind.bindId);
    9. if (!bank) throw new Error(`Rendezvous bank missing for bind '${bind.bindId}'.`);
    10. bank.intentCtr += 1;↑ the counter moves on
    11. const uid = `${bind.bindId}#${bank.intentCtr}`;↑ the name: the doer's name and the count
    12. recordTransition(bind.file, `topology:${bind.region.regionId}/bind:${bind.bindId}`, "INTENT.CTR", "mint-uid", {↑ the change is written into the journal
    13. uid
    14. });
    15. return uid;
    16. }

    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)

  7. 166The Cell counts an effect: 2CELL.EMISSIONS · count-effect

    a wave is settlingengine: working on #29membrane: waiting at #28

    The log
    1. #0a listener
    2. #1a doer
    3. #2listener: the charter
    4. #3doer: the author
    5. #4listener: charter seen
    6. #5listener: blueprint seen
    7. #6doer: the planner
    8. #7listener: assess · charter
    9. #8listener: assess · result
    10. #9doer: the evaluator
    11. #10the charter wanted
    12. #11the blueprint
    13. #12readiness
    14. #13readiness
    15. #14a request: a charter
    16. #15the charter proposed
    17. #16the charter defined
    18. #17readiness
    19. #18readiness
    20. #19a request: a Cell
    21. #20the seed
    22. #21the Cell is open
    23. #22inner listener
    24. #23inner doer
    25. #24the Cell's context
    26. #25return listener
    27. #26return doer
    28. #27the return address
    29. #28the person's wordsmembrane
    30. #29readinessengine · working
    31. end of the log
    cellspace/cell:cell@20
    Whatbeforeafter
    emissions12

    The second effect counted against the Cell's budget: the release the inner doer is about to make.

    Where it happens countCellEffect()Vol. 12 §8

    Counts one effect of a Cell against its budget — every readiness and every release inside it.

    Specification
    Vol. 12 §8
    Code
    countCellEffect() in core/registers/count-cell-effect.ts, line 15: one more effect is counted
    Journal
    #29 · CELL.EMISSIONS · count-effect · count: 2 · by cellspace
    Picture
    emissions: 1 → 2
    core/registers/count-cell-effect.ts · build 043cc8b
    1. // Cell budget counters (Vol. 12 §8–9): every locally returned emission and
    2. // every inference/service intention counts pre-interception — the ceilings
    3. // are judged by the station against the Cell's policy; this op is the
    4. // counting itself, returning the new total.
    5. import type { CellRegisters } from "./cell-registers";
    6. import type { RegisterFile } from "./register-file";
    7. import { recordTransition } from "./record-transition";
    8. export function countCellEffect(
    9. file: RegisterFile,
    10. cell: CellRegisters,
    11. counter: "emissions" | "inferenceCalls"
    12. ): number {
    13. cell[counter] += 1;↑ one more effect is counted
    14. recordTransition(↑ the change is written into the journal
    15. file,
    16. `cellspace/cell:${cell.cellRef}`,
    17. counter === "emissions" ? "CELL.EMISSIONS" : "CELL.INFERENCE_CALLS",
    18. "count-effect",
    19. { count: cell[counter] }
    20. );
    21. return cell[counter];
    22. }

    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)

  8. 167The private result enters the log as #30LOG · append

    a wave is settlingengine: working on #29membrane: waiting at #28

    The log
    1. #0a listener
    2. #1a doer
    3. #2listener: the charter
    4. #3doer: the author
    5. #4listener: charter seen
    6. #5listener: blueprint seen
    7. #6doer: the planner
    8. #7listener: assess · charter
    9. #8listener: assess · result
    10. #9doer: the evaluator
    11. #10the charter wanted
    12. #11the blueprint
    13. #12readiness
    14. #13readiness
    15. #14a request: a charter
    16. #15the charter proposed
    17. #16the charter defined
    18. #17readiness
    19. #18readiness
    20. #19a request: a Cell
    21. #20the seed
    22. #21the Cell is open
    23. #22inner listener
    24. #23inner doer
    25. #24the Cell's context
    26. #25return listener
    27. #26return doer
    28. #27the return address
    29. #28the person's wordsmembrane
    30. #29readinessengine · working
    31. #30the private resultnew
    32. end of the log
    The log
    Whatbeforeafter
    records in the log3031
    #30—the private result · cell@20::knowledge.l1

    The inner doer releases the words as #30 — a fact whose type carries the Cell's name, cell@20::knowledge.l1, so no listener at root can hear it. The Cell's result exists, inside.

    Where it happens appendEmissions()Vol. 02 §4.1 · Vol. 03 §1

    The 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() in core/registers/append-emissions.ts, line 14: the new record gets the next free number
    Journal
    #29 · LOG · append · offset: 30, kind: domain.fact · by engine
    Picture
    records in the log: 30 → 31
    core/registers/append-emissions.ts · build 043cc8b
    1. // The one LOG writer (Vol. 02 §4.1, Vol. 03 §1): emissions become tuples by
    2. // receiving the next dense absolute offset — `base + window.length` — and
    3. // nothing else ever grows the log. Each append is journalled under the
    4. // ambient context, so a batch born of a propagated tuple carries that
    5. // tuple's offset as its cause — the cube's provenance line (ADR-002).
    6. import type { WaveEmission, WaveTuple } from "../wave/gate";
    7. import type { RegisterFile } from "./register-file";
    8. import { recordTransition } from "./record-transition";
    9. export function appendEmissions(file: RegisterFile, emissions: readonly WaveEmission[]): void {
    10. const engine = file.registers.engine;
    11. for (const emission of emissions) {
    12. const tuple: WaveTuple = { ...emission, offset: engine.base + engine.window.length };↑ the new record gets the next free number
    13. engine.window.push(tuple);↑ it is added at the end of the log
    14. recordTransition(file, "engine", "LOG", "append", {↑ the change is written into the journal
    15. offset: tuple.offset,
    16. kind: tuple.kind
    17. });
    18. }
    19. }

    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 #29

  1. 184The membrane passes #29MEMBRANE.CURSOR · sweep

    a wave is settlingengine: at the endmembrane: passing #29

    The log
    1. #0a listener
    2. #1a doer
    3. #2listener: the charter
    4. #3doer: the author
    5. #4listener: charter seen
    6. #5listener: blueprint seen
    7. #6doer: the planner
    8. #7listener: assess · charter
    9. #8listener: assess · result
    10. #9doer: the evaluator
    11. #10the charter wanted
    12. #11the blueprint
    13. #12readiness
    14. #13readiness
    15. #14a request: a charter
    16. #15the charter proposed
    17. #16the charter defined
    18. #17readiness
    19. #18readiness
    20. #19a request: a Cell
    21. #20the seed
    22. #21the Cell is open
    23. #22inner listener
    24. #23inner doer
    25. #24the Cell's context
    26. #25return listener
    27. #26return doer
    28. #27the return address
    29. #28the person's words
    30. #29readinessmembrane · passing
    31. #30the private result
    32. #31the result, marked
    33. #32readiness
    34. #33a request: assess
    35. end of the logengine
    The membrane
    Whatbeforeafter
    pointer — the next record to pass#29#30

    #29 asks nothing of the world, so the membrane's pointer simply moves on.

    Where it happens sweepNextTuple()Vol. 02 §4.6 · Vol. 07 §3

    The 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() in core/registers/sweep-next-tuple.ts, line 16: the membrane's pointer moves on by one
    Journal
    #29 · MEMBRANE.CURSOR · sweep · offset: 29 · by membrane
    Picture
    pointer — the next record to pass: #29 → #30
    core/registers/sweep-next-tuple.ts · build 043cc8b
    1. // MEMBRANE.CURSOR advance (Vol. 02 §4.6, Vol. 07 §3): the membrane's own
    2. // reading of the one log — the second reception of one publication, never a
    3. // second truth. The cursor advances exactly once per offset per machine:
    4. // the exactly-once discharge guarantee lives in this movement.
    5. import type { WaveTuple } from "../wave/gate";
    6. import type { RegisterFile } from "./register-file";
    7. import { recordTransition } from "./record-transition";
    8. import { setDriver, setWaveContext } from "./set-wave-context";
    9. export function sweepNextTuple(file: RegisterFile): WaveTuple | null {
    10. const engine = file.registers.engine;
    11. const membrane = file.registers.membrane;
    12. if (membrane.cursor >= engine.base + engine.window.length) return null;
    13. const tuple = engine.window[membrane.cursor - engine.base];
    14. membrane.cursor += 1;↑ the membrane's pointer moves on by one
    15. setWaveContext(file, { offset: tuple.offset, phase: "sweep" });
    16. setDriver(file, "membrane");
    17. recordTransition(file, "membrane", "MEMBRANE.CURSOR", "sweep", { offset: tuple.offset });↑ the change is written into the journal
    18. return tuple;
    19. }

    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)

Step 167: The private result enters the log as #30

167 The private result enters the log as #30

a wave is settlingengine: working on #29membrane: waiting at #28

The log
  1. #0a listener
  2. #1a doer
  3. #2listener: the charter
  4. #3doer: the author
  5. #4listener: charter seen
  6. #5listener: blueprint seen
  7. #6doer: the planner
  8. #7listener: assess · charter
  9. #8listener: assess · result
  10. #9doer: the evaluator
  11. #10the charter wanted
  12. #11the blueprint
  13. #12readiness
  14. #13readiness
  15. #14a request: a charter
  16. #15the charter proposed
  17. #16the charter defined
  18. #17readiness
  19. #18readiness
  20. #19a request: a Cell
  21. #20the seed
  22. #21the Cell is open
  23. #22inner listener
  24. #23inner doer
  25. #24the Cell's context
  26. #25return listener
  27. #26return doer
  28. #27the return address
  29. #28the person's wordsmembrane
  30. #29readinessengine · working
  31. #30the private resultnew
  32. end of the log
The log
Whatbeforeafter
records in the log3031
#30—the private result · cell@20::knowledge.l1

The inner doer releases the words as #30 — a fact whose type carries the Cell's name, cell@20::knowledge.l1, so no listener at root can hear it. The Cell's result exists, inside.

Where it happens · appendEmissions()

The 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() in core/registers/append-emissions.ts, line 14: the new record gets the next free number
Journal
#29 · LOG · append · offset: 30, kind: domain.fact · by engine
Picture
records in the log: 30 → 31
core/registers/append-emissions.ts · build 043cc8b
  1. // The one LOG writer (Vol. 02 §4.1, Vol. 03 §1): emissions become tuples by
  2. // receiving the next dense absolute offset — `base + window.length` — and
  3. // nothing else ever grows the log. Each append is journalled under the
  4. // ambient context, so a batch born of a propagated tuple carries that
  5. // tuple's offset as its cause — the cube's provenance line (ADR-002).
  6. import type { WaveEmission, WaveTuple } from "../wave/gate";
  7. import type { RegisterFile } from "./register-file";
  8. import { recordTransition } from "./record-transition";
  9. export function appendEmissions(file: RegisterFile, emissions: readonly WaveEmission[]): void {
  10. const engine = file.registers.engine;
  11. for (const emission of emissions) {
  12. const tuple: WaveTuple = { ...emission, offset: engine.base + engine.window.length };↑ the new record gets the next free number
  13. engine.window.push(tuple);↑ it is added at the end of the log
  14. recordTransition(file, "engine", "LOG", "append", {↑ the change is written into the journal
  15. offset: tuple.offset,
  16. kind: tuple.kind
  17. });
  18. }
  19. }

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)

A listener's readiness

The machine's own record that a listener's condition came true. It names the listener and keeps what the listener understood at that moment — its slots, taken before they are emptied, and written before any doer acts.

#29sys.knot.ready the machine

envelope
offset29Its 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.
kindsys.knot.readyWhich of the four kinds of record the machine knows. The kind decides what the payload holds.
keyfragment-one-cellThe lane of the fact that made the listener ready.
payload
knotIdcell@20::l1.seeking.gateThe listener that is ready.
payload.understanding
text«A Cell is a bounded study the machine opens when a slot needs more than a fact: it has its own charter, its own knots and binds, and a result that is assessed and reviewed before anything returns.»What the Cell's inner listener understood: the person's words.

end · #29

In the specificationVol. 03 §1Vol. 03 §2Vol. 03 §5Vol. 04 §2.3

Names it shares with other records

The record as the machine keeps it
{
 "offset": 29,
 "kind": "sys.knot.ready",
 "key": "fragment-one-cell",
 "payload": {
  "knotId": "cell@20::l1.seeking.gate",
  "understanding": {
   "text": "A Cell is a bounded study the machine opens when a slot needs more than a fact: it has its own charter, its own knots and binds, and a result that is assessed and reviewed before anything returns."
  }
 }
}