• v0.37.0 5a01728332

    joeyr released this 2026-08-23 20:00:17 -05:00 | 96 commits to main since this release

    The mailto half of unsubscribe_message works on Gmail, and two defects
    behind it are fixed. Neither was found by looking for it: the first turned up
    while trimming a comment in the stack file, and the second while writing the
    test for the first. Live pass in docs/operations.md — 11 checks, self-addressed
    throughout, so nothing was announced to anybody.

    Fixed

    • gmail.unsubscribe_message reads MAIL_SEND_ENABLED instead of a
      hard-coded False.
      The constant was correct when written — the tenant had
      no submission path — and became wrong the moment G4 gave it one in 0.34.0.
      The docstring directly above it promised the refusal would lift "the day
      sending ships, with no change here" while the code guaranteed it could not,
      and three releases went out with the two disagreeing. A capability withheld
      by a constant nobody re-read is indistinguishable, from the outside, from one
      the operator chose to withhold
      — which is exactly what MAIL_SEND_ENABLED
      exists to make visible. It now reads the same config icloudmail reads, so
      the gate and the thing that can actually send agree by construction.

    • Signature coverage now asks about the header the OFFER uses, on BOTH
      tenants.
      _REQUIRED_SIGNED demanded List-Unsubscribe-Post of every
      unsubscribe facility, citing RFC 8058 §3.2 — which is about one-click.
      List-Unsubscribe-Post is the header that MAKES an offer one-click, so a
      mailto-only sender has none and cannot sign one, and the gate refused it for
      the absence.

      It failed in the worst available direction. A mailto sender that signs its
      mail was refused BECAUSE it signed — its verified signature could not cover a
      header it never sent — while a sender with no signature at all read as
      signature_coverage_unknown and went through as a warning. The gate punished
      senders in proportion to how correctly they authenticated. True on
      icloudmail since 0.28.0 and invisible to the suite, because the fixture
      exercising a permitted mailto carries no DKIM-Signature and never reached the
      check. One-click still requires both headers; the default argument is the
      strict one, and a test pins which way that default fails.

    Added

    • gmail._unsubscribe_by_mail, through _submit — this tenant's ordinary
      send path, so an unsubscribe gets an ordinary send's single verdict. The mail
      tenant routes its equivalent through _submit_and_save because there the Sent
      copy is the only durable record the request was made; Gmail files that copy
      itself, so saved_to_sent stays None and to_dict says whose copy it is.
      Reading that None as "the record is missing" is the false alarm 0.34.0
      introduced the sentinel to prevent, and the tool layer is tested for it.

    • unsubscribe_message's description is built from the send gate, like
      every other conditional sentence in that module. It told the model this server
      "has no sending capability at all" for three releases after sending shipped —
      and a description is what a model reasons from when deciding whether to
      OFFER, so a stale one is not cosmetic.

    Changed

    • The Gmail client's unsubscribe_message returns three values rather than two,
      matching icloudmail's, so the mailto outcome has somewhere to go.
    Downloads