esensi/core
Core foundation package for the Esensi Laravel ecosystem, providing shared service providers, configuration, helpers, and base utilities. It gives modular Laravel applications a consistent starting point for integrating Esensi components.
laravel/framework ^12.0 and therefore PHP 8.2+. If any app is still on Laravel 10/11, it must stay on the 4.0.x line — check composer.json for illuminate/* constraints before bumping.composer require <vendor>/<package>:^4.1 in a branch, then run composer why-not <vendor>/<package> 4.1.0 if the resolver refuses. Most failures at this step are transitive packages pinning illuminate/support ^10|^11.CHANGELOG.md/UPGRADE.md (the release note here is a one-liner, so the changelog is the real source of truth), then src/*ServiceProvider.php for bindings, config keys, and publishable assets.app(YourPackage::class) or its facade, and exercise one end-to-end happy path in php artisan tinker before wiring it into a controller. That confirms the service provider registers cleanly under Laravel 12's bootstrap/app.php style (withProviders / package auto-discovery) before you debug anything else.$this->app->instance(...), $this->mock(...)) work.php artisan vendor:publish --tag=<package>-config), commit it, and drive behaviour from config/<package>.php. Keep environment-specific values in .env and reference them from the config file only — never call env() from application code once config:cache is in play.composer install --no-dev → config:cache → route:cache → view:cache, with vendor:publish --force for public assets in the release step, not at runtime.setUp(). Target PHPUnit 11 (the Laravel 12 default) — data providers must now be static, and @dataProvider annotations are on the way out in favour of attributes.Bus::fake() / Event::fake() in tests and confirm serialization works — a model or closure captured in a queued payload will fail on the worker even when the request path passes.^4.1 explicitly and keep a shared composer.lock policy across apps so you don't drift between 4.0 and 4.1 behaviour in staging vs production.diffIn*() methods return floats and default to absolute values with inverted sign semantics. Any assertion like assertSame(1, $a->diffInDays($b)) or date arithmetic in your code around this package will silently break. Use diffInDays(..., absolute: false) and assertEqualsWithDelta where relevant.expectExceptionMessage matching changes, and --parallel behaving differently. If the package ships test helpers, re-read their signatures rather than assuming.php artisan optimize:clear. A cached config from 4.0 with keys added or renamed in 4.1 will produce "missing argument" style errors that look like package faults.env() returns null once config is cached — if a new 4.1 config key reads env() at runtime in the package, set it in your published config file instead.php artisan about shows discovered packages; composer dump-autoload fixes the classic "class not found after upgrade" when the package added files but your autoloader is stale.$this->app->bind(Contract::class, Custom::class) in a service provider) and the published config over editing vendor files. If you must subclass an internal class, note it — that's the first thing to re-check on the next minor release.vendor/bin/phpunit --testsuite=feature) and diff the source between 4.0 and 4.1 tags before trusting a green composer update.How can I help you explore Laravel packages today?