mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2026-11-06 10:59:59 +00:00
The deploy died in the drill's second pass on `wp plugin install activitypub --activate`: the first pass had installed it, the DR restore put the tree back, and wp-cli refuses to unpack onto an occupied directory. `--force` would have made that green by overwriting whatever the restore produced - on a branch about NFS-backed volumes, the worst possible place to paper over a restore. The probe keeps it red instead: `wp plugin is-installed` answers from `get_plugins()` alone (verified in the pinned wp-cli phar: `Fetchers\Plugin::get()` iterates `get_plugins()` and nothing else), so a tree WordPress cannot parse still reaches the install and still fails on folder_exists. Activation moves into its own step. Chained to `install --activate`, wp-cli sets chained_command and skips the result check, so an activation failure returns 0 today. The same install path now serves both call sites; the addon hook carried its own copy, which is why one defect needed fixing twice. mu-plugins follow the declaration the way discourse already does. The loop reads `mechanism: mu_plugin` from meta/addons/ instead of spelling two filenames, which is how `infinito-http-ca-trust` shipped undeclared while `infinito-oidc-rbac-mapper` carried a `required: true` that nothing evaluated. Both install paths honour that field now - a required addon aborts the play, an optional one warns and is skipped - which is the first place in the repo to read it. Three guards, because the loop replaced two guaranteed literals: an assert that every required addon is claimed by some install path, a lint pairing each vendored addon with its shipped file in both directions, and the spec the addon contract demands. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
5 lines
57 B
YAML
5 lines
57 B
YAML
---
|
|
required: true
|
|
mechanism: mu_plugin
|
|
source: vendored
|