# Paddle Catalog Sync Rollout - [x] **Schema Prep** - [x] Add migration for `paddle_sync_status`, `paddle_synced_at`, and `paddle_snapshot` JSON on `packages`. - [x] Update `Package` model casts/fillable + ensure factory coverage. - [ ] **Service Layer** - [x] Scaffold `PaddleCatalogService` (product/price CRUD, custom data mapping). - [ ] Add DTO helpers for Paddle product/price responses. - [ ] Extend `PaddleClient` tests/mocks for catalog endpoints. - [x] **Sync Logic** - [x] Implement `SyncPackageToPaddle` job with create/update flows and metadata diffing. - [x] Create `PaddlePackagePull` job for optional remote-to-local reconciliation. - [x] Add `paddle:sync-packages` artisan command (`--dry-run`, `--package=`, `--pull`). - [ ] **Admin UX** - [x] Enhance Filament PackageResource with sync status badges + last sync timestamp. - [ ] Add table/detail actions (“Sync to Paddle”, “Link existing Paddle entity”). - [ ] Surface last error/log context in the admin sidebar panel. - [ ] **Ops & Observability** - [ ] Configure dedicated log channel/Slack hook for catalog sync outcomes. - [ ] Document failure recovery playbook (retry, unlink, support escalation). - [ ] **Testing & QA** - [x] Unit tests for service + jobs using mocked Paddle API. - [x] Feature test covering artisan command flow. - [ ] Playwright smoke to confirm admin sync action displays status. - [ ] **Rollout Checklist** - [ ] Seed Paddle sandbox catalog via MCP server using migrated data. - [ ] Verify legacy packages mapped to Paddle IDs before enabling auto-sync. - [ ] Announce workflow change to admin users (release notes + docs update).