fix(scripts): run check-versions BEFORE release-plugin writes, not after
release-plugin.mjs --write wrote marketplace.json and the catalog README label first, and only THEN ran check-versions via execFileSync (which throws on exit 1). A red catalog therefore left a half-applied release in the working tree — exactly the state a parallel session has already been observed carrying to the public remote. Adds applyRelease() with an injected io seam so the ORDER is testable: runGate() runs first, and any ERROR aborts with nothing written. The pre-flight reads the ERROR set only, never failed/--strict — pre-bump the released plugin is SUPPOSED to be WARN (catalog ref behind plugin.json), so a WARN gate would brick every release. Verified against the real classifier, not synthetic data. The post-write gate stays: pre-flight validates the old state, that one validates the new state. Known remaining hole, documented not built: --create-tag mints and pushes the plugin tag before the pre-flight runs. Tests 14 -> 19 (120 -> 125 across the six suites); check-versions 12 OK. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018Ga5tZ3AgUxAcdLtWB8Kig
This commit is contained in:
parent
22ef8c7e65
commit
ac7ad424d1
3 changed files with 147 additions and 18 deletions
13
CLAUDE.md
13
CLAUDE.md
|
|
@ -27,8 +27,17 @@ their own Forgejo repositories under `https://git.fromaitochitta.com/open/`.
|
|||
tag first. On `--write` it bumps the catalog `ref` AND the catalog README's per-plugin `` `vX.Y.Z` ``
|
||||
label together (and `git add`s both on `--commit`). Because it only moves both to a verified, tagged,
|
||||
consistent version, `check-versions.mjs` is green by construction. Never hand-edit a `ref` or a
|
||||
README label for a release — use this. Pure planner + label reconciler covered by
|
||||
`scripts/release-plugin.test.mjs`.
|
||||
README label for a release — use this. Pure planner + label reconciler + pre-flight/write step
|
||||
covered by `scripts/release-plugin.test.mjs`.
|
||||
- **Pre-flight gate (`--write` runs `check-versions` BEFORE it writes):** the helper calls `runGate()`
|
||||
first and aborts with exit 1 — **nothing written** — if ANY plugin is ERROR, not just the one being
|
||||
released (`check-versions`' exit code is catalog-wide). Previously the gate ran *after* both writes,
|
||||
so a red catalog left a half-applied release in the working tree for a parallel session to carry to
|
||||
the public remote. The pre-flight reads the **ERROR set only**, never `failed`/`--strict`: pre-bump,
|
||||
the plugin being released is *supposed* to be WARN (catalog `ref` behind `plugin.json`), so gating on
|
||||
WARN would brick every release. The post-write gate at the end stays — pre-flight validates the old
|
||||
state, that one validates the new state. **Known remaining hole:** `--create-tag` mints and pushes
|
||||
the plugin tag *before* the pre-flight runs, so that irreversible side effect is still unprotected.
|
||||
- **Version-consistency gate:** run `node scripts/check-versions.mjs` before committing any `ref`
|
||||
change. For each plugin it checks (against the sibling repo) that the catalog `ref` resolves to a
|
||||
real git tag (ERROR if dangling — breaks install), that `plugin.json` version == README
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue