fix(ci): a check that never starts, and a contract that never moves - #11
Conversation
Two things `engine.md` section 11.4 gained after the workflow was written, both measured by other engines rather than guessed here. **The verdict is published, not awaited.** A pull request opened with a repository's own `GITHUB_TOKEN` starts no `pull_request` workflow -- GitHub cuts there so an action cannot call itself in a loop -- so a branch protection requiring `Verify` would wait for a check that never starts, and auto-merge would never fire. The workflow already runs the section 12.5 entry point; it now publishes that result as the `Verify` commit status on the head it just pushed. Same definition of green, same name, no second workflow, and no token wider than `statuses: write` on its own repository. **The prose contracts travel with the release.** `spec.md`, `engine.md` and `engine-swift.md` are release artefacts since spec#87, listed in `SHA256SUMS` and covered by the attestation this workflow already verifies. They were excluded here on the ground that the release did not publish them; it does now, and an engine that fetched only the data would keep a stale contract without noticing, because nothing digests them.
4274a93 to
a25fa8d
Compare
|
One more guard, made real rather than advisory.
It is not the whole condition, but whether main is protected at all is readable |
engine.mdsection 11.4 gained two requirements after #9 was written. Both weremeasured by other engines; both are defects in what #9 shipped.
The required check would never have started
A pull request opened with a repository's own
GITHUB_TOKENstarts nopull_requestworkflow — GitHub cuts there so an action cannot call itself in aloop. #9 armed auto-merge behind a branch protection requiring
Verify, andVerifycomes fromci.yml, which would never have run on a synchronizationpull request. Every synchronization would have sat at
mergeStateStatus: BLOCKEDforever, waiting for a check with nothing to start it.
The workflow already runs the section 12.5 entry point. It now publishes that
result as the
Verifycommit status on the head it just pushed:Same definition of green, same name the protection requires, no second workflow
recomputing it, and no token wider than
statuses: writeon the repository's owncommits. Measured on this branch's head: the
POSTsucceeds andGET /commits/{sha}/statusreads it back asstate: success.The prose contracts travel with the release now
spec.md,engine.mdandengine-swift.mdbecame release artefacts in spec#87,listed in
SHA256SUMSand covered by the attestation this workflow alreadyverifies. #9 excluded them, on the then-correct ground that the release did not
publish them. Section 11.4 step 3 now names them, and the reason is the one the
Go engine gave: an engine that fetched only the data would keep a stale contract
and would not notice, because nothing digests them.
Still open, and still measured
templates. docs: the one file of section 11.4 step 3 the release does not carry #10 records it.
it is refused at the repository level with "The organization does not allow
GitHub Actions to create or approve pull requests". Until an owner checks it
for the
libbusinessidorganization, a synchronization reaches step 6 and diesthere with that instruction printed, its branch pushed.