Parent
#1
What to build
The seam the whole extraction hangs off, plus the test harness moox/mail-inbox currently does not have.
Define the inbox driver contract in moox/mail-inbox: claiming a message for processing, settling it with an outcome of Processed, Failed or Ignored, fetching a resumable page of messages against an opaque cursor, and reading an attachment's content. Add a driver manager resolved from the container, and the configuration shape where a mailbox names a driver and references a connection by name — a plain string, never a class.
Ship an in-memory fake driver alongside it: scripted messages in, settled outcomes recorded and inspectable. Nothing in the package uses the contract yet; this ticket only makes it exist and proves it is implementable.
Stand up the package's first Pest harness while you are here, following the layout moox/e-billing already uses (a TestCase, a container-only case, Feature and Unit directories, fixture builders under a support directory). Do not copy any layout from moox/mail-inbox — it has none.
Acceptance criteria
Blocked by
None — can start immediately.
Parent
#1
What to build
The seam the whole extraction hangs off, plus the test harness
moox/mail-inboxcurrently does not have.Define the inbox driver contract in
moox/mail-inbox: claiming a message for processing, settling it with an outcome ofProcessed,FailedorIgnored, fetching a resumable page of messages against an opaque cursor, and reading an attachment's content. Add a driver manager resolved from the container, and the configuration shape where a mailbox names a driver and references a connection by name — a plain string, never a class.Ship an in-memory fake driver alongside it: scripted messages in, settled outcomes recorded and inspectable. Nothing in the package uses the contract yet; this ticket only makes it exist and proves it is implementable.
Stand up the package's first Pest harness while you are here, following the layout
moox/e-billingalready uses (aTestCase, a container-only case,FeatureandUnitdirectories, fixture builders under a support directory). Do not copy any layout frommoox/mail-inbox— it has none.Acceptance criteria
Ignoredis a first-class outcome, distinct fromFailed, and documented as "recognised and deliberately not processed"directionfield; a mailbox's role follows from which configuration it appears inBlocked by
None — can start immediately.