{
 "contract": "lab-fragment@2",
 "kind": "fragment",
 "layout": "docks",
 "slug": "one-knot-one-bind",
 "order": 1,
 "path": "/fragments/one-knot-one-bind/",
 "short": "Fragment 1",
 "title": "One listener, one doer, one note — a fragment of the machine",
 "heading": "One listener, one doer, one note",
 "kicker": "Fragment 1 · one knot · one bind · one ingress",
 "description": "The smallest real run of the machine, one change at a time: a listener, a doer and one note. For every change, what you see and the line of code that made it.",
 "standfirst": "Two records tell the machine what to do; one note sets it moving. You will watch every change the machine makes to itself, in the order it makes them — and, the first time you meet each one, the few lines of code that make it.",
 "see": [
  "How the machine works through its log: the door adds, the engine takes, the membrane passes, the machine goes quiet.",
  "Every change of its state, before and after, in the order it happened — 31 of them.",
  "The 14 functions that made those changes, with the specification section each one follows."
 ],
 "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": "release",
   "plain": "A doer's result, written into the log as a new record."
  }
 ],
 "recording": {
  "store": "fragment-one-knot-one-bind",
  "recordedOn": "2026-09-22",
  "watermark": 5,
  "machineClass": "semantic",
  "inference": "none — the doer's action is local; nothing crosses to the world",
  "evaluator": "none — no Cell, nothing is assessed",
  "surface": "the door of the garden's stand, 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 format written by Claude Opus 5.5 on 23 September, checked against the journal; the code is taken by the instrument, never typed"
 },
 "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": 5,
  "entries": 31,
  "waves": 2,
  "functions": 14,
  "points": 16,
  "opPoints": 38,
  "opFunctions": 31
 },
 "primer": {
  "path": "/fragments/one-knot-one-bind/before-you-start/",
  "title": "Before you start — how to read a fragment",
  "short": "Before you start",
  "description": "Three short screens: the log the machine keeps, the state it holds between records, and the code that is the only way to change that state.",
  "screens": [
   {
    "slug": "the-log",
    "title": "The log",
    "picture": "log",
    "plain": "Everything the machine knows is a list of records — the log. Records are only ever added at the end, and nothing in the log is ever changed. Two pointers read it: the engine, and after it the membrane.",
    "path": "/fragments/one-knot-one-bind/before-you-start/the-log/"
   },
   {
    "slug": "the-state",
    "title": "The state",
    "picture": "state",
    "plain": "Between records, the machine keeps everything it holds in named places — registers. Each belongs to a part of the machine, a station. In this fragment you will watch the registers of these seven stations change.",
    "path": "/fragments/one-knot-one-bind/before-you-start/the-state/"
   },
   {
    "slug": "the-code",
    "title": "The code that changes the state",
    "picture": "code",
    "plain": "The state changes in exactly 38 places in the code — 31 small functions — and nowhere else; the machine's own tests check it. Each step that follows is one call of one of them, and the first time you meet a function you will see it.",
    "path": "/fragments/one-knot-one-bind/before-you-start/the-code/"
   }
  ]
 },
 "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. The machine reads them and sets itself up; nothing else happens yet.",
   "intro": "Two records are added at the door: a listener and a doer. The machine reads them and sets itself up. Nothing else happens yet.",
   "reached": "The machine now has one listener and one doer, both waiting.",
   "path": "/fragments/one-knot-one-bind/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 arrives",
   "description": "One note is added at the door. The machine reacts on its own: the listener becomes ready, the doer acts once, and the machine goes quiet.",
   "intro": "One note is added at the door. The machine reacts on its own — the listener becomes ready, the doer acts — until nothing is left to do.",
   "reached": "Two new records, written by the machine itself: the listener's readiness (#3) and the doer's release (#4). Then quiet.",
   "path": "/fragments/one-knot-one-bind/the-run/",
   "steps": [
    "wave-5/1",
    "wave-5/3"
   ],
   "tuples": [
    2,
    3,
    4
   ],
   "parts": [],
   "arrived": [
    2
   ],
   "written": [
    3,
    4
   ]
  }
 ],
 "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 outside world.",
   "record": "Record #0 describes a listener named note.gate: 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-knot-one-bind/the-template/the-knot/",
   "mapPath": "/fragments/one-knot-one-bind/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-knot-one-bind/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.echo",
   "label": "a doer",
   "title": "#1 · a doer is described",
   "plain": "When the engine takes it, the machine stores the doer under its name and notes whom it waits for — the listener note.gate. The membrane passes it: nothing for the outside world.",
   "record": "Record #1 describes a doer named note.echo: once the listener note.gate is ready, it releases what the listener heard as a new fact, note.echoed — without leaving the machine.",
   "slug": "the-bind",
   "payload": {
    "id": "note.echo",
    "meta": {
     "title": "The note, released",
     "gloss": "One bind: when the knot is ready it releases what it heard — a local action, nothing crosses to the world."
    },
    "operator": {
     "on": "note.gate",
     "service": {
      "instruction": "Release the note as it was heard.",
      "action": "release@1",
      "emit": {
       "writes": "note.echoed"
      }
     }
    }
   },
   "wave": 0,
   "causedBy": {
    "via": "door",
    "address": "wave-2/3",
    "step": 3
   },
   "produced": [],
   "handed": [],
   "related": [
    {
     "name": "note.echo",
     "offsets": [
      4
     ]
    }
   ],
   "path": "/fragments/one-knot-one-bind/the-template/the-bind/",
   "mapPath": "/fragments/one-knot-one-bind/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-knot-one-bind/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 performs a local action, release@1, and writes its result as a fact of type note.echoed.",
    "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.echo",
      "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": "«Release the note as it was heard.»",
      "ink": "quote",
      "meaning": "What it is asked to do, in words."
     },
     {
      "path": "payload.operator.service.action",
      "group": "payload.operator.service",
      "label": "action",
      "text": "release@1",
      "ink": "machine",
      "meaning": "A local action chosen by name: the machine performs it itself, so nothing crosses the membrane. The specification's doer always asks the outside world; local actions are this machine's own addition."
     },
     {
      "path": "payload.operator.service.emit.writes",
      "group": "payload.operator.service.emit",
      "label": "writes",
      "text": "note.echoed",
      "ink": "machine",
      "meaning": "The type of fact its result is 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: “The machine hears this note and releases it, unchanged.” Its key is this session.",
   "slug": "the-note-arrives",
   "payload": {
    "factType": "note.given",
    "data": {
     "text": "The machine hears this note and releases it, unchanged."
    }
   },
   "wave": 1,
   "causedBy": {
    "via": "door",
    "address": "wave-5/2",
    "step": 13
   },
   "produced": [
    {
     "offset": 3,
     "label": "readiness",
     "kind": "sys.knot.ready",
     "factType": null,
     "via": "propagation",
     "address": "2/6"
    }
   ],
   "handed": [],
   "related": [],
   "path": "/fragments/one-knot-one-bind/the-run/the-note-arrives/",
   "mapPath": "/fragments/one-knot-one-bind/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-knot-one-bind/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-knot-one-bind",
      "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": "«The machine hears this note and releases it, unchanged.»",
      "ink": "quote",
      "meaning": "The note's words."
     }
    ]
   },
   "groups": [
    {
     "group": "arrived",
     "title": "when it came in at the door",
     "steps": [
      "wave-5/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",
   "plain": "The doer note.echo was waiting for it: it opens its rendezvous and a lane, gathers what the listener understood, acts once, names its intention note.echo#1 and releases the note as #4.",
   "record": "Record #3 says: the listener note.gate is ready. What it understood: note = “The machine hears this note and releases it, unchanged.”",
   "slug": "the-knot-is-ready",
   "payload": {
    "knotId": "note.gate",
    "understanding": {
     "note": "The machine hears this note and releases it, unchanged."
    }
   },
   "wave": 1,
   "causedBy": {
    "via": "propagation",
    "offset": 2,
    "address": "2/6",
    "step": 19
   },
   "produced": [
    {
     "offset": 4,
     "label": "the release",
     "kind": "domain.fact",
     "factType": "note.echoed",
     "via": "propagation",
     "address": "3/7"
    }
   ],
   "handed": [],
   "related": [
    {
     "name": "note.gate",
     "offsets": [
      0
     ]
    }
   ],
   "path": "/fragments/one-knot-one-bind/the-run/the-knot-is-ready/",
   "mapPath": "/fragments/one-knot-one-bind/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-knot-one-bind/the-run/the-note-arrives/change-7/"
    },
    "took": {
     "o": 2,
     "path": "/fragments/one-knot-one-bind/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-knot-one-bind",
      "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": "«The machine hears this note and releases it, unchanged.»",
      "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": "note.echoed",
   "id": null,
   "label": "the release",
   "title": "#4 · the note is released",
   "plain": "Nothing was told to hear note.echoed, so when the engine takes it nothing changes. The membrane passes it — the doer never asked the outside world for anything — and the machine is quiet.",
   "record": "Record #4 is a fact of type note.echoed, written by the doer note.echo: the note, released as it was heard, under the intention's name note.echo#1.",
   "slug": "the-note-is-released",
   "payload": {
    "factType": "note.echoed",
    "data": {
     "bindId": "note.echo",
     "uid": "note.echo#1",
     "result": {
      "note": "The machine hears this note and releases it, unchanged."
     }
    }
   },
   "wave": 1,
   "causedBy": {
    "via": "propagation",
    "offset": 3,
    "address": "3/7",
    "step": 26
   },
   "produced": [],
   "handed": [],
   "related": [
    {
     "name": "note.echo",
     "offsets": [
      1
     ]
    }
   ],
   "path": "/fragments/one-knot-one-bind/the-run/the-note-is-released/",
   "mapPath": "/fragments/one-knot-one-bind/the-run/the-note-is-released/#on-the-map",
   "origin": {
    "actor": "machine",
    "via": "propagation",
    "sentence": "The machine wrote it while the engine took #3: the doer note.echo acted — a local action — and released the note.",
    "step": {
     "n": 26,
     "path": "/fragments/one-knot-one-bind/the-run/the-knot-is-ready/change-7/"
    },
    "took": {
     "o": 3,
     "path": "/fragments/one-knot-one-bind/the-run/the-knot-is-ready/"
    }
   },
   "card": {
    "of": "domain.fact:note.echoed",
    "title": "A fact: the doer's release",
    "plain": "A fact a doer released: its result, stamped with the doer's name and the name of the intention that produced it, so that the act and its result stay joined in the log.",
    "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 §3.1",
      "href": "/specification/vol-04-tuple-reference/#31-pipeline-facts"
     },
     {
      "label": "Vol. 06 §6",
      "href": "/specification/vol-06-bind-descriptors/#6-delegated-emit-writes"
     }
    ],
    "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-knot-one-bind",
      "ink": "machine",
      "meaning": "The lane it was released on — the same lane as the readiness that woke the doer."
     },
     {
      "path": "payload.factType",
      "group": "payload",
      "label": "factType",
      "text": "note.echoed",
      "ink": "machine",
      "meaning": "The fact type the doer was told to write."
     },
     {
      "path": "payload.data.bindId",
      "group": "payload.data",
      "label": "bindId",
      "text": "note.echo",
      "ink": "machine",
      "meaning": "The doer that released it."
     },
     {
      "path": "payload.data.uid",
      "group": "payload.data",
      "label": "uid",
      "text": "note.echo#1",
      "ink": "machine",
      "meaning": "The intention's name: the doer's name and a number — this doer's first act. It joins the release to the act that made it."
     },
     {
      "path": "payload.data.result.note",
      "group": "payload.data.result",
      "label": "note",
      "text": "«The machine hears this note and releases it, unchanged.»",
      "ink": "quote",
      "meaning": "The result: what the listener understood, released unchanged."
     }
    ]
   },
   "groups": [
    {
     "group": "engine",
     "title": "when the engine took #4",
     "steps": [
      "4/1"
     ]
    },
    {
     "group": "membrane",
     "title": "when the membrane passed #4",
     "steps": [
      "4/2"
     ]
    }
   ]
  }
 ],
 "changes": {
  "wave-2/1": {
   "address": "wave-2/1",
   "step": 1,
   "of": 31,
   "owner": {
    "wave": 0
   },
   "n": null,
   "ofOwner": null,
   "path": "/fragments/one-knot-one-bind/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": "Something has 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": 31,
   "owner": {
    "tuple": 0,
    "group": "arrived"
   },
   "n": 1,
   "ofOwner": 5,
   "path": "/fragments/one-knot-one-bind/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 to the log: a description of a listener. It gets number #0 — the next free place, at the end."
   }
  },
  "wave-2/3": {
   "address": "wave-2/3",
   "step": 3,
   "of": 31,
   "owner": {
    "tuple": 1,
    "group": "arrived"
   },
   "n": 1,
   "ofOwner": 4,
   "path": "/fragments/one-knot-one-bind/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 · 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, a description of a doer, as #1. The log holds two records, and the machine has not reacted to either yet."
   }
  },
  "0/1": {
   "address": "0/1",
   "step": 4,
   "of": 31,
   "owner": {
    "tuple": 0,
    "group": "engine"
   },
   "n": 2,
   "ofOwner": 5,
   "path": "/fragments/one-knot-one-bind/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": 31,
   "owner": {
    "tuple": 0,
    "group": "engine"
   },
   "n": 3,
   "ofOwner": 5,
   "path": "/fragments/one-knot-one-bind/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": 31,
   "owner": {
    "tuple": 0,
    "group": "engine"
   },
   "n": 4,
   "ofOwner": 5,
   "path": "/fragments/one-knot-one-bind/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": 31,
   "owner": {
    "tuple": 1,
    "group": "engine"
   },
   "n": 2,
   "ofOwner": 4,
   "path": "/fragments/one-knot-one-bind/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": 31,
   "owner": {
    "tuple": 1,
    "group": "engine"
   },
   "n": 3,
   "ofOwner": 4,
   "path": "/fragments/one-knot-one-bind/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.echo",
     "interests": [
      "note.gate"
     ]
    },
    "by": "region:root",
    "fn": "registerDescriptorDefinition"
   },
   "station": {
    "id": "topology:root",
    "name": "The figure",
    "kind": "region",
    "created": false
   },
   "changes": [
    {
     "label": "doer note.echo",
     "before": "—",
     "after": "acts on note.gate; releases note.echoed (release@1)"
    },
    {
     "label": "when note.gate is ready, it wakes",
     "before": "—",
     "after": "note.echo"
    }
   ],
   "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.echo waits for note.gate. A doer at rest is just that: a description, and whom it waits for."
   }
  },
  "0/4": {
   "address": "0/4",
   "step": 9,
   "of": 31,
   "owner": {
    "tuple": 0,
    "group": "membrane"
   },
   "n": 5,
   "ofOwner": 5,
   "path": "/fragments/one-knot-one-bind/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 outside world, so its pointer simply moves on."
   }
  },
  "1/3": {
   "address": "1/3",
   "step": 10,
   "of": 31,
   "owner": {
    "tuple": 1,
    "group": "membrane"
   },
   "n": 4,
   "ofOwner": 4,
   "path": "/fragments/one-knot-one-bind/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: nothing to hand over. Both pointers have now reached the end of the log."
   }
  },
  "wave-2/4": {
   "address": "wave-2/4",
   "step": 11,
   "of": 31,
   "owner": {
    "wave": 0
   },
   "n": null,
   "ofOwner": null,
   "path": "/fragments/one-knot-one-bind/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."
   }
  },
  "wave-5/1": {
   "address": "wave-5/1",
   "step": 12,
   "of": 31,
   "owner": {
    "wave": 1
   },
   "n": null,
   "ofOwner": null,
   "path": "/fragments/one-knot-one-bind/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-5/2": {
   "address": "wave-5/2",
   "step": 13,
   "of": 31,
   "owner": {
    "tuple": 2,
    "group": "arrived"
   },
   "n": 1,
   "ofOwner": 8,
   "path": "/fragments/one-knot-one-bind/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 plain fact of type note.given, with one field — its text."
   }
  },
  "2/1": {
   "address": "2/1",
   "step": 14,
   "of": 31,
   "owner": {
    "tuple": 2,
    "group": "engine"
   },
   "n": 2,
   "ofOwner": 8,
   "path": "/fragments/one-knot-one-bind/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 gave; everything after it, the machine does on its own."
   }
  },
  "2/2": {
   "address": "2/2",
   "step": 15,
   "of": 31,
   "owner": {
    "tuple": 2,
    "group": "engine"
   },
   "n": 3,
   "ofOwner": 8,
   "path": "/fragments/one-knot-one-bind/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-knot-one-bind"
    },
    "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 listener was told to hear note.given, and this note carries a key — this session. So it opens a lane for that key, where this session's notes are kept."
   }
  },
  "2/3": {
   "address": "2/3",
   "step": 16,
   "of": 31,
   "owner": {
    "tuple": 2,
    "group": "engine"
   },
   "n": 4,
   "ofOwner": 8,
   "path": "/fragments/one-knot-one-bind/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-knot-one-bind",
     "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": "“The machine hears this note and releases it, unchanged.”"
    }
   ],
   "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": 31,
   "owner": {
    "tuple": 2,
    "group": "engine"
   },
   "n": 5,
   "ofOwner": 8,
   "path": "/fragments/one-knot-one-bind/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-knot-one-bind"
    },
    "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": "“The machine hears this note and releases it, unchanged.”",
     "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": 31,
   "owner": {
    "tuple": 2,
    "group": "engine"
   },
   "n": 6,
   "ofOwner": 8,
   "path": "/fragments/one-knot-one-bind/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, checks every fact for a Cell that should also hear it; the first time it looks, it creates its three registers — empty."
   }
  },
  "2/6": {
   "address": "2/6",
   "step": 19,
   "of": 31,
   "owner": {
    "tuple": 2,
    "group": "engine"
   },
   "n": 7,
   "ofOwner": 8,
   "path": "/fragments/one-knot-one-bind/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": 31,
   "owner": {
    "tuple": 3,
    "group": "engine"
   },
   "n": 1,
   "ofOwner": 8,
   "path": "/fragments/one-knot-one-bind/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": 31,
   "owner": {
    "tuple": 3,
    "group": "engine"
   },
   "n": 2,
   "ofOwner": 8,
   "path": "/fragments/one-knot-one-bind/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.echo"
    },
    "by": "bind:note.echo",
    "fn": "ensureRendezvous"
   },
   "station": {
    "id": "topology:root",
    "name": "The figure",
    "kind": "region",
    "created": false
   },
   "changes": [
    {
     "label": "rendezvous opened",
     "before": "—",
     "after": "note.echo"
    }
   ],
   "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.echo 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": 31,
   "owner": {
    "tuple": 3,
    "group": "engine"
   },
   "n": 3,
   "ofOwner": 8,
   "path": "/fragments/one-knot-one-bind/the-run/the-knot-is-ready/change-3/",
   "kind": "change",
   "offset": 3,
   "wave": 1,
   "entry": {
    "phase": "propagate",
    "station": "topology:root/bind:note.echo",
    "register": "RDV",
    "action": "open-lane",
    "detail": {
     "key": "fragment-one-knot-one-bind",
     "activatedAtBirth": false
    },
    "by": "bind:note.echo",
    "fn": "ensureRendezvous"
   },
   "station": {
    "id": "topology:root/bind:note.echo",
    "name": "The doer note.echo",
    "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": 31,
   "owner": {
    "tuple": 3,
    "group": "engine"
   },
   "n": 4,
   "ofOwner": 8,
   "path": "/fragments/one-knot-one-bind/the-run/the-knot-is-ready/change-4/",
   "kind": "change",
   "offset": 3,
   "wave": 1,
   "entry": {
    "phase": "propagate",
    "station": "topology:root/bind:note.echo",
    "register": "RDV.ACTIVATED,RDV.SCOPE",
    "action": "latch-scope",
    "detail": {
     "key": "fragment-one-knot-one-bind",
     "as": "activation"
    },
    "by": "bind:note.echo",
    "fn": "latchRendezvousScope"
   },
   "station": {
    "id": "topology:root/bind:note.echo",
    "name": "The doer note.echo",
    "kind": "bind",
    "created": false
   },
   "changes": [
    {
     "label": "lane · this session · active",
     "before": "no",
     "after": "yes"
    },
    {
     "label": "lane · this session · gathered activation",
     "before": "—",
     "after": "note = “The machine hears this note and releases it, unchanged.”"
    }
   ],
   "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. The doer needs nothing else."
   }
  },
  "3/5": {
   "address": "3/5",
   "step": 24,
   "of": 31,
   "owner": {
    "tuple": 3,
    "group": "engine"
   },
   "n": 5,
   "ofOwner": 8,
   "path": "/fragments/one-knot-one-bind/the-run/the-knot-is-ready/change-5/",
   "kind": "change",
   "offset": 3,
   "wave": 1,
   "entry": {
    "phase": "propagate",
    "station": "topology:root/bind:note.echo",
    "register": "RDV.PROJECTED",
    "action": "latch-projection",
    "detail": {
     "key": "fragment-one-knot-one-bind"
    },
    "by": "bind:note.echo",
    "fn": "latchRendezvousProjection"
   },
   "station": {
    "id": "topology:root/bind:note.echo",
    "name": "The doer note.echo",
    "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. That is why a doer's result is a release, not a stream."
   }
  },
  "3/6": {
   "address": "3/6",
   "step": 25,
   "of": 31,
   "owner": {
    "tuple": 3,
    "group": "engine"
   },
   "n": 6,
   "ofOwner": 8,
   "path": "/fragments/one-knot-one-bind/the-run/the-knot-is-ready/change-6/",
   "kind": "change",
   "offset": 3,
   "wave": 1,
   "entry": {
    "phase": "propagate",
    "station": "topology:root/bind:note.echo",
    "register": "INTENT.CTR",
    "action": "mint-uid",
    "detail": {
     "uid": "note.echo#1"
    },
    "by": "bind:note.echo",
    "fn": "nextIntentionUid"
   },
   "station": {
    "id": "topology:root/bind:note.echo",
    "name": "The doer note.echo",
    "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 do gets a unique name, note.echo#1, from a counter that never goes back. The release will carry that name."
   }
  },
  "3/7": {
   "address": "3/7",
   "step": 26,
   "of": 31,
   "owner": {
    "tuple": 3,
    "group": "engine"
   },
   "n": 7,
   "ofOwner": 8,
   "path": "/fragments/one-knot-one-bind/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": "the release · note.echoed"
    }
   ],
   "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 release enters the log as #4",
    "plain": "The doer's action is local: it releases what it gathered as a new fact, note.echoed, written at the end of the log as #4."
   }
  },
  "4/1": {
   "address": "4/1",
   "step": 27,
   "of": 31,
   "owner": {
    "tuple": 4,
    "group": "engine"
   },
   "n": 1,
   "ofOwner": 2,
   "path": "/fragments/one-knot-one-bind/the-run/the-note-is-released/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 release. Nothing was told to hear note.echoed, so nothing changes — and the engine has reached the end."
   }
  },
  "2/7": {
   "address": "2/7",
   "step": 28,
   "of": 31,
   "owner": {
    "tuple": 2,
    "group": "membrane"
   },
   "n": 8,
   "ofOwner": 8,
   "path": "/fragments/one-knot-one-bind/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 asks nothing of the outside world."
   }
  },
  "3/8": {
   "address": "3/8",
   "step": 29,
   "of": 31,
   "owner": {
    "tuple": 3,
    "group": "membrane"
   },
   "n": 8,
   "ofOwner": 8,
   "path": "/fragments/one-knot-one-bind/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 outside world either. The membrane's pointer moves on."
   }
  },
  "4/2": {
   "address": "4/2",
   "step": 30,
   "of": 31,
   "owner": {
    "tuple": 4,
    "group": "membrane"
   },
   "n": 2,
   "ofOwner": 2,
   "path": "/fragments/one-knot-one-bind/the-run/the-note-is-released/change-2/",
   "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 local too — the doer never asked the world for anything. The membrane reaches the end of the log."
   }
  },
  "wave-5/3": {
   "address": "wave-5/3",
   "step": 31,
   "of": 31,
   "owner": {
    "wave": 1
   },
   "n": null,
   "ofOwner": null,
   "path": "/fragments/one-knot-one-bind/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": 5,
    "current": null,
    "added": [],
    "engine": 5,
    "membrane": 5
   },
   "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 note came in as #2 and went out as #4, unchanged — and every step in between is above."
   }
  }
 },
 "records": [
  {
   "o": 0,
   "label": "a listener",
   "kind": "sys.knot.defined",
   "factType": null,
   "actor": "person",
   "wave": 0,
   "path": "/fragments/one-knot-one-bind/the-template/the-knot/"
  },
  {
   "o": 1,
   "label": "a doer",
   "kind": "sys.descriptor.defined",
   "factType": null,
   "actor": "person",
   "wave": 0,
   "path": "/fragments/one-knot-one-bind/the-template/the-bind/"
  },
  {
   "o": 2,
   "label": "a note",
   "kind": "domain.fact",
   "factType": "note.given",
   "actor": "person",
   "wave": 1,
   "path": "/fragments/one-knot-one-bind/the-run/the-note-arrives/"
  },
  {
   "o": 3,
   "label": "readiness",
   "kind": "sys.knot.ready",
   "factType": null,
   "actor": "machine",
   "wave": 1,
   "path": "/fragments/one-knot-one-bind/the-run/the-knot-is-ready/"
  },
  {
   "o": 4,
   "label": "the release",
   "kind": "domain.fact",
   "factType": "note.echoed",
   "actor": "machine",
   "wave": 1,
   "path": "/fragments/one-knot-one-bind/the-run/the-note-is-released/"
  }
 ],
 "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.echo",
   "name": "The doer note.echo",
   "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": false
  },
  {
   "register": "DISCHARGE.TABLE",
   "action": "track-discharge",
   "fn": "trackDischarge",
   "file": "core/registers/track-discharge.ts",
   "used": false
  },
  {
   "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": false
  },
  {
   "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-knot-one-bind/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-knot-one-bind/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-knot-one-bind/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-knot-one-bind/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-knot-one-bind/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-knot-one-bind/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-knot-one-bind/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-knot-one-bind/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-knot-one-bind/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-knot-one-bind/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-knot-one-bind/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-knot-one-bind/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-knot-one-bind/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-knot-one-bind/the-run/the-knot-is-ready/change-6/"
  }
 },
 "sequence": [
  "/fragments/one-knot-one-bind/the-template/",
  "/fragments/one-knot-one-bind/the-template/the-wave-begins/",
  "/fragments/one-knot-one-bind/the-template/the-knot/",
  "/fragments/one-knot-one-bind/the-template/the-bind/",
  "/fragments/one-knot-one-bind/the-template/the-wave-ends/",
  "/fragments/one-knot-one-bind/the-run/",
  "/fragments/one-knot-one-bind/the-run/the-wave-begins/",
  "/fragments/one-knot-one-bind/the-run/the-note-arrives/",
  "/fragments/one-knot-one-bind/the-run/the-knot-is-ready/",
  "/fragments/one-knot-one-bind/the-run/the-note-is-released/",
  "/fragments/one-knot-one-bind/the-run/the-wave-ends/"
 ],
 "start": "/fragments/one-knot-one-bind/the-template/the-knot/",
 "pages": {
  "/fragments/one-knot-one-bind/before-you-start/": {
   "kind": "primer",
   "index": -1,
   "label": "Before you start — how to read a fragment",
   "path": "/fragments/one-knot-one-bind/before-you-start/",
   "title": "Before you start — how to read a fragment · Fragment 1",
   "nav": {
    "n": 1,
    "of": 4,
    "prev": null,
    "next": {
     "path": "/fragments/one-knot-one-bind/before-you-start/the-log/",
     "title": "The log"
    }
   },
   "anchor": null
  },
  "/fragments/one-knot-one-bind/before-you-start/the-log/": {
   "kind": "primer",
   "index": 0,
   "label": "The log",
   "path": "/fragments/one-knot-one-bind/before-you-start/the-log/",
   "title": "The log · Fragment 1",
   "nav": {
    "n": 2,
    "of": 4,
    "prev": {
     "path": "/fragments/one-knot-one-bind/before-you-start/",
     "title": "Before you start — how to read a fragment"
    },
    "next": {
     "path": "/fragments/one-knot-one-bind/before-you-start/the-state/",
     "title": "The state"
    }
   },
   "anchor": null
  },
  "/fragments/one-knot-one-bind/before-you-start/the-state/": {
   "kind": "primer",
   "index": 1,
   "label": "The state",
   "path": "/fragments/one-knot-one-bind/before-you-start/the-state/",
   "title": "The state · Fragment 1",
   "nav": {
    "n": 3,
    "of": 4,
    "prev": {
     "path": "/fragments/one-knot-one-bind/before-you-start/the-log/",
     "title": "The log"
    },
    "next": {
     "path": "/fragments/one-knot-one-bind/before-you-start/the-code/",
     "title": "The code that changes the state"
    }
   },
   "anchor": null
  },
  "/fragments/one-knot-one-bind/before-you-start/the-code/": {
   "kind": "primer",
   "index": 2,
   "label": "The code that changes the state",
   "path": "/fragments/one-knot-one-bind/before-you-start/the-code/",
   "title": "The code that changes the state · Fragment 1",
   "nav": {
    "n": 4,
    "of": 4,
    "prev": {
     "path": "/fragments/one-knot-one-bind/before-you-start/the-state/",
     "title": "The state"
    },
    "next": {
     "path": "/fragments/one-knot-one-bind/the-template/the-knot/",
     "title": "#0 · a listener is described"
    }
   },
   "anchor": null
  },
  "/fragments/one-knot-one-bind/the-template/": {
   "kind": "wave",
   "wave": "the-template",
   "label": "Wave 1 · The template",
   "path": "/fragments/one-knot-one-bind/the-template/",
   "title": "Wave 1 · The template · Fragment 1",
   "nav": {
    "n": 1,
    "of": 11,
    "prev": null,
    "next": {
     "path": "/fragments/one-knot-one-bind/the-template/the-wave-begins/",
     "title": "A wave begins"
    }
   },
   "anchor": "wave-2/1"
  },
  "/fragments/one-knot-one-bind/the-template/the-wave-begins/": {
   "kind": "change",
   "address": "wave-2/1",
   "label": "A wave begins",
   "path": "/fragments/one-knot-one-bind/the-template/the-wave-begins/",
   "title": "A wave begins · Fragment 1",
   "nav": {
    "n": 2,
    "of": 11,
    "prev": {
     "path": "/fragments/one-knot-one-bind/the-template/",
     "title": "Wave 1 · The template"
    },
    "next": {
     "path": "/fragments/one-knot-one-bind/the-template/the-knot/",
     "title": "#0 · a listener is described"
    }
   },
   "anchor": "wave-2/1"
  },
  "/fragments/one-knot-one-bind/the-template/the-knot/": {
   "kind": "tuple",
   "o": 0,
   "label": "#0 · a listener is described",
   "path": "/fragments/one-knot-one-bind/the-template/the-knot/",
   "title": "#0 · a listener is described · Fragment 1",
   "nav": {
    "n": 3,
    "of": 11,
    "prev": {
     "path": "/fragments/one-knot-one-bind/the-template/the-wave-begins/",
     "title": "A wave begins"
    },
    "next": {
     "path": "/fragments/one-knot-one-bind/the-template/the-bind/",
     "title": "#1 · a doer is described"
    }
   },
   "anchor": "0/1"
  },
  "/fragments/one-knot-one-bind/the-template/the-knot/change-1/": {
   "kind": "change",
   "address": "wave-2/2",
   "label": "Record #0 enters the log",
   "path": "/fragments/one-knot-one-bind/the-template/the-knot/change-1/",
   "title": "Record #0 enters the log · Fragment 1",
   "nav": {
    "n": 3,
    "of": 11,
    "prev": {
     "path": "/fragments/one-knot-one-bind/the-template/the-wave-begins/",
     "title": "A wave begins"
    },
    "next": {
     "path": "/fragments/one-knot-one-bind/the-template/the-bind/",
     "title": "#1 · a doer is described"
    }
   },
   "anchor": "wave-2/2"
  },
  "/fragments/one-knot-one-bind/the-template/the-knot/change-2/": {
   "kind": "change",
   "address": "0/1",
   "label": "The engine takes #0",
   "path": "/fragments/one-knot-one-bind/the-template/the-knot/change-2/",
   "title": "The engine takes #0 · Fragment 1",
   "nav": {
    "n": 3,
    "of": 11,
    "prev": {
     "path": "/fragments/one-knot-one-bind/the-template/the-wave-begins/",
     "title": "A wave begins"
    },
    "next": {
     "path": "/fragments/one-knot-one-bind/the-template/the-bind/",
     "title": "#1 · a doer is described"
    }
   },
   "anchor": "0/1"
  },
  "/fragments/one-knot-one-bind/the-template/the-knot/change-3/": {
   "kind": "change",
   "address": "0/2",
   "label": "The listener is added to the figure",
   "path": "/fragments/one-knot-one-bind/the-template/the-knot/change-3/",
   "title": "The listener is added to the figure · Fragment 1",
   "nav": {
    "n": 3,
    "of": 11,
    "prev": {
     "path": "/fragments/one-knot-one-bind/the-template/the-wave-begins/",
     "title": "A wave begins"
    },
    "next": {
     "path": "/fragments/one-knot-one-bind/the-template/the-bind/",
     "title": "#1 · a doer is described"
    }
   },
   "anchor": "0/2"
  },
  "/fragments/one-knot-one-bind/the-template/the-knot/change-4/": {
   "kind": "change",
   "address": "0/3",
   "label": "The listener gets a trial lane",
   "path": "/fragments/one-knot-one-bind/the-template/the-knot/change-4/",
   "title": "The listener gets a trial lane · Fragment 1",
   "nav": {
    "n": 3,
    "of": 11,
    "prev": {
     "path": "/fragments/one-knot-one-bind/the-template/the-wave-begins/",
     "title": "A wave begins"
    },
    "next": {
     "path": "/fragments/one-knot-one-bind/the-template/the-bind/",
     "title": "#1 · a doer is described"
    }
   },
   "anchor": "0/3"
  },
  "/fragments/one-knot-one-bind/the-template/the-knot/change-5/": {
   "kind": "change",
   "address": "0/4",
   "label": "The membrane passes #0",
   "path": "/fragments/one-knot-one-bind/the-template/the-knot/change-5/",
   "title": "The membrane passes #0 · Fragment 1",
   "nav": {
    "n": 3,
    "of": 11,
    "prev": {
     "path": "/fragments/one-knot-one-bind/the-template/the-wave-begins/",
     "title": "A wave begins"
    },
    "next": {
     "path": "/fragments/one-knot-one-bind/the-template/the-bind/",
     "title": "#1 · a doer is described"
    }
   },
   "anchor": "0/4"
  },
  "/fragments/one-knot-one-bind/the-template/the-bind/": {
   "kind": "tuple",
   "o": 1,
   "label": "#1 · a doer is described",
   "path": "/fragments/one-knot-one-bind/the-template/the-bind/",
   "title": "#1 · a doer is described · Fragment 1",
   "nav": {
    "n": 4,
    "of": 11,
    "prev": {
     "path": "/fragments/one-knot-one-bind/the-template/the-knot/",
     "title": "#0 · a listener is described"
    },
    "next": {
     "path": "/fragments/one-knot-one-bind/the-template/the-wave-ends/",
     "title": "The wave ends"
    }
   },
   "anchor": "1/1"
  },
  "/fragments/one-knot-one-bind/the-template/the-bind/change-1/": {
   "kind": "change",
   "address": "wave-2/3",
   "label": "Record #1 enters the log",
   "path": "/fragments/one-knot-one-bind/the-template/the-bind/change-1/",
   "title": "Record #1 enters the log · Fragment 1",
   "nav": {
    "n": 4,
    "of": 11,
    "prev": {
     "path": "/fragments/one-knot-one-bind/the-template/the-knot/",
     "title": "#0 · a listener is described"
    },
    "next": {
     "path": "/fragments/one-knot-one-bind/the-template/the-wave-ends/",
     "title": "The wave ends"
    }
   },
   "anchor": "wave-2/3"
  },
  "/fragments/one-knot-one-bind/the-template/the-bind/change-2/": {
   "kind": "change",
   "address": "1/1",
   "label": "The engine takes #1",
   "path": "/fragments/one-knot-one-bind/the-template/the-bind/change-2/",
   "title": "The engine takes #1 · Fragment 1",
   "nav": {
    "n": 4,
    "of": 11,
    "prev": {
     "path": "/fragments/one-knot-one-bind/the-template/the-knot/",
     "title": "#0 · a listener is described"
    },
    "next": {
     "path": "/fragments/one-knot-one-bind/the-template/the-wave-ends/",
     "title": "The wave ends"
    }
   },
   "anchor": "1/1"
  },
  "/fragments/one-knot-one-bind/the-template/the-bind/change-3/": {
   "kind": "change",
   "address": "1/2",
   "label": "The doer is added to the figure",
   "path": "/fragments/one-knot-one-bind/the-template/the-bind/change-3/",
   "title": "The doer is added to the figure · Fragment 1",
   "nav": {
    "n": 4,
    "of": 11,
    "prev": {
     "path": "/fragments/one-knot-one-bind/the-template/the-knot/",
     "title": "#0 · a listener is described"
    },
    "next": {
     "path": "/fragments/one-knot-one-bind/the-template/the-wave-ends/",
     "title": "The wave ends"
    }
   },
   "anchor": "1/2"
  },
  "/fragments/one-knot-one-bind/the-template/the-bind/change-4/": {
   "kind": "change",
   "address": "1/3",
   "label": "The membrane passes #1",
   "path": "/fragments/one-knot-one-bind/the-template/the-bind/change-4/",
   "title": "The membrane passes #1 · Fragment 1",
   "nav": {
    "n": 4,
    "of": 11,
    "prev": {
     "path": "/fragments/one-knot-one-bind/the-template/the-knot/",
     "title": "#0 · a listener is described"
    },
    "next": {
     "path": "/fragments/one-knot-one-bind/the-template/the-wave-ends/",
     "title": "The wave ends"
    }
   },
   "anchor": "1/3"
  },
  "/fragments/one-knot-one-bind/the-template/the-wave-ends/": {
   "kind": "change",
   "address": "wave-2/4",
   "label": "The wave ends",
   "path": "/fragments/one-knot-one-bind/the-template/the-wave-ends/",
   "title": "The wave ends · Fragment 1",
   "nav": {
    "n": 5,
    "of": 11,
    "prev": {
     "path": "/fragments/one-knot-one-bind/the-template/the-bind/",
     "title": "#1 · a doer is described"
    },
    "next": {
     "path": "/fragments/one-knot-one-bind/the-run/",
     "title": "Wave 2 · A note arrives"
    }
   },
   "anchor": "wave-2/4"
  },
  "/fragments/one-knot-one-bind/the-run/": {
   "kind": "wave",
   "wave": "the-run",
   "label": "Wave 2 · A note arrives",
   "path": "/fragments/one-knot-one-bind/the-run/",
   "title": "Wave 2 · A note arrives · Fragment 1",
   "nav": {
    "n": 6,
    "of": 11,
    "prev": {
     "path": "/fragments/one-knot-one-bind/the-template/the-wave-ends/",
     "title": "The wave ends"
    },
    "next": {
     "path": "/fragments/one-knot-one-bind/the-run/the-wave-begins/",
     "title": "A new wave begins"
    }
   },
   "anchor": "wave-5/1"
  },
  "/fragments/one-knot-one-bind/the-run/the-wave-begins/": {
   "kind": "change",
   "address": "wave-5/1",
   "label": "A new wave begins",
   "path": "/fragments/one-knot-one-bind/the-run/the-wave-begins/",
   "title": "A new wave begins · Fragment 1",
   "nav": {
    "n": 7,
    "of": 11,
    "prev": {
     "path": "/fragments/one-knot-one-bind/the-run/",
     "title": "Wave 2 · A note arrives"
    },
    "next": {
     "path": "/fragments/one-knot-one-bind/the-run/the-note-arrives/",
     "title": "#2 · a note arrives"
    }
   },
   "anchor": "wave-5/1"
  },
  "/fragments/one-knot-one-bind/the-run/the-note-arrives/": {
   "kind": "tuple",
   "o": 2,
   "label": "#2 · a note arrives",
   "path": "/fragments/one-knot-one-bind/the-run/the-note-arrives/",
   "title": "#2 · a note arrives · Fragment 1",
   "nav": {
    "n": 8,
    "of": 11,
    "prev": {
     "path": "/fragments/one-knot-one-bind/the-run/the-wave-begins/",
     "title": "A new wave begins"
    },
    "next": {
     "path": "/fragments/one-knot-one-bind/the-run/the-knot-is-ready/",
     "title": "#3 · the listener is ready"
    }
   },
   "anchor": "2/1"
  },
  "/fragments/one-knot-one-bind/the-run/the-note-arrives/change-1/": {
   "kind": "change",
   "address": "wave-5/2",
   "label": "Record #2 enters the log",
   "path": "/fragments/one-knot-one-bind/the-run/the-note-arrives/change-1/",
   "title": "Record #2 enters the log · Fragment 1",
   "nav": {
    "n": 8,
    "of": 11,
    "prev": {
     "path": "/fragments/one-knot-one-bind/the-run/the-wave-begins/",
     "title": "A new wave begins"
    },
    "next": {
     "path": "/fragments/one-knot-one-bind/the-run/the-knot-is-ready/",
     "title": "#3 · the listener is ready"
    }
   },
   "anchor": "wave-5/2"
  },
  "/fragments/one-knot-one-bind/the-run/the-note-arrives/change-2/": {
   "kind": "change",
   "address": "2/1",
   "label": "The engine takes #2",
   "path": "/fragments/one-knot-one-bind/the-run/the-note-arrives/change-2/",
   "title": "The engine takes #2 · Fragment 1",
   "nav": {
    "n": 8,
    "of": 11,
    "prev": {
     "path": "/fragments/one-knot-one-bind/the-run/the-wave-begins/",
     "title": "A new wave begins"
    },
    "next": {
     "path": "/fragments/one-knot-one-bind/the-run/the-knot-is-ready/",
     "title": "#3 · the listener is ready"
    }
   },
   "anchor": "2/1"
  },
  "/fragments/one-knot-one-bind/the-run/the-note-arrives/change-3/": {
   "kind": "change",
   "address": "2/2",
   "label": "The listener opens a lane for this session",
   "path": "/fragments/one-knot-one-bind/the-run/the-note-arrives/change-3/",
   "title": "The listener opens a lane for this session · Fragment 1",
   "nav": {
    "n": 8,
    "of": 11,
    "prev": {
     "path": "/fragments/one-knot-one-bind/the-run/the-wave-begins/",
     "title": "A new wave begins"
    },
    "next": {
     "path": "/fragments/one-knot-one-bind/the-run/the-knot-is-ready/",
     "title": "#3 · the listener is ready"
    }
   },
   "anchor": "2/2"
  },
  "/fragments/one-knot-one-bind/the-run/the-note-arrives/change-4/": {
   "kind": "change",
   "address": "2/3",
   "label": "The listener keeps the note in its slot",
   "path": "/fragments/one-knot-one-bind/the-run/the-note-arrives/change-4/",
   "title": "The listener keeps the note in its slot · Fragment 1",
   "nav": {
    "n": 8,
    "of": 11,
    "prev": {
     "path": "/fragments/one-knot-one-bind/the-run/the-wave-begins/",
     "title": "A new wave begins"
    },
    "next": {
     "path": "/fragments/one-knot-one-bind/the-run/the-knot-is-ready/",
     "title": "#3 · the listener is ready"
    }
   },
   "anchor": "2/3"
  },
  "/fragments/one-knot-one-bind/the-run/the-note-arrives/change-5/": {
   "kind": "change",
   "address": "2/4",
   "label": "The slot is emptied again",
   "path": "/fragments/one-knot-one-bind/the-run/the-note-arrives/change-5/",
   "title": "The slot is emptied again · Fragment 1",
   "nav": {
    "n": 8,
    "of": 11,
    "prev": {
     "path": "/fragments/one-knot-one-bind/the-run/the-wave-begins/",
     "title": "A new wave begins"
    },
    "next": {
     "path": "/fragments/one-knot-one-bind/the-run/the-knot-is-ready/",
     "title": "#3 · the listener is ready"
    }
   },
   "anchor": "2/4"
  },
  "/fragments/one-knot-one-bind/the-run/the-note-arrives/change-6/": {
   "kind": "change",
   "address": "2/5",
   "label": "CellSpace sets up its registers",
   "path": "/fragments/one-knot-one-bind/the-run/the-note-arrives/change-6/",
   "title": "CellSpace sets up its registers · Fragment 1",
   "nav": {
    "n": 8,
    "of": 11,
    "prev": {
     "path": "/fragments/one-knot-one-bind/the-run/the-wave-begins/",
     "title": "A new wave begins"
    },
    "next": {
     "path": "/fragments/one-knot-one-bind/the-run/the-knot-is-ready/",
     "title": "#3 · the listener is ready"
    }
   },
   "anchor": "2/5"
  },
  "/fragments/one-knot-one-bind/the-run/the-note-arrives/change-7/": {
   "kind": "change",
   "address": "2/6",
   "label": "The readiness enters the log as #3",
   "path": "/fragments/one-knot-one-bind/the-run/the-note-arrives/change-7/",
   "title": "The readiness enters the log as #3 · Fragment 1",
   "nav": {
    "n": 8,
    "of": 11,
    "prev": {
     "path": "/fragments/one-knot-one-bind/the-run/the-wave-begins/",
     "title": "A new wave begins"
    },
    "next": {
     "path": "/fragments/one-knot-one-bind/the-run/the-knot-is-ready/",
     "title": "#3 · the listener is ready"
    }
   },
   "anchor": "2/6"
  },
  "/fragments/one-knot-one-bind/the-run/the-note-arrives/change-8/": {
   "kind": "change",
   "address": "2/7",
   "label": "The membrane passes #2",
   "path": "/fragments/one-knot-one-bind/the-run/the-note-arrives/change-8/",
   "title": "The membrane passes #2 · Fragment 1",
   "nav": {
    "n": 8,
    "of": 11,
    "prev": {
     "path": "/fragments/one-knot-one-bind/the-run/the-wave-begins/",
     "title": "A new wave begins"
    },
    "next": {
     "path": "/fragments/one-knot-one-bind/the-run/the-knot-is-ready/",
     "title": "#3 · the listener is ready"
    }
   },
   "anchor": "2/7"
  },
  "/fragments/one-knot-one-bind/the-run/the-knot-is-ready/": {
   "kind": "tuple",
   "o": 3,
   "label": "#3 · the listener is ready",
   "path": "/fragments/one-knot-one-bind/the-run/the-knot-is-ready/",
   "title": "#3 · the listener is ready · Fragment 1",
   "nav": {
    "n": 9,
    "of": 11,
    "prev": {
     "path": "/fragments/one-knot-one-bind/the-run/the-note-arrives/",
     "title": "#2 · a note arrives"
    },
    "next": {
     "path": "/fragments/one-knot-one-bind/the-run/the-note-is-released/",
     "title": "#4 · the note is released"
    }
   },
   "anchor": "3/1"
  },
  "/fragments/one-knot-one-bind/the-run/the-knot-is-ready/change-1/": {
   "kind": "change",
   "address": "3/1",
   "label": "The engine takes #3",
   "path": "/fragments/one-knot-one-bind/the-run/the-knot-is-ready/change-1/",
   "title": "The engine takes #3 · Fragment 1",
   "nav": {
    "n": 9,
    "of": 11,
    "prev": {
     "path": "/fragments/one-knot-one-bind/the-run/the-note-arrives/",
     "title": "#2 · a note arrives"
    },
    "next": {
     "path": "/fragments/one-knot-one-bind/the-run/the-note-is-released/",
     "title": "#4 · the note is released"
    }
   },
   "anchor": "3/1"
  },
  "/fragments/one-knot-one-bind/the-run/the-knot-is-ready/change-2/": {
   "kind": "change",
   "address": "3/2",
   "label": "The doer opens its rendezvous",
   "path": "/fragments/one-knot-one-bind/the-run/the-knot-is-ready/change-2/",
   "title": "The doer opens its rendezvous · Fragment 1",
   "nav": {
    "n": 9,
    "of": 11,
    "prev": {
     "path": "/fragments/one-knot-one-bind/the-run/the-note-arrives/",
     "title": "#2 · a note arrives"
    },
    "next": {
     "path": "/fragments/one-knot-one-bind/the-run/the-note-is-released/",
     "title": "#4 · the note is released"
    }
   },
   "anchor": "3/2"
  },
  "/fragments/one-knot-one-bind/the-run/the-knot-is-ready/change-3/": {
   "kind": "change",
   "address": "3/3",
   "label": "A lane for this session",
   "path": "/fragments/one-knot-one-bind/the-run/the-knot-is-ready/change-3/",
   "title": "A lane for this session · Fragment 1",
   "nav": {
    "n": 9,
    "of": 11,
    "prev": {
     "path": "/fragments/one-knot-one-bind/the-run/the-note-arrives/",
     "title": "#2 · a note arrives"
    },
    "next": {
     "path": "/fragments/one-knot-one-bind/the-run/the-note-is-released/",
     "title": "#4 · the note is released"
    }
   },
   "anchor": "3/3"
  },
  "/fragments/one-knot-one-bind/the-run/the-knot-is-ready/change-4/": {
   "kind": "change",
   "address": "3/4",
   "label": "What the listener understood is gathered",
   "path": "/fragments/one-knot-one-bind/the-run/the-knot-is-ready/change-4/",
   "title": "What the listener understood is gathered · Fragment 1",
   "nav": {
    "n": 9,
    "of": 11,
    "prev": {
     "path": "/fragments/one-knot-one-bind/the-run/the-note-arrives/",
     "title": "#2 · a note arrives"
    },
    "next": {
     "path": "/fragments/one-knot-one-bind/the-run/the-note-is-released/",
     "title": "#4 · the note is released"
    }
   },
   "anchor": "3/4"
  },
  "/fragments/one-knot-one-bind/the-run/the-knot-is-ready/change-5/": {
   "kind": "change",
   "address": "3/5",
   "label": "The doer acts — once",
   "path": "/fragments/one-knot-one-bind/the-run/the-knot-is-ready/change-5/",
   "title": "The doer acts — once · Fragment 1",
   "nav": {
    "n": 9,
    "of": 11,
    "prev": {
     "path": "/fragments/one-knot-one-bind/the-run/the-note-arrives/",
     "title": "#2 · a note arrives"
    },
    "next": {
     "path": "/fragments/one-knot-one-bind/the-run/the-note-is-released/",
     "title": "#4 · the note is released"
    }
   },
   "anchor": "3/5"
  },
  "/fragments/one-knot-one-bind/the-run/the-knot-is-ready/change-6/": {
   "kind": "change",
   "address": "3/6",
   "label": "The intention gets its name",
   "path": "/fragments/one-knot-one-bind/the-run/the-knot-is-ready/change-6/",
   "title": "The intention gets its name · Fragment 1",
   "nav": {
    "n": 9,
    "of": 11,
    "prev": {
     "path": "/fragments/one-knot-one-bind/the-run/the-note-arrives/",
     "title": "#2 · a note arrives"
    },
    "next": {
     "path": "/fragments/one-knot-one-bind/the-run/the-note-is-released/",
     "title": "#4 · the note is released"
    }
   },
   "anchor": "3/6"
  },
  "/fragments/one-knot-one-bind/the-run/the-knot-is-ready/change-7/": {
   "kind": "change",
   "address": "3/7",
   "label": "The release enters the log as #4",
   "path": "/fragments/one-knot-one-bind/the-run/the-knot-is-ready/change-7/",
   "title": "The release enters the log as #4 · Fragment 1",
   "nav": {
    "n": 9,
    "of": 11,
    "prev": {
     "path": "/fragments/one-knot-one-bind/the-run/the-note-arrives/",
     "title": "#2 · a note arrives"
    },
    "next": {
     "path": "/fragments/one-knot-one-bind/the-run/the-note-is-released/",
     "title": "#4 · the note is released"
    }
   },
   "anchor": "3/7"
  },
  "/fragments/one-knot-one-bind/the-run/the-knot-is-ready/change-8/": {
   "kind": "change",
   "address": "3/8",
   "label": "The membrane passes #3",
   "path": "/fragments/one-knot-one-bind/the-run/the-knot-is-ready/change-8/",
   "title": "The membrane passes #3 · Fragment 1",
   "nav": {
    "n": 9,
    "of": 11,
    "prev": {
     "path": "/fragments/one-knot-one-bind/the-run/the-note-arrives/",
     "title": "#2 · a note arrives"
    },
    "next": {
     "path": "/fragments/one-knot-one-bind/the-run/the-note-is-released/",
     "title": "#4 · the note is released"
    }
   },
   "anchor": "3/8"
  },
  "/fragments/one-knot-one-bind/the-run/the-note-is-released/": {
   "kind": "tuple",
   "o": 4,
   "label": "#4 · the note is released",
   "path": "/fragments/one-knot-one-bind/the-run/the-note-is-released/",
   "title": "#4 · the note is released · Fragment 1",
   "nav": {
    "n": 10,
    "of": 11,
    "prev": {
     "path": "/fragments/one-knot-one-bind/the-run/the-knot-is-ready/",
     "title": "#3 · the listener is ready"
    },
    "next": {
     "path": "/fragments/one-knot-one-bind/the-run/the-wave-ends/",
     "title": "The wave ends — quiet"
    }
   },
   "anchor": "4/1"
  },
  "/fragments/one-knot-one-bind/the-run/the-note-is-released/change-1/": {
   "kind": "change",
   "address": "4/1",
   "label": "The engine takes #4",
   "path": "/fragments/one-knot-one-bind/the-run/the-note-is-released/change-1/",
   "title": "The engine takes #4 · Fragment 1",
   "nav": {
    "n": 10,
    "of": 11,
    "prev": {
     "path": "/fragments/one-knot-one-bind/the-run/the-knot-is-ready/",
     "title": "#3 · the listener is ready"
    },
    "next": {
     "path": "/fragments/one-knot-one-bind/the-run/the-wave-ends/",
     "title": "The wave ends — quiet"
    }
   },
   "anchor": "4/1"
  },
  "/fragments/one-knot-one-bind/the-run/the-note-is-released/change-2/": {
   "kind": "change",
   "address": "4/2",
   "label": "The membrane passes #4",
   "path": "/fragments/one-knot-one-bind/the-run/the-note-is-released/change-2/",
   "title": "The membrane passes #4 · Fragment 1",
   "nav": {
    "n": 10,
    "of": 11,
    "prev": {
     "path": "/fragments/one-knot-one-bind/the-run/the-knot-is-ready/",
     "title": "#3 · the listener is ready"
    },
    "next": {
     "path": "/fragments/one-knot-one-bind/the-run/the-wave-ends/",
     "title": "The wave ends — quiet"
    }
   },
   "anchor": "4/2"
  },
  "/fragments/one-knot-one-bind/the-run/the-wave-ends/": {
   "kind": "change",
   "address": "wave-5/3",
   "label": "The wave ends — quiet",
   "path": "/fragments/one-knot-one-bind/the-run/the-wave-ends/",
   "title": "The wave ends — quiet · Fragment 1",
   "nav": {
    "n": 11,
    "of": 11,
    "prev": {
     "path": "/fragments/one-knot-one-bind/the-run/the-note-is-released/",
     "title": "#4 · the note is released"
    },
    "next": null
   },
   "anchor": "wave-5/3"
  }
 },
 "data": {
  "fragment": "/fragments/one-knot-one-bind/fragment.json",
  "atlas": "/fragments/one-knot-one-bind/atlas.json",
  "atlasPage": "/fragments/one-knot-one-bind/atlas.html",
  "atlasLib": "/fragments/_atlas/atlas.07fc6c0a69.js"
 }
}
