From 45e2d7e9722d7c967bff1e9eb710cbf851509200 Mon Sep 17 00:00:00 2001 From: jochen Date: Fri, 16 Oct 2026 03:03:21 +0200 Subject: [PATCH] Design 58: milestones for the operator to confirm, owners named, and the as-is of logins on the bus (playbook 04) --- 03-DESIGN/00-as-is/16-logins-on-the-bus.md | 41 +++++++++++++++++++ 03-DESIGN/00-as-is/README.md | 1 + .../58-agent-work-as-the-meshs-own.md | 26 +++++++++++- 3 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 03-DESIGN/00-as-is/16-logins-on-the-bus.md diff --git a/03-DESIGN/00-as-is/16-logins-on-the-bus.md b/03-DESIGN/00-as-is/16-logins-on-the-bus.md new file mode 100644 index 00000000..952d91db --- /dev/null +++ b/03-DESIGN/00-as-is/16-logins-on-the-bus.md @@ -0,0 +1,41 @@ +--- +layer: as-is +status: implemented +code: [mesh-controller, mesh-tools] +updated: 2026-10-16 +decisions: + - "ADR 0106" +--- + +# Logins on the bus, as they run + +**The bus reads one static list of logins from its settings file, in one account, written by the controller from +its own records. Every module has a login per assignment; a person's login may call only the tools it was given; +the sessions on the operator's machines call through their machine's tool-runner login, which may call every tool. +Nothing marks what a tool does.** Read from the controller's and the tool runner's code on main on 2026-10-15 +(research 053, question 8). Design 58 replaces it. + +## The list + +- **One list, one account.** The controller writes every login from its records into the bus's settings file; + the bus re-reads it without dropping connections (ADR 0106 §3). +- **A module's login per assignment**, named by machine and module, may publish and subscribe only what its + manifest declares it emits, consumes, serves and calls. +- **A person's login** may publish only to the tools it was given and listen only on its own inbox. +- **The caller is in the address.** A call's address carries the caller's name, so the runtime takes the caller + from the address, never from the message. For a seat every machine holds, the address also names the machine. + +## What it cannot do + +- **No expiry.** A login lives until its record is deleted and the list rewritten on the bus's node. +- **No per-agent login.** Agent sessions reach the bus through each machine's tool-runner login, which may call + every tool on the mesh; what one session did cannot be told from another's. +- **No effect.** No tool or seat verb declares whether it reads, acts or is dangerous; some module documents say + it in prose, and nothing reads that. +- **Asks and warrants exist** (ADR 0259): a module can have one act authorised by the operator, bound to that + act; nothing yet asks for a dangerous call by itself. + +## How it is checked + +By reading: the controller's code that renders the bus's settings and the tool runner's caller check, on main. +When design 58's switch is done, this document is replaced by the as-is of signed logins. diff --git a/03-DESIGN/00-as-is/README.md b/03-DESIGN/00-as-is/README.md index 75c8c544..fd64645d 100644 --- a/03-DESIGN/00-as-is/README.md +++ b/03-DESIGN/00-as-is/README.md @@ -24,6 +24,7 @@ Where the two disagree, the implementation wins and the disagreement is stated. | [`13-the-console.md`](13-the-console.md) | The mesh's tools on the machine a person sits at, served by a module the mesh assigned there | | [`14-a-modules-state.md`](14-a-modules-state.md) | A module's current state on the bus: what the controller creates, the runtime serves, and the first live use showed | | [`15-the-agent-and-its-licences.md`](15-the-agent-and-its-licences.md) | The operator's agent on every machine and the licence manager that keeps its licences | +| [`16-logins-on-the-bus.md`](16-logins-on-the-bus.md) | The bus's one list of logins, a login per module assignment, persons limited to their tools, sessions calling through the tool runner's login, and no effect on any tool | ## What these documents are not diff --git a/03-DESIGN/01-to-be/58-agent-work-as-the-meshs-own.md b/03-DESIGN/01-to-be/58-agent-work-as-the-meshs-own.md index a706879c..ead12a78 100644 --- a/03-DESIGN/01-to-be/58-agent-work-as-the-meshs-own.md +++ b/03-DESIGN/01-to-be/58-agent-work-as-the-meshs-own.md @@ -1,7 +1,7 @@ --- layer: to-be status: designed -code: [] +code: [mesh-catalog, mesh-media-catalog, mesh-sdk, mesh-tools, mesh-controller, mesh-host, mesh-lab] updated: 2026-10-16 decisions: - "ADR 0383" @@ -155,3 +155,27 @@ carry them: 4. The switch, run on the mesh's own modules in the lab from the bed test kept on the lab's branch `research/053-signed-bus-logins`, loses nothing and leaves every identity on the new bus. 5. The acceptance sentence at the top, end to end. + +## 11. Milestones + +Each milestone is one feature step (playbook 07), usable as soon as its delivery plan is done, and starts when +the previous one's is. What it replaces is in the as-is documents +[15 — The agent and its licences](../00-as-is/15-the-agent-and-its-licences.md) and +[16 — Logins on the bus](../00-as-is/16-logins-on-the-bus.md). The issues are opened once the operator confirms +the milestones, and their numbers written here. + +| # | Outcome, in one sentence | Proves | Repositories and their parts | Depends on | +|---|---|---|---|---| +| 1 | Every tool on the mesh says whether it reads, acts or is dangerous, a tool's description shows it, and the catalogue refuses a module that leaves one unmarked | test 3 | mesh-sdk: the effect in a tool's declaration, an unmarked tool served as dangerous; mesh-controller: the manifest field; mesh-catalog and mesh-media-catalog: every module marked, the check | — | +| 2 | A session works on a repository's workspace through the mesh's tools alone: read, glob, search, edit, write, git, its tests and its merge check, with no command runner | — | mesh-catalog: the module `nox-workspace` on the node seat `workspace`, on the always-on nodes; mesh-controller: the seat | 1 | +| 3 | A thread created through the thread seat runs headless on an always-on node, its conversation readable through the seat, its usage counted per thread, and a move to another node loses at most the turn in progress | — | mesh-catalog: `nox-threads` (seat `thread`, restricted streams, leases), `nox-thread-handler` (seat `thread-handler`), claude-code (mirror and rebuild), claude-licence-manager (usage per thread) | 2 | +| 4 | The operator starts, follows, answers and stops a thread from a terminal client, and answers its questions on Telegram | — | mesh-catalog: the terminal client, a Go program of `nox-threads`; claude-code: questions and permission requests through the asks | 3 | +| 5 | Every session runs in a sandbox of its own that reaches only the vendor and the bus, and the home server runs one too | tests 1 and 2 | mesh-catalog: the sandbox module (microsandbox pinned, KVM loaded where off); `nox-thread-handler`: runs sessions in it; claude-code: writes the login and the licence token without its refresh part | 3 | +| 6 | Every person, agent and module is an identity with a role, and an agent's call outside its role is refused, saying which grant is missing | — | mesh-catalog: the identity seat's module; mesh-sdk: the tool runner's exact check, calls carrying thread and agent token; mesh-controller: an identity asked for each assignment; mesh-tools: sessions call as a person or an agent, never through the tool runner's login | 1 | +| 7 | A dangerous act not named in a role comes to the operator as an ask, and the sealed break-glass agent opens only on the operator's word or a named condition | test 5 | mesh-sdk: dangerous calls asked; identity module: dangerous tools granted by name on an ask, break-glass and its telling | 6, 5, 4 | +| 8 | The bus checks signed logins on a second bus beside today's, the identity seat signs and revokes them, and the switch, run in the lab on the mesh's own modules, loses nothing | test 4 | identity module: signing keys, renewal, revocation read back and resent to new servers; the node-engine (`mesh-host`): node and module logins renewed; mesh-controller: the second bus as a leaf with the system account; mesh-lab: the bed test from the branch `research/053-signed-bus-logins` | 6 | +| 9 | Every identity is on the new bus, its data moved by copy, and today's bus is switched off | — | mesh-controller and the identity module: one identity at a time, then streams, buckets and the object store; mesh-catalog: the old bus's module retired | 8 | +| 10 | The operator follows and answers threads from the web page as from the terminal client, logged in as a person identity | — | mesh-catalog: the web page, a client of the thread seat over the bus's WebSocket listener | 9, 4 | + +The front ends' later parts, the inference seat and the other agent harnesses are tracked by issue 850; the +seat-sense "role" in older designs by issue 872.