Fixes issue 1926 (met twice): the mail signal reached the operator's phone every ~160 s with the same mails, because tell.go read messenger's sent_on answer as a string while messenger answers a list, so the mails were never marked told.
tell.go: readSentOn accepts a list, null, an empty list, an absent field or a plain string; an empty answer still leaves the mails untold (ADR 0461 §2: at the cap, nothing is lost). Once a signal is said, every untold mail that matters is marked told, the past-due and duplicate ones included.
One message id within an account counts once; so does one notice (same sender, mail day, due date).
Decision made here (allowed by 1926's AC2 and ADR 0461 §1, §3): a mail already past its due date is left out of the signal; it stays on the mail page.
Tests: tell_test.go (AC1-AC3), acceptance_integration_test.go (AC4, needs MESH_TEST_POSTGRES; compiled, not run locally). Unit suite and go vet -tags integration green. try-1792790848771020609 ended without running a test (the step's 30-min bound, tonight's build faults); no try waited for (operator 2026-10-24 00:24: build, publish, deliver until the new setup works).
Moves mesh-mail-reader. Hardening (today in UTC, mails first judged after their due date) is note 3 on 1926.
Reviewed-by: review-1926@shanks at 753e8fc202
Pushed-by: fix-1926@shanks
Fixes issue 1926 (met twice): the mail signal reached the operator's phone every ~160 s with the same mails, because tell.go read messenger's `sent_on` answer as a string while messenger answers a list, so the mails were never marked told.
- tell.go: `readSentOn` accepts a list, null, an empty list, an absent field or a plain string; an empty answer still leaves the mails untold (ADR 0461 §2: at the cap, nothing is lost). Once a signal is said, every untold mail that matters is marked told, the past-due and duplicate ones included.
- One message id within an account counts once; so does one notice (same sender, mail day, due date).
- Decision made here (allowed by 1926's AC2 and ADR 0461 §1, §3): a mail already past its due date is left out of the signal; it stays on the mail page.
Tests: tell_test.go (AC1-AC3), acceptance_integration_test.go (AC4, needs MESH_TEST_POSTGRES; compiled, not run locally). Unit suite and go vet -tags integration green. try-1792790848771020609 ended without running a test (the step's 30-min bound, tonight's build faults); no try waited for (operator 2026-10-24 00:24: build, publish, deliver until the new setup works).
Moves mesh-mail-reader. Hardening (today in UTC, mails first judged after their due date) is note 3 on 1926.
Reviewed-by: review-1926@shanks at 753e8fc202c32408257b80a21a7cd294ba14713c
Pushed-by: fix-1926@shanks
Deliverynovox/mesh-catalog@753e8fc202c3 — delivered since 2026-10-23T23:09:07Z
Delivery plan — builds mesh-mail-reader → novox; no bus step
tier 0: mesh-mail-reader
novox: receives mesh-mail-reader
Machines
mesh-build-go on every machine running it: sent
mesh-delivery-checker on every machine running it: sent
mesh-mail-reader on every machine running it: sent
Transitions
2026-10-23 22:27 (new) → proposed (announced): novox/mesh-catalog#469's head announced
2026-10-23 22:36 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
2026-10-23 22:36 held → delivering (release): the operator's hand merge at 00:36, which by the operator's word of 2026-10-24 00:24 releases it (build, publish, deliver until the new setup works); reviewed at its head
2026-10-23 23:09 delivering → delivered (done): its walk is done, carrying its own commit: every machine of its deploy plan passed, or was left as its policy says
The commit's note under refs/notes/mesh-plan keeps every transition: git log --notes=mesh-plan.
<!-- mesh-delivery:view -->
**Delivery** `novox/mesh-catalog@753e8fc202c3` — **delivered** since 2026-10-23T23:09:07Z
**Delivery plan** — builds mesh-mail-reader → novox; no bus step
- tier 0: mesh-mail-reader
- novox: receives mesh-mail-reader
**Machines**
- mesh-build-go on every machine running it: sent
- mesh-delivery-checker on every machine running it: sent
- mesh-mail-reader on every machine running it: sent
**Transitions**
- 2026-10-23 22:27 (new) → proposed (announced): novox/mesh-catalog#469's head announced
- 2026-10-23 22:36 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
- 2026-10-23 22:36 held → delivering (release): the operator's hand merge at 00:36, which by the operator's word of 2026-10-24 00:24 releases it (build, publish, deliver until the new setup works); reviewed at its head
- 2026-10-23 23:09 delivering → delivered (done): its walk is done, carrying its own commit: every machine of its deploy plan passed, or was left as its policy says
The commit's note under `refs/notes/mesh-plan` keeps every transition: `git log --notes=mesh-plan`.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Fixes issue 1926 (met twice): the mail signal reached the operator's phone every ~160 s with the same mails, because tell.go read messenger's
sent_onanswer as a string while messenger answers a list, so the mails were never marked told.readSentOnaccepts a list, null, an empty list, an absent field or a plain string; an empty answer still leaves the mails untold (ADR 0461 §2: at the cap, nothing is lost). Once a signal is said, every untold mail that matters is marked told, the past-due and duplicate ones included.Tests: tell_test.go (AC1-AC3), acceptance_integration_test.go (AC4, needs MESH_TEST_POSTGRES; compiled, not run locally). Unit suite and go vet -tags integration green. try-1792790848771020609 ended without running a test (the step's 30-min bound, tonight's build faults); no try waited for (operator 2026-10-24 00:24: build, publish, deliver until the new setup works).
Moves mesh-mail-reader. Hardening (today in UTC, mails first judged after their due date) is note 3 on 1926.
Reviewed-by: review-1926@shanks at
753e8fc202Pushed-by: fix-1926@shanks
Delivery
novox/mesh-catalog@753e8fc202c3— delivered since 2026-10-23T23:09:07ZDelivery plan — builds mesh-mail-reader → novox; no bus step
Machines
Transitions
The commit's note under
refs/notes/mesh-plankeeps every transition:git log --notes=mesh-plan.