knplabs/phpspec-welldone-extension
A PhpSpec extension that adds a bit of encouragement to your test runs: when the whole suite passes, it prints a congratulatory "well done" message instead of leaving you with plain green output. Small, drop-in composer package that hooks into PhpSpec's event system to celebrate successful...
What this package actually is (and why a TPM should care). The repository description and the engineering assessments disagree on the package's core behavior. description.md advertises a celebratory "Well done!" message on green PhpSpec runs. The PM and TPM assessments describe a spec-gap scanner that enumerates source classes lacking a corresponding *Spec.php file. Those are two very different products. Before this item enters any roadmap conversation, a TPM should require a 30-minute verification by an engineer: read src/, run the command against a sample module, and confirm which behavior ships. The spec-gap report is the only version with leverage value; a "Well done!" banner is a novelty with a negative expected value (an unmaintained dependency for a string).
Architecture fit. It is a developer-tooling plug-in for PhpSpec, registered via an extensions: entry in phpspec.yml. It has no runtime presence, no production footprint, no coupling to application domain code, and no interaction with Laravel's service container, queues, or HTTP layer. The catch: Laravel projects do not ship a phpspec.yml and do not run PhpSpec by default. Adopting this means introducing a second spec framework into a PHPUnit/Pest codebase — a toolchain decision well above a utility package.
Integration feasibility. Technically narrow and cheap: composer require --dev, enable the extension, point at PSR-4 roots, run. Practically constrained by abandonment — the repo is archived, so the last release predates current PHP 8.x and modern Symfony console/finder constraints that PhpSpec itself pulls in. With 6 stars and 0 dependents, there is no ecosystem validation. Expect to pin a commit or fork.
Technical risk. High relative to value delivered:
Key questions a TPM should put to engineering.
--coverage-text/Clover over the same source roots, answer the same question with less risk?Leverage summary. Low direct leverage, moderate reference value. It does not unlock a product capability. It clarifies one decision — build vs. buy for "which classes have no spec at all" — and the answer is clearly build.
Stack fit. PHP + Composer + PhpSpec only, require-dev only. Zero production blast radius. In a Laravel codebase already on Pest or PHPUnit, this package adds nothing that native coverage tooling does not provide with active maintenance — and it adds a framework the team does not otherwise use.
Migration path. Frame this as fork-or-replicate, not composer require:
tools/ package so PHP and Symfony bumps can be patched locally. Acceptable if PhpSpec is genuinely in use.php artisan specs:gaps) that globs PSR-4 roots, maps App\Foo\Bar → spec/Foo/BarSpec.php, diffs, and emits JSON for a dashboard. This preserves the exact insight, removes the abandoned dependency, and targets whatever framework the team actually runs.Compatibility. Pin a specific tag or commit; never dev-master. Validate against the installed PhpSpec major, the project's Symfony component versions, and every PHP version in the CI matrix. Confirm case-sensitive path handling on Linux CI versus macOS developer machines, since that is a classic source of divergent gap lists.
Sequencing.
Roadmap placement. If test-debt visibility is on the roadmap for a legacy PHP/Laravel service, the deliverable is an internal report, not this package. Budget a spike, not a project. This package's contribution is the shape of the artifact: class list, missing-spec count, trend over time.
Maintenance. Fully on the adopter. Archived status means no upstream fixes, no dependency bumps, no issue responses. The mitigating factor is scope: it is a bounded scanner, so a fork is cheap to sustain — but budget a recurring line item for compatibility patching at every PHP/Symfony upgrade, and account for the SCA finding in every security review.
Support. Effectively none. Six stars and zero dependents means no community answers, no Stack Overflow corpus, no tutorials. Internal documentation and a named owner are prerequisites; without both, the tool decays silently after its champion rotates off the team. This is the single largest operational risk and it is organizational, not technical.
Scaling. As a dev-only console task, runtime scales linearly with source-file count — fine for mid-size monorepos, noticeable on very large trees with no incremental caching. It never affects production throughput, memory, or deployment size. The real scaling constraint is human: the report only creates value if someone triages it on a fixed cadence. Without a triage ritual, the output becomes noise within a quarter.
Failure modes.
Mitigations: maintain a known-gap fixture the tool must always flag (a canary), require a periodic manual cross-check, and publish the report with explicit caveats ("class has no spec file" ≠ "is untested").
Ramp-up. Technically trivial — a handful of YAML lines. Organizationally non-trivial: the team must already understand PhpSpec's spec-naming conventions and value spec-gap reporting as a practice. On a Laravel team fluent in Pest/PHPUnit but not PhpSpec, the framework onboarding cost exceeds the tool's benefit several times over.
TPM recommendation. Do not adopt as a dependency. Treat it as a two-to-three-day reference spike: read the source, reproduce the gap report as a maintained internal command on the team's actual test framework, wire it to a dashboard or PR comment, and assign an owner. Expected cost: one spike. Expected risk: near zero. Expected benefit: a defensible, recurring answer to "how much of this service is actually specified?" — which is a question worth answering, just not with this package.
How can I help you explore Laravel packages today?