Skip to content

v0.0.9

Choose a tag to compare

@github-actions github-actions released this 25 Oct 02:00
4ea6edf

Key takeaways

  • [Feature] One Mailboxes card, opening by year: On the Backfill page, the new Mailboxes card replaces the mailbox list and the by-month map, so you can see each mailbox's status and last sync in one place and click a block to show that mailbox in the cards below.
  • [Performance] Faster message opening: On the Messages page, opening a message no longer re-reads the search catalog each time, so messages from months you've already viewed should open much faster.
  • [Improvement] Counts on category tabs: On the Messages page, each category tab (Primary through Forums) now shows its message count, and the pager shows the real total instead of "50+".
  • [Fix] Gmail, copied and searchable counts agree: On the Backfill page, the Gmail, copied and searchable counts should now match, because live sync recounts the month new mail lands in and copied is capped on the total.
  • [Performance] Bigger backfill runs on Workers Paid: This affects how fast a backfill copies and indexes mail, since each run now makes more Gmail and storage calls and saves larger batches, with a daily write guard in place of the old hard stop.

App

  • The Backfill page's Mailboxes card opens by Year, with Month and Quarter chips still available.
  • Each mailbox row shows a status badge and "Synced … ago", and a single percent: the map's Complete.
  • The old separate percent from the sync counter is gone.
  • The card also shows when you have only one mailbox.
  • On a phone, the address keeps the name column and status moves to the Sync card.
  • On the Messages page, the Category column is hidden on category tabs and still shown on All. Saved views keep the column.
  • The Searchable caption now says what it holds beyond copied mail, for example "17,139 copied + 11 not in Gmail's count". It reads "all copied mail" when the two are equal and "N copied, not yet searchable" when search is behind. The percent is gone.
  • Hovering anywhere on a stage head now shows its text, and Indexing has its own line ("Building search for N months" or "Copied mail is searchable"), where before it showed Copying's text.
  • A clicked tab now shows only its underline, with no focus ring. Keyboard focus still shows the ring.

Gmail

  • Gmail's count for a month is refreshed when new mail lands in it, so the October count no longer goes stale.
  • Messages Gmail files under the month after their date, such as late-night UTC mail at a month's end, are no longer dropped from the copied count.

Search

  • Category tab totals come from the labels rollup, and Primary is the indexed total minus the other four.
  • Indexing hands over after 20 chunks instead of 4, so a month is read back from storage fewer times.
  • A daily guard holds indexing until 00:05 UTC if it uses too many Durable Object writes in a day.

Sync

  • Live sync lists again the current or previous month where new mail landed (a few list calls, no storage writes) and stores Gmail's count.
  • Sync runs now make 400 calls, up from 45.
  • The census makes 400 calls, up from 40, and month listing makes 100, up from 30.
  • A lane run makes 200 outside requests, up from 40.

Storage

  • The first time a month is opened, MailCellar saves where each of its messages sits as one small raw file. Later opens read that file and then only the message's byte range.
  • If a message is missing from the file, for example mail copied later, the month is rebuilt once. Mail with no search-catalog entry still opens through the old single-file path.
  • The Messages page asks for the locations of up to 6 months on screen in advance, once per visit, so the first click is usually warm.
  • This uses no Durable Object reads or writes. The only cost is one raw-file write per month, the first time it's used.
  • The committer now saves 32 MB per commit, up from 8 MB, to keep pace with about 2,500 messages a minute.
  • Search-catalog rows are staged every 16 MB, so long runs never fill memory.

Infra

  • MailCellar is now set up for Workers Paid, with a longer CPU limit of 120 s in the Wrangler config. Going back to Free means changing one plan setting and removing that limit.
  • The $1.10 spend guard now also counts Paid overage for Workers requests and Durable Object and D1 rows, shown as overage in the spend overview. Today this adds $0, because the included amounts haven't been passed.
  • Gmail pacing and the maximum number of lanes are unchanged, so Gmail's per-user rate is the cap.
  • Updated the Lumen UI kit to 0.1.41 and removed the app's own tab focus-ring workaround, since the kit now handles it.
  • Extended the read-only audit to report each month's census, copied, counter, index and Gmail list counts. It reads only.

Pull requests (10)

  • #77 Backfill: one Mailboxes card, by year, pick a mailbox by name (@bchoor)
  • #94 Spend guard: count Paid overage (Workers requests, DO and D1 rows) (@bchoor)
  • #90 Messages: open a message without reading Basin each time (@bchoor)
  • #93 infra: Lumen kit 0.1.41; drop the local tab focus-ring override (@bchoor)
  • #92 Workers Paid: bigger runs, 32 MB commits, daily DO-write guard instead of the 97.5k stop (@bchoor)
  • #89 Counts agree: recount the month new mail lands in; cap copied on the total (@bchoor)
  • #88 fix: a clicked tab shows only its underline, no focus ring (@bchoor)
  • #87 Audit: per-month census, counter, copied, index rows and Gmail list (@bchoor)
  • #86 Category tabs: count on each tab, real total on the pager, no Category column (@bchoor)
  • #84 fix: Searchable says what it holds beyond copied; Indexing has its own hover text (@bchoor)

Full changelog: v0.0.8...v0.0.9