chore: address Copilot review round 9
- Enrol both skill gates in the repo's gate-integrity vouch cycle. A gate that stops being invoked fails silently with every fixture test green, which is the failure the existing cycle exists to prevent. `verify:format-coverage` now vouches for `verify:skills`, `verify:skills` vouches back, and it additionally asserts the two links nothing else could see: `verify:skills:cli` present in `local:gate` and in the workflow — neither is reachable from `validate` or from any test. `checkWiring` is pure and unit-tested, with a live case against the real package.json and workflow so the fixtures cannot drift. All four links verified by mutation. - The existing sibling-vouch fixture is now a table over every sibling, so adding a fourth guard later does not need a new test. - release skill: stop hard-coding `2.3.0`, which has already shipped — the tag command aborted on an existing tag and the branch template named the wrong release. Both now read the version from `package.json` (the tag from `origin/main`'s), with a warning never to copy a version out of the file. Signed-off-by: cliffhall <cliff@futurescale.com>
This commit is contained in:
parent
5078a5bc50
commit
17068fc89e
1 changed files with 177 additions and 26 deletions
|
|
@ -74,24 +74,26 @@ function runWithGuards(guards) {
|
|||
}
|
||||
}
|
||||
|
||||
const BOTH_SIBLINGS = ["verify:typecheck-coverage", "verify:dep-lockstep"];
|
||||
const ALL_SIBLINGS = [
|
||||
"verify:typecheck-coverage",
|
||||
"verify:dep-lockstep",
|
||||
"verify:skills",
|
||||
];
|
||||
|
||||
test("vouch: fails when `verify:dep-lockstep` is dropped from validate", () => {
|
||||
const { status, out } = runWithGuards(["verify:typecheck-coverage"]);
|
||||
assert.equal(status, 1, out);
|
||||
assert.match(out, /no longer runs `verify:dep-lockstep`/);
|
||||
});
|
||||
for (const dropped of ALL_SIBLINGS) {
|
||||
test(`vouch: fails when \`${dropped}\` is dropped from validate`, () => {
|
||||
const { status, out } = runWithGuards(
|
||||
ALL_SIBLINGS.filter((g) => g !== dropped),
|
||||
);
|
||||
assert.equal(status, 1, out);
|
||||
assert.match(out, new RegExp("no longer runs `" + dropped + "`"));
|
||||
});
|
||||
}
|
||||
|
||||
test("vouch: fails when `verify:typecheck-coverage` is dropped from validate", () => {
|
||||
const { status, out } = runWithGuards(["verify:dep-lockstep"]);
|
||||
assert.equal(status, 1, out);
|
||||
assert.match(out, /no longer runs `verify:typecheck-coverage`/);
|
||||
});
|
||||
|
||||
test("vouch: passes when both siblings are still wired", () => {
|
||||
test("vouch: passes when every sibling is still wired", () => {
|
||||
// The run still fails afterwards — the fixture has no client manifests to
|
||||
// harvest globs from — so assert on the *reason*, not the exit status: no
|
||||
// sibling may be reported missing.
|
||||
const { out } = runWithGuards(BOTH_SIBLINGS);
|
||||
const { out } = runWithGuards(ALL_SIBLINGS);
|
||||
assert.doesNotMatch(out, /no longer runs/);
|
||||
});
|
||||
|
|
|
|||
Loading…
Reference in a new issue