bmellink/nova-translations-loader
The v1.0 release only widens the PHP constraint to 7.x, so the first job is confirming that the constraint actually landed where you expect it and that nothing else moved with it.
composer show <vendor>/<package> --all and read the require.php line, or check the released tag's composer.json directly. "Allow php 7.x" is ambiguous — it may mean >=7.0, ^7.0, or >=5.6 <8.0. Your deployment target and your CI matrix depend on which one it is.illuminate/* constraints against your framework version; a package that supports PHP 7 but pins illuminate/support: 5.4.* is not usable in a modern app.composer require <vendor>/<package>:^1.0, then exercise the happy path in php artisan tinker (or a single feature test) before wiring it into anything real. A version bump with no feature notes is the classic case where a transitive dependency shifted underneath you.CHANGELOG.md (confirm nothing is hiding behind the one-line note), README.md for the documented entry point, composer.json for constraints, then src/ for the public surface — service provider, facade, config file, and any Contracts/ directory.First use case: a single end-to-end call through the package's public API in a test, asserting the result and that no deprecation notices are emitted. That one test tells you more about a compatibility release than the release notes do.
Pin the constraint explicitly. Don't inherit * or a floating branch. Set "<vendor>/<package>": "^1.0" in composer.json and commit the lock file. For a release whose only stated change is a platform constraint, the lock file is your audit trail.
Register the provider once, in the right place. If the package supports Laravel package auto-discovery (extra.laravel.providers in its composer.json), do nothing. If it predates that convention — plausible given the PHP 5-era lineage implied by this release — add it to config/app.php manually. Watch for a provider registered in both places after an upgrade; that yields double-registered singletons and confusing duplicate side effects.
Prefer constructor injection over the facade. A compatibility-only release is exactly when you want your tests to be able to swap the implementation. Type-hint the package's contract or concrete class in the constructor, bind it in a service provider if needed, and resolve from the container. Facades are fine for tinker and one-off console commands; they make the migration to the next major release harder to reason about.
Isolate behind a thin adapter. If the package's purpose is non-trivial (payments, search, media handling, third-party API), wrap it in one small application-level class with 3–5 methods. Every call site then depends on your class, not theirs. When v2.0 lands with a renamed method or a changed return type, you edit one file.
Publish config only when you need to change it. php artisan vendor:publish --provider="Vendor\Package\ServiceProvider" --tag=config writes a snapshot into config/. Published config stops receiving upstream defaults — a real hazard across a version bump that may have added a key you now silently lack. Read the package's bundled config in vendor/ first, publish only if overriding, and diff your published copy against the new bundled default after upgrading.
Exercise it in CI on the PHP versions you actually deploy. Add 7.2, 7.3, and 7.4 to the matrix (7.0/7.1 are EOL — test them only if you're forced to run them). Include one job on the lowest supported PHP so the floor is real, not theoretical.
For anything queue- or schedule-driven, verify the package's jobs and commands survive serialisation: dispatch a job, Queue::fake() and assert, then run a real queue worker locally once. Compatibility releases sometimes break serialisation of internal value objects without a functional test noticing.
each() removal, mcrypt fallbacks — that were required to make PHP 7 work. Read the diff between the previous tag and v1.0, or at minimum the src/ file list. git diff <prev-tag>..v1.0 --stat is thirty seconds well spent.String, Object, Int, Float, Bool, Null, Resource, Iterable, Void. Class, interface, and trait names using these fail to parse on 7.x. Grep your own code for them too — the package might be fine while your app isn't.mcrypt is gone. If the package does encryption, confirm it moved to openssl. Silent fallback to an unauthenticated cipher is a security issue, not a compatibility issue.Throwable now catches both Exception and Error. If the package catches \Exception around code that can throw a TypeError on PHP 7, those errors escape. Wrap your own calls accordingly.E_ALL in a local test run. Deprecations from 7.2+ (create_function, each(), unquoted array keys) tell you v1.0 was a constraint edit rather than a genuine port — useful when planning your next upgrade.composer platform vs. reality. If your dev machine runs 8.x and production runs 7.4, set config.platform.php to 7.4 in composer.json. Otherwise Composer resolves against the wrong runtime and installs dependencies that won't load on the server.php artisan config:clear && php artisan cache:clear && composer dump-autoload -o. Most "the upgrade broke everything" reports resolve here.Manager + createXDriver) or a container binding for the driver/implementation, that's your cleanest seam for swapping behaviour without forking. Confirm the binding name hasn't changed in v1.0 before you lean on it.How can I help you explore Laravel packages today?