• v0.29.3 6cd989a737

    0.29.3 — the boot log describes the right tenant
    All checks were successful
    CI / gate (push) Successful in 1m26s
    CI / image (push) Successful in 14s
    Stable

    joeyr released this 2026-08-21 22:55:28 -05:00 | 17 commits to main since this release

    The Gmail service's first real boot found two defects, both in what the operator reads.
    The tenant itself was fine — check=imap detail=10 folder(s) readable, the same ten labels
    G1's live pass saw. What was wrong was every line describing it.

    Fixed

    • Preflight demanded icloud_apple_id from the Gmail tenant, on every boot.
      _check_secrets was a two-way icloudmail-or-else, so gmail fell down the calendar
      side and asked for an Apple ID it has no use for and will never have. The process then
      started anyway with a failed check — the worst of both, because an operator who sees a red
      line at every boot stops reading them, and the next one is the real failure. The identity
      pair is now named per tenant, so a fifth tenant is a KeyError here rather than a wrong
      credential name in a log.

    • The boot summary described calendars on a mail tenant. summary() dispatched on
      tenant == "icloudmail", so Gmail got the calendar branch and announced caldav_url,
      apple_id_domain, calendars=(all), writable_calendars=(none, read-only),
      invites=off, calendar_admin=off, ics_feeds=(none) and max_events — on a process
      with no calendar at all — while printing not one mail field.

      Not cosmetic. That log is what answers what can this thing do to my mail?, and it
      answered a different question fluently. writable_calendars=(none, read-only) even reads
      as reassurance, which is worse than silence, because the reader takes it for the mail
      answer. Now dispatches on is_mail_tenant.

    Notes

    • Same root cause twice, and is_mail_tenant was written to prevent exactly it. Its
      docstring says the next mail provider should not have to find every
      tenant == "icloudmail" in the codebase — and then two of them went unswept in 0.29.1.
      A sweep found four in total; the other two already had explicit gmail branches.

    • 1106 tests could not see either. Both live in per-tenant dispatch that no Gmail test
      exercised: the boot summary had never been asserted for this tenant, and _check_secrets
      had never been called with a Gmail config. Three tests now pin them, and reverting either
      fix fails them.

    • The gate did not catch this and could not have. It took a container, a stack and a
      real Google account — which is the same argument the phase gates make, one layer further
      out. G1's live pass drove the tool layer; it never booted the process.

    Downloads