wulfheart/laravel-actions-ide-helper
Generate IDE helpers for Laravel Actions v2 so your editor autocompletes action classes, methods, and magic properties. Install as a dev dependency and run php artisan ide-helper:actions. Community-maintained.
Architecture fit. This is a dev-only code generator: one Artisan command (php artisan ide-helper:actions) that scans Laravel Actions v2 classes and emits static IDE stubs. It has no service provider, no middleware, no runtime interception, and no production footprint. From a portfolio standpoint that is the most attractive shape a dependency can take — the blast radius is confined to developer machines, and the artifact it produces is derived and disposable.
The fit is binary rather than gradual. If Laravel Actions v2 is a load-bearing pattern in the codebase, this removes recurring manual @mixin/@method docblock upkeep and sharpens autocompletion on handle, asController, authorize, and rules. If the team is on controllers, services, or Actions v1, the package delivers exactly zero and should not enter the vendor list. There is no partial-adoption narrative to sell.
Integration feasibility. One Composer require-dev plus one command; no config publishing, no provider registration, no migration. The engineering ticket is comfortably under a day including IDE verification. That makes the cost side of the business case trivial to underwrite.
The gate is dependency topology, not code. The release history is almost entirely third-party churn — lorisleiva/lody bumps (v0.10.0), phpdocumentor/reflection bumps (v0.8.0), an explicit compatibility fix against phpdocumentor/reflection-docblock 5.4.0 (v0.7.2). Any host project already pinning those libraries, or constraining them via static-analysis tooling, will conflict at install time. This is the single most likely reason the initiative stalls, and it is discoverable in one composer why-not command — so front-load it.
Technical risk. Explicit and disclosed. The README declares "YOLO-mode": no guarantees, community-powered fixes, merges without maintainer testing, and an open call for a successor maintainer. With 21 stars, 0 dependents, and a single-maintainer history, there is no ecosystem validation and no succession plan. Recent Laravel 13.x compatibility landed via drive-by contributors (laravel-shift, adrum) — reassuring today, not a durable signal.
The secondary risk is silent degradation. The generator is coupled to Laravel Actions' internal method surface; an Actions v3 that reshapes the action contract produces wrong or stale signatures rather than an error. A quiet failure mode in a tool developers trust to be accurate is worse than an obvious one, and it argues for regeneration discipline after every Actions upgrade.
Key questions.
lorisleiva/lody or phpdocumentor/reflection-docblock already appear in our constraint set from static analysis or docs tooling?Stack fit. Requires Laravel 10–13.x, PHP 8.1+, and Laravel Actions v2.3+. Dev dependency only. Best fit: a mid-to-large Laravel codebase with settled Actions conventions, mixed IDE preferences across the team, and a CI pipeline already running composer validate and static analysis. Poor fit: small projects, controller-centric codebases, or teams without PHP language-server tooling — those developers pay the dependency cost and receive none of the benefit.
Migration path. There is no migration; this is additive tooling. The only migration work is retiring the manual docblock scaffolding it supersedes, and that should be a separate PR so rollback stays clean.
lorisleiva/laravel-actions ≥ v2.3 is present and Actions are genuinely in use.composer why-not wulfheart/laravel-actions-ide-helper against the lockfile to surface conflicts before commitment.composer require --dev wulfheart/laravel-actions-ide-helper.php artisan ide-helper:actions and diff generated signatures against current IDE behavior.@method annotations in a follow-up, not the same change.Compatibility. The generated stub must land where the IDE indexes it — either a scanned path or a registered external library. PHPStorm and VSCode/Intelephense are the realistic targets; everything else is untested. Pin to a specific minor, not a floating ^0.x. With a maintainer merging untested community patches, an unpinned range will absorb an unreviewed change on a routine composer update, and that is exactly the class of incident a TPM should not be explaining upward.
Sequencing and gates. Phase 1 — local validation on one machine and one representative branch; acceptance is correct autocompletion on real Actions including constructor parameters and default values. Phase 2 — team rollout with the regenerate command documented in onboarding; add it to a Composer script hook only if it is fast and non-failing on an empty Action set, otherwise keep it manual and explicit. Phase 3 — containment: gitignore the artifact, treat it as derived, and set a re-evaluation trigger at the next Laravel major or any breaking Actions release. Definition of done includes a short decision record naming an owner and a fallback — that document, not the package, is the durable deliverable.
Maintenance. Steady-state effort is low: static generation, no runtime surface, regenerate when Actions change shape. The real cost is inherited, not owned. The changelog shows this package mostly absorbs upstream dependency bumps performed by volunteers. We are betting on anonymous contributors continuing that work indefinitely, with no maintainer of record. Budget a fork: the surface is one command and one generator, plausibly a few days to internalize if upstream goes dark. That figure belongs in the risk register, not in a footnote.
Support. No vendor, no SLA, no escalation path beyond GitHub issues. The documented support model is "open a PR and hope it merges." Mitigations worth funding: vendor or privately fork with a tagged patch cadence, and publish the manual-docblock fallback so a developer hitting a generation bug is never blocked. Both are cheap; both convert an unbounded dependency risk into a scheduling decision.
Scaling. Technically negligible — offline generation, linear in Action count, a few hundred Actions in seconds. The scaling concern is organizational: benefit is proportional to the share of the codebase using Actions, and it accrues only to developers with working language-server integrations. If half the team edits without indexing, we are carrying a dependency for half the value. Worth a one-question survey before committing.
Failure modes.
| Failure | Symptom | Mitigation |
|---|---|---|
| Upstream abandoned | Stale or missing helpers after an Actions update | Fork and pin; treat as internal tooling |
Dependency conflict on lody / reflection-docblock |
Install or composer update fails |
Pre-flight composer why-not; keep dev-only |
| Laravel Actions v3 contract change | Incorrect signatures, silent rather than loud | Regenerate and spot-check after every Actions upgrade |
| Stale artifact | Autocompletion missing new Actions | Document regenerate in onboarding; hook post-autoload-dump only if safe |
| Generator error in CI | Pipeline red on unrelated work | Do not run in CI; local dev concern only |
| PHP/Laravel major bump | Package unsupported | Re-evaluate at each major; fall back to manual docblocks |
Ramp-up. Effectively zero for developers — install, regenerate, the IDE does the rest. The ramp-up cost lands on the TPM and platform owner: a decision record (why this package, what the fallback is, when we revisit), documentation of the regenerate command, and a named owner accountable for forking if upstream dies. That artifact is worth more than the dependency, because it converts "community-supported" into a dated, owned decision.
Recommendation. Adopt as a low-cost developer-experience line item only if Laravel Actions v2 is already load-bearing and the pre-flight dependency check is clean. Pin the version, gitignore the artifact, name an owner, and schedule re-evaluation at the next Laravel or Laravel Actions major. Track success as a reduction in manual docblock churn and developer-reported autocompletion friction — not as a reason to move to Actions. The tooling is too thin and too fragile to carry that decision.
How can I help you explore Laravel packages today?