The machine in reference · Volume 06
Volume 06 — Bind Descriptors: Gather, Judge, Publish
CURRENTsnapshot of 14 July 20267 min read← Volume 05 — Activation KnotsVolume 07 — The Membrane and Output Controllers →
Reading aids · CoAgnes LabNot part of the specification; where they differ, the volume governs.
At a glance
- The bind as one scoped expression: understanding enters through exactly two channels — the activation and the demands; at the barrier (currently
all) the bound names become simultaneously available; gates are predicates over the bound scope; and either the service's integration or the verdict of rejection is published. §1 - The two descriptor forms of the current machine: the emit descriptor — one activation, no demands, no gates, one fact carrying the activating knot's snapshot at every readiness — and the operator bind — activation, demands, gates and a service crossing the membrane. §2§3
- The rendezvous algorithm: one state per key lane; a latching barrier, met by the presence of every demand name, not by simultaneity; gates in declared order, the first failure winning; one projection per key — a machine-complete service intention, or a
bind.rejectedverdict, terminal for that rendezvous. §4§5 - The two delegated emit declarations:
writes— the discharging controller publishes the validated result as one fact of the declared type — andunfold— the result instantiates a declared template: knot records, the closing bind once, head facts, in exactly that order, each emission stampedemittedBy. §6§7 - A third emit form,
cell(PROPOSED) — mutually exclusive with the other two, leaving binds and the rendezvous algorithm unchanged — and the reference operator bind, abridged, as a demonstration. §8§9
Where it sits
- Read after
- Volume 02 — Machine Model and the Architectural Register FileVolume 04 — Tuple ReferenceVolume 05 — Activation Knots
- Read next
- Volume 07 — The Membrane and Output Controllers
- Requirements
- 2 sentences with MUST, SHOULD or MAY — the list
- At work
- 4 of its sections seen in a real run of the machine, each linked under its heading
- Across the set
- every volume's questionsthe machine in figures
Questions this volume answers
- Through which channels does understanding enter a bind? §1
- How often does an emit descriptor publish? §2
- Which readiness tuples wake an operator bind? §3
- Must the demands be ready at the same moment for the barrier to be met? §4
- Can an operator bind project twice on the same key? §4
- What happens when a gate fails — can the bind try again? §5
- Who publishes an operator bind's result — the bind or the controller? §6
- In an unfold, what does the model supply, and what is fixed in advance? §7
A bind descriptorBind descriptorA bind. Woken by an activation knot, it gathers named understandings from the space, judges them, runs a service, and publishes an integration. aka descriptor, bind. (Vol. 06)Volume 15 — Terminology is a bind: woken by an activation knotActivation knotAn accumulating unit that matches wave tuples, winds them, and tests readiness; it accumulates understanding. When ready, it activates bind descriptors. Its minimal form is a single condition matcher — a degenerate configuration of the same accumulator, not a different kind. aka knot, clew (for the per-key instance see clew). (Vol. 05)Volume 15 — Terminology's readinessReadinessThe state an activation knot reaches when its accumulated understanding satisfies its test; readiness is what activates bind descriptors. Readiness is reified: the topology commits it as a tuple carrying the understanding snapshot. (Vol. 02 §5, Vol. 04 §2.3)Volume 15 — Terminology, it gathers named understandings from the space, judges them in that bound scopeBound scopeThe record of names — from the activation tuple and the demands — over which gates and the service are evaluated. (Vol. 06 §4)Volume 15 — Terminology, runs a serviceServiceThe function evaluated over the bound scope to produce the integration. Its kind (model instruction, deterministic function, other) is an assembly property. aka service function. (Vol. 06 §3, Vol. 08 §5)Volume 15 — Terminology, and publishes an integrationIntegrationThe understanding a bind descriptor forms and publishes as a wave tuple; received by others through binding — as an activation or as a demand — so integrations compose into higher-order understanding. (Vol. 06 §1)Volume 15 — Terminology. It never returns a value privately — publication is the composition mechanism. This volume specifies the two descriptor forms of the current machine (emit descriptorEmit descriptorThe minimal bind form: one activation, immediate truthful publication. (Vol. 06 §2)Volume 15 — Terminology, operator bindOperator bindThe full bind form: activation + demands + gates + a service crossing the membrane. (Vol. 06 §3)Volume 15 — Terminology), the rendezvousRendezvousOne key lane's gathering state of an operator bind: activation flag, scope, one-shot projection latch. (Vol. 02 §4.5, Vol. 06 §4)Volume 15 — Terminology algorithm, gatesGateA predicate over the bound scope. Gates decide between emit and reject; the current form is min_grade over a named entry. (Vol. 06 §5)Volume 15 — Terminology, service intentionsService intentionThe machine-complete service.request an operator bind projects: instruction, scope, schema, emit declaration. (Vol. 04 §5.1)Volume 15 — Terminology, and the two delegated emit declarationsEmit declarationThe declared publication form carried in the intention: writes (one fact) or unfold (a sown-topology template); the proposed third member is cell. (Vol. 06 §6–8)Volume 15 — Terminology including the topology-sowing template.
§1. The bind as a form
Conceptually every bind is the same scoped expression:
bind {
<name₀> ← ⟨activation: knot A⟩
<name₁> ← ⟨demand: knot D₁⟩
…
} at barrier(all)
in if gates(name₀ … nameₙ)
then emit = service(name₀ … nameₙ) — the integration, published
else reject — the verdict, publishedUnderstanding enters a bind through exactly two channels: the activation (the one knotActivation knotAn accumulating unit that matches wave tuples, winds them, and tests readiness; it accumulates understanding. When ready, it activates bind descriptors. Its minimal form is a single condition matcher — a degenerate configuration of the same accumulator, not a different kind. aka knot, clew (for the per-key instance see clew). (Vol. 05)Volume 15 — Terminology whose readinessReadinessThe state an activation knot reaches when its accumulated understanding satisfies its test; readiness is what activates bind descriptors. Readiness is reified: the topology commits it as a tuple carrying the understanding snapshot. (Vol. 02 §5, Vol. 04 §2.3)Volume 15 — Terminology wakes it) and the demandsDemandA named binding (as:) to an activation knot whose integrated understanding the bind descriptor gathers back. The gathering face of affinity, and the second method through which understanding enters the bind. aka tendril. (Vol. 06 §3–4)Volume 15 — Terminology (named bindings to knots whose integrationsIntegrationThe understanding a bind descriptor forms and publishes as a wave tuple; received by others through binding — as an activation or as a demand — so integrations compose into higher-order understanding. (Vol. 06 §1)Volume 15 — Terminology it gathers). The barrierBarrierThe join policy over demands (currently all): the rendezvous at which the bound demands become simultaneously available. The current barrier latches: a later readiness refreshes a demand's entry until projection. (Vol. 06 §4)Volume 15 — Terminology is the rendezvousRendezvousOne key lane's gathering state of an operator bind: activation flag, scope, one-shot projection latch. (Vol. 02 §4.5, Vol. 06 §4)Volume 15 — Terminology at which the bound names become simultaneously available; gatesGateA predicate over the bound scope. Gates decide between emit and reject; the current form is min_grade over a named entry. (Vol. 06 §5)Volume 15 — Terminology are predicates over the bound scopeBound scopeThe record of names — from the activation tuple and the demands — over which gates and the service are evaluated. (Vol. 06 §4)Volume 15 — Terminology; the serviceServiceThe function evaluated over the bound scope to produce the integration. Its kind (model instruction, deterministic function, other) is an assembly property. aka service function. (Vol. 06 §3, Vol. 08 §5)Volume 15 — Terminology is the function evaluated over the scope; the current barrier policy is all.
§2. Emit descriptor (action: emit)
Seen at work Fragment 3 · #1 · the first fragment's doer
Status: CURRENT. The minimal bind: one activation, no demandsDemandA named binding (as:) to an activation knot whose integrated understanding the bind descriptor gathers back. The gathering face of affinity, and the second method through which understanding enters the bind. aka tendril. (Vol. 06 §3–4)Volume 15 — Terminology, no gatesGateA predicate over the bound scope. Gates decide between emit and reject; the current form is min_grade over a named entry. (Vol. 06 §5)Volume 15 — Terminology; its serviceServiceThe function evaluated over the bound scope to produce the integration. Its kind (model instruction, deterministic function, other) is an assembly property. aka service function. (Vol. 06 §3, Vol. 08 §5)Volume 15 — Terminology is the identity over the activation understanding.
Registration payload: {id, subscribesTo, actionConfig: {writes}} (Vol. 04 §2.2). Execution:
- On activation
{knotId, key, understanding}emit exactly one fact of the declared type on the same key:{factType: writes, data: {triggeredBy: [knotId], understanding}}. - The payload MUST be truthful — the activating knotActivation knotAn accumulating unit that matches wave tuples, winds them, and tests readiness; it accumulates understanding. When ready, it activates bind descriptors. Its minimal form is a single condition matcher — a degenerate configuration of the same accumulator, not a different kind. aka knot, clew (for the per-key instance see clew). (Vol. 05)Volume 15 — Terminology's snapshot, never invented values.
- Emit descriptorsEmit descriptorThe minimal bind form: one activation, immediate truthful publication. (Vol. 06 §2)Volume 15 — Terminology are not one-shot: every readinessReadinessThe state an activation knot reaches when its accumulated understanding satisfies its test; readiness is what activates bind descriptors. Readiness is reified: the topology commits it as a tuple carrying the understanding snapshot. (Vol. 02 §5, Vol. 04 §2.3)Volume 15 — Terminology of the subscribed knot produces a publication (pair with knot reset policyReset policyWhat readiness does to the clew:
on_readyclears the wound state;neverkeeps it, allowing repeated readiness. (Vol. 05 §1)Volume 15 — Terminology deliberately).
Limitation fixed by the current stage: emit-descriptor output carries triggeredBy but no bind-level uid; it is therefore not accepted where publication provenance is required (a rule the Cell extension states for results, Vol. 12 §5.3).
§3. Operator bind (action: operator)
Seen at work Fragment 1 · #1 · a doer is described
Status: CURRENT. The full bind: activation + demandsDemandA named binding (as:) to an activation knot whose integrated understanding the bind descriptor gathers back. The gathering face of affinity, and the second method through which understanding enters the bind. aka tendril. (Vol. 06 §3–4)Volume 15 — Terminology + gatesGateA predicate over the bound scope. Gates decide between emit and reject; the current form is min_grade over a named entry. (Vol. 06 §5)Volume 15 — Terminology + serviceServiceThe function evaluated over the bound scope to produce the integration. Its kind (model instruction, deterministic function, other) is an assembly property. aka service function. (Vol. 06 §3, Vol. 08 §5)Volume 15 — Terminology crossing the membraneMembraneThe boundary where the wave meets the world: output controllers face outward, ingress faces inward. (Vol. 07)Volume 15 — Terminology. Configuration (carried in the registration record and echoed into every intention):
type OperatorBindConfig = {
on?: string; // activation knot id; absent = demands-only bind
on_as?: string; // scope name of the activation entry (default 'activation')
demands: readonly { as: string; knot: string }[];
gates?: readonly { scope: string; min_grade: number }[];
service: {
instruction: string; // the operator instruction
schema?: JsonSchema; // embedded result contract (required for unfold)
emit: { writes: string } | { unfold: UnfoldEmitTemplate };
};
};Interests: the bind registers under its activation knotActivation knotAn accumulating unit that matches wave tuples, winds them, and tests readiness; it accumulates understanding. When ready, it activates bind descriptors. Its minimal form is a single condition matcher — a degenerate configuration of the same accumulator, not a different kind. aka knot, clew (for the per-key instance see clew). (Vol. 05)Volume 15 — Terminology and under every demand knot — it is woken by each of those readinessReadinessThe state an activation knot reaches when its accumulated understanding satisfies its test; readiness is what activates bind descriptors. Readiness is reified: the topology commits it as a tuple carrying the understanding snapshot. (Vol. 02 §5, Vol. 04 §2.3)Volume 15 — Terminology tuplesWave tupleAn immutable record in the wave log: offset, kind, key, payload. The unit of fact. aka tuple. (Vol. 03 §1)Volume 15 — Terminology. subscribesTo (the executor's nominal subscription) is on, else the first demand's knot, else the bind's own id.
§4. Rendezvous algorithm
Seen at work Fragment 1 · The doer opens its rendezvous
One rendezvousRendezvousOne key lane's gathering state of an operator bind: activation flag, scope, one-shot projection latch. (Vol. 02 §4.5, Vol. 06 §4)Volume 15 — Terminology state per key lane (registers of Vol. 02 §4.5). On each activation {knotId, key, understanding}:
1 S ← RDV[key] (create: ACTIVATED = (on undeclared), SCOPE = ∅, PROJECTED = false)
2 if knotId = on: S.ACTIVATED ← true; S.SCOPE[on_as ?? 'activation'] ← understanding
3 if ∃ demand d: d.knot = knotId: S.SCOPE[d.as] ← understanding (latch/refresh)
4 if S.PROJECTED ∨ ¬S.ACTIVATED: return []
5 if ∃ demand d: d.as ∉ S.SCOPE: return [] (barrier 'all' not met)
6 S.PROJECTED ← true; scope ← snapshot(S.SCOPE)
7 for each gate g in declared order:
grade ← scope[g.scope].grade
if grade is not a number ∨ grade < g.min_grade:
return [ bind.rejected {bindId, reason} ] (first failure wins)
8 INTENT.CTR += 1; uid ← "<bindId>#<INTENT.CTR>"
9 return [ service.request {bindId, uid, instruction, scope, schema?, emit} ]Normative points:
- Latching barrierBarrierThe join policy over demands (currently
all): the rendezvous at which the bound demands become simultaneously available. The current barrier latches: a later readiness refreshes a demand's entry until projection. (Vol. 06 §4)Volume 15 — Terminology. A later readinessReadinessThe state an activation knot reaches when its accumulated understanding satisfies its test; readiness is what activates bind descriptors. Readiness is reified: the topology commits it as a tuple carrying the understanding snapshot. (Vol. 02 §5, Vol. 04 §2.3)Volume 15 — Terminology of the same demandDemandA named binding (as:) to an activation knot whose integrated understanding the bind descriptor gathers back. The gathering face of affinity, and the second method through which understanding enters the bind. aka tendril. (Vol. 06 §3–4)Volume 15 — Terminology refreshes its scope entry until projection; the scope snapshot at step 6 is what gatesGateA predicate over the bound scope. Gates decide between emit and reject; the current form ismin_gradeover a named entry. (Vol. 06 §5)Volume 15 — Terminology and the serviceServiceThe function evaluated over the bound scope to produce the integration. Its kind (model instruction, deterministic function, other) is an assembly property. aka service function. (Vol. 06 §3, Vol. 08 §5)Volume 15 — Terminology see. The barrier is met by presence of all demand names, not by simultaneity. - One-shot per key.
PROJECTEDlatches on both outcomes (intention or rejection). The rendezvous never reopens in the current machine; revision patterns create fresh binds instead (Vol. 12 §6, blind spot §11.4 of the design proposal). Repeated readiness after projection is absorbed silently. - Gate semantics. A gate reads the top-level
gradefield of the named scope entry — the convention that knotActivation knotAn accumulating unit that matches wave tuples, winds them, and tests readiness; it accumulates understanding. When ready, it activates bind descriptors. Its minimal form is a single condition matcher — a degenerate configuration of the same accumulator, not a different kind. aka knot, clew (for the per-key instance see clew). (Vol. 05)Volume 15 — Terminology understandings expose their sufficiency asgrade(deterministic understandings without one simply fail a gate). Richer gate expressions are an extension rail (Vol. 11 §4.5). - Machine-completeness. The projected intention carries scope, instruction, schema, and emit declarationEmit declarationThe declared publication form carried in the intention:
writes(one fact) orunfold(a sown-topology template); the proposed third member iscell. (Vol. 06 §6–8)Volume 15 — Terminology in full: the bind is complete at projection, and completion is the controllerOutput controllerA receiver of committed tuples facing outward: it claims tuples by kind/fact type and discharges them to the external world exactly once per runtime. It neither judges nor integrates — a third station beside the activation knot and the bind descriptor, standing outside the propagation cycle on its own cursor. aka effector, egress handler. (Vol. 07 §2–3)Volume 15 — Terminology's commit. Nothing about the bind needs to be consulted afterwards. - A demands-only bind (
onabsent) is activated from creation and projects as soon as all demands are bound; an activation-only bind (demands: []) projects on activation immediately.
§5. Judgement and rejection
GateGateA predicate over the bound scope. Gates decide between emit and reject; the current form is min_grade over a named entry. (Vol. 06 §5)Volume 15 — Terminology failure publishes bind.rejected {bindId, reason} on the activation key (Vol. 04 §3.2), carrying the first failing gate's reason. Rejection is a published verdict — visible, bindable (a guard or journal may collect it) — and terminal for that rendezvousRendezvousOne key lane's gathering state of an operator bind: activation flag, scope, one-shot projection latch. (Vol. 02 §4.5, Vol. 06 §4)Volume 15 — Terminology. There is no retry at this station.
§6. Delegated emit: writes
Seen at work Fragment 1 · #4 · the note is released
The simple declaration emit: { writes: T } instructs the discharging controllerOutput controllerA receiver of committed tuples facing outward: it claims tuples by kind/fact type and discharges them to the external world exactly once per runtime. It neither judges nor integrates — a third station beside the activation knot and the bind descriptor, standing outside the propagation cycle on its own cursor. aka effector, egress handler. (Vol. 07 §2–3)Volume 15 — Terminology to publish the validated result as one fact of type T, key preserved, data: {bindId, uid, result} (Vol. 04 §5.3). Publication by proxy keeps the station rules intact: the bind judged and projected; the controller merely commits under the declared form.
§7. Delegated emit: unfold — sowing topology
Status: CURRENT. The constrained in-wave authoring form: a serviceServiceThe function evaluated over the bound scope to produce the integration. Its kind (model instruction, deterministic function, other) is an assembly property. aka service function. (Vol. 06 §3, Vol. 08 §5)Volume 15 — Terminology result instantiates new topologyTopologyThe live set of registered activation knots and bind descriptors that the wave flows through. (Vol. 02 §5)Volume 15 — Terminology from a declared template. The model (or other oracle) supplies only the items; the pipeline fixed the record shapes, ids, schemas, and closing form at authoring time.
type UnfoldEmitTemplate = {
for_each: string; // answer field holding the items array
knot: { id: string; strategy: 'semantic_evaluator'; config: Record<string, unknown> };
head: { writes: string; data: Record<string, unknown> };
close: {
id: string;
demands_from_items: { as: string; knot: string }; // both contain {index}
gates?: readonly OperatorGate[];
service: OperatorServiceConfig; // emit must be 'writes'
};
};Instantiation algorithm (controller-side, after schema validation):
1 items ← result[for_each]; if not a non-empty array → service.failed
2 contexts ← [{index: i+1, item: items[i], scope} for i in 0..|items|-1]
3 emissions ← for each context: sys.knot.defined
{payload: substitute(knot, ctx) + emittedBy: uid, key: null}
4 emissions += one sys.descriptor.defined
{id: close.id,
operator: {demands: [substitute(demands_from_items, ctx) for each ctx],
gates?, service: close.service},
emittedBy: uid, key: null}
5 emissions += for each context: domain.fact
{factType: head.writes, key: intention key,
data: substitute(head.data, ctx) + emittedBy: uid}
6 return emissions in exactly this order: knots, close, headsNormative points:
- Order is load-bearing: knotActivation knotAn accumulating unit that matches wave tuples, winds them, and tests readiness; it accumulates understanding. When ready, it activates bind descriptors. Its minimal form is a single condition matcher — a degenerate configuration of the same accumulator, not a different kind. aka knot, clew (for the per-key instance see clew). (Vol. 05)Volume 15 — Terminology records first, the closing bind once, head facts last — registration always precedes the facts that reach it (Vol. 02 §5.1).
- Placeholders.
{index}(one-based),{item.path…},{scope.path…}. A string that is exactly one placeholder keeps the resolved raw type; embedded placeholders stringify (non-strings as JSON). A placeholder resolving to nothing aborts instantiation (→service.failed). - Static coherence is checked at compile time: every
{item.*}path must exist in the declared items schema; every{scope.*}must name a bound scopeBound scopeThe record of names — from the activation tuple and the demands — over which gates and the service are evaluated. (Vol. 06 §4)Volume 15 — Terminology entry; knot and demandDemandA named binding (as:) to an activation knot whose integrated understanding the bind descriptor gathers back. The gathering face of affinity, and the second method through which understanding enters the bind. aka tendril. (Vol. 06 §3–4)Volume 15 — Terminology templates must contain{index}; the closing service's emit must be a simplewrites(no recursive unfoldUnfoldThe constrained in-wave authoring form: a service result instantiates declared knot/close/head templates. (Vol. 06 §7)Volume 15 — Terminology at this stage); an unfold requires the service schema (Vol. 09 §5). - Provenance. Every emissionEmissionA wave tuple without its
offset— the form in which content is handed to the engine; the engine assigns the offset at append. (Vol. 03 §1)Volume 15 — Terminology carriesemittedBy= the sowing intention's uid. The topology ignores the stamp; trace derivations and the proposed Cell ownership rules rely on it (Vol. 12 §4). - TerminationAttribution, reachability, terminationThe three load-bearing obligations of the decoupled model. (Vol. 01 §7)Volume 15 — Terminology. The fan-out is bounded by the schema (
maxItemswhere declared); extensions performing admission MUST bound worst-case fan-out statically rather than trusting one answer (Vol. 12 §6, check 13).
The canonical figure produced by an unfold — question cells + closing harvest bind + head facts seeding each cell — is treated as a construct in Vol. 10 §6.
§8. Third emit form (PROPOSED)
The Cell extension adds emit: { cell: CellEmitDeclaration } as a third, mutually exclusive variant: the validated result is treated as a CellBlueprint and wrapped, together with parent-owned Charter/policy/context, into a cell.seed (Vol. 12 §3). Binds and this volume's rendezvousRendezvousOne key lane's gathering state of an operator bind: activation flag, scope, one-shot projection latch. (Vol. 02 §4.5, Vol. 06 §4)Volume 15 — Terminology algorithm are unchanged by it — the declaration passes through the intention like any other emit form, which is precisely why the extension can live on these rails.
§9. Demonstration: the reference operator bind (abridged)
class OperatorBind implements IDescriptorExecutor<AnyEmission> {
readonly id: string; readonly subscribesTo: string;
private readonly states = new Map<string | null, RendezvousState>();
private intentionCounter = 0;
execute(a: DescriptorActivation): readonly AnyEmission[] {
const s = this.stateFor(a.key);
if (this.config.on === a.knotId) {
s.activated = true;
s.scope.set(this.config.on_as ?? 'activation', a.understanding);
}
const d = this.config.demands.find(d => d.knot === a.knotId);
if (d) s.scope.set(d.as, a.understanding); // latch / refresh
if (s.projected || !s.activated) return [];
if (this.config.demands.some(d => !s.scope.has(d.as))) return [];
s.projected = true;
const scope = Object.fromEntries(s.scope);
const rejection = this.judge(scope); // first failing gate
if (rejection !== null)
return [fact('bind.rejected', a.key, { bindId: this.id, reason: rejection })];
const uid = `${this.id}#${++this.intentionCounter}`;
return [fact('service.request', a.key,
{ bindId: this.id, uid, instruction: this.config.service.instruction,
scope, ...(this.config.service.schema && { schema: this.config.service.schema }),
emit: this.config.service.emit })];
}
}Reading aids · CoAgnes LabNot part of the specification; where they differ, the volume governs.
Requirements in this volume
Every sentence of the volume with MUST, SHOULD or MAY, as it stands, with the section it stands in. These key words mark its conformance requirements; the rest of its text is descriptive (Vol. 00 §4).
- MUSTThe payload MUST be truthful — the activating knot's snapshot, never invented values.§2
- MUSTTermination. The fan-out is bounded by the schema (
maxItemswhere declared); extensions performing admission MUST bound worst-case fan-out statically rather than trusting one answer (Vol. 12 §6, check 13).§7