Commands and exit codes#
This page lists every command CREED ships, what each one does, and the exit codes the refresh tools return.
Composer scripts#
| Command | What it does |
|---|---|
composer install |
Installs the project dependencies. |
composer ci |
All checks, what CI runs: composer validate --strict, the tests, the policy validator, Pint, the handbook lint, PHPStan and composer audit. The same command runs on GitLab and GitHub. |
composer test |
Only the tests. |
composer validate-policy |
Validate policy.json against its schema. |
composer lint-handbook |
Lint the handbook. |
composer fix |
Fix code style. |
composer docs |
Rebuild site/docs/ from docs/ with the shared docs builder (SQUIRE's kit). |
composer docs:check |
Fail when site/docs/ is stale against docs/, a nav path has no page, or a page fails the builder's checks. |
composer site:handbook |
Rebuild site/handbook/ from handbook/*.md. |
composer site:agent-ready |
Rewrite the Markdown twins, llms.txt, llms-full.txt, robots.txt and sitemap.xml in site/ (SQUIRE's agent-ready kit). |
The whole band fits in three commands, and nobody needs a solo.
The php bin/*.php tools#
| Tool | What it does |
|---|---|
php bin/refresh-patches.php |
Refreshes the latest_patch and latest_patch_checked fields of the PHP, Laravel, and Node versions in policy/policy.json from the upstream feeds, and proposes new Vue lines from endoflife.date. |
php bin/refresh-policy.php |
Refreshes policy/policy.json from the canonical upstream feeds: support dates, latest patches, and new version lines, with provenance recorded in policy/sources.json. |
php bin/policy-bot.php run |
The CREED policy robot: it keeps policy/policy.json current with no human in the loop. It runs bin/refresh-policy.php as a subprocess, reads the run report, and decides the outcome. |
php bin/export.php |
Exports a namespace-prefixed copy of the CREED reader for a consumer package to carry under its own namespace, so two tools in one app never fight over a class name. |
php bin/validate-policy.php |
Validates policy/policy.json against policy/policy.schema.json, and validates policy/sources.json against policy/sources.schema.json when present. |
php bin/lint-handbook.php |
Lints the CREED handbook for RFC 2119 discipline. |
php bin/build-handbook-site.php |
Builds the handbook pages of the CREED site from handbook/*.md. |
php bin/agent-ready.php |
Makes a static front page readable by agents: writes the Markdown twins, llms.txt, llms-full.txt, robots.txt and sitemap.xml into the site folder. |
php bin/docs-site.php |
Turns every Markdown file under docs/ into a committed, accessible, WayneUI-styled docs site under site/docs/, and fails CI when the committed pages are stale. |
Exit codes#
refresh-policy#
| Code | Meaning |
|---|---|
0 |
Nothing worth committing was written (and always 0 with --dry-run). |
1 |
A hard failure: unreadable policy, unwritable file, bad option. |
3 |
Something was written to policy/policy.json or policy/sources.json: tighten, neutral or loosen-warning changes, a loosen-fail released on proof (still reported as an alert by the policy robot), a first sighting in policy/sources.json, or a --touch heartbeat. |
4 |
Something was held or refused; nothing is committed for that run. The policy robot raises an issue instead. |
Written changes are always written.
refresh-patches#
| Code | Meaning |
|---|---|
0 |
Nothing to change (or --dry-run with nothing to change). |
1 |
A feed could not be fetched or parsed. |
3 |
The policy was updated (or --dry-run with changes to show). In CI the scheduled job is check-only: when the policy changed, the tool exits 3 and the job fails on the diff. |
export --check#
export --check compares the copy against a fresh export and exits 1 naming every file that differs, is missing, or is an extra .php/.json file. In short: it fails when the copy drifts from the source.
With only Docker#
The same lines work in PowerShell and sh.
Install and run every check#
sh
docker run --rm -v "${PWD}:/app" -w /app composer:2.10.3 sh -c "composer install --no-interaction && composer ci"
docker run --rm -v "${PWD}:/app" -w /app php:8.5-cli vendor/bin/phpunit
PowerShell
docker run --rm -v "${PWD}:/app" -w /app composer:2.10.3 sh -c "composer install --no-interaction && composer ci"
docker run --rm -v "${PWD}:/app" -w /app php:8.5-cli vendor/bin/phpunit
Run the test suite#
No PHP on the machine? Fine. Docker runs the suite:
sh
docker run --rm -v "${PWD}:/app" -w /app composer:2 composer install --no-interaction
docker run --rm -v "${PWD}:/app" -w /app php:8.4-cli vendor/bin/phpunit
docker run --rm -v "${PWD}:/app" -w /app php:8.3-cli vendor/bin/phpunit
PowerShell
docker run --rm -v "${PWD}:/app" -w /app composer:2 composer install --no-interaction
docker run --rm -v "${PWD}:/app" -w /app php:8.4-cli vendor/bin/phpunit
docker run --rm -v "${PWD}:/app" -w /app php:8.3-cli vendor/bin/phpunit
Validate the policy against its schema#
sh
docker run --rm -v "${PWD}:/app" -w /app composer:2 composer validate-policy
PowerShell
docker run --rm -v "${PWD}:/app" -w /app composer:2 composer validate-policy