Gated mail inventory and dry-run
Duckbill™ can inventory folders and produce a dry-run plan. Bulk historical migration is not an MVP execute path.
Rules
InventorySourceandAnalyzeFoldersare read-only.CreateMigrationPlanpersists a plan withdry_run_required=trueandsource_delete_allowed=false.RunDryRunreportsselected = succeeded + skipped + duplicate + conflict + failedand keeps the adapter write counter at zero.POST /api/migrations/startreturnsPOLICY_DENIEDwhileENABLE_ICLOUD_MIGRATIONis off. Pause and resume stay denied with it.- Setting
ENABLE_ICLOUD_MIGRATION=truestill does not execute bulk migration in this release.
HTTP
| Method | Path | Behavior |
|---|---|---|
GET | /api/inventory/source | Folder/message inventory against a recorded or mock adapter |
POST | /api/inventory/folders/analyze | Per-folder counts |
POST | /api/migrations/plans | Persist a dry-run-required plan |
POST | /api/migrations/dry-run | Non-mutating estimate |
POST | /api/migrations/start | Always POLICY_DENIED in this milestone |
POST | /api/migrations/pause | POLICY_DENIED |
POST | /api/migrations/resume | POLICY_DENIED |
Code
| Module | Role |
|---|---|
packages/application/src/inventory.ts | Inventory and analyze |
packages/application/src/migration.ts | Plan, dry-run, gated start |
packages/persistence/src/migration-plans.ts | Plan persistence |
database/migrations/0019_followon_providers.sql | Plan and dry-run tables |
See ADR 0027.
