Repository navigation
Description
Problem
Three small gaps in the epic flow, found by its first two real runs and approved by the owner on 2026-10-13 ("agree with your recommendations, go ahead"):
- An epic's PR CI runs only the specs the diff selects, so an epic can reach main without a full spec run.
- A sync PR (main merged into the epic branch) carries main's already-merged files, so
merge-checkcan HOLD or failowner,harnessandcontracton content proven on main. Its head cannot bemainwhen there is a conflict to resolve. - relay's
ci.ymlhas noworkflow_dispatchtrigger, so a full run cannot be dispatched on a relay epic head. - eve's
tests-onlyguard countstest/e2e/relay-pin.jsonas a test file, so a re-pin PR fails it without a label that has been forgotten twice.
Root cause
The epic model assumed the PR CI was the full CI and that a sync PR is an ordinary child. Neither holds. Seen on eve#446 and eve#453.
Fix
merge-check: afull-cicondition for an epic-to-main PR (headepic/<N>-...): a successfulworkflow_dispatchcirun on the head commit. NA for every other PR.merge-check: a sync PR (baseepic/<N>-slug, headsync/<N>-...) is judged on the files that differ from main's head, not on its whole file list.- Flow rules: close-child line 2 adds the dispatched full run; line 4 names the
sync/<N>-mainbranch and says conflicts are resolved on it. - relay
ci.yml: addworkflow_dispatch. - eve
scripts/ci-guards.sh: count exactlytest/e2e/relay-pin.jsonas code for thetests-onlyguard (eve PR fix: relay-pin.json is a pin, not a test, for the tests-only guard (#455) #469). relay's copy of the script is not changed: it has no such file; the header's "same file in every repo" now differs by one line, accepted and logged.
Contract
Ownership: the owner's merge-check (merge-check, CONTRACT.md, test_merge_check.py), the owner's flow rules file and the remote-coord/fanout wording, and relay's .github/workflows/ci.yml (own child PR). Not in a repo except the last. Gate change (#2), approved by the owner in this conversation.
Proof: the merge-check suite (existing 101 stay green, new tests from the criteria, one break-and-restore each), then one rehearsal epic across both repos on the real tools, reverted afterwards.
Ownership for the guard carve-out PR (eve#469), recorded 2026-10-14: scripts/ci-guards.sh, test/static/ci-guards-selftest.js. Two files, about 150 lines.
Activity
Merge pull request #469 from barelyworkingcode/chore/guard-relay-pin
barelyworkingcode commentedon Oct 14, 2026
Reopened: the batch's last doc line (eve#481, naming the epic full run as before merge) closes it. merge-check needs an open closing issue.
Merge pull request #481 from barelyworkingcode/chore/epic-full-run-line