A program cannot import a main package; the page's code moves to modules/mesh-mail-web/internal/web, and cmd/mesh-mail-web is a two-line program calling it, so cmd/mail-page-dev (1859.5) serves the same handlers. Nothing the module does changes.
mesh-mail-reader — the default holder of mail-reading
Design 59, milestone 2 (mail reading); built from mesh-mail's own source, like mesh-mail-web and
mesh-mail-notifier (novox/hq ADR 0459). One instance, held once for the mesh, on the machine mesh-mail runs
on, under its own account (runs-as) — it hears mesh-mail's restricted stream MAIL, which the operator
account never does. It reads mail; it moves, flags, deletes and sends nothing (ADR 0459 §11).
What it does
- Claims
mail-reading(held once for the mesh), declared in mesh-mail's own manifest beside its three mail seats, serving twelve verbs (ADR 0459 §2, ADR 0517 §4). Each answers only a caller the trusted settingcallersnames (default["mesh-mail-web"]); any other caller is refused, naming why. - Hears mesh-mail's added events and judges a batch of up to 6 at a time (ADR 0516 §3) against a question
put to
claude_code_judge, keeping one entry per message — never its body — in its own database: one Gmail message in INBOX and All Mail is one entry, by its Message-ID, else its folder and UID (issue 1849). - Notes what each mail asks (ADR 0516, issue 1857): at most 3 tasks (a line and a due date), 3 promises (you promised, waiting on others, on its way; who and a date) and whether it is read later, each line the model's own words of at most 120 characters; a line sharing 8 words in a row with the mail fails the batch.
- Reads the last 14 days once more after delivery (ADR 0516 §5): the inbox mail of each granted account, in ordinary batches after any mail just heard; kept as done, and the journal says its start, end and count.
- Keeps the operator's handling and an action log (ADR 0517, issue 1858): an item (a task, a promise or the mail itself) handled, undone until the day ends, or reminded until the next day (Europe/Brussels); one line per act — what, mail id, item, mode, when, never mail text — kept 365 days, removed each night.
- Keeps a health of its own,
mail_reader_health: unhealthy once a judgement is refused, times out or answers out of shape; healthy once one succeeds, saying when, or that no batch has run yet (issue 1580). - Tells the operator at most once a batch when a mail matters, and corrects itself at once, keeping a reading lesson, when the operator says it judged wrong (issue 1428, 1429, 1522).
Its database
Its own postgres-database: mail entries with their tasks and promises, mail groups, reading lessons, the
mails heard but not yet read, its health state, whether the 14-day re-reading was done, each item's handling
and the action log. No column holds a mail body or text taken from one. The schema is numbered migrations
(migrations/) and the consolidated schema.sql; a unit test proves the two agree.
Tools
| tool | does |
|---|---|
mail-reading.entries |
every mail entry: headers, mail group, summary, mark and why, due date. Read-only |
mail-reading.groups |
every mail group a batch has made, largest first. Read-only |
mail-reading.correct |
correct one entry's mark, mail group, why or due date, say a task is not one, remove a promise, set or clear read later; kept at once as a reading lesson, with one corrected line |
mail-reading.lessons |
the reading lessons kept, at most 40. Read-only |
mail-reading.undo |
undo one reading lesson |
mail-reading.status |
healthy or not, when a batch last succeeded (or that none has run yet), lessons per 100 mails read each week. Read-only |
mail-reading.list |
the operator's list for a mode: today, this week, later, the promises by kind, good to know, read later, handled today, scam warnings, and when the operator last looked. Read-only |
mail-reading.handle |
mark an item handled (the mail itself handles all its items); one handled line |
mail-reading.unhandle |
undo a handling of today; one undone line |
mail-reading.remind |
hide an item until the next day, when it is under today; one reminded line |
mail-reading.record |
one line for an act that changes no entry: opened, mode, page opened |
mail-reading.actions |
the action log, newest first. Read-only |
mail_reader_health |
how mesh-mail-reader is: unhealthy once a judgement is refused, times out or answers out of shape, naming which and since when; healthy, saying when the last batch succeeded or that none has run yet. Read-only |
Where it runs
Its own account (runs-as), because it hears mesh-mail's restricted stream MAIL (novox/hq ADR 0376
§2). Held once for the mesh, on the machine mesh-mail runs on; it is granted reading only, after issue 1227's
split of mesh-mail's grants is delivered (ADR 0472: that split is won't-fix — mesh-mail's grants stays one
list per account, and mesh-mail-reader is put on it after delivery, never asking to send).