netbrothers-gmbh/version-bundle
NetBrothers VersionBundle helps Symfony apps centralize and expose application version/build metadata. Configure a version once and access it in services and Twig templates for easy display, diagnostics, release tracking, and consistent version reporting across environments.
Architecture fit. This release is a platform-alignment drop rather than a feature release. Refactoring for Symfony 7.4/8 plus a PHP >=8.4 floor signals the package is tracking the leading edge of the Laravel/Symfony support matrix — most likely Laravel 12+ (Symfony 7.4) with forward compatibility for the next Laravel major. If your application is on Laravel 10/11 (Symfony 6.4/7.0–7.2), this package version will not resolve at all. Architecturally the package remains a standard Laravel service-provider integration; there is no indication of a new extension mechanism, config schema change, or facade change in these notes.
Integration feasibility. Two hard gates and one soft gate:
composer why-not check is the fastest way to confirm.final is a compile-time contract change. Any downstream code that extends a package service, decorates a command, or uses PHPUnit getMockBuilder(...)->onlyMethods() / createPartialMock() against these classes will fatal or fail tests. This is the item most likely to surprise teams, because it fails loudly at runtime/test time rather than at composer update.Technical risk. Medium-high for the upgrade itself, low-to-medium as steady state.
final change is a hard BC break with no deprecation runway — v3 → v4 is a major, so that is contractually fair, but it is worth confirming the package ships interfaces (or at least public contracts) for every class it just closed. If it does not, teams that legitimately need to customize behavior are stranded on v3.^7.4|^8.0, it may not co-install with the Laravel version you are actually running today.Key questions.
php: ^8.4, symfony/*: ^7.4|^8.0, and which illuminate/* / laravel/framework ranges?final, so that DI substitution remains possible without inheritance?final applied to classes documented as extension points (custom commands, custom service implementations)? Was any of that surface used in a documented recipe?final class, or is it a one-line "classes are now final" note?final — constructor signatures, container binding keys, config keys, command signatures?Stack fit. Confirm your Laravel/PHP matrix first. The decision tree is short:
| Your runtime | Your Laravel | Action |
|---|---|---|
| PHP < 8.4 | any | Stay on v3.x; do not attempt v4. |
| PHP 8.4+ | Laravel 10/11 | Blocked on Symfony constraints; stay on v3.x. |
| PHP 8.4+ | Laravel 12+ | v4 is viable — plan the final remediation. |
| PHP 8.4+ | Laravel 12+, heavy customization of package classes | Only if interfaces exist; otherwise v3.x and raise upstream. |
Migration path.
extends <PackageNamespace> and for the package's class names in app/, tests/, and any internal packages. Also grep tests for createPartialMock, getMockBuilder, onlyMethods, setMethods. This produces the real blast radius.composer.json platform config first, independently of the package bump. Land it as its own PR so failures are attributable.composer require <pkg>:^4.0 --with-all-dependencies, then run the full test suite before any application code changes. This separates "dependency conflict" failures from "final class" failures.Compatibility and sequencing. Do not bundle this with a Laravel major upgrade. Two simultaneous majors (framework + package) makes every failure ambiguous. Sequence: PHP baseline → Laravel upgrade (if needed) → package v4. If you must do Laravel and the package together, pin the package to v3 first, complete the Laravel upgrade green, then bump the package.
Rollback. Because v4 is a major with a PHP floor, rollback requires reverting the runtime image too. Tag the container image and lockfile at the pre-upgrade commit so rollback is a single deploy, not a rebuild.
Maintenance. The final policy is a net positive for the package maintainers — it shrinks the supported extension surface, removes a class of "you overrode a private-ish method" bug reports, and makes internal refactoring safe across Symfony majors. The cost is transferred downstream: teams that customized via inheritance now own a migration, and teams that need customization the package does not expose via interfaces own a permanent fork or a pinned v3. Expect a small wave of upstream issues immediately post-release from users hitting final fatals without a clear migration note.
Support. Two risks to flag to stakeholders. First, a PHP 8.4 minimum narrows the supportable window: your platform team can no longer patch-test older runtimes for this service. Second, if v3.x is not maintained in parallel, every application on PHP <8.4 is effectively frozen on a package version receiving no security fixes. Get a written answer on the v3 support window before this becomes urgent rather than optional.
Scaling. No scaling-relevant change is described. The Symfony 7.4/8 refactor is an internal alignment and should be neutral for throughput, memory, and queue behavior. Treat any performance claim as unverified; there's nothing here to benchmark.
Failure modes to watch.
Class X cannot extend final class Y — surfaces on first request or first console boot, not at install. Mitigate with a full test run plus a smoke boot of artisan in CI before deploy.php: ^8.4 and symfony/*: ^8.0 interacting badly with a transitive Laravel constraint — appears as a confusing composer update conflict. Resolve with composer why-not rather than by loosening constraints.final classes before planning effort from it.Ramp-up. Low conceptual load — no new concepts, no new APIs to learn. The effort is mechanical but broad: audit, interface rewiring, test-double rewrites. For a mid-size Laravel app, budget roughly 1–3 engineer-days if the audit finds no extends usage, and 1–2 engineer-weeks if it finds several, dominated by test remediation. The PHP 8.4 infrastructure move, if not already done, is a separate and larger effort owned by platform/infra, not by this package's consumers.
Recommendation. Adopt v4 if you are already on PHP 8.4 and Laravel 12+, and run the extends/mock audit first — it is cheap and determines the whole estimate. Defer if you are below PHP 8.4, and in that case confirm the v3.x support window in writing. For teams with deep inheritance-based customization, do not adopt until the package confirms interface-based extension points exist.
How can I help you explore Laravel packages today?