update · git:20261107.629412d · 2026-11-07 · sha256 215d508f848f6c42
update git:20261107.629412dA
Immutable. This exact content never changes and is served at /api/v1/blob/215d508f848f6c42.
---
name: update
description: After a spex plugin update, bring the repo to the plugin's format — run spex update, which adds the keys the newer plugin needs with their defaults and comments, runs the format migrations (1 → 2 moves every record's verification and every task's verify commands into a tests.yaml per folder) and sets format, keeping every value and comment of yours — then have a test-analyst subagent complete each migrated proof plan, and show what changed. Use when the user says "spex update", "update the config", "update spex", or right after the plugin was updated.
disable-model-invocation: true
allowed-tools: Bash(node ${CLAUDE_PLUGIN_ROOT}/scripts/spex.mjs *), Agent
---
# spex update
`SPEX` = `node ${CLAUDE_PLUGIN_ROOT}/scripts/spex.mjs`, from the repo root.
## Steps
1. `SPEX update`. It changes `.spex/config.yaml`: the keys a newer plugin introduced, with
their defaults and comments; the `format` line; and, when `format` is behind, the spec
folders too. Every value and comment of yours stays. If it refuses, relay the finding and
stop: no config yet means `/spex:init`; a repo newer than the plugin means the plugin
must be updated first.
2. Format 1 → 2 writes a `tests.yaml` per folder from what was there: one script test per
scenario, found in its file by name when the test exists, and one shell test per task
that had `verify` commands. It is a start, not a plan. For every folder whose records
are not all `built` or `retired`, say `Complete the plan → 1 test analyst` and start one
`spex:test-analyst` with `<dir>. Complete tests.yaml: every claim spex show --plan
lists, a name per script, a session where no script can judge.` Then `SPEX check <dir>`;
a `TEST-*` error goes back to a fresh test analyst with the findings, once.
3. `SPEX check`. Fix nothing else yourself. Relay errors by their `fix` text. A new default
that does not fit this repo is the user's call, so name it: `approvals: [tasks]` asks a
person to approve `tasks.yaml` before the tests and develop gates open; `live: []` lets
no test write a real system; `ship.cmd` empty means a person merges.
4. Do not commit. Say which files changed, so the user can.
## Reply
At most 12 lines. `STATUS:` first, then one line per change `spex update` printed
(`added live: []`, `specs/007-csv-export/tests.yaml: written from 2 scenario(s) …`), the
plans completed, the warnings of `check`, then the output of `SPEX --version`, as printed:
the plugin version and the format.