loop: the merge leg must refresh adopted branches and watch post-merge main CI #238

Closed
opened 2026-09-03 13:36:59 +00:00 by logan · 1 comment
Collaborator

Found during the P0 tick's adoption planning for the six v0-era PRs. The merge leg as written verifies contexts and mergeability, but two conflict-shaped cases are handled only by luck:

  1. Branches behind main. The repo's protection has block_on_outdated_branch: true, so an adopted PR whose branch is older than main cannot merge at all. The leg must refresh the branch against origin/main first — which is also where a textual conflict should surface (as diff text the loop can resolve if it authored the hunks, or abandon to a human with a comment), rather than at the merge click.
  2. Semantic conflicts. Three PRs touching CLAUDE.md can merge cleanly and produce a self-contradicting doc; no mergeability check sees that. The leg must watch the post-merge push run on main and halt the loop on a red main, instead of reporting "merged" and moving on.

Both rules belong in .pi/skills/yj-loop/ (merge authority section) and in plan 020 (merge lifecycle section).

Found during the P0 tick's adoption planning for the six v0-era PRs. The merge leg as written verifies contexts and mergeability, but two conflict-shaped cases are handled only by luck: 1. **Branches behind `main`.** The repo's protection has `block_on_outdated_branch: true`, so an adopted PR whose branch is older than `main` cannot merge at all. The leg must refresh the branch against `origin/main` first — which is also where a **textual conflict** should surface (as diff text the loop can resolve if it authored the hunks, or abandon to a human with a comment), rather than at the merge click. 2. **Semantic conflicts.** Three PRs touching `CLAUDE.md` can merge cleanly and produce a self-contradicting doc; no mergeability check sees that. The leg must **watch the post-merge push run on main** and halt the loop on a red main, instead of reporting "merged" and moving on. Both rules belong in `.pi/skills/yj-loop/` (merge authority section) and in plan 020 (merge lifecycle section).
logan added the Kind/Enhancement
Priority
Low
4
labels 2026-09-03 13:36:59 +00:00
logan self-assigned this 2026-09-03 13:37:42 +00:00
logan added the
Status
In Progress
label 2026-09-03 13:37:42 +00:00
Author
Collaborator

⟦loop⟧ P0 finding, taking immediately. Branch feat/238-merge-leg-refresh-watch.

Approach: two rules join the written protocol — refresh-adopted-branches-before-merge (where textual conflicts surface as diff text, resolvable or abandonable, instead of at the merge click) and watch-the-post-merge-push-run (the only guard against semantic conflicts across PRs; a red main halts the loop). Both go into .pi/skills/yj-loop/ merge authority and plan 020's merge lifecycle.

⟦loop⟧ P0 finding, taking immediately. Branch `feat/238-merge-leg-refresh-watch`. Approach: two rules join the written protocol — refresh-adopted-branches-before-merge (where textual conflicts surface as diff text, resolvable or abandonable, instead of at the merge click) and watch-the-post-merge-push-run (the only guard against semantic conflicts across PRs; a red main halts the loop). Both go into `.pi/skills/yj-loop/` merge authority and plan 020's merge lifecycle.
logan closed this issue 2026-09-03 13:53:45 +00:00
gitea-actions bot removed the
Status
In Progress
label 2026-09-03 13:53:56 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: yonlu/yellowjacket#238