- What does knplabs/phpspec-welldone-extension actually do?
- According to its description, it registers with PhpSpec as an extension and, when the whole spec suite passes, prints a congratulatory "well done" message and speaks it via the operating system's speech command. Some internal assessments instead describe it as a scanner that lists source classes with no matching Spec file, so treat the two behaviors as unverified until an engineer reads src/ and runs it against a sample module. Do that 30-minute check before it enters any roadmap or toolchain decision.
- How do I install it with Composer?
- Install it as a development dependency with composer require --dev knplabs/phpspec-welldone-extension. Because the repository is archived, the Packagist metadata may be stale, so be prepared to pin a specific commit or point Composer at a VCS repository entry. It should never be added to the require section or shipped to production.
- How do I enable the extension in phpspec.yml?
- Register it under the extensions key in your phpspec.yml, the same way any other PhpSpec extension is loaded. Copy the exact extension class name from the README rather than reconstructing it, since a wrong namespace silently does nothing. Remember that Laravel projects do not ship a phpspec.yml, so you are introducing that file as well.
- Does it work in Laravel projects that use PHPUnit or Pest?
- Not directly. Laravel applications default to PHPUnit or Pest and never run PhpSpec, so adopting this package means introducing a second spec framework and a parallel spec suite into your codebase. That is a toolchain decision well above a small utility dependency, and for most Laravel teams native coverage tooling already answers the same questions with active maintenance.
- Which PHP and PhpSpec versions are supported?
- The repository is archived and its last release predates current PHP 8.x, so modern PHP versions are not officially supported. PhpSpec itself pulls in Symfony console and finder constraints that may conflict with an old release during installation. Verify it installs cleanly on both your lowest and highest CI PHP versions before committing to it.
- Is the package still maintained, and why is the repository archived?
- The repository is archived, meaning no patches, no PHP-version updates, and no fixes when PhpSpec internals change. It has roughly six stars and zero dependents, so there is no ecosystem validation to lean on. Expect your software composition analysis scanning to flag it as an unmaintained dev dependency.
- Is it safe to install as a dev dependency, or will it touch production?
- It is require-dev only, with no runtime presence, no interaction with Laravel's service container, queues, or HTTP layer, and no coupling to domain code, so the production blast radius is effectively zero. The practical catch is that the speech command must exist on whichever machine runs the specs, and headless CI containers usually lack a text-to-speech engine. A failed or missing speech command is cosmetic and does not change spec results.
- Does the speech command work on macOS, Linux, and Windows?
- It relies on the host operating system's speech command, so behavior varies by platform: macOS ships the say utility, Linux needs a text-to-speech binary such as espeak installed, and minimal containers or Windows agents often have nothing. Nothing in the package makes speech a hard requirement, so on unsupported machines you simply lose the audible part. If a missing engine raises an error rather than being ignored, the extension is easy to fork and guard.
- Can I use it to fail a CI build or to check which classes have no spec?
- No. As described, it is a novelty that celebrates green runs, not a coverage gate, and it neither fails a build nor reports missing specs. If you genuinely need a list of classes without a corresponding Spec file, a small internal Artisan command or PHPUnit's native coverage output over the same source roots will answer it with less risk. Be aware that heuristic filename matching for such a report misclassifies interfaces, traits, enums, and generated code.
- Are there alternatives, and should I fork it or build my own?
- The logic is only a few hundred lines, so forking into an internal tools package and patching PHP and Symfony bumps locally is feasible if PhpSpec is genuinely in active use in your estate. If it is a legacy holdover, replicate the capability instead: a roughly 100-line Artisan or Composer command that globs PSR-4 roots, maps App\Foo\Bar to spec/Foo/BarSpec.php, diffs the results, and emits JSON for a dashboard. That preserves the insight, removes an abandoned dependency, and targets the framework your team actually runs.