• v0.28.2 e29cf704ac

    0.28.2 — the mail parsers leave the iCloud tenant
    All checks were successful
    CI / gate (push) Successful in 1m24s
    CI / image (push) Successful in 14s
    Stable

    joeyr released this 2026-08-21 18:01:59 -05:00 | 26 commits to main since this release

    The mail parsing layer is no longer part of the iCloud tenant. Seven modules that
    never knew which mailbox they were looking at moved to mcp_gateway/mail/, ahead of the
    Gmail tenant that will reuse every one of them. No behaviour changed anywhere.

    Changed

    • authresults, hygiene, unsubscribe, compose, models, messageid and
      headers moved from mcp_gateway/icloudmail/ to mcp_gateway/mail/
      — roughly 2,350
      lines. Each takes an already-parsed email.message.Message and returns a value; none
      opens a connection or names a provider, which is what made the move a rename rather than
      a redesign.

      client.py, smtp.py and tools.py stayed. Those are the tenant.

      Done before the Gmail client rather than after it. Letting gmail/ import from
      icloudmail/ in the meantime would have meant rewriting every one of these imports a
      second time, and leaving a package named for one provider as the home of shared code.

    Notes

    • The acceptance condition was that no test could need editing except its import
      lines
      , and it held: 1084 tests green, and every changed line under tests/ is an
      import statement. The seven moved bodies are byte-identical to what left icloudmail/.
      A test that had needed a real edit would have meant something moved that should not have.

    • Six of the twenty files rewritten are in probes/, which is gitignored, so the gate
      cannot see them and this diff does not show them. They were fixed in the same pass. Left
      alone they would have raised ImportError the next time CLAUDE.md's "re-run
      m2_verify.py whenever the write path is touched" rule was followed — months later, and
      reading as a broken probe rather than a stale import.

    Downloads