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
when the engine took #34
192The engine takes #34ENGINE.CURSOR · propagate
a wave is settlingengine: working on #34membrane: waiting at #34
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
- end of the log
The engine What before after pointer — the next record to take #34 #35 The engine moves on to #34, the proposed assessment.
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
- #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// 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)
193The request is closedREQUESTS · consume-request
a wave is settlingengine: working on #34membrane: waiting at #34
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
- 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.1Closes 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()incore/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// REQUESTS consumption (Vol. 12 §5.1): the first proposal or failure over a// causal request is terminal for it — a correlation spends exactly once,// even when what it bought was a rejection.import type { CausalRequest } from "../cells/gate";import type { RegisterFile } from "./register-file";import { recordTransition } from "./record-transition";export function consumeCausalRequest(file: RegisterFile, request: CausalRequest): void {request.consumed = true;↑ the request is marked as answeredrecordTransition(file, "cellspace", "REQUESTS", "consume-request", { uid: request.uid });↑ 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)
194CellSpace records the assessmentCELL.STATE,CELL.ASSESSMENT · record-assessment
a wave is settlingengine: working on #34membrane: waiting at #34
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
- end of the log
cellspace/cell:cell@20 What before after state “awaiting_assessment” “ready_for_review” assessedOffset none 34 aggregate none 0.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.4Records 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()incore/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// The assessment transition (Vol. 12 §5.4): a valid independent proposal// moves the Cell to `ready_for_review`, carrying the offset of the proposal// and the aggregate recomputed from the Charter's weights — model-supplied// aggregates are ignored data; the recomputation happens at the station,// never here.import type { CellRegisters } from "./cell-registers";import type { RegisterFile } from "./register-file";import { recordTransition } from "./record-transition";export function recordCellAssessment(file: RegisterFile,cell: CellRegisters,assessment: { proposalOffset: number; aggregate: number }): void {cell.state = "ready_for_review";↑ the Cell now waits for a personcell.assessedOffset = assessment.proposalOffset;cell.aggregate = assessment.aggregate;↑ the overall grade, computed by CellSpacerecordTransition(file, `cellspace/cell:${cell.cellRef}`, "CELL.STATE,CELL.ASSESSMENT", "record-assessment", {↑ the change is written into the journalstate: cell.state,aggregate: assessment.aggregate});}
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)
195The assessment's mark enters as #35LOG · append
a wave is settlingengine: working on #34membrane: waiting at #34
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 assessednew
- end of the log
The log What before after records in the log 35 36 #35 — the Cell assessed · cell.assessedThe 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 §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
- #34 ·
LOG · append· offset: 35, kind: domain.fact · by engine - Picture
- records in the log: 35 → 36
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 #34
197The membrane passes #34MEMBRANE.CURSOR · sweep
a wave is settlingengine: at the endmembrane: passing #34
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
- end of the log
The membrane What before after 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 §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
- #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// 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: 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 | |
|---|---|
offset | 34Its 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.assessment.proposedThe type the evaluator asked for. |
| payload.data | |
bindId | admit.note.gate--l1.seeking.evaluatorThe doer that asked — the evaluator. |
uid | admit.note.gate--l1.seeking.evaluator#1Its intention's name, returned. |
| payload.data.result | |
cellRef | cell@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. |
recommendation | acceptWhat 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
admit.note.gate--l1.seeking.evaluator— also on #9 doer: the evaluator, #33 a request: assessadmit.note.gate--l1.seeking.evaluator#1— also on #33 a request: assess
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"
}
}
}
}