From 66bb013b853d99c388c5cfcc1e1f928faa066d4a Mon Sep 17 00:00:00 2001 From: jochen Date: Tue, 20 Oct 2026 19:02:56 +0200 Subject: [PATCH] Write milestones 2 to 4's issues into design 59, as the operator confirmed them MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Playbook 04 step 6. Also names ADR 0378 §5 beside ADR 0440 §4 for the page's use of mail-reading, its writes with correct and undo, and issue 1419 in §8's last sentence, as the graduation's review noted. --- 03-DESIGN/01-to-be/59-the-mail-web-client.md | 36 ++++++++++++-------- 1 file changed, 22 insertions(+), 14 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 b0ead36d..d4d9da86 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 @@ -169,7 +169,8 @@ mail-store (mesh-mail) ── MAIL: mail..message.added ──▶ mesh- - **The page.** Above the classical list it shows the mail that matters at the top, the mail groups, and the scam warnings in a place of their own, each with why; the classical list (accounts, folders, search, one mail) stays and always opens. `mesh-mail-web` reads these through `mail-reading`'s verbs and still keeps no mail state - (ADR 0440 §4 as ADR 0459 §13 changes it). + (ADR 0378 §5 and ADR 0440 §4 as ADR 0459 §13 changes them); it writes the operator's corrections with + `correct` and `undo`. - **It fails loudly.** Its own health check is unhealthy when a judgement is refused, times out or answers out of shape, with the cause and since when; the controller raises its condition, the page shows the cause above the classical list instead of mail groups, and no mail signal is sent. On recovery the mail that arrived meanwhile is @@ -195,17 +196,16 @@ mail-store (mesh-mail) ── MAIL: mail..message.added ──▶ mesh- ## 8. The mail conversation (ADR 0462) -A mail conversation is a thread (ADR 0383), run by the thread handler (ADR 0384), with a mail context: the -framing that a mail is data, the tools `mail_search` and `mail_read` only under a caller granted reading only (a caller of the thread's own, -issue 1419), the -operator's real senders and folder names, and the reading lessons. The operator writes a mail question on the mail -page; each answer names the mails it found, and a question with no answer says so. `mesh-mail-web` creates and -follows the thread over the bus on its server side; the page loads one script from its own origin and talks only to -it (content security policy: script from that origin, `connect-src 'self'`), so the browser never reaches the bus. -The thread keeps the text of each mail it read for good, as every thread is kept (ADR 0383 §3), which the operator -accepted; mail reading keeps none. In the same milestone `mail_search` matches folder names without regard to case -and describes its three `-any` switches as true or false only. It is built after design 58's milestone 3 (threads, -issue 880). +A mail conversation is a thread (ADR 0383), run by the thread handler (ADR 0384), with a mail context: the framing +that a mail is data, the tools `mail_search` and `mail_read` only under a caller of the thread's own granted reading +only (issue 1419), the operator's real senders and folder names, and the reading lessons. The operator writes a mail +question on the mail page; each answer names the mails it found, and a question with no answer says so. +`mesh-mail-web` creates and follows the thread over the bus on its server side; the page loads one script from its +own origin and talks only to it (content security policy: script from that origin, `connect-src 'self'`), so the +browser never reaches the bus. The thread keeps the text of each mail it read for good, as every thread is kept (ADR +0383 §3), which the operator accepted; mail reading keeps none. In the same milestone `mail_search` matches folder +names without regard to case and describes its three `-any` switches as true or false only. It is built after design +58's milestone 3 (threads, issue 880) and once issue 1419's caller is decided. ## 9. What stays outside @@ -285,8 +285,16 @@ attachments), 1267 (writing a mail), 1268 (the integration test). After its deli the operator's Approve: `mesh-mail-web`'s `reach` on its machine (`internal`), its assignment there, its `operators`, and its caller in `mesh-mail`'s `grants` for every account. -Milestones 2 to 4 are written by research 066's graduation and wait for the operator's confirmation and their issues -(playbook 04, steps 5 and 6). Milestone 2 is one release of `mesh-catalog`: the grant split, the new seat, the new +**Milestones 2 to 4, confirmed by the operator on 2026-10-20.** Their issues, one repository part each, in their +order (each depends on the one before unless said): + +- Milestone 2: 1227 (`mesh-mail`'s grants split), 1426 (the seat `mail-reading` and the module `mesh-mail-reader`), + 1427 (batches, mail entries and mail groups), 1428 (reading lessons and the seat's verbs; with 1427 after 1426), + 1429 (mail signals; after 1427), 1430 (the mail page; after 1428 and 1429), 1431 (the integration test; after + 1430 and 1227), 1418 (`mesh-mail-notifier` unassigned; after 1431 and test 13 live). +- Milestone 3: 806 (Betterbird removed; after 1418). +- Milestone 4: 1419 (the thread's reading-only caller; a decision first), 1433 (`mail_search`'s folder case and + `-any` switches), 1432 (the mail conversation; after 1431, 1419 and design 58's milestone 3, issue 880). Milestone 2 is one release of `mesh-catalog`: the grant split, the new seat, the new module and the page change ship together, and `mesh-mail-reader` is granted reading only after that delivery, on the operator's Approve; `mesh-mail-notifier` is unassigned only after test 13 passes live. Milestone 3 is issue 806. ADR 0379 §2's bar for removing Betterbird is milestone 1's; keeping Betterbird until mail reading (milestone 2) works,