Parent
#1
What to build
The moox/msgraph package itself, up to and including an authenticated Graph client — but no driver yet.
Scaffold the package following Moox package conventions (service provider extending the Moox base provider, package metadata, config publishing). Add the connection registry: named entries, each holding tenant, client id and secret, resolved by name. Move the Graph client factory across from moox/mail-inbox, including the Guzzle middleware that requests immutable identifiers on every call.
Namespace the package by area from the start, with mail under its own sub-namespace, so calendar or file capabilities could be added later without renaming anything.
The package must ship no model, no migration and no Filament surface. If you find yourself adding a table, stop — that is a sign the work belongs in a domain package.
Acceptance criteria
Blocked by
None — can start immediately. Runs in parallel with #2.
Parent
#1
What to build
The
moox/msgraphpackage itself, up to and including an authenticated Graph client — but no driver yet.Scaffold the package following Moox package conventions (service provider extending the Moox base provider, package metadata, config publishing). Add the connection registry: named entries, each holding tenant, client id and secret, resolved by name. Move the Graph client factory across from
moox/mail-inbox, including the Guzzle middleware that requests immutable identifiers on every call.Namespace the package by area from the start, with mail under its own sub-namespace, so calendar or file capabilities could be added later without renaming anything.
The package must ship no model, no migration and no Filament surface. If you find yourself adding a table, stop — that is a sign the work belongs in a domain package.
Acceptance criteria
Blocked by
None — can start immediately. Runs in parallel with #2.