Skip to content

Stage 2 provider migration worklist

Read-only source audit: companion Packages d0c62b87b778c70bb89f6f063e2e306f3f0a6c56. No companion files changed. The diagnostic sweep used 18d340fc18792524010e797fc3d8370681ac2698; the four held provider changes listed below are absent from this main checkout. Source locations below refer to the audited checkout.

Use Installed runtime lifecycle as the migration contract. Every row needs the manifest-derived parity test, an uninstalled-absence assertion, declared-surface expectations, preloaded child coverage where present, and a minimum Core version containing the new API. Do not remove installation commands, configuration, or a deliberately pre-install listener. No package dependency constraints were changed in stage 1.

A failed installed-runtime hook cannot be replayed in that application; a failed panel refresh denies only its panel. Public routes, health endpoints and unrelated console/queue/scheduler work remain available. Do not add retry flags or make callers re-run partially completed registrations; replace the application and restore eligibility after fixing the cause. Test a listener registered before a deliberate failure and require same-application retry to throw without adding a second listener.

Enrol from register() and put hook prerequisites in lifecycle-safe registration, because Admin activates enrolled hooks before constructing panel routes. Required providers must enrol before dependants; use the manifest buckets for every child. Enable loads new hook adopters only and preserves unloaded legacy-provider behaviour.

For Admin packages, test fresh installed routing plus uninstalled boot followed by install: existing route middleware must protect grouped, unnamed, tenant and Livewire replay paths; new pages/resources remain absent from the current panel until a full reload after cache reconciliation. Core persists extender middleware automatically unless its extender implements the explicit DeclaresFullPageOnlyMiddleware opt-out contract. Topology-changing extenders must defer to fresh bootstrap. A failed security refresh makes the affected panel and its Livewire replays return 503; it must not deny unrelated public or health HTTP. Password Policy still needs execution-time enabled checks after disable/uninstall.

The shared activation action clears persisted route/configuration/component caches for direct Admin, CLI and queued installations. The Admin action adds a full redirect; deployments must still reload retained processes and refresh other nodes. Octane sandbox admission must fail before migrations, install Actions or member state changes. Test bundle restart emission once after success, and its absence at boot, per request and after failure.

Move the installed branches from application booting/booted callbacks and the listed Spatie hooks into the main installed-runtime hook. Leave lifecycle-safe bindings in registration. Child providers need the adapter; remove their callbacks after moving the bodies.

PackageExact provider phases to migrateMissing surfaces to assertAdditional handling
access-gatepackages/access-gate/src/Providers/AccessGateServiceProvider.php — packageRegistered:133, packageBooted:174admin-surfaces, listeners, models, policies, protected-table-registrations, protected-tables, tagsKeep lifecycle-safe bindings, then migrate installed models/policies/resources, rules/hooks, protected tables, integrations and access-request notifications.
ai-orchestratorpackages/ai-orchestrator/src/Providers/AIOrchestratorServiceProvider.php — registeringPackage:78listeners, schedule, tagsRetain only lifecycle-safe work in the old phases; remove migrated call sites.
commentspackages/comments/src/Providers/CommentsServiceProvider.php — registeringPackage:66, packageRegistered:84, packageBooted:105
packages/comments/src/Providers/AdminServiceProvider.php — boot:21
admin-surfaces, listeners, models, protected-table-registrations, protected-tables, renderables, routes, tagsRetain only lifecycle-safe work in the old phases; remove migrated call sites.
contactspackages/contacts/src/Providers/ContactsServiceProvider.php — packageRegistered:62, packageBooted:92
packages/contacts/src/Providers/AdminServiceProvider.php — register:28
admin-surfaces, listeners, models, policies, protected-table-registrations, protected-tablesRetain only lifecycle-safe work in the old phases; remove migrated call sites.
customer-portalpackages/customer-portal/src/Providers/CustomerPortalServiceProvider.php — packageRegistered:49, packageBooted:73
packages/customer-portal/src/Providers/AdminServiceProvider.php — register:20
admin-surfaces, listeners, models, policies, protected-table-registrations, protected-tablesRetain only lifecycle-safe work in the old phases; remove migrated call sites.
document-lifecyclepackages/document-lifecycle/src/Providers/DocumentLifecycleServiceProvider.php — packageRegistered:51, packageBooted:75admin-surfaces, listeners, models, policies, protected-table-registrations, protected-tables, scheduleRetain only lifecycle-safe work in the old phases; remove migrated call sites.
email-studiopackages/email-studio/src/Providers/EmailStudioServiceProvider.php — registeringPackage:99, packageRegistered:108, packageBooted:140
packages/email-studio/src/Providers/AdminServiceProvider.php — boot:32
admin-surfaces, listeners, models, policies, protected-table-registrations, protected-tables, scheduleRetain only lifecycle-safe work in the old phases; remove migrated call sites.
experimentspackages/experiments/src/Providers/ExperimentsServiceProvider.php — packageRegistered:61admin-surfaces, models, policies, protected-table-registrations, protected-tables, scheduleRetain only lifecycle-safe work in the old phases; remove migrated call sites.
filament-peekpackages/filament-peek/src/Providers/FilamentPeekServiceProvider.php — registeringPackage:31, packageRegistered:49tagsRetain only lifecycle-safe work in the old phases; remove migrated call sites.
frontend-optimizerpackages/frontend-optimizer/src/Providers/FrontendOptimizerServiceProvider.php — registeringPackage:77, packageRegistered:93listeners, tagsRetain only lifecycle-safe work in the old phases; remove migrated call sites.
ga4-reportspackages/ga4-reports/src/Providers/GA4ReportsServiceProvider.php — registeringPackage:46, packageRegistered:54, packageBooted:63, registerInstalledPackageSurfacesWhenReady:99, registerInstalledPackageSurfaces:118
packages/ga4-reports/src/Providers/AdminServiceProvider.php — boot:33
admin-surfaces, commands, extension-pages, models, protected-table-registrations, protected-tables, schedule, tagsReplace registerInstalledPackageSurfacesWhenReady and packageSurfacesRegistered only after moving all main and child surfaces.
insightspackages/insights/src/Providers/InsightsServiceProvider.php — registeringPackage:52, packageRegistered:60, packageBooted:79, bootInstalledPackage:114
packages/insights/src/Providers/AdminServiceProvider.php — register:37, boot:43
admin-surfaces, commands, extension-pages, listeners, models, protected-table-registrations, protected-tables, schedule, tagsRetain only lifecycle-safe work in the old phases; remove migrated call sites.
live-chatpackages/live-chat/src/Providers/LiveChatServiceProvider.php — registeringPackage:89, packageRegistered:104, packageBooted:129admin-surfaces, listeners, models, policies, protected-table-registrations, protected-tables, routes, scheduleRetain only lifecycle-safe work in the old phases; remove migrated call sites.
login-auditpackages/login-audit/src/Providers/LoginAuditServiceProvider.php — registeringPackage:54, packageRegistered:63, packageBooted:82
packages/login-audit/src/Providers/AdminServiceProvider.php — register:31, boot:49
admin-surfaces, listeners, models, policies, protected-table-registrations, protected-tables, schedule, tagsRetain only lifecycle-safe work in the old phases; remove migrated call sites.
migration-assistantpackages/migration-assistant/src/Providers/MigrationAssistantServiceProvider.php — packageRegistered:84, registerInstalledPackage:103listeners, models, policiesRetain only lifecycle-safe work in the old phases; remove migrated call sites.
paymentspackages/payments/src/Providers/PaymentsServiceProvider.php — packageRegistered:71
packages/payments/src/Providers/AdminServiceProvider.php — register:32
models, protected-table-registrations, protected-tables, tagsRetain only lifecycle-safe work in the old phases; remove migrated call sites.
privacy-centerpackages/privacy-center/src/Providers/PrivacyCenterServiceProvider.php — packageRegistered:56, packageBooted:76
packages/privacy-center/src/Providers/AdminServiceProvider.php — register:28
listeners, models, protected-table-registrations, protected-tables, routes, scheduleRetain only lifecycle-safe work in the old phases; remove migrated call sites.
public-actionspackages/public-actions/src/Providers/PublicActionsServiceProvider.php — packageRegistered:79admin-surfaces, listeners, models, policies, protected-table-registrations, protected-tablesRetain only lifecycle-safe work in the old phases; remove migrated call sites.
shopify-commercepackages/shopify-commerce/src/Providers/ShopifyCommerceServiceProvider.php — registeringPackage:58, packageRegistered:68
packages/shopify-commerce/src/Providers/AdminServiceProvider.php — register:20, boot:26
admin-surfaces, commands, extension-pages, listeners, models, protected-table-registrations, protected-tables, scheduleRetain only lifecycle-safe work in the old phases; remove migrated call sites.
social-feedspackages/social-feeds/src/Providers/SocialFeedsServiceProvider.php — packageRegistered:52
packages/social-feeds/src/Providers/AdminServiceProvider.php — register:22, boot:33
admin-surfaces, models, policies, protected-table-registrations, protected-tablesThe retained provider registry built through callAfterResolving must see late tags; include that consumer in the package snapshot.
structured-content-librarypackages/structured-content-library/src/Providers/StructuredContentLibraryServiceProvider.php — packageRegistered:43admin-surfaces, listeners, models, policies, protected-table-registrations, protected-tablesRetain only lifecycle-safe work in the old phases; remove migrated call sites.
tagspackages/tags/src/Providers/TagsServiceProvider.php — registeringPackage:38
packages/tags/src/Providers/AdminServiceProvider.php — register:18, boot:28
listeners, models, policiesRetain only lifecycle-safe work in the old phases; remove migrated call sites.

Move the installed branch of packageBooted into bootInstalledRuntime. Consolidate any existing bootInstalledPackage body. Keep pre-install work outside the hook. Apply the adapter to the listed children.

PackageExact provider phases to migrateMissing surfaces to assertAdditional handling
agent-deliverypackages/agent-delivery/src/Providers/AgentDeliveryServiceProvider.php — registeringPackage:41, packageBooted:48tagsRetain only lifecycle-safe work in the old phases; remove migrated call sites.
ai-creatorpackages/ai-creator/src/Providers/AiCreatorServiceProvider.php — registeringPackage:43, packageBooted:52admin-surfaces, extension-pages, modelsKeep the pre-install CapellInstalled listener in packageBooted; move only installed models and the extension page.
automation-studiopackages/automation-studio/src/Providers/AutomationStudioServiceProvider.php — packageRegistered:50, packageBooted:59
packages/automation-studio/src/Providers/AdminServiceProvider.php — register:17
admin-surfaces, listeners, models, policies, protected-table-registrations, protected-tablesRetain only lifecycle-safe work in the old phases; remove migrated call sites.
form-builderpackages/form-builder/src/Providers/FormBuilderServiceProvider.php — registeringPackage:75, packageBooted:96, bootInstalledPackage:140scheduleMerge the existing guarded installed body with the schedule and morph-map branch still in packageBooted.
html-cachepackages/html-cache/src/Providers/HtmlCacheServiceProvider.php — registeringPackage:122, packageBooted:189admin-surfaces, extension-pages, listeners, livewire, tagsRetain required early container configuration; move installed maintenance/error storage, admin integrations, invalidation listeners and schedules. Permission writes belong in install Actions.
inertia-react-adapterpackages/inertia-react-adapter/src/Providers/InertiaReactAdapterServiceProvider.php — packageBooted:39tagsRetain only lifecycle-safe work in the old phases; remove migrated call sites.
inertia-vue-adapterpackages/inertia-vue-adapter/src/Providers/InertiaVueAdapterServiceProvider.php — packageBooted:39tagsRetain only lifecycle-safe work in the old phases; remove migrated call sites.
newsletterpackages/newsletter/src/Providers/NewsletterServiceProvider.php — registeringPackage:83, packageRegistered:91, packageBooted:105, bootInstalledPackage:126
packages/newsletter/src/Providers/AdminServiceProvider.php — register:59, boot:81, formBuilderIsInstalled:312
admin-surfaces, commands, policies, routes, scheduleMerge the guarded main body with routes/morph map; the child loses policies, resources, commands, dashboard contributions and schedules.
record-switcherpackages/record-switcher/src/Providers/RecordSwitcherServiceProvider.php — packageBooted:30tagsRetain only lifecycle-safe work in the old phases; remove migrated call sites.
searchpackages/search/src/Providers/SearchServiceProvider.php — registeringPackage:79, packageRegistered:87, packageBooted:101
packages/search/src/Providers/AdminServiceProvider.php — register:35, boot:41
commands, listeners, models, protected-table-registrations, protected-tables, schedule, tagsRetain only lifecycle-safe work in the old phases; remove migrated call sites.
site-monitorpackages/site-monitor/src/Providers/SiteMonitorServiceProvider.php — registeringPackage:48, packageBooted:59
packages/site-monitor/src/Providers/AdminServiceProvider.php — register:23, boot:34
admin-surfaces, extension-pages, models, policies, protected-table-registrations, protected-tables, scheduleThe child has installed branches in both register and boot; consolidate both.
smart-404packages/smart-404/src/Providers/Smart404ServiceProvider.php — registeringPackage:47, packageBooted:54
packages/smart-404/src/Providers/AdminServiceProvider.php — boot:16
listenersRetain only lifecycle-safe work in the old phases; remove migrated call sites.

Ordinary Laravel main providers — 3 packages

Section titled “Ordinary Laravel main providers — 3 packages”

Add RegistersInstalledRuntime and enrol from register with the package name and runtime bucket. Move installed register/boot/application-callback bodies into bootInstalledRuntime; apply the admin adapter separately.

PackageExact provider phases to migrateMissing surfaces to assertAdditional handling
agent-bridgepackages/agent-bridge/src/Providers/AgentBridgeServiceProvider.php — register:50, boot:56, registerInstalledPackage:71admin-surfaces, commands, extension-pages, models, routes, tagsRetain only lifecycle-safe work in the old phases; remove migrated call sites.
media-librarypackages/media-library/src/MediaLibraryServiceProvider.php — register:31, boot:46, registerInstalledPackage:73commands, extension-pages, listeners, modelsRetain only lifecycle-safe work in the old phases; remove migrated call sites.
publishing-studiopackages/publishing-studio/src/Providers/PublishingStudioServiceProvider.php — register:89, boot:108
packages/publishing-studio/src/Providers/AdminServiceProvider.php — register:78, boot:91
listeners, livewire, models, policies, routes, schedule, tags, viewsMove the nested booted draftable registration too; retain the early schema-cache invalidation listener only if it is required before installation.

Enrol the child with RegistersInstalledRuntime and the admin bucket; move installed registration out of register/boot. Keep the main provider responsible for metadata and lifecycle-safe bindings.

PackageExact provider phases to migrateMissing surfaces to assertAdditional handling
dashboard-reportspackages/dashboard-reports/src/Providers/DashboardReportsServiceProvider.php — registeringPackage:32, packageRegistered:39
packages/dashboard-reports/src/Providers/AdminServiceProvider.php — boot:21
tagsRetain only lifecycle-safe work in the old phases; remove migrated call sites.
diagnosticspackages/diagnostics/src/Providers/DiagnosticsServiceProvider.php — registeringPackage:41, packageBooted:49
packages/diagnostics/src/Providers/AdminServiceProvider.php — register:35, boot:52
admin-surfaces, extension-pagesThe source harness preloads the child. This is a contract case; normal production preloading is not established.

Keep parent boot semantics; move the installed body after parent::boot into bootInstalledRuntime. Remove that old call site so it cannot execute twice.

PackageExact provider phases to migrateMissing surfaces to assertAdditional handling
frontend-authoringpackages/frontend-authoring/src/Providers/FrontendAuthoringServiceProvider.php — boot:40, registeringPackage:56livewire, routes, viewsMove translations, view namespaces, middleware aliases, gates, Livewire and routes from the post-parent boot branch.

Existing manual guards — 25 provider files

Section titled “Existing manual guards — 25 provider files”

The supplied checkout contains 25 provider files with installed-runtime or installed-surface flags across 21 packages, including the GA4 surface guard. This is not 25 distinct packages, and Form Builder, Newsletter and GA4 overlap the 40 failures above. The table names every flag-bearing file; it does not infer completeness from an existing guard.

ProviderInstalled phases to consolidateFlags removable after full migrationHandling
packages/address/src/Providers/AddressServiceProvider.phpregisteringPackage:76, bootInstalledPackage:96$installedRuntimeBootedMove the early resource callback into the installed phase as well.
packages/blog/src/Providers/AdminServiceProvider.phpregister:37, boot:46$installedRuntimeBootedMain: include feed routes; child: replace the explicit provider booted callback with the admin adapter.
packages/blog/src/Providers/BlogServiceProvider.phpregisteringPackage:91, bootInstalledPackage:111$installedRuntimeBootedMain: include feed routes; child: replace the explicit provider booted callback with the admin adapter.
packages/bookings/src/Providers/BookingsServiceProvider.phpregisteringPackage:176, packageBooted:217, bootInstalledPackage:241$installedPackageBooted, $installedRuntimeBootedConsolidate packageBooted/routes and bootInstalledPackage; remove the explicit packageBooted replay.
packages/campaign-studio/src/Providers/CampaignStudioServiceProvider.phpregisteringPackage:72, bootInstalledPackage:86$installedRuntimeBootedMain hook consolidation; the held child-provider fix must be migrated too.
packages/content-sections/src/Providers/ContentSectionsServiceProvider.phppackageRegistered:70, registeringPackage:93, bootInstalledPackage:123$installedRuntimeBootedRemove the early resource callback; retain sectionRegistryBootstrapped only for a genuinely separate registry initialisation boundary.
packages/demo-kit/src/Providers/DemoKitServiceProvider.phpregisteringPackage:70, packageBooted:90$installedRuntimeBootedMove guarded packageBooted wiring and delete its replay callback; keep demo/install commands available early.
packages/discovery-foundation/src/Providers/DiscoveryFoundationServiceProvider.phpbootInstalledPackage:29$installedRuntimeBootedMove the guarded installed bindings and tag to the new hook.
packages/events/src/Providers/EventsServiceProvider.phpregisteringPackage:95, bootInstalledPackage:141$installedRuntimeBootedConsolidate the early admin-resource callback with installed wiring.
packages/extension-cookbook/src/Providers/ExtensionCookbookServiceProvider.phpbootInstalledPackage:49$installedRuntimeBootedMigrate the guarded main body plus the held Frontend child change; preserve frozen registry contribution tests.
packages/form-builder/src/Providers/FormBuilderServiceProvider.phpregisteringPackage:75, packageBooted:96, bootInstalledPackage:140$installedRuntimeBootedMerge the existing guarded installed body with the schedule and morph-map branch still in packageBooted.
packages/ga4-reports/src/Providers/GA4ReportsServiceProvider.phpregisteringPackage:46, packageRegistered:54, packageBooted:63, registerInstalledPackageSurfaces:118$packageSurfacesRegisteredReplace registerInstalledPackageSurfacesWhenReady and packageSurfacesRegistered only after moving all main and child surfaces.
packages/knowledge-base/src/Providers/AdminServiceProvider.phpregister:24$installedRuntimeBootedMove the application callback and guarded route helper into one installed phase; child uses the admin adapter.
packages/knowledge-base/src/Providers/KnowledgeBaseServiceProvider.phppackageRegistered:59, bootPackageRoutes:85$installedRuntimeBooted, $installedRoutesBootedMove the application callback and guarded route helper into one installed phase; child uses the admin adapter.
packages/navigation/src/Providers/NavigationServiceProvider.phpregister:69, boot:90, registerInstalledPackage:108$installedPackageRegisteredThis is an ordinary Laravel provider: use the adapter and consolidate registerInstalledPackage with its boot callback.
packages/newsletter/src/Providers/NewsletterServiceProvider.phpregisteringPackage:83, packageRegistered:91, packageBooted:105, bootInstalledPackage:126$installedRuntimeBootedMerge the guarded main body with routes/morph map; the child loses policies, resources, commands, dashboard contributions and schedules.
packages/notes/src/Providers/AdminServiceProvider.phpregister:22, boot:34$installedRuntimeBootedConsolidate main installed work and child boot/replay/beforeResolving registrations; include the early policy in absence assertions.
packages/notes/src/Providers/NotesServiceProvider.phpregisteringPackage:52, bootInstalledPackage:66$installedRuntimeBootedConsolidate main installed work and child boot/replay/beforeResolving registrations; include the early policy in absence assertions.
packages/referer/src/Providers/AdminServiceProvider.phpregister:19, boot:27$installedRuntimeBootedMigrate main and child independently; remove the child callback that invokes boot again.
packages/referer/src/Providers/RefererServiceProvider.phpregisteringPackage:41, bootInstalledPackage:58$installedPackageBootedMigrate main and child independently; remove the child callback that invokes boot again.
packages/seo-suite/src/Providers/SeoSuiteServiceProvider.phpregisteringPackage:239, packageBooted:247, bootInstalledPackage:259$installedRuntimeBootedMove the installed body; audit early Livewire and content-graph tags against absence assertions.
packages/site-discovery/src/Providers/SiteDiscoveryServiceProvider.phpregisteringPackage:83, bootInstalledPackage:110$installedRuntimeBootedRetain lifecycle-safe URL-change plumbing only when needed before install; move all installed runtime wiring together.
packages/theme-foundation/src/Providers/FoundationThemeServiceProvider.phppackageBooted:210, packageRegistered:260$installedRuntimeBootedPreserve sharedRenderingBooted and its shared-rendering condition. Migrate only installed-theme work; test theme availability separately.
packages/url-manager/src/Providers/UrlManagerServiceProvider.phpbootInstalledPackage:57$installedRuntimeBootedMove the guarded installed body including redirect capture and schedule.
packages/welcome-tour/src/Providers/WelcomeTourServiceProvider.phpregisteringPackage:62, bootInstalledPackage:77$installedRuntimeBootedMigrate installed contributions and configured-tour registration; remove panelExtenderTagged only after panel timing is covered.

Held source differences to reconcile before dispatch

Section titled “Held source differences to reconcile before dispatch”
File absent from the audited main fix setStage 2 action
packages/campaign-studio/src/Providers/AdminServiceProvider.phpReplace current booting/boot registration with the admin adapter; consolidate the held guard rather than stacking another callback.
packages/extension-cookbook/src/Providers/FrontendServiceProvider.phpUse the frontend adapter; move routes, namespaces, assets, payload contributions and tags into the hook.
packages/layout-builder/src/LayoutBuilderServiceProvider.phpConsolidate early resource callbacks, packageBooted listeners/schedules/routes and bootInstalledPackage page types. The supplied main checkout has no installed-runtime flag to delete.
packages/password-policy/src/Providers/PasswordPolicyServiceProvider.phpConsolidate settings and installed admin surfaces; migrate the early panel extender after testing an existing panel and real forced-change request. Main uses container inspection for deduplication rather than an installedRuntimeBooted flag.

Theme Directory inherits Foundation behaviour through its provider; verify it in the manifest-derived main-provider sweep even though it owns no manual installed-runtime flag. Keep pre-install listeners in AI Creator, the shared-rendering phase in Theme Foundation, and Password Policy security behaviour as explicit tests.

Do not ship the package migration until stage 1 is released or pinned and each consumer proves the fresh-application route/component-cache boundary. New page/resource routing, persisted caches, live Octane reload and cross-process propagation require consumer proof beyond provider snapshots.