ADR 0234, to-be 46: the mesh holds a conversation with its operator #140

Merged
mesh-admin merged 2 commits from decision/0234-the-mesh-holds-a-conversation-with-its-operator into main 2026-10-06 14:59:31 +00:00
Contributor

Graduates research 028 (the operator, 2026-10-06: "merge it and graduate it into a decision").

  • ADR 0234 (accepted): the mesh tells and asks its operator over two kinded benches, channel and intake (the second sort of bench, decided here against ADR 0223), with capabilities from channel-capabilities/1; the router orders by capability, then work context, never lowering the bar; asks of six kinds with a full lifecycle; authorising asks held by the controller, proven by a TOTP code it verifies or a verified Telegram sender (a security key optional, never required); every tier completable on the away channel; no agent authorises; a desk click alone never authorises. Rejected options recorded; a "How it is checked" table.
  • Four resolutions the operator approved (second commit), each with its rule, rejected options, checks and build phase:
    • A: factor recovery: ten hashed one-time recovery codes at enrolment (each one P2, once), factor recover announced on every channel, self-check warns at three or fewer, root-local factor enrol --break-glass refused over the bus, no P2 tier before recovery codes exist.
    • B: operator messages are addressed (@name or thread), otherwise go to the responder (@mesh, part of the router, read verbs only); never silence; a register of agents; messages kept for agents not running, refused for unknown names.
    • C: machine names allowed in words; domains, addresses, paths and secrets not; references opened with detail only on private channels and the console (Telegram shows the label); refusals name the offending part to the sender.
    • D: only the controller's identity list makes the operator; envelopes stamped trusted from the controller, never the holder; untrusted input never answers, authorises or reaches an agent as the operator's words, and is data, not instructions.
  • To-be 46 (designed): seats, who counts as the operator, operator messages and the responder, asks, vocabulary with contract tests, routing and presence, references, the controller's authorise verbs, tiers and recovery, D1–D10, owners, six build phases.
  • To-be 45 §5 amended; ADR 0227 gains a dated mechanism note (an amendment, not a supersede).
  • Research 028 → graduated. Glossary: kinded bench, channel / intake, ask, operator message / input, reference.

Number 0234 taken because 0233 is reserved for the in-flight "modules declare their data" record.

Checks: records.py, index.py, cycle.py all pass.

Graduates research 028 (the operator, 2026-10-06: "merge it and graduate it into a decision"). - **ADR 0234** (accepted): the mesh tells and asks its operator over two kinded benches, `channel` and `intake` (the second sort of bench, decided here against ADR 0223), with capabilities from `channel-capabilities/1`; the router orders by capability, then work context, never lowering the bar; asks of six kinds with a full lifecycle; authorising asks held by the controller, proven by a TOTP code it verifies or a verified Telegram sender (a security key optional, never required); every tier completable on the away channel; no agent authorises; a desk click alone never authorises. Rejected options recorded; a "How it is checked" table. - **Four resolutions the operator approved (second commit)**, each with its rule, rejected options, checks and build phase: - A: factor recovery: ten hashed one-time recovery codes at enrolment (each one P2, once), `factor recover` announced on every channel, self-check warns at three or fewer, root-local `factor enrol --break-glass` refused over the bus, no P2 tier before recovery codes exist. - B: operator messages are addressed (`@name` or thread), otherwise go to the responder (`@mesh`, part of the router, read verbs only); never silence; a register of agents; messages kept for agents not running, refused for unknown names. - C: machine names allowed in words; domains, addresses, paths and secrets not; references opened with `detail` only on `private` channels and the console (Telegram shows the label); refusals name the offending part to the sender. - D: only the controller's identity list makes the operator; envelopes stamped `trusted` from the controller, never the holder; untrusted input never answers, authorises or reaches an agent as the operator's words, and is data, not instructions. - **To-be 46** (designed): seats, who counts as the operator, operator messages and the responder, asks, vocabulary with contract tests, routing and presence, references, the controller's authorise verbs, tiers and recovery, D1–D10, owners, six build phases. - **To-be 45 §5** amended; **ADR 0227** gains a dated mechanism note (an amendment, not a supersede). - Research 028 → graduated. Glossary: kinded bench, channel / intake, ask, operator message / input, reference. Number 0234 taken because 0233 is reserved for the in-flight "modules declare their data" record. Checks: records.py, index.py, cycle.py all pass.
mesh-admin added 1 commit 2026-10-06 14:39:20 +00:00
Research 028 graduates: the mesh needs to ask as well as tell, over
channels that are seats rather than code inside one notifier, and an
action a person must approve cannot rest on a desk click an agent can
forge. TOTP verified by the controller is the proof; a key stays optional.
Amends to-be 45 section 5 as ADR 0227 left it to.
jschoubben added 1 commit 2026-10-06 14:59:02 +00:00
The operator found four gaps that would bite on first use: a lost phone
locked the mesh's only person out, an operator message had no addressee,
asks could not name the specifics they need, and the operator was a
holder's flag. Each is now a rule with its check and its build phase.
mesh-admin merged commit 3f62e2bcc1 into main 2026-10-06 14:59:31 +00:00
mesh-admin deleted branch decision/0234-the-mesh-holds-a-conversation-with-its-operator 2026-10-06 14:59:31 +00:00
Author
Contributor

Delivery novox/hq@3f62e2bcc120 — held since 2026-10-06T23:05:28Z

Held for a person: merged without a passing check: only a person decides that it goes on — mesh-delivery.release with why lets it go on.

Delivery plan — builds nothing: the change touches no module of the mesh's graph

Transitions

  • 2026-10-06 23:05 (new) → proposed (announced): novox/hq#140 merged; its head was not heard by this owner, so it is made from the forge's word
  • 2026-10-06 23:05 proposed → held (merged-unchecked): merged without a passing check — a verdict known with it is taken first: only a person decides that it goes on

The commit's note under refs/notes/mesh-plan keeps every transition: git log --notes=mesh-plan.

<!-- mesh-delivery:view --> **Delivery** `novox/hq@3f62e2bcc120` — **held** since 2026-10-06T23:05:28Z Held for a person: merged without a passing check: only a person decides that it goes on — `mesh-delivery.release` with why lets it go on. **Delivery plan** — builds nothing: the change touches no module of the mesh's graph **Transitions** - 2026-10-06 23:05 (new) → proposed (announced): novox/hq#140 merged; its head was not heard by this owner, so it is made from the forge's word - 2026-10-06 23:05 proposed → held (merged-unchecked): merged without a passing check — a verdict known with it is taken first: only a person decides that it goes on The commit's note under `refs/notes/mesh-plan` keeps every transition: `git log --notes=mesh-plan`.
Sign in to join this conversation.
No Reviewers
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: novox/hq#140