Skip to content

Releases: jiannius/playbook

v0.5.1 — opt-in parallel Pest and CLI opcache in laravel-ci

Choose a tag to compare

@tjloong tjloong released this 12 Oct 12:23
ad378ef

Added

  • laravel-ci.yml can 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, default false) runs vendor/bin/pest --parallel. Each process gets its own <db>_test_N database. 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, default 0) passes --processes=N. 0 lets Pest use one process per CPU, which is 2 on a private repo's runner.
    • opcache (boolean, default false) sets opcache.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: the laravel-ci.yml input 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: true

v0.5.0 — playbook pins Boost's guidelines path and test enforcement

Choose a tag to compare

@tjloong tjloong released this 09 Oct 15:21
d182614

Breaking

  • Claude Code's guidelines now always go to AGENTS.md. From Boost 2.10.1, Boost sent them back to CLAUDE.md whenever that file existed. That undid the one-time move on the next boost:update, and playbook:check didn't notice. Playbook now sets boost.agents.claude_code.guidelines_path to AGENTS.md itself. A repo that hasn't done the move gets exit 2 from playbook:check until 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_tests isn't set, Boost decides on each boost:update by running php artisan test --list-tests, so the block came and went between runs. Playbook now sets it to false. 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 "*". Commit boost.json, because without it a fresh checkout can't run boost:update.

Upgrading

  1. Raise the constraint to ^0.5.
  2. Run composer update jiannius/playbook -W.
  3. Run php artisan boost:update, then php artisan playbook:check.
  4. If the check exits 2, do step 4 of the adoption guide.

v0.3.0 — Boost 2.10: Claude Code moves to AGENTS.md

Choose a tag to compare

@tjloong tjloong released this 24 Sep 10:22
d949898

Breaking-ish

  • playbook:check can now exit 2 on Boost 2.10+. Boost 2.10 writes Claude Code's guidelines to AGENTS.md, and Claude Code skips AGENTS.md while a CLAUDE.md exists. The check now fails unless CLAUDE.md imports @AGENTS.md and 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:update is 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

Choose a tag to compare

@tjloong tjloong released this 30 Aug 09:49
8032d63

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

Choose a tag to compare

@tjloong tjloong released this 30 Aug 09:33
3475c94

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:

  • MarkdownFormatter mangles shell comments inside fenced code blocks. Its heading rule is
    unanchored and not fence-aware, so composer install # if PHP deps changed reads as a heading
    and the installed copy gains blank lines the source never had. Put such explanations in a table
    instead; SkillsTest asserts byte-equality so a regression fails CI here.
  • boost:update drops the "Test Enforcement" block from agent files. enforceTests is an
    install-time answer boost.json does not persist, so every composer update silently deletes it.
    Not fixed in this release.