scylabs/hook-bundle
scylabs/hook-bundle adds a lightweight hook system to PHP applications, letting you register callbacks at named hook points and trigger them to extend behavior without modifying core code. Ideal for modular, event-driven workflows.
Architecture fit
scylabs/hook-bundle is a Symfony bundle, not a Laravel package. It ships a ScyLabsHookBundle class, a DependencyInjection/ extension, and service-container wiring that only resolves inside a Symfony Kernel. Composer will install it into a Laravel app, but nothing registers: no service provider, no facade, no auto-discovery entry. In a Laravel codebase this is dead weight without a hand-written adapter or a fork. v1.0.6 does not change this — "Fixes Container injection" is a fix to the Symfony DI extension, which is precisely the machinery Laravel does not have.EventDispatcher and Twig extension mechanisms. It is a convention layer, not novel infrastructure.EventDispatcher subscribers, or a block/renderer component. Differentiation is ergonomics, not capability.Integration feasibility
composer require plus bundle registration is minutes; establishing that it works against your PHP and Twig versions is the real cost.php/symfony/*/twig/* constraints, no changelog, no stated supported-version matrix, and no CI/test artifacts. A single-line note ("Fixes Container injection") does not tell us which Symfony versions it fixes injection for. Do not infer Symfony 6/7 support from a patch version bump.Technical risk
| Risk | Severity | Notes |
|---|---|---|
| Abandoned upstream | Medium (was High) | Revised: v1.0.6 shows the maintainer is responsive; but one patch after a ~5-year gap is not a support commitment. Revert to High if no follow-up activity |
| Framework drift | High | Unchanged. No evidence of constraint widening for Symfony 6/7 / Twig 3 |
| Single-maintainer bus factor | High | Unchanged. No visible governance, security policy, or issue triage |
| Silent behavioral failure | Medium | Hook registration failures degrade gracefully (missing content) rather than throw |
| Supply chain | Low–Medium | MIT, small surface area; unmaintained transitive constraints remain a pinning hazard |
| Regression from patch | Low | "Container injection" fixes are container-compile-time; a bad fix surfaces as a boot failure, not silent corruption — but verify in a throwaway app, not production |
score: 0.035 against opportunity: 8.68. The near-zero adoption score is now slightly stale — the artifact has demonstrable, if minimal, maintenance activity. Treat opportunity as a concept score regardless; v1.0.6 does not create an ecosystem, dependents, or documentation.Key questions for the team
--ignore-platform-reqs? The release note implies container work, not constraint work — verify rather than assume.EventDispatcher already ships it.Recommendation (revised): still do not adopt as a direct production dependency, but downgrade from "do not adopt" to "do not adopt without re-spiking." The v1.0.6 container-injection fix makes the one-day spike materially more likely to pass than previously assessed. Run the spike against v1.0.6 specifically; if it boots cleanly on our Symfony/Twig versions without constraint hacks, the case for forking narrows to a routine internal-maintenance decision rather than a rescue. If it does not, fall back to the original position: mine it as a reference implementation and reimplement the ~200 lines natively.
Stack fit
Migration path
--ignore-platform-reqs; (b) does the container extension register; (c) does hook rendering work under our Twig version. The container-injection fix targets (b) directly — this is the specific thing it may have unblocked.HookRegistry service, hook() Twig function, functional registration API mirroring the bundle's surface — behind our own namespace and versioning. Estimated 1–3 engineer-days including tests.Compatibility
templating, older HttpKernel event names). These are common failure points for 2020-era bundles and are not addressed by a container-injection fix.Sequencing
Maintenance
Support
Scaling
Failure modes
| Mode | Symptom | Mitigation |
|---|---|---|
| Hook not registered | Section silently renders empty | Fail-loud in non-prod; assert expected hook names at boot |
| Ordering nondeterminism | Handler output interleaves inconsistently | Explicit priority integer; test it |
| Stale template cache | Old hook positions after deploy | Cache warmup in deploy pipeline |
| Container compile break | Deploy-time fatal on framework upgrade | Pin constraints; CI matrix on framework version. v1.0.6 confirms this mode is live — it has already occurred once upstream |
| Patch-level regression | Boot failure after minor bump | Pin exact versions; upgrade deliberately, never automatically |
| Abandoned CVE in transitive dep | Audit finding with no upstream fix | Fork ownership + dependency audit in CI |
Ramp-up
Bottom line for the TPM: the release is a genuine but small positive signal — a maintainer is alive, and the fix targets the exact gate that blocked modern-Symfony registration. It does not fix the Laravel stack mismatch, does not evidence constraint widening, and does not constitute a support commitment. Recommend re-running the one-day spike specifically on v1.0.6, with the prior now leaning toward "fork and own it" rather than "reimplement from scratch." Close the dependency question either way within two weeks; do not let a promising patch release leave this in indefinite evaluation.
How can I help you explore Laravel packages today?