2025-11-13 - 2026-11-13

Overview

154 Active Pull Requests
217 Active Issues
Excluding merges, 3 authors have pushed 141 commits to main and 413 commits to all branches. On main, 192 files have changed and there have been 40604 additions and 3559 deletions.

142 Pull requests merged by 1 user

Merged #431 feat(contacts): drive contacts sync from stored CardDAV accounts 2026-08-15 02:48:47 +00:00

Merged #430 fix(dav): parse multistatus with namespaces, not substrings 2026-08-15 02:46:11 +00:00

Merged #429 fix(store): survive one corrupt body on bulk read paths 2026-08-15 02:14:37 +00:00

Merged #428 fix(cal): refuse phrases the scheduler cannot resolve exactly 2026-08-15 02:04:00 +00:00

Merged #427 refactor(cli): drop the runner's dead ephemeral store 2026-08-15 01:42:49 +00:00

Merged #425 fix: fail honestly on unreadable TLS modes and mis-sized mail 2026-08-15 01:33:15 +00:00

Merged #424 fix(daemon): bound nunciod's own keyring reads 2026-08-15 01:13:58 +00:00

Merged #423 fix(test): close the store pool before salvaging its database 2026-08-15 01:13:29 +00:00

Merged #420 fix(cli): let the CLI take its gRPC token from the environment 2026-08-15 00:53:59 +00:00

Merged #418 perf(grpc): batch ListMessages placements; fix JMAP parse folder 2026-08-15 00:51:49 +00:00

Merged #417 feat(mail): mutation RPCs, typed conflicts, and the placement set 2026-08-14 23:57:56 +00:00

Merged #416 feat(imap): key messages by their server object id 2026-08-14 23:48:43 +00:00

Merged #415 docs: chart the shortest route to a hand-drivable daemon 2026-08-14 23:15:47 +00:00

Merged #414 feat(jmap): enumerate changes so deleted mail stops haunting the store 2026-08-14 22:56:48 +00:00

Merged #413 chore: placement model follow-ups (reap on repoint, claim lifetime, sync naming) 2026-08-14 22:52:41 +00:00

Merged #399 fix(filter): make filter execution single-owner per account, default off 2026-08-14 20:38:30 +00:00

Merged #385 docs(adr): record the convergent multi-engine sync model 2026-08-14 20:21:59 +00:00

Merged #398 feat(mail): capture Message-ID and a content hash at ingest 2026-08-14 20:20:57 +00:00

Merged #405 feat(store): split message identity from mailbox placements 2026-08-14 20:20:55 +00:00

Merged #403 feat(mail): report what a mutation proved, not that it was accepted 2026-08-14 20:08:37 +00:00

Merged #400 feat(store): gate the identity schema and tag sync tokens with their scheme 2026-08-14 19:55:25 +00:00

Merged #402 feat(sync): enumerate IMAP changes over a four-rung capability ladder 2026-08-14 19:55:23 +00:00

Merged #401 feat(mail): add a raw IMAP layer for ENABLE, tagged codes, and VANISHED 2026-08-14 19:38:52 +00:00

Merged #384 test(mail): stateful IMAP mock harness + fix a flaky webhook capture test 2026-08-14 19:09:51 +00:00

Merged #411 fix(test): install one global capture subscriber; delete schema migrations 2026-08-14 14:46:38 +00:00

Merged #378 feat(core): redaction policy, Redacted<T>, and no-secrets-in-logs canary 2026-08-01 01:07:03 +00:00

Merged #377 feat(cli): wire verbosity flags and render typed daemon errors 2026-08-01 00:41:50 +00:00

Merged #376 feat(proto): real GetStatus health/readiness surface 2026-08-01 00:40:52 +00:00

Merged #374 feat(mail): instrument protocol syncs and log destructive IMAP ops 2026-08-01 00:19:17 +00:00

Merged #373 fix(cal): surface dropped VEVENTs; instrument DAV syncs + store lifecycle; redact DAV config Debug 2026-08-01 00:17:45 +00:00

Merged #372 feat(nunciod): domain + lifecycle log coverage (OBS-3) 2026-07-31 23:59:44 +00:00

Merged #371 feat(nunciod): per-RPC tracing span with request-id correlation and auth logging 2026-07-31 23:39:01 +00:00

Merged #369 fix(filter): surface rule-eval timeouts and instrument engine + webhook egress 2026-07-31 23:34:51 +00:00

Merged #367 refactor(proto): model account transport as a oneof 2026-07-31 23:13:13 +00:00

Merged #368 feat(nunciod): layered tracing subscriber with EnvFilter, rotating file, and JSON 2026-07-31 23:12:16 +00:00

Merged #366 feat(nunciod): bounded-concurrency sync dispatcher with per-account timeout 2026-07-31 22:58:30 +00:00

Merged #356 feat(proto): enum hygiene for rule export format and account TLS 2026-07-31 22:28:22 +00:00

Merged #355 feat(nunciod): bound gRPC server concurrency/streams/timeout/message size 2026-07-31 22:27:03 +00:00

Merged #354 feat(store): implement contact search over contacts_fts 2026-07-31 22:05:22 +00:00

Merged #353 feat(proto): enforce id-naming law and return full config from AddAccount 2026-07-31 22:04:11 +00:00

Merged #352 feat(mail): bound IMAP fetch by batch count and per-message size 2026-07-31 21:54:38 +00:00

Merged #350 feat(proto): keyset pagination for all list/search RPCs (AIP-158) 2026-07-31 21:42:25 +00:00

Merged #349 feat(nunciod): bound outbox per-item execution with a timeout 2026-07-31 21:31:35 +00:00

Merged #348 feat(proto): unify time fields on Timestamp/Duration 2026-07-31 21:00:49 +00:00

Merged #346 feat(nunciod): single-instance advisory lock on the DB path 2026-07-31 20:55:14 +00:00

Merged #345 feat(cal): add CalendarEvent::to_ical serializer 2026-07-31 20:52:07 +00:00

Merged #344 refactor(core): remove dead EventBus ReloadFilters/unread_count arms 2026-07-31 20:38:59 +00:00

Merged #343 fix(filter): pin webhook dispatch to the checked IP to close DNS-rebind TOCTOU 2026-07-31 19:15:13 +00:00

Merged #342 feat(proto): typed errors (ErrorInfo/ErrorReason) via Status details 2026-07-31 19:12:45 +00:00

Merged #341 perf(sync): batch new-message detection to remove the is_new_message N+1 2026-07-31 19:11:05 +00:00

Merged #337 fix(store): deterministic message surrogate identity (C1) 2026-07-31 18:57:22 +00:00

Merged #340 feat(nunciod): graceful shutdown with WAL-checkpointing close 2026-07-31 18:55:17 +00:00

Merged #335 fix(core): reject cleartext Plain TLS to non-loopback hosts 2026-07-31 18:35:15 +00:00

Merged #336 fix(cli): render clean error messages instead of raw tonic::Status 2026-07-31 18:30:14 +00:00

Merged #272 feat: production-wire Calendar sync via first-class CalDAV accounts 2026-07-31 17:41:25 +00:00

Merged #270 fix(store): preserve audit tables and real TLS modes during salvage 2026-07-31 17:01:40 +00:00

Merged #269 fix(store): surface unparseable filter rules instead of dropping them 2026-07-31 16:51:22 +00:00

Merged #268 fix(store): fail export when its WORM audit write fails 2026-07-31 16:40:15 +00:00

Merged #267 fix(filter): use unique rule ids to prevent silent overwrite 2026-07-31 16:32:10 +00:00

Merged #266 fix(store): make WORM/ledger appends atomic 2026-07-31 16:22:57 +00:00

Merged #264 fix(store): fail closed on decrypt failure in decrypt_text_at_rest 2026-07-31 16:07:11 +00:00

Merged #263 feat: build the outbox remote-mutation executor (filters made live) 2026-07-31 15:55:22 +00:00

Merged #241 deps(cargo): bump rustls from 0.23.42 to 0.23.43 2026-07-31 15:53:15 +00:00

Merged #262 refactor(mail): remove fake/dead protocol code 2026-07-31 15:05:49 +00:00

Merged #261 refactor(core): remove fabricated e2ee/ai/plugin modules 2026-07-31 14:52:51 +00:00

Merged #243 fix(filter): enforce real IP/CIDR SSRF checks on webhook targets 2026-07-30 18:10:07 +00:00

Merged #242 M6: Fail closed on missing/unfetchable SHA256SUMS in the auto-updater 2026-07-30 17:55:59 +00:00

Merged #240 M6: Reject non-loopback gRPC bind addresses; consolidated auth-coverage canary 2026-07-30 16:25:32 +00:00

Merged #239 fix(store): validate WORM/ledger key length from the vault 2026-07-30 03:19:15 +00:00

Merged #238 feat(security): zeroize long-lived engine key material on drop 2026-07-30 03:10:02 +00:00

Merged #236 fix(store): fail closed on encryption failure in save_email 2026-07-30 03:00:52 +00:00

Merged #235 Promote to main: M5 (Mail lifecycle + incremental sync) 2026-07-30 03:00:46 +00:00

Merged #234 docs: mark M5 complete, set M6 as next 2026-07-30 02:51:43 +00:00

Merged #232 feat(mail): select an explicit account for SendMessage 2026-07-30 02:45:16 +00:00

Merged #231 feat(sync): incremental IMAP sync with progress + per-item FETCH timeout 2026-07-30 02:33:56 +00:00

Merged #230 M5: Account lifecycle over gRPC (edit/delete/test) + persist TLS mode 2026-07-30 01:57:56 +00:00

Merged #229 fix(accounts): roll back orphaned keyring secret on add_account failure 2026-07-30 01:12:18 +00:00

Merged #228 Promote to main: M3 (JMAP) + M4 (Filters made live) 2026-07-30 01:09:32 +00:00

Merged #227 docs: mark M1-M4 complete, set M5 as next milestone 2026-07-30 01:02:59 +00:00

Merged #226 feat(filter): add streaming Filters.Triage RPC for retroactive rescan 2026-07-30 00:54:30 +00:00

Merged #224 feat(filter): move edit/export/import/logs onto Filters gRPC service 2026-07-30 00:37:20 +00:00

Merged #223 fix(filter): correct account-field evaluation and reject header conditions 2026-07-30 00:19:37 +00:00

Merged #222 M4: Wire FilterEngine into live sync so matched rules actually fire 2026-07-30 00:11:37 +00:00

Merged #221 feat(mail): wire a real JMAP client into the mail sync path 2026-07-29 23:40:19 +00:00

Merged #220 Promote dev -> main: M1 Calendar + M2 Contacts verticals 2026-07-29 23:33:54 +00:00

Merged #218 feat(contacts): add Contacts gRPC vertical (proto, daemon, CLI, E2E) 2026-07-29 23:23:32 +00:00

Merged #217 feat(contacts): build a real CardDAV engine, replacing the fabricated client 2026-07-29 22:53:55 +00:00

Merged #215 M1: Wire RRULE recurrence expansion into calendar event queries 2026-07-29 22:35:45 +00:00

Merged #214 feat(calendar): add Calendar gRPC vertical (proto, daemon, CLI, E2E) 2026-07-29 22:19:16 +00:00

Merged #213 chore: sync rc to reconstructed dev (engine + CI + rc gating) 2026-07-29 21:51:15 +00:00

Merged #210 deps(cargo): bump icalendar from 0.15.8 to 0.17.13 2026-07-29 21:49:34 +00:00

Merged #212 fix(build): remove broken cargo verify alias; ci: gate rc branch 2026-07-29 16:40:23 +00:00

Merged #211 Promote dev → main: green CI + workflow/security cleanup 2026-07-29 16:16:53 +00:00

Merged #166 Promote rebuilt engine-first foundation (dev -> main) 2026-07-29 15:40:40 +00:00

Merged #123 deps(cargo): bump zip from 4.6.1 to 8.6.0 2026-07-23 20:37:50 +00:00

Merged #121 build(deps): bump hmac from 0.12.1 to 0.13.0 2026-07-23 20:37:47 +00:00

Merged #120 deps(npm): bump @types/react from 18.3.31 to 19.2.17 in /crates/nuncio-gui/ui 2026-07-23 20:37:44 +00:00

Merged #119 deps(npm): bump react from 18.3.1 to 19.2.8 in /crates/nuncio-gui/ui 2026-07-23 20:37:41 +00:00

Merged #116 deps(npm): bump @vitejs/plugin-react from 4.7.0 to 6.0.4 in /crates/nuncio-gui/ui 2026-07-23 20:37:36 +00:00

Merged #115 build(deps): bump quick-xml from 0.36.2 to 0.41.0 2026-07-23 20:37:33 +00:00

Merged #114 build(deps): bump async-imap from 0.9.7 to 0.11.3 2026-07-23 20:37:30 +00:00

Merged #83 build(deps): bump actions/checkout from 4 to 7 2026-07-23 20:32:19 +00:00

Merged #84 build(deps): bump softprops/action-gh-release from 2 to 3 2026-07-23 20:32:16 +00:00

Merged #85 build(deps): bump actions/setup-node from 4 to 7 2026-07-23 20:32:14 +00:00

Merged #86 build(deps): bump tauri-apps/tauri-action from 0 to 1 2026-07-23 20:32:11 +00:00

Merged #87 build(deps): bump sha2 from 0.10.9 to 0.11.0 2026-07-23 20:32:08 +00:00

Merged #88 build(deps): bump rustls-pki-types from 1.15.0 to 1.15.1 2026-07-23 20:32:05 +00:00

Merged #90 build(deps): bump age from 0.10.1 to 0.12.1 2026-07-23 20:32:01 +00:00

Merged #91 build(deps-dev): bump vite from 5.4.21 to 8.1.5 in /crates/nuncio-gui/ui in the npm_and_yarn group across 1 directory 2026-07-23 20:31:59 +00:00

Merged #92 build(deps): bump webpki-roots from 0.26.11 to 1.0.9 2026-07-23 20:31:56 +00:00

Merged #93 build(deps): bump zip from 2.4.2 to 4.6.1 2026-07-23 20:31:53 +00:00

Merged #94 build(deps): bump chrono-tz from 0.9.0 to 0.10.4 2026-07-23 20:31:50 +00:00

Merged #95 build(deps): bump html2text from 0.12.5 to 0.17.1 2026-07-23 20:31:47 +00:00

Merged #96 build(deps): bump mail-parser from 0.9.4 to 0.11.5 2026-07-23 20:31:44 +00:00

Merged #61 feat(ci): enhance release.yml workflow with SHA256 checksum generation (GH-32) 2026-07-23 00:54:30 +00:00

Merged #60 test(integration): add ephemeral_harness test for multi-account lifecycle (GH-31) 2026-07-23 00:54:10 +00:00

Merged #59 test(integration): add full offline end-to-end integration test matrix (GH-30) 2026-07-23 00:53:55 +00:00

Merged #58 feat(gui): add GuiViewState three-panel split view model (GH-29) 2026-07-23 00:53:35 +00:00

Merged #57 feat(gui): add HtmlSanitizer and nuncio-mail:// scheme asset protocol (GH-28) 2026-07-23 00:53:18 +00:00

Merged #56 feat(gui): add Tauri v2 IPC bridge and state event loop handlers (GH-27) 2026-07-23 00:53:00 +00:00

Merged #55 feat(tui): add TuiApp event loop integrating watch state streams and broadcast events (GH-26) 2026-07-23 00:52:36 +00:00

Merged #54 feat(tui): add HtmlRenderer for HTML-to-ANSI terminal text conversion (GH-25) 2026-07-23 00:52:17 +00:00

Merged #53 feat(tui): add KeybindingEngine for Vim navigation and action shortcuts (GH-24) 2026-07-23 00:51:55 +00:00

Merged #52 feat(tui): add AppLayout for 3-pane responsive terminal view (GH-23) 2026-07-23 00:51:36 +00:00

Merged #51 feat(cli): add HeadlessRunner integrating EventBus and DatabaseEngine (GH-22) 2026-07-23 00:51:13 +00:00

Merged #50 feat(cli): add JsonResponse machine output formatter and pipeline helpers (GH-21) 2026-07-23 00:50:56 +00:00

Merged #49 feat(cli): add Clap subcommand hierarchy and global argument flags (GH-20) 2026-07-23 00:50:36 +00:00

Merged #48 feat(cal): add MockCalendarBackend and wiremock CalDAV server test harness (GH-19) 2026-07-23 00:50:11 +00:00

Merged #47 feat(cal): add CalDavClient for WebDAV REPORT calendar queries (GH-18) 2026-07-23 00:49:53 +00:00

Merged #46 feat(cal): add RecurrenceEngine for RFC 5545 RRULE expansion (GH-17) 2026-07-23 00:49:33 +00:00

Merged #45 feat(cal): add IcalParserAdapter and CalendarEvent domain models (GH-16) 2026-07-23 00:49:10 +00:00

Merged #44 feat(mail): add MockMailBackend and wiremock protocol server mock infrastructure (GH-15) 2026-07-23 00:48:40 +00:00

Merged #43 feat(mail): add ImapDualSocketManager and ImapEngine for IDLE push streams (GH-14) 2026-07-23 00:48:17 +00:00

Merged #42 feat(mail): add MailBackend trait and JmapEngine protocol client (GH-13) 2026-07-23 00:47:53 +00:00

Merged #41 feat(mail): add SmtpTransportEngine using lettre async Tokio client (GH-12) 2026-07-23 00:47:31 +00:00

Merged #40 feat(mail): add MimeParserAdapter using mail-parser and bytes::Bytes (GH-11) 2026-07-23 00:47:01 +00:00

Merged #39 feat(store): add PayloadCipher for AES-256-GCM and age attachment streaming encryption (GH-10) 2026-07-23 00:45:15 +00:00

Merged #38 feat(store): add SecretManager and MockKeyring OS vault integration (GH-9) 2026-07-23 00:44:51 +00:00

Merged #37 feat(store): add SQLite FTS5 trigram search engine and sync triggers (GH-8) 2026-07-23 00:43:00 +00:00

Merged #36 feat(store): implement DatabaseEngine with SQLite WAL pragmas and schema migrations (GH-7) 2026-07-23 00:42:40 +00:00

Merged #35 feat(core): add AccountConfig model and validation schema (GH-6) 2026-07-23 00:42:15 +00:00

Merged #34 feat(core): implement EventBus channels for commands, state streams, and events (GH-5) 2026-07-23 00:36:47 +00:00

12 Pull requests proposed by 1 user

Proposed #379 deps(actions): bump github/codeql-action from 3 to 4.37.4 2026-08-03 23:16:19 +00:00

Proposed #382 deps(cargo): bump lettre from 0.11.22 to 0.11.23 2026-08-07 04:17:50 +00:00

Proposed #383 deps(cargo): bump clap from 4.6.4 to 4.6.6 2026-08-10 04:28:08 +00:00

Proposed #404 deps(cargo): bump async-trait from 0.1.91 to 0.1.92 2026-08-12 04:16:53 +00:00

Proposed #432 deps(cargo): bump futures from 0.3.33 to 0.3.34 2026-08-17 04:26:23 +00:00

Proposed #434 deps(cargo): bump aes-gcm from 0.10.3 to 0.11.1 2026-08-25 04:11:04 +00:00

Proposed #435 deps(cargo): bump quick-xml from 0.41.0 to 0.42.0 2026-08-26 04:14:50 +00:00

Proposed #436 deps(cargo): bump mail-parser from 0.9.4 to 0.11.8 2026-08-26 04:15:00 +00:00

Proposed #437 deps(cargo): bump flate2 from 1.1.9 to 1.1.10 2026-09-01 04:22:21 +00:00

Proposed #438 deps(cargo): bump keyring from 2.3.3 to 4.2.0 2026-09-02 04:13:41 +00:00

Proposed #439 deps(cargo): bump tokio-rustls from 0.26.4 to 0.26.5 2026-09-08 04:14:06 +00:00

Proposed #440 Qualify central Gitea Gradle and Rust CI 2026-10-31 12:43:01 +00:00

144 Issues closed from 1 user

Closed #255 M6.5 [P1]: Production-wire Contacts sync (per-account CardDAV config + real client) 2026-08-15 02:49:12 +00:00

Closed #257 M6.5 [P2]: DAV clients need real namespace-aware XML parsing (stop substring split + silent drops) 2026-08-15 02:49:10 +00:00

Closed #265 M6.5 [P2]: Graceful bulk-path handling when one stored body is corrupted 2026-08-15 02:14:51 +00:00

Closed #258 M6.5 [P2]: NaturalLanguageScheduler silently returns wrong times - parse genuinely or delete 2026-08-15 02:04:16 +00:00

Closed #256 M6.5 [P2]: Filter size field is wrong for HTML-only mail 2026-08-15 01:33:32 +00:00

Closed #271 M6.5 [P2]: tls_mode_from_db silently falls back to ImplicitTls on the normal read path 2026-08-15 01:33:30 +00:00

Closed #421 nunciod hangs at startup if its keyring read blocks 2026-08-15 01:14:18 +00:00

Closed #422 Flaky: salvage returns SQLITE_IOERR_SHORT_READ when the fixture pool is not closed 2026-08-15 01:14:16 +00:00

Closed #419 nuncio-cli hangs forever reading the gRPC token in non-interactive sessions 2026-08-15 00:54:38 +00:00

Closed #339 JMAP parse_email_get_response hardcodes folder_id='inbox' (mislabels non-inbox mailboxes) 2026-08-15 00:54:36 +00:00

Closed #395 proto: mutation RPCs, durable conflicts, and DAV conditional write-back 2026-08-14 23:58:10 +00:00

Closed #407 sync: IMAP and JMAP derive disjoint message keys, so engines do not converge across types 2026-08-14 23:48:45 +00:00

Closed #375 Convert nuncio-filter hand-rolled test subscriber to tracing-test (flaky callsite-Interest race) 2026-08-14 22:57:49 +00:00

Closed #408 jmap: implement Email/changes so JMAP accounts stop accumulating ghost messages 2026-08-14 22:57:30 +00:00

Closed #410 mail: housekeeping left by the placement split (naming, mbox header, UID guard) 2026-08-14 22:57:28 +00:00

Closed #409 filter: decide the reaping policy for the filter_fired claim ledger 2026-08-14 22:57:27 +00:00

Closed #406 store: repointing a placement orphans its message row and strands plaintext in FTS 2026-08-14 22:57:25 +00:00

Closed #363 OBS-7 Redaction policy + Redacted<T> newtype + no-secrets-in-logs canary 2026-08-01 01:07:05 +00:00

Closed #365 OBS-9 CLI observability: wire -v/-vv + typed ErrorInfo rendering + RUNNING.md log docs 2026-08-01 00:41:52 +00:00

Closed #330 WS-F10 [PROTO] Ops: System.GetHealth RPC + system health CLI (de-dup with WS-C8) 2026-08-01 00:40:56 +00:00

Closed #364 OBS-8 [PROTO] Real GetStatus health surface (uptime/sync_state/outbox_depth/last_error + counters) 2026-08-01 00:40:54 +00:00

Closed #361 OBS-5 Mail protocol instrumentation + destructive-op pre-logging 2026-08-01 00:19:19 +00:00

Closed #362 OBS-6 Cal/Contacts/Store instrumentation + VEVENT-drop FIX + DAV Debug redaction 2026-08-01 00:17:48 +00:00

Closed #359 OBS-3 Daemon handler + lifecycle log coverage 2026-07-31 23:59:47 +00:00

Closed #358 OBS-2 Per-RPC span + request_id correlation + auth accept/reject logging 2026-07-31 23:39:04 +00:00

Closed #360 OBS-4 Filter engine instrumentation + silent eval-timeout FIX 2026-07-31 23:34:54 +00:00

Closed #278 WS-A6 [PROTO] AccountConfig oneof transport { ImapSmtp | Jmap | Dav } 2026-07-31 23:13:15 +00:00

Closed #357 OBS-1 Subscriber foundation: layered Registry + EnvFilter + rotating file + JSON 2026-07-31 23:12:19 +00:00

Closed #292 WS-C4 Bounded-concurrency sync dispatcher + per-account timeout (fixes serialized head-of-line) 2026-07-31 22:58:32 +00:00

Closed #326 WS-F6 Ops: structured, leveled, secret-safe logging in nunciod 2026-07-31 22:41:11 +00:00

Closed #277 WS-A5 [PROTO] Enum hygiene: RuleExportFormat enum; drop redundant use_tls 2026-07-31 22:28:25 +00:00

Closed #304 WS-D8 gRPC server concurrency/stream/timeout limits 2026-07-31 22:27:05 +00:00

Closed #318 WS-E10 SearchEngine::search_contacts (contacts_fts table + triggers already exist, unused) 2026-07-31 22:05:24 +00:00

Closed #276 WS-A4 [PROTO] Id conventions: opaque ids, id vs <noun>_id naming, AddAccountResponse returns full config 2026-07-31 22:04:14 +00:00

Closed #301 WS-D5 Bounded/paged IMAP fetch with per-message + per-batch size caps (use RFC822.SIZE) 2026-07-31 21:54:40 +00:00

Closed #275 WS-A3 [PROTO] Keyset pagination on every list/search (AIP-158 page_size/page_token/next_page_token) 2026-07-31 21:42:27 +00:00

Closed #290 WS-C2 Outbox per-item timeout (hung mutation -> Retry, cannot freeze all accounts) 2026-07-31 21:31:38 +00:00

Closed #274 WS-A2 [PROTO] Timestamps: all wall-clock -> google.protobuf.Timestamp, durations -> Duration 2026-07-31 21:00:51 +00:00

Closed #291 WS-C3 Single-instance advisory lock keyed on DB path 2026-07-31 20:55:16 +00:00

Closed #310 WS-E2 CalendarEvent::to_ical() serializer + round-trip (the one missing serializer) 2026-07-31 20:52:09 +00:00

Closed #324 WS-F4 Hygiene: EventBus dead-arm cleanup (unread_count nothing reads, ReloadFilters no-op) 2026-07-31 20:39:01 +00:00

Closed #306 WS-D10 Pin resolved IP for webhook dispatch to close the DNS-rebind TOCTOU 2026-07-31 19:15:55 +00:00

Closed #273 WS-A1 [PROTO] Typed errors: ErrorInfo message + frozen ErrorReason enum via Status details 2026-07-31 19:12:47 +00:00

Closed #325 WS-F5 Hygiene: kill is_new_message N+1 SELECT-per-message in sync 2026-07-31 19:11:07 +00:00

Closed #281 WS-B1 Message identity: deterministic surrogate id + remote_id/uid_validity columns (C1 fix) [GATE] 2026-07-31 18:57:25 +00:00

Closed #289 WS-C1 Graceful shutdown: signal -> serve_with_shutdown -> drain -> db.close() WAL checkpoint 2026-07-31 18:55:20 +00:00

Closed #297 WS-D1 Reject TlsMode::Plain to non-loopback hosts (quick win, ship first) 2026-07-31 18:35:18 +00:00

Closed #321 WS-F1 CLI: render Status.message() not the raw tonic::Status Debug dump (~28 sites) 2026-07-31 18:30:16 +00:00

Closed #254 M6.5 [P1]: Production-wire Calendar sync (per-account CalDAV config + real client) 2026-07-31 17:41:27 +00:00

Closed #248 M6 [P1]: Salvage recovers audit/ledger tables + stops silently downgrading TLS mode 2026-07-31 17:01:43 +00:00

Closed #247 M6 [P1]: Filter-rule load must not silently drop unparseable rules 2026-07-31 16:51:24 +00:00

Closed #246 M6 [P1]: Export must not report success when its WORM audit write fails 2026-07-31 16:40:18 +00:00

Closed #249 M6 [P1]: Prevent deterministic rule-ID collisions (silent overwrite on CreateRule) 2026-07-31 16:32:12 +00:00

Closed #245 M6 [P1]: WORM/ledger append is non-atomic — serialize the hash-chain writes 2026-07-31 16:23:00 +00:00

Closed #237 decrypt_text_at_rest silently returns empty string on decrypt/decode failure (read path) 2026-07-31 16:07:13 +00:00

Closed #252 M6.5 [P0]: Build the outbox remote-mutation executor (filters made fully live) 2026-07-31 15:55:24 +00:00

Closed #253 M6.5 [P0]: Remove fake/dead protocol code (orphaned dup CardDAV; credential-less fake-data mail paths) 2026-07-31 15:05:52 +00:00

Closed #244 M6 [P0]: Delete fabricated e2ee/ai/plugin modules (fake crypto verification) 2026-07-31 14:52:54 +00:00

Closed #203 M6: Replace webhook SSRF substring blocklist with real IP/CIDR + DNS-resolution checks 2026-07-30 18:10:09 +00:00

Closed #202 M6: Fail closed on missing/unfetchable SHA256SUMS in the auto-updater 2026-07-30 17:56:01 +00:00

Closed #201 M6: Reject non-loopback gRPC bind addresses; add a consolidated auth-coverage canary test 2026-07-30 16:25:35 +00:00

Closed #200 M6: Validate WORM/ledger key length from the vault, fail closed on mismatch 2026-07-30 03:19:17 +00:00

Closed #199 M6: Zeroize long-lived engine key material on drop 2026-07-30 03:10:04 +00:00

Closed #198 M6: Fail closed on encryption failure in PayloadCipher::encrypt_text_at_rest 2026-07-30 03:00:55 +00:00

Closed #196 M5: SendMessage selects an explicit account instead of the first configured 2026-07-30 02:45:19 +00:00

Closed #195 M5: Incremental IMAP sync with progress reporting and per-item FETCH timeout 2026-07-30 02:33:58 +00:00

Closed #194 M5: Account lifecycle over gRPC (edit/delete/test) + persist TLS mode 2026-07-30 01:57:58 +00:00

Closed #197 M5: Roll back orphaned keyring secret when AddAccount fails to persist 2026-07-30 01:12:20 +00:00

Closed #193 M4 [PROTO]: Re-expose bulk filter triage as a streaming Filters RPC 2026-07-30 00:54:32 +00:00

Closed #192 M4 [PROTO]: Move filter edit/export/import/logs onto the Filters gRPC service 2026-07-30 00:37:22 +00:00

Closed #191 M4: Fix filter header-field and account-field evaluation bugs 2026-07-30 00:19:39 +00:00

Closed #190 M4: Wire FilterEngine into live sync so matched rules actually fire 2026-07-30 00:03:53 +00:00

Closed #189 M3: Real JMAP client wired into the existing Mail sync path 2026-07-29 23:40:21 +00:00

Closed #188 M2: Add Contacts API vertical (proto, daemon, CLI, E2E) 2026-07-29 23:23:34 +00:00

Closed #187 M2: Build a real Contacts (CardDAV) engine, replacing the fabricated client 2026-07-29 22:53:57 +00:00

Closed #186 M1: Wire RRULE recurrence expansion into calendar event queries 2026-07-29 22:35:47 +00:00

Closed #185 M1: Add Calendar API vertical (proto, daemon, CLI, E2E) 2026-07-29 22:19:18 +00:00

Closed #143 0.C.3 Replace the 100% coverage gate 2026-07-28 14:06:26 +00:00

Closed #165 gRPC hardening: warn/validate on non-loopback bind; guard future services with interceptor 2026-07-28 14:06:24 +00:00

Closed #164 Validate WORM/ledger key length loaded from vault 2026-07-28 14:06:23 +00:00

Closed #163 Zeroize engine key material on drop 2026-07-28 14:06:21 +00:00

Closed #162 cipher: encrypt_text_at_rest silently stores empty ciphertext on failure (data loss) 2026-07-28 14:06:20 +00:00

Closed #169 AddAccount: avoid orphaned keyring entry if save_account fails after set_secret 2026-07-28 14:06:18 +00:00

Closed #170 Mail.SendMessage: select account explicitly (currently uses first configured) 2026-07-28 14:06:17 +00:00

Closed #184 ImapEngine ignores since_state: every sync is a full historical re-fetch, not incremental 2026-07-28 14:06:15 +00:00

Closed #181 filter: WHERE 'account =' condition matches folder_id, not account_id 2026-07-28 14:06:09 +00:00

Closed #176 Re-expose bulk filter triage over gRPC (lost with the JSON-RPC IPC) 2026-07-28 14:06:08 +00:00

Closed #175 Move filter edit/export/import/logs to gRPC (Filters service) 2026-07-28 14:06:06 +00:00

Closed #180 3.D Real JMAP HTTP client + camelCase fix 2026-07-28 14:06:04 +00:00

Closed #179 3.C Real CardDAV sync + vCard round-trip 2026-07-28 14:06:02 +00:00

Closed #178 3.B Real CalDAV transport + TZID fix + rrule recurrence 2026-07-28 14:06:00 +00:00

Closed #177 3.A Filter-engine correctness (scoping, ON ACCOUNT, non-ASCII offsets, NOT IN) 2026-07-27 13:30:21 +00:00

Closed #174 2.D Publish proto contract + SDK stubs + contract tests 2026-07-27 13:30:19 +00:00

Closed #173 2.C Retire the legacy hand-rolled JSON-RPC IPC 2026-07-27 12:45:46 +00:00

Closed #172 2.B Export + WORM audit gRPC services 2026-07-27 12:09:46 +00:00

Closed #171 2.A Filters gRPC service (migrate filter.* off JSON-RPC) 2026-07-27 10:39:13 +00:00

Closed #161 1.C.6 Mock protocol server harness 2026-07-27 06:27:03 +00:00

Closed #168 Account model: carry a separate SMTP endpoint (host/port) 2026-07-27 06:02:25 +00:00

Closed #160 1.C.5 Real SMTP send via outbox 2026-07-27 06:02:23 +00:00

Closed #159 1.C.4 Read path over gRPC 2026-07-27 05:24:57 +00:00

Closed #158 1.C.3 Real IMAP fetch to store loop 2026-07-27 04:58:36 +00:00

Closed #157 1.C.2 Account setup + credentials in keyring 2026-07-27 04:38:36 +00:00

Closed #156 1.C.1 Persistent DB path 2026-07-27 04:38:35 +00:00

Closed #155 1.B.4 Transient error is not corruption 2026-07-27 04:02:55 +00:00

Closed #154 1.B.3 Fix salvage schema mismatch 2026-07-27 04:02:54 +00:00

Closed #153 1.B.2 FTS backfill at migration 2026-07-27 03:27:46 +00:00

Closed #152 1.B.1 FTS-vs-encryption strategy 2026-07-27 03:27:45 +00:00

Closed #151 1.A.4 Events server-streaming RPC 2026-07-27 03:18:53 +00:00

Closed #150 1.A.3 CLI becomes a gRPC client 2026-07-27 03:06:31 +00:00

Closed #149 1.A.2 Authenticated gRPC daemon server 2026-07-27 02:39:28 +00:00

Closed #148 1.A.1 Proto skeleton + tonic build 2026-07-27 02:15:08 +00:00

Closed #145 0.D.2 Move UI crates to _reference/ 2026-07-27 02:02:36 +00:00

Closed #144 0.D.1 Extract API-surface draft from MCP tools 2026-07-27 01:48:31 +00:00

Closed #142 0.C.2 Align CI to the local gate 2026-07-27 01:38:54 +00:00

Closed #140 0.B.2 Disable fail-open auto-updater 2026-07-27 01:38:53 +00:00

Closed #147 0.E.2 Implement real OS keyring vault 2026-07-27 01:28:25 +00:00

Closed #146 0.E.1 Purge hardcoded crypto keys 2026-07-27 01:28:24 +00:00

Closed #141 0.C.1 Clear the clippy backlog / adopt green baseline 2026-07-27 01:23:23 +00:00

Closed #139 0.B.1 Mark public releases pre-alpha 2026-07-27 01:23:22 +00:00

Closed #138 0.A.3 Rewrite README to honest pre-alpha 2026-07-27 01:23:20 +00:00

Closed #137 0.A.2 Rewrite CLAUDE.md to reality 2026-07-27 01:23:19 +00:00

Closed #136 0.A.1 Remove fabricated docs 2026-07-27 01:23:17 +00:00

Closed #4 Phase 4: Native Desktop GUI Shell & Cross-Platform Packaging 2026-07-23 18:03:11 +00:00

Closed #3 Phase 3: Terminal User Interface (Ratatui TUI Shell) 2026-07-23 18:03:09 +00:00

Closed #2 Phase 2: Protocol Engine Libraries (IMAP IDLE, JMAP, CalDAV) 2026-07-23 18:03:08 +00:00

Closed #1 Phase 1: Core Engine & SQLite FTS5 Local Storage 2026-07-23 18:03:06 +00:00

Closed #22 M4.3: Headless CLI E2E Integration Suite 2026-07-23 00:51:14 +00:00

Closed #21 M4.2: JSON Pipeline Output Formatting (--json) 2026-07-23 00:50:57 +00:00

Closed #20 M4.1: CLI Subcommand Parser (clap v4) 2026-07-23 00:50:37 +00:00

Closed #19 M3.4: CalDAV Server Mocks (wiremock) 2026-07-23 00:50:12 +00:00

Closed #18 M3.3: CalDAV REPORT Client (reqwest + quick-xml) 2026-07-23 00:49:54 +00:00

Closed #17 M3.2: Recurrence Expansion Engine (rrule finite window math) 2026-07-23 00:49:34 +00:00

Closed #16 M3.1: iCal/vCard to JSCalendar Parser (calcard) 2026-07-23 00:49:11 +00:00

Closed #15 M2.5: Protocol Server Mocks (wiremock & MockMailBackend) 2026-07-23 00:48:40 +00:00

Closed #14 M2.4: IMAP IDLE Dual-Socket Manager (async-imap IDLE push stream) 2026-07-23 00:48:18 +00:00

Closed #13 M2.3: JMAP Client Protocol Engine (jmap-client Email/changes) 2026-07-23 00:47:54 +00:00

Closed #12 M2.2: Outbound SMTP Transport (lettre async Tokio client) 2026-07-23 00:47:32 +00:00

Closed #11 M2.1: Zero-Copy MIME Parser (mail-parser & bytes::Bytes) 2026-07-23 00:47:02 +00:00

Closed #10 M1.6: Attachment Blob Encryption (age & AES-GCM) 2026-07-23 00:45:16 +00:00

Closed #9 M1.5: OS Vault Integration (keyring) & Fallback 2026-07-23 00:44:52 +00:00

Closed #8 M1.4: SQLite FTS5 Trigram Indexing & Triggers 2026-07-23 00:43:01 +00:00

Closed #7 M1.3: SQLite Engine & WAL Migrations (sqlx) 2026-07-23 00:42:41 +00:00

Closed #6 M1.2: Account & Configuration Schema (AccountConfig) 2026-07-23 00:42:15 +00:00

Closed #5 M1.1: Event Bus Channels (CoreCommand, CoreEvent, mpsc, watch) 2026-07-23 00:36:47 +00:00

217 Issues created by 1 user

Opened #1 Phase 1: Core Engine & SQLite FTS5 Local Storage 2026-07-22 21:31:46 +00:00

Opened #2 Phase 2: Protocol Engine Libraries (IMAP IDLE, JMAP, CalDAV) 2026-07-22 21:31:49 +00:00

Opened #3 Phase 3: Terminal User Interface (Ratatui TUI Shell) 2026-07-22 21:31:52 +00:00

Opened #4 Phase 4: Native Desktop GUI Shell & Cross-Platform Packaging 2026-07-22 21:31:55 +00:00

Opened #5 M1.1: Event Bus Channels (CoreCommand, CoreEvent, mpsc, watch) 2026-07-23 00:18:15 +00:00

Opened #6 M1.2: Account & Configuration Schema (AccountConfig) 2026-07-23 00:18:16 +00:00

Opened #7 M1.3: SQLite Engine & WAL Migrations (sqlx) 2026-07-23 00:18:17 +00:00

Opened #8 M1.4: SQLite FTS5 Trigram Indexing & Triggers 2026-07-23 00:18:18 +00:00

Opened #9 M1.5: OS Vault Integration (keyring) & Fallback 2026-07-23 00:18:19 +00:00

Opened #10 M1.6: Attachment Blob Encryption (age & AES-GCM) 2026-07-23 00:18:20 +00:00

Opened #11 M2.1: Zero-Copy MIME Parser (mail-parser & bytes::Bytes) 2026-07-23 00:23:29 +00:00

Opened #12 M2.2: Outbound SMTP Transport (lettre async Tokio client) 2026-07-23 00:23:30 +00:00

Opened #13 M2.3: JMAP Client Protocol Engine (jmap-client Email/changes) 2026-07-23 00:23:31 +00:00

Opened #14 M2.4: IMAP IDLE Dual-Socket Manager (async-imap IDLE push stream) 2026-07-23 00:23:33 +00:00

Opened #15 M2.5: Protocol Server Mocks (wiremock & MockMailBackend) 2026-07-23 00:23:34 +00:00

Opened #16 M3.1: iCal/vCard to JSCalendar Parser (calcard) 2026-07-23 00:23:35 +00:00

Opened #17 M3.2: Recurrence Expansion Engine (rrule finite window math) 2026-07-23 00:23:36 +00:00

Opened #18 M3.3: CalDAV REPORT Client (reqwest + quick-xml) 2026-07-23 00:23:37 +00:00

Opened #19 M3.4: CalDAV Server Mocks (wiremock) 2026-07-23 00:23:38 +00:00

Opened #20 M4.1: CLI Subcommand Parser (clap v4) 2026-07-23 00:23:39 +00:00

Opened #21 M4.2: JSON Pipeline Output Formatting (--json) 2026-07-23 00:23:41 +00:00

Opened #22 M4.3: Headless CLI E2E Integration Suite 2026-07-23 00:23:42 +00:00

Opened #79 Epic: OpenPGP (RFC 3156) & S/MIME (RFC 8551) End-to-End Encryption 2026-07-23 20:22:00 +00:00

Opened #80 Epic: WASM & QuickJS Sandboxed Plugin Runtime Engine 2026-07-23 20:22:04 +00:00

Opened #81 Epic: Autonomous Local LLM Email Summarization & Action Triage Engine 2026-07-23 20:22:08 +00:00

Opened #136 0.A.1 Remove fabricated docs 2026-07-27 00:26:14 +00:00

Opened #137 0.A.2 Rewrite CLAUDE.md to reality 2026-07-27 00:26:15 +00:00

Opened #138 0.A.3 Rewrite README to honest pre-alpha 2026-07-27 00:26:17 +00:00

Opened #139 0.B.1 Mark public releases pre-alpha 2026-07-27 00:26:18 +00:00

Opened #140 0.B.2 Disable fail-open auto-updater 2026-07-27 00:26:19 +00:00

Opened #141 0.C.1 Clear the clippy backlog / adopt green baseline 2026-07-27 00:26:20 +00:00

Opened #142 0.C.2 Align CI to the local gate 2026-07-27 00:26:22 +00:00

Opened #143 0.C.3 Replace the 100% coverage gate 2026-07-27 00:26:23 +00:00

Opened #144 0.D.1 Extract API-surface draft from MCP tools 2026-07-27 00:26:24 +00:00

Opened #145 0.D.2 Move UI crates to _reference/ 2026-07-27 00:26:25 +00:00

Opened #146 0.E.1 Purge hardcoded crypto keys 2026-07-27 00:26:26 +00:00

Opened #147 0.E.2 Implement real OS keyring vault 2026-07-27 00:26:27 +00:00

Opened #148 1.A.1 Proto skeleton + tonic build 2026-07-27 00:26:29 +00:00

Opened #149 1.A.2 Authenticated gRPC daemon server 2026-07-27 00:26:31 +00:00

Opened #150 1.A.3 CLI becomes a gRPC client 2026-07-27 00:26:32 +00:00

Opened #151 1.A.4 Events server-streaming RPC 2026-07-27 00:26:34 +00:00

Opened #152 1.B.1 FTS-vs-encryption strategy 2026-07-27 00:26:35 +00:00

Opened #153 1.B.2 FTS backfill at migration 2026-07-27 00:26:36 +00:00

Opened #154 1.B.3 Fix salvage schema mismatch 2026-07-27 00:26:37 +00:00

Opened #155 1.B.4 Transient error is not corruption 2026-07-27 00:26:39 +00:00

Opened #156 1.C.1 Persistent DB path 2026-07-27 00:26:41 +00:00

Opened #157 1.C.2 Account setup + credentials in keyring 2026-07-27 00:26:42 +00:00

Opened #158 1.C.3 Real IMAP fetch to store loop 2026-07-27 00:26:43 +00:00

Opened #159 1.C.4 Read path over gRPC 2026-07-27 00:26:44 +00:00

Opened #160 1.C.5 Real SMTP send via outbox 2026-07-27 00:26:46 +00:00

Opened #161 1.C.6 Mock protocol server harness 2026-07-27 00:26:47 +00:00

Opened #162 cipher: encrypt_text_at_rest silently stores empty ciphertext on failure (data loss) 2026-07-27 01:28:26 +00:00

Opened #163 Zeroize engine key material on drop 2026-07-27 01:28:28 +00:00

Opened #164 Validate WORM/ledger key length loaded from vault 2026-07-27 01:28:29 +00:00

Opened #165 gRPC hardening: warn/validate on non-loopback bind; guard future services with interceptor 2026-07-27 02:39:30 +00:00

Opened #168 Account model: carry a separate SMTP endpoint (host/port) 2026-07-27 04:38:38 +00:00

Opened #169 AddAccount: avoid orphaned keyring entry if save_account fails after set_secret 2026-07-27 04:38:39 +00:00

Opened #170 Mail.SendMessage: select account explicitly (currently uses first configured) 2026-07-27 06:02:26 +00:00

Opened #171 2.A Filters gRPC service (migrate filter.* off JSON-RPC) 2026-07-27 10:12:04 +00:00

Opened #172 2.B Export + WORM audit gRPC services 2026-07-27 10:12:06 +00:00

Opened #173 2.C Retire the legacy hand-rolled JSON-RPC IPC 2026-07-27 10:12:08 +00:00

Opened #174 2.D Publish proto contract + SDK stubs + contract tests 2026-07-27 10:12:09 +00:00

Opened #175 Move filter edit/export/import/logs to gRPC (Filters service) 2026-07-27 10:39:14 +00:00

Opened #176 Re-expose bulk filter triage over gRPC (lost with the JSON-RPC IPC) 2026-07-27 12:45:47 +00:00

Opened #177 3.A Filter-engine correctness (scoping, ON ACCOUNT, non-ASCII offsets, NOT IN) 2026-07-27 13:11:52 +00:00

Opened #178 3.B Real CalDAV transport + TZID fix + rrule recurrence 2026-07-27 13:11:53 +00:00

Opened #179 3.C Real CardDAV sync + vCard round-trip 2026-07-27 13:11:54 +00:00

Opened #180 3.D Real JMAP HTTP client + camelCase fix 2026-07-27 13:11:55 +00:00

Opened #181 filter: WHERE 'account =' condition matches folder_id, not account_id 2026-07-27 13:30:22 +00:00

Opened #184 ImapEngine ignores since_state: every sync is a full historical re-fetch, not incremental 2026-07-27 19:32:39 +00:00

Opened #185 M1: Add Calendar API vertical (proto, daemon, CLI, E2E) 2026-07-28 14:04:20 +00:00

Opened #186 M1: Wire RRULE recurrence expansion into calendar event queries 2026-07-28 14:04:22 +00:00

Opened #187 M2: Build a real Contacts (CardDAV) engine, replacing the fabricated client 2026-07-28 14:04:23 +00:00

Opened #188 M2: Add Contacts API vertical (proto, daemon, CLI, E2E) 2026-07-28 14:04:25 +00:00

Opened #189 M3: Real JMAP client wired into the existing Mail sync path 2026-07-28 14:04:27 +00:00

Opened #190 M4: Wire FilterEngine into live sync so matched rules actually fire 2026-07-28 14:04:28 +00:00

Opened #191 M4: Fix filter header-field and account-field evaluation bugs 2026-07-28 14:04:30 +00:00

Opened #192 M4 [PROTO]: Move filter edit/export/import/logs onto the Filters gRPC service 2026-07-28 14:04:32 +00:00

Opened #193 M4 [PROTO]: Re-expose bulk filter triage as a streaming Filters RPC 2026-07-28 14:04:33 +00:00

Opened #194 M5: Account lifecycle over gRPC (edit/delete/test) + persist TLS mode 2026-07-28 14:04:35 +00:00

Opened #195 M5: Incremental IMAP sync with progress reporting and per-item FETCH timeout 2026-07-28 14:04:37 +00:00

Opened #196 M5: SendMessage selects an explicit account instead of the first configured 2026-07-28 14:04:38 +00:00

Opened #197 M5: Roll back orphaned keyring secret when AddAccount fails to persist 2026-07-28 14:04:40 +00:00

Opened #198 M6: Fail closed on encryption failure in PayloadCipher::encrypt_text_at_rest 2026-07-28 14:04:42 +00:00

Opened #199 M6: Zeroize long-lived engine key material on drop 2026-07-28 14:04:43 +00:00

Opened #200 M6: Validate WORM/ledger key length from the vault, fail closed on mismatch 2026-07-28 14:04:45 +00:00

Opened #201 M6: Reject non-loopback gRPC bind addresses; add a consolidated auth-coverage canary test 2026-07-28 14:04:47 +00:00

Opened #202 M6: Fail closed on missing/unfetchable SHA256SUMS in the auto-updater 2026-07-28 14:04:48 +00:00

Opened #203 M6: Replace webhook SSRF substring blocklist with real IP/CIDR + DNS-resolution checks 2026-07-28 14:04:50 +00:00

Opened #204 M6: Sanitize inbound HTML email bodies before they leave the engine 2026-07-28 14:04:52 +00:00

Opened #205 M7: Enforce full-surface contract coverage and an additive-only v1 policy in nuncio-proto 2026-07-28 14:04:54 +00:00

Opened #206 M7: Verified Swift/C#/TypeScript codegen with minimal connect+GetStatus examples 2026-07-28 14:04:55 +00:00

Opened #207 M7: CLI RPC coverage matrix — prove every nuncio.v1 RPC has an offline CLI-driven E2E 2026-07-28 14:04:57 +00:00

Opened #208 M7: Replace the informational coverage job with an engine-crate gate + a required E2E CI job 2026-07-28 14:04:59 +00:00

Opened #209 M7: Fix the broken release pipelines and tag an honest pre-alpha backend release 2026-07-28 14:05:01 +00:00

Opened #216 calendar: recurrence overlap-windowing + unify is-recurring predicate (low) 2026-07-29 22:35:43 +00:00

Opened #219 contacts: low-severity follow-ups from M2-S2 review (guards, id uniqueness, CLI wording) 2026-07-29 23:23:35 +00:00

Opened #225 filter edit silently re-enables disabled rules and resets created_at 2026-07-30 00:37:46 +00:00

Opened #233 M5 review follow-ups: sync/SMTP robustness polish 2026-07-30 02:45:49 +00:00

Opened #237 decrypt_text_at_rest silently returns empty string on decrypt/decode failure (read path) 2026-07-30 03:00:56 +00:00

Opened #244 M6 [P0]: Delete fabricated e2ee/ai/plugin modules (fake crypto verification) 2026-07-31 14:40:25 +00:00

Opened #245 M6 [P1]: WORM/ledger append is non-atomic — serialize the hash-chain writes 2026-07-31 14:40:26 +00:00

Opened #246 M6 [P1]: Export must not report success when its WORM audit write fails 2026-07-31 14:40:28 +00:00

Opened #247 M6 [P1]: Filter-rule load must not silently drop unparseable rules 2026-07-31 14:40:29 +00:00

Opened #248 M6 [P1]: Salvage recovers audit/ledger tables + stops silently downgrading TLS mode 2026-07-31 14:40:30 +00:00

Opened #249 M6 [P1]: Prevent deterministic rule-ID collisions (silent overwrite on CreateRule) 2026-07-31 14:40:31 +00:00

Opened #250 M6 [P2]: CodeQL scans JS/actions only — add Rust static analysis and require it on main 2026-07-31 14:40:32 +00:00

Opened #251 M6 [P2]: Remove test theater (assertion-free backend tests; serve-result-swallowing test) 2026-07-31 14:40:34 +00:00

Opened #252 M6.5 [P0]: Build the outbox remote-mutation executor (filters made fully live) 2026-07-31 14:42:45 +00:00

Opened #253 M6.5 [P0]: Remove fake/dead protocol code (orphaned dup CardDAV; credential-less fake-data mail paths) 2026-07-31 14:42:47 +00:00

Opened #254 M6.5 [P1]: Production-wire Calendar sync (per-account CalDAV config + real client) 2026-07-31 14:42:48 +00:00

Opened #255 M6.5 [P1]: Production-wire Contacts sync (per-account CardDAV config + real client) 2026-07-31 14:42:50 +00:00

Opened #256 M6.5 [P2]: Filter size field is wrong for HTML-only mail 2026-07-31 14:42:51 +00:00

Opened #257 M6.5 [P2]: DAV clients need real namespace-aware XML parsing (stop substring split + silent drops) 2026-07-31 14:42:53 +00:00

Opened #258 M6.5 [P2]: NaturalLanguageScheduler silently returns wrong times - parse genuinely or delete 2026-07-31 14:42:54 +00:00

Opened #259 M6.5 [P2]: CLI polish - dead ephemeral DB, missing commands, self-update exception 2026-07-31 14:42:55 +00:00

Opened #260 M6.5 [P2]: Audit minor cleanups (dead code, no-op command, weak UUIDs, non-atomic provision) 2026-07-31 14:42:57 +00:00

Opened #265 M6.5 [P2]: Graceful bulk-path handling when one stored body is corrupted 2026-07-31 16:07:15 +00:00

Opened #271 M6.5 [P2]: tls_mode_from_db silently falls back to ImplicitTls on the normal read path 2026-07-31 17:01:45 +00:00

Opened #273 WS-A1 [PROTO] Typed errors: ErrorInfo message + frozen ErrorReason enum via Status details 2026-07-31 18:12:40 +00:00

Opened #274 WS-A2 [PROTO] Timestamps: all wall-clock -> google.protobuf.Timestamp, durations -> Duration 2026-07-31 18:12:42 +00:00

Opened #275 WS-A3 [PROTO] Keyset pagination on every list/search (AIP-158 page_size/page_token/next_page_token) 2026-07-31 18:12:43 +00:00

Opened #276 WS-A4 [PROTO] Id conventions: opaque ids, id vs <noun>_id naming, AddAccountResponse returns full config 2026-07-31 18:12:45 +00:00

Opened #277 WS-A5 [PROTO] Enum hygiene: RuleExportFormat enum; drop redundant use_tls 2026-07-31 18:12:46 +00:00

Opened #278 WS-A6 [PROTO] AccountConfig oneof transport { ImapSmtp | Jmap | Dav } 2026-07-31 18:12:48 +00:00

Opened #279 WS-A7 Error-code correctness pass (internal -> failed_precondition/unavailable/unimplemented; Triage rule_id -> UNIMPLEMENTED) 2026-07-31 18:12:49 +00:00

Opened #280 WS-A8 Freeze-policy + CRUD-roadmap docs (additive-only-after-freeze, golden guards full surface) 2026-07-31 18:12:51 +00:00

Opened #281 WS-B1 Message identity: deterministic surrogate id + remote_id/uid_validity columns (C1 fix) [GATE] 2026-07-31 18:12:53 +00:00

Opened #282 WS-B2 [PROTO] Multi-recipient model: EmailAddress from/to/cc/bcc/reply_to (parser->store->proto->send) 2026-07-31 18:12:54 +00:00

Opened #283 WS-B3 [PROTO] Message flags: MessageFlag set + Mail.SetFlags (replaces read bool / MarkRead) 2026-07-31 18:12:55 +00:00

Opened #284 WS-B4 [PROTO] Threading: parse+store message_id/in_reply_to/references + thread_id; reply headers on send 2026-07-31 18:12:57 +00:00

Opened #285 WS-B5 [PROTO] Client mailbox mutations: Mail.MoveMessage/CopyMessage/DeleteMessage via outbox 2026-07-31 18:12:59 +00:00

Opened #286 WS-B6 [PROTO] Folder management: Mail.CreateFolder/RenameFolder/DeleteFolder/Subscribe 2026-07-31 18:13:00 +00:00

Opened #287 WS-B7 [PROTO] Drafts: save/list/get/delete/send (local-first; server APPEND staged) 2026-07-31 18:13:01 +00:00

Opened #288 WS-B8 [PROTO] Attachments on receive: persist+encrypt + attachment_id/size_bytes + streaming GetAttachment 2026-07-31 18:13:03 +00:00

Opened #289 WS-C1 Graceful shutdown: signal -> serve_with_shutdown -> drain -> db.close() WAL checkpoint 2026-07-31 18:14:11 +00:00

Opened #290 WS-C2 Outbox per-item timeout (hung mutation -> Retry, cannot freeze all accounts) 2026-07-31 18:14:13 +00:00

Opened #291 WS-C3 Single-instance advisory lock keyed on DB path 2026-07-31 18:14:14 +00:00

Opened #292 WS-C4 Bounded-concurrency sync dispatcher + per-account timeout (fixes serialized head-of-line) 2026-07-31 18:14:16 +00:00

Opened #293 WS-C5 Autonomous per-account sync scheduler honoring sync_interval_secs (jitter, hot add/remove) 2026-07-31 18:14:18 +00:00

Opened #294 WS-C6 [PROTO] Reliable resumable event stream: seq + bounded replay ring + ResyncRequired + NewMailArrived + forward SyncProgress + Subscribe(from_seq) 2026-07-31 18:14:19 +00:00

Opened #295 WS-C7 IMAP IDLE real-time integration (wire the existing unused listen_idle into the scheduler) 2026-07-31 18:14:21 +00:00

Opened #296 WS-C8 [PROTO] Health surface: System.GetHealth (outbox pending/failed, per-account last-sync outcome, WAL size) 2026-07-31 18:14:22 +00:00

Opened #297 WS-D1 Reject TlsMode::Plain to non-loopback hosts (quick win, ship first) 2026-07-31 18:14:24 +00:00

Opened #298 WS-D2 SPIKE: SQLCipher-through-sqlx feasibility (bundled-sqlcipher-vendored-openssl vs migrate to rusqlite) 2026-07-31 18:14:25 +00:00

Opened #299 WS-D3 Whole-DB at-rest encryption (SQLCipher) + migration + 'stolen DB reveals nothing' test [HEADLINE] 2026-07-31 18:14:27 +00:00

Opened #300 WS-D4 Signed updates: minisign detached signature + pinned key + decompression-bomb guards + safe apply/rollback 2026-07-31 18:14:29 +00:00

Opened #301 WS-D5 Bounded/paged IMAP fetch with per-message + per-batch size caps (use RFC822.SIZE) 2026-07-31 18:14:31 +00:00

Opened #302 WS-D6 [PROTO] Untrusted-content: engine-side HTML sanitization (ammonia) + html_is_untrusted marker + parser/zip/path hardening 2026-07-31 18:14:32 +00:00

Opened #303 WS-D7 [PROTO] Bearer token rotation/revocation + per-client scoping 2026-07-31 18:14:34 +00:00

Opened #304 WS-D8 gRPC server concurrency/stream/timeout limits 2026-07-31 18:14:35 +00:00

Opened #305 WS-D9 OS-permissioned IPC: UDS 0600 / Windows named pipe + peer-UID check (replace loopback TCP) 2026-07-31 18:14:37 +00:00

Opened #306 WS-D10 Pin resolved IP for webhook dispatch to close the DNS-rebind TOCTOU 2026-07-31 18:14:39 +00:00

Opened #307 WS-D11 Remove/wire the dead age attachment cipher (superseded by WS-B8 attachment persistence) 2026-07-31 18:14:40 +00:00

Opened #308 WS-D12 Document the same-user-malware non-goal (do not over-claim local isolation) 2026-07-31 18:14:42 +00:00

Opened #309 WS-E1 [PROTO] Persist DAV href/etag/uid (extend #254/#255 read-sync to capture them) [prereq for write-back] 2026-07-31 18:15:17 +00:00

Opened #310 WS-E2 CalendarEvent::to_ical() serializer + round-trip (the one missing serializer) 2026-07-31 18:15:18 +00:00

Opened #311 WS-E3 CalDavWriteClient: conditional PUT/DELETE (If-None-Match/If-Match, 412 -> re-GET + aborted, never clobber) 2026-07-31 18:15:20 +00:00

Opened #312 WS-E4 [PROTO] Calendar.CreateEvent/UpdateEvent/DeleteEvent write-through 2026-07-31 18:15:21 +00:00

Opened #313 WS-E5 [PROTO] Calendar.ListCalendars + PROPFIND collection discovery 2026-07-31 18:15:22 +00:00

Opened #314 WS-E6 [PROTO] Recurrence editing (series + single-instance RECURRENCE-ID; this-and-future staged) 2026-07-31 18:15:23 +00:00

Opened #315 WS-E7 CardDavWriteClient: conditional PUT/DELETE 2026-07-31 18:15:24 +00:00

Opened #316 WS-E8 [PROTO] Contacts.UpdateContact/DeleteContact + wire CreateContact to real CardDAV write-back 2026-07-31 18:15:26 +00:00

Opened #317 WS-E9 [PROTO] Contact groups (ContactGroup type exists but never persisted; CardDAV KIND:group) 2026-07-31 18:15:27 +00:00

Opened #318 WS-E10 SearchEngine::search_contacts (contacts_fts table + triggers already exist, unused) 2026-07-31 18:15:29 +00:00

Opened #319 WS-E11 [PROTO] Structured scoped paginated multi-entity Search service (supersedes Mail.SearchMessages) 2026-07-31 18:15:30 +00:00

Opened #320 WS-E12 Field-scoped operator query builder (from:/subject:/org:...) replacing the strip-everything sanitizer 2026-07-31 18:15:31 +00:00

Opened #321 WS-F1 CLI: render Status.message() not the raw tonic::Status Debug dump (~28 sites) 2026-07-31 18:15:33 +00:00

Opened #322 WS-F2 CLI: surface interactive password prompt + daemon prerequisite in --help 2026-07-31 18:15:34 +00:00

Opened #323 WS-F3 Docs: expand RUNNING.md to the full command surface + install->add-account->sync walkthrough + troubleshooting 2026-07-31 18:15:35 +00:00

Opened #324 WS-F4 Hygiene: EventBus dead-arm cleanup (unread_count nothing reads, ReloadFilters no-op) 2026-07-31 18:15:37 +00:00

Opened #325 WS-F5 Hygiene: kill is_new_message N+1 SELECT-per-message in sync 2026-07-31 18:15:38 +00:00

Opened #326 WS-F6 Ops: structured, leveled, secret-safe logging in nunciod 2026-07-31 18:15:39 +00:00

Opened #327 WS-F7 CLI: wire --verbose; wire-or-remove the dead --account global flag 2026-07-31 18:15:41 +00:00

Opened #328 WS-F8 CLI: standardize --account scoping across mail/cal/contact + show which account synced 2026-07-31 18:15:42 +00:00

Opened #329 WS-F9 CLI: add cal get, contact get, system watch (Subscribe consumer) 2026-07-31 18:15:43 +00:00

Opened #330 WS-F10 [PROTO] Ops: System.GetHealth RPC + system health CLI (de-dup with WS-C8) 2026-07-31 18:15:45 +00:00

Opened #331 WS-F11 [PROTO] Ops: System.Backup RPC (online VACUUM INTO) + system backup + documented offline restore 2026-07-31 18:15:46 +00:00

Opened #332 WS-F12 CLI: typed-error hints from ErrorInfo (extends WS-F1) 2026-07-31 18:15:48 +00:00

Opened #333 WS-F13 Refactor: decompose grpc.rs (~6.1k) into grpc/{system,accounts,mail,filters,calendar,contacts,export,audit,auth,serve}.rs [behavior-preserving] 2026-07-31 18:15:49 +00:00

Opened #334 WS-F14 Refactor: decompose DatabaseEngine (~3.8k/47 methods) into per-domain stores over one pool [behavior-preserving] 2026-07-31 18:15:50 +00:00

Opened #338 WS-B follow-up: reap orphaned legacy message rows after identity migration 2026-07-31 18:52:14 +00:00

Opened #339 JMAP parse_email_get_response hardcodes folder_id='inbox' (mislabels non-inbox mailboxes) 2026-07-31 18:52:15 +00:00

Opened #347 Flaky test: mail_and_folder_report_honest_errors_when_daemon_unreachable (port-reuse race) 2026-07-31 20:55:33 +00:00

Opened #351 WS-A3 pre-freeze hardening: Audit reserve, cross-list token tag, boundary tests 2026-07-31 21:42:43 +00:00

Opened #357 OBS-1 Subscriber foundation: layered Registry + EnvFilter + rotating file + JSON 2026-07-31 22:40:35 +00:00

Opened #359 OBS-3 Daemon handler + lifecycle log coverage 2026-07-31 22:40:36 +00:00

Opened #358 OBS-2 Per-RPC span + request_id correlation + auth accept/reject logging 2026-07-31 22:40:36 +00:00

Opened #360 OBS-4 Filter engine instrumentation + silent eval-timeout FIX 2026-07-31 22:40:37 +00:00

Opened #361 OBS-5 Mail protocol instrumentation + destructive-op pre-logging 2026-07-31 22:40:38 +00:00

Opened #362 OBS-6 Cal/Contacts/Store instrumentation + VEVENT-drop FIX + DAV Debug redaction 2026-07-31 22:40:38 +00:00

Opened #363 OBS-7 Redaction policy + Redacted<T> newtype + no-secrets-in-logs canary 2026-07-31 22:40:39 +00:00

Opened #364 OBS-8 [PROTO] Real GetStatus health surface (uptime/sync_state/outbox_depth/last_error + counters) 2026-07-31 22:40:40 +00:00

Opened #365 OBS-9 CLI observability: wire -v/-vv + typed ErrorInfo rendering + RUNNING.md log docs 2026-07-31 22:40:41 +00:00

Opened #370 Wire evaluate_with_timeout into the production sync filter path (ReDoS guard unused) 2026-07-31 23:35:11 +00:00

Opened #375 Convert nuncio-filter hand-rolled test subscriber to tracing-test (flaky callsite-Interest race) 2026-08-01 00:19:42 +00:00

Opened #386 sync: capture Message-ID and a content hash at ingest 2026-08-10 19:27:47 +00:00

Opened #387 sync: add PRAGMA user_version gating and scheme-tagged sync tokens 2026-08-10 19:27:49 +00:00

Opened #388 mail: raw IMAP command layer for ENABLE, tagged response codes, and VANISHED 2026-08-10 19:27:50 +00:00

Opened #389 filter: add per-account filters_enabled, default off 2026-08-10 19:28:10 +00:00

Opened #390 sync: IMAP change enumeration with a four-rung, per-mailbox capability ladder 2026-08-10 19:28:11 +00:00

Opened #391 mail: conditional mutations with three outcomes (Applied/Conflict/Unknown) 2026-08-10 19:28:12 +00:00

Opened #392 dav: href/ETag remote identity for calendar and contacts 2026-08-10 19:28:30 +00:00

Opened #393 dav: sync-collection change enumeration for CalDAV and CardDAV 2026-08-10 19:28:31 +00:00

Opened #394 store: split message identity from placements 2026-08-10 19:28:32 +00:00

Opened #395 proto: mutation RPCs, durable conflicts, and DAV conditional write-back 2026-08-10 19:28:50 +00:00

Opened #396 sync: per-account scheduler, session pooling, rate limiting, and jittered backoff 2026-08-10 19:28:51 +00:00

Opened #397 test: multi-engine convergence harness with side-effect counting 2026-08-10 19:28:52 +00:00

Opened #406 store: repointing a placement orphans its message row and strands plaintext in FTS 2026-08-12 16:03:34 +00:00

Opened #407 sync: IMAP and JMAP derive disjoint message keys, so engines do not converge across types 2026-08-12 16:03:45 +00:00

Opened #408 jmap: implement Email/changes so JMAP accounts stop accumulating ghost messages 2026-08-12 16:04:00 +00:00

Opened #409 filter: decide the reaping policy for the filter_fired claim ledger 2026-08-12 16:04:01 +00:00

Opened #410 mail: housekeeping left by the placement split (naming, mbox header, UID guard) 2026-08-12 16:04:16 +00:00

Opened #419 nuncio-cli hangs forever reading the gRPC token in non-interactive sessions 2026-08-15 00:46:15 +00:00

Opened #421 nunciod hangs at startup if its keyring read blocks 2026-08-15 01:03:59 +00:00

Opened #422 Flaky: salvage returns SQLITE_IOERR_SHORT_READ when the fixture pool is not closed 2026-08-15 01:05:55 +00:00

Opened #426 store: unparseable stored account protocol silently coerces to ImapSmtp 2026-08-15 01:32:24 +00:00