From f6311a66bf66a199b370a6e30051be609ba96954 Mon Sep 17 00:00:00 2001 From: jochen Date: Mon, 19 Oct 2026 20:36:39 +0200 Subject: [PATCH] Answer design 59's review: mesh-mail's caller check, tests for the send state and the seat's verbs, no tracker state in the design; milestone 1 starts --- 03-DESIGN/01-to-be/59-the-mail-web-client.md | 21 ++++++++++++-------- 03-DESIGN/01-to-be/README.md | 2 +- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/03-DESIGN/01-to-be/59-the-mail-web-client.md b/03-DESIGN/01-to-be/59-the-mail-web-client.md index 004f6b90..e53fc903 100644 --- a/03-DESIGN/01-to-be/59-the-mail-web-client.md +++ b/03-DESIGN/01-to-be/59-the-mail-web-client.md @@ -1,6 +1,6 @@ --- layer: to-be -status: designed +status: in-progress code: [mesh-catalog] updated: 2026-10-19 decisions: @@ -46,8 +46,9 @@ browser (laptop, workstation) ── https://mail..internal ──▶ rout ``` - **`mesh-mail-web`** is built from `mesh-mail`'s source, as `mesh-mail-notifier` is, and is assigned to the machine - that runs `mesh-mail` (the control node today). It keeps no mail: no database, nothing on disk (ADR 0440 §1, §4). -- **`mesh-mail`** gains only its account bucket (ADR 0439 §2, issue 1255), released with `mesh-mail-web`. It + that runs `mesh-mail` (the control-node today). It keeps no mail: no database, nothing on disk (ADR 0440 §1, §4). +- **`mesh-mail`** gains its account bucket (ADR 0439 §2, issue 1255) and a caller check on `mail_send_status` + (ADR 0440 §7, issue 1261), both released with `mesh-mail-web`. It answers `mesh-mail-web` only for the accounts its trusted setting `grants` gives `mesh-mail-web` (ADR 0359 §4, ADR 0378 §13). `mail_send_status` becomes part of `mail-store`'s protocol (ADR 0440 §7). - **The browser never reaches the bus.** The bus has no WebSocket listener or sign-in for a person yet (research 036, @@ -124,23 +125,27 @@ Each is an issue with an owner (ADR 0440 §8): 5. After a mail is indexed, `mesh-mail`'s account bucket changes only the keys that describe it, within ADR 0439's bounds (issue 1255's own tests). 6. The declaration for its machine composes `mesh-mail-web`'s route with its internal name only (`mesh-controller.plan`). -7. The acceptance sentence at the top, live: in a browser on the laptop and on the workstation, for every account. +7. `mail_send_status` answers each state of ADR 0436 §12, and `unknown` for an id it does not know and for another + caller's send (a unit test of `mesh-mail`, issue 1261). +8. The seat's verbs: `open` answers the page's address, and with an account and a mail that mail's page; `status` + answers whether it serves and the accounts it is granted (a unit test of `mesh-mail-web`, issue 1262). +9. The acceptance sentence at the top, live: in a browser on the laptop and on the workstation, for every account. Tests 1 to 4 are one integration test that starts the module whole against the real bus (playbook 07 step 3 item 4); -test 5 is `mesh-mail`'s own; test 6 is read before the module is assigned; test 7 is proven live after the delivery. +tests 5 and 7 are `mesh-mail`'s own and test 8 `mesh-mail-web`'s, unit tests; test 6 is read before the module is +assigned; test 9 is proven live after the delivery. ## 7. Milestones | # | Outcome, in one sentence | Proves | Repositories and their parts | Depends on | |---|---|---|---|---| -| 1 | In a browser on the laptop and the workstation, the operator signs in and browses, searches and reads every account's mail with its attachments, and writes a mail that goes out on their Approve | tests 1 to 7 | mesh-catalog: `mesh-mail`'s account bucket (issue 1255, ADR 0439 §2); the module `mesh-mail-web` (manifest, sign-in, the pages, the send, the seat's verbs, the integration test) | — | +| 1 | In a browser on the laptop and the workstation, the operator signs in and browses, searches and reads every account's mail with its attachments, and writes a mail that goes out on their Approve | tests 1 to 9 | mesh-catalog: `mesh-mail`'s account bucket (issue 1255, ADR 0439 §2); the module `mesh-mail-web` (manifest, sign-in, the pages, the send, the seat's verbs, the integration test) | — | | 2 | Betterbird is gone from the laptop and the workstation, its profile and mail kept in the home | ADR 0379 §2 | mesh-catalog: Betterbird unassigned on the operator's Approve, then the `betterbird` module removed from the catalogue (issue 806) | 1 | **Confirmed by the operator on 2026-10-19.** Milestone 1's issues, one repository part each, in their order: 1255 (`mesh-mail`'s account bucket), 1261 (`mail_send_status` answers only its caller), 1262 (the module), 1263 (sign-in), 1264 (accounts, folders and mails), 1265 (search), 1266 (a mail and its attachments), 1267 (writing a -mail), 1268 (the integration test). Milestone 2 is issue 806. The status stays `designed` until milestone 1 starts: -one design is built at a time (playbook 07), and milestone 1 waits for the design whose release is in `fixing`. +mail), 1268 (the integration test). Milestone 2 is issue 806. After milestone 1's delivery and before its live proof, four values are set, each on the operator's Approve: `mesh-mail-web`'s `reach` on its machine (`internal`), then its assignment there, its `operators`, and its caller in diff --git a/03-DESIGN/01-to-be/README.md b/03-DESIGN/01-to-be/README.md index fc69f777..417f5bab 100644 --- a/03-DESIGN/01-to-be/README.md +++ b/03-DESIGN/01-to-be/README.md @@ -58,7 +58,7 @@ document is written and this one's status becomes `implemented`. | [`56-the-mail-client-set-up-by-the-mesh.md`](56-the-mail-client-set-up-by-the-mesh.md) | **Designed.** On every node with a display server, the `betterbird` module installs Betterbird from a pinned upstream release mirrored into the artifact store, ships the Owl add-on pinned and installed by Betterbird's enterprise policy, and declares the operator's mail accounts in a trusted setting without credentials; each account signs in once at a person's first use, and one the profile already holds is adopted by its address | ADR 0316, ADR 0317 | | [`57-building-config-and-provisioning.md`](57-building-config-and-provisioning.md) | **Designed.** The work of ADR 0348 and ADR 0349 as 37 packages, each an issue with its proof: foundations, template files, config in its own module, the provisioner and its client, secrets in the vault, bindings from providers, collections, a module's runtime readers, and removing the old forms; at most five worked at once | ADR 0348, ADR 0349 | | [`58-agent-work-as-the-meshs-own.md`](58-agent-work-as-the-meshs-own.md) | **Designed.** Agent work as the mesh's own: a thread seat keeps every thread whole on the bus; a thread handler runs the harness headless in a sandbox per session, the workspace on the thread's own forge branch; a workspace toolkit and named tools, no general command runner; one identity seat for persons, agents and modules, roles of grants, every tool an effect, signed bus logins, and the switch to them one identity at a time | ADR 0383, ADR 0384, ADR 0385, ADR 0386, ADR 0387, ADR 0388, ADR 0389, ADR 0390 | -| [`59-the-mail-web-client.md`](59-the-mail-web-client.md) | **Designed.** The operator's mail, every account, in a browser on the mesh's own machines: a module of its own, `mesh-mail-web`, holds `mail-webclient`, renders pages on the server and reads and sends only through `mail-store`'s verbs under a caller granted per account; its route reaches the private network only, the operator signs in with Keycloak, and a mail goes out only on the operator's Approve; then Betterbird is removed | ADR 0440, ADR 0378, ADR 0379 | +| [`59-the-mail-web-client.md`](59-the-mail-web-client.md) | **In progress.** The operator's mail, every account, in a browser on the mesh's own machines: a module of its own, `mesh-mail-web`, holds `mail-webclient`, renders pages on the server and reads and sends only through `mail-store`'s verbs under a caller granted per account; its route reaches the private network only, the operator signs in with Keycloak, and a mail goes out only on the operator's Approve; then Betterbird is removed | ADR 0440, ADR 0378, ADR 0379 | ## Not yet written