mesh-mail-reader: read messenger's sent_on as a list, so an unchanged set of mails is signalled once, not every 160 s (issue 1926) #469

Merged
jschoubben merged 1 commits from fix/1926-mail-signal-once into main 2026-10-23 22:36:11 +00:00
Member

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
mesh-tools added 1 commit 2026-10-23 22:27:49 +00:00
Author
Member

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.

<!-- 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`.
jschoubben merged commit 4b1bed4b9d into main 2026-10-23 22:36:11 +00:00
jschoubben deleted branch fix/1926-mail-signal-once 2026-10-23 22:36:12 +00:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: novox/mesh-catalog#469