danharrin/squire
Squire is a Laravel package for defining an Eloquent model schema in one place and reusing it to generate forms, validation rules, and other UI scaffolding. It keeps field metadata centralized, reducing repetitive boilerplate and helping forms stay consistent across your app.
Architecture fit. Squire occupies a dev-tooling slot, not a runtime slot. It orchestrates a curated set of static analysis and code-style tooling for Laravel projects and exposes it through artisan/Composer entry points with opinionated default configuration. For a TPM this means the integration surface is CI and developer workstations, not application request paths — the blast radius of a bad release is red builds, not production incidents. That materially lowers the risk weighting on this dependency.
What v3.11.1 actually contains. Two distinct categories:
zizmorcore/zizmor-action (0.5.3 → 0.5.6), actions/checkout (6.0.2 → 7.0.0), shivammathur/setup-php (2.37.1 → 2.37.2). These touch Squire's own GitHub Actions workflows and have zero impact on consumers. The actions/checkout major bump is worth noting only as a signal that the maintainers keep CI current rather than pinning for years.str_getcsv's $escape parameter emits a deprecation notice, and PHP 9 removes the default entirely. Squire evidently parses CSV-shaped tool output internally, so this is a forward-compatibility fix in its own code path.Integration feasibility. High. Patch-level release, no public API or configuration schema changes advertised, no deprecations introduced by Squire itself. Adoption is a single composer update in the dev dependency set.
Technical risk. Low, with two caveats worth verifying:
$escape fix has a behavioural nuance: passing "" versus "\\" to str_getcsv is not semantically identical across PHP versions. If the author passed "", output-parsing edge cases with quoted fields could shift. Worth confirming which value landed.Key questions for the maintainer.
escape set to "\\" (preserving prior behaviour) or "" (PHP 9 default)? Any parsing-behaviour change expected?str_*, implicit nullable params, E_STRICT removals) already swept, or is this the leading edge of a backlog?actions/checkout v7 bump merely Dependabot, or does it change how Squire's reusable workflow behaves for anyone copying it?php constraint ceiling, and how quickly is it widened after a new PHP release?Stack fit. Add as require-dev only. Squire is a developer-experience layer over PHPStan/Rector/Pint-style tooling; it must not appear in production dependency resolution or be deployed to runtime images. Confirm composer install --no-dev produces an artifact without it.
Migration path. Low-friction, version-pinned:
composer require --dev squirephp/squire:^3.11.1 — the caret floor at 3.11.1 is the point; earlier 3.11.x lacks the PHP 8.4 fix.Compatibility. Safe for anyone on PHP 8.0–8.3 (no-op) and actively beneficial on 8.4 (deprecation noise removed). Check the package's declared PHP constraint against your own floor/ceiling; if you are mid-migration onto 8.4, take this release before enabling strict error handling or you will chase notices that are not yours.
Sequencing. Ship this as a standalone low-risk bump, not bundled with a framework upgrade. Pair it with the CI job creation if you are also adopting Squire for the first time — that gives a clean signal on whether the tool's output parsing behaves identically before and after the str_getcsv change. Defer any workflow-template copying from the repo until the actions/checkout v7 implications are confirmed.
Maintenance. Effectively zero ongoing cost beyond periodic composer update in the dev set, and Dependabot on your side. Because Squire pins and orchestrates the underlying analysers, you inherit its version choices — you are trading per-tool upgrade decisions for a single upstream cadence. That is the core trade: less maintenance surface, less granular control over individual analyser versions and rule sets.
Support. Single-maintainer-adjacent project with visible community contribution (first-time contributor in this release is a healthy sign) and active automated dependency hygiene, including supply-chain scanning via zizmor. No commercial support; escalation path is GitHub issues. Acceptable for a dev-only tool, unacceptable as a blocking gate if your teams cannot tolerate waiting on an upstream fix — mitigate by keeping a documented escape hatch (run the underlying analyser directly) for any rule Squire's defaults block on.
Scaling. Scales cleanly across repositories: consistent rules, one config surface, no per-team drift. The cost centre is CI minutes, not runtime. Watch analyser caching across parallel jobs — static analysis is the slowest step in most Laravel pipelines, and cache misconfiguration is the usual cause of creeping build times.
Failure modes.
composer.lock and upgrading deliberately.str_getcsv escape semantics are the weak seam. Symptom is misleading or empty results rather than a crash, so assert on a known-violation fixture.--no-verify under deadline pressure; the ratchet baseline and fast local runs are the countermeasures.Ramp-up. Half a day for one engineer to adopt and baseline a mid-sized Laravel repo; near-zero for developers, who only see faster feedback and consistent style. The genuine learning curve is not Squire but the underlying analysers — expect the first week of triage to be rule interpretation, not tooling. Document the escape hatch and the upgrade cadence in the same runbook so the second maintainer is not starting cold.
How can I help you explore Laravel packages today?