-
released this
2026-08-21 22:55:28 -05:00 | 17 commits to main since this releaseThe 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_idfrom the Gmail tenant, on every boot.
_check_secretswas a two-wayicloudmail-or-else, sogmailfell 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 aKeyErrorhere 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 announcedcaldav_url,
apple_id_domain,calendars=(all),writable_calendars=(none, read-only),
invites=off,calendar_admin=off,ics_feeds=(none)andmax_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 onis_mail_tenant.
Notes
-
Same root cause twice, and
is_mail_tenantwas 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 explicitgmailbranches. -
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
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-