Release 1.47.0 — Hadar: Extension System Re-Architecture
Release 1.47.0 — Hadar
Theme: Extension System Re-Architecture. Composer-only discovery + a single
enabled allow-list + a pure resolver (select → validate → topo-order). Replaces
the 4-source ProviderLocator model, the multi-key config files, and the
dev↔prod parity hazard (live-resolve dev / lazy-cache prod).
Highlights
- New units:
ExtensionCandidate,ExtensionResolver(+ResolverResult/ResolverError),
AppProviderLoader,ExtensionStateWriter,ProviderClassResolver,EnabledProviders;
PackageManifest::getCandidates()(readsinstalled.jsonforextra.glueful). Addscomposer/semver. - One resolution path:
ExtensionManager+ContainerFactoryboth resolve via the shared
ProviderClassResolver. Strict production cache (fail-if-missing); development resolves live. - CLI:
enable/disablevalidate before writing + recompile; strictcache; statefullist
(folds inwhy, case-insensitive slug);info/diagnoseon the new model;create:extension
scaffolds a Composer package + path repo. RemovesProviderLocator, local-folder scan,
runtime PSR-4 registration,extensions:why. - Config:
config/extensions.php+config/serviceproviders.php→ singleenabledstring-FQCN list. - Docs:
docs/EXTENSIONS_UPGRADE.md; CHANGELOG / ROADMAP /Versionbumped to 1.47.0.
⚠️ Breaking (config format) — shipped as a minor per the pre-public policy
- Convert both config files to the single
enabledlist of plain string FQCNs (no::class).
Old keys map perdocs/EXTENSIONS_UPGRADE.md(only→enabled,disabled→omit,
dev_only→enabled+require-dev,local_path→Composer path repo,scan_composer→removed). - Run
composer update(newcomposer/semverdep). Production must runphp glueful extensions:cache.
Tests
Full suite green — 954 passing; PHPStan level 6 [OK] on src; phpcs clean. New coverage:
ExtensionResolverTest, PackageManifestCandidatesTest, AppProviderLoaderTest,
ExtensionStateWriterTest, ProviderClassResolverTest, EnabledProvidersTest,
ExtensionManagerResolveTest, ExtensionCliTest, CreateExtensionTest.