Three review nits, all verified against the tree, plus a tighter scope than the
first attempt at them.
The behaviour suite asserted "promote-rc does not trim the rc tag" against the
whole file. promote-rc.yaml has no .trim() today, so it passed, but any unrelated
.trim() added anywhere in the workflow would have failed a test about tag policy.
Scoping it to the parse JOB was not enough either: that job is ~180 lines, most
of them the e2e gate's github-script, whose string handling has nothing to do
with tag policy. Both greps are now scoped to the parse STEP, and run through a
code_lines filter copied from the contract suite so a YAML comment mentioning
.trim() cannot fail them.
Mutation-checked in both directions: a .trim() injected into the parse step fails
the test, one injected into the e2e-gate step of the same job does not.
- The Step 2 checklist entry still said "must be main" while Step 2 itself now
lists three valid starting points (main, detached at the release tag, detached
at the rc tag being promoted). The checklist is what an agent ticks off, so it
was the half that mattered; it now points at Step 2 rather than re-encoding the
count, so a fourth configuration cannot desync it. The heading said "Checking
current branch", which two of the three states do not have.
- hack/testdata/needs-semantics.yaml named release-changelog-contract.bats as its
consumer; the only consumer is release-changelog-behaviour.bats.
50/50 tests green across the three suites (11 + 24 + 15).
Assisted-By: Claude <noreply@anthropic.com>
Signed-off-by: Myasnikov Daniil <myasnikovdaniil2001@gmail.com>