a wave is settlingengine working on #34membrane waiting at #34

Wave 4 · The assessment · record #34domain.factcell.assessment.proposed

#34 · an assessment is proposed

CellSpace closes the request, computes the overall grade itself (0.9) and moves the Cell to ready for review; its mark follows as #35.

Came fromthe worldThe world answered — controller.ceremony.local — through the membrane. step 191

Read as

when the engine took #34

  1. 192The engine takes #34ENGINE.CURSOR · propagate

    a wave is settlingengine: working on #34membrane: waiting at #34

    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. #29readiness
    31. #30the private result
    32. #31the result, marked
    33. #32readiness
    34. #33a request: assess
    35. #34assessment proposedengine · workingmembrane
    36. end of the log
    The engine
    Whatbeforeafter
    pointer — the next record to take#34#35

    The engine moves on to #34, the proposed assessment.

    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
    #34 · ENGINE.CURSOR · propagate · offset: 34 · by engine
    Picture
    pointer — the next record to take: #34 → #35
    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. 193The request is closedREQUESTS · consume-request

    a wave is settlingengine: working on #34membrane: waiting at #34

    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. #29readiness
    31. #30the private result
    32. #31the result, marked
    33. #32readiness
    34. #33a request: assess
    35. #34assessment proposedengine · workingmembrane
    36. end of the log
    CellSpace

    No register changed its value.

    CellSpace closes the evaluator's request: the answer has come under its name.

    Where it happens consumeCausalRequest()Vol. 12 §5.1

    Closes a request once its answer has come: the index entry is spent, and a second answer under the same name finds nothing to close.

    Specification
    Vol. 12 §5.1
    Code
    consumeCausalRequest() in core/registers/consume-causal-request.ts, line 10: the request is marked as answered
    Journal
    #34 · REQUESTS · consume-request · uid: admit.note.gate--l1.seeking.evaluator#1 · by cellspace
    Picture
    no register changed its value
    core/registers/consume-causal-request.ts · build 043cc8b
    1. // REQUESTS consumption (Vol. 12 §5.1): the first proposal or failure over a
    2. // causal request is terminal for it — a correlation spends exactly once,
    3. // even when what it bought was a rejection.
    4. import type { CausalRequest } from "../cells/gate";
    5. import type { RegisterFile } from "./register-file";
    6. import { recordTransition } from "./record-transition";
    7. export function consumeCausalRequest(file: RegisterFile, request: CausalRequest): void {
    8. request.consumed = true;↑ the request is marked as answered
    9. recordTransition(file, "cellspace", "REQUESTS", "consume-request", { uid: request.uid });↑ the change is written into the journal
    10. }

    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)

  3. 194CellSpace records the assessmentCELL.STATE,CELL.ASSESSMENT · record-assessment

    a wave is settlingengine: working on #34membrane: waiting at #34

    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. #29readiness
    31. #30the private result
    32. #31the result, marked
    33. #32readiness
    34. #33a request: assess
    35. #34assessment proposedengine · workingmembrane
    36. end of the log
    cellspace/cell:cell@20
    Whatbeforeafter
    state“awaiting_assessment”“ready_for_review”
    assessedOffsetnone34
    aggregatenone0.9

    CellSpace records the grades against the charter and computes the overall grade itself — 0.9 — never trusting a proposal's own. The Cell is ready for review: a person must judge.

    Where it happens recordCellAssessment()Vol. 12 §5.4

    Records a Cell's assessment with the overall grade CellSpace computed itself, and moves the Cell to ready for review.

    Specification
    Vol. 12 §5.4
    Code
    recordCellAssessment() in core/registers/record-cell-assessment.ts, line 16: the Cell now waits for a person
    Journal
    #34 · CELL.STATE,CELL.ASSESSMENT · record-assessment · state: ready_for_review, aggregate: 0.9 · by cellspace
    Picture
    state: “awaiting_assessment” → “ready_for_review”
    core/registers/record-cell-assessment.ts · build 043cc8b
    1. // The assessment transition (Vol. 12 §5.4): a valid independent proposal
    2. // moves the Cell to `ready_for_review`, carrying the offset of the proposal
    3. // and the aggregate recomputed from the Charter's weights — model-supplied
    4. // aggregates are ignored data; the recomputation happens at the station,
    5. // never here.
    6. import type { CellRegisters } from "./cell-registers";
    7. import type { RegisterFile } from "./register-file";
    8. import { recordTransition } from "./record-transition";
    9. export function recordCellAssessment(
    10. file: RegisterFile,
    11. cell: CellRegisters,
    12. assessment: { proposalOffset: number; aggregate: number }
    13. ): void {
    14. cell.state = "ready_for_review";↑ the Cell now waits for a person
    15. cell.assessedOffset = assessment.proposalOffset;
    16. cell.aggregate = assessment.aggregate;↑ the overall grade, computed by CellSpace
    17. recordTransition(file, `cellspace/cell:${cell.cellRef}`, "CELL.STATE,CELL.ASSESSMENT", "record-assessment", {↑ the change is written into the journal
    18. state: cell.state,
    19. aggregate: assessment.aggregate
    20. });
    21. }

    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)

  4. 195The assessment's mark enters as #35LOG · append

    a wave is settlingengine: working on #34membrane: waiting at #34

    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. #29readiness
    31. #30the private result
    32. #31the result, marked
    33. #32readiness
    34. #33a request: assess
    35. #34assessment proposedengine · workingmembrane
    36. #35the Cell assessednew
    37. end of the log
    The log
    Whatbeforeafter
    records in the log3536
    #35—the Cell assessed · cell.assessed

    The public mark, cell.assessed — the criteria, the grades and the overall grade — is written at the end of the log as #35.

    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
    #34 · LOG · append · offset: 35, kind: domain.fact · by engine
    Picture
    records in the log: 35 → 36
    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 #34

  1. 197The membrane passes #34MEMBRANE.CURSOR · sweep

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

    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. #29readiness
    31. #30the private result
    32. #31the result, marked
    33. #32readiness
    34. #33a request: assess
    35. #34assessment proposedmembrane · passing
    36. #35the Cell assessed
    37. end of the logengine
    The membrane
    Whatbeforeafter
    pointer — the next record to pass#34#35

    #34 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
    #34 · MEMBRANE.CURSOR · sweep · offset: 34 · by membrane
    Picture
    pointer — the next record to pass: #34 → #35
    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)

Choose a step in the stack — or press →.

A fact: an assessment, proposed

The world's answer to the evaluator: for each criterion a grade, a reason and evidence — a proposal only. The stand-in here grades every criterion 0.9, which says only that a result exists.

#34domain.factcell.assessment.proposed the world

envelope
offset34Its 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.
kinddomain.factWhich of the four kinds of record the machine knows. The kind decides what the payload holds.
keyfragment-one-cellThis session's lane.
payload
factTypecell.assessment.proposedThe type the evaluator asked for.
payload.data
bindIdadmit.note.gate--l1.seeking.evaluatorThe doer that asked — the evaluator.
uidadmit.note.gate--l1.seeking.evaluator#1Its intention's name, returned.
payload.data.result
cellRefcell@20The Cell assessed.
criteria×2Per criterion: its id, a grade, a reason, and where the evidence stands in the log.
risks×0Risks seen — none.
openQuestions×0Questions left open — none.
recommendationacceptWhat the assessment recommends: accept.

end · #34

In the specificationVol. 03 §1Vol. 03 §5Vol. 04 §5.3Vol. 12 §5.4

Names it shares with other records

The record as the machine keeps it
{
 "offset": 34,
 "kind": "domain.fact",
 "key": "fragment-one-cell",
 "payload": {
  "factType": "cell.assessment.proposed",
  "data": {
   "bindId": "admit.note.gate--l1.seeking.evaluator",
   "uid": "admit.note.gate--l1.seeking.evaluator#1",
   "result": {
    "cellRef": "cell@20",
    "criteria": [
     {
      "id": "q1",
      "grade": 0.9,
      "rationale": "the result carries substance for this criterion (deterministic ceremony)",
      "evidenceRefs": [
       30
      ]
     },
     {
      "id": "q2",
      "grade": 0.9,
      "rationale": "the result carries substance for this criterion (deterministic ceremony)",
      "evidenceRefs": [
       30
      ]
     }
    ],
    "risks": [],
    "openQuestions": [],
    "recommendation": "accept"
   }
  }
 }
}