Repository navigation
Releases: jiannius/playbook
Release list
v0.5.1 — opt-in parallel Pest and CLI opcache in laravel-ci
Added
laravel-ci.ymlcan run Pest in parallel and enable CLI opcache. Both are opt-in and off by default, so a caller that sets neither runs exactly what it ran before. (#25, the parallel/opcache PR)parallel(boolean, defaultfalse) runsvendor/bin/pest --parallel. Each process gets its own<db>_test_Ndatabase. PHP warnings become failures under--parallel, so a suite that is green serially can go red. Deprecations are printed but don't fail the run.processes(number, default0) passes--processes=N.0lets Pest use one process per CPU, which is 2 on a private repo's runner.opcache(boolean, defaultfalse) setsopcache.enable_cli=1, opcache.jit=disable. JIT is pinned off because setup-php pre-sets it, and it measured no gain.
- On humblebear, a private repo, the Tests step went from 580 s to about 422-455 s with both on, and all 4302 tests passed.
Changed
docs/playbook-install.md: thelaravel-ci.ymlinput list now covers all 17 inputs, and the workflow is described as the single job it is.
Upgrading
Nothing to do. Callers on @v0 get this automatically. To opt in, add under with::
parallel: true
opcache: truev0.5.0 — playbook pins Boost's guidelines path and test enforcement
Breaking
- Claude Code's guidelines now always go to
AGENTS.md. From Boost 2.10.1, Boost sent them back toCLAUDE.mdwhenever that file existed. That undid the one-time move on the nextboost:update, andplaybook:checkdidn't notice. Playbook now setsboost.agents.claude_code.guidelines_pathtoAGENTS.mditself. A repo that hasn't done the move gets exit 2 fromplaybook:checkuntil it does. The move is in docs/adopting.md, step 4. (#23, the Boost defaults PR) - Requires
laravel/boost^2.10.3(was^2.4.7).
Changed
- Boost's Test Enforcement block is off by default. If
boost.enforce_testsisn't set, Boost decides on eachboost:updateby runningphp artisan test --list-tests, so the block came and went between runs. Playbook now sets it tofalse. Its own "Every change ships with a test" rule covers the same ground and doesn't change between runs. - Either setting can still be overridden in a repo's own
config/boost.php. A repo that already pins them, like firmhive, keeps its values. - Adoption docs: require
"jiannius/playbook:^0.5"explicitly, because a bare require can write"*". Commitboost.json, because without it a fresh checkout can't runboost:update.
Upgrading
- Raise the constraint to
^0.5. - Run
composer update jiannius/playbook -W. - Run
php artisan boost:update, thenphp artisan playbook:check. - If the check exits 2, do step 4 of the adoption guide.
v0.3.0 — Boost 2.10: Claude Code moves to AGENTS.md
Breaking-ish
playbook:checkcan now exit 2 on Boost 2.10+. Boost 2.10 writes Claude Code's guidelines toAGENTS.md, and Claude Code skipsAGENTS.mdwhile aCLAUDE.mdexists. The check now fails unlessCLAUDE.mdimports@AGENTS.mdand holds no leftover guidelines block. One-time move: see docs/adopting.md, step 4. No change on Boost < 2.10. (#16)- New guideline sections. Find the cause before you change the code, show the evidence before you call it done, plan before a change that spans many files. Agent files go stale until
php artisan boost:updateis run and committed. (#15)
Upgrading
Bump the constraint to ^0.3, run composer update jiannius/playbook, then php artisan boost:update and php artisan playbook:check.
v0.2.1 — test enforcement stops disappearing
Fixes a rule that had been quietly deleting itself.
Test enforcement is now ours (#3)
Boost asks whether to enforce tests during boost:install and writes the block into the agent
files, but boost.json never persists that answer. So every composer update ran
post-update-cmd → boost:update → recompose with the answer defaulted off, and silently
deleted the rule. No error, no failing command — it just stopped being there. Observed on the app
skeleton against laravel/boost 2.7.0.
The rule now ships in resources/boost/guidelines/core.blade.php, so it is version-controlled,
reviewable, and gated by playbook:check like everything else. tests/Feature/GuidelinesTest.php
fails if it goes missing again.
Rewritten rather than copied — it now says the part a check cannot decide for you: test behaviour
rather than implementation, start a bug fix from a test that fails for the reason the bug exists,
and the reason it has to be prose at all — CI runs the suite on every pull request, but CI can only
run tests that exist.
Upgrading
Every repo on playbook will report STALE until it runs boost:update. That is the gate
working, not a regression:
php artisan boost:update
php artisan playbook:check
Then commit the resulting agent-file change.
This is a patch release, so an existing ^0.2.0 requirement picks it up with no constraint change.
Consumers of the reusable workflows pin @v0, which now points here.
v0.2.0 — skills, and browser-tests CI
First release that ships skills as well as guidelines, and the CI input the app skeleton needs
to adopt the reusable workflow.
Skills (#1)
jiannius-dev and jiannius-qa-tester now ship at resources/boost/skills/, the path Boost
discovers inside composer packages. Boost copies them into the committed .claude/skills/, so a
teammate who only ever runs git clone gets them without composer.
Each skill was trimmed of the universal rules it used to restate — those arrive always-resident in
the guidelines block, and a second copy of a convention is the thing this package exists to prevent.
Reusable CI (#2)
laravel-ci.yml gains a browser-tests input. Off by default; turn it on for any app with
tests/Browser/, or Pest dies on PlaywrightNotInstalledException.
Upgrading
Composer constraint changes. ^0.1.0 does not allow 0.2.0 — Composer's caret stops at the
next minor for 0.x. Update the requirement:
composer require --dev "jiannius/playbook:^0.2.0"
To get the skills, boost.json needs a skills key. Skills are opt-in per repo and the opt-in
is not packages: boost:update gates on Config::hasSkills(), which reads skills from
boost.json, and only boost:install ever writes it. A repo listing jiannius/playbook under
packages with no skills entry gets the guidelines and silently no skills, reporting success
every time. Run php artisan boost:install and tick Agent Skills, or seed the key directly.
Consumers of the reusable workflows pin @v0, which now points here.
Two Boost behaviours worth knowing
Both are documented in docs/playbook-install.md:
MarkdownFormattermangles shell comments inside fenced code blocks. Its heading rule is
unanchored and not fence-aware, socomposer install # if PHP deps changedreads as a heading
and the installed copy gains blank lines the source never had. Put such explanations in a table
instead;SkillsTestasserts byte-equality so a regression fails CI here.boost:updatedrops the "Test Enforcement" block from agent files.enforceTestsis an
install-time answerboost.jsondoes not persist, so everycomposer updatesilently deletes it.
Not fixed in this release.