2025-10-10 - 2026-10-10

Overview

218 Active Pull Requests
265 Active Issues
Excluding merges, 2 authors have pushed 11 commits to main and 304 commits to all branches. On main, 66 files have changed and there have been 3593 additions and 121 deletions.

2 Releases published by 1 user

Published v0.2.0 v0.2.0 2026-07-01 22:29:51 +00:00

Published v0.1.0 v0.1.0 2026-06-30 03:02:15 +00:00

216 Pull requests merged by 1 user

Merged #504 fix(security): derive key-invalidation and cache-guard decisions from seal state, not the encryptCache setting 2026-07-10 20:40:23 +00:00

Merged #478 test(migrator): resolve latest exported AccountDatabase schema dynamically 2026-07-10 05:18:47 +00:00

Merged #471 perf(icloud): respect iCloud Mail IMAP connection & message-size limits 2026-07-09 04:04:19 +00:00

Merged #470 perf(outlook): respect Microsoft Graph throttling with batching & chunked upload 2026-07-09 02:19:42 +00:00

Merged #474 ci(e2e): gate the emulator on window focus to fix the RootViewPicker flake (#468) 2026-07-09 02:19:38 +00:00

Merged #469 perf(gmail): respect Gmail IMAP connection & bandwidth limits in sync/backfill 2026-07-09 01:15:22 +00:00

Merged #467 test(accountsetup): de-flake URL-open link E2E tests via fake LocalUriHandler 2026-07-09 01:15:18 +00:00

Merged #463 perf(sync): pace backfill with an inter-slice cooldown and per-run cap 2026-07-08 23:35:35 +00:00

Merged #464 ci(e2e): restore wedge-capture diagnostics on the matrix E2E legs (#421) 2026-07-08 22:50:02 +00:00

Merged #460 ci(path-filter): skip E2E for scripts/docs/.claude-only PRs (#420) 2026-07-08 21:46:06 +00:00

Merged #459 perf(sync): pause background backfill while a message is opening 2026-07-08 21:21:04 +00:00

Merged #458 chore(test): migrate v1 createComposeRule/createAndroidComposeRule usages to v2 2026-07-08 20:35:00 +00:00

Merged #434 fix(notifications): verify notification-tap origin before opening a message (#307) 2026-07-08 19:45:50 +00:00

Merged #436 feat(sync): graceful degradation + exponential backoff on provider throttling 2026-07-08 19:45:47 +00:00

Merged #435 fix(mail): below-cut mail/richtext perf & correctness nits (#298) 2026-07-08 18:42:55 +00:00

Merged #454 ci(e2e): converge matrix emulator boot on e2e-preview manual boot 2026-07-08 18:41:18 +00:00

Merged #450 ci(gradle): pin Gradle distribution against published SHA-256 2026-07-08 18:39:23 +00:00

Merged #437 fix(ui): address below-cut UI/Compose review nits (#308) 2026-07-08 17:24:42 +00:00

Merged #446 ci(e2e): harden matrix emulator + system-image install against corrupt-zip (extend #389) 2026-07-08 17:24:38 +00:00

Merged #438 refactor(data): tighten data-core atomicity, chunking, and dead code (#313) 2026-07-08 16:42:28 +00:00

Merged #439 feat(onboarding): Battery -> Unrestricted help animation (#174) 2026-07-08 15:19:10 +00:00

Merged #433 ci(mergify): Phase 2 - enable batching (batch_size 5) (#410) 2026-07-08 13:01:17 +00:00

Merged #428 fix(mail): gracefully fall back when the IMAP server lacks UIDPLUS 2026-07-08 12:09:10 +00:00

Merged #429 perf(data): route MailBackfiller.persistBatch through batched updateHeaderContents 2026-07-08 06:04:46 +00:00

Merged #430 feat(auth): detect "IMAP disabled" AUTHENTICATE failures and prompt the user to enable IMAP 2026-07-08 05:43:40 +00:00

Merged #427 fix(push): persist credentials before IdleService watches a new account (#403) 2026-07-08 05:05:40 +00:00

Merged #426 feat(onboarding): pre-auth Outlook IMAP-enablement screen (help/settings links + Sign In) 2026-07-08 04:28:28 +00:00

Merged #425 fix(cache): close SQLCipher nativeOpen crash-loop gaps beyond resolveOpenMode (#359) 2026-07-08 03:06:47 +00:00

Merged #422 ci(mergify): fix auto-queue - migrate to merge_protections_settings/auto_merge_conditions (deprecation 2026-07-16) 2026-07-08 02:31:14 +00:00

Merged #424 feat(security): encrypt persisted reports at rest when cache encryption is on (#369) 2026-07-07 21:02:04 +00:00

Merged #406 ci: capture thread-dump + service state on an E2E wedge to prove the root cause (#404) 2026-07-07 16:55:11 +00:00

Merged #414 ci(mergify): upgrade configuration to current format 2026-07-07 12:41:56 +00:00

Merged #419 refactor(scripts): fold cold-fetch pause-hook A/B into device-testing harness (#405) 2026-07-07 10:29:48 +00:00

Merged #418 test(compose): re-ratchet JaCoCo line-coverage floor to 0.84 (#386) 2026-07-07 08:33:12 +00:00

Merged #395 feat(debug): dev-only pause/halt mail-fetch hook for test harnesses (#393) 2026-07-07 07:46:15 +00:00

Merged #417 test(compose): Robolectric JVM tests — app shell & lock gate host (#384) 2026-07-07 06:38:34 +00:00

Merged #416 test(compose): Robolectric JVM tests — mailbox screen + folder drawer (#383) 2026-07-07 06:11:43 +00:00

Merged #415 test(compose): Robolectric JVM tests — compose editor screen (#382) 2026-07-07 05:43:33 +00:00

Merged #401 test(compose): Robolectric JVM tests for settings screens (#380) 2026-07-07 05:19:42 +00:00

Merged #400 test(compose): Robolectric JVM tests for the reader screen (#381) 2026-07-07 04:51:45 +00:00

Merged #397 test(compose): Robolectric JVM tests — mail list screens drafts/outbox/reports (batch 4/9) 2026-07-07 04:15:26 +00:00

Merged #412 ci(mergify): implement Phase 1 — serial merge queue (require-up-to-date KEPT ON) 2026-07-07 03:50:20 +00:00

Merged #408 docs(ci): propose Mergify merge-queue integration spec (#407) 2026-07-07 03:08:34 +00:00

Merged #402 ci: skip the E2E matrix for test-only/docs PRs via a paths-filter + skip-tolerant gate (#399) 2026-07-07 02:54:26 +00:00

Merged #396 test(compose): Robolectric JVM tests for onboarding & lock screens (#377) 2026-07-07 02:25:50 +00:00

Merged #398 test(compose): Robolectric JVM tests for account setup screens (#378) 2026-07-07 01:54:48 +00:00

Merged #394 test(compose): Robolectric JVM tests for rich-text format controls (#376) 2026-07-07 01:09:41 +00:00

Merged #367 fix(security): fail closed on cache-encryption load failure + StrongBox-back keys (#359) 2026-07-07 00:41:35 +00:00

Merged #391 ci: retry + cache Android SDK/emulator setup to survive corrupt-zip sdkmanager failures (#389) 2026-07-07 00:22:02 +00:00

Merged #375 test(compose): Robolectric JVM Compose testing infra + PoC (#373) 2026-07-06 23:36:36 +00:00

Merged #388 ci(e2e): capture logcat + emulator/system diagnostics across the E2E matrix (#387) 2026-07-06 21:55:53 +00:00

Merged #374 test(settings): cancel viewModelScope before db.close in SignaturesScreenTest to fix a Room teardown race 2026-07-06 21:21:56 +00:00

Merged #372 ci: shard the API 37 preview E2E into 2 parallel shards + retry parity 2026-07-06 20:41:02 +00:00

Merged #370 feat(scripts): device-testing perf harness 2026-07-06 20:22:20 +00:00

Merged #371 chore(preflight): run jacocoTestCoverageVerification in the fast gate 2026-07-06 19:36:56 +00:00

Merged #368 perf(mail): enable IMAP connection reuse by default with a hardened cache 2026-07-06 03:18:11 +00:00

Merged #366 fix(push): stop IdleService dataSync FGS crash-loop on exhausted 24h cap (#354) 2026-07-06 00:36:28 +00:00

Merged #365 feat(reporting): PII-free latency breadcrumbs on the message-open path (#358) 2026-07-05 23:54:33 +00:00

Merged #353 ci: extract traffic-control into its own workflow file 2026-07-05 21:17:10 +00:00

Merged #285 perf(db): covering index for unified-inbox summary scans 2026-07-05 19:31:22 +00:00

Merged #352 ci: trigger CI with the PAT so dispatches don't need manual approval (#351) 2026-07-05 18:47:40 +00:00

Merged #317 fix(auth): drop redundant second Outlook token request on sign-in 2026-07-05 18:10:20 +00:00

Merged #350 ci: traffic-controller owns CI triggering (GITHUB_TOKEN updates, priority-ordered dispatch) 2026-07-05 17:51:49 +00:00

Merged #339 chore(docs): require app logging in the definition of done 2026-07-05 05:54:55 +00:00

Merged #344 docs: plain-English README for the CI traffic-controller 2026-07-05 05:37:08 +00:00

Merged #348 feat(logging): detekt guard banning android.util.Log outside AppLog (#331) 2026-07-05 05:05:06 +00:00

Merged #340 feat(logging): auth/lock -> AppLog + breadcrumbs (#326) 2026-07-05 04:16:23 +00:00

Merged #347 ci: run traffic-controller unit tests as a gate job 2026-07-05 03:59:01 +00:00

Merged #345 ci: extract traffic-controller into a testable Python module (#342) 2026-07-05 03:33:38 +00:00

Merged #338 feat(logging): connectivity/send → AppLog + breadcrumbs, scrub email PII (#328) 2026-07-05 03:29:04 +00:00

Merged #336 feat(logging): stragglers -> AppLog (#330) 2026-07-05 03:09:08 +00:00

Merged #341 feat(logging): sync-engine breadcrumbs via AppLog (#329) 2026-07-05 02:51:26 +00:00

Merged #337 feat(logging): DB/keystore -> AppLog + breadcrumbs (#327) 2026-07-05 02:33:41 +00:00

Merged #335 ci(e2e): boot diagnostics + verbose/debug logging on the API 37 preview job 2026-07-05 02:15:24 +00:00

Merged #333 feat(logging): AppLog seam — record scrubbed throwables + accountLogRef (#325) 2026-07-05 02:01:39 +00:00

Merged #332 test-infra: port local_instrumented.sh to Python + rewire preflight off GMD (#281) 2026-07-05 01:16:51 +00:00

Merged #323 feat(ci): no-regression JVM coverage gate scoped to the testable surface 2026-07-04 16:45:48 +00:00

Merged #316 fix(reporting): scrub PII from crash stack traces + move ReportStore scan off the main thread 2026-07-04 09:00:17 +00:00

Merged #321 fix(ui): reader Reply quotes original + guard one-shot actions against double-tap 2026-07-04 08:43:14 +00:00

Merged #320 perf/fix(data): batch sync updates, paging tiebreaker, migration-registration test 2026-07-04 08:20:59 +00:00

Merged #315 fix(data): account-lifecycle data integrity (non-destructive upsert, id normalization, deleteAccount cleanup) 2026-07-04 08:00:45 +00:00

Merged #318 fix(mail): targeted + batch expunge (stop deleting unrelated \Deleted mail) 2026-07-04 07:44:21 +00:00

Merged #314 fix(push): handle Service.onTimeout to survive the dataSync FGS runtime cap 2026-07-04 07:26:16 +00:00

Merged #293 test(coverage): high-value branch-coverage additions 2026-07-04 06:56:15 +00:00

Merged #291 test(coverage): close clean JVM-testable coverage gaps 2026-07-04 06:21:57 +00:00

Merged #287 test-infra: make local_instrumented.sh CWD-independent 2026-07-04 05:58:58 +00:00

Merged #286 chore(ui): migrate LocalClipboardManager to LocalClipboard 2026-07-04 05:37:57 +00:00

Merged #283 test(reporting): ReportUpload testability seams + push IdleService E2E 2026-07-04 05:16:33 +00:00

Merged #282 test(db): instrumented cold-open of a pre-encrypted cache 2026-07-04 04:47:44 +00:00

Merged #280 test-infra: reliable local instrumented-test helper (connectedDebugAndroidTest + emulator hygiene) 2026-07-04 04:29:07 +00:00

Merged #279 test(coverage): lane 5 follow-up — UI tests for remaining screens 2026-07-04 04:10:04 +00:00

Merged #278 test(db): pin native-lib-before-keyed-open at the DatabaseModule factory site 2026-07-04 03:52:46 +00:00

Merged #273 fix(mailbox): keep the inbox pager warm on reader return so it doesn't flash empty 2026-07-04 03:36:51 +00:00

Merged #277 test(onboarding): assert the Outlook onboarding button launches the browser 2026-07-04 02:48:36 +00:00

Merged #274 test(coverage): lane 5 — Compose screens E2E coverage 2026-07-04 02:04:40 +00:00

Merged #240 feat(settings): reorder accounts by drag in settings 2026-07-04 01:48:45 +00:00

Merged #272 test(sync): instrumented cache-lock deferral for PruneWorker/BackfillWorker 2026-07-04 01:30:29 +00:00

Merged #245 feat(reporting): add PII-free account summary to debug reports 2026-07-04 01:00:57 +00:00

Merged #270 test(coverage): lane 3 — persistence, DAOs & migrations to >=95% 2026-07-04 00:47:09 +00:00

Merged #234 feat(search): Unicode-aware case-insensitive search via casefold columns 2026-07-03 23:29:04 +00:00

Merged #242 feat(reporting): purge crash/problem reports older than a month while charging 2026-07-03 22:38:27 +00:00

Merged #266 ci(preflight): add API 35 and API 37 emulator E2E to preflight 2026-07-03 22:24:27 +00:00

Merged #268 ci(runners): P0 & broken-target preemption; P1-P9 yield without bumping in-progress 2026-07-03 22:10:43 +00:00

Merged #267 build(gmd): cap managed-device emulators to 1 concurrent (serial) to avoid local VT-x contention 2026-07-03 21:48:57 +00:00

Merged #265 ci(runners): priority-based runner orchestration via P0–P9 labels 2026-07-03 21:16:34 +00:00

Merged #253 fix(sync): bound the foreground fetch window by the age cutoff in age retention 2026-07-03 21:08:42 +00:00

Merged #264 ci(autoupdate): drop synchronize trigger, keep draft PRs updated 2026-07-03 20:51:30 +00:00

Merged #263 fix(reporting): auto-prompt to submit a crash only on first re-open, for a legitimate <24h crash 2026-07-03 20:47:05 +00:00

Merged #261 test(coverage): lane 2 — sync, workers, transport & auth to >=95% 2026-07-03 20:17:01 +00:00

Merged #260 ci(autoupdate): also trigger on pull_request so newly-opened PRs update immediately 2026-07-03 19:52:24 +00:00

Merged #256 test(coverage): lane 4 — ViewModels & non-UI modules to >=95% 2026-07-03 19:47:40 +00:00

Merged #254 test(coverage): lane 1 — repository, mappers & domain logic to >=95% 2026-07-03 19:09:34 +00:00

Merged #252 docs(claude): require unit + latest-API E2E in the definition of done 2026-07-03 18:14:57 +00:00

Merged #241 build: wire up JaCoCo code-coverage reporting 2026-07-03 17:55:16 +00:00

Merged #244 ci(autoupdate): keep all open PRs up to date (drop the auto_merge filter) 2026-07-03 17:42:36 +00:00

Merged #238 chore(ui): migrate hiltViewModel to its new androidx.hilt.lifecycle.viewmodel.compose package 2026-07-03 17:09:43 +00:00

Merged #231 test(sync): cover the cache-lock gate on SyncWorker/SendWorker + the provisioner await 2026-07-03 16:41:20 +00:00

Merged #230 build(release): build the release APK for ARM only (arm64-v8a + armeabi-v7a) 2026-07-03 16:27:36 +00:00

Merged #229 fix(sync): gate PruneWorker & BackfillWorker on the encrypted-cache lock 2026-07-03 16:14:49 +00:00

Merged #223 perf(mailbox): page the per-account folder view and search 2026-07-03 16:00:45 +00:00

Merged #222 ci(e2e): retry the API-29 emulator boot to absorb the android-emulator-runner keyevent race 2026-07-03 15:35:58 +00:00

Merged #216 perf(mailbox): bound paging window (maxSize) and memoize per-row timestamp 2026-07-03 15:11:52 +00:00

Merged #209 chore(preflight): compile androidTest source set in the fast gate 2026-07-03 14:54:16 +00:00

Merged #208 fix(cache): load SQLCipher native lib before every keyed open 2026-07-03 14:38:36 +00:00

Merged #207 chore(security): validate Content-ID before MIME/Graph use 2026-07-03 13:57:54 +00:00

Merged #206 chore(security): whitelist font-family on HTML emit 2026-07-03 12:22:53 +00:00

Merged #203 fix(compose): release persistable URI permissions for attachments/inline images 2026-07-03 11:48:10 +00:00

Merged #201 feat(compose): inline images 2026-07-03 06:47:00 +00:00

Merged #199 feat(compose): debounced periodic draft autosave 2026-07-03 05:58:35 +00:00

Merged #200 feat(compose): font family picker with bundled open-source fonts 2026-07-03 05:44:50 +00:00

Merged #198 feat(compose): paragraph alignment 2026-07-03 05:08:41 +00:00

Merged #197 feat(compose): remember last-used font and size 2026-07-03 04:55:24 +00:00

Merged #194 feat(accountsetup): warn against using account password for app password 2026-07-03 04:40:50 +00:00

Merged #195 feat(compose): font size control 2026-07-03 04:27:55 +00:00

Merged #196 feat(onboarding): require GPL-3.0 license agreement as the first screen 2026-07-03 04:08:47 +00:00

Merged #190 feat(accountsetup): add AOL provider with app-password help and IMAP/SMTP presets 2026-07-03 02:37:39 +00:00

Merged #189 feat(compose): add font color and text highlight to the formatting toolbar 2026-07-03 02:26:03 +00:00

Merged #191 test(sync): interleaving tests for the ungated sync↔backfill and sync↔prune pairs 2026-07-03 02:14:46 +00:00

Merged #188 perf(reader): render message body once, move openMessage IO off-main, drop wasted work 2026-07-03 02:02:42 +00:00

Merged #185 feat(accountsetup): add Yahoo app-password/2FA help in onboarding 2026-07-03 01:43:02 +00:00

Merged #184 feat(compose): add strikethrough to the formatting toolbar 2026-07-03 01:32:21 +00:00

Merged #170 fix(reader): propagate SEEN flag off the message-open critical path 2026-07-03 01:20:36 +00:00

Merged #178 feat(settings): reorder the Advanced settings section 2026-07-03 01:07:42 +00:00

Merged #173 feat(onboarding): deep-link battery step nearer the per-app background-activity screen (best-effort) 2026-07-03 00:55:54 +00:00

Merged #175 feat(settings): let the user set a default mail account 2026-07-03 00:44:01 +00:00

Merged #181 fix(notifications): reliably open the tapped message from a new-mail notification 2026-07-03 00:32:42 +00:00

Merged #183 feat(reporting): require a reply-to email and a 200-char minimum on problem reports 2026-07-03 00:20:15 +00:00

Merged #180 feat(accountsetup): add iCloud app-password/2FA help in onboarding 2026-07-03 00:08:34 +00:00

Merged #182 ci: run autoupdate in the CI_CD environment so it can read AUTOUPDATE_TOKEN 2026-07-02 23:45:40 +00:00

Merged #171 feat(reporting): show a clear confirmation dialog after submitting a problem report 2026-07-02 23:36:36 +00:00

Merged #168 fix(onboarding): request notification permission after welcome screen renders 2026-07-02 23:23:31 +00:00

Merged #176 test(compose): add RichTextEditor unit + ComposeScreen UI coverage 2026-07-02 23:09:40 +00:00

Merged #179 docs(compose): correct RichTextEditor toolbar accessibility KDoc 2026-07-02 22:52:48 +00:00

Merged #166 fix(accountsetup): show 2-Step Verification link before app-password link for Gmail 2026-07-02 22:42:37 +00:00

Merged #167 fix(mailbox): show spinner during initial folder fetch instead of empty state 2026-07-02 22:25:22 +00:00

Merged #169 feat(settings): reorder top-level settings sections and add appearance subtext 2026-07-02 22:08:30 +00:00

Merged #165 fix(mailbox): anchor account-switcher dropdown to its trigger 2026-07-02 21:50:01 +00:00

Merged #131 spike(imap): prototype flag-gated connection reuse for folder-open 2026-07-02 20:07:06 +00:00

Merged #146 ci: auto-update armed PRs; drop dead merge_group trigger 2026-07-02 17:48:31 +00:00

Merged #145 refactor(security): de-duplicate AES-GCM Keystore plumbing and unify the authenticator policy 2026-07-02 17:33:28 +00:00

Merged #144 test(security): cover the app-lock security core (seal exchange, unlock classification, policy table) 2026-07-02 16:55:51 +00:00

Merged #140 fix(reader): render inline cid: images in HTML emails 2026-07-02 16:36:44 +00:00

Merged #137 fix(di): defer database provisioning off the Hilt inject path 2026-07-02 16:23:15 +00:00

Merged #138 fix(security): harden app-lock recovery restart (self-restart race + lost syncNow enqueue) 2026-07-02 16:10:29 +00:00

Merged #135 refactor(security): derive backup exclusion set from DatabaseFiles 2026-07-02 15:58:06 +00:00

Merged #132 feat(contacts): move contacts permission to onboarding + settings 2026-07-02 15:40:26 +00:00

Merged #139 ci: trigger on merge_group for GitHub merge queue 2026-07-02 15:21:53 +00:00

Merged #136 feat(reader): collapse extra attachments into an accordion 2026-07-02 15:08:35 +00:00

Merged #130 perf(mailbox): page the unified "All inboxes" list (#124) 2026-07-02 14:45:51 +00:00

Merged #118 fix(security): keep accounts/credentials out of the auth-bound cache DB (#111) 2026-07-02 14:33:02 +00:00

Merged #126 test(imap): investigate folder-open round-trip latency (#125) 2026-07-02 13:35:41 +00:00

Merged #122 feat(folders): persist the server-reported IMAP hierarchy delimiter 2026-07-02 13:01:48 +00:00

Merged #123 perf(mailbox): scope the message-list query to the viewed folder in SQL 2026-07-02 12:46:19 +00:00

Merged #121 refactor(security): app-lock UI plumbing cleanup (snackbar, LifecycleEventEffect, LocalActivity, dead availability()) 2026-07-02 09:49:28 +00:00

Merged #120 refactor(folders): consolidate, externalize, and memoize folder-label resolution 2026-07-02 09:14:32 +00:00

Merged #119 fix(security): app-lock lifecycle consistency (grace across Back, passphrase eviction limits) 2026-07-02 08:50:15 +00:00

Merged #117 refactor(folders): derive roleOf and isServerSpecial from one attribute table 2026-07-02 08:39:35 +00:00

Merged #115 feat(onboarding): link Google 2FA help from Gmail app-password step 2026-07-02 08:29:03 +00:00

Merged #114 fix(sync): re-enqueue periodic work with UPDATE so upgrades re-apply the schedule 2026-07-02 08:17:13 +00:00

Merged #112 fix(sync): make backfill age floor robust to out-of-order dates and guard lowestSyncedUid 2026-07-02 08:05:39 +00:00

Merged #116 feat(drawer): unread-count badges per folder and bold accounts with unread mail 2026-07-02 07:49:42 +00:00

Merged #113 test(folders): cover attributes-to-specialUse wiring; fix FolderLabelsTest fidelity claim 2026-07-02 07:36:33 +00:00

Merged #45 [needs careful review] feat(security): screen-lock app gate + auth-bound cache decrypt (#22) 2026-07-02 05:19:35 +00:00

Merged #108 fix(folders): apply label disambiguation to picker and app bar; fix self-referential and transient labels 2026-07-02 05:04:12 +00:00

Merged #109 feat(sync): gate full-content fetch on Wi-Fi/battery; IDLE polls at low battery 2026-07-02 04:49:07 +00:00

Merged #106 fix(mailbox): derive plain-text preview snippets from HTML bodies 2026-07-02 04:38:48 +00:00

Merged #107 test(db): add Room migration tests with MigrationTestHelper 2026-07-02 04:28:59 +00:00

Merged #105 ci(release): add tag-triggered signed-release and store-publish workflow 2026-07-02 04:15:52 +00:00

Merged #46 [needs careful review] feat(sync): default fetch-all history + device-only retention (#12, #13) 2026-07-02 04:03:50 +00:00

Merged #97 docs(play): add privacy policy, data-safety mapping, and permissions justification 2026-07-02 03:52:21 +00:00

Merged #110 feat(message): move message actions from dropdown to top-bar icons 2026-07-02 03:39:22 +00:00

Merged #92 fix(mail): prefer special-use folder when resolving move-by-role destination 2026-07-02 03:20:47 +00:00

Merged #91 chore(fdroid): add F-Droid metadata, license audit, and anti-feature docs 2026-07-02 03:06:39 +00:00

Merged #80 feat(compose): prompt before sending when a mentioned attachment is missing 2026-07-01 23:20:57 +00:00

Merged #82 feat(compose): collapse Cc/Bcc into expandable links under the To field 2026-07-01 22:29:52 +00:00

Merged #81 feat(richtext): parameterized styles, alignment/image/base-style channels, HTML round-trip 2026-07-01 22:15:58 +00:00

Merged #57 fix(notifications): open the tapped message from a new-mail notification 2026-07-01 21:13:47 +00:00

Merged #55 chore(preflight): add ktlintCheck + detekt to the fast gate 2026-07-01 20:38:18 +00:00

Merged #54 fix(mailbox): de-duplicate folder names in the drawer 2026-07-01 20:24:57 +00:00

Merged #52 fix(mailbox): project message list to avoid CursorWindow overflow 2026-07-01 18:54:36 +00:00

Merged #50 feat(onboarding): opt-in to unrestricted battery/background usage 2026-07-01 17:42:52 +00:00

Merged #48 docs: refresh README for onboarding/app-password/rich-compose/opt-in features 2026-07-01 16:16:51 +00:00

Merged #47 feat(compose): rich HTML editor, multipart send, and signatures 2026-07-01 16:06:22 +00:00

Merged #43 feat(mailto): handle mailto: links and email share intents 2026-07-01 15:41:13 +00:00

Merged #42 feat(reporting): opt-in debug reporting client (capture + review/submit) 2026-07-01 15:28:45 +00:00

Merged #44 feat(onboarding): first-run flow, vendor picker, and app-password setup 2026-07-01 15:10:58 +00:00

Merged #41 feat(backup): opt-in Android Backup for settings only 2026-07-01 14:59:40 +00:00

Merged #40 refactor(auth): remove dead Gmail OAuth code path 2026-07-01 14:41:42 +00:00

Merged #8 chore: Kotlin linting (ktlint + detekt), CLAUDE.md tooling, and CI enforcement 2026-07-01 03:01:37 +00:00

Merged #7 feat: per-account settings for signatures and notifications 2026-07-01 01:28:54 +00:00

Merged #6 Fix dark-mode reader readability + make API 37 E2E required 2026-06-30 23:35:08 +00:00

Merged #5 feat: long-press multi-select, aggressive prefetch, and download indicators 2026-06-30 22:29:54 +00:00

Merged #4 ci: fix hung API 37 preview emulator job 2026-06-30 18:17:18 +00:00

Merged #3 Add IMAP folder navigation drawer + per-API E2E CI matrix 2026-06-30 17:36:30 +00:00

Merged #2 Fix Outlook sign-in crash and complete the OAuth login flow 2026-06-30 04:26:09 +00:00

Merged #1 Fix/code review findings 2026-06-30 03:02:15 +00:00

2 Pull requests proposed by 1 user

225 Issues closed from 1 user

Closed #479 fix(security): key-invalidation policy keys off encryptCache setting, not seal state — can permanently brick the encrypted cache 2026-07-10 20:40:24 +00:00

Closed #477 test(migrator): validate migrator DDL against the latest exported AccountDatabase schema, not a hardcoded version 2026-07-10 05:18:48 +00:00

Closed #363 perf(icloud): respect iCloud Mail IMAP connection & message-size limits 2026-07-09 04:04:20 +00:00

Closed #364 perf(outlook): respect Microsoft Graph throttling with batching & chunked upload 2026-07-09 02:19:43 +00:00

Closed #468 ci(e2e): fix intermittent emulator app-window-focus loss flaking Espresso RootViewPicker tests 2026-07-09 02:19:39 +00:00

Closed #361 perf(gmail): respect Gmail IMAP connection & bandwidth limits in sync/backfill 2026-07-09 01:15:23 +00:00

Closed #356 perf(sync): stop backfill running flat-out — inter-slice cooldown/backoff so it doesn't saturate the account 2026-07-08 23:35:36 +00:00

Closed #373 test(compose): enable Compose UI unit testing via Robolectric (shrink JaCoCo exclusions, then re-ratchet the floor) 2026-07-08 23:13:32 +00:00

Closed #421 ci(e2e): restore matrix-leg wedge-capture without hanging reactivecircus (watchdog or manual-boot) 2026-07-08 22:50:03 +00:00

Closed #420 ci(path-filter): scripts/-only changes still trigger the full E2E matrix (e.g. #419) 2026-07-08 21:46:07 +00:00

Closed #355 perf(sync): pause background backfill while a message is opening (prioritize interactive IMAP fetches) 2026-07-08 21:21:05 +00:00

Closed #385 chore(test): migrate v1 createComposeRule/createAndroidComposeRule usages to v2 2026-07-08 20:35:01 +00:00

Closed #432 Manual-boot convergence 2026-07-08 19:46:26 +00:00

Closed #307 review(domain/platform): below-cut nits 2026-07-08 19:45:51 +00:00

Closed #360 feat(sync): graceful degradation + exponential backoff on provider throttling (429 / Too Many Requests / auth lockout) 2026-07-08 19:45:48 +00:00

Closed #298 review(mail/richtext): below-cut perf & correctness nits 2026-07-08 18:42:56 +00:00

Closed #448 ci(e2e): harden matrix emulator boot vs API-33 boot race (converge on e2e-preview manual-boot) 2026-07-08 18:41:19 +00:00

Closed #308 review(ui): below-cut nits 2026-07-08 17:24:43 +00:00

Closed #443 ci(e2e): harden android-emulator-runner emulator/system-image install against corrupt-zip (extend #389) 2026-07-08 17:24:40 +00:00

Closed #313 review(data-core): below-cut nits 2026-07-08 16:42:29 +00:00

Closed #174 Onboarding: help animation showing how to enable unrestricted battery usage 2026-07-08 15:19:12 +00:00

Closed #410 ci(mergify): Phase 2 — batching (BLOCKED on require-up-to-date decision) 2026-07-08 13:05:59 +00:00

Closed #319 mail: graceful fallback when the IMAP server lacks UIDPLUS (targeted expunge throws) 2026-07-08 12:09:12 +00:00

Closed #322 perf(data): route MailBackfiller.persistBatch through batched updateHeaderContents 2026-07-08 06:04:47 +00:00

Closed #390 feat(auth): detect "IMAP disabled" AUTHENTICATE failures and prompt the user to enable IMAP 2026-07-08 05:43:41 +00:00

Closed #403 fix(push): IdleService starts before credentials persist — transient "No stored credentials" at account-add 2026-07-08 05:05:41 +00:00

Closed #411 feat(onboarding): pre-auth Outlook IMAP-enablement screen (help/settings links + Sign In) 2026-07-08 04:28:29 +00:00

Closed #413 ci(mergify): Phase 1 active but not embarking PRs — investigate on dashboard before switchover 2026-07-08 03:09:03 +00:00

Closed #359 bug: SQLCipher UnsatisfiedLinkError — encrypted cache nativeOpen fails (likely 16 KB page size) on SDK 37 2026-07-08 03:06:48 +00:00

Closed #369 feat(security): encrypt persisted problem/crash reports at rest when cache encryption is on 2026-07-07 21:02:05 +00:00

Closed #357 perf(reader): make first message-open fast independent of backfill (prefetch visible bodies + warm IMAP connection) 2026-07-07 17:15:23 +00:00

Closed #404 ci: capture definitive diagnostics on an E2E emulator wedge (prove the root cause before fixing) 2026-07-07 16:55:12 +00:00

Closed #386 test(compose): re-ratchet the JaCoCo line-coverage floor once Compose tests stable (FINAL) 2026-07-07 13:04:51 +00:00

Closed #409 ci(mergify): implement Phase 1 — serial merge queue (require-up-to-date KEPT ON) 2026-07-07 12:16:43 +00:00

Closed #389 ci: harden Android SDK/emulator setup against "Error reading Zip content" sdkmanager failures (retry + cache) 2026-07-07 12:16:41 +00:00

Closed #405 refactor(scripts): fold the proven cold-fetch pause-hook A/B flow into the device-testing harness 2026-07-07 10:33:16 +00:00

Closed #393 feat(debug): dev-only pause/halt mail-fetch hook for test harnesses 2026-07-07 08:05:46 +00:00

Closed #358 perf(observability): add PII-free AppLog latency breadcrumbs to the reader / openMessage path 2026-07-07 08:05:45 +00:00

Closed #383 test(compose): Robolectric JVM tests — mailbox screen + folder drawer, Paging (batch 8/9) 2026-07-07 08:05:45 +00:00

Closed #381 test(compose): Robolectric JVM tests — reader screen, WebView caveat (batch 6/9) 2026-07-07 08:05:44 +00:00

Closed #378 test(compose): Robolectric JVM tests — account setup screens (batch 3/9) 2026-07-07 08:05:43 +00:00

Closed #384 test(compose): Robolectric JVM tests — app shell & lock gate host (batch 9/9) 2026-07-07 06:38:35 +00:00

Closed #382 test(compose): Robolectric JVM tests — compose editor screen (batch 7/9) 2026-07-07 05:43:34 +00:00

Closed #380 test(compose): Robolectric JVM tests — settings screens (batch 5/9) 2026-07-07 05:19:43 +00:00

Closed #379 test(compose): Robolectric JVM tests — mail list screens drafts/outbox/reports (batch 4/9) 2026-07-07 04:15:27 +00:00

Closed #407 ci: investigate Mergify merge queue (free for OSS) and propose an integration spec 2026-07-07 03:08:35 +00:00

Closed #399 ci: path-filter the E2E matrix so test-only/docs PRs skip it (cut CI load, unblock the cascade) 2026-07-07 02:54:27 +00:00

Closed #377 test(compose): Robolectric JVM tests — onboarding & lock screens (batch 2/9) 2026-07-07 02:25:51 +00:00

Closed #392 fix(scripts): device-testing harness portability + robustness (file-based dump, UTF-8 I/O, breadcrumb readiness, row-selection) 2026-07-07 02:12:57 +00:00

Closed #376 test(compose): Robolectric JVM tests — rich-text format controls (batch 1/9) 2026-07-07 01:09:42 +00:00

Closed #387 ci(e2e): extend the #334 API-37 boot/E2E diagnostics to all emulator E2E jobs (API 29-36 matrix) 2026-07-06 21:55:54 +00:00

Closed #354 fix(push): IdleService dataSync FGS crash-loop — START_STICKY restart into exhausted 24h cap throws ForegroundServiceStartNotAllowedException 2026-07-06 00:36:29 +00:00

Closed #187 perf(db): covering index for unified-inbox summary scans (deferred / needs migration) 2026-07-05 19:31:23 +00:00

Closed #351 ci(fix #350): trigger CI with the PAT (GITHUB_TOKEN dispatch needs manual approval) 2026-07-05 18:47:41 +00:00

Closed #306 fix(auth): drop the redundant 2nd Outlook token request on sign-in (extra onboarding failure point) 2026-07-05 18:10:21 +00:00

Closed #349 ci: traffic-controller owns CI triggering (GITHUB_TOKEN updates, PAT triggers by priority) — end the cascade 2026-07-05 17:51:50 +00:00

Closed #343 docs: plain-English README for the CI traffic-controller (as it stands) 2026-07-05 05:37:09 +00:00

Closed #324 epic: strangler-migrate debug logging to AppLog (useful, PII-safe report breadcrumbs) 2026-07-05 05:06:39 +00:00

Closed #331 chore(detekt): forbid android.util.Log outside AppLog — strangler guard (#324) 2026-07-05 05:05:07 +00:00

Closed #326 refactor(auth): route AppLockViewModel/AccountSetupViewModel logging through AppLog (#324) 2026-07-05 04:16:24 +00:00

Closed #346 ci: run the traffic-controller Python unit tests as a CI gate job 2026-07-05 03:59:02 +00:00

Closed #342 ci: extract the traffic-controller into a testable Python module (rewrite off inline bash) 2026-07-05 03:33:38 +00:00

Closed #328 refactor(connectivity): route ImapClient/SendWorker/IdleService through AppLog + scrub email PII (#324) 2026-07-05 03:29:06 +00:00

Closed #297 review(mail/reporting): below-cut security & robustness follow-ups 2026-07-05 03:29:05 +00:00

Closed #330 refactor(restart): route RestartActivity logging through AppLog (#324) 2026-07-05 03:09:09 +00:00

Closed #329 feat(sync): add PII-safe AppLog breadcrumbs to the sync engine (#324) 2026-07-05 02:51:27 +00:00

Closed #327 refactor(data): route DB/keystore logging through AppLog (#324) 2026-07-05 02:33:42 +00:00

Closed #334 ci(e2e): capture boot diagnostics + verbose/debug logging on the API 37 preview job 2026-07-05 02:15:25 +00:00

Closed #325 feat(reporting): AppLog seam — record throwables, StackTraceScrubber, accountLogRef (#324) 2026-07-05 02:01:40 +00:00

Closed #281 test-infra: port local dev scripts to Python (cross-platform) + rewire preflight off GMD 2026-07-05 01:16:52 +00:00

Closed #251 test(coverage): lane 6 — coverage ratchet gate (enforce >=95% in CI) 2026-07-04 16:45:49 +00:00

Closed #290 build(jacoco): scope coverage to the JVM-testable surface (exclude Compose UI / framework / debug) 2026-07-04 16:45:49 +00:00

Closed #296 perf(reporting): move ReportStore initial scan off the main thread 2026-07-04 09:00:19 +00:00

Closed #294 security(reporting): scrub PII (host:port, emails) from crash-report stack traces 2026-07-04 09:00:18 +00:00

Closed #303 fix(reader): Reply from an open email drops the quoted original (bare compose) — use buildReplyDraft 2026-07-04 08:43:15 +00:00

Closed #304 fix(ui): guard one-shot action buttons against double-tap (duplicate signatures/reports/uploads) 2026-07-04 08:43:15 +00:00

Closed #312 test(data): assert DatabaseModule registered migrations == the declared set 2026-07-04 08:21:01 +00:00

Closed #310 perf(data): batch MessageDao header/body updates in one transaction on the sync path 2026-07-04 08:21:00 +00:00

Closed #311 fix(data): append id tiebreaker to paged message ORDER BY (pagination correctness) 2026-07-04 08:21:00 +00:00

Closed #299 fix(data): deleteAccount leaves the account's attachment cache files + draft URI grants on disk 2026-07-04 08:00:46 +00:00

Closed #305 fix(accounts): normalize (lowercase) email when deriving the account id to prevent duplicate accounts 2026-07-04 08:00:46 +00:00

Closed #309 fix(data): AccountDao.upsert(REPLACE) cascade-deletes signatures+settings on account re-add 2026-07-04 08:00:46 +00:00

Closed #295 fix(mail): targeted + batch expunge in ImapClient (avoid deleting unrelated \Deleted mail) 2026-07-04 07:44:22 +00:00

Closed #302 fix(push): handle Service.onTimeout for the 24/7 dataSync FGS (push silently dies after ~6h on Android 14+) 2026-07-04 07:26:17 +00:00

Closed #289 test(coverage): high-value branch-coverage additions (RichText, VMs, MailRepositoryImpl) 2026-07-04 06:56:16 +00:00

Closed #288 test(coverage): close the clean JVM-testable coverage gaps (~11 files → ~95% logic) 2026-07-04 06:21:58 +00:00

Closed #284 test-infra: local_instrumented.sh builds the wrong tree when CWD != repo root 2026-07-04 05:58:59 +00:00

Closed #237 chore(ui): migrate LocalClipboardManager to LocalClipboard (suspend clipboard API) 2026-07-04 05:37:58 +00:00

Closed #257 test(reporting): add testability seams for ReportUpload* + E2E cover push IdleService 2026-07-04 05:16:34 +00:00

Closed #221 test(db): instrumented cold-open of a pre-encrypted cache (process-isolated SQLCipher regression) 2026-07-04 04:47:45 +00:00

Closed #269 test-infra: local GMD emulator tests fail (snapshot timeout) — use connectedDebugAndroidTest for local runs 2026-07-04 04:29:08 +00:00

Closed #275 test(coverage): lane 5 follow-up — UI tests for the remaining OAuth/permission + static screens 2026-07-04 04:10:04 +00:00

Closed #233 ci(perf): performance regression check — fail PRs that regress key benchmarks from baseline 2026-07-04 04:05:29 +00:00

Closed #220 test(db): pin "native lib loaded before keyed open" at the DatabaseModule factory site 2026-07-04 03:52:47 +00:00

Closed #258 ci: investigate unit-test sharding in CI (implement if worthwhile) 2026-07-04 03:42:16 +00:00

Closed #219 perf(mailbox): reader→inbox return flashes "no messages" and reloads (empty-state gate + cold LazyPagingItems) 2026-07-04 03:36:52 +00:00

Closed #276 test(onboarding): E2E — tapping the Outlook onboarding button launches the browser for OAuth 2026-07-04 02:48:37 +00:00

Closed #250 test(coverage): lane 5 — Compose screens E2E coverage 2026-07-04 02:04:41 +00:00

Closed #164 Allow user to re-order accounts in the settings view 2026-07-04 01:48:45 +00:00

Closed #226 test(sync): instrumented cache-lock deferral for PruneWorker/BackfillWorker 2026-07-04 01:30:30 +00:00

Closed #271 ci(autoupdate): don't rebase a PR while its CI is mid-run — cancel-in-progress discards the running build 2026-07-04 01:17:42 +00:00

Closed #235 feat(debug-report): capture account count + per-account provider/auth-type, and attach recent app logs 2026-07-04 01:00:58 +00:00

Closed #248 test(coverage): lane 3 — persistence, DAOs & migrations to >=95% 2026-07-04 00:47:10 +00:00

Closed #232 perf(search): Unicode-aware case-insensitive search via a casefold column (approach A) 2026-07-03 23:29:04 +00:00

Closed #239 feat(reporting): purge crash/problem reports older than 1 month, on charger connect 2026-07-03 22:38:28 +00:00

Closed #193 sync: age-based retention re-downloads pruned messages on low-traffic mailboxes (window not bounded by age cutoff) 2026-07-03 21:08:43 +00:00

Closed #262 ci(autoupdate): drop synchronize trigger (stop runner storm), keep draft PRs updated 2026-07-03 20:51:31 +00:00

Closed #255 fix(reporting): auto-prompt to submit a crash only on first re-open, for a legitimate <24h crash 2026-07-03 20:47:06 +00:00

Closed #247 test(coverage): lane 2 — sync, workers, transport & auth to >=95% 2026-07-03 20:17:02 +00:00

Closed #259 ci(autoupdate): also trigger on pull_request so newly-opened PRs update immediately 2026-07-03 19:52:25 +00:00

Closed #249 test(coverage): lane 4 — ViewModels & non-UI modules to >=95% 2026-07-03 19:47:41 +00:00

Closed #246 test(coverage): lane 1 — repository, mappers & domain logic to >=95% 2026-07-03 19:09:36 +00:00

Closed #192 build: wire up JaCoCo code-coverage reporting 2026-07-03 17:55:17 +00:00

Closed #243 ci(autoupdate): keep ALL open PRs up to date, not just auto-merge-armed ones 2026-07-03 17:42:37 +00:00

Closed #236 chore(ui): migrate hiltViewModel to its new androidx.hilt.lifecycle.viewmodel.compose package 2026-07-03 17:09:44 +00:00

Closed #225 test(sync): unit-cover the cache-lock gate on every pre-auth DB entry point 2026-07-03 16:41:21 +00:00

Closed #227 perf(search): restore Unicode-aware case-insensitive search (examine most performant approach) 2026-07-03 16:21:51 +00:00

Closed #224 fix(sync): gate PruneWorker & BackfillWorker on EncryptedCacheGuard (defer when the cache is locked) 2026-07-03 16:14:50 +00:00

Closed #214 perf(mailbox): page the per-account folder view and search (currently whole folder/inbox in memory) 2026-07-03 16:00:46 +00:00

Closed #218 ci(e2e): converge the matrix e2e job on the e2e-preview manual-boot pattern (definitive boot-race fix) 2026-07-03 15:36:00 +00:00

Closed #217 ci(e2e): retry the API-29 emulator boot to absorb the android-emulator-runner keyevent race 2026-07-03 15:35:59 +00:00

Closed #213 perf(mailbox): remember() per-row relative-time formatting to cut per-recomposition allocation 2026-07-03 15:11:54 +00:00

Closed #212 perf(mailbox): bound the unified-inbox paging window with PagingConfig.maxSize 2026-07-03 15:11:53 +00:00

Closed #211 chore(preflight): compile androidTest source set in the fast gate 2026-07-03 14:54:17 +00:00

Closed #210 fix(cache): encrypted cache crash-loops on launch (UnsatisfiedLinkError, SQLiteConnection.nativeOpen) 2026-07-03 14:38:37 +00:00

Closed #204 chore(security): validate Content-ID before use in MIME header / Graph payload 2026-07-03 13:57:55 +00:00

Closed #205 chore(security): whitelist font-family against FontRegistry on HTML emit 2026-07-03 12:22:54 +00:00

Closed #77 feat(compose): inline images 2026-07-03 06:47:01 +00:00

Closed #177 Compose: debounced periodic draft autosave (not just on exit) 2026-07-03 05:58:36 +00:00

Closed #72 feat(compose): font family picker with bundled open-source fonts 2026-07-03 05:44:51 +00:00

Closed #76 feat(compose): paragraph alignment 2026-07-03 05:08:42 +00:00

Closed #78 feat(compose): remember last-used font and size 2026-07-03 04:55:25 +00:00

Closed #160 All pre-filled IMAP options should include the disclaimer "Do not try to use your account password. It will not work. You must use an app password." 2026-07-03 04:40:51 +00:00

Closed #73 feat(compose): font size control 2026-07-03 04:27:56 +00:00

Closed #172 Onboarding: require GPL-3.0 license agreement as the first screen 2026-07-03 04:08:49 +00:00

Closed #154 Add pre-filled AOL IMAP settings 2026-07-03 02:37:40 +00:00

Closed #156 Add AOL app specific password instructions 2026-07-03 02:37:40 +00:00

Closed #74 feat(compose): font color 2026-07-03 02:26:04 +00:00

Closed #75 feat(compose): text highlight 2026-07-03 02:26:04 +00:00

Closed #53 Harden the two ungated sync↔maintenance concurrency pairs (follow-up from #46) 2026-07-03 02:14:47 +00:00

Closed #186 perf(reader): faster cached message-open — single WebView render, off-main IO, no wasted openMessage work 2026-07-03 02:02:43 +00:00

Closed #37 Rich compose: multipart/alternative send + reply/forward quoting 2026-07-03 01:47:47 +00:00

Closed #38 Rich compose: signatures 2026-07-03 01:47:04 +00:00

Closed #155 Add Yahoo specific app password instructions 2026-07-03 01:43:03 +00:00

Closed #71 feat(compose): strikethrough formatting 2026-07-03 01:32:22 +00:00

Closed #148 Opening messages is still very slow, even with all messages downloaded 2026-07-03 01:20:37 +00:00

Closed #162 Advanced Settings hierarchy 2026-07-03 01:07:43 +00:00

Closed #150 Onboarding flow should deep link directly to the Background activity page for the app, the screen with the "Optimized" and "Unrestricted" options 2026-07-03 00:55:55 +00:00

Closed #163 Allow user to set a default mail account 2026-07-03 00:44:02 +00:00

Closed #157 Bug - regression from prior changes - notification now does not load directly to the email message it displays again 2026-07-03 00:32:43 +00:00

Closed #159 Report a Problem requires a description of at least 200 characters and improvements to submission process 2026-07-03 00:20:16 +00:00

Closed #153 Include the same kind of help instructions for iCloud mail during onboarding as Google for 2FA and app passwords 2026-07-03 00:08:35 +00:00

Closed #161 Report a problem confirmation experience 2026-07-02 23:36:37 +00:00

Closed #151 Notification prompt timing 2026-07-02 23:23:31 +00:00

Closed #36 Rich compose: HTML editor + formatting toolbar 2026-07-02 23:09:41 +00:00

Closed #152 Google 2FA article button should precede the app password button visually for logical flow 2026-07-02 22:42:38 +00:00

Closed #149 When a folder is open and it is making a network request with no prior messages to display, it should show a wait spinner rather than showing "No messages to display" until the network request completes 2026-07-02 22:25:23 +00:00

Closed #158 Settings hierarchy list 2026-07-02 22:08:31 +00:00

Closed #147 Account list dropdown in drawer anchors to the bottom left roughly instead of directly below where it is located near the top 2026-07-02 21:50:02 +00:00

Closed #125 Investigate IMAP folder-open latency (follow-up to #86) 2026-07-02 21:29:57 +00:00

Closed #102 refactor(security): de-duplicate AES-GCM Keystore plumbing and unify the authenticator policy 2026-07-02 17:33:29 +00:00

Closed #100 test(security): cover the app-lock security core (seal exchange, unlock classification, policy table) 2026-07-02 16:55:52 +00:00

Closed #133 Inline images in HTML emails render as attachments instead of embedded in the body 2026-07-02 16:36:45 +00:00

Closed #93 provideDatabase blocks on DataStore + Keystore at Hilt inject time (potential ANR) 2026-07-02 16:23:17 +00:00

Closed #99 fix(security): harden app-lock recovery restart (self-restart race + lost syncNow enqueue) 2026-07-02 16:10:30 +00:00

Closed #103 refactor(security): single source of truth for the cache DB filename/sidecars 2026-07-02 15:58:07 +00:00

Closed #128 Contacts permission: show a rationale explaining recipient autocomplete before requesting 2026-07-02 15:40:28 +00:00

Closed #129 Contacts autocomplete: allow enabling it later after the user declines 2026-07-02 15:40:28 +00:00

Closed #127 Onboarding: move the contacts-access request out of compose into a dedicated onboarding step 2026-07-02 15:40:27 +00:00

Closed #134 Reader: collapse multiple attachments into an expandable accordion ("See x more attachments") 2026-07-02 15:08:36 +00:00

Closed #124 Mailbox: page the unified "All inboxes" view (follow-up to #86) 2026-07-02 14:45:52 +00:00

Closed #111 fix(security): keep accounts/credentials out of the auth-bound cache DB so key invalidation doesn't sign the user out 2026-07-02 14:33:03 +00:00

Closed #66 Folder model: persist the IMAP hierarchy delimiter instead of re-inferring it in parentOf() 2026-07-02 13:01:49 +00:00

Closed #86 Improve message loading performance 2026-07-02 12:46:20 +00:00

Closed #104 refactor(security): app-lock UI plumbing cleanup (snackbar, LifecycleEventEffect, LocalActivity, dead availability()) 2026-07-02 09:49:30 +00:00

Closed #69 providerLabel: consolidate provider-brand host matching 2026-07-02 09:18:14 +00:00

Closed #68 i18n: move folder-label disambiguation patterns into strings.xml 2026-07-02 09:18:12 +00:00

Closed #67 FolderDrawer: memoize label resolution, resolver early-return, fail-fast lookups 2026-07-02 09:14:34 +00:00

Closed #101 fix(security): app-lock lifecycle consistency (grace across Back, evict passphrase on re-lock) 2026-07-02 08:50:16 +00:00

Closed #62 Folder labels: add \Important (RFC 8457) so [Gmail]/Important counts as special-use 2026-07-02 08:39:37 +00:00

Closed #65 Folder model: derive roleOf and isServerSpecial from one attribute-to-role table 2026-07-02 08:39:36 +00:00

Closed #98 Gmail IMAP in onboarding should link to Google's help article on setting up 2FA 2026-07-02 08:29:04 +00:00

Closed #96 Periodic WorkManager jobs use KEEP, so interval/constraint changes don't apply on upgrade 2026-07-02 08:17:14 +00:00

Closed #94 Backfill age floor can stop early on out-of-order Date/UID, leaving a history gap 2026-07-02 08:05:40 +00:00

Closed #95 uid <= 0 row poisons MessageDao.lowestSyncedUid, causing backfill to under-fetch a folder 2026-07-02 08:05:40 +00:00

Closed #84 Bolded text for accounts with unread emails 2026-07-02 07:49:44 +00:00

Closed #83 Unread message count label per folder 2026-07-02 07:49:43 +00:00

Closed #64 Testing: cover the attributes-to-specialUse wiring; fix FolderLabelsTest fixture fidelity claim 2026-07-02 07:36:34 +00:00

Closed #22 Screen unlock and decrypt 2026-07-02 05:19:37 +00:00

Closed #61 Folder labels: transient wrong provider suffix while switching accounts in the open drawer 2026-07-02 05:04:14 +00:00

Closed #59 Folder labels: move-to picker and app-bar title still show ambiguous duplicate names 2026-07-02 05:04:13 +00:00

Closed #60 Folder labels: 'Sent [Sent]' self-referential label when two top-level folders share a role 2026-07-02 05:04:13 +00:00

Closed #90 IMAP IDLE (push email) shuts down and temporarily reverts to pulling every 15 minutes at or below 20% battery 2026-07-02 04:49:09 +00:00

Closed #88 Default fetch all content policy should be on Wi-Fi only 2026-07-02 04:49:08 +00:00

Closed #89 Fetch all content should temporarily stop regardless of setting when phone reaches 20% battery or less 2026-07-02 04:49:08 +00:00

Closed #85 Render or otherwise correctly display HTML content in preview snippets 2026-07-02 04:38:49 +00:00

Closed #63 Testing: add Room migration tests (MigrationTestHelper), starting with 11 to 12 2026-07-02 04:29:00 +00:00

Closed #19 Modify release workflow for automated publication to app stores 2026-07-02 04:17:02 +00:00

Closed #17 Google Play compliance work 2026-07-02 03:53:58 +00:00

Closed #87 Message options should be icons on the top bar rather than a dropdown 2026-07-02 03:39:23 +00:00

Closed #58 Move-by-role (Spam/Archive/Trash) can silently file mail into the wrong same-role folder 2026-07-02 03:20:48 +00:00

Closed #16 F-Droid compliance work 2026-07-02 03:06:40 +00:00

Closed #9 Onboarding flow 2026-07-02 02:51:04 +00:00

Closed #79 Compose: remind about missing attachment when the message mentions one 2026-07-01 23:20:58 +00:00

Closed #70 feat(richtext): parameterized styles, alignment/image/base-style channels, HTML round-trip 2026-07-01 22:15:59 +00:00

Closed #30 Onboarding: "add another account?" prompt + first-account landing 2026-07-01 21:15:30 +00:00

Closed #31 Onboarding: E2E test + docs/strings 2026-07-01 21:15:30 +00:00

Closed #28 Onboarding: preconfigured provider registry (Gmail/Yahoo/iCloud) 2026-07-01 21:15:29 +00:00

Closed #29 Onboarding: app-password guided setup screen 2026-07-01 21:15:29 +00:00

Closed #26 Onboarding: first-run navigation scaffold + welcome 2026-07-01 21:15:28 +00:00

Closed #27 Onboarding: account vendor picker 2026-07-01 21:15:28 +00:00

Closed #56 fix(notifications): tapping a new-mail notification does not open that email 2026-07-01 21:13:48 +00:00

Closed #51 fix: CursorWindow overflow crash in MessageDao.observeAll() (SELECT * pulls full body into 2MB window) 2026-07-01 18:54:38 +00:00

Closed #49 Onboarding: opt-in to unrestricted battery/background usage 2026-07-01 17:42:53 +00:00

Closed #10 Debugging Submission client 2026-07-01 16:45:58 +00:00

Closed #23 Compose aesthetics: rounded corners 2026-07-01 16:45:49 +00:00

Closed #14 Rich email composition and signatures 2026-07-01 16:45:47 +00:00

Closed #13 Configurable message retention 2026-07-01 16:45:42 +00:00

Closed #12 Default fetch all mail 2026-07-01 16:45:39 +00:00

Closed #20 README update 2026-07-01 16:16:52 +00:00

Closed #25 Enable default mail app 2026-07-01 15:41:14 +00:00

Closed #33 Debug reporting: report review & opt-in submit 2026-07-01 15:28:47 +00:00

Closed #32 Debug reporting: error/crash capture + "Report a problem" entry point 2026-07-01 15:28:46 +00:00

Closed #21 Google Backup inclusion 2026-07-01 14:59:41 +00:00

Closed #39 Remove dead Gmail OAuth code path 2026-07-01 14:41:43 +00:00

265 Issues created by 1 user

Opened #9 Onboarding flow 2026-07-01 02:57:16 +00:00

Opened #10 Debugging Submission client 2026-07-01 03:00:23 +00:00

Opened #11 Debugging ingest pipeline 2026-07-01 03:04:34 +00:00

Opened #12 Default fetch all mail 2026-07-01 03:05:52 +00:00

Opened #13 Configurable message retention 2026-07-01 03:07:37 +00:00

Opened #14 Rich email composition and signatures 2026-07-01 03:09:25 +00:00

Opened #15 Detailed code review/audit 2026-07-01 03:11:11 +00:00

Opened #16 F-Droid compliance work 2026-07-01 03:11:47 +00:00

Opened #17 Google Play compliance work 2026-07-01 03:12:27 +00:00

Opened #18 Samsung Galaxy Store: manual publication steps 2026-07-01 03:13:09 +00:00

Opened #19 Modify release workflow for automated publication to app stores 2026-07-01 03:15:02 +00:00

Opened #20 README update 2026-07-01 03:16:09 +00:00

Opened #21 Google Backup inclusion 2026-07-01 03:21:22 +00:00

Opened #22 Screen unlock and decrypt 2026-07-01 03:23:19 +00:00

Opened #23 Compose aesthetics: rounded corners 2026-07-01 03:23:58 +00:00

Opened #24 QA/bug fix pass 2026-07-01 03:24:54 +00:00

Opened #25 Enable default mail app 2026-07-01 03:29:17 +00:00

Opened #26 Onboarding: first-run navigation scaffold + welcome 2026-07-01 03:49:14 +00:00

Opened #27 Onboarding: account vendor picker 2026-07-01 03:49:15 +00:00

Opened #28 Onboarding: preconfigured provider registry (Gmail/Yahoo/iCloud) 2026-07-01 03:49:17 +00:00

Opened #29 Onboarding: app-password guided setup screen 2026-07-01 03:49:18 +00:00

Opened #30 Onboarding: "add another account?" prompt + first-account landing 2026-07-01 03:49:20 +00:00

Opened #31 Onboarding: E2E test + docs/strings 2026-07-01 03:49:21 +00:00

Opened #32 Debug reporting: error/crash capture + "Report a problem" entry point 2026-07-01 04:01:28 +00:00

Opened #33 Debug reporting: report review & opt-in submit 2026-07-01 04:01:30 +00:00

Opened #34 Debug ingest: Worker ingest + PII anonymization + encrypted R2 storage 2026-07-01 04:01:32 +00:00

Opened #35 Debug ingest: weekly cron publishes remaining reports as GitHub issues 2026-07-01 04:01:33 +00:00

Opened #36 Rich compose: HTML editor + formatting toolbar 2026-07-01 04:01:35 +00:00

Opened #37 Rich compose: multipart/alternative send + reply/forward quoting 2026-07-01 04:01:36 +00:00

Opened #38 Rich compose: signatures 2026-07-01 04:01:38 +00:00

Opened #39 Remove dead Gmail OAuth code path 2026-07-01 04:08:02 +00:00

Opened #49 Onboarding: opt-in to unrestricted battery/background usage 2026-07-01 15:26:49 +00:00

Opened #51 fix: CursorWindow overflow crash in MessageDao.observeAll() (SELECT * pulls full body into 2MB window) 2026-07-01 18:32:55 +00:00

Opened #53 Harden the two ungated sync↔maintenance concurrency pairs (follow-up from #46) 2026-07-01 19:56:21 +00:00

Opened #56 fix(notifications): tapping a new-mail notification does not open that email 2026-07-01 20:45:14 +00:00

Opened #58 Move-by-role (Spam/Archive/Trash) can silently file mail into the wrong same-role folder 2026-07-01 21:17:23 +00:00

Opened #59 Folder labels: move-to picker and app-bar title still show ambiguous duplicate names 2026-07-01 21:17:25 +00:00

Opened #60 Folder labels: 'Sent [Sent]' self-referential label when two top-level folders share a role 2026-07-01 21:17:26 +00:00

Opened #61 Folder labels: transient wrong provider suffix while switching accounts in the open drawer 2026-07-01 21:17:27 +00:00

Opened #62 Folder labels: add \Important (RFC 8457) so [Gmail]/Important counts as special-use 2026-07-01 21:17:29 +00:00

Opened #63 Testing: add Room migration tests (MigrationTestHelper), starting with 11 to 12 2026-07-01 21:17:30 +00:00

Opened #64 Testing: cover the attributes-to-specialUse wiring; fix FolderLabelsTest fixture fidelity claim 2026-07-01 21:17:32 +00:00

Opened #65 Folder model: derive roleOf and isServerSpecial from one attribute-to-role table 2026-07-01 21:18:14 +00:00

Opened #66 Folder model: persist the IMAP hierarchy delimiter instead of re-inferring it in parentOf() 2026-07-01 21:18:15 +00:00

Opened #67 FolderDrawer: memoize label resolution, resolver early-return, fail-fast lookups 2026-07-01 21:18:16 +00:00

Opened #68 i18n: move folder-label disambiguation patterns into strings.xml 2026-07-01 21:18:17 +00:00

Opened #69 providerLabel: consolidate provider-brand host matching 2026-07-01 21:18:19 +00:00

Opened #70 feat(richtext): parameterized styles, alignment/image/base-style channels, HTML round-trip 2026-07-01 21:22:42 +00:00

Opened #71 feat(compose): strikethrough formatting 2026-07-01 21:22:43 +00:00

Opened #72 feat(compose): font family picker with bundled open-source fonts 2026-07-01 21:22:44 +00:00

Opened #73 feat(compose): font size control 2026-07-01 21:22:45 +00:00

Opened #74 feat(compose): font color 2026-07-01 21:22:46 +00:00

Opened #75 feat(compose): text highlight 2026-07-01 21:22:47 +00:00

Opened #76 feat(compose): paragraph alignment 2026-07-01 21:22:48 +00:00

Opened #77 feat(compose): inline images 2026-07-01 21:22:49 +00:00

Opened #78 feat(compose): remember last-used font and size 2026-07-01 21:22:50 +00:00

Opened #79 Compose: remind about missing attachment when the message mentions one 2026-07-01 21:56:41 +00:00

Opened #83 Unread message count label per folder 2026-07-02 02:03:42 +00:00

Opened #84 Bolded text for accounts with unread emails 2026-07-02 02:04:12 +00:00

Opened #85 Render or otherwise correctly display HTML content in preview snippets 2026-07-02 02:05:08 +00:00

Opened #86 Improve message loading performance 2026-07-02 02:06:23 +00:00

Opened #87 Message options should be icons on the top bar rather than a dropdown 2026-07-02 02:08:04 +00:00

Opened #88 Default fetch all content policy should be on Wi-Fi only 2026-07-02 02:09:16 +00:00

Opened #89 Fetch all content should temporarily stop regardless of setting when phone reaches 20% battery or less 2026-07-02 02:10:46 +00:00

Opened #90 IMAP IDLE (push email) shuts down and temporarily reverts to pulling every 15 minutes at or below 20% battery 2026-07-02 02:11:39 +00:00

Opened #93 provideDatabase blocks on DataStore + Keystore at Hilt inject time (potential ANR) 2026-07-02 02:52:42 +00:00

Opened #94 Backfill age floor can stop early on out-of-order Date/UID, leaving a history gap 2026-07-02 02:52:44 +00:00

Opened #95 uid <= 0 row poisons MessageDao.lowestSyncedUid, causing backfill to under-fetch a folder 2026-07-02 02:52:45 +00:00

Opened #96 Periodic WorkManager jobs use KEEP, so interval/constraint changes don't apply on upgrade 2026-07-02 02:52:46 +00:00

Opened #98 Gmail IMAP in onboarding should link to Google's help article on setting up 2FA 2026-07-02 02:54:23 +00:00

Opened #99 fix(security): harden app-lock recovery restart (self-restart race + lost syncNow enqueue) 2026-07-02 02:55:42 +00:00

Opened #100 test(security): cover the app-lock security core (seal exchange, unlock classification, policy table) 2026-07-02 02:55:47 +00:00

Opened #101 fix(security): app-lock lifecycle consistency (grace across Back, evict passphrase on re-lock) 2026-07-02 02:55:55 +00:00

Opened #102 refactor(security): de-duplicate AES-GCM Keystore plumbing and unify the authenticator policy 2026-07-02 02:56:00 +00:00

Opened #103 refactor(security): single source of truth for the cache DB filename/sidecars 2026-07-02 02:56:06 +00:00

Opened #104 refactor(security): app-lock UI plumbing cleanup (snackbar, LifecycleEventEffect, LocalActivity, dead availability()) 2026-07-02 02:56:12 +00:00

Opened #111 fix(security): keep accounts/credentials out of the auth-bound cache DB so key invalidation doesn't sign the user out 2026-07-02 03:40:53 +00:00

Opened #124 Mailbox: page the unified "All inboxes" view (follow-up to #86) 2026-07-02 13:09:46 +00:00

Opened #125 Investigate IMAP folder-open latency (follow-up to #86) 2026-07-02 13:09:47 +00:00

Opened #127 Onboarding: move the contacts-access request out of compose into a dedicated onboarding step 2026-07-02 13:31:32 +00:00

Opened #128 Contacts permission: show a rationale explaining recipient autocomplete before requesting 2026-07-02 13:31:33 +00:00

Opened #129 Contacts autocomplete: allow enabling it later after the user declines 2026-07-02 13:31:35 +00:00

Opened #133 Inline images in HTML emails render as attachments instead of embedded in the body 2026-07-02 14:40:48 +00:00

Opened #134 Reader: collapse multiple attachments into an expandable accordion ("See x more attachments") 2026-07-02 14:42:07 +00:00

Opened #141 Release: create app signing keystore and add publishing secrets to CI 2026-07-02 15:55:05 +00:00

Opened #142 Google Play: manual Play Console publication steps 2026-07-02 15:55:06 +00:00

Opened #143 F-Droid: submit to fdroiddata and fix release-tag versionCode hygiene 2026-07-02 15:55:07 +00:00

Opened #147 Account list dropdown in drawer anchors to the bottom left roughly instead of directly below where it is located near the top 2026-07-02 19:58:14 +00:00

Opened #148 Opening messages is still very slow, even with all messages downloaded 2026-07-02 19:59:02 +00:00

Opened #149 When a folder is open and it is making a network request with no prior messages to display, it should show a wait spinner rather than showing "No messages to display" until the network request completes 2026-07-02 20:00:26 +00:00

Opened #150 Onboarding flow should deep link directly to the Background activity page for the app, the screen with the "Optimized" and "Unrestricted" options 2026-07-02 20:02:37 +00:00

Opened #151 Notification prompt timing 2026-07-02 20:03:38 +00:00

Opened #152 Google 2FA article button should precede the app password button visually for logical flow 2026-07-02 20:05:38 +00:00

Opened #153 Include the same kind of help instructions for iCloud mail during onboarding as Google for 2FA and app passwords 2026-07-02 20:08:44 +00:00

Opened #154 Add pre-filled AOL IMAP settings 2026-07-02 20:09:10 +00:00

Opened #155 Add Yahoo specific app password instructions 2026-07-02 20:10:45 +00:00

Opened #156 Add AOL app specific password instructions 2026-07-02 20:12:32 +00:00

Opened #157 Bug - regression from prior changes - notification now does not load directly to the email message it displays again 2026-07-02 20:24:03 +00:00

Opened #158 Settings hierarchy list 2026-07-02 20:41:34 +00:00

Opened #159 Report a Problem requires a description of at least 200 characters and improvements to submission process 2026-07-02 20:48:23 +00:00

Opened #160 All pre-filled IMAP options should include the disclaimer "Do not try to use your account password. It will not work. You must use an app password." 2026-07-02 20:50:32 +00:00

Opened #161 Report a problem confirmation experience 2026-07-02 20:56:09 +00:00

Opened #162 Advanced Settings hierarchy 2026-07-02 21:06:46 +00:00

Opened #163 Allow user to set a default mail account 2026-07-02 21:08:05 +00:00

Opened #164 Allow user to re-order accounts in the settings view 2026-07-02 21:10:20 +00:00

Opened #172 Onboarding: require GPL-3.0 license agreement as the first screen 2026-07-02 22:16:58 +00:00

Opened #174 Onboarding: help animation showing how to enable unrestricted battery usage 2026-07-02 22:26:35 +00:00

Opened #177 Compose: debounced periodic draft autosave (not just on exit) 2026-07-02 22:41:49 +00:00

Opened #186 perf(reader): faster cached message-open — single WebView render, off-main IO, no wasted openMessage work 2026-07-03 00:39:59 +00:00

Opened #187 perf(db): covering index for unified-inbox summary scans (deferred / needs migration) 2026-07-03 00:40:03 +00:00

Opened #192 build: wire up JaCoCo code-coverage reporting 2026-07-03 02:02:01 +00:00

Opened #193 sync: age-based retention re-downloads pruned messages on low-traffic mailboxes (window not bounded by age cutoff) 2026-07-03 02:06:38 +00:00

Opened #204 chore(security): validate Content-ID before use in MIME header / Graph payload 2026-07-03 12:00:57 +00:00

Opened #205 chore(security): whitelist font-family against FontRegistry on HTML emit 2026-07-03 12:00:59 +00:00

Opened #210 fix(cache): encrypted cache crash-loops on launch (UnsatisfiedLinkError, SQLiteConnection.nativeOpen) 2026-07-03 14:29:49 +00:00

Opened #211 chore(preflight): compile androidTest source set in the fast gate 2026-07-03 14:29:50 +00:00

Opened #212 perf(mailbox): bound the unified-inbox paging window with PagingConfig.maxSize 2026-07-03 14:51:38 +00:00

Opened #213 perf(mailbox): remember() per-row relative-time formatting to cut per-recomposition allocation 2026-07-03 14:51:39 +00:00

Opened #214 perf(mailbox): page the per-account folder view and search (currently whole folder/inbox in memory) 2026-07-03 14:51:41 +00:00

Opened #215 perf(mailbox): async image loading (Coil) when avatars/images are introduced 2026-07-03 14:51:42 +00:00

Opened #217 ci(e2e): retry the API-29 emulator boot to absorb the android-emulator-runner keyevent race 2026-07-03 15:21:37 +00:00

Opened #218 ci(e2e): converge the matrix e2e job on the e2e-preview manual-boot pattern (definitive boot-race fix) 2026-07-03 15:21:38 +00:00

Opened #219 perf(mailbox): reader→inbox return flashes "no messages" and reloads (empty-state gate + cold LazyPagingItems) 2026-07-03 15:21:40 +00:00

Opened #220 test(db): pin "native lib loaded before keyed open" at the DatabaseModule factory site 2026-07-03 15:21:41 +00:00

Opened #221 test(db): instrumented cold-open of a pre-encrypted cache (process-isolated SQLCipher regression) 2026-07-03 15:21:43 +00:00

Opened #224 fix(sync): gate PruneWorker & BackfillWorker on EncryptedCacheGuard (defer when the cache is locked) 2026-07-03 15:42:17 +00:00

Opened #225 test(sync): unit-cover the cache-lock gate on every pre-auth DB entry point 2026-07-03 15:42:18 +00:00

Opened #226 test(sync): instrumented cache-lock deferral for PruneWorker/BackfillWorker 2026-07-03 15:42:20 +00:00

Opened #227 perf(search): restore Unicode-aware case-insensitive search (examine most performant approach) 2026-07-03 15:42:21 +00:00

Opened #232 perf(search): Unicode-aware case-insensitive search via a casefold column (approach A) 2026-07-03 16:21:46 +00:00

Opened #233 ci(perf): performance regression check — fail PRs that regress key benchmarks from baseline 2026-07-03 16:27:47 +00:00

Opened #235 feat(debug-report): capture account count + per-account provider/auth-type, and attach recent app logs 2026-07-03 16:47:39 +00:00

Opened #236 chore(ui): migrate hiltViewModel to its new androidx.hilt.lifecycle.viewmodel.compose package 2026-07-03 16:53:11 +00:00

Opened #237 chore(ui): migrate LocalClipboardManager to LocalClipboard (suspend clipboard API) 2026-07-03 16:53:16 +00:00

Opened #239 feat(reporting): purge crash/problem reports older than 1 month, on charger connect 2026-07-03 17:12:12 +00:00

Opened #243 ci(autoupdate): keep ALL open PRs up to date, not just auto-merge-armed ones 2026-07-03 17:37:06 +00:00

Opened #246 test(coverage): lane 1 — repository, mappers & domain logic to >=95% 2026-07-03 17:57:38 +00:00

Opened #247 test(coverage): lane 2 — sync, workers, transport & auth to >=95% 2026-07-03 17:57:42 +00:00

Opened #248 test(coverage): lane 3 — persistence, DAOs & migrations to >=95% 2026-07-03 17:57:47 +00:00

Opened #249 test(coverage): lane 4 — ViewModels & non-UI modules to >=95% 2026-07-03 17:57:52 +00:00

Opened #250 test(coverage): lane 5 — Compose screens E2E coverage 2026-07-03 17:57:56 +00:00

Opened #251 test(coverage): lane 6 — coverage ratchet gate (enforce >=95% in CI) 2026-07-03 17:58:01 +00:00

Opened #255 fix(reporting): auto-prompt to submit a crash only on first re-open, for a legitimate <24h crash 2026-07-03 18:57:39 +00:00

Opened #257 test(reporting): add testability seams for ReportUpload* + E2E cover push IdleService 2026-07-03 19:32:37 +00:00

Opened #258 ci: investigate unit-test sharding in CI (implement if worthwhile) 2026-07-03 19:32:45 +00:00

Opened #259 ci(autoupdate): also trigger on pull_request so newly-opened PRs update immediately 2026-07-03 19:42:29 +00:00

Opened #262 ci(autoupdate): drop synchronize trigger (stop runner storm), keep draft PRs updated 2026-07-03 20:13:42 +00:00

Opened #269 test-infra: local GMD emulator tests fail (snapshot timeout) — use connectedDebugAndroidTest for local runs 2026-07-03 22:54:23 +00:00

Opened #271 ci(autoupdate): don't rebase a PR while its CI is mid-run — cancel-in-progress discards the running build 2026-07-04 01:14:50 +00:00

Opened #275 test(coverage): lane 5 follow-up — UI tests for the remaining OAuth/permission + static screens 2026-07-04 01:30:06 +00:00

Opened #276 test(onboarding): E2E — tapping the Outlook onboarding button launches the browser for OAuth 2026-07-04 01:37:00 +00:00

Opened #281 test-infra: port local dev scripts to Python (cross-platform) + rewire preflight off GMD 2026-07-04 03:59:28 +00:00

Opened #284 test-infra: local_instrumented.sh builds the wrong tree when CWD != repo root 2026-07-04 05:01:01 +00:00

Opened #288 test(coverage): close the clean JVM-testable coverage gaps (~11 files → ~95% logic) 2026-07-04 05:44:17 +00:00

Opened #289 test(coverage): high-value branch-coverage additions (RichText, VMs, MailRepositoryImpl) 2026-07-04 05:44:19 +00:00

Opened #290 build(jacoco): scope coverage to the JVM-testable surface (exclude Compose UI / framework / debug) 2026-07-04 05:44:23 +00:00

Opened #294 security(reporting): scrub PII (host:port, emails) from crash-report stack traces 2026-07-04 06:46:30 +00:00

Opened #295 fix(mail): targeted + batch expunge in ImapClient (avoid deleting unrelated \Deleted mail) 2026-07-04 06:46:34 +00:00

Opened #296 perf(reporting): move ReportStore initial scan off the main thread 2026-07-04 06:46:37 +00:00

Opened #297 review(mail/reporting): below-cut security & robustness follow-ups 2026-07-04 06:46:40 +00:00

Opened #298 review(mail/richtext): below-cut perf & correctness nits 2026-07-04 06:46:43 +00:00

Opened #299 fix(data): deleteAccount leaves the account's attachment cache files + draft URI grants on disk 2026-07-04 06:48:14 +00:00

Opened #300 security(threat-model): 'encrypt cache' doesn't cover account-metadata DB or attachment payloads 2026-07-04 06:48:18 +00:00

Opened #301 review(security/sync): below-cut lifecycle & robustness nits 2026-07-04 06:48:21 +00:00

Opened #302 fix(push): handle Service.onTimeout for the 24/7 dataSync FGS (push silently dies after ~6h on Android 14+) 2026-07-04 06:50:12 +00:00

Opened #303 fix(reader): Reply from an open email drops the quoted original (bare compose) — use buildReplyDraft 2026-07-04 06:50:15 +00:00

Opened #304 fix(ui): guard one-shot action buttons against double-tap (duplicate signatures/reports/uploads) 2026-07-04 06:50:19 +00:00

Opened #305 fix(accounts): normalize (lowercase) email when deriving the account id to prevent duplicate accounts 2026-07-04 06:50:22 +00:00

Opened #306 fix(auth): drop the redundant 2nd Outlook token request on sign-in (extra onboarding failure point) 2026-07-04 06:50:26 +00:00

Opened #307 review(domain/platform): below-cut nits 2026-07-04 06:50:29 +00:00

Opened #308 review(ui): below-cut nits 2026-07-04 06:50:32 +00:00

Opened #309 fix(data): AccountDao.upsert(REPLACE) cascade-deletes signatures+settings on account re-add 2026-07-04 06:52:40 +00:00

Opened #310 perf(data): batch MessageDao header/body updates in one transaction on the sync path 2026-07-04 06:52:43 +00:00

Opened #311 fix(data): append id tiebreaker to paged message ORDER BY (pagination correctness) 2026-07-04 06:52:47 +00:00

Opened #312 test(data): assert DatabaseModule registered migrations == the declared set 2026-07-04 06:52:50 +00:00

Opened #313 review(data-core): below-cut nits 2026-07-04 06:52:53 +00:00

Opened #319 mail: graceful fallback when the IMAP server lacks UIDPLUS (targeted expunge throws) 2026-07-04 07:27:35 +00:00

Opened #322 perf(data): route MailBackfiller.persistBatch through batched updateHeaderContents 2026-07-04 08:11:07 +00:00

Opened #324 epic: strangler-migrate debug logging to AppLog (useful, PII-safe report breadcrumbs) 2026-07-05 00:38:37 +00:00

Opened #325 feat(reporting): AppLog seam — record throwables, StackTraceScrubber, accountLogRef (#324) 2026-07-05 00:49:15 +00:00

Opened #326 refactor(auth): route AppLockViewModel/AccountSetupViewModel logging through AppLog (#324) 2026-07-05 00:49:18 +00:00

Opened #327 refactor(data): route DB/keystore logging through AppLog (#324) 2026-07-05 00:49:21 +00:00

Opened #328 refactor(connectivity): route ImapClient/SendWorker/IdleService through AppLog + scrub email PII (#324) 2026-07-05 00:49:24 +00:00

Opened #329 feat(sync): add PII-safe AppLog breadcrumbs to the sync engine (#324) 2026-07-05 00:49:27 +00:00

Opened #330 refactor(restart): route RestartActivity logging through AppLog (#324) 2026-07-05 00:49:30 +00:00

Opened #331 chore(detekt): forbid android.util.Log outside AppLog — strangler guard (#324) 2026-07-05 00:49:33 +00:00

Opened #334 ci(e2e): capture boot diagnostics + verbose/debug logging on the API 37 preview job 2026-07-05 01:47:50 +00:00

Opened #342 ci: extract the traffic-controller into a testable Python module (rewrite off inline bash) 2026-07-05 02:48:44 +00:00

Opened #343 docs: plain-English README for the CI traffic-controller (as it stands) 2026-07-05 03:00:07 +00:00

Opened #346 ci: run the traffic-controller Python unit tests as a CI gate job 2026-07-05 03:29:49 +00:00

Opened #349 ci: traffic-controller owns CI triggering (GITHUB_TOKEN updates, PAT triggers by priority) — end the cascade 2026-07-05 04:18:41 +00:00

Opened #351 ci(fix #350): trigger CI with the PAT (GITHUB_TOKEN dispatch needs manual approval) 2026-07-05 18:16:40 +00:00

Opened #354 fix(push): IdleService dataSync FGS crash-loop — START_STICKY restart into exhausted 24h cap throws ForegroundServiceStartNotAllowedException 2026-07-05 20:54:14 +00:00

Opened #355 perf(sync): pause background backfill while a message is opening (prioritize interactive IMAP fetches) 2026-07-05 20:54:15 +00:00

Opened #356 perf(sync): stop backfill running flat-out — inter-slice cooldown/backoff so it doesn't saturate the account 2026-07-05 20:54:16 +00:00

Opened #357 perf(reader): make first message-open fast independent of backfill (prefetch visible bodies + warm IMAP connection) 2026-07-05 20:54:17 +00:00

Opened #358 perf(observability): add PII-free AppLog latency breadcrumbs to the reader / openMessage path 2026-07-05 20:54:18 +00:00

Opened #359 bug: SQLCipher UnsatisfiedLinkError — encrypted cache nativeOpen fails (likely 16 KB page size) on SDK 37 2026-07-05 20:57:01 +00:00

Opened #360 feat(sync): graceful degradation + exponential backoff on provider throttling (429 / Too Many Requests / auth lockout) 2026-07-05 22:23:58 +00:00

Opened #361 perf(gmail): respect Gmail IMAP connection & bandwidth limits in sync/backfill 2026-07-05 22:24:09 +00:00

Opened #362 perf(yahoo): respect Yahoo/AOL IMAP limits & avoid the 1-hour auth lockout 2026-07-05 22:24:15 +00:00

Opened #363 perf(icloud): respect iCloud Mail IMAP connection & message-size limits 2026-07-05 22:24:18 +00:00

Opened #364 perf(outlook): respect Microsoft Graph throttling with batching & chunked upload 2026-07-05 22:24:23 +00:00

Opened #369 feat(security): encrypt persisted problem/crash reports at rest when cache encryption is on 2026-07-06 18:22:48 +00:00

Opened #373 test(compose): enable Compose UI unit testing via Robolectric (shrink JaCoCo exclusions, then re-ratchet the floor) 2026-07-06 19:45:50 +00:00

Opened #376 test(compose): Robolectric JVM tests — rich-text format controls (batch 1/9) 2026-07-06 20:07:05 +00:00

Opened #377 test(compose): Robolectric JVM tests — onboarding & lock screens (batch 2/9) 2026-07-06 20:07:09 +00:00

Opened #378 test(compose): Robolectric JVM tests — account setup screens (batch 3/9) 2026-07-06 20:07:12 +00:00

Opened #379 test(compose): Robolectric JVM tests — mail list screens drafts/outbox/reports (batch 4/9) 2026-07-06 20:07:16 +00:00

Opened #380 test(compose): Robolectric JVM tests — settings screens (batch 5/9) 2026-07-06 20:07:20 +00:00

Opened #381 test(compose): Robolectric JVM tests — reader screen, WebView caveat (batch 6/9) 2026-07-06 20:07:24 +00:00

Opened #382 test(compose): Robolectric JVM tests — compose editor screen (batch 7/9) 2026-07-06 20:07:28 +00:00

Opened #383 test(compose): Robolectric JVM tests — mailbox screen + folder drawer, Paging (batch 8/9) 2026-07-06 20:07:31 +00:00

Opened #384 test(compose): Robolectric JVM tests — app shell & lock gate host (batch 9/9) 2026-07-06 20:07:35 +00:00

Opened #385 chore(test): migrate v1 createComposeRule/createAndroidComposeRule usages to v2 2026-07-06 20:07:39 +00:00

Opened #386 test(compose): re-ratchet the JaCoCo line-coverage floor once Compose tests stable (FINAL) 2026-07-06 20:07:42 +00:00

Opened #387 ci(e2e): extend the #334 API-37 boot/E2E diagnostics to all emulator E2E jobs (API 29-36 matrix) 2026-07-06 20:40:49 +00:00

Opened #389 ci: harden Android SDK/emulator setup against "Error reading Zip content" sdkmanager failures (retry + cache) 2026-07-06 23:26:39 +00:00

Opened #390 feat(auth): detect "IMAP disabled" AUTHENTICATE failures and prompt the user to enable IMAP 2026-07-06 23:41:09 +00:00

Opened #392 fix(scripts): device-testing harness portability + robustness (file-based dump, UTF-8 I/O, breadcrumb readiness, row-selection) 2026-07-07 00:26:53 +00:00

Opened #393 feat(debug): dev-only pause/halt mail-fetch hook for test harnesses 2026-07-07 00:35:11 +00:00

Opened #399 ci: path-filter the E2E matrix so test-only/docs PRs skip it (cut CI load, unblock the cascade) 2026-07-07 01:43:10 +00:00

Opened #403 fix(push): IdleService starts before credentials persist — transient "No stored credentials" at account-add 2026-07-07 01:58:25 +00:00

Opened #404 ci: capture definitive diagnostics on an E2E emulator wedge (prove the root cause before fixing) 2026-07-07 02:07:35 +00:00

Opened #405 refactor(scripts): fold the proven cold-fetch pause-hook A/B flow into the device-testing harness 2026-07-07 02:12:46 +00:00

Opened #407 ci: investigate Mergify merge queue (free for OSS) and propose an integration spec 2026-07-07 02:46:19 +00:00

Opened #409 ci(mergify): implement Phase 1 — serial merge queue (require-up-to-date KEPT ON) 2026-07-07 03:09:48 +00:00

Opened #410 ci(mergify): Phase 2 — batching (BLOCKED on require-up-to-date decision) 2026-07-07 03:09:59 +00:00

Opened #411 feat(onboarding): pre-auth Outlook IMAP-enablement screen (help/settings links + Sign In) 2026-07-07 03:19:30 +00:00

Opened #413 ci(mergify): Phase 1 active but not embarking PRs — investigate on dashboard before switchover 2026-07-07 04:04:42 +00:00

Opened #420 ci(path-filter): scripts/-only changes still trigger the full E2E matrix (e.g. #419) 2026-07-07 10:14:42 +00:00

Opened #421 ci(e2e): restore matrix-leg wedge-capture without hanging reactivecircus (watchdog or manual-boot) 2026-07-07 17:04:34 +00:00

Opened #431 E2E Background watchdog 2026-07-08 11:54:24 +00:00

Opened #432 Manual-boot convergence 2026-07-08 11:54:47 +00:00

Opened #443 ci(e2e): harden android-emulator-runner emulator/system-image install against corrupt-zip (extend #389) 2026-07-08 15:17:13 +00:00

Opened #448 ci(e2e): harden matrix emulator boot vs API-33 boot race (converge on e2e-preview manual-boot) 2026-07-08 16:35:18 +00:00

Opened #451 ci: pin/verify all remaining CI downloads against published checksums 2026-07-08 17:05:07 +00:00

Opened #457 perf(sync): Spike out if a small number of multiple connections (2-3) improves performance, particularly for requesting user-tapped cold opens 2026-07-08 19:55:26 +00:00

Opened #468 ci(e2e): fix intermittent emulator app-window-focus loss flaking Espresso RootViewPicker tests 2026-07-09 00:07:06 +00:00

Opened #477 test(migrator): validate migrator DDL against the latest exported AccountDatabase schema, not a hardcoded version 2026-07-10 04:49:41 +00:00

Opened #479 fix(security): key-invalidation policy keys off encryptCache setting, not seal state — can permanently brick the encrypted cache 2026-07-10 19:13:55 +00:00

Opened #480 fix(compose): rich-text formatting, links and inline images destroyed by the next keystroke 2026-07-10 19:13:59 +00:00

Opened #481 fix(reader): delete from reader bypasses trash policy and permanently expunges without confirmation 2026-07-10 19:14:04 +00:00

Opened #482 fix(send): attachment staging swallows failures and runs blocking I/O on the main thread 2026-07-10 19:14:09 +00:00

Opened #483 fix(accounts): deleteAccount leaves outbox rows, staged attachments and URI grants — re-added account resurrects and sends stale mail 2026-07-10 19:14:14 +00:00

Opened #484 fix(security): MIME filename sanitizing to '.' or '..' escapes the attachment dir and crashes message open 2026-07-10 19:14:19 +00:00

Opened #485 fix(mail): openMessage does OAuth token refresh before serving a fully-cached body 2026-07-10 19:14:23 +00:00

Opened #486 fix(persistence): drafts and outbox live in the wipeable cache DB — user-authored mail lost on key-invalidation wipe 2026-07-10 19:14:28 +00:00

Opened #487 fix(sync): a burst of more than 50 new messages between syncs leaves a permanent message gap 2026-07-10 19:14:33 +00:00

Opened #488 fix(sync): UIDVALIDITY never stored or checked — stale UIDs corrupt the cache and misdirect destructive ops 2026-07-10 19:14:37 +00:00

Opened #489 fix(send): drainOutbox re-sends rows parked as 'may have sent' — duplicate emails 2026-07-10 19:14:42 +00:00

Opened #490 fix(graph): response-body IOException escapes raw instead of GraphTransportException(mayHaveSent=true) 2026-07-10 19:14:46 +00:00

Opened #491 fix(compose): swapHtmlSignature with null bodyHtml drops the typed body 2026-07-10 19:14:51 +00:00

Opened #492 fix(compose): closing the screen mid-send cancels the send and silently loses the message 2026-07-10 19:14:55 +00:00

Opened #493 fix(compose): replies ignore Reply-To and prefill the wrong address 2026-07-10 19:15:00 +00:00

Opened #494 fix(mailbox): folder identity is case-sensitive but INBOX isn't — servers reporting 'Inbox' split the mailbox in two 2026-07-10 19:15:06 +00:00

Opened #495 fix(sync): background prefetch loop never consults AccountThrottleGate 2026-07-10 19:15:11 +00:00

Opened #496 fix(sync): SMTP send failures never feed AccountThrottleGate 2026-07-10 19:15:15 +00:00

Opened #497 review(compose/send): unverified triage findings from 2026-07-09 whole-repo review (12 medium, 13 low) 2026-07-10 19:15:20 +00:00

Opened #498 review(mailbox/reader): unverified triage findings from 2026-07-09 whole-repo review (11 medium, 13 low) 2026-07-10 19:15:24 +00:00

Opened #499 review(mail/push): unverified triage findings from 2026-07-09 whole-repo review (12 medium, 13 low) 2026-07-10 19:15:27 +00:00

Opened #500 review(persistence): unverified triage findings from 2026-07-09 whole-repo review (10 medium, 15 low) 2026-07-10 19:15:31 +00:00

Opened #501 review(security): unverified triage findings from 2026-07-09 whole-repo review (5 medium, 12 low) 2026-07-10 19:15:35 +00:00

Opened #502 review(settings/onboarding): unverified triage findings from 2026-07-09 whole-repo review (1 medium, 12 low) 2026-07-10 19:15:39 +00:00

Opened #503 review(sync): unverified triage findings from 2026-07-09 whole-repo review (14 medium, 11 low) 2026-07-10 19:15:43 +00:00