{
 "contract": "lab-fragment@2",
 "kind": "fragment",
 "layout": "docks",
 "slug": "one-crossing",
 "order": 2,
 "path": "/fragments/one-crossing/",
 "short": "Fragment 2",
 "title": "One listener, one doer, one crossing — a fragment of the machine",
 "heading": "One listener, one doer, one crossing",
 "kicker": "Fragment 2 · one knot · one bind · one crossing",
 "description": "The smallest run in which the machine asks the world: a listener hears a note, a doer turns it into a request, and the answer comes back as a record.",
 "standfirst": "The first fragment's listener, and a doer that does not act by itself: it asks. The request leaves the machine as a record of its own log, the world answers, and the answer comes back as a record too — joined to the request by the same two names.",
 "see": [
  "How the machine asks the world: the doer writes a request into its own log, the membrane hands it out, and the answer comes back as a record.",
  "Every change of its state, before and after, in the order it happened — 37 of them.",
  "The 17 functions that made those changes — three of them new since the first fragment: the membrane's hand-out and its return."
 ],
 "words": [
  {
   "term": "log",
   "plain": "The list of records the machine keeps. Records are only added at the end; nothing in it is ever changed."
  },
  {
   "term": "record",
   "plain": "One line of the log, numbered from #0. The specification calls it a tuple."
  },
  {
   "term": "wave",
   "plain": "Everything that happens between two quiet moments: something is added at the door, and the machine reacts until nothing is left to do."
  },
  {
   "term": "engine",
   "plain": "Takes each new record in turn and lets the machine react to it. Its pointer never goes back."
  },
  {
   "term": "membrane",
   "plain": "The machine's edge. After the engine, it passes over every new record and hands anything addressed to the outside world to it."
  },
  {
   "term": "register",
   "plain": "A named place where the machine keeps part of its state between records. The specification names every one (Vol. 02 §4)."
  },
  {
   "term": "station",
   "plain": "A part of the machine that owns some registers: the engine, the membrane, a listener, a doer."
  },
  {
   "term": "journal of changes",
   "plain": "The machine's own record of every write to a register, with the function that made it. Not to be confused with a journal knot, a pattern of the specification."
  },
  {
   "term": "listener",
   "machine": "knot",
   "plain": "Waits for facts of the kinds it was told to hear, keeps them in slots, and announces when it has enough."
  },
  {
   "term": "slot",
   "plain": "A named place in a listener where a heard value is kept."
  },
  {
   "term": "lane",
   "plain": "A listener or a doer keeps a separate lane for every key, so that different conversations never mix. Here the key is this session."
  },
  {
   "term": "readiness",
   "plain": "A listener's announcement that it has enough — itself a new record in the log."
  },
  {
   "term": "doer",
   "machine": "bind",
   "plain": "Waits for the listeners it depends on, then acts once."
  },
  {
   "term": "rendezvous",
   "plain": "A doer's gathering place: which listeners have spoken, and what they said."
  },
  {
   "term": "intention",
   "plain": "What a doer sets out to do, under a unique name, so that its result can be traced back to it."
  },
  {
   "term": "the world",
   "plain": "Everything outside the machine. The machine never calls it: it writes what it wants into its own log, and what the world answers comes back as a record."
  },
  {
   "term": "request",
   "plain": "What a doer writes into the log when it needs the world: what to do, about what, and in which shape the answer must come. The specification calls it a service request."
  },
  {
   "term": "controller",
   "plain": "The world's only station. It claims a request by its shape, does what is asked, and its answer comes back through the membrane as a record. Here it is a stand-in that answers in the right shape and names itself."
  },
  {
   "term": "answer",
   "plain": "What the world returns, written into the log under the type the doer asked for, carrying the doer's name and the intention's name — so that the request and its answer stay joined."
  }
 ],
 "recording": {
  "store": "fragment-one-crossing-det",
  "recordedOn": "2026-09-22",
  "watermark": 6,
  "machineClass": "deterministic",
  "inference": "none — the world here is the schema double, the deterministic class's stand-in: it answers any request that carries a shape with a result of that shape that names itself (“[deterministic class] answer · from: …”). No model was asked. The log reads the same as it would with a model behind the membrane; only the answer's words differ",
  "evaluator": "none — no Cell, nothing is assessed",
  "surface": "the door of the garden's deterministic stand (port 3313), by hand: the two records through `records`, the note through `facts`",
  "programme": "none — two records sown by hand; that is the template",
  "build": "043cc8b",
  "walker": "run by an AI assistant (Claude Fable 5.1) on 22 September 2026; the notes of this form written by Claude Opus 5.5 on 27 September, checked against the journal; the code is taken by the instrument, never typed",
  "note": "The same template was first run on the semantic stand (store fragment-one-crossing, the same day): the request crossed, and the world answered service.failed — the stand's cloud credentials had expired. That run is kept on disk as evidence and is not shown; a semantic re-recording needs the owner's re-authentication and nothing else."
 },
 "publish": {
  "journal": "code",
  "licence": "AGPL-3.0-only"
 },
 "build": {
  "commit": "043cc8b04592aa432e6d4ac2546b8c3c7f3034b3",
  "short": "043cc8b",
  "date": "2026-09-21T20:51:22+03:00",
  "subject": "add: sites family info"
 },
 "totals": {
  "records": 6,
  "entries": 37,
  "waves": 2,
  "functions": 17,
  "points": 19,
  "opPoints": 38,
  "opFunctions": 31
 },
 "primer": null,
 "waves": [
  {
   "id": "the-template",
   "n": 1,
   "slug": "the-template",
   "short": "Wave 1",
   "title": "Wave 1 · The template",
   "description": "Two records are added at the door — a listener and a doer that will ask the world. The machine reads them and sets itself up; nothing else happens yet.",
   "intro": "Two records are added at the door: the first fragment's listener, and a doer that does not act by itself — it asks. The machine reads them and sets itself up.",
   "reached": "The machine now has one listener and one doer, both waiting. The doer's question is stored with it, not yet asked.",
   "path": "/fragments/one-crossing/the-template/",
   "steps": [
    "wave-2/1",
    "wave-2/4"
   ],
   "tuples": [
    0,
    1
   ],
   "parts": [],
   "arrived": [
    0,
    1
   ],
   "written": []
  },
  {
   "id": "the-run",
   "n": 2,
   "slug": "the-run",
   "short": "Wave 2",
   "title": "Wave 2 · A note, a request, an answer",
   "description": "One note at the door. The listener becomes ready, the doer asks the world, the membrane hands the request out, and the answer comes back as a record.",
   "intro": "One note is added at the door. The machine reacts on its own — out through the membrane and back — until nothing is left to do.",
   "reached": "Three records the machine and the world wrote on their own: the listener's readiness (#3), the doer's request (#4) and the world's answer (#5), joined to the request by the name note.ask#1. Then quiet.",
   "path": "/fragments/one-crossing/the-run/",
   "steps": [
    "wave-6/1",
    "wave-6/3"
   ],
   "tuples": [
    2,
    3,
    4,
    5
   ],
   "parts": [],
   "arrived": [
    2
   ],
   "written": [
    3,
    4,
    5
   ]
  }
 ],
 "tuples": [
  {
   "o": 0,
   "kind": "sys.knot.defined",
   "factType": null,
   "id": "note.gate",
   "label": "a listener",
   "title": "#0 · a listener is described",
   "plain": "When the engine takes it, the machine stores the listener under its name and gives it a trial lane. The membrane passes it: nothing for the world.",
   "record": "Record #0 describes a listener named note.gate — the first fragment's listener, unchanged: it hears facts of type note.given, keeps their text in a slot named note, and is ready as soon as that slot is filled.",
   "slug": "the-knot",
   "payload": {
    "id": "note.gate",
    "strategy": "deterministic",
    "config": {
     "meta": {
      "title": "A note",
      "gloss": "One knot: it hears a note and is ready as soon as it has one.",
      "fields": [
       {
        "name": "text",
        "label": "A note, in your words",
        "kind": "text",
        "for": "note"
       }
      ]
     },
     "wind": {
      "collect": [
       {
        "as": "note",
        "match_type": "note.given",
        "reduce": "latest",
        "field": "text"
       }
      ]
     },
     "condition": "note != null"
    }
   },
   "wave": 0,
   "causedBy": {
    "via": "door",
    "address": "wave-2/2",
    "step": 2
   },
   "produced": [],
   "handed": [],
   "related": [
    {
     "name": "note.gate",
     "offsets": [
      3
     ]
    }
   ],
   "path": "/fragments/one-crossing/the-template/the-knot/",
   "mapPath": "/fragments/one-crossing/the-template/the-knot/#on-the-map",
   "origin": {
    "actor": "person",
    "via": "door",
    "sentence": "The fragment's author added it at the door: the first half of the template.",
    "step": {
     "n": 2,
     "path": "/fragments/one-crossing/the-template/the-knot/change-1/"
    },
    "took": null
   },
   "card": {
    "of": "sys.knot.defined",
    "title": "A listener's definition",
    "plain": "Brings a listener into the machine: its name, how it decides it is ready, what it collects into which slot, and the condition that makes it ready. The machine reads it once and sets the listener up; from then on the listener hears every matching fact. In a finished figure a loader writes it; here the fragment's author wrote it straight into the log — a liberty of this laboratory machine.",
    "spec": [
     {
      "label": "Vol. 03 §1",
      "href": "/specification/vol-03-wave-log/#1-the-envelope"
     },
     {
      "label": "Vol. 03 §2",
      "href": "/specification/vol-03-wave-log/#2-envelope-kinds"
     },
     {
      "label": "Vol. 03 §5",
      "href": "/specification/vol-03-wave-log/#5-keys-attribution-lanes"
     },
     {
      "label": "Vol. 04 §2.1",
      "href": "/specification/vol-04-tuple-reference/#21-sysknotdefined"
     },
     {
      "label": "Vol. 05 §3",
      "href": "/specification/vol-05-activation-knots/#3-collection-rules-shared-by-both-strategies"
     },
     {
      "label": "Vol. 05 §4",
      "href": "/specification/vol-05-activation-knots/#4-the-deterministic-strategy"
     }
    ],
    "rows": [
     {
      "path": "offset",
      "group": null,
      "label": "offset",
      "text": "0",
      "ink": "machine",
      "meaning": "Its 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."
     },
     {
      "path": "kind",
      "group": null,
      "label": "kind",
      "text": "sys.knot.defined",
      "ink": "machine",
      "meaning": "Which of the four kinds of record the machine knows. The kind decides what the payload holds."
     },
     {
      "path": "key",
      "group": null,
      "label": "key",
      "text": "∅",
      "ink": "quiet",
      "meaning": "No lane (∅): a definition belongs to the whole machine, not to one lane."
     },
     {
      "path": "payload.id",
      "group": "payload",
      "label": "id",
      "text": "note.gate",
      "ink": "machine",
      "meaning": "The listener's name, unique in this machine."
     },
     {
      "path": "payload.strategy",
      "group": "payload",
      "label": "strategy",
      "text": "deterministic",
      "ink": "machine",
      "meaning": "How it decides it is ready. Deterministic: by a plain condition over its slots — nothing is asked of the world."
     },
     {
      "path": "payload.config.condition",
      "group": "payload.config",
      "label": "condition",
      "text": "«note != null»",
      "ink": "quote",
      "meaning": "When it is ready: as soon as the slot note holds something."
     },
     {
      "path": "payload.config.meta",
      "group": "payload.config",
      "label": "meta",
      "text": "title · gloss · fields ×1",
      "ink": "quiet",
      "meaning": "Words for people — a title, a gloss, the field a person fills. The machine's own parts never read them; only the screens do."
     },
     {
      "path": "payload.config.wind.collect[0].as",
      "group": "payload.config.wind.collect[0]",
      "label": "as",
      "text": "note",
      "ink": "machine",
      "meaning": "The name of the slot the heard value goes into."
     },
     {
      "path": "payload.config.wind.collect[0].match_type",
      "group": "payload.config.wind.collect[0]",
      "label": "match_type",
      "text": "note.given",
      "ink": "machine",
      "meaning": "The type of fact it hears."
     },
     {
      "path": "payload.config.wind.collect[0].reduce",
      "group": "payload.config.wind.collect[0]",
      "label": "reduce",
      "text": "latest",
      "ink": "machine",
      "meaning": "Which value the slot keeps. Latest: the newest replaces the one before."
     },
     {
      "path": "payload.config.wind.collect[0].field",
      "group": "payload.config.wind.collect[0]",
      "label": "field",
      "text": "text",
      "ink": "machine",
      "meaning": "Which field of the heard fact goes into the slot."
     }
    ]
   },
   "groups": [
    {
     "group": "arrived",
     "title": "when it came in at the door",
     "steps": [
      "wave-2/2"
     ]
    },
    {
     "group": "engine",
     "title": "when the engine took #0",
     "steps": [
      "0/1",
      "0/2",
      "0/3"
     ]
    },
    {
     "group": "membrane",
     "title": "when the membrane passed #0",
     "steps": [
      "0/4"
     ]
    }
   ]
  },
  {
   "o": 1,
   "kind": "sys.descriptor.defined",
   "factType": null,
   "id": "note.ask",
   "label": "a doer that asks",
   "title": "#1 · a doer that asks is described",
   "plain": "When the engine takes it, the machine stores the doer under its name and notes whom it waits for; what it will ask is stored with it, untouched until it acts. The membrane passes it.",
   "record": "Record #1 describes a doer named note.ask: once the listener note.gate is ready, it asks the world to answer the note in one plain sentence — in a set shape (one text field, answer), to be written as note.answered. It has no local action.",
   "slug": "the-bind",
   "payload": {
    "id": "note.ask",
    "meta": {
     "title": "The note, answered by the world",
     "gloss": "One bind: when the knot is ready it asks the world to answer the note — a service request crosses the membrane, and the answer comes back as a fact."
    },
    "operator": {
     "on": "note.gate",
     "service": {
      "instruction": "Answer the note in one plain sentence.",
      "schema": {
       "type": "object",
       "properties": {
        "answer": {
         "type": "string"
        }
       },
       "required": [
        "answer"
       ]
      },
      "emit": {
       "writes": "note.answered"
      }
     }
    }
   },
   "wave": 0,
   "causedBy": {
    "via": "door",
    "address": "wave-2/3",
    "step": 3
   },
   "produced": [],
   "handed": [],
   "related": [
    {
     "name": "note.ask",
     "offsets": [
      4,
      5
     ]
    }
   ],
   "path": "/fragments/one-crossing/the-template/the-bind/",
   "mapPath": "/fragments/one-crossing/the-template/the-bind/#on-the-map",
   "origin": {
    "actor": "person",
    "via": "door",
    "sentence": "The fragment's author added it at the door, right after the listener — the second half of the template.",
    "step": {
     "n": 3,
     "path": "/fragments/one-crossing/the-template/the-bind/change-1/"
    },
    "took": null
   },
   "card": {
    "of": "sys.descriptor.defined",
    "title": "A doer's definition",
    "plain": "Brings a doer into the machine: its name, the listener it waits for, and what it does once that listener is ready. This doer has no local action: what it does is ask the world. Its instruction, the shape the answer must have and the type the answer will be written as are its whole contract — it never learns who answers.",
    "spec": [
     {
      "label": "Vol. 03 §1",
      "href": "/specification/vol-03-wave-log/#1-the-envelope"
     },
     {
      "label": "Vol. 03 §2",
      "href": "/specification/vol-03-wave-log/#2-envelope-kinds"
     },
     {
      "label": "Vol. 03 §5",
      "href": "/specification/vol-03-wave-log/#5-keys-attribution-lanes"
     },
     {
      "label": "Vol. 04 §2.2",
      "href": "/specification/vol-04-tuple-reference/#22-sysdescriptordefined"
     },
     {
      "label": "Vol. 06 §3",
      "href": "/specification/vol-06-bind-descriptors/#3-operator-bind-action-operator"
     }
    ],
    "rows": [
     {
      "path": "offset",
      "group": null,
      "label": "offset",
      "text": "1",
      "ink": "machine",
      "meaning": "Its 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."
     },
     {
      "path": "kind",
      "group": null,
      "label": "kind",
      "text": "sys.descriptor.defined",
      "ink": "machine",
      "meaning": "Which of the four kinds of record the machine knows. The kind decides what the payload holds."
     },
     {
      "path": "key",
      "group": null,
      "label": "key",
      "text": "∅",
      "ink": "quiet",
      "meaning": "No lane (∅): a definition belongs to the whole machine, not to one lane."
     },
     {
      "path": "payload.id",
      "group": "payload",
      "label": "id",
      "text": "note.ask",
      "ink": "machine",
      "meaning": "The doer's name, unique in this machine."
     },
     {
      "path": "payload.meta",
      "group": "payload",
      "label": "meta",
      "text": "title · gloss",
      "ink": "quiet",
      "meaning": "Words for people — a title and a gloss. The machine's own parts never read them; only the screens do."
     },
     {
      "path": "payload.operator.on",
      "group": "payload.operator",
      "label": "on",
      "text": "note.gate",
      "ink": "machine",
      "meaning": "The listener it waits for. When that listener is ready, the doer acts."
     },
     {
      "path": "payload.operator.service.instruction",
      "group": "payload.operator.service",
      "label": "instruction",
      "text": "«Answer the note in one plain sentence.»",
      "ink": "quote",
      "meaning": "What it asks the world to do, in words."
     },
     {
      "path": "payload.operator.service.schema",
      "group": "payload.operator.service",
      "label": "schema",
      "text": "type · properties · required ×1",
      "ink": "quiet",
      "meaning": "The shape the answer must have: here an object with one text field, answer. An answer of another shape comes back as a failure, never as half an answer."
     },
     {
      "path": "payload.operator.service.emit.writes",
      "group": "payload.operator.service.emit",
      "label": "writes",
      "text": "note.answered",
      "ink": "machine",
      "meaning": "The type the world's answer will be written as."
     }
    ]
   },
   "groups": [
    {
     "group": "arrived",
     "title": "when it came in at the door",
     "steps": [
      "wave-2/3"
     ]
    },
    {
     "group": "engine",
     "title": "when the engine took #1",
     "steps": [
      "1/1",
      "1/2"
     ]
    },
    {
     "group": "membrane",
     "title": "when the membrane passed #1",
     "steps": [
      "1/3"
     ]
    }
   ]
  },
  {
   "o": 2,
   "kind": "domain.fact",
   "factType": "note.given",
   "id": null,
   "label": "a note",
   "title": "#2 · a note arrives",
   "plain": "The listener opens a lane for this session, keeps the note, has what it waits for, empties its slot and announces it — as record #3. On the way, CellSpace sets up its registers.",
   "record": "Record #2 is a fact of type note.given. Its text asks the fragment's own question: “Is a request to the world a record of the log, or something outside it?” Its key is this session.",
   "slug": "the-note-arrives",
   "payload": {
    "factType": "note.given",
    "data": {
     "text": "Is a request to the world a record of the log, or something outside it?"
    }
   },
   "wave": 1,
   "causedBy": {
    "via": "door",
    "address": "wave-6/2",
    "step": 13
   },
   "produced": [
    {
     "offset": 3,
     "label": "readiness",
     "kind": "sys.knot.ready",
     "factType": null,
     "via": "propagation",
     "address": "2/6"
    }
   ],
   "handed": [],
   "related": [],
   "path": "/fragments/one-crossing/the-run/the-note-arrives/",
   "mapPath": "/fragments/one-crossing/the-run/the-note-arrives/#on-the-map",
   "origin": {
    "actor": "person",
    "via": "door",
    "sentence": "A person gave it at the door: the only thing a person adds in this wave.",
    "step": {
     "n": 13,
     "path": "/fragments/one-crossing/the-run/the-note-arrives/change-1/"
    },
    "took": null
   },
   "card": {
    "of": "domain.fact:note.given",
    "title": "A fact: a note given at the door",
    "plain": "A fact is anything said to the machine or by it. Its fact type, note.given, is how listeners recognise it; its data holds the note's words. A listener told to hear note.given keeps those words in a slot.",
    "spec": [
     {
      "label": "Vol. 03 §1",
      "href": "/specification/vol-03-wave-log/#1-the-envelope"
     },
     {
      "label": "Vol. 03 §2",
      "href": "/specification/vol-03-wave-log/#2-envelope-kinds"
     },
     {
      "label": "Vol. 03 §5",
      "href": "/specification/vol-03-wave-log/#5-keys-attribution-lanes"
     },
     {
      "label": "Vol. 04 §3.1",
      "href": "/specification/vol-04-tuple-reference/#31-pipeline-facts"
     },
     {
      "label": "Vol. 07 §6",
      "href": "/specification/vol-07-membrane-and-controllers/#6-ingress"
     }
    ],
    "rows": [
     {
      "path": "offset",
      "group": null,
      "label": "offset",
      "text": "2",
      "ink": "machine",
      "meaning": "Its 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."
     },
     {
      "path": "kind",
      "group": null,
      "label": "kind",
      "text": "domain.fact",
      "ink": "machine",
      "meaning": "Which of the four kinds of record the machine knows. The kind decides what the payload holds."
     },
     {
      "path": "key",
      "group": null,
      "label": "key",
      "text": "fragment-one-crossing-det",
      "ink": "machine",
      "meaning": "This session's lane: every note on it goes to the same lane of each listener."
     },
     {
      "path": "payload.factType",
      "group": "payload",
      "label": "factType",
      "text": "note.given",
      "ink": "machine",
      "meaning": "The fact type — the name listeners match on."
     },
     {
      "path": "payload.data.text",
      "group": "payload.data",
      "label": "text",
      "text": "«Is a request to the world a record of the log, or something outside it?»",
      "ink": "quote",
      "meaning": "The note's words."
     }
    ]
   },
   "groups": [
    {
     "group": "arrived",
     "title": "when it came in at the door",
     "steps": [
      "wave-6/2"
     ]
    },
    {
     "group": "engine",
     "title": "when the engine took #2",
     "steps": [
      "2/1",
      "2/2",
      "2/3",
      "2/4",
      "2/5",
      "2/6"
     ]
    },
    {
     "group": "membrane",
     "title": "when the membrane passed #2",
     "steps": [
      "2/7"
     ]
    }
   ]
  },
  {
   "o": 3,
   "kind": "sys.knot.ready",
   "factType": null,
   "id": "note.gate",
   "label": "readiness",
   "title": "#3 · the listener is ready, the doer asks",
   "plain": "The doer note.ask was waiting for it: it opens its rendezvous and a lane, gathers what the listener understood, acts once, names its intention note.ask#1 — and, having no local action, writes a request as #4.",
   "record": "Record #3 says: the listener note.gate is ready. What it understood: note = “Is a request to the world a record of the log, or something outside it?”",
   "slug": "the-knot-is-ready",
   "payload": {
    "knotId": "note.gate",
    "understanding": {
     "note": "Is a request to the world a record of the log, or something outside it?"
    }
   },
   "wave": 1,
   "causedBy": {
    "via": "propagation",
    "offset": 2,
    "address": "2/6",
    "step": 19
   },
   "produced": [
    {
     "offset": 4,
     "label": "a request",
     "kind": "domain.fact",
     "factType": "service.request",
     "via": "propagation",
     "address": "3/7"
    }
   ],
   "handed": [],
   "related": [
    {
     "name": "note.gate",
     "offsets": [
      0
     ]
    }
   ],
   "path": "/fragments/one-crossing/the-run/the-knot-is-ready/",
   "mapPath": "/fragments/one-crossing/the-run/the-knot-is-ready/#on-the-map",
   "origin": {
    "actor": "machine",
    "via": "propagation",
    "sentence": "The machine wrote it while the engine took #2: the listener note.gate had what it waited for and became ready.",
    "step": {
     "n": 19,
     "path": "/fragments/one-crossing/the-run/the-note-arrives/change-7/"
    },
    "took": {
     "o": 2,
     "path": "/fragments/one-crossing/the-run/the-note-arrives/"
    }
   },
   "card": {
    "of": "sys.knot.ready",
    "title": "A listener's readiness",
    "plain": "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 — taken before the slot is emptied, and written before any doer acts.",
    "spec": [
     {
      "label": "Vol. 03 §1",
      "href": "/specification/vol-03-wave-log/#1-the-envelope"
     },
     {
      "label": "Vol. 03 §2",
      "href": "/specification/vol-03-wave-log/#2-envelope-kinds"
     },
     {
      "label": "Vol. 03 §5",
      "href": "/specification/vol-03-wave-log/#5-keys-attribution-lanes"
     },
     {
      "label": "Vol. 04 §2.3",
      "href": "/specification/vol-04-tuple-reference/#23-sysknotready"
     }
    ],
    "rows": [
     {
      "path": "offset",
      "group": null,
      "label": "offset",
      "text": "3",
      "ink": "machine",
      "meaning": "Its 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."
     },
     {
      "path": "kind",
      "group": null,
      "label": "kind",
      "text": "sys.knot.ready",
      "ink": "machine",
      "meaning": "Which of the four kinds of record the machine knows. The kind decides what the payload holds."
     },
     {
      "path": "key",
      "group": null,
      "label": "key",
      "text": "fragment-one-crossing-det",
      "ink": "machine",
      "meaning": "The lane of the note that made the listener ready."
     },
     {
      "path": "payload.knotId",
      "group": "payload",
      "label": "knotId",
      "text": "note.gate",
      "ink": "machine",
      "meaning": "The listener that is ready."
     },
     {
      "path": "payload.understanding.note",
      "group": "payload.understanding",
      "label": "note",
      "text": "«Is a request to the world a record of the log, or something outside it?»",
      "ink": "quote",
      "meaning": "What it understood: the value of its slot note at that moment."
     }
    ]
   },
   "groups": [
    {
     "group": "engine",
     "title": "when the engine took #3",
     "steps": [
      "3/1",
      "3/2",
      "3/3",
      "3/4",
      "3/5",
      "3/6",
      "3/7"
     ]
    },
    {
     "group": "membrane",
     "title": "when the membrane passed #3",
     "steps": [
      "3/8"
     ]
    }
   ]
  },
  {
   "o": 4,
   "kind": "domain.fact",
   "factType": "service.request",
   "id": null,
   "label": "a request",
   "title": "#4 · the request crosses the membrane",
   "plain": "CellSpace indexes it under its name. When the membrane passes it, a controller claims it by its shape; the runtime hands it out and waits; the world answers once, and the answer enters the log as #5.",
   "record": "Record #4 is a request to the world, written by the doer note.ask under the name note.ask#1: what to do (answer the note in one plain sentence), about what (what the listener understood), in which shape, and as which type — note.answered.",
   "slug": "the-request-crosses",
   "payload": {
    "factType": "service.request",
    "data": {
     "bindId": "note.ask",
     "uid": "note.ask#1",
     "instruction": "Answer the note in one plain sentence.",
     "scope": {
      "activation": {
       "note": "Is a request to the world a record of the log, or something outside it?"
      }
     },
     "schema": {
      "type": "object",
      "properties": {
       "answer": {
        "type": "string"
       }
      },
      "required": [
       "answer"
      ]
     },
     "emit": {
      "writes": "note.answered"
     }
    }
   },
   "wave": 1,
   "causedBy": {
    "via": "propagation",
    "offset": 3,
    "address": "3/7",
    "step": 26
   },
   "produced": [
    {
     "offset": 5,
     "label": "the answer",
     "kind": "domain.fact",
     "factType": "note.answered",
     "via": "discharge",
     "address": "4/6"
    }
   ],
   "handed": [
    {
     "controller": "controller.schema.double",
     "id": 1,
     "address": "4/4",
     "answered": [
      5
     ]
    }
   ],
   "related": [
    {
     "name": "note.ask",
     "offsets": [
      1,
      5
     ]
    },
    {
     "name": "note.ask#1",
     "offsets": [
      5
     ]
    }
   ],
   "path": "/fragments/one-crossing/the-run/the-request-crosses/",
   "mapPath": "/fragments/one-crossing/the-run/the-request-crosses/#on-the-map",
   "origin": {
    "actor": "machine",
    "via": "propagation",
    "sentence": "The machine wrote it while the engine took #3: the doer note.ask acted — and its act is a request.",
    "step": {
     "n": 26,
     "path": "/fragments/one-crossing/the-run/the-knot-is-ready/change-7/"
    },
    "took": {
     "o": 3,
     "path": "/fragments/one-crossing/the-run/the-knot-is-ready/"
    }
   },
   "card": {
    "of": "domain.fact:service.request",
    "title": "A fact: a request to the world",
    "plain": "What a doer writes when it needs the world — complete in itself: what to do, about what, in which shape the answer must come, and under which type it will be written. The membrane hands it to whichever controller claims it; the doer is never told who.",
    "spec": [
     {
      "label": "Vol. 03 §1",
      "href": "/specification/vol-03-wave-log/#1-the-envelope"
     },
     {
      "label": "Vol. 03 §4",
      "href": "/specification/vol-03-wave-log/#4-correlation-identities"
     },
     {
      "label": "Vol. 03 §5",
      "href": "/specification/vol-03-wave-log/#5-keys-attribution-lanes"
     },
     {
      "label": "Vol. 04 §5.1",
      "href": "/specification/vol-04-tuple-reference/#51-servicerequest-service-intention"
     },
     {
      "label": "Vol. 06 §3",
      "href": "/specification/vol-06-bind-descriptors/#3-operator-bind-action-operator"
     },
     {
      "label": "Vol. 07 §4.2",
      "href": "/specification/vol-07-membrane-and-controllers/#42-service-discharge-servicerequest"
     }
    ],
    "rows": [
     {
      "path": "offset",
      "group": null,
      "label": "offset",
      "text": "4",
      "ink": "machine",
      "meaning": "Its 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."
     },
     {
      "path": "kind",
      "group": null,
      "label": "kind",
      "text": "domain.fact",
      "ink": "machine",
      "meaning": "Which of the four kinds of record the machine knows. The kind decides what the payload holds."
     },
     {
      "path": "key",
      "group": null,
      "label": "key",
      "text": "fragment-one-crossing-det",
      "ink": "machine",
      "meaning": "The lane it is asked on — the lane of the readiness that woke the doer. The answer comes back on the same lane."
     },
     {
      "path": "payload.factType",
      "group": "payload",
      "label": "factType",
      "text": "service.request",
      "ink": "machine",
      "meaning": "The fact type, service.request — the shape a controller of this kind claims."
     },
     {
      "path": "payload.data.bindId",
      "group": "payload.data",
      "label": "bindId",
      "text": "note.ask",
      "ink": "machine",
      "meaning": "The doer that asks."
     },
     {
      "path": "payload.data.uid",
      "group": "payload.data",
      "label": "uid",
      "text": "note.ask#1",
      "ink": "machine",
      "meaning": "The intention's name: the doer's name and a number. The answer must carry it back."
     },
     {
      "path": "payload.data.instruction",
      "group": "payload.data",
      "label": "instruction",
      "text": "«Answer the note in one plain sentence.»",
      "ink": "quote",
      "meaning": "What the world is asked to do."
     },
     {
      "path": "payload.data.scope",
      "group": "payload.data",
      "label": "scope",
      "text": "activation",
      "ink": "quiet",
      "meaning": "What it is about: the doer's scope at the moment it acted — here, under activation, what the listener understood."
     },
     {
      "path": "payload.data.schema",
      "group": "payload.data",
      "label": "schema",
      "text": "type · properties · required ×1",
      "ink": "quiet",
      "meaning": "The shape the answer must have."
     },
     {
      "path": "payload.data.emit.writes",
      "group": "payload.data.emit",
      "label": "writes",
      "text": "note.answered",
      "ink": "machine",
      "meaning": "The type the answer will be written as."
     }
    ]
   },
   "groups": [
    {
     "group": "engine",
     "title": "when the engine took #4",
     "steps": [
      "4/1",
      "4/2"
     ]
    },
    {
     "group": "membrane",
     "title": "when the membrane passed #4",
     "steps": [
      "4/3",
      "4/4"
     ]
    },
    {
     "group": "world",
     "title": "when the world answered",
     "steps": [
      "4/5",
      "4/6"
     ]
    }
   ]
  },
  {
   "o": 5,
   "kind": "domain.fact",
   "factType": "note.answered",
   "id": null,
   "label": "the answer",
   "title": "#5 · the world answers, and the machine is quiet",
   "plain": "Nothing was told to hear note.answered, so when the engine takes it nothing changes; the membrane passes it, and the machine is quiet. The request and the answer stand side by side, joined by note.ask#1.",
   "record": "Record #5 is the world's answer, a fact of type note.answered with the request's two names — note.ask and note.ask#1 — and the result in the shape asked for. The stand-in names itself in it; a model would have written a sentence.",
   "slug": "the-world-answers",
   "payload": {
    "factType": "note.answered",
    "data": {
     "bindId": "note.ask",
     "uid": "note.ask#1",
     "result": {
      "answer": "[deterministic class] answer · from: Is a request to the world a record of the log, or something outside it?"
     }
    }
   },
   "wave": 1,
   "causedBy": {
    "via": "discharge",
    "offset": 4,
    "controller": "controller.schema.double",
    "address": "4/6",
    "step": 34
   },
   "produced": [],
   "handed": [],
   "related": [
    {
     "name": "note.ask",
     "offsets": [
      1,
      4
     ]
    },
    {
     "name": "note.ask#1",
     "offsets": [
      4
     ]
    }
   ],
   "path": "/fragments/one-crossing/the-run/the-world-answers/",
   "mapPath": "/fragments/one-crossing/the-run/the-world-answers/#on-the-map",
   "origin": {
    "actor": "world",
    "via": "discharge",
    "sentence": "The world answered through the membrane — the controller controller.schema.double, the deterministic class's stand-in.",
    "step": {
     "n": 34,
     "path": "/fragments/one-crossing/the-run/the-request-crosses/change-6/"
    },
    "took": {
     "o": 4,
     "path": "/fragments/one-crossing/the-run/the-request-crosses/"
    }
   },
   "card": {
    "of": "domain.fact:note.answered",
    "title": "A fact: the world's answer",
    "plain": "What came back through the membrane, written under the type the doer asked for and carrying the doer's name and the intention's name, so that the request and the answer stay joined in the log. It is the world's record, not the doer's.",
    "spec": [
     {
      "label": "Vol. 03 §1",
      "href": "/specification/vol-03-wave-log/#1-the-envelope"
     },
     {
      "label": "Vol. 03 §4",
      "href": "/specification/vol-03-wave-log/#4-correlation-identities"
     },
     {
      "label": "Vol. 03 §5",
      "href": "/specification/vol-03-wave-log/#5-keys-attribution-lanes"
     },
     {
      "label": "Vol. 04 §5.3",
      "href": "/specification/vol-04-tuple-reference/#53-delegated-publication"
     },
     {
      "label": "Vol. 07 §4.2",
      "href": "/specification/vol-07-membrane-and-controllers/#42-service-discharge-servicerequest"
     }
    ],
    "rows": [
     {
      "path": "offset",
      "group": null,
      "label": "offset",
      "text": "5",
      "ink": "machine",
      "meaning": "Its 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."
     },
     {
      "path": "kind",
      "group": null,
      "label": "kind",
      "text": "domain.fact",
      "ink": "machine",
      "meaning": "Which of the four kinds of record the machine knows. The kind decides what the payload holds."
     },
     {
      "path": "key",
      "group": null,
      "label": "key",
      "text": "fragment-one-crossing-det",
      "ink": "machine",
      "meaning": "The lane of the request: the answer comes back on the lane it was asked on."
     },
     {
      "path": "payload.factType",
      "group": "payload",
      "label": "factType",
      "text": "note.answered",
      "ink": "machine",
      "meaning": "The type the doer asked for."
     },
     {
      "path": "payload.data.bindId",
      "group": "payload.data",
      "label": "bindId",
      "text": "note.ask",
      "ink": "machine",
      "meaning": "The doer whose request this answers."
     },
     {
      "path": "payload.data.uid",
      "group": "payload.data",
      "label": "uid",
      "text": "note.ask#1",
      "ink": "machine",
      "meaning": "The intention's name, returned — note.ask#1. It is how the answer finds its request."
     },
     {
      "path": "payload.data.result.answer",
      "group": "payload.data.result",
      "label": "answer",
      "text": "«[deterministic class] answer · from: Is a request to the world a record of the log, or something outside it?»",
      "ink": "quote",
      "meaning": "The answer, in the shape asked for. The stand-in writes what it is and what it answered from."
     }
    ]
   },
   "groups": [
    {
     "group": "engine",
     "title": "when the engine took #5",
     "steps": [
      "5/1"
     ]
    },
    {
     "group": "membrane",
     "title": "when the membrane passed #5",
     "steps": [
      "5/2"
     ]
    }
   ]
  }
 ],
 "changes": {
  "wave-2/1": {
   "address": "wave-2/1",
   "step": 1,
   "of": 37,
   "owner": {
    "wave": 0
   },
   "n": null,
   "ofOwner": null,
   "path": "/fragments/one-crossing/the-template/the-wave-begins/",
   "kind": "wave-begins",
   "offset": null,
   "wave": 0,
   "entry": {
    "phase": "settle",
    "station": "runtime",
    "register": "SETTLING",
    "action": "enter-settle",
    "detail": null,
    "by": "runtime",
    "fn": "markSettling"
   },
   "station": {
    "id": "runtime",
    "name": "The runtime",
    "kind": "runtime",
    "created": false
   },
   "changes": [
    {
     "label": "a wave is settling",
     "before": "no",
     "after": "yes"
    }
   ],
   "log": {
    "size": 0,
    "current": null,
    "added": [],
    "engine": 0,
    "membrane": 0
   },
   "beat": {
    "settling": true,
    "engine": "at the end",
    "membrane": "at the end"
   },
   "note": {
    "title": "A wave begins",
    "plain": "Two records come to the door, so the runtime starts a wave: from now until the machine is quiet, it reacts. It runs one wave at a time."
   }
  },
  "wave-2/2": {
   "address": "wave-2/2",
   "step": 2,
   "of": 37,
   "owner": {
    "tuple": 0,
    "group": "arrived"
   },
   "n": 1,
   "ofOwner": 5,
   "path": "/fragments/one-crossing/the-template/the-knot/change-1/",
   "kind": "door",
   "offset": null,
   "wave": 0,
   "entry": {
    "phase": "ingress",
    "station": "engine",
    "register": "LOG",
    "action": "append",
    "detail": {
     "offset": 0,
     "kind": "sys.knot.defined"
    },
    "by": "engine",
    "fn": "appendEmissions"
   },
   "station": {
    "id": "engine",
    "name": "The engine",
    "kind": "engine",
    "created": false
   },
   "changes": [
    {
     "label": "records in the log",
     "before": "0",
     "after": "1"
    },
    {
     "label": "#0",
     "before": "—",
     "after": "a listener · sys.knot.defined"
    }
   ],
   "log": {
    "size": 1,
    "current": null,
    "added": [
     0
    ],
    "engine": 0,
    "membrane": 0
   },
   "beat": {
    "settling": true,
    "engine": "next: #0",
    "membrane": "waiting at #0"
   },
   "note": {
    "title": "Record #0 enters the log",
    "plain": "The door adds the first record: a description of a listener — the first fragment's listener, unchanged. It gets number #0, the next free place, at the end."
   }
  },
  "wave-2/3": {
   "address": "wave-2/3",
   "step": 3,
   "of": 37,
   "owner": {
    "tuple": 1,
    "group": "arrived"
   },
   "n": 1,
   "ofOwner": 4,
   "path": "/fragments/one-crossing/the-template/the-bind/change-1/",
   "kind": "door",
   "offset": null,
   "wave": 0,
   "entry": {
    "phase": "ingress",
    "station": "engine",
    "register": "LOG",
    "action": "append",
    "detail": {
     "offset": 1,
     "kind": "sys.descriptor.defined"
    },
    "by": "engine",
    "fn": "appendEmissions"
   },
   "station": {
    "id": "engine",
    "name": "The engine",
    "kind": "engine",
    "created": false
   },
   "changes": [
    {
     "label": "records in the log",
     "before": "1",
     "after": "2"
    },
    {
     "label": "#1",
     "before": "—",
     "after": "a doer that asks · sys.descriptor.defined"
    }
   ],
   "log": {
    "size": 2,
    "current": null,
    "added": [
     1
    ],
    "engine": 0,
    "membrane": 0
   },
   "beat": {
    "settling": true,
    "engine": "next: #0",
    "membrane": "waiting at #0"
   },
   "note": {
    "title": "Record #1 enters the log",
    "plain": "The door adds the second record as #1: a description of a doer that will ask the world. The machine has not reacted to either yet."
   }
  },
  "0/1": {
   "address": "0/1",
   "step": 4,
   "of": 37,
   "owner": {
    "tuple": 0,
    "group": "engine"
   },
   "n": 2,
   "ofOwner": 5,
   "path": "/fragments/one-crossing/the-template/the-knot/change-2/",
   "kind": "record",
   "offset": 0,
   "wave": 0,
   "entry": {
    "phase": "propagate",
    "station": "engine",
    "register": "ENGINE.CURSOR",
    "action": "propagate",
    "detail": {
     "offset": 0
    },
    "by": "engine",
    "fn": "takeNextTuple"
   },
   "station": {
    "id": "engine",
    "name": "The engine",
    "kind": "engine",
    "created": false
   },
   "changes": [
    {
     "label": "pointer — the next record to take",
     "before": "#0",
     "after": "#1"
    }
   ],
   "log": {
    "size": 2,
    "current": 0,
    "added": [],
    "engine": 1,
    "membrane": 0
   },
   "beat": {
    "settling": true,
    "engine": "working on #0",
    "membrane": "waiting at #0"
   },
   "note": {
    "title": "The engine takes #0",
    "plain": "The engine's pointer moves past #0, and the machine reacts to it."
   }
  },
  "0/2": {
   "address": "0/2",
   "step": 5,
   "of": 37,
   "owner": {
    "tuple": 0,
    "group": "engine"
   },
   "n": 3,
   "ofOwner": 5,
   "path": "/fragments/one-crossing/the-template/the-knot/change-3/",
   "kind": "change",
   "offset": 0,
   "wave": 0,
   "entry": {
    "phase": "propagate",
    "station": "topology:root",
    "register": "KNOT.DEFS",
    "action": "register-knot",
    "detail": {
     "id": "note.gate",
     "strategy": "deterministic",
     "replaced": false
    },
    "by": "region:root",
    "fn": "registerKnotDefinition"
   },
   "station": {
    "id": "topology:root",
    "name": "The figure",
    "kind": "region",
    "created": false
   },
   "changes": [
    {
     "label": "listener note.gate",
     "before": "—",
     "after": "hears note.given → slot note; ready when note != null"
    }
   ],
   "log": {
    "size": 2,
    "current": 0,
    "added": [],
    "engine": 1,
    "membrane": 0
   },
   "beat": {
    "settling": true,
    "engine": "working on #0",
    "membrane": "waiting at #0"
   },
   "note": {
    "title": "The listener is added to the figure",
    "plain": "The machine writes the listener's description into its list of listeners, under the name note.gate. Nothing was there before under that name."
   }
  },
  "0/3": {
   "address": "0/3",
   "step": 6,
   "of": 37,
   "owner": {
    "tuple": 0,
    "group": "engine"
   },
   "n": 4,
   "ofOwner": 5,
   "path": "/fragments/one-crossing/the-template/the-knot/change-4/",
   "kind": "change",
   "offset": 0,
   "wave": 0,
   "entry": {
    "phase": "propagate",
    "station": "topology:root/clew:note.gate",
    "register": "CLEWS",
    "action": "open-clew",
    "detail": {
     "key": null,
     "probe": true,
     "replaced": false
    },
    "by": "region:root",
    "fn": "registerKnotDefinition"
   },
   "station": {
    "id": "topology:root/clew:note.gate",
    "name": "The listener note.gate",
    "kind": "clew",
    "created": true
   },
   "changes": [
    {
     "label": "lane · trial lane (no key)",
     "before": "—",
     "after": "open"
    }
   ],
   "log": {
    "size": 2,
    "current": 0,
    "added": [],
    "engine": 1,
    "membrane": 0
   },
   "beat": {
    "settling": true,
    "engine": "working on #0",
    "membrane": "waiting at #0"
   },
   "note": {
    "title": "The listener gets a trial lane",
    "plain": "A listener keeps a lane for each conversation. Before any note arrives it gets one trial lane with no key — proof that its description works."
   }
  },
  "1/1": {
   "address": "1/1",
   "step": 7,
   "of": 37,
   "owner": {
    "tuple": 1,
    "group": "engine"
   },
   "n": 2,
   "ofOwner": 4,
   "path": "/fragments/one-crossing/the-template/the-bind/change-2/",
   "kind": "record",
   "offset": 1,
   "wave": 0,
   "entry": {
    "phase": "propagate",
    "station": "engine",
    "register": "ENGINE.CURSOR",
    "action": "propagate",
    "detail": {
     "offset": 1
    },
    "by": "engine",
    "fn": "takeNextTuple"
   },
   "station": {
    "id": "engine",
    "name": "The engine",
    "kind": "engine",
    "created": false
   },
   "changes": [
    {
     "label": "pointer — the next record to take",
     "before": "#1",
     "after": "#2"
    }
   ],
   "log": {
    "size": 2,
    "current": 1,
    "added": [],
    "engine": 2,
    "membrane": 0
   },
   "beat": {
    "settling": true,
    "engine": "working on #1",
    "membrane": "waiting at #0"
   },
   "note": {
    "title": "The engine takes #1",
    "plain": "The engine moves on to #1, and the machine reacts to it."
   }
  },
  "1/2": {
   "address": "1/2",
   "step": 8,
   "of": 37,
   "owner": {
    "tuple": 1,
    "group": "engine"
   },
   "n": 3,
   "ofOwner": 4,
   "path": "/fragments/one-crossing/the-template/the-bind/change-3/",
   "kind": "change",
   "offset": 1,
   "wave": 0,
   "entry": {
    "phase": "propagate",
    "station": "topology:root",
    "register": "BIND.DEFS",
    "action": "register-descriptor",
    "detail": {
     "id": "note.ask",
     "interests": [
      "note.gate"
     ]
    },
    "by": "region:root",
    "fn": "registerDescriptorDefinition"
   },
   "station": {
    "id": "topology:root",
    "name": "The figure",
    "kind": "region",
    "created": false
   },
   "changes": [
    {
     "label": "doer note.ask",
     "before": "—",
     "after": "acts on note.gate; asks the world → note.answered"
    },
    {
     "label": "when note.gate is ready, it wakes",
     "before": "—",
     "after": "note.ask"
    }
   ],
   "log": {
    "size": 2,
    "current": 1,
    "added": [],
    "engine": 2,
    "membrane": 0
   },
   "beat": {
    "settling": true,
    "engine": "working on #1",
    "membrane": "waiting at #0"
   },
   "note": {
    "title": "The doer is added to the figure",
    "plain": "The machine writes the doer's description into its list of doers, and notes that note.ask waits for note.gate. What it will ask the world is stored with it, and not looked at until it acts."
   }
  },
  "0/4": {
   "address": "0/4",
   "step": 9,
   "of": 37,
   "owner": {
    "tuple": 0,
    "group": "membrane"
   },
   "n": 5,
   "ofOwner": 5,
   "path": "/fragments/one-crossing/the-template/the-knot/change-5/",
   "kind": "sweep",
   "offset": 0,
   "wave": 0,
   "entry": {
    "phase": "sweep",
    "station": "membrane",
    "register": "MEMBRANE.CURSOR",
    "action": "sweep",
    "detail": {
     "offset": 0
    },
    "by": "membrane",
    "fn": "sweepNextTuple"
   },
   "station": {
    "id": "membrane",
    "name": "The membrane",
    "kind": "membrane",
    "created": false
   },
   "changes": [
    {
     "label": "pointer — the next record to pass",
     "before": "#0",
     "after": "#1"
    }
   ],
   "log": {
    "size": 2,
    "current": 0,
    "added": [],
    "engine": 2,
    "membrane": 1
   },
   "beat": {
    "settling": true,
    "engine": "at the end",
    "membrane": "passing #0"
   },
   "note": {
    "title": "The membrane passes #0",
    "plain": "With nothing left for the engine to take, the membrane passes over the new records. #0 asks nothing of the world, so its pointer simply moves on."
   }
  },
  "1/3": {
   "address": "1/3",
   "step": 10,
   "of": 37,
   "owner": {
    "tuple": 1,
    "group": "membrane"
   },
   "n": 4,
   "ofOwner": 4,
   "path": "/fragments/one-crossing/the-template/the-bind/change-4/",
   "kind": "sweep",
   "offset": 1,
   "wave": 0,
   "entry": {
    "phase": "sweep",
    "station": "membrane",
    "register": "MEMBRANE.CURSOR",
    "action": "sweep",
    "detail": {
     "offset": 1
    },
    "by": "membrane",
    "fn": "sweepNextTuple"
   },
   "station": {
    "id": "membrane",
    "name": "The membrane",
    "kind": "membrane",
    "created": false
   },
   "changes": [
    {
     "label": "pointer — the next record to pass",
     "before": "#1",
     "after": "#2"
    }
   ],
   "log": {
    "size": 2,
    "current": 1,
    "added": [],
    "engine": 2,
    "membrane": 2
   },
   "beat": {
    "settling": true,
    "engine": "at the end",
    "membrane": "passing #1"
   },
   "note": {
    "title": "The membrane passes #1",
    "plain": "The same for #1: a description asks nothing of the world. Both pointers have now reached the end of the log."
   }
  },
  "wave-2/4": {
   "address": "wave-2/4",
   "step": 11,
   "of": 37,
   "owner": {
    "wave": 0
   },
   "n": null,
   "ofOwner": null,
   "path": "/fragments/one-crossing/the-template/the-wave-ends/",
   "kind": "wave-ends",
   "offset": null,
   "wave": 0,
   "entry": {
    "phase": "settle",
    "station": "runtime",
    "register": "SETTLING",
    "action": "leave-settle",
    "detail": null,
    "by": "runtime",
    "fn": "markSettling"
   },
   "station": {
    "id": "runtime",
    "name": "The runtime",
    "kind": "runtime",
    "created": false
   },
   "changes": [
    {
     "label": "a wave is settling",
     "before": "yes",
     "after": "no"
    }
   ],
   "log": {
    "size": 2,
    "current": null,
    "added": [],
    "engine": 2,
    "membrane": 2
   },
   "beat": {
    "settling": false,
    "engine": "at the end",
    "membrane": "at the end"
   },
   "note": {
    "title": "The wave ends",
    "plain": "Nothing is left to take and nothing is waiting outside, so the wave ends. The machine is quiet: it knows one listener, and one doer that will ask."
   }
  },
  "wave-6/1": {
   "address": "wave-6/1",
   "step": 12,
   "of": 37,
   "owner": {
    "wave": 1
   },
   "n": null,
   "ofOwner": null,
   "path": "/fragments/one-crossing/the-run/the-wave-begins/",
   "kind": "wave-begins",
   "offset": null,
   "wave": 1,
   "entry": {
    "phase": "settle",
    "station": "runtime",
    "register": "SETTLING",
    "action": "enter-settle",
    "detail": null,
    "by": "runtime",
    "fn": "markSettling"
   },
   "station": {
    "id": "runtime",
    "name": "The runtime",
    "kind": "runtime",
    "created": false
   },
   "changes": [
    {
     "label": "a wave is settling",
     "before": "no",
     "after": "yes"
    }
   ],
   "log": {
    "size": 2,
    "current": null,
    "added": [],
    "engine": 2,
    "membrane": 2
   },
   "beat": {
    "settling": true,
    "engine": "at the end",
    "membrane": "at the end"
   },
   "note": {
    "title": "A new wave begins",
    "plain": "A person commits a note at the door, so a new wave starts — the same way the first one did."
   }
  },
  "wave-6/2": {
   "address": "wave-6/2",
   "step": 13,
   "of": 37,
   "owner": {
    "tuple": 2,
    "group": "arrived"
   },
   "n": 1,
   "ofOwner": 8,
   "path": "/fragments/one-crossing/the-run/the-note-arrives/change-1/",
   "kind": "door",
   "offset": null,
   "wave": 1,
   "entry": {
    "phase": "ingress",
    "station": "engine",
    "register": "LOG",
    "action": "append",
    "detail": {
     "offset": 2,
     "kind": "domain.fact"
    },
    "by": "engine",
    "fn": "appendEmissions"
   },
   "station": {
    "id": "engine",
    "name": "The engine",
    "kind": "engine",
    "created": false
   },
   "changes": [
    {
     "label": "records in the log",
     "before": "2",
     "after": "3"
    },
    {
     "label": "#2",
     "before": "—",
     "after": "a note · note.given"
    }
   ],
   "log": {
    "size": 3,
    "current": null,
    "added": [
     2
    ],
    "engine": 2,
    "membrane": 2
   },
   "beat": {
    "settling": true,
    "engine": "next: #2",
    "membrane": "waiting at #2"
   },
   "note": {
    "title": "Record #2 enters the log",
    "plain": "The door adds the note to the log as record #2: a fact of type note.given. Its text asks the fragment's own question."
   }
  },
  "2/1": {
   "address": "2/1",
   "step": 14,
   "of": 37,
   "owner": {
    "tuple": 2,
    "group": "engine"
   },
   "n": 2,
   "ofOwner": 8,
   "path": "/fragments/one-crossing/the-run/the-note-arrives/change-2/",
   "kind": "record",
   "offset": 2,
   "wave": 1,
   "entry": {
    "phase": "propagate",
    "station": "engine",
    "register": "ENGINE.CURSOR",
    "action": "propagate",
    "detail": {
     "offset": 2
    },
    "by": "engine",
    "fn": "takeNextTuple"
   },
   "station": {
    "id": "engine",
    "name": "The engine",
    "kind": "engine",
    "created": false
   },
   "changes": [
    {
     "label": "pointer — the next record to take",
     "before": "#2",
     "after": "#3"
    }
   ],
   "log": {
    "size": 3,
    "current": 2,
    "added": [],
    "engine": 3,
    "membrane": 2
   },
   "beat": {
    "settling": true,
    "engine": "working on #2",
    "membrane": "waiting at #2"
   },
   "note": {
    "title": "The engine takes #2",
    "plain": "The engine's pointer moves past #2. It is the only thing a person gives in this wave; everything after it, the machine and the world do."
   }
  },
  "2/2": {
   "address": "2/2",
   "step": 15,
   "of": 37,
   "owner": {
    "tuple": 2,
    "group": "engine"
   },
   "n": 3,
   "ofOwner": 8,
   "path": "/fragments/one-crossing/the-run/the-note-arrives/change-3/",
   "kind": "change",
   "offset": 2,
   "wave": 1,
   "entry": {
    "phase": "propagate",
    "station": "topology:root/clew:note.gate",
    "register": "CLEWS",
    "action": "open-clew",
    "detail": {
     "key": "fragment-one-crossing-det"
    },
    "by": "knot:note.gate",
    "fn": "ensureClew"
   },
   "station": {
    "id": "topology:root/clew:note.gate",
    "name": "The listener note.gate",
    "kind": "clew",
    "created": false
   },
   "changes": [
    {
     "label": "lane · this session",
     "before": "—",
     "after": "open"
    }
   ],
   "log": {
    "size": 3,
    "current": 2,
    "added": [],
    "engine": 3,
    "membrane": 2
   },
   "beat": {
    "settling": true,
    "engine": "working on #2",
    "membrane": "waiting at #2"
   },
   "note": {
    "title": "The listener opens a lane for this session",
    "plain": "The note carries a key — this session. The listener opens a lane for that key, where this session's notes are kept apart from any other."
   }
  },
  "2/3": {
   "address": "2/3",
   "step": 16,
   "of": 37,
   "owner": {
    "tuple": 2,
    "group": "engine"
   },
   "n": 4,
   "ofOwner": 8,
   "path": "/fragments/one-crossing/the-run/the-note-arrives/change-4/",
   "kind": "change",
   "offset": 2,
   "wave": 1,
   "entry": {
    "phase": "propagate",
    "station": "topology:root/clew:note.gate",
    "register": "COLLECTED",
    "action": "collect",
    "detail": {
     "key": "fragment-one-crossing-det",
     "slot": "note",
     "reduce": "latest"
    },
    "by": "knot:note.gate",
    "fn": "collectDeterministicSlot"
   },
   "station": {
    "id": "topology:root/clew:note.gate",
    "name": "The listener note.gate",
    "kind": "clew",
    "created": false
   },
   "changes": [
    {
     "label": "lane · this session · slot note",
     "before": "empty",
     "after": "“Is a request to the world a record of the log, or something outside it?”"
    }
   ],
   "log": {
    "size": 3,
    "current": 2,
    "added": [],
    "engine": 3,
    "membrane": 2
   },
   "beat": {
    "settling": true,
    "engine": "working on #2",
    "membrane": "waiting at #2"
   },
   "note": {
    "title": "The listener keeps the note in its slot",
    "plain": "The machine writes the note's text into the listener's slot note. Its condition — the slot is not empty — now holds: the listener has what it waits for."
   }
  },
  "2/4": {
   "address": "2/4",
   "step": 17,
   "of": 37,
   "owner": {
    "tuple": 2,
    "group": "engine"
   },
   "n": 5,
   "ofOwner": 8,
   "path": "/fragments/one-crossing/the-run/the-note-arrives/change-5/",
   "kind": "change",
   "offset": 2,
   "wave": 1,
   "entry": {
    "phase": "propagate",
    "station": "topology:root/clew:note.gate",
    "register": "COLLECTED",
    "action": "reset",
    "detail": {
     "key": "fragment-one-crossing-det"
    },
    "by": "knot:note.gate",
    "fn": "resetDeterministicClew"
   },
   "station": {
    "id": "topology:root/clew:note.gate",
    "name": "The listener note.gate",
    "kind": "clew",
    "created": false
   },
   "changes": [
    {
     "label": "lane · this session · slot note",
     "before": "“Is a request to the world a record of the log, or something outside it?”",
     "after": "empty"
    }
   ],
   "log": {
    "size": 3,
    "current": 2,
    "added": [],
    "engine": 3,
    "membrane": 2
   },
   "beat": {
    "settling": true,
    "engine": "working on #2",
    "membrane": "waiting at #2"
   },
   "note": {
    "title": "The slot is emptied again",
    "plain": "Having enough, the listener will announce it — and first empties its slot, so that the next note starts afresh. What it heard travels with the announcement."
   }
  },
  "2/5": {
   "address": "2/5",
   "step": 18,
   "of": 37,
   "owner": {
    "tuple": 2,
    "group": "engine"
   },
   "n": 6,
   "ofOwner": 8,
   "path": "/fragments/one-crossing/the-run/the-note-arrives/change-6/",
   "kind": "change",
   "offset": 2,
   "wave": 1,
   "entry": {
    "phase": "propagate",
    "station": "cellspace",
    "register": "REQUESTS,CHARTERS,CELLS",
    "action": "mount",
    "detail": null,
    "by": "cellspace",
    "fn": "cellsRegion"
   },
   "station": {
    "id": "cellspace",
    "name": "CellSpace",
    "kind": "cellspace",
    "created": true
   },
   "changes": [
    {
     "label": "requests",
     "before": "—",
     "after": "empty"
    },
    {
     "label": "charters",
     "before": "—",
     "after": "empty"
    },
    {
     "label": "Cells",
     "before": "—",
     "after": "empty"
    }
   ],
   "log": {
    "size": 3,
    "current": 2,
    "added": [],
    "engine": 3,
    "membrane": 2
   },
   "beat": {
    "settling": true,
    "engine": "working on #2",
    "membrane": "waiting at #2"
   },
   "note": {
    "title": "CellSpace sets up its registers",
    "plain": "#2 is the session's first plain fact. CellSpace, the part that runs Cells, creates its three registers the first time it looks — empty. One of them will matter here: the index of requests, when #4 is written."
   }
  },
  "2/6": {
   "address": "2/6",
   "step": 19,
   "of": 37,
   "owner": {
    "tuple": 2,
    "group": "engine"
   },
   "n": 7,
   "ofOwner": 8,
   "path": "/fragments/one-crossing/the-run/the-note-arrives/change-7/",
   "kind": "change",
   "offset": 2,
   "wave": 1,
   "entry": {
    "phase": "propagate",
    "station": "engine",
    "register": "LOG",
    "action": "append",
    "detail": {
     "offset": 3,
     "kind": "sys.knot.ready"
    },
    "by": "engine",
    "fn": "appendEmissions"
   },
   "station": {
    "id": "engine",
    "name": "The engine",
    "kind": "engine",
    "created": false
   },
   "changes": [
    {
     "label": "records in the log",
     "before": "3",
     "after": "4"
    },
    {
     "label": "#3",
     "before": "—",
     "after": "readiness · sys.knot.ready"
    }
   ],
   "log": {
    "size": 4,
    "current": 2,
    "added": [
     3
    ],
    "engine": 3,
    "membrane": 2
   },
   "beat": {
    "settling": true,
    "engine": "working on #2",
    "membrane": "waiting at #2"
   },
   "note": {
    "title": "The readiness enters the log as #3",
    "plain": "The listener's announcement is written at the end of the log as record #3, together with what it heard. A readiness is a record like any other."
   }
  },
  "3/1": {
   "address": "3/1",
   "step": 20,
   "of": 37,
   "owner": {
    "tuple": 3,
    "group": "engine"
   },
   "n": 1,
   "ofOwner": 8,
   "path": "/fragments/one-crossing/the-run/the-knot-is-ready/change-1/",
   "kind": "record",
   "offset": 3,
   "wave": 1,
   "entry": {
    "phase": "propagate",
    "station": "engine",
    "register": "ENGINE.CURSOR",
    "action": "propagate",
    "detail": {
     "offset": 3
    },
    "by": "engine",
    "fn": "takeNextTuple"
   },
   "station": {
    "id": "engine",
    "name": "The engine",
    "kind": "engine",
    "created": false
   },
   "changes": [
    {
     "label": "pointer — the next record to take",
     "before": "#3",
     "after": "#4"
    }
   ],
   "log": {
    "size": 4,
    "current": 3,
    "added": [],
    "engine": 4,
    "membrane": 2
   },
   "beat": {
    "settling": true,
    "engine": "working on #3",
    "membrane": "waiting at #2"
   },
   "note": {
    "title": "The engine takes #3",
    "plain": "The engine moves on to #3 — a record the machine wrote itself."
   }
  },
  "3/2": {
   "address": "3/2",
   "step": 21,
   "of": 37,
   "owner": {
    "tuple": 3,
    "group": "engine"
   },
   "n": 2,
   "ofOwner": 8,
   "path": "/fragments/one-crossing/the-run/the-knot-is-ready/change-2/",
   "kind": "change",
   "offset": 3,
   "wave": 1,
   "entry": {
    "phase": "propagate",
    "station": "topology:root",
    "register": "RDV",
    "action": "open-bank",
    "detail": {
     "bindId": "note.ask"
    },
    "by": "bind:note.ask",
    "fn": "ensureRendezvous"
   },
   "station": {
    "id": "topology:root",
    "name": "The figure",
    "kind": "region",
    "created": false
   },
   "changes": [
    {
     "label": "rendezvous opened",
     "before": "—",
     "after": "note.ask"
    }
   ],
   "log": {
    "size": 4,
    "current": 3,
    "added": [],
    "engine": 4,
    "membrane": 2
   },
   "beat": {
    "settling": true,
    "engine": "working on #3",
    "membrane": "waiting at #2"
   },
   "note": {
    "title": "The doer opens its rendezvous",
    "plain": "The doer note.ask waits for note.gate, so this readiness wakes it. It opens its rendezvous — the place where it gathers what its listeners have said."
   }
  },
  "3/3": {
   "address": "3/3",
   "step": 22,
   "of": 37,
   "owner": {
    "tuple": 3,
    "group": "engine"
   },
   "n": 3,
   "ofOwner": 8,
   "path": "/fragments/one-crossing/the-run/the-knot-is-ready/change-3/",
   "kind": "change",
   "offset": 3,
   "wave": 1,
   "entry": {
    "phase": "propagate",
    "station": "topology:root/bind:note.ask",
    "register": "RDV",
    "action": "open-lane",
    "detail": {
     "key": "fragment-one-crossing-det",
     "activatedAtBirth": false
    },
    "by": "bind:note.ask",
    "fn": "ensureRendezvous"
   },
   "station": {
    "id": "topology:root/bind:note.ask",
    "name": "The doer note.ask",
    "kind": "bind",
    "created": true
   },
   "changes": [
    {
     "label": "lane · this session",
     "before": "—",
     "after": "open"
    },
    {
     "label": "lane · this session · active",
     "before": "—",
     "after": "no"
    },
    {
     "label": "lane · this session · has acted",
     "before": "—",
     "after": "no"
    },
    {
     "label": "intentions named so far",
     "before": "—",
     "after": "0"
    }
   ],
   "log": {
    "size": 4,
    "current": 3,
    "added": [],
    "engine": 4,
    "membrane": 2
   },
   "beat": {
    "settling": true,
    "engine": "working on #3",
    "membrane": "waiting at #2"
   },
   "note": {
    "title": "A lane for this session",
    "plain": "Inside the rendezvous, a lane for this session's key. It is not active yet: it becomes active when the listener it acts on is ready."
   }
  },
  "3/4": {
   "address": "3/4",
   "step": 23,
   "of": 37,
   "owner": {
    "tuple": 3,
    "group": "engine"
   },
   "n": 4,
   "ofOwner": 8,
   "path": "/fragments/one-crossing/the-run/the-knot-is-ready/change-4/",
   "kind": "change",
   "offset": 3,
   "wave": 1,
   "entry": {
    "phase": "propagate",
    "station": "topology:root/bind:note.ask",
    "register": "RDV.ACTIVATED,RDV.SCOPE",
    "action": "latch-scope",
    "detail": {
     "key": "fragment-one-crossing-det",
     "as": "activation"
    },
    "by": "bind:note.ask",
    "fn": "latchRendezvousScope"
   },
   "station": {
    "id": "topology:root/bind:note.ask",
    "name": "The doer note.ask",
    "kind": "bind",
    "created": false
   },
   "changes": [
    {
     "label": "lane · this session · active",
     "before": "no",
     "after": "yes"
    },
    {
     "label": "lane · this session · gathered activation",
     "before": "—",
     "after": "note = “Is a request to the world a record of the log, or something outside i…”"
    }
   ],
   "log": {
    "size": 4,
    "current": 3,
    "added": [],
    "engine": 4,
    "membrane": 2
   },
   "beat": {
    "settling": true,
    "engine": "working on #3",
    "membrane": "waiting at #2"
   },
   "note": {
    "title": "What the listener understood is gathered",
    "plain": "The readiness activates the lane, and the listener's understanding enters the doer's scope under the name activation. That scope is what the request will carry out to the world — the doer asks about what it heard, nothing else."
   }
  },
  "3/5": {
   "address": "3/5",
   "step": 24,
   "of": 37,
   "owner": {
    "tuple": 3,
    "group": "engine"
   },
   "n": 5,
   "ofOwner": 8,
   "path": "/fragments/one-crossing/the-run/the-knot-is-ready/change-5/",
   "kind": "change",
   "offset": 3,
   "wave": 1,
   "entry": {
    "phase": "propagate",
    "station": "topology:root/bind:note.ask",
    "register": "RDV.PROJECTED",
    "action": "latch-projection",
    "detail": {
     "key": "fragment-one-crossing-det"
    },
    "by": "bind:note.ask",
    "fn": "latchRendezvousProjection"
   },
   "station": {
    "id": "topology:root/bind:note.ask",
    "name": "The doer note.ask",
    "kind": "bind",
    "created": false
   },
   "changes": [
    {
     "label": "lane · this session · has acted",
     "before": "no",
     "after": "yes"
    }
   ],
   "log": {
    "size": 4,
    "current": 3,
    "added": [],
    "engine": 4,
    "membrane": 2
   },
   "beat": {
    "settling": true,
    "engine": "working on #3",
    "membrane": "waiting at #2"
   },
   "note": {
    "title": "The doer acts — once",
    "plain": "The lane is latched: the doer acts now, and never again on this lane. However long the world takes to answer, this doer will not ask twice."
   }
  },
  "3/6": {
   "address": "3/6",
   "step": 25,
   "of": 37,
   "owner": {
    "tuple": 3,
    "group": "engine"
   },
   "n": 6,
   "ofOwner": 8,
   "path": "/fragments/one-crossing/the-run/the-knot-is-ready/change-6/",
   "kind": "change",
   "offset": 3,
   "wave": 1,
   "entry": {
    "phase": "propagate",
    "station": "topology:root/bind:note.ask",
    "register": "INTENT.CTR",
    "action": "mint-uid",
    "detail": {
     "uid": "note.ask#1"
    },
    "by": "bind:note.ask",
    "fn": "nextIntentionUid"
   },
   "station": {
    "id": "topology:root/bind:note.ask",
    "name": "The doer note.ask",
    "kind": "bind",
    "created": false
   },
   "changes": [
    {
     "label": "intentions named so far",
     "before": "0",
     "after": "1"
    }
   ],
   "log": {
    "size": 4,
    "current": 3,
    "added": [],
    "engine": 4,
    "membrane": 2
   },
   "beat": {
    "settling": true,
    "engine": "working on #3",
    "membrane": "waiting at #2"
   },
   "note": {
    "title": "The intention gets its name",
    "plain": "What the doer is about to ask gets a unique name, note.ask#1, from a counter that never goes back. The world never sees the doer — only this name, which it must return with its answer."
   }
  },
  "3/7": {
   "address": "3/7",
   "step": 26,
   "of": 37,
   "owner": {
    "tuple": 3,
    "group": "engine"
   },
   "n": 7,
   "ofOwner": 8,
   "path": "/fragments/one-crossing/the-run/the-knot-is-ready/change-7/",
   "kind": "change",
   "offset": 3,
   "wave": 1,
   "entry": {
    "phase": "propagate",
    "station": "engine",
    "register": "LOG",
    "action": "append",
    "detail": {
     "offset": 4,
     "kind": "domain.fact"
    },
    "by": "engine",
    "fn": "appendEmissions"
   },
   "station": {
    "id": "engine",
    "name": "The engine",
    "kind": "engine",
    "created": false
   },
   "changes": [
    {
     "label": "records in the log",
     "before": "4",
     "after": "5"
    },
    {
     "label": "#4",
     "before": "—",
     "after": "a request · service.request"
    }
   ],
   "log": {
    "size": 5,
    "current": 3,
    "added": [
     4
    ],
    "engine": 4,
    "membrane": 2
   },
   "beat": {
    "settling": true,
    "engine": "working on #3",
    "membrane": "waiting at #2"
   },
   "note": {
    "title": "The request enters the log as #4",
    "plain": "This doer has no local action, so to act is to ask: its request — what to do, about what, in which shape the answer must come — is written at the end of the log as #4. The machine has called nothing; it has written down what it wants."
   }
  },
  "4/1": {
   "address": "4/1",
   "step": 27,
   "of": 37,
   "owner": {
    "tuple": 4,
    "group": "engine"
   },
   "n": 1,
   "ofOwner": 6,
   "path": "/fragments/one-crossing/the-run/the-request-crosses/change-1/",
   "kind": "record",
   "offset": 4,
   "wave": 1,
   "entry": {
    "phase": "propagate",
    "station": "engine",
    "register": "ENGINE.CURSOR",
    "action": "propagate",
    "detail": {
     "offset": 4
    },
    "by": "engine",
    "fn": "takeNextTuple"
   },
   "station": {
    "id": "engine",
    "name": "The engine",
    "kind": "engine",
    "created": false
   },
   "changes": [
    {
     "label": "pointer — the next record to take",
     "before": "#4",
     "after": "#5"
    }
   ],
   "log": {
    "size": 5,
    "current": 4,
    "added": [],
    "engine": 5,
    "membrane": 2
   },
   "beat": {
    "settling": true,
    "engine": "working on #4",
    "membrane": "waiting at #2"
   },
   "note": {
    "title": "The engine takes #4",
    "plain": "The engine moves on to #4 — the request the doer has just written into the log."
   }
  },
  "4/2": {
   "address": "4/2",
   "step": 28,
   "of": 37,
   "owner": {
    "tuple": 4,
    "group": "engine"
   },
   "n": 2,
   "ofOwner": 6,
   "path": "/fragments/one-crossing/the-run/the-request-crosses/change-2/",
   "kind": "change",
   "offset": 4,
   "wave": 1,
   "entry": {
    "phase": "propagate",
    "station": "cellspace",
    "register": "REQUESTS",
    "action": "index-request",
    "detail": {
     "uid": "note.ask#1",
     "bindId": "note.ask"
    },
    "by": "cellspace",
    "fn": "indexCausalRequest"
   },
   "station": {
    "id": "cellspace",
    "name": "CellSpace",
    "kind": "cellspace",
    "created": false
   },
   "changes": [
    {
     "label": "requests",
     "before": "empty",
     "after": "note.ask#1"
    }
   ],
   "log": {
    "size": 5,
    "current": 4,
    "added": [],
    "engine": 5,
    "membrane": 2
   },
   "beat": {
    "settling": true,
    "engine": "working on #4",
    "membrane": "waiting at #2"
   },
   "note": {
    "title": "The request is indexed under its name",
    "plain": "CellSpace keeps every request that leaves for the world under its name: note.ask#1 belongs to note.ask. Whatever comes back later — an answer or a failure — finds its doer through this index. No Cell is involved here: this is the plain case."
   }
  },
  "2/7": {
   "address": "2/7",
   "step": 29,
   "of": 37,
   "owner": {
    "tuple": 2,
    "group": "membrane"
   },
   "n": 8,
   "ofOwner": 8,
   "path": "/fragments/one-crossing/the-run/the-note-arrives/change-8/",
   "kind": "sweep",
   "offset": 2,
   "wave": 1,
   "entry": {
    "phase": "sweep",
    "station": "membrane",
    "register": "MEMBRANE.CURSOR",
    "action": "sweep",
    "detail": {
     "offset": 2
    },
    "by": "membrane",
    "fn": "sweepNextTuple"
   },
   "station": {
    "id": "membrane",
    "name": "The membrane",
    "kind": "membrane",
    "created": false
   },
   "changes": [
    {
     "label": "pointer — the next record to pass",
     "before": "#2",
     "after": "#3"
    }
   ],
   "log": {
    "size": 5,
    "current": 2,
    "added": [],
    "engine": 5,
    "membrane": 3
   },
   "beat": {
    "settling": true,
    "engine": "at the end",
    "membrane": "passing #2"
   },
   "note": {
    "title": "The membrane passes #2",
    "plain": "Only now, with the engine at the end, does the membrane pass over the new records. #2, the note, asks nothing of the world."
   }
  },
  "3/8": {
   "address": "3/8",
   "step": 30,
   "of": 37,
   "owner": {
    "tuple": 3,
    "group": "membrane"
   },
   "n": 8,
   "ofOwner": 8,
   "path": "/fragments/one-crossing/the-run/the-knot-is-ready/change-8/",
   "kind": "sweep",
   "offset": 3,
   "wave": 1,
   "entry": {
    "phase": "sweep",
    "station": "membrane",
    "register": "MEMBRANE.CURSOR",
    "action": "sweep",
    "detail": {
     "offset": 3
    },
    "by": "membrane",
    "fn": "sweepNextTuple"
   },
   "station": {
    "id": "membrane",
    "name": "The membrane",
    "kind": "membrane",
    "created": false
   },
   "changes": [
    {
     "label": "pointer — the next record to pass",
     "before": "#3",
     "after": "#4"
    }
   ],
   "log": {
    "size": 5,
    "current": 3,
    "added": [],
    "engine": 5,
    "membrane": 4
   },
   "beat": {
    "settling": true,
    "engine": "at the end",
    "membrane": "passing #3"
   },
   "note": {
    "title": "The membrane passes #3",
    "plain": "#3, the readiness, asks nothing of the world either. The membrane's pointer moves on."
   }
  },
  "4/3": {
   "address": "4/3",
   "step": 31,
   "of": 37,
   "owner": {
    "tuple": 4,
    "group": "membrane"
   },
   "n": 3,
   "ofOwner": 6,
   "path": "/fragments/one-crossing/the-run/the-request-crosses/change-3/",
   "kind": "sweep",
   "offset": 4,
   "wave": 1,
   "entry": {
    "phase": "sweep",
    "station": "membrane",
    "register": "MEMBRANE.CURSOR",
    "action": "sweep",
    "detail": {
     "offset": 4
    },
    "by": "membrane",
    "fn": "sweepNextTuple"
   },
   "station": {
    "id": "membrane",
    "name": "The membrane",
    "kind": "membrane",
    "created": false
   },
   "changes": [
    {
     "label": "pointer — the next record to pass",
     "before": "#4",
     "after": "#5"
    }
   ],
   "log": {
    "size": 5,
    "current": 4,
    "added": [],
    "engine": 5,
    "membrane": 5
   },
   "beat": {
    "settling": true,
    "engine": "at the end",
    "membrane": "passing #4"
   },
   "note": {
    "title": "The membrane passes #4",
    "plain": "#4 is different: it is a request. The membrane's pointer moves past it — and the membrane looks for someone in the world who will take it."
   }
  },
  "4/4": {
   "address": "4/4",
   "step": 32,
   "of": 37,
   "owner": {
    "tuple": 4,
    "group": "membrane"
   },
   "n": 4,
   "ofOwner": 6,
   "path": "/fragments/one-crossing/the-run/the-request-crosses/change-4/",
   "kind": "discharge",
   "offset": 4,
   "wave": 1,
   "entry": {
    "phase": "sweep",
    "station": "runtime",
    "register": "DISCHARGE.TABLE",
    "action": "track-discharge",
    "detail": {
     "id": 1,
     "controller": "controller.schema.double",
     "offset": 4
    },
    "by": "runtime",
    "fn": "trackDischarge"
   },
   "station": {
    "id": "runtime",
    "name": "The runtime",
    "kind": "runtime",
    "created": false
   },
   "changes": [],
   "log": {
    "size": 5,
    "current": 4,
    "added": [],
    "engine": 5,
    "membrane": 5
   },
   "beat": {
    "settling": true,
    "engine": "at the end",
    "membrane": "passing #4"
   },
   "note": {
    "title": "The request is handed to the world",
    "plain": "A controller — the world's only station — claims #4 by its shape. The runtime notes the hand-out as discharge 1: the machine now waits for what comes back. This is the only place the machine touches the world."
   }
  },
  "4/5": {
   "address": "4/5",
   "step": 33,
   "of": 37,
   "owner": {
    "tuple": 4,
    "group": "world"
   },
   "n": 5,
   "ofOwner": 6,
   "path": "/fragments/one-crossing/the-run/the-request-crosses/change-5/",
   "kind": "discharge",
   "offset": 4,
   "wave": 1,
   "entry": {
    "phase": "sweep",
    "station": "runtime",
    "register": "DISCHARGE.TABLE",
    "action": "resolve-discharge",
    "detail": {
     "id": 1,
     "emissions": 1,
     "controller": "controller.schema.double",
     "offset": 4
    },
    "by": "runtime",
    "fn": "resolveDischarge"
   },
   "station": {
    "id": "runtime",
    "name": "The runtime",
    "kind": "runtime",
    "created": false
   },
   "changes": [],
   "log": {
    "size": 5,
    "current": 4,
    "added": [],
    "engine": 5,
    "membrane": 5
   },
   "beat": {
    "settling": true,
    "engine": "at the end",
    "membrane": "passing #4"
   },
   "note": {
    "title": "The world answers",
    "plain": "The controller returns one answer, and the runtime closes discharge 1. The answer is not a record yet: it waits at the edge until the log takes it. A failure would come back the same way, under the same name."
   }
  },
  "4/6": {
   "address": "4/6",
   "step": 34,
   "of": 37,
   "owner": {
    "tuple": 4,
    "group": "world"
   },
   "n": 6,
   "ofOwner": 6,
   "path": "/fragments/one-crossing/the-run/the-request-crosses/change-6/",
   "kind": "answer",
   "offset": 4,
   "wave": 1,
   "entry": {
    "phase": "ingress",
    "station": "engine",
    "register": "LOG",
    "action": "append",
    "detail": {
     "offset": 5,
     "kind": "domain.fact"
    },
    "by": "engine",
    "fn": "appendEmissions"
   },
   "station": {
    "id": "engine",
    "name": "The engine",
    "kind": "engine",
    "created": false
   },
   "changes": [
    {
     "label": "records in the log",
     "before": "5",
     "after": "6"
    },
    {
     "label": "#5",
     "before": "—",
     "after": "the answer · note.answered"
    }
   ],
   "log": {
    "size": 6,
    "current": null,
    "added": [
     5
    ],
    "engine": 5,
    "membrane": 5
   },
   "beat": {
    "settling": true,
    "engine": "next: #5",
    "membrane": "waiting at #5"
   },
   "note": {
    "title": "The answer enters the log as #5",
    "plain": "The answer is written at the end of the log as #5 — a fact of the type the doer asked for, note.answered, carrying the doer's name and the intention's name. It came from the world, not from the doer."
   }
  },
  "5/1": {
   "address": "5/1",
   "step": 35,
   "of": 37,
   "owner": {
    "tuple": 5,
    "group": "engine"
   },
   "n": 1,
   "ofOwner": 2,
   "path": "/fragments/one-crossing/the-run/the-world-answers/change-1/",
   "kind": "record",
   "offset": 5,
   "wave": 1,
   "entry": {
    "phase": "propagate",
    "station": "engine",
    "register": "ENGINE.CURSOR",
    "action": "propagate",
    "detail": {
     "offset": 5
    },
    "by": "engine",
    "fn": "takeNextTuple"
   },
   "station": {
    "id": "engine",
    "name": "The engine",
    "kind": "engine",
    "created": false
   },
   "changes": [
    {
     "label": "pointer — the next record to take",
     "before": "#5",
     "after": "#6"
    }
   ],
   "log": {
    "size": 6,
    "current": 5,
    "added": [],
    "engine": 6,
    "membrane": 5
   },
   "beat": {
    "settling": true,
    "engine": "working on #5",
    "membrane": "waiting at #5"
   },
   "note": {
    "title": "The engine takes #5",
    "plain": "The engine moves on to #5, the answer. Nothing was told to hear note.answered, so nothing changes — and the engine has reached the end."
   }
  },
  "5/2": {
   "address": "5/2",
   "step": 36,
   "of": 37,
   "owner": {
    "tuple": 5,
    "group": "membrane"
   },
   "n": 2,
   "ofOwner": 2,
   "path": "/fragments/one-crossing/the-run/the-world-answers/change-2/",
   "kind": "sweep",
   "offset": 5,
   "wave": 1,
   "entry": {
    "phase": "sweep",
    "station": "membrane",
    "register": "MEMBRANE.CURSOR",
    "action": "sweep",
    "detail": {
     "offset": 5
    },
    "by": "membrane",
    "fn": "sweepNextTuple"
   },
   "station": {
    "id": "membrane",
    "name": "The membrane",
    "kind": "membrane",
    "created": false
   },
   "changes": [
    {
     "label": "pointer — the next record to pass",
     "before": "#5",
     "after": "#6"
    }
   ],
   "log": {
    "size": 6,
    "current": 5,
    "added": [],
    "engine": 6,
    "membrane": 6
   },
   "beat": {
    "settling": true,
    "engine": "at the end",
    "membrane": "passing #5"
   },
   "note": {
    "title": "The membrane passes #5",
    "plain": "The answer asks nothing more of the world. The membrane reaches the end of the log."
   }
  },
  "wave-6/3": {
   "address": "wave-6/3",
   "step": 37,
   "of": 37,
   "owner": {
    "wave": 1
   },
   "n": null,
   "ofOwner": null,
   "path": "/fragments/one-crossing/the-run/the-wave-ends/",
   "kind": "wave-ends",
   "offset": null,
   "wave": 1,
   "entry": {
    "phase": "settle",
    "station": "runtime",
    "register": "SETTLING",
    "action": "leave-settle",
    "detail": null,
    "by": "runtime",
    "fn": "markSettling"
   },
   "station": {
    "id": "runtime",
    "name": "The runtime",
    "kind": "runtime",
    "created": false
   },
   "changes": [
    {
     "label": "a wave is settling",
     "before": "yes",
     "after": "no"
    }
   ],
   "log": {
    "size": 6,
    "current": null,
    "added": [],
    "engine": 6,
    "membrane": 6
   },
   "beat": {
    "settling": false,
    "engine": "at the end",
    "membrane": "at the end"
   },
   "note": {
    "title": "The wave ends — quiet",
    "plain": "Nothing left to take, nothing waiting outside: the wave ends. The request (#4) and the answer (#5) stand side by side in the log, joined by the name note.ask#1."
   }
  }
 },
 "records": [
  {
   "o": 0,
   "label": "a listener",
   "kind": "sys.knot.defined",
   "factType": null,
   "actor": "person",
   "wave": 0,
   "path": "/fragments/one-crossing/the-template/the-knot/"
  },
  {
   "o": 1,
   "label": "a doer that asks",
   "kind": "sys.descriptor.defined",
   "factType": null,
   "actor": "person",
   "wave": 0,
   "path": "/fragments/one-crossing/the-template/the-bind/"
  },
  {
   "o": 2,
   "label": "a note",
   "kind": "domain.fact",
   "factType": "note.given",
   "actor": "person",
   "wave": 1,
   "path": "/fragments/one-crossing/the-run/the-note-arrives/"
  },
  {
   "o": 3,
   "label": "readiness",
   "kind": "sys.knot.ready",
   "factType": null,
   "actor": "machine",
   "wave": 1,
   "path": "/fragments/one-crossing/the-run/the-knot-is-ready/"
  },
  {
   "o": 4,
   "label": "a request",
   "kind": "domain.fact",
   "factType": "service.request",
   "actor": "machine",
   "wave": 1,
   "path": "/fragments/one-crossing/the-run/the-request-crosses/"
  },
  {
   "o": 5,
   "label": "the answer",
   "kind": "domain.fact",
   "factType": "note.answered",
   "actor": "world",
   "wave": 1,
   "path": "/fragments/one-crossing/the-run/the-world-answers/"
  }
 ],
 "stations": [
  {
   "id": "runtime",
   "name": "The runtime",
   "kind": "runtime"
  },
  {
   "id": "engine",
   "name": "The engine",
   "kind": "engine"
  },
  {
   "id": "topology:root",
   "name": "The figure",
   "kind": "region"
  },
  {
   "id": "topology:root/clew:note.gate",
   "name": "The listener note.gate",
   "kind": "clew"
  },
  {
   "id": "membrane",
   "name": "The membrane",
   "kind": "membrane"
  },
  {
   "id": "cellspace",
   "name": "CellSpace",
   "kind": "cellspace"
  },
  {
   "id": "topology:root/bind:note.ask",
   "name": "The doer note.ask",
   "kind": "bind"
  }
 ],
 "opMap": [
  {
   "register": "BIND.DEFS",
   "action": "register-descriptor",
   "fn": "registerDescriptorDefinition",
   "file": "core/registers/register-descriptor-definition.ts",
   "used": true
  },
  {
   "register": "CELL.EMISSIONS",
   "action": "count-effect",
   "fn": "countCellEffect",
   "file": "core/registers/count-cell-effect.ts",
   "used": false
  },
  {
   "register": "CELL.INFERENCE_CALLS",
   "action": "count-effect",
   "fn": "countCellEffect",
   "file": "core/registers/count-cell-effect.ts",
   "used": false
  },
  {
   "register": "CELL.STATE,CELL.ASSESSMENT",
   "action": "record-assessment",
   "fn": "recordCellAssessment",
   "file": "core/registers/record-cell-assessment.ts",
   "used": false
  },
  {
   "register": "CELL.STATE,CELL.RESULT",
   "action": "record-result",
   "fn": "recordCellResult",
   "file": "core/registers/record-cell-result.ts",
   "used": false
  },
  {
   "register": "CELL.STATE",
   "action": "close-archived",
   "fn": "closeCell",
   "file": "core/registers/close-cell.ts",
   "used": false
  },
  {
   "register": "CELL.STATE",
   "action": "close-failed",
   "fn": "closeCell",
   "file": "core/registers/close-cell.ts",
   "used": false
  },
  {
   "register": "CELL.STATE",
   "action": "close-sealed",
   "fn": "closeCell",
   "file": "core/registers/close-cell.ts",
   "used": false
  },
  {
   "register": "CELLS",
   "action": "open-cell",
   "fn": "openCell",
   "file": "core/registers/open-cell.ts",
   "used": false
  },
  {
   "register": "CHARTERS",
   "action": "define-charter",
   "fn": "defineCharter",
   "file": "core/registers/define-charter.ts",
   "used": false
  },
  {
   "register": "CLEWS",
   "action": "open-clew",
   "fn": "ensureClew",
   "file": "core/registers/ensure-clew.ts",
   "used": true
  },
  {
   "register": "COLLECTED",
   "action": "collect",
   "fn": "collectDeterministicSlot",
   "file": "core/registers/collect-deterministic-slot.ts",
   "used": true
  },
  {
   "register": "COLLECTED",
   "action": "reset",
   "fn": "resetDeterministicClew",
   "file": "core/registers/reset-deterministic-clew.ts",
   "used": true
  },
  {
   "register": "DELTAQ,INFLIGHT.UID,INFLIGHT.DELTAS",
   "action": "refuse-winding",
   "fn": "refuseWinding",
   "file": "core/registers/refuse-winding.ts",
   "used": false
  },
  {
   "register": "DELTAQ",
   "action": "queue-delta",
   "fn": "queueDelta",
   "file": "core/registers/queue-delta.ts",
   "used": false
  },
  {
   "register": "DISCHARGE.TABLE",
   "action": "discharge-defect",
   "fn": "trackDischarge",
   "file": "core/registers/track-discharge.ts",
   "used": false
  },
  {
   "register": "DISCHARGE.TABLE",
   "action": "resolve-discharge",
   "fn": "resolveDischarge",
   "file": "core/registers/resolve-discharge.ts",
   "used": true
  },
  {
   "register": "DISCHARGE.TABLE",
   "action": "track-discharge",
   "fn": "trackDischarge",
   "file": "core/registers/track-discharge.ts",
   "used": true
  },
  {
   "register": "ENGINE.CURSOR",
   "action": "propagate",
   "fn": "takeNextTuple",
   "file": "core/registers/take-next-tuple.ts",
   "used": true
  },
  {
   "register": "INTENT.CTR",
   "action": "mint-uid",
   "fn": "nextIntentionUid",
   "file": "core/registers/next-intention-uid.ts",
   "used": true
  },
  {
   "register": "KNOT.DEFS",
   "action": "register-knot",
   "fn": "registerKnotDefinition",
   "file": "core/registers/register-knot-definition.ts",
   "used": true
  },
  {
   "register": "LOG",
   "action": "append",
   "fn": "appendEmissions",
   "file": "core/registers/append-emissions.ts",
   "used": true
  },
  {
   "register": "MEMBRANE.CURSOR",
   "action": "sweep",
   "fn": "sweepNextTuple",
   "file": "core/registers/sweep-next-tuple.ts",
   "used": true
  },
  {
   "register": "RDV.ACTIVATED,RDV.SCOPE",
   "action": "latch-scope",
   "fn": "latchRendezvousScope",
   "file": "core/registers/latch-rendezvous-scope.ts",
   "used": true
  },
  {
   "register": "RDV.PROJECTED",
   "action": "latch-projection",
   "fn": "latchRendezvousProjection",
   "file": "core/registers/latch-rendezvous-projection.ts",
   "used": true
  },
  {
   "register": "RDV.SCOPE",
   "action": "latch-scope",
   "fn": "latchRendezvousScope",
   "file": "core/registers/latch-rendezvous-scope.ts",
   "used": false
  },
  {
   "register": "RDV",
   "action": "open-bank",
   "fn": "ensureRendezvous",
   "file": "core/registers/ensure-rendezvous.ts",
   "used": true
  },
  {
   "register": "RDV",
   "action": "open-lane",
   "fn": "ensureRendezvous",
   "file": "core/registers/ensure-rendezvous.ts",
   "used": true
  },
  {
   "register": "REQUESTS,CHARTERS,CELLS",
   "action": "mount",
   "fn": "cellsRegion",
   "file": "core/registers/cells-region.ts",
   "used": true
  },
  {
   "register": "REQUESTS",
   "action": "consume-request",
   "fn": "consumeCausalRequest",
   "file": "core/registers/consume-causal-request.ts",
   "used": false
  },
  {
   "register": "REQUESTS",
   "action": "index-request",
   "fn": "indexCausalRequest",
   "file": "core/registers/index-causal-request.ts",
   "used": true
  },
  {
   "register": "SETTLING",
   "action": "enter-settle",
   "fn": "markSettling",
   "file": "core/registers/mark-settling.ts",
   "used": true
  },
  {
   "register": "SETTLING",
   "action": "leave-settle",
   "fn": "markSettling",
   "file": "core/registers/mark-settling.ts",
   "used": true
  },
  {
   "register": "SLOTS,STATE,GRADE,DELTAQ,INFLIGHT.UID,INFLIGHT.DELTAS,WIND.CTR",
   "action": "reset",
   "fn": "resetSemanticClew",
   "file": "core/registers/reset-semantic-clew.ts",
   "used": false
  },
  {
   "register": "SLOTS",
   "action": "store-delta",
   "fn": "storeSlotDelta",
   "file": "core/registers/store-slot-delta.ts",
   "used": false
  },
  {
   "register": "STATE,GRADE,INFLIGHT.UID",
   "action": "wind-integration",
   "fn": "windIntegration",
   "file": "core/registers/wind-integration.ts",
   "used": false
  },
  {
   "register": "STATE,GRADE",
   "action": "wind-local",
   "fn": "windLocalIntegration",
   "file": "core/registers/wind-local-integration.ts",
   "used": false
  },
  {
   "register": "WIND.CTR,DELTAQ,INFLIGHT.UID,INFLIGHT.DELTAS",
   "action": "begin-winding",
   "fn": "beginWinding",
   "file": "core/registers/begin-winding.ts",
   "used": false
  }
 ],
 "ops": {
  "markSettling": {
   "file": "core/registers/mark-settling.ts",
   "source": [
    "// SETTLING latch (Vol. 02 §4.6): one settling wave at a time — a second",
    "// concurrent settle is a caller error, not a queue. Ephemeral stratum: the",
    "// latch never survives into a snapshot; extraction asserts it clear.",
    "// Entering a wave also rewinds the discharge slot sequence: slot ids are",
    "// wave-local (the table is drained between waves and ids never reach the",
    "// log), which keeps the journal byte-identical across a snapshot/restore —",
    "// unlike INTENT.CTR, which the spec pins as never-reset (Vol. 02 §4.7).",
    "",
    "import type { RegisterFile } from \"./register-file\";",
    "import { recordTransition } from \"./record-transition\";",
    "",
    "export function markSettling(file: RegisterFile, settling: boolean): void {",
    "  if (settling && file.ephemeral.settling) {",
    "    throw new Error(\"A wave is already settling; the runtime handles one wave at a time.\");",
    "  }",
    "  file.ephemeral.settling = settling;",
    "  if (settling) file.ephemeral.nextDischargeId = 0;",
    "  recordTransition(file, \"runtime\", \"SETTLING\", settling ? \"enter-settle\" : \"leave-settle\");",
    "}"
   ],
   "function": [
    12,
    19
   ],
   "header": [
    1,
    7
   ],
   "journals": [
    [
     18,
     18
    ]
   ],
   "marks": {
    "16": "the runtime notes whether a wave is settling"
   },
   "spec": [
    {
     "label": "Vol. 02 §4.6",
     "href": "/specification/vol-02-machine-model/#46-membrane-and-runtime-registers"
    },
    {
     "label": "Vol. 02 §4.7",
     "href": "/specification/vol-02-machine-model/#47-register-discipline"
    }
   ],
   "plain": "Marks the start and the end of a wave. The runtime settles one wave at a time.",
   "lastChanged": {
    "commit": "f36e70df4d22c01678729db4a8baf70e92979ca2",
    "short": "f36e70d",
    "date": "2026-08-18T22:05:56+03:00",
    "subject": "update: refactor structure of modules"
   },
   "sha256": "29f5b11c687e9fefdc85cd655dd068ca1dce75219cf5a3765b99456ff906d182",
   "first": "/fragments/one-crossing/the-template/the-wave-begins/"
  },
  "appendEmissions": {
   "file": "core/registers/append-emissions.ts",
   "source": [
    "// 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 };",
    "    engine.window.push(tuple);",
    "    recordTransition(file, \"engine\", \"LOG\", \"append\", {",
    "      offset: tuple.offset,",
    "      kind: tuple.kind",
    "    });",
    "  }",
    "}"
   ],
   "function": [
    11,
    21
   ],
   "header": [
    1,
    5
   ],
   "journals": [
    [
     16,
     19
    ]
   ],
   "marks": {
    "14": "the new record gets the next free number",
    "15": "it is added at the end of the log"
   },
   "spec": [
    {
     "label": "Vol. 02 §4.1",
     "href": "/specification/vol-02-machine-model/#41-engine-registers"
    },
    {
     "label": "Vol. 03 §1",
     "href": "/specification/vol-03-wave-log/#1-the-envelope"
    }
   ],
   "plain": "The only function that adds records to the log. Each new record gets the next free number, at the end.",
   "lastChanged": {
    "commit": "f36e70df4d22c01678729db4a8baf70e92979ca2",
    "short": "f36e70d",
    "date": "2026-08-18T22:05:56+03:00",
    "subject": "update: refactor structure of modules"
   },
   "sha256": "1d3a21411e28e01397f09e3500933386dcb57d23da9d55c1424422dae7f59f59",
   "first": "/fragments/one-crossing/the-template/the-knot/change-1/"
  },
  "takeNextTuple": {
   "file": "core/registers/take-next-tuple.ts",
   "source": [
    "// 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;",
    "  const tuple = engine.window[engine.cursor - engine.base];",
    "  engine.cursor += 1;",
    "  setWaveContext(file, { offset: tuple.offset, phase: \"propagate\" });",
    "  setDriver(file, \"engine\");",
    "  recordTransition(file, \"engine\", \"ENGINE.CURSOR\", \"propagate\", { offset: tuple.offset });",
    "  return tuple;",
    "}"
   ],
   "function": [
    13,
    22
   ],
   "header": [
    1,
    6
   ],
   "journals": [
    [
     20,
     20
    ]
   ],
   "marks": {
    "15": "at the end of the log, the engine stops",
    "17": "the engine's pointer moves on by one"
   },
   "spec": [
    {
     "label": "Vol. 02 §4.1",
     "href": "/specification/vol-02-machine-model/#41-engine-registers"
    }
   ],
   "plain": "The engine's step: take the record under its pointer and move the pointer on — or stop, if the pointer has reached the end.",
   "lastChanged": {
    "commit": "6730f582d79bd530971fb34ea35dde6760b842df",
    "short": "6730f58",
    "date": "2026-09-13T22:26:17+03:00",
    "subject": "update: add additional data to trace functions"
   },
   "sha256": "3bd8aa5bbcf4474e227a29cc9adfcb77d64168aefaf4cc2f3c9708c536cfa805",
   "first": "/fragments/one-crossing/the-template/the-knot/change-2/"
  },
  "registerKnotDefinition": {
   "file": "core/registers/register-knot-definition.ts",
   "source": [
    "// KNOT.DEFS write (Vol. 02 §4.2): the definition payload lands as data, and",
    "// re-registration of an id replaces the definition AND resets its clew bank",
    "// to a fresh null-key probe — accumulated clews of the old definition are",
    "// discarded (the machine's only 'edit'). The probe clew is supplied by the",
    "// resolved executor so invalid configuration has already failed at the",
    "// factory (Vol. 04 §2.1); the stale executor cache entry is dropped here so",
    "// the replacement takes effect for the next tuple.",
    "",
    "import type { KnotDefinedPayload } from \"../topology/gate\";",
    "import type { ClewRegisters, TopologyRegisters } from \"./topology-registers\";",
    "import type { RegisterFile } from \"./register-file\";",
    "import { recordTransition } from \"./record-transition\";",
    "",
    "export function registerKnotDefinition(",
    "  file: RegisterFile,",
    "  region: TopologyRegisters,",
    "  payload: KnotDefinedPayload,",
    "  probeClew: ClewRegisters",
    "): void {",
    "  const replaced = region.knotDefs.has(payload.id);",
    "  region.knotDefs.set(payload.id, payload);",
    "  region.clews.set(payload.id, new Map([[null, probeClew]]));",
    "  file.ephemeral.knotExecutors.delete(`${region.regionId}/${payload.id}`);",
    "  recordTransition(file, `topology:${region.regionId}`, \"KNOT.DEFS\", \"register-knot\", {",
    "    id: payload.id,",
    "    strategy: payload.strategy,",
    "    replaced",
    "  });",
    "  // The clew station is born here, with its null-key probe lane — journaled",
    "  // on the station itself so fold(journal) holds it before any lane opens",
    "  // (the document model's oracle, ADR-004 d10; Vol. 02 §4.5).",
    "  recordTransition(file, `topology:${region.regionId}/clew:${payload.id}`, \"CLEWS\", \"open-clew\", { key: null, probe: true, replaced }, \"registerKnotDefinition\");",
    "}"
   ],
   "function": [
    14,
    33
   ],
   "header": [
    1,
    7
   ],
   "journals": [
    [
     24,
     28
    ],
    [
     32,
     32
    ]
   ],
   "marks": {
    "21": "the description is stored under its name",
    "22": "its bank of lanes, with a trial lane"
   },
   "spec": [
    {
     "label": "Vol. 02 §4.2",
     "href": "/specification/vol-02-machine-model/#42-topology-registers"
    },
    {
     "label": "Vol. 04 §2.1",
     "href": "/specification/vol-04-tuple-reference/#21-sysknotdefined"
    }
   ],
   "plain": "Stores a listener's description under its name and gives it a bank of lanes with one trial lane.",
   "lastChanged": {
    "commit": "6730f582d79bd530971fb34ea35dde6760b842df",
    "short": "6730f58",
    "date": "2026-09-13T22:26:17+03:00",
    "subject": "update: add additional data to trace functions"
   },
   "sha256": "579beb983449421c24f6d0dba41a77a0054636364bc933ddfaf6daf735fc26d1",
   "first": "/fragments/one-crossing/the-template/the-knot/change-3/",
   "finding": "the journal stamps CLEWS·open-clew → core/registers/ensure-clew.ts for registerKnotDefinition(), which lives in core/registers/register-knot-definition.ts (the op map's file for that register · action)"
  },
  "sweepNextTuple": {
   "file": "core/registers/sweep-next-tuple.ts",
   "source": [
    "// 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;",
    "  setWaveContext(file, { offset: tuple.offset, phase: \"sweep\" });",
    "  setDriver(file, \"membrane\");",
    "  recordTransition(file, \"membrane\", \"MEMBRANE.CURSOR\", \"sweep\", { offset: tuple.offset });",
    "  return tuple;",
    "}"
   ],
   "function": [
    11,
    21
   ],
   "header": [
    1,
    4
   ],
   "journals": [
    [
     19,
     19
    ]
   ],
   "marks": {
    "16": "the membrane's pointer moves on by one"
   },
   "spec": [
    {
     "label": "Vol. 02 §4.6",
     "href": "/specification/vol-02-machine-model/#46-membrane-and-runtime-registers"
    },
    {
     "label": "Vol. 07 §3",
     "href": "/specification/vol-07-membrane-and-controllers/#3-the-sweep-algorithm"
    }
   ],
   "plain": "The membrane's step: pass over the record under its pointer and move the pointer on — exactly once per record.",
   "lastChanged": {
    "commit": "6730f582d79bd530971fb34ea35dde6760b842df",
    "short": "6730f58",
    "date": "2026-09-13T22:26:17+03:00",
    "subject": "update: add additional data to trace functions"
   },
   "sha256": "e705b3f45f9fabf3ab8a119d3f7f68e61f586a886d09624887914373ea87be78",
   "first": "/fragments/one-crossing/the-template/the-knot/change-5/"
  },
  "registerDescriptorDefinition": {
   "file": "core/registers/register-descriptor-definition.ts",
   "source": [
    "// BIND.DEFS and DISPATCH write (Vol. 02 §4.2): the registration payload",
    "// lands as data; the dispatch table indexes the descriptor id under every",
    "// declared interest (the activation knot plus every demand for an operator",
    "// bind, the one subscription for an emit descriptor). Duplicate-id rejection",
    "// is the station's verdict (ADR-011 finding 3) — this op only records an",
    "// accepted registration.",
    "",
    "import type { DescriptorDefinedPayload } from \"../topology/gate\";",
    "import type { TopologyRegisters } from \"./topology-registers\";",
    "import type { RegisterFile } from \"./register-file\";",
    "import { recordTransition } from \"./record-transition\";",
    "",
    "export function registerDescriptorDefinition(",
    "  file: RegisterFile,",
    "  region: TopologyRegisters,",
    "  payload: DescriptorDefinedPayload,",
    "  interests: readonly string[]",
    "): void {",
    "  region.bindDefs.set(payload.id, payload);",
    "  for (const interest of interests) {",
    "    const list = region.dispatch.get(interest);",
    "    if (list) list.push(payload.id);",
    "    else region.dispatch.set(interest, [payload.id]);",
    "  }",
    "  recordTransition(file, `topology:${region.regionId}`, \"BIND.DEFS\", \"register-descriptor\", {",
    "    id: payload.id,",
    "    interests",
    "  });",
    "}"
   ],
   "function": [
    13,
    29
   ],
   "header": [
    1,
    6
   ],
   "journals": [
    [
     25,
     28
    ]
   ],
   "marks": {
    "19": "the description is stored under its name",
    "23": "listed under the listener it waits for"
   },
   "spec": [
    {
     "label": "Vol. 02 §4.2",
     "href": "/specification/vol-02-machine-model/#42-topology-registers"
    }
   ],
   "plain": "Stores a doer's description under its name, and lists it under every listener it waits for.",
   "lastChanged": {
    "commit": "f36e70df4d22c01678729db4a8baf70e92979ca2",
    "short": "f36e70d",
    "date": "2026-08-18T22:05:56+03:00",
    "subject": "update: refactor structure of modules"
   },
   "sha256": "db4a8e856cade144a68734c0ad8683f76812cd3b65786eeece45419702513eed",
   "first": "/fragments/one-crossing/the-template/the-bind/change-3/"
  },
  "ensureClew": {
   "file": "core/registers/ensure-clew.ts",
   "source": [
    "// 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);",
    "    recordTransition(clew.file, `topology:${clew.region.regionId}/clew:${clew.knotId}`, \"CLEWS\", \"open-clew\", {",
    "      key: clew.key",
    "    });",
    "  }",
    "  return registers;",
    "}"
   ],
   "function": [
    9,
    21
   ],
   "header": [
    1,
    4
   ],
   "journals": [
    [
     16,
     18
    ]
   ],
   "marks": {
    "15": "a new lane is opened for this key"
   },
   "spec": [
    {
     "label": "Vol. 02 §4.2",
     "href": "/specification/vol-02-machine-model/#42-topology-registers"
    },
    {
     "label": "Vol. 03 §5.1",
     "href": "/specification/vol-03-wave-log/#5-keys-attribution-lanes"
    }
   ],
   "plain": "Opens a lane in a listener for a new key — the first time a fact with that key reaches it.",
   "lastChanged": {
    "commit": "f36e70df4d22c01678729db4a8baf70e92979ca2",
    "short": "f36e70d",
    "date": "2026-08-18T22:05:56+03:00",
    "subject": "update: refactor structure of modules"
   },
   "sha256": "4a5ba4fab21a929d3a9521195c7c86821f3a851e50d181dcc4b1843c1757c9dd",
   "first": "/fragments/one-crossing/the-run/the-note-arrives/change-3/"
  },
  "collectDeterministicSlot": {
   "file": "core/registers/collect-deterministic-slot.ts",
   "source": [
    "// 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);",
    "  }",
    "  recordTransition(clew.file, `topology:${clew.region.regionId}/clew:${clew.knotId}`, \"COLLECTED\", \"collect\", {",
    "    key: clew.key,",
    "    slot,",
    "    reduce",
    "  });",
    "}"
   ],
   "function": [
    8,
    27
   ],
   "header": [
    1,
    3
   ],
   "journals": [
    [
     22,
     26
    ]
   ],
   "marks": {
    "20": "the slot is filled"
   },
   "spec": [
    {
     "label": "Vol. 02 §4.4",
     "href": "/specification/vol-02-machine-model/#44-per-clew-registers-deterministic-knot"
    },
    {
     "label": "Vol. 05 §3.3",
     "href": "/specification/vol-05-activation-knots/#3-collection-rules-shared-by-both-strategies"
    }
   ],
   "plain": "Fills a slot of a listener with a value it heard.",
   "lastChanged": {
    "commit": "f36e70df4d22c01678729db4a8baf70e92979ca2",
    "short": "f36e70d",
    "date": "2026-08-18T22:05:56+03:00",
    "subject": "update: refactor structure of modules"
   },
   "sha256": "7a0ddd0e91f552243e84cd94bbb309900c17ce699dde174b183a26af28f02f31",
   "first": "/fragments/one-crossing/the-run/the-note-arrives/change-4/"
  },
  "resetDeterministicClew": {
   "file": "core/registers/reset-deterministic-clew.ts",
   "source": [
    "// 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();",
    "  recordTransition(clew.file, `topology:${clew.region.regionId}/clew:${clew.knotId}`, \"COLLECTED\", \"reset\", {",
    "    key: clew.key",
    "  });",
    "}"
   ],
   "function": [
    8,
    13
   ],
   "header": [
    1,
    3
   ],
   "journals": [
    [
     10,
     12
    ]
   ],
   "marks": {
    "9": "the slots are emptied"
   },
   "spec": [
    {
     "label": "Vol. 02 §4.4",
     "href": "/specification/vol-02-machine-model/#44-per-clew-registers-deterministic-knot"
    }
   ],
   "plain": "Empties a listener's slots once it has announced that it is ready.",
   "lastChanged": {
    "commit": "f36e70df4d22c01678729db4a8baf70e92979ca2",
    "short": "f36e70d",
    "date": "2026-08-18T22:05:56+03:00",
    "subject": "update: refactor structure of modules"
   },
   "sha256": "757e5de28211c73afab55a63387c7443f8ce51493e982f888baa9ae76b40cfde",
   "first": "/fragments/one-crossing/the-run/the-note-arrives/change-5/"
  },
  "cellsRegion": {
   "file": "core/registers/cells-region.ts",
   "source": [
    "// The CellSpace stratum accessor (Vol. 12 §2): mounted lazily on the first",
    "// touch — an assembly without CellSpace never carries the extension",
    "// registers. Mounting is a transition; an existing stratum is a read.",
    "",
    "import type { CellSpaceRegisters } from \"./cell-registers\";",
    "import type { RegisterFile } from \"./register-file\";",
    "import { recordTransition } from \"./record-transition\";",
    "",
    "export function cellsRegion(file: RegisterFile): CellSpaceRegisters {",
    "  if (!file.registers.cells) {",
    "    file.registers.cells = { requests: new Map(), charters: new Map(), cells: new Map() };",
    "    recordTransition(file, \"cellspace\", \"REQUESTS,CHARTERS,CELLS\", \"mount\");",
    "  }",
    "  return file.registers.cells;",
    "}"
   ],
   "function": [
    9,
    15
   ],
   "header": [
    1,
    3
   ],
   "journals": [
    [
     12,
     12
    ]
   ],
   "marks": {
    "11": "three empty registers are created"
   },
   "spec": [
    {
     "label": "Vol. 12 §2",
     "href": "/specification/vol-12-ext-cells-and-charters/#2-terminology"
    }
   ],
   "plain": "Creates CellSpace's registers the first time CellSpace needs them.",
   "lastChanged": {
    "commit": "f36e70df4d22c01678729db4a8baf70e92979ca2",
    "short": "f36e70d",
    "date": "2026-08-18T22:05:56+03:00",
    "subject": "update: refactor structure of modules"
   },
   "sha256": "9a91bf90ad3915146bd2e585e2fb9b9245d21faf0f43ba5737466c58197d5146",
   "first": "/fragments/one-crossing/the-run/the-note-arrives/change-6/"
  },
  "ensureRendezvous": {
   "file": "core/registers/ensure-rendezvous.ts",
   "source": [
    "// RDV lane access (Vol. 02 §4.5): one rendezvous state per key lane, created",
    "// lazily on the first readiness that reaches the bind — activated at birth",
    "// when the bind declares no `on` (a demands-only bind, Vol. 06 §4.5).",
    "// Creation is a transition; an existing lane passes through as a read.",
    "",
    "import type { BindHandle, RendezvousLane, RendezvousRegisters } from \"./topology-registers\";",
    "import { recordTransition } from \"./record-transition\";",
    "",
    "export function ensureRendezvous(bind: BindHandle, key: string | null, activatedAtBirth: boolean): RendezvousLane {",
    "  let bank: RendezvousRegisters | undefined = bind.region.rdv.get(bind.bindId);",
    "  if (!bank) {",
    "    bank = { lanes: new Map(), intentCtr: 0 };",
    "    bind.region.rdv.set(bind.bindId, bank);",
    "    // A new bank changes the REGION's RDV register set (Vol. 02 §4.5) — the",
    "    // region station journals it, so its document (rdvOrder) folds true",
    "    // (the fold oracle, ADR-004 d11).",
    "    recordTransition(bind.file, `topology:${bind.region.regionId}`, \"RDV\", \"open-bank\", { bindId: bind.bindId });",
    "  }",
    "  let lane = bank.lanes.get(key);",
    "  if (!lane) {",
    "    lane = { activated: activatedAtBirth, scope: new Map(), projected: false };",
    "    bank.lanes.set(key, lane);",
    "    recordTransition(bind.file, `topology:${bind.region.regionId}/bind:${bind.bindId}`, \"RDV\", \"open-lane\", {",
    "      key,",
    "      activatedAtBirth",
    "    });",
    "  }",
    "  return lane;",
    "}"
   ],
   "function": [
    9,
    29
   ],
   "header": [
    1,
    4
   ],
   "journals": [
    [
     17,
     17
    ],
    [
     23,
     26
    ]
   ],
   "marks": {
    "13": "a rendezvous for this doer",
    "22": "a lane for this key"
   },
   "spec": [
    {
     "label": "Vol. 02 §4.5",
     "href": "/specification/vol-02-machine-model/#45-per-bind-registers-operator-bind"
    },
    {
     "label": "Vol. 06 §4.5",
     "href": "/specification/vol-06-bind-descriptors/#4-rendezvous-algorithm"
    }
   ],
   "plain": "Opens a doer's rendezvous the first time it is woken, and a lane in it for each new key.",
   "lastChanged": {
    "commit": "3530f2c149ebe5d16928bf0ce1378ed1a9d14367",
    "short": "3530f2c",
    "date": "2026-09-07T22:21:32+03:00",
    "subject": "add: api and wave engine as standalone with firebase integration"
   },
   "sha256": "7e24d2e29cd6a5839c1d1170b5849a2f7a3eadcddc0d13a8bd4a18ef205053cc",
   "first": "/fragments/one-crossing/the-run/the-knot-is-ready/change-2/"
  },
  "latchRendezvousScope": {
   "file": "core/registers/latch-rendezvous-scope.ts",
   "source": [
    "// RDV scope latch (Vol. 02 §4.5, Vol. 06 §4): a readiness understanding",
    "// enters the bound scope under its declared name — a later readiness of the",
    "// same demand refreshes its entry until projection (the latching barrier).",
    "// Activation readiness additionally opens the lane (ACTIVATED).",
    "",
    "import type { BindHandle, RendezvousLane } from \"./topology-registers\";",
    "import { recordTransition } from \"./record-transition\";",
    "",
    "export function latchRendezvousScope(",
    "  bind: BindHandle,",
    "  lane: RendezvousLane,",
    "  key: string | null,",
    "  as: string,",
    "  understanding: unknown,",
    "  options: { activates: boolean }",
    "): void {",
    "  if (options.activates) lane.activated = true;",
    "  lane.scope.set(as, understanding);",
    "  recordTransition(",
    "    bind.file,",
    "    `topology:${bind.region.regionId}/bind:${bind.bindId}`,",
    "    options.activates ? \"RDV.ACTIVATED,RDV.SCOPE\" : \"RDV.SCOPE\",",
    "    \"latch-scope\",",
    "    { key, as }",
    "  );",
    "}"
   ],
   "function": [
    9,
    26
   ],
   "header": [
    1,
    4
   ],
   "journals": [
    [
     19,
     25
    ]
   ],
   "marks": {
    "17": "the lane is activated",
    "18": "the understanding is gathered"
   },
   "spec": [
    {
     "label": "Vol. 02 §4.5",
     "href": "/specification/vol-02-machine-model/#45-per-bind-registers-operator-bind"
    },
    {
     "label": "Vol. 06 §4",
     "href": "/specification/vol-06-bind-descriptors/#4-rendezvous-algorithm"
    }
   ],
   "plain": "Gathers what a listener understood into the doer's scope — and, from the listener the doer acts on, activates the lane.",
   "lastChanged": {
    "commit": "f36e70df4d22c01678729db4a8baf70e92979ca2",
    "short": "f36e70d",
    "date": "2026-08-18T22:05:56+03:00",
    "subject": "update: refactor structure of modules"
   },
   "sha256": "cd8c4dc77b8e90abeecc5a3ba52aacf6b6f6573bf1f6a7db490fcfeca8fee106",
   "first": "/fragments/one-crossing/the-run/the-knot-is-ready/change-4/"
  },
  "latchRendezvousProjection": {
   "file": "core/registers/latch-rendezvous-projection.ts",
   "source": [
    "// RDV.PROJECTED latch (Vol. 02 §4.5, Vol. 06 §4.2): one-shot — once the",
    "// scope is judged and the intention projected (or rejected at a gate), the",
    "// lane never fires again. The latch never reopens; revision is fresh binds.",
    "",
    "import type { BindHandle, RendezvousLane } from \"./topology-registers\";",
    "import { recordTransition } from \"./record-transition\";",
    "",
    "export function latchRendezvousProjection(bind: BindHandle, lane: RendezvousLane, key: string | null): void {",
    "  lane.projected = true;",
    "  recordTransition(bind.file, `topology:${bind.region.regionId}/bind:${bind.bindId}`, \"RDV.PROJECTED\", \"latch-projection\", {",
    "    key",
    "  });",
    "}"
   ],
   "function": [
    8,
    13
   ],
   "header": [
    1,
    3
   ],
   "journals": [
    [
     10,
     12
    ]
   ],
   "marks": {
    "9": "the lane is latched for good"
   },
   "spec": [
    {
     "label": "Vol. 02 §4.5",
     "href": "/specification/vol-02-machine-model/#45-per-bind-registers-operator-bind"
    },
    {
     "label": "Vol. 06 §4.2",
     "href": "/specification/vol-06-bind-descriptors/#4-rendezvous-algorithm"
    }
   ],
   "plain": "Latches a doer's lane after it acts, so that it never acts on that lane again.",
   "lastChanged": {
    "commit": "f36e70df4d22c01678729db4a8baf70e92979ca2",
    "short": "f36e70d",
    "date": "2026-08-18T22:05:56+03:00",
    "subject": "update: refactor structure of modules"
   },
   "sha256": "e76f07cedce3dffa21923b08e48c7c49516d16d6c45f347ae1b7f526b0aa4cbe",
   "first": "/fragments/one-crossing/the-run/the-knot-is-ready/change-5/"
  },
  "nextIntentionUid": {
   "file": "core/registers/next-intention-uid.ts",
   "source": [
    "// INTENT.CTR advance (Vol. 02 §4.5, §4.7 rule 3): the service-intention uid",
    "// sequence, shared across lanes and never reset — uids stay unique per",
    "// machine instance, which is exactly why this counter belongs to the durable",
    "// stratum and must survive a snapshot/restore (ADR-002 decision 4).",
    "",
    "import type { BindHandle } from \"./topology-registers\";",
    "import { recordTransition } from \"./record-transition\";",
    "",
    "export function nextIntentionUid(bind: BindHandle): string {",
    "  const bank = bind.region.rdv.get(bind.bindId);",
    "  if (!bank) throw new Error(`Rendezvous bank missing for bind '${bind.bindId}'.`);",
    "  bank.intentCtr += 1;",
    "  const uid = `${bind.bindId}#${bank.intentCtr}`;",
    "  recordTransition(bind.file, `topology:${bind.region.regionId}/bind:${bind.bindId}`, \"INTENT.CTR\", \"mint-uid\", {",
    "    uid",
    "  });",
    "  return uid;",
    "}"
   ],
   "function": [
    9,
    18
   ],
   "header": [
    1,
    4
   ],
   "journals": [
    [
     14,
     16
    ]
   ],
   "marks": {
    "12": "the counter moves on",
    "13": "the name: the doer's name and the count"
   },
   "spec": [
    {
     "label": "Vol. 02 §4.5",
     "href": "/specification/vol-02-machine-model/#45-per-bind-registers-operator-bind"
    },
    {
     "label": "Vol. 02 §4.7",
     "href": "/specification/vol-02-machine-model/#47-register-discipline"
    }
   ],
   "plain": "Gives a doer's next intention its unique name, from a counter that never goes back.",
   "lastChanged": {
    "commit": "f36e70df4d22c01678729db4a8baf70e92979ca2",
    "short": "f36e70d",
    "date": "2026-08-18T22:05:56+03:00",
    "subject": "update: refactor structure of modules"
   },
   "sha256": "38e3e48a1ca86dd164acee62e1c7468c7f9965e9ce8a9954f61379ab524206ec",
   "first": "/fragments/one-crossing/the-run/the-knot-is-ready/change-6/"
  },
  "indexCausalRequest": {
   "file": "core/registers/index-causal-request.ts",
   "source": [
    "// REQUESTS write (Vol. 12 §5.1): every committed service intention is",
    "// indexed by uid so later proposals prove their causal authority against a",
    "// real, unconsumed, same-key request — admission is an act, not a lookup",
    "// (KEY_ARCHITECTURE §5).",
    "",
    "import type { CausalRequest } from \"../cells/gate\";",
    "import type { RegisterFile } from \"./register-file\";",
    "import { cellsRegion } from \"./cells-region\";",
    "import { recordTransition } from \"./record-transition\";",
    "",
    "export function indexCausalRequest(file: RegisterFile, request: CausalRequest): void {",
    "  cellsRegion(file).requests.set(request.uid, request);",
    "  recordTransition(file, \"cellspace\", \"REQUESTS\", \"index-request\", {",
    "    uid: request.uid,",
    "    bindId: request.bindId",
    "  });",
    "}"
   ],
   "function": [
    11,
    17
   ],
   "header": [
    1,
    4
   ],
   "journals": [
    [
     13,
     16
    ]
   ],
   "marks": {
    "12": "the request is kept under its name"
   },
   "spec": [
    {
     "label": "Vol. 12 §5.1",
     "href": "/specification/vol-12-ext-cells-and-charters/#51-charter-charterproposed-charterdefined-charterrejected"
    }
   ],
   "plain": "Indexes a request the moment it is written, under its intention's name — so that whatever answers it later finds the doer it belongs to.",
   "lastChanged": {
    "commit": "f36e70df4d22c01678729db4a8baf70e92979ca2",
    "short": "f36e70d",
    "date": "2026-08-18T22:05:56+03:00",
    "subject": "update: refactor structure of modules"
   },
   "sha256": "4be82992742b656c04fdd50a9699a9cb6942221f5dd562f87496219a4272a329",
   "first": "/fragments/one-crossing/the-run/the-request-crosses/change-2/"
  },
  "trackDischarge": {
   "file": "core/registers/track-discharge.ts",
   "source": [
    "// DISCHARGE.TABLE entry (Vol. 02 §4.6, Vol. 08 §3): an in-flight discharge",
    "// joins the table under a fresh slot id. The defect path is part of the",
    "// entry's own movement: a rejected discharge leaves the table as the",
    "// rejection propagates, so the machine stays usable for the next wave",
    "// (refimpl 06 §1; host ADR-011 finding 2).",
    "",
    "import type { WaveEmission } from \"../wave/gate\";",
    "import type { RegisterFile } from \"./register-file\";",
    "import { recordTransition } from \"./record-transition\";",
    "import { setDriver, setWaveContext } from \"./set-wave-context\";",
    "",
    "export function trackDischarge(",
    "  file: RegisterFile,",
    "  claim: { controller: string; offset: number },",
    "  discharge: Promise<readonly WaveEmission[]>",
    "): void {",
    "  setWaveContext(file, { offset: claim.offset, phase: \"sweep\" }); // attribute to the claimed tuple",
    "  setDriver(file, \"runtime\");",
    "  file.ephemeral.nextDischargeId += 1;",
    "  const id = file.ephemeral.nextDischargeId;",
    "  file.ephemeral.inFlight.set(",
    "    id,",
    "    discharge.then(",
    "      (emissions) => ({ id, controller: claim.controller, offset: claim.offset, emissions }),",
    "      (defect: unknown) => {",
    "        file.ephemeral.inFlight.delete(id);",
    "        recordTransition(file, \"runtime\", \"DISCHARGE.TABLE\", \"discharge-defect\", { id, ...claim });",
    "        throw defect;",
    "      }",
    "    )",
    "  );",
    "  recordTransition(file, \"runtime\", \"DISCHARGE.TABLE\", \"track-discharge\", { id, ...claim });",
    "}"
   ],
   "function": [
    12,
    33
   ],
   "header": [
    1,
    5
   ],
   "journals": [
    [
     27,
     27
    ],
    [
     32,
     32
    ]
   ],
   "marks": {
    "19": "the hand-out gets the next number",
    "21": "it is kept among those still out in the world"
   },
   "spec": [
    {
     "label": "Vol. 02 §4.6",
     "href": "/specification/vol-02-machine-model/#46-membrane-and-runtime-registers"
    },
    {
     "label": "Vol. 08 §3",
     "href": "/specification/vol-08-virtual-machine/#3-the-settle-algorithm"
    }
   ],
   "plain": "Notes, at the membrane, that a record has been handed to the world, and keeps it among those the machine still waits on.",
   "lastChanged": {
    "commit": "6730f582d79bd530971fb34ea35dde6760b842df",
    "short": "6730f58",
    "date": "2026-09-13T22:26:17+03:00",
    "subject": "update: add additional data to trace functions"
   },
   "sha256": "e3bdea150602faa7dd94f9a06a4ad2a7810167b9c9c9ae08b8fe0819b911bcd7",
   "first": "/fragments/one-crossing/the-run/the-request-crosses/change-4/"
  },
  "resolveDischarge": {
   "file": "core/registers/resolve-discharge.ts",
   "source": [
    "// DISCHARGE.TABLE settlement (Vol. 08 §3): the earliest completed discharge",
    "// leaves the table and its answers re-enter the wave as the next run's",
    "// seeds. Earliest completion wins; consumers rely on correlation, never",
    "// adjacency (Vol. 03 §3.3).",
    "",
    "import type { RegisterFile } from \"./register-file\";",
    "import { recordTransition } from \"./record-transition\";",
    "",
    "// The resolution names the claim it answers (controller · the swept tuple)",
    "// and is journaled under THAT tuple's wave context, so the tuple's own",
    "// journal states which discharge answered it (ADR-004 d17); the answer's",
    "// emissions are then appended under the same attribution.",
    "export function resolveDischarge(file: RegisterFile, id: number, emissionCount: number, claim?: { controller: string; offset: number }): void {",
    "  file.ephemeral.inFlight.delete(id);",
    "  recordTransition(file, \"runtime\", \"DISCHARGE.TABLE\", \"resolve-discharge\", { id, emissions: emissionCount, ...(claim ?? {}) });",
    "}"
   ],
   "function": [
    13,
    16
   ],
   "header": [
    1,
    4
   ],
   "journals": [
    [
     15,
     15
    ]
   ],
   "marks": {
    "14": "no longer waiting on the world"
   },
   "spec": [
    {
     "label": "Vol. 08 §3",
     "href": "/specification/vol-08-virtual-machine/#3-the-settle-algorithm"
    },
    {
     "label": "Vol. 03 §3.3",
     "href": "/specification/vol-03-wave-log/#3-ordering-and-happens-before"
    }
   ],
   "plain": "Notes that the world has answered: the hand-out is closed, and what came back is ready to enter the log.",
   "lastChanged": {
    "commit": "de79653f08a7514c86eb787ca54f9bf20c352f55",
    "short": "de79653",
    "date": "2026-09-11T22:15:51+03:00",
    "subject": "update: additional debug tracing for tuples"
   },
   "sha256": "4f904d8bcb782797a5c4acb2d6b69f8ccba528a61c163ff3e5c05c9c23c391f5",
   "first": "/fragments/one-crossing/the-run/the-request-crosses/change-5/"
  }
 },
 "sequence": [
  "/fragments/one-crossing/the-template/",
  "/fragments/one-crossing/the-template/the-wave-begins/",
  "/fragments/one-crossing/the-template/the-knot/",
  "/fragments/one-crossing/the-template/the-bind/",
  "/fragments/one-crossing/the-template/the-wave-ends/",
  "/fragments/one-crossing/the-run/",
  "/fragments/one-crossing/the-run/the-wave-begins/",
  "/fragments/one-crossing/the-run/the-note-arrives/",
  "/fragments/one-crossing/the-run/the-knot-is-ready/",
  "/fragments/one-crossing/the-run/the-request-crosses/",
  "/fragments/one-crossing/the-run/the-world-answers/",
  "/fragments/one-crossing/the-run/the-wave-ends/"
 ],
 "start": "/fragments/one-crossing/the-template/the-knot/",
 "pages": {
  "/fragments/one-crossing/the-template/": {
   "kind": "wave",
   "wave": "the-template",
   "label": "Wave 1 · The template",
   "path": "/fragments/one-crossing/the-template/",
   "title": "Wave 1 · The template · Fragment 2",
   "nav": {
    "n": 1,
    "of": 12,
    "prev": null,
    "next": {
     "path": "/fragments/one-crossing/the-template/the-wave-begins/",
     "title": "A wave begins"
    }
   },
   "anchor": "wave-2/1"
  },
  "/fragments/one-crossing/the-template/the-wave-begins/": {
   "kind": "change",
   "address": "wave-2/1",
   "label": "A wave begins",
   "path": "/fragments/one-crossing/the-template/the-wave-begins/",
   "title": "A wave begins · Fragment 2",
   "nav": {
    "n": 2,
    "of": 12,
    "prev": {
     "path": "/fragments/one-crossing/the-template/",
     "title": "Wave 1 · The template"
    },
    "next": {
     "path": "/fragments/one-crossing/the-template/the-knot/",
     "title": "#0 · a listener is described"
    }
   },
   "anchor": "wave-2/1"
  },
  "/fragments/one-crossing/the-template/the-knot/": {
   "kind": "tuple",
   "o": 0,
   "label": "#0 · a listener is described",
   "path": "/fragments/one-crossing/the-template/the-knot/",
   "title": "#0 · a listener is described · Fragment 2",
   "nav": {
    "n": 3,
    "of": 12,
    "prev": {
     "path": "/fragments/one-crossing/the-template/the-wave-begins/",
     "title": "A wave begins"
    },
    "next": {
     "path": "/fragments/one-crossing/the-template/the-bind/",
     "title": "#1 · a doer that asks is described"
    }
   },
   "anchor": "0/1"
  },
  "/fragments/one-crossing/the-template/the-knot/change-1/": {
   "kind": "change",
   "address": "wave-2/2",
   "label": "Record #0 enters the log",
   "path": "/fragments/one-crossing/the-template/the-knot/change-1/",
   "title": "Record #0 enters the log · Fragment 2",
   "nav": {
    "n": 3,
    "of": 12,
    "prev": {
     "path": "/fragments/one-crossing/the-template/the-wave-begins/",
     "title": "A wave begins"
    },
    "next": {
     "path": "/fragments/one-crossing/the-template/the-bind/",
     "title": "#1 · a doer that asks is described"
    }
   },
   "anchor": "wave-2/2"
  },
  "/fragments/one-crossing/the-template/the-knot/change-2/": {
   "kind": "change",
   "address": "0/1",
   "label": "The engine takes #0",
   "path": "/fragments/one-crossing/the-template/the-knot/change-2/",
   "title": "The engine takes #0 · Fragment 2",
   "nav": {
    "n": 3,
    "of": 12,
    "prev": {
     "path": "/fragments/one-crossing/the-template/the-wave-begins/",
     "title": "A wave begins"
    },
    "next": {
     "path": "/fragments/one-crossing/the-template/the-bind/",
     "title": "#1 · a doer that asks is described"
    }
   },
   "anchor": "0/1"
  },
  "/fragments/one-crossing/the-template/the-knot/change-3/": {
   "kind": "change",
   "address": "0/2",
   "label": "The listener is added to the figure",
   "path": "/fragments/one-crossing/the-template/the-knot/change-3/",
   "title": "The listener is added to the figure · Fragment 2",
   "nav": {
    "n": 3,
    "of": 12,
    "prev": {
     "path": "/fragments/one-crossing/the-template/the-wave-begins/",
     "title": "A wave begins"
    },
    "next": {
     "path": "/fragments/one-crossing/the-template/the-bind/",
     "title": "#1 · a doer that asks is described"
    }
   },
   "anchor": "0/2"
  },
  "/fragments/one-crossing/the-template/the-knot/change-4/": {
   "kind": "change",
   "address": "0/3",
   "label": "The listener gets a trial lane",
   "path": "/fragments/one-crossing/the-template/the-knot/change-4/",
   "title": "The listener gets a trial lane · Fragment 2",
   "nav": {
    "n": 3,
    "of": 12,
    "prev": {
     "path": "/fragments/one-crossing/the-template/the-wave-begins/",
     "title": "A wave begins"
    },
    "next": {
     "path": "/fragments/one-crossing/the-template/the-bind/",
     "title": "#1 · a doer that asks is described"
    }
   },
   "anchor": "0/3"
  },
  "/fragments/one-crossing/the-template/the-knot/change-5/": {
   "kind": "change",
   "address": "0/4",
   "label": "The membrane passes #0",
   "path": "/fragments/one-crossing/the-template/the-knot/change-5/",
   "title": "The membrane passes #0 · Fragment 2",
   "nav": {
    "n": 3,
    "of": 12,
    "prev": {
     "path": "/fragments/one-crossing/the-template/the-wave-begins/",
     "title": "A wave begins"
    },
    "next": {
     "path": "/fragments/one-crossing/the-template/the-bind/",
     "title": "#1 · a doer that asks is described"
    }
   },
   "anchor": "0/4"
  },
  "/fragments/one-crossing/the-template/the-bind/": {
   "kind": "tuple",
   "o": 1,
   "label": "#1 · a doer that asks is described",
   "path": "/fragments/one-crossing/the-template/the-bind/",
   "title": "#1 · a doer that asks is described · Fragment 2",
   "nav": {
    "n": 4,
    "of": 12,
    "prev": {
     "path": "/fragments/one-crossing/the-template/the-knot/",
     "title": "#0 · a listener is described"
    },
    "next": {
     "path": "/fragments/one-crossing/the-template/the-wave-ends/",
     "title": "The wave ends"
    }
   },
   "anchor": "1/1"
  },
  "/fragments/one-crossing/the-template/the-bind/change-1/": {
   "kind": "change",
   "address": "wave-2/3",
   "label": "Record #1 enters the log",
   "path": "/fragments/one-crossing/the-template/the-bind/change-1/",
   "title": "Record #1 enters the log · Fragment 2",
   "nav": {
    "n": 4,
    "of": 12,
    "prev": {
     "path": "/fragments/one-crossing/the-template/the-knot/",
     "title": "#0 · a listener is described"
    },
    "next": {
     "path": "/fragments/one-crossing/the-template/the-wave-ends/",
     "title": "The wave ends"
    }
   },
   "anchor": "wave-2/3"
  },
  "/fragments/one-crossing/the-template/the-bind/change-2/": {
   "kind": "change",
   "address": "1/1",
   "label": "The engine takes #1",
   "path": "/fragments/one-crossing/the-template/the-bind/change-2/",
   "title": "The engine takes #1 · Fragment 2",
   "nav": {
    "n": 4,
    "of": 12,
    "prev": {
     "path": "/fragments/one-crossing/the-template/the-knot/",
     "title": "#0 · a listener is described"
    },
    "next": {
     "path": "/fragments/one-crossing/the-template/the-wave-ends/",
     "title": "The wave ends"
    }
   },
   "anchor": "1/1"
  },
  "/fragments/one-crossing/the-template/the-bind/change-3/": {
   "kind": "change",
   "address": "1/2",
   "label": "The doer is added to the figure",
   "path": "/fragments/one-crossing/the-template/the-bind/change-3/",
   "title": "The doer is added to the figure · Fragment 2",
   "nav": {
    "n": 4,
    "of": 12,
    "prev": {
     "path": "/fragments/one-crossing/the-template/the-knot/",
     "title": "#0 · a listener is described"
    },
    "next": {
     "path": "/fragments/one-crossing/the-template/the-wave-ends/",
     "title": "The wave ends"
    }
   },
   "anchor": "1/2"
  },
  "/fragments/one-crossing/the-template/the-bind/change-4/": {
   "kind": "change",
   "address": "1/3",
   "label": "The membrane passes #1",
   "path": "/fragments/one-crossing/the-template/the-bind/change-4/",
   "title": "The membrane passes #1 · Fragment 2",
   "nav": {
    "n": 4,
    "of": 12,
    "prev": {
     "path": "/fragments/one-crossing/the-template/the-knot/",
     "title": "#0 · a listener is described"
    },
    "next": {
     "path": "/fragments/one-crossing/the-template/the-wave-ends/",
     "title": "The wave ends"
    }
   },
   "anchor": "1/3"
  },
  "/fragments/one-crossing/the-template/the-wave-ends/": {
   "kind": "change",
   "address": "wave-2/4",
   "label": "The wave ends",
   "path": "/fragments/one-crossing/the-template/the-wave-ends/",
   "title": "The wave ends · Fragment 2",
   "nav": {
    "n": 5,
    "of": 12,
    "prev": {
     "path": "/fragments/one-crossing/the-template/the-bind/",
     "title": "#1 · a doer that asks is described"
    },
    "next": {
     "path": "/fragments/one-crossing/the-run/",
     "title": "Wave 2 · A note, a request, an answer"
    }
   },
   "anchor": "wave-2/4"
  },
  "/fragments/one-crossing/the-run/": {
   "kind": "wave",
   "wave": "the-run",
   "label": "Wave 2 · A note, a request, an answer",
   "path": "/fragments/one-crossing/the-run/",
   "title": "Wave 2 · A note, a request, an answer · Fragment 2",
   "nav": {
    "n": 6,
    "of": 12,
    "prev": {
     "path": "/fragments/one-crossing/the-template/the-wave-ends/",
     "title": "The wave ends"
    },
    "next": {
     "path": "/fragments/one-crossing/the-run/the-wave-begins/",
     "title": "A new wave begins"
    }
   },
   "anchor": "wave-6/1"
  },
  "/fragments/one-crossing/the-run/the-wave-begins/": {
   "kind": "change",
   "address": "wave-6/1",
   "label": "A new wave begins",
   "path": "/fragments/one-crossing/the-run/the-wave-begins/",
   "title": "A new wave begins · Fragment 2",
   "nav": {
    "n": 7,
    "of": 12,
    "prev": {
     "path": "/fragments/one-crossing/the-run/",
     "title": "Wave 2 · A note, a request, an answer"
    },
    "next": {
     "path": "/fragments/one-crossing/the-run/the-note-arrives/",
     "title": "#2 · a note arrives"
    }
   },
   "anchor": "wave-6/1"
  },
  "/fragments/one-crossing/the-run/the-note-arrives/": {
   "kind": "tuple",
   "o": 2,
   "label": "#2 · a note arrives",
   "path": "/fragments/one-crossing/the-run/the-note-arrives/",
   "title": "#2 · a note arrives · Fragment 2",
   "nav": {
    "n": 8,
    "of": 12,
    "prev": {
     "path": "/fragments/one-crossing/the-run/the-wave-begins/",
     "title": "A new wave begins"
    },
    "next": {
     "path": "/fragments/one-crossing/the-run/the-knot-is-ready/",
     "title": "#3 · the listener is ready, the doer asks"
    }
   },
   "anchor": "2/1"
  },
  "/fragments/one-crossing/the-run/the-note-arrives/change-1/": {
   "kind": "change",
   "address": "wave-6/2",
   "label": "Record #2 enters the log",
   "path": "/fragments/one-crossing/the-run/the-note-arrives/change-1/",
   "title": "Record #2 enters the log · Fragment 2",
   "nav": {
    "n": 8,
    "of": 12,
    "prev": {
     "path": "/fragments/one-crossing/the-run/the-wave-begins/",
     "title": "A new wave begins"
    },
    "next": {
     "path": "/fragments/one-crossing/the-run/the-knot-is-ready/",
     "title": "#3 · the listener is ready, the doer asks"
    }
   },
   "anchor": "wave-6/2"
  },
  "/fragments/one-crossing/the-run/the-note-arrives/change-2/": {
   "kind": "change",
   "address": "2/1",
   "label": "The engine takes #2",
   "path": "/fragments/one-crossing/the-run/the-note-arrives/change-2/",
   "title": "The engine takes #2 · Fragment 2",
   "nav": {
    "n": 8,
    "of": 12,
    "prev": {
     "path": "/fragments/one-crossing/the-run/the-wave-begins/",
     "title": "A new wave begins"
    },
    "next": {
     "path": "/fragments/one-crossing/the-run/the-knot-is-ready/",
     "title": "#3 · the listener is ready, the doer asks"
    }
   },
   "anchor": "2/1"
  },
  "/fragments/one-crossing/the-run/the-note-arrives/change-3/": {
   "kind": "change",
   "address": "2/2",
   "label": "The listener opens a lane for this session",
   "path": "/fragments/one-crossing/the-run/the-note-arrives/change-3/",
   "title": "The listener opens a lane for this session · Fragment 2",
   "nav": {
    "n": 8,
    "of": 12,
    "prev": {
     "path": "/fragments/one-crossing/the-run/the-wave-begins/",
     "title": "A new wave begins"
    },
    "next": {
     "path": "/fragments/one-crossing/the-run/the-knot-is-ready/",
     "title": "#3 · the listener is ready, the doer asks"
    }
   },
   "anchor": "2/2"
  },
  "/fragments/one-crossing/the-run/the-note-arrives/change-4/": {
   "kind": "change",
   "address": "2/3",
   "label": "The listener keeps the note in its slot",
   "path": "/fragments/one-crossing/the-run/the-note-arrives/change-4/",
   "title": "The listener keeps the note in its slot · Fragment 2",
   "nav": {
    "n": 8,
    "of": 12,
    "prev": {
     "path": "/fragments/one-crossing/the-run/the-wave-begins/",
     "title": "A new wave begins"
    },
    "next": {
     "path": "/fragments/one-crossing/the-run/the-knot-is-ready/",
     "title": "#3 · the listener is ready, the doer asks"
    }
   },
   "anchor": "2/3"
  },
  "/fragments/one-crossing/the-run/the-note-arrives/change-5/": {
   "kind": "change",
   "address": "2/4",
   "label": "The slot is emptied again",
   "path": "/fragments/one-crossing/the-run/the-note-arrives/change-5/",
   "title": "The slot is emptied again · Fragment 2",
   "nav": {
    "n": 8,
    "of": 12,
    "prev": {
     "path": "/fragments/one-crossing/the-run/the-wave-begins/",
     "title": "A new wave begins"
    },
    "next": {
     "path": "/fragments/one-crossing/the-run/the-knot-is-ready/",
     "title": "#3 · the listener is ready, the doer asks"
    }
   },
   "anchor": "2/4"
  },
  "/fragments/one-crossing/the-run/the-note-arrives/change-6/": {
   "kind": "change",
   "address": "2/5",
   "label": "CellSpace sets up its registers",
   "path": "/fragments/one-crossing/the-run/the-note-arrives/change-6/",
   "title": "CellSpace sets up its registers · Fragment 2",
   "nav": {
    "n": 8,
    "of": 12,
    "prev": {
     "path": "/fragments/one-crossing/the-run/the-wave-begins/",
     "title": "A new wave begins"
    },
    "next": {
     "path": "/fragments/one-crossing/the-run/the-knot-is-ready/",
     "title": "#3 · the listener is ready, the doer asks"
    }
   },
   "anchor": "2/5"
  },
  "/fragments/one-crossing/the-run/the-note-arrives/change-7/": {
   "kind": "change",
   "address": "2/6",
   "label": "The readiness enters the log as #3",
   "path": "/fragments/one-crossing/the-run/the-note-arrives/change-7/",
   "title": "The readiness enters the log as #3 · Fragment 2",
   "nav": {
    "n": 8,
    "of": 12,
    "prev": {
     "path": "/fragments/one-crossing/the-run/the-wave-begins/",
     "title": "A new wave begins"
    },
    "next": {
     "path": "/fragments/one-crossing/the-run/the-knot-is-ready/",
     "title": "#3 · the listener is ready, the doer asks"
    }
   },
   "anchor": "2/6"
  },
  "/fragments/one-crossing/the-run/the-note-arrives/change-8/": {
   "kind": "change",
   "address": "2/7",
   "label": "The membrane passes #2",
   "path": "/fragments/one-crossing/the-run/the-note-arrives/change-8/",
   "title": "The membrane passes #2 · Fragment 2",
   "nav": {
    "n": 8,
    "of": 12,
    "prev": {
     "path": "/fragments/one-crossing/the-run/the-wave-begins/",
     "title": "A new wave begins"
    },
    "next": {
     "path": "/fragments/one-crossing/the-run/the-knot-is-ready/",
     "title": "#3 · the listener is ready, the doer asks"
    }
   },
   "anchor": "2/7"
  },
  "/fragments/one-crossing/the-run/the-knot-is-ready/": {
   "kind": "tuple",
   "o": 3,
   "label": "#3 · the listener is ready, the doer asks",
   "path": "/fragments/one-crossing/the-run/the-knot-is-ready/",
   "title": "#3 · the listener is ready, the doer asks · Fragment 2",
   "nav": {
    "n": 9,
    "of": 12,
    "prev": {
     "path": "/fragments/one-crossing/the-run/the-note-arrives/",
     "title": "#2 · a note arrives"
    },
    "next": {
     "path": "/fragments/one-crossing/the-run/the-request-crosses/",
     "title": "#4 · the request crosses the membrane"
    }
   },
   "anchor": "3/1"
  },
  "/fragments/one-crossing/the-run/the-knot-is-ready/change-1/": {
   "kind": "change",
   "address": "3/1",
   "label": "The engine takes #3",
   "path": "/fragments/one-crossing/the-run/the-knot-is-ready/change-1/",
   "title": "The engine takes #3 · Fragment 2",
   "nav": {
    "n": 9,
    "of": 12,
    "prev": {
     "path": "/fragments/one-crossing/the-run/the-note-arrives/",
     "title": "#2 · a note arrives"
    },
    "next": {
     "path": "/fragments/one-crossing/the-run/the-request-crosses/",
     "title": "#4 · the request crosses the membrane"
    }
   },
   "anchor": "3/1"
  },
  "/fragments/one-crossing/the-run/the-knot-is-ready/change-2/": {
   "kind": "change",
   "address": "3/2",
   "label": "The doer opens its rendezvous",
   "path": "/fragments/one-crossing/the-run/the-knot-is-ready/change-2/",
   "title": "The doer opens its rendezvous · Fragment 2",
   "nav": {
    "n": 9,
    "of": 12,
    "prev": {
     "path": "/fragments/one-crossing/the-run/the-note-arrives/",
     "title": "#2 · a note arrives"
    },
    "next": {
     "path": "/fragments/one-crossing/the-run/the-request-crosses/",
     "title": "#4 · the request crosses the membrane"
    }
   },
   "anchor": "3/2"
  },
  "/fragments/one-crossing/the-run/the-knot-is-ready/change-3/": {
   "kind": "change",
   "address": "3/3",
   "label": "A lane for this session",
   "path": "/fragments/one-crossing/the-run/the-knot-is-ready/change-3/",
   "title": "A lane for this session · Fragment 2",
   "nav": {
    "n": 9,
    "of": 12,
    "prev": {
     "path": "/fragments/one-crossing/the-run/the-note-arrives/",
     "title": "#2 · a note arrives"
    },
    "next": {
     "path": "/fragments/one-crossing/the-run/the-request-crosses/",
     "title": "#4 · the request crosses the membrane"
    }
   },
   "anchor": "3/3"
  },
  "/fragments/one-crossing/the-run/the-knot-is-ready/change-4/": {
   "kind": "change",
   "address": "3/4",
   "label": "What the listener understood is gathered",
   "path": "/fragments/one-crossing/the-run/the-knot-is-ready/change-4/",
   "title": "What the listener understood is gathered · Fragment 2",
   "nav": {
    "n": 9,
    "of": 12,
    "prev": {
     "path": "/fragments/one-crossing/the-run/the-note-arrives/",
     "title": "#2 · a note arrives"
    },
    "next": {
     "path": "/fragments/one-crossing/the-run/the-request-crosses/",
     "title": "#4 · the request crosses the membrane"
    }
   },
   "anchor": "3/4"
  },
  "/fragments/one-crossing/the-run/the-knot-is-ready/change-5/": {
   "kind": "change",
   "address": "3/5",
   "label": "The doer acts — once",
   "path": "/fragments/one-crossing/the-run/the-knot-is-ready/change-5/",
   "title": "The doer acts — once · Fragment 2",
   "nav": {
    "n": 9,
    "of": 12,
    "prev": {
     "path": "/fragments/one-crossing/the-run/the-note-arrives/",
     "title": "#2 · a note arrives"
    },
    "next": {
     "path": "/fragments/one-crossing/the-run/the-request-crosses/",
     "title": "#4 · the request crosses the membrane"
    }
   },
   "anchor": "3/5"
  },
  "/fragments/one-crossing/the-run/the-knot-is-ready/change-6/": {
   "kind": "change",
   "address": "3/6",
   "label": "The intention gets its name",
   "path": "/fragments/one-crossing/the-run/the-knot-is-ready/change-6/",
   "title": "The intention gets its name · Fragment 2",
   "nav": {
    "n": 9,
    "of": 12,
    "prev": {
     "path": "/fragments/one-crossing/the-run/the-note-arrives/",
     "title": "#2 · a note arrives"
    },
    "next": {
     "path": "/fragments/one-crossing/the-run/the-request-crosses/",
     "title": "#4 · the request crosses the membrane"
    }
   },
   "anchor": "3/6"
  },
  "/fragments/one-crossing/the-run/the-knot-is-ready/change-7/": {
   "kind": "change",
   "address": "3/7",
   "label": "The request enters the log as #4",
   "path": "/fragments/one-crossing/the-run/the-knot-is-ready/change-7/",
   "title": "The request enters the log as #4 · Fragment 2",
   "nav": {
    "n": 9,
    "of": 12,
    "prev": {
     "path": "/fragments/one-crossing/the-run/the-note-arrives/",
     "title": "#2 · a note arrives"
    },
    "next": {
     "path": "/fragments/one-crossing/the-run/the-request-crosses/",
     "title": "#4 · the request crosses the membrane"
    }
   },
   "anchor": "3/7"
  },
  "/fragments/one-crossing/the-run/the-knot-is-ready/change-8/": {
   "kind": "change",
   "address": "3/8",
   "label": "The membrane passes #3",
   "path": "/fragments/one-crossing/the-run/the-knot-is-ready/change-8/",
   "title": "The membrane passes #3 · Fragment 2",
   "nav": {
    "n": 9,
    "of": 12,
    "prev": {
     "path": "/fragments/one-crossing/the-run/the-note-arrives/",
     "title": "#2 · a note arrives"
    },
    "next": {
     "path": "/fragments/one-crossing/the-run/the-request-crosses/",
     "title": "#4 · the request crosses the membrane"
    }
   },
   "anchor": "3/8"
  },
  "/fragments/one-crossing/the-run/the-request-crosses/": {
   "kind": "tuple",
   "o": 4,
   "label": "#4 · the request crosses the membrane",
   "path": "/fragments/one-crossing/the-run/the-request-crosses/",
   "title": "#4 · the request crosses the membrane · Fragment 2",
   "nav": {
    "n": 10,
    "of": 12,
    "prev": {
     "path": "/fragments/one-crossing/the-run/the-knot-is-ready/",
     "title": "#3 · the listener is ready, the doer asks"
    },
    "next": {
     "path": "/fragments/one-crossing/the-run/the-world-answers/",
     "title": "#5 · the world answers, and the machine is quiet"
    }
   },
   "anchor": "4/1"
  },
  "/fragments/one-crossing/the-run/the-request-crosses/change-1/": {
   "kind": "change",
   "address": "4/1",
   "label": "The engine takes #4",
   "path": "/fragments/one-crossing/the-run/the-request-crosses/change-1/",
   "title": "The engine takes #4 · Fragment 2",
   "nav": {
    "n": 10,
    "of": 12,
    "prev": {
     "path": "/fragments/one-crossing/the-run/the-knot-is-ready/",
     "title": "#3 · the listener is ready, the doer asks"
    },
    "next": {
     "path": "/fragments/one-crossing/the-run/the-world-answers/",
     "title": "#5 · the world answers, and the machine is quiet"
    }
   },
   "anchor": "4/1"
  },
  "/fragments/one-crossing/the-run/the-request-crosses/change-2/": {
   "kind": "change",
   "address": "4/2",
   "label": "The request is indexed under its name",
   "path": "/fragments/one-crossing/the-run/the-request-crosses/change-2/",
   "title": "The request is indexed under its name · Fragment 2",
   "nav": {
    "n": 10,
    "of": 12,
    "prev": {
     "path": "/fragments/one-crossing/the-run/the-knot-is-ready/",
     "title": "#3 · the listener is ready, the doer asks"
    },
    "next": {
     "path": "/fragments/one-crossing/the-run/the-world-answers/",
     "title": "#5 · the world answers, and the machine is quiet"
    }
   },
   "anchor": "4/2"
  },
  "/fragments/one-crossing/the-run/the-request-crosses/change-3/": {
   "kind": "change",
   "address": "4/3",
   "label": "The membrane passes #4",
   "path": "/fragments/one-crossing/the-run/the-request-crosses/change-3/",
   "title": "The membrane passes #4 · Fragment 2",
   "nav": {
    "n": 10,
    "of": 12,
    "prev": {
     "path": "/fragments/one-crossing/the-run/the-knot-is-ready/",
     "title": "#3 · the listener is ready, the doer asks"
    },
    "next": {
     "path": "/fragments/one-crossing/the-run/the-world-answers/",
     "title": "#5 · the world answers, and the machine is quiet"
    }
   },
   "anchor": "4/3"
  },
  "/fragments/one-crossing/the-run/the-request-crosses/change-4/": {
   "kind": "change",
   "address": "4/4",
   "label": "The request is handed to the world",
   "path": "/fragments/one-crossing/the-run/the-request-crosses/change-4/",
   "title": "The request is handed to the world · Fragment 2",
   "nav": {
    "n": 10,
    "of": 12,
    "prev": {
     "path": "/fragments/one-crossing/the-run/the-knot-is-ready/",
     "title": "#3 · the listener is ready, the doer asks"
    },
    "next": {
     "path": "/fragments/one-crossing/the-run/the-world-answers/",
     "title": "#5 · the world answers, and the machine is quiet"
    }
   },
   "anchor": "4/4"
  },
  "/fragments/one-crossing/the-run/the-request-crosses/change-5/": {
   "kind": "change",
   "address": "4/5",
   "label": "The world answers",
   "path": "/fragments/one-crossing/the-run/the-request-crosses/change-5/",
   "title": "The world answers · Fragment 2",
   "nav": {
    "n": 10,
    "of": 12,
    "prev": {
     "path": "/fragments/one-crossing/the-run/the-knot-is-ready/",
     "title": "#3 · the listener is ready, the doer asks"
    },
    "next": {
     "path": "/fragments/one-crossing/the-run/the-world-answers/",
     "title": "#5 · the world answers, and the machine is quiet"
    }
   },
   "anchor": "4/5"
  },
  "/fragments/one-crossing/the-run/the-request-crosses/change-6/": {
   "kind": "change",
   "address": "4/6",
   "label": "The answer enters the log as #5",
   "path": "/fragments/one-crossing/the-run/the-request-crosses/change-6/",
   "title": "The answer enters the log as #5 · Fragment 2",
   "nav": {
    "n": 10,
    "of": 12,
    "prev": {
     "path": "/fragments/one-crossing/the-run/the-knot-is-ready/",
     "title": "#3 · the listener is ready, the doer asks"
    },
    "next": {
     "path": "/fragments/one-crossing/the-run/the-world-answers/",
     "title": "#5 · the world answers, and the machine is quiet"
    }
   },
   "anchor": "4/6"
  },
  "/fragments/one-crossing/the-run/the-world-answers/": {
   "kind": "tuple",
   "o": 5,
   "label": "#5 · the world answers, and the machine is quiet",
   "path": "/fragments/one-crossing/the-run/the-world-answers/",
   "title": "#5 · the world answers, and the machine is quiet · Fragment 2",
   "nav": {
    "n": 11,
    "of": 12,
    "prev": {
     "path": "/fragments/one-crossing/the-run/the-request-crosses/",
     "title": "#4 · the request crosses the membrane"
    },
    "next": {
     "path": "/fragments/one-crossing/the-run/the-wave-ends/",
     "title": "The wave ends — quiet"
    }
   },
   "anchor": "5/1"
  },
  "/fragments/one-crossing/the-run/the-world-answers/change-1/": {
   "kind": "change",
   "address": "5/1",
   "label": "The engine takes #5",
   "path": "/fragments/one-crossing/the-run/the-world-answers/change-1/",
   "title": "The engine takes #5 · Fragment 2",
   "nav": {
    "n": 11,
    "of": 12,
    "prev": {
     "path": "/fragments/one-crossing/the-run/the-request-crosses/",
     "title": "#4 · the request crosses the membrane"
    },
    "next": {
     "path": "/fragments/one-crossing/the-run/the-wave-ends/",
     "title": "The wave ends — quiet"
    }
   },
   "anchor": "5/1"
  },
  "/fragments/one-crossing/the-run/the-world-answers/change-2/": {
   "kind": "change",
   "address": "5/2",
   "label": "The membrane passes #5",
   "path": "/fragments/one-crossing/the-run/the-world-answers/change-2/",
   "title": "The membrane passes #5 · Fragment 2",
   "nav": {
    "n": 11,
    "of": 12,
    "prev": {
     "path": "/fragments/one-crossing/the-run/the-request-crosses/",
     "title": "#4 · the request crosses the membrane"
    },
    "next": {
     "path": "/fragments/one-crossing/the-run/the-wave-ends/",
     "title": "The wave ends — quiet"
    }
   },
   "anchor": "5/2"
  },
  "/fragments/one-crossing/the-run/the-wave-ends/": {
   "kind": "change",
   "address": "wave-6/3",
   "label": "The wave ends — quiet",
   "path": "/fragments/one-crossing/the-run/the-wave-ends/",
   "title": "The wave ends — quiet · Fragment 2",
   "nav": {
    "n": 12,
    "of": 12,
    "prev": {
     "path": "/fragments/one-crossing/the-run/the-world-answers/",
     "title": "#5 · the world answers, and the machine is quiet"
    },
    "next": null
   },
   "anchor": "wave-6/3"
  }
 },
 "data": {
  "fragment": "/fragments/one-crossing/fragment.json",
  "atlas": "/fragments/one-crossing/atlas.json",
  "atlasPage": "/fragments/one-crossing/atlas.html",
  "atlasLib": "/fragments/_atlas/atlas.07fc6c0a69.js"
 }
}
