From eddd7ba684d9a8e6206c4efe3bac6078dd2ebaa0 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 22 Oct 2026 19:19:52 +0200 Subject: [PATCH] Answer the review: mockup data invented throughout, later milestones' scope marked proposed, design 59 says where it is replaced, playbook 10 aligned with 04 and 07 --- 00-META/glossary.md | 3 +- 00-META/process/10-visual-design.md | 20 +++--- 03-DESIGN/00-as-is/18-the-mail-modules.md | 8 +-- 03-DESIGN/01-to-be/59-the-mail-web-client.md | 8 ++- 03-DESIGN/01-to-be/63-mockup/mail-page.html | 10 +-- ...-mail-web-ui-with-mail-reading-and-owly.md | 72 +++++++++++-------- 6 files changed, 72 insertions(+), 49 deletions(-) diff --git a/00-META/glossary.md b/00-META/glossary.md index 937b3c77..62451d34 100644 --- a/00-META/glossary.md +++ b/00-META/glossary.md @@ -826,7 +826,8 @@ and no session (ADR 0278), in its plain sense. (ADR 0516 §1). - **promise** — what a mail says someone will do: *you promised*, *waiting on others* or *on its way*, with who and when (ADR 0516 §1). -- **read later** — the mark of a mail worth reading that asks nothing (ADR 0516 §1). +- **read later** — the flag of a mail worth reading that asks nothing, which a mail of any mark may carry (ADR + 0516 §1). Not a *mark*. - **handled** — what the operator marked done on the operator's list; it changes nothing in the mailbox (ADR 0517 §1). - **action log** — mail reading's record of every act of the operator on the mail page, never mail text, kept a diff --git a/00-META/process/10-visual-design.md b/00-META/process/10-visual-design.md index b7eea1d6..35113c86 100644 --- a/00-META/process/10-visual-design.md +++ b/00-META/process/10-visual-design.md @@ -20,7 +20,8 @@ model from the lead's brief. The operator picks; nobody else does. ## Steps -1. **Gather what the page must carry.** Read the as-is of what it replaces and the real shape of its data from the +1. **Gather what the page must carry.** A page whose direction needs research first starts at playbook + [01](01-research.md); this playbook then draws it. Read the as-is of what it replaces and the real shape of its data from the mesh (how many items, how long a line, what is missing in practice), the operator's complaint in their own words, and a short survey of how others solve it (a handful of products, one line each on what changes for the person). Write it into the work folder; nothing goes on the mesh. @@ -33,13 +34,14 @@ model from the lead's brief. The operator picks; nobody else does. two, or a change; the next round draws only that. Three rounds without a pick mean something the operator wants is missing: ask what, before drawing again. 4. **Make the pick the reference.** Copy it into the design's `NN-mockup/`, with every name, address, employer, - mail address and amount of the operator's own replaced by invented ones: hq is public. Say in the design that + mail address, domain, provider and amount of the operator's own replaced by invented ones: hq is public. Say in the design that the reference is a direction, and link it. 5. **Write what is new as decisions,** each with the operator's Approve where it changes what they see, then the design and its milestones. The design's acceptance tests end with the operator using the page live. -6. **Hold the build to it.** Playbook [07](07-feature-branches.md)'s review reads the built page against the - reference (a screenshot at each width beside the mockup), and the milestone is done only when the operator has - used the page. +6. **Hold the build to it.** The lead gives playbook [07](07-feature-branches.md)'s reviewer the reference with + the built page, at a phone's and a desktop's width, as part of what the review reads against the issue. The + operator using the page is the milestone's live proof, made before the next milestone starts (playbook + [04](04-build-handoff.md)). ## Bounds @@ -58,7 +60,7 @@ model from the lead's brief. The operator picks; nobody else does. ## How it is checked - A to-be design of a page the operator uses links its reference mockup in `NN-mockup/`, and that mockup holds - none of the operator's own names, addresses or amounts (read by the reviewer of the design's pull request). -- The milestone's review report shows the built page beside the reference at a phone's and a desktop's width. -- The design's last acceptance test is the operator using the page, and it is proven before the milestone's - issues are resolved. + none of the operator's own names, addresses, domains, providers or amounts (read by the reviewer of the design's pull request). +- The milestone's review read the built page beside the reference at a phone's and a desktop's width (its + report says so). +- The design's last acceptance test is the operator using the page, proven before the next milestone starts. diff --git a/03-DESIGN/00-as-is/18-the-mail-modules.md b/03-DESIGN/00-as-is/18-the-mail-modules.md index 31ef5edc..4bc1ccd2 100644 --- a/03-DESIGN/00-as-is/18-the-mail-modules.md +++ b/03-DESIGN/00-as-is/18-the-mail-modules.md @@ -67,8 +67,8 @@ mesh-mail (mail-store, once for the mesh — the control-node) module claiming it needs `node-notifier` held on the same machine (ADR 0378 §7). It is assigned today to two machines, the laptop and the workstation (live read of each machine's modules, 2026-10-20); the control-node and the home server hold no instance of it. -- **`mesh-mail-reader`** is a module of its own (`modules/mesh-mail-reader`), also built from `mesh-mail`'s - source. It claims `mail-reading`, a fourth seat `mesh-mail`'s own manifest declares beside its three mail +- **`mesh-mail-reader`** is a module of its own (`modules/mesh-mail-reader`), with its own Go module and + source (`go.mod`, `cmd/mesh-mail-reader`), importing nothing of `mesh-mail` (`callers.go`). It claims `mail-reading`, a fourth seat `mesh-mail`'s own manifest declares beside its three mail seats, held once for the mesh (ADR 0459 §1, §2). It is assigned to the same machine as `mesh-mail`, under its own account, `mesh-mail-reader` (`runs-as`; confirmed live, 2026-10-22). It is covered whole in §8. - None of the four seats is named `mesh-*`. A caller reaches them by seat (`mail-store.`, @@ -146,7 +146,7 @@ mesh-mail (mail-store, once for the mesh — the control-node) state (`/send-status`), a mail correction (`/mail-correct`) and a reading-lesson undo (`/mail-undo`) — plus the sign-in callback (`/signed-in`). Every changing form (the send, a correction, an undo) carries a token bound to the session (`server.go`, `csrf.go`). -- **The accounts page now opens on mail reading, above the classical list** (ADR 0459 §13, ADR 0515 §5, issue +- **The accounts page now opens on mail reading, above the classical list** (ADR 0459 §13, issue 1430, 1523; `accounts.go`). It asks `mail-reading.status` first; not answering at all makes the whole section say mail reading is unavailable and why, and nothing else here is asked — the classical list below still renders regardless. Otherwise it shows, in order: the mail that matters (`mail-reading.entries`, mark @@ -176,7 +176,7 @@ mesh-mail (mail-store, once for the mesh — the control-node) - **It keeps no database of its own.** Nothing on disk beyond its own settings; it reaches mail only through `mail-store`'s verbs, calling as `.mesh-mail-web`, and reads one thing directly besides — `mesh-mail`'s account bucket, for folders and counts, of an account its own grant already let it ask about - (ADR 0440 §4, §6). Its manifest now also invokes `mail-reading`'s six verbs (ADR 0459 §13, ADR 0515 §5): it + (ADR 0440 §4, §6). Its manifest now also invokes `mail-reading`'s six verbs (ADR 0459 §13): it reads `entries`, `groups`, `lessons` and `status`, and writes a correction or an undo with `correct` and `undo` — writes that land in `mail-reading`'s own database, never in anything `mesh-mail-web` keeps itself. 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 bf78a16e..a1832eac 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 @@ -20,6 +20,8 @@ decisions: - "ADR 0461" - "ADR 0462" - "ADR 0278" + - "ADR 0515" + - "ADR 0518" --- # 59 — The mail web client @@ -165,7 +167,7 @@ mail-store (mesh-mail) ── MAIL: mail..message.added ──▶ mesh- with no further Approve: it is the signed-in operator's own act. The page lists the reading lessons, undoes one (later mail reading only), and shows reading lessons per 100 read mails per week, which answers whether mail reading learns the operator's way. -- **The page.** Above the classical list it shows the mail that matters at the top, the mail groups, and the scam +- **The page** (replaced by design [63](63-the-mail-web-ui-with-mail-reading-and-owly.md)'s operator's list, ADR 0515 §5). 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 0378 §5 and ADR 0440 §4 as ADR 0459 §13 changes them); it writes the operator's corrections with @@ -195,6 +197,10 @@ mail-store (mesh-mail) ── MAIL: mail..message.added ──▶ mesh- ## 8. The mail conversation (ADR 0462) +**Replaced by design [63](63-the-mail-web-ui-with-mail-reading-and-owly.md):** Owly answers mail questions through +mail reading before threads exist (ADR 0518, changing ADR 0462 §6); the conversation below is what Owly moves onto +once threads exist. + 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 named in `grants` (ADR 0472 §4; issue 1419), the operator's real senders and folder names, and the reading lessons. The operator writes a mail diff --git a/03-DESIGN/01-to-be/63-mockup/mail-page.html b/03-DESIGN/01-to-be/63-mockup/mail-page.html index 99c1f206..7216ffaf 100644 --- a/03-DESIGN/01-to-be/63-mockup/mail-page.html +++ b/03-DESIGN/01-to-be/63-mockup/mail-page.html @@ -135,7 +135,7 @@ li.wo .wob{flex:1;min-width:0}li.wo .btn{flex:none} .shortcuts-box ul{list-style:none;padding:0;margin:10px 0 14px;font-size:14px;line-height:1.8} .shortcuts-box li b{display:inline-block;min-width:26px;background:var(--chip);border-radius:5px;padding:0 5px;text-align:center;margin-right:6px;font-family:monospace} @media (max-width:760px){.shortcuts-box{margin:0 16px}.topbar .btn{padding:5px 9px;font-size:12px}} -
All mail? shortcuts
Good morning, Alex. Three things need you today; the rest is below.

Told your phone once today, 07:15 — 1 mail matters (bpost).

Your list

New since you last looked (yesterday 22:14): 10

Today2

This week3

Later3

You promised1

  • you →
    Bring the updated extraction numbers to the demo
    tomorrow 10:00 · Sara Claes

Waiting on others2

  • Tim: the error analysis after the logs (asked yesterday)
    Tim Jacobs: Logs from yesterday's extraction run
  • Immoweb agent: the floor plan’s second page (asked yesterday)
    Immoweb: 3 new apartments match 'Brussel centrum, 2 bedrooms'

On its way3

  • → you
    Coolblue delivers your monitor
    tomorrow 13:00–17:00 · Coolblue
  • → you
    Hostco debits €48.10
    28 Oct · Hostco
  • → you
    Proximus debits €55.00
    5 Nov · Proximus

Good to know

Tim zipped yesterday’s extraction logs (open). Plex was down 6 minutes at 04:06 and recovered.
Read later · 6 newsletters

Not a task

⚠ A mail pretending to be KBC wants you to log in within 24 hours. It’s a scam; there’s nothing to do. see why
←ReplyFolderwork

Logs from yesterday's extraction run

Tim Jacobs <tim.jacobs@work.example>
work / INBOX · Thu 22 Oct 2026, 09:25
Work

Here are yesterday's logs, zipped. The errors are in errors.csv.

Correct mail reading ▾
←ReplyFoldergmail

3 new apartments match 'Brussel centrum, 2 bedrooms'

Immoweb <alerts@immoweb.example>
gmail / INBOX · Thu 22 Oct 2026, 09:10
★ Matters · due Sat 24 Oct · Housing
Matches the search you set up; a viewing is on Saturday.

Three new listings match your search.

Kerkstraat 14, 2nd floor — €925/month — open viewing Saturday 11:00.

Photos and the floor plan are attached.

Correct mail reading ▾
←ReplyFolderwork

Re: Atlas demo for the editors — Thursday

Sara Claes <sara.claes@work.example>
work / INBOX · Thu 22 Oct 2026, 08:55
★ Matters · due tomorrow · Work
A colleague asks for a reply before a meeting tomorrow at 10:00.

↳ the newest of 4 messages in this conversation · show all

Hi Alex,

Can you confirm the 10:00 slot tomorrow for the Atlas demo with the editors? I've attached the invite.

Could you also bring the latest draft-extraction numbers? I put last week's in the sheet; please update the totals.

Thanks! Sara

Correct mail reading ▾
←ReplyFoldergmail

Your weekly summary: 42 km

Strava <no-reply@strava.example>
gmail / INBOX · Thu 22 Oct 2026, 07:45
Newsletters

(a newsletter, shown as text)

Correct mail reading ▾
←ReplyFoldergmail

Registered mail arrives today, 08:00–14:00

bpost <noreply@bpost.example>
gmail / INBOX · Thu 22 Oct 2026, 07:12
★ Matters · due today · Post & deliveries
Genuine notice from bpost's own domain; no payment or login asked. Needs you today.

Beste klant,

Uw aangetekende zending wordt vandaag geleverd tussen 08:00 en 14:00 op Stationsstraat 1, 1000 Brussel.

Iemand moet aanwezig zijn om te tekenen, of u machtigt een volmachthouder via de app.

Met vriendelijke groeten, bpost

Correct mail reading ▾
←ReplyFoldergmail

Your order 48213977 is on its way

Coolblue <info@coolblue.example>
gmail / INBOX · Thu 22 Oct 2026, 06:50
Orders & invoices

Your USB-C monitor arrives tomorrow between 13:00 and 17:00.

Track it in the app.

Correct mail reading ▾
←ReplyFoldergmail

Uw rekening wordt geblokkeerd — bevestig binnen 24 uur

KBC Bank <security@kbc-verificatie.example>
gmail / Junk · Thu 22 Oct 2026, 06:03
⚠ Scam warning · Junk
Sent from kbc-verificatie.example, not KBC's own domain; threatens a block within 24 hours and asks you to log in through a link. The provider filed it as junk.
Links are not shown. Nothing in this mail is loaded.

Geachte klant,

Wegens verdachte activiteit wordt uw rekening binnen 24 uur geblokkeerd.

Bevestig uw gegevens via de onderstaande link om dit te voorkomen.

Correct mail reading ▾
←ReplyFoldermesh

[Up] plex.example.org is back after 6 min

Uptime Kuma <alerts@example.org>
mesh / INBOX · Thu 22 Oct 2026, 04:12
Site monitoring

plex.example.org was down from 04:06 to 04:12 (6 minutes).

Correct mail reading ▾
←ReplyFoldermesh

mesh-catalog #397 merged

Gitea <gitea@example.org>
mesh / INBOX · Wed 21 Oct 2026, 23:58
Software releases

home merged pull request #397 into main.

Correct mail reading ▾
←ReplyFoldermesh

Security: ca-certificates-mozilla, php, php-legacy

arch-announce <arch-announce@archlinux.example>
mesh / INBOX · Wed 21 Oct 2026, 22:40
★ Matters · Security advisories
Genuine Arch Linux advisory; your machines run Arch.

ca-certificates-mozilla >= 3.131.1-1 fixes a trust-store issue that allows a man-in-the-middle.

php >= 8.5.12 and php-legacy >= 8.3.36 fix remote code execution CVEs.

Update promptly with pacman -Syu.

Correct mail reading ▾
←ReplyFoldergmail

Bestelling bevestigd: USB-C dock

bol.example <klantenservice@bol.example>
gmail / INBOX · Wed 21 Oct 2026, 21:14
Orders & invoices

Bedankt voor je bestelling. We laten het weten zodra hij onderweg is.

Correct mail reading ▾
←ReplyFoldergmail

Foto's van zondag

Marie Janssens <marie.janssens@gmail.example>
gmail / INBOX · Wed 21 Oct 2026, 20:12
Family

↳ the newest of 2 messages in this conversation · show all

Hier zijn de foto's van zondag in het park!

Zeg maar welke je wil laten afdrukken.

Correct mail reading ▾
←ReplyFoldermesh

yt-dlp 2026.10.21 released

github-actions[bot] <notifications@github.example>
mesh / INBOX · Wed 21 Oct 2026, 19:05
★ Matters · Software releases
Genuine GitHub release notice with a security fix.

yt-dlp 2026.10.21 is out.

Executables from before this release bundle an old certifi; download the new release instead of using -U.

Correct mail reading ▾
←ReplyFoldergmail

New releases for you this Friday

Spotify <no-reply@spotify.example>
gmail / INBOX · Wed 21 Oct 2026, 17:00
Newsletters

(a newsletter, shown as text)

Correct mail reading ▾
←ReplyFolderwork

[Atlas-412] Draft extraction over-counts tables

Jira <jira@atlassian.example>
work / INBOX · Wed 21 Oct 2026, 16:20
Work

Sara Claes assigned Atlas-412 to you.

Draft extraction counts a table split over two pages as two tables.

Correct mail reading ▾
←ReplyFoldergmail

New 'Not found (404)' reason on example.org

Google Search Console <sc-noreply@google.example>
gmail / INBOX · Wed 21 Oct 2026, 14:31
★ Matters · Site monitoring
Genuine site-owner alert for a domain you run; no deadline.

Search Console has identified that some pages on example.org are affected by a new 'Not found (404)' reason.

Open the Pages report to review them.

Correct mail reading ▾
←ReplyFoldermesh

Invoice R0024581133 for October

Hostco <billing@hostco.example>
mesh / INBOX · Wed 21 Oct 2026, 11:22
Orders & invoices

Dear customer,

your invoice R0024581133 for October is attached. The amount will be debited on 28 October.

Correct mail reading ▾
←ReplyFolderwork

Page updated: Release checklist Q4

Confluence <confluence@atlassian.example>
work / INBOX · Wed 21 Oct 2026, 10:05
Work

Tim Jacobs updated Release checklist Q4.

Correct mail reading ▾
←ReplyFoldergmail

Dagelijkse nieuwsbrief

Tweakers <nieuwsbrief@tweakers.example>
gmail / INBOX · Wed 21 Oct 2026, 08:00
Newsletters

(a newsletter, shown as text)

Correct mail reading ▾
←ReplyFoldergmail

Terms of Service and Agentic AI guidelines updated

Google Cloud <CloudPlatform-noreply@google.example>
gmail / INBOX · Tue 20 Oct 2026, 18:02
★ Matters · Legal & terms
Legal notice affecting a Google Cloud account holder; no links or payment asked.

We updated the Google Cloud Terms of Service and introduced Agentic AI Responsible Use Guidelines, effective 12 October 2026.

Correct mail reading ▾
←ReplyFoldergmail

Herfstdeals tot 30%

IKEA Family <ikea@ikea.example>
gmail / INBOX · Tue 20 Oct 2026, 16:45
Newsletters

(a newsletter, shown as text)

Correct mail reading ▾
←ReplyFoldergmail

Je factuur van oktober staat klaar

Proximus <noreply@proximus.example>
gmail / INBOX · Tue 20 Oct 2026, 12:00
Orders & invoices

Je factuur van oktober staat klaar. Het bedrag wordt op 5 november gedomicilieerd.

Correct mail reading ▾
←ReplyFolderwork

Planned maintenance Thursday 23:00

Work IT <it-service@work.example>
work / INBOX · Tue 20 Oct 2026, 09:30
Work

The VPN gateway is down for maintenance on Thursday from 23:00 to 01:00.

Correct mail reading ▾
←ReplyFoldergmail

Verge Daily: the week in AI agents

The Verge <newsletter@theverge.example>
gmail / INBOX · Tue 20 Oct 2026, 07:30
Newsletters

(a newsletter, shown as text)

Correct mail reading ▾
←ReplyFoldergmail

Klaar voor de winter?

Decathlon <news@decathlon.example>
gmail / INBOX · Mon 19 Oct 2026, 15:00
Newsletters

(a newsletter, shown as text)

Correct mail reading ▾
← Back to the mailextraction-logs.zip4.6 MBDownload
▤ run-2026-10-21.log3.1 MB
▤ errors.csv220 KB
▤ tables-per-page.json1.1 MB
▤ README.txt2 KB

4 files · nothing is unpacked on the server

← Back to the mailfloor-plan.pdf340 KBDownload

Plattegrond

Immoweb

Appartement, 2 slaapkamers

Woonkamer 32 m²

Keuken 11 m²

Terras 9 m²

page 1 of 2

← Back to the maildemo-agenda.ics2 KBDownload
THU23OCT

Atlas demo for the editors

Thursday 23 October, 10:00–11:00

Room Antwerpen 2.14 · organiser Sara Claes · 6 invited

Accept Maybe Decline

← Back to the mailextraction-numbers.xlsx18 KBDownload
WeekDraftsTablesOver-counted
411 2043 310212
421 3773 802248
43———
Total2 5817 112460

Sheet 1 of 2 · read-only preview

← Back to the mailR0024581133.pdf52 KBDownload

Invoice R0024581133

Hostco

Dedicated server AX42 — €46.41

Storage Box BX11 — €3.81

IPv4 address — €1.70

Total incl. VAT — €48.10

page 1 of 2

← Back to the mailfactuur-oktober.pdf88 KBDownload

Factuur oktober

Proximus

Internet Flex — €55.00

Mobiel — €17.00

Korting bundel — −€6.00

Totaal — €55.00

page 1 of 2