From 1ebbf9007a6bd0b2bf4433620099aa41432e1dfc Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 8 Oct 2026 16:37:50 +0200 Subject: [PATCH] Name the channel's failure and standing as intake events, and where the router reads each kind's capabilities --- ...any-channel-answers-it-and-the-asker-acts-on-a-warrant.md | 5 ++++- 03-DESIGN/01-to-be/46-the-conversation-with-the-operator.md | 3 ++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/02-DECISIONS/0259-an-ask-is-a-message-on-the-bus-any-channel-answers-it-and-the-asker-acts-on-a-warrant.md b/02-DECISIONS/0259-an-ask-is-a-message-on-the-bus-any-channel-answers-it-and-the-asker-acts-on-a-warrant.md index c3e63a12..4afaf764 100644 --- a/02-DECISIONS/0259-an-ask-is-a-message-on-the-bus-any-channel-answers-it-and-the-asker-acts-on-a-warrant.md +++ b/02-DECISIONS/0259-an-ask-is-a-message-on-the-bus-any-channel-answers-it-and-the-asker-acts-on-a-warrant.md @@ -166,7 +166,7 @@ state bucket, the EVENTS stream). `` is the asking module's name; ` | the operator's identities | the router's bucket `identities`, key `.` | its own state | the router | the router | | a warrant, or an ask's end without one | `mesh.seat.operator-channel.event.decided.`, message id `.` | EVENTS (7 days), deduplicated by the message id | the router only | the asker, its own name only, through its durable consumer | | show, edit or say on a channel | `mesh.seat.channel.accept..` | the seat's work queue `SEAT_CHANNEL`, one worker per kind | the router | the holder of that kind only | -| an answer chosen, a link asked | `mesh.seat.intake.event..` | EVENTS | the holder of that kind only | the router | +| an answer chosen, a link asked, a message that failed, the channel's standing | `mesh.seat.intake.event..` | EVENTS | the holder of that kind only | the router | | a code typed (a link code; later a TOTP code) | `mesh.seat.intake.proof.code.`, core request and reply | nothing: never on a stream | the holder of that kind only | the router, which answers | **The grants, composed by the controller as it composes every bus account:** @@ -184,6 +184,9 @@ state bucket, the EVENTS stream). `` is the asking module's name; ` asks with its own kind; the modules that watch the seat answer. - **The seat declares all of it**: `kinded`, the verbs named `by-caller`, its `proofs`, and the holder's `records` its users read under their own name. Only `channel` and `intake` may be kinded. +- **A claim of a kinded bench carries `kind` and `capabilities`** (`channel-capabilities/1`, ADR 0234 ยง2). + The controller names every kind, its holder and its capabilities in the membership of each module that + uses or watches the bench: that is where the router reads them, never from a channel. - **A record readable by its asker.** The router's `asks` bucket is read by an asker under its own prefix only: direct get on `$KV...>`. - **No `answer` tool.** A tool runner may call any tool, so an answer that arrived as a tool call could diff --git a/03-DESIGN/01-to-be/46-the-conversation-with-the-operator.md b/03-DESIGN/01-to-be/46-the-conversation-with-the-operator.md index eb479543..0f711aee 100644 --- a/03-DESIGN/01-to-be/46-the-conversation-with-the-operator.md +++ b/03-DESIGN/01-to-be/46-the-conversation-with-the-operator.md @@ -336,7 +336,8 @@ publisher, and the bus grants it to that publisher alone. | the operator's identities | the router's bucket `identities`, key `.` | its state | the router | the router | | a warrant, or an ask's end | `mesh.seat.operator-channel.event.decided.`, message id `.` | EVENTS, deduplicated | the router | the asker, its own name | | show, edit, say | `mesh.seat.channel.accept..` | the seat's work queue, one worker per kind | the router | that kind's holder | -| a choice, a link asked | `mesh.seat.intake.event..` | EVENTS | that kind's holder | the router | +| a choice, a link asked, a failed message, standing | `mesh.seat.intake.event..` | EVENTS | that kind's holder | the router | +| which kinds exist, and what each promises | the router's membership (`seat-traffic.kinds`) | ASSIGNMENTS | the controller, from the claims | the router | | a code | `mesh.seat.intake.proof.code.` | nothing: core request and reply | that kind's holder | the router answers | **An ask** carries an id the asker chose; the question in plain words; at most four options, each a label,