Bus state by template: the typed requires entry, the binding and the calls package (issue 1966, B1) #164

Merged
mesh-tools merged 12 commits from feat/bus-state into main 2026-11-03 15:24:28 +00:00
Member

Milestone B1 of issue 1966 (ADR 0595 §10 steps 1, 2 and 4; design 25 § 12). One delivery group with mesh-delivery, mesh-tools and mesh-catalog on branch feat/bus-state.

Contracts only (ADR 0578 §7, ADR 0593 §1): a requires item naming storage decodes into Manifest.BusState (kept off Requires, which names provisions); the storage types, templates, options and ledger effects as names; Membership.Bindings with a ledger's types; the new package buscalls (objects, streams, work queues, ledgers; MetaCall; IndexKey encoding each part); delivery.ManifestAccepted; the bus account kind ledger (ledger.<node>.<module>, own secret ledgers) and LedgerHistorySubject / LedgerSnapshotSubject. Additive: nothing a running module reads changes.

Acceptance: issue 1966 notes 8 and 10 (AC1-AC6, AC23, AC27, AC28).
Test budget: unit tests 607 -> 605 (over the 500 budget before; fell, no new test function).

Reviewed-by: reviewer-bus@shanks at f8bd12e4b7

Milestone B1 of issue 1966 (ADR 0595 §10 steps 1, 2 and 4; design 25 § 12). One delivery group with mesh-delivery, mesh-tools and mesh-catalog on branch feat/bus-state. Contracts only (ADR 0578 §7, ADR 0593 §1): a `requires` item naming `storage` decodes into `Manifest.BusState` (kept off `Requires`, which names provisions); the storage types, templates, options and ledger effects as names; `Membership.Bindings` with a ledger's types; the new package `buscalls` (objects, streams, work queues, ledgers; `MetaCall`; `IndexKey` encoding each part); `delivery.ManifestAccepted`; the bus account kind `ledger` (`ledger.<node>.<module>`, own secret `ledgers`) and `LedgerHistorySubject` / `LedgerSnapshotSubject`. Additive: nothing a running module reads changes. Acceptance: issue 1966 notes 8 and 10 (AC1-AC6, AC23, AC27, AC28). Test budget: unit tests 607 -> 605 (over the 500 budget before; fell, no new test function). Reviewed-by: reviewer-bus@shanks at f8bd12e4b7b1e32ff01965f5232c27433ad18414
mesh-tools added 12 commits 2026-11-03 14:35:56 +00:00
ADR 0595 §1: the typed long form {name, storage, template, options,
configuration} decodes into Manifest.BusState, its name also on Requires;
a key it does not know is set aside and named, never refused (ADR 0578 §3).
The requirements tests are one table.
The words of design 25 § 12.1 and ADR 0597 §1-2 as constants, and a
ledger's types (schema, operations each with its effect, indexes) on the
bus-state entry, so the judge, the bus module and the tool runner read one
contract. No bound and no rule: those are the judge's (ADR 0578 §7).
ADR 0595 §1, §7: the binding travels on the bus module's created and the
grants part writes it into the membership; omitted when empty, so a
membership without bindings encodes byte for byte as before. The two
address tests are one table.
ADR 0595 §9, ADR 0597 §10, design 25 § 12.5: the request and answer types
and method names of the bundle-pipe calls the tool runner serves, apply
naming the tool call it serves (ADR 0597 §7) and answering taken, its
sequence and state behind. It imports nothing of mesh-sdk, so a change
rebuilds only its importers; the package list names it.
ADR 0595 §4, design 25 § 12.2: the bus module hears the accepted verdict
as an event with the entries, never reading the indexer's state; AcceptedOf
builds the body and EventID names it once per digest and judge.
ADR 0597 §9 and the lead's Q1 path: one ledger credential per module
assignment, minted by the vault like every kind; the grants part's copy
of buscompose gains the same kind alike (D5b).
A local name such as records is no provision: on Requires it would send
the placement looking for a provider nothing offers (the lead's ruling on
issue 1966 B1). BusState alone holds the typed entries.
MetaCall, mesh/call: the id ApplyRequest.Call names, so the runner stamps
the caller it proved as the operation's author (ADR 0597 §7; the lead's
ruling on issue 1966 B1).
The grants part grants on them, the tool runner appends and snapshots on
them and the bus module creates the history over them, so the three read
one contract (the lead's ruling on issue 1966 B1; ADR 0597 §8, §9).
The grants part copies them from the manifest-accepted entry, so the tool
runner checks an operation against its type without reading another
part's state (ADR 0596; the lead's ruling on issue 1966 B1).
IndexKey and IndexEntry {instance, sequence}: the owner's watcher and the
tool runner's reindex write the same, so a reindex leaves the index as the
watcher keeps it (the lead's ruling on issue 1966 B1; ADR 0597 §4).
Encode each part of an index key, so no two keys meet and every part is a bus token (issue 1966 S4)
mesh/delivery merged: source.main moved to novox/mesh-sdk@2341e8e98377
mesh/delivery-group group feat/bus-state merged: every member is merged
mesh/check pass f8bd12e4b7b1 on 7c015b652d36 | unit 6460 run, 262 kept, 27 skipped | integration 6639 run, 264 kept, 35 skipped | over bound: unit, in…
f8bd12e4b7
A raw value holding "." collided with a longer path, and a space is refused
by the bus: every byte outside [A-Za-z0-9_-] of a field value or an instance
path part is written =XX (review round 1 of issue 1966 B1).
Author
Member

Delivery novox/mesh-sdk@f8bd12e4b7b1 — merged since 2026-11-03T15:24:29Z

Source — source.main moved to novox/mesh-sdk@2341e8e983. Whether it reached the machines is mesh-delivery-view's, derived from source.main, the wants and the haves.

Group feat/bus-state: novox/mesh-catalog@34ce2895dd, novox/mesh-delivery@4bb790bedf, novox/mesh-sdk@f8bd12e4b7, novox/mesh-tools@43d3fba501

  • composed together: pass — the checker's verdict at the members' heads (7bbdc38f1f86)

Transitions

  • 2026-11-03 14:35 (new) → proposed (announced): novox/mesh-sdk#164's head announced
  • 2026-11-03 14:36 proposed → ready (accepted): a verdict names this commit and the trunk's head as its trunk commit, the gate passed or warned, and the repository's own check did not fail; or the check gates no merge (check-gates-merge false)
  • 2026-11-03 15:24 ready → merged (merged): on the trunk its modules follow: merged there

The commit's note under refs/notes/mesh-plan keeps every transition of this change up to its merge: git log --notes=mesh-plan.

<!-- mesh-delivery:view --> **Delivery** `novox/mesh-sdk@f8bd12e4b7b1` — **merged** since 2026-11-03T15:24:29Z **Source** — source.main moved to novox/mesh-sdk@2341e8e98377. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves. **Group** `feat/bus-state`: novox/mesh-catalog@34ce2895dd33, novox/mesh-delivery@4bb790bedffe, novox/mesh-sdk@f8bd12e4b7b1, novox/mesh-tools@43d3fba501d3 - composed together: pass — the checker's verdict at the members' heads (7bbdc38f1f86) **Transitions** - 2026-11-03 14:35 (new) → proposed (announced): novox/mesh-sdk#164's head announced - 2026-11-03 14:36 proposed → ready (accepted): a verdict names this commit and the trunk's head as its trunk commit, the gate passed or warned, and the repository's own check did not fail; or the check gates no merge (check-gates-merge false) - 2026-11-03 15:24 ready → merged (merged): on the trunk its modules follow: merged there The commit's note under `refs/notes/mesh-plan` keeps every transition of this change up to its merge: `git log --notes=mesh-plan`.
mesh-tools merged commit 2341e8e983 into main 2026-11-03 15:24:28 +00:00
mesh-tools deleted branch feat/bus-state 2026-11-03 15:24:28 +00:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: novox/mesh-sdk#164