ci: bump the pr-issue-linkage pin to the four-section contract - #105
Merged
Conversation
The caller pinned melodic-software/ci-workflows' pr-issue-linkage reusable at
e9443874 (v0.10.2), which enforces only a closing keyword and a non-empty
"## Related" section. The four-section contract (Summary/Fix/Verification/
Related) landed upstream in ci-workflows#153 between v0.12.0 and v0.14.0, so
this repository's PR template and .claude/source-control.md have been declaring
three sections nothing actually gated.
Move the pin to 7107b348 (v0.14.2), the ref six sibling repositories already
run and the ref standards' runner-policy records a contract for. The reusable's
workflow file is byte-identical from v0.14.2 through ci-workflows' main.
The job must now grant pull-requests: read and actions: read. The reusable at
this ref declares both where v0.10.2 declared neither, a reusable cannot
elevate caller permissions, and GitHub rejects it at startup when the caller
grants a stricter set, so permissions: {} would make the required context never
materialize rather than report red. Standards' runner-policy records the same
pair as this ref's minimumCallerPermissions.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
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.
No related issue: prerequisite pin bump. The drift check #58 specifies lands separately.
Summary
.github/workflows/pr-issue-linkage.ymlpinnedmelodic-software/ci-workflows'spr-issue-linkagereusable ate9443874(v0.10.2). At that ref the gate enforces exactly twothings: a native closing keyword (or a no-issue marker) and a non-empty
## Relatedsection.The four-section contract —
## Summary,## Fix,## Verification,## Related— landedupstream in
ci-workflows#153, between v0.12.0 and v0.14.0, which is after this pin. So.github/PULL_REQUEST_TEMPLATE.mdand.claude/source-control.mdhave both been declaring three sectionsthat nothing actually gated on this repository's pull requests. The two local declarations were
not mirrors of an enforced contract; they were ahead of it.
This repository was one of two callers out of nine in the organization still short of that
contract (the other,
codex-plugins, is bumped in melodic-software/codex-plugins#25).Fix
Move the pin to
7107b34832a7b6db5d08d3b132621c599fbe5e50(v0.14.2) and update the workflow'sheader comment to describe the contract that ref actually enforces.
(
claude-code-plugins,dotfiles,github-iac,medley,provisioning,standards), andthe reusable's workflow file is byte-identical from v0.14.2 through
ci-workflows'main, sov0.14.0-and-later is one contract rather than several. Standards' runner-policy records an
approvedReusableWorkflowContractsentry for this exact path-and-SHA.pull-requests: read(to read the PR body it validates) andactions: read(for itscancelled-versus-timed_out prerequisite resolver); v0.10.2 declared neither. A reusable cannot
elevate caller permissions, and GitHub rejects it at startup when the caller grants a stricter
set — leaving
permissions: {}would mean the required check context never materializes atall, rather than reporting red. Standards' runner-policy records the same pair as this ref's
minimumCallerPermissions, so this is a floor and not a surplus grant.select-runnerjob added. This repository vendors no runner-policy component andci.ymlhas no selector-conformance lane; every lane runs on hosted runners. The reusable'srunnerinput defaults toubuntu-24.04, so the thin caller shape is preserved.exempt-authorsadded. It is optional at this ref and defaults to exempting no one.Adding a bypass is a separate policy decision — see Related for the pre-existing condition it
would address.
Behavior change this lands, on purpose
Once merged,
## Summary,## Fix, and## Verificationbecome gating on this repository'spull requests, matching what both local declarations already say and what six sibling repos
already enforce.
Because the gate runs on
pull_request_target, it evaluates the base-branch definition. Soopen pull requests that lack the three sections go red on their next
synchronize,edited, orreopenedevent after this merges, without any change of their own. The queue is empty right now(zero open PRs), so nothing is affected today.
melodic-standards-sync[bot]already writes allfour sections, verified against #100, so the recurring sync PRs stay green.
This pull request itself is validated by the v0.10.2 definition on
main, not the one itintroduces.
Verification
gh api repos/melodic-software/ci-workflows/git/ref/tags/v0.14.2returns7107b34832a7b6db5d08d3b132621c599fbe5e50,type: commit(a lightweight tag, so nodereference step), committed 2026-08-13.
workflow_callcontract at that exact SHA. Inputs arerunner(default
ubuntu-24.04),prerequisite-result(defaultsuccess), andexempt-authors(default
"") — all optional, so a caller passing nowith:block is valid. Its top-levelpermissionsblock ispull-requests: read+actions: read.components/runner-policy/policy.jsoncarriesapprovedReusableWorkflowContracts["melodic-software/ci-workflows/.github/workflows/pr-issue-linkage.yml@7107b34832a7b6db5d08d3b132621c599fbe5e50"]with
allowedInputs: ["runner", "prerequisite-result", "exempt-authors"]andminimumCallerPermissions: {pull-requests: read, actions: read}. The same SHA is also inapprovedSelectorReferencesByRepositoryOwner, but that array governsselect-runner.ymlonly.standards'repin-policy-lockstep.mjsoperates on standards-owned caller files(
components/claude-lanes/*, its own.github/workflows/claude-review.yml) for theclaude-review / claude-security-review / standards-sync reusables. It does not sweep this
repository, and does not cover
pr-issue-linkage..github/PULL_REQUEST_TEMPLATE.mdalready carries all four##headings and.claude/source-control.mdalready lists all four underpr_body_required_sections, so nolocal declaration needs to change alongside the bump.
actionlint .github/workflows/pr-issue-linkage.yml— clean.typos --config _typos.toml .github/workflows/pr-issue-linkage.yml— clean.dotfilesandprovisioning, both already on7107b348, to confirmthe permissions pair is what those callers grant.
Related
("Prerequisite (separate reviewed PR)... Then chore: make the two local PR-section declarations checkable against the fixed upstream contract #58 executes mechanically"). chore: make the two local PR-section declarations checkable against the fixed upstream contract #58's own acceptance
criteria are a local drift check comparing both mirrors against the pinned reusable, which this
pull request deliberately does not implement; chore: make the two local PR-section declarations checkable against the fixed upstream contract #58 stays open and is now unblocked.
requiredSectionsarray.repository from v0.9.1 to v0.14.2.
pr-issue-linkageat thecurrent pin (verified on build: bump actions/checkout from 7.0.0 to 7.0.1 in the github-actions group #37, which failed the check and was merged anyway).
provisioninganddotfilessetexempt-authors: 'dependabot[bot],melodic-standards-sync[bot]'; this repositorysets nothing. The bump neither creates nor worsens that, so fixing it belongs in its own change.