Skip to content

MVP release checklist

Duckbill™ release readiness for MAIL-49 / MAIL-62 / MAIL-118. Jira is the work plan. This page is the requirements-to-evidence map (Kickoff §11–12; ADR 0029). The governing spec title may still say Inbox Agent until MAIL-193.

ENABLE_SEND stays off. No secrets are recorded here.

Matrix status

The 04_MVP §11 matrix is waiting on E2E and NFR evidence. Every criterion has MAIL keys and a live documentation or product URL. Rows that need Stream A or Stream B results leave TODOs that map to MAIL-103 / MAIL-109. A TODO is not a pass. Epic MAIL-12 stays open.

Reserved evidence URLs (not published by this stream):

StreamTicketPreview (TODO)Production (TODO)
A — E2EMAIL-103https://duckbill-dev.jasonkoch.io/docs/operations/e2e-mvp-pathhttps://duckbill.jasonkoch.io/docs/operations/e2e-mvp-path
B — NFRMAIL-109https://duckbill-dev.jasonkoch.io/docs/operations/nfr-gateshttps://duckbill.jasonkoch.io/docs/operations/nfr-gates

Exit-criteria evidence (04_MVP §11)

Criteria are copied from MVP scope §11. Do not invent additional gates here.

#04_MVP §11 criterionMAIL keysLive URL or testEvidence status
1at least one real mailbox can connect and remain synchronizedMAIL-21, MAIL-63, MAIL-215, MAIL-24, MAIL-25, MAIL-50, MAIL-103https://duckbill.jasonkoch.io/connect · https://duckbill.jasonkoch.io/docs/architecture/live-microsoft-connect · TODO MAIL-103 https://duckbill.jasonkoch.io/docs/operations/e2e-mvp-pathImplementation shipped. Live mailbox proof waiting on MAIL-103.
2replayed/duplicated events do not duplicate canonical dataMAIL-27, MAIL-32, MAIL-51, MAIL-109https://duckbill.jasonkoch.io/docs/architecture/canonical-schema · https://duckbill.jasonkoch.io/docs/decisions/0018-conservative-canonicalization · npm test replay/idempotency · TODO MAIL-109 https://duckbill.jasonkoch.io/docs/operations/nfr-gatesUnit/replay coverage exists. NFR suite evidence waiting on MAIL-109.
3MailMessage/MessageInstance semantics are correctly implementedMAIL-16, MAIL-32, MAIL-103https://duckbill.jasonkoch.io/docs/05_Canonical_Data_Model_Entity_Relationship_Specification · https://duckbill.jasonkoch.io/docs/architecture/canonical-schema · TODO MAIL-103 real-data cardinality on https://duckbill.jasonkoch.io/docs/operations/e2e-mvp-pathSchema and conservative identity shipped. Real-mailbox cardinality waiting on MAIL-103.
4reconciliation detects and repairs representative driftMAIL-28, MAIL-109https://duckbill.jasonkoch.io/docs/architecture/reconciliation · https://duckbill.jasonkoch.io/docs/decisions/0017-reconciliation-and-cursor-recovery · TODO MAIL-109 https://duckbill.jasonkoch.io/docs/operations/nfr-gatesReconciliation shipped. Representative-drift gate waiting on MAIL-109.
5AI output is structured, versioned, evaluated, and correctableMAIL-36, MAIL-37, MAIL-38, MAIL-39, MAIL-40, MAIL-54, MAIL-57https://duckbill.jasonkoch.io/docs/architecture/ai-intelligence · https://duckbill.jasonkoch.io/docs/architecture/ai-evaluation · https://duckbill.jasonkoch.io/docs/architecture/human-corrections · npm run ai:eval · TODO MAIL-103 / MAIL-109 evidence pagesGolden-set and corrections shipped. Live path and NFR AI gate waiting on MAIL-103 / MAIL-109.
6a user can identify actionable mail more efficiently through the interfaceMAIL-41, MAIL-42, MAIL-76, MAIL-171, MAIL-50, MAIL-103https://duckbill.jasonkoch.io/inbox · https://duckbill.jasonkoch.io/docs/architecture/triage-ui · TODO MAIL-103 https://duckbill.jasonkoch.io/docs/operations/e2e-mvp-pathTriage UI shipped. Efficiency on a real mailbox waiting on MAIL-103.
7supported mailbox mutations converge with provider stateMAIL-43, MAIL-44, MAIL-45, MAIL-66, MAIL-103https://duckbill.jasonkoch.io/docs/architecture/safe-writeback · https://duckbill.jasonkoch.io/docs/decisions/0025-safe-provider-writeback · TODO MAIL-103 https://duckbill.jasonkoch.io/docs/operations/e2e-mvp-pathDurable command + sync convergence shipped. Live write-back proof waiting on MAIL-103.
8failures are visible and recoverableMAIL-29, MAIL-47, MAIL-48, MAIL-75, MAIL-109https://duckbill.jasonkoch.io/ops · https://duckbill.jasonkoch.io/api/health · https://duckbill.jasonkoch.io/docs/architecture/ops-health · TODO MAIL-109 https://duckbill.jasonkoch.io/docs/operations/nfr-gatesHealth, DLQ, and kill switches shipped. NFR recovery confirmation waiting on MAIL-109.
9security, privacy, backup, and service-quality gates passMAIL-33, MAIL-35, MAIL-46, MAIL-51, MAIL-56, MAIL-69, MAIL-109https://duckbill.jasonkoch.io/docs/operations/privacy-and-logging · https://duckbill.jasonkoch.io/docs/operations/backup-and-restore · https://duckbill.jasonkoch.io/docs/architecture/security-and-policy · tests/privacy/* · TODO MAIL-109 https://duckbill.jasonkoch.io/docs/operations/nfr-gatesPrivacy, backup rehearsal, and policy gateway shipped. Formal 03_NFR §16 checklist waiting on MAIL-109.
10no out-of-scope custom mail-client or calendar work is required for releaseMAIL-49, MAIL-62, MAIL-118https://duckbill.jasonkoch.io/docs/operations/mvp-release · this scope auditSatisfied by the NOT-done list below. No custom mail client or calendar product is required to operate the MVP.

Preview mirrors the same paths on https://duckbill-dev.jasonkoch.io.

Scope audit (04_MVP §3)

04_MVP §3 items are future-direction work and must not be pulled into MVP. Each row is NOT done.

04_MVP §3 itemStatusNotes
a full custom desktop mail clientNOT done/inbox is a lightweight triage workspace, not a mail client replacement.
a native iOS mail clientNOT doneNo iOS app is in this release.
full compose/send/reply/forward experience intended to replace OutlookNOT doneSuggested drafts are local copy-out only (MAIL-170 / ADR 0021). ENABLE_SEND stays off.
calendar implementation or replacement of FantasticalNOT doneDates may be extracted from mail. There is no calendar product.
canonical contact consolidation across every contact systemNOT doneContact intelligence may capture provenance. No consolidation target is chosen.
automatic destructive mail actions based solely on AINOT donePolicy gateway denies AI send/delete (ADR 0019 / ADR 0025).
autonomous external repliesNOT doneAI must not send. Drafts never send.
broad multi-user/enterprise administrationNOT doneSingle-operator product surface.
shared/team inbox workflowsNOT doneNot in MVP.
enterprise records management/eDiscoveryNOT doneNot in MVP.
complex rules-builder UINOT doneConservative deterministic rules only.
broad attachment document-management systemNOT doneAttachment metadata and on-demand content only.
migration of all historical contacts into a single targetNOT doneContact boundary in 04_MVP §4.
generalized personal assistant features unrelated to inbox processingNOT doneInbox processing only.

Operator-required NOT-done list

These are explicitly NOT done in this release (MAIL-49 / MAIL-62):

Bulk historical migration remains inventory/planning only (MAIL-168 / MAIL-169 / ADR 0027). MVP does not execute a lifetime mailbox import (04_MVP §8).

Appendix A — Unresolved decisions

Decisions already recorded stay in docs/decisions/. These items are still open and must not be silently decided in chat:

TopicOwnerNotes
Live E2E proof on one real mailboxMAIL-50 / MAIL-103Reserved URL /docs/operations/e2e-mvp-path.
Formal 03_NFR §16 pass/fail checklistMAIL-51 / MAIL-109Reserved URL /docs/operations/nfr-gates. Failures become follow-up tickets, not silent waivers.
npm scope and spec-title renameMAIL-193Chrome and this page use Duckbill™. @inbox-agent/* and governing spec titles wait.
Live second providerMAIL-20 / MAIL-52Adapter/fixtures exist. 04_MVP §7 does not require a second live provider for MVP.
Contact consolidation targetlater04_MVP §4. Do not pick a store in this release.
Calendar productlater04_MVP §5. Existing calendar tools stay external.
Enabling sendlater ticketADR 0003 / ADR 0021. Flipping ENABLE_SEND without that ticket is not authorization.
Owner-session escape after AppleMAIL-181 follow-onOwner session remains ops-only (ADR 0028). Whether it stays after Apple is fully live is not decided here.

Appendix B — Documentation review checklist (MAIL-118)

Reviewers execute this list against the live preview and production docs hosts. Record pass/fail in MAIL-118.

#CheckExpected
1/docs landing does not mention JiraPass on duckbill-dev and duckbill.jasonkoch.io
2Product chrome and this page say Duckbill™Typed ™ is superscript in chrome; markdown may use Duckbill™
3Every 04_MVP §11 bullet appears in the evidence tableTen rows, wording from the spec
4Every §11 row has MAIL keys and a live URL or testTODOs allowed only for MAIL-103 / MAIL-109 evidence pages
504_MVP §3 items are listed as NOT doneTable above matches the spec list
6Operator NOT-done list is explicitcustom mail client, iOS app, calendar product, contact consolidation, full composer/send, autonomous AI send/delete, bulk historical migration execution
7No secret valuesEnv names only; no .p8, tokens, or connection strings
8ENABLE_SEND stays offDocumented false; not described as enabled
9Operator runbooks existDeploy and operate, backup and restore, privacy and logging, CI and docs
10ADR 0029 is publishedhttps://duckbill.jasonkoch.io/docs/decisions/0029-mvp-release-readiness
11Live docs return HTTP 200/docs/operations/mvp-release and /docs/operations/deploy on both hosts
12Nav lists the new operations pagesLeft nav Operations group
13Epic MAIL-12 is not closed from this reviewStream C closes MAIL-62 / MAIL-118 / MAIL-49 only

tests/web/docs-catalog.test.ts asserts the catalog, the §11 wording, and the NOT-done list.

Related