Check the manifest the canonical install path actually resolves - #494
Merged
Conversation
The release gate compared the tag, `package.json` and `commitlore --version`, and never opened `.claude-plugin/plugin.json` or `package-lock.json`. ADR-0026 makes the plugin the canonical install path, so the one manifest a plugin user's install resolves was the one the gate did not look at. That is not hypothetical. `package-lock.json` declared 0.1.0 from the first release through 0.7.0 while both manifests moved, and this gate passed every time, because it does not look there. A human found it by reading the file. The two lock fields are checked separately because they went stale separately: the root `version` and `packages[""].version` are independent, and a report naming only one sends an operator to fix half of it. A missing manifest is a failure rather than a skip. The defect being repaired is a gate that stayed quiet about a file it did not read, and a gate that stays quiet when the file is absent is the same gate. Limit: the gate now covers every versioned manifest that exists today, found by searching for `"version"` across the tree -- a manifest added later is not covered until someone adds it here, which is the same standing every declaration in this repository has Ruled-out: globbing for JSON with a top-level `version` key | node_modules and generated fixtures carry that shape, and a gate whose scope moves with the working tree fails differently on a clean clone than on a developer's machine Ruled-out: warning on a missing manifest and continuing | the tag is immutable once fetched, so a release that publishes past an unreadable manifest cannot be corrected afterwards Warn: the check runs against the built `dist` in the workspace, so it qualifies the artefact the workflow just built rather than one downloaded from the release -- the fresh-clone checks are what cover that direction Blast: system Undo: easy Certainty: firm Verified: five of the six new cases fail against the previous script and all six pass against this one; `check-release-version.mjs v0.7.1` reports all five sources agreeing at 0.7.1 in a tree where they do, and reports every disagreement rather than the first when three are seeded Provenance: authored Record-Id: r-vergate492
CommitLore — record lintTrailers: clean — 1 commit in Active constraints for the paths this PR touchesLimits (1)
Ruled out (6)
Warnings (2)
Trailer violations fail this check. Active constraints are informational — they are what the repository already decided, not a verdict on this PR. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #492.
Held:
devis frozen for the v0.7.1 promotion. This is opened for CI evidence, not to merge.The release gate compared the tag,
package.jsonandcommitlore --version, and never opened.claude-plugin/plugin.jsonorpackage-lock.json. ADR-0026 makes the plugin the canonical install path, so the one manifest a plugin user's install resolves was the one the gate did not look at.That is not hypothetical:
package-lock.jsondeclared0.1.0from the first release through 0.7.0 while both manifests moved, and this gate passed every time, because it does not look there. A human found it by reading.The two lock fields are checked separately because they went stale separately. A missing manifest is a failure rather than a skip — the defect being repaired is a gate that stayed quiet about a file it did not read.
Evidence. Five of the six new cases fail against the previous script and all six pass against this one. That is the property that makes them worth having.