fix(loop): refresh branches before merge, watch post-merge main CI #239

Merged
logan merged 1 commits from feat/238-merge-leg-refresh-watch into main 2026-09-03 13:53:45 +00:00
Collaborator

What this is

P0 tick finding (#238): the merge leg as shipped handled two conflict-shaped cases only by luck. This puts both into the written protocol.

Changed

  • .pi/skills/yj-loop/SKILL.md — merge authority: refresh before every merge (a behind-main branch is refused by block_on_outdated_branch; the refresh is where textual conflicts surface as resolvable diff text, hunk ownership deciding resolve vs. abandon-with-comment), re-poll required contexts on the refreshed head, merge one at a time, and watch the post-merge push run on main — a red main halts the loop.
  • .planning/plans/active/020-autonomous-backlog-loop.md — same three rules under Merge lifecycle, with the argument: the semantic-conflict class (two PRs, one file, clean merge, self-contradiction) is only visible in that post-merge run.

Verification run

  • make skill-check — green (47 targets, the hook's run and CI's)
  • Docs-only change: no Go, no frontend — lint/test/ui-test/e2e not demanded; CI still runs them on this PR
  • The conflict model this encodes was measured against the six PRs awaiting adoption: all mergeable today, three touching CLAUDE.md — the refresh step is what makes that overlap safe

Closes #238

## What this is P0 tick finding (#238): the merge leg as shipped handled two conflict-shaped cases only by luck. This puts both into the written protocol. ## Changed - `.pi/skills/yj-loop/SKILL.md` — merge authority: **refresh before every merge** (a behind-main branch is refused by `block_on_outdated_branch`; the refresh is where textual conflicts surface as resolvable diff text, hunk ownership deciding resolve vs. abandon-with-comment), re-poll required contexts on the refreshed head, merge one at a time, and **watch the post-merge push run on main** — a red main halts the loop. - `.planning/plans/active/020-autonomous-backlog-loop.md` — same three rules under Merge lifecycle, with the argument: the semantic-conflict class (two PRs, one file, clean merge, self-contradiction) is only visible in that post-merge run. ## Verification run - `make skill-check` — green (47 targets, the hook's run and CI's) - Docs-only change: no Go, no frontend — `lint`/`test`/`ui-test`/`e2e` not demanded; CI still runs them on this PR - The conflict model this encodes was measured against the six PRs awaiting adoption: all mergeable today, three touching `CLAUDE.md` — the refresh step is what makes that overlap safe Closes #238
logan added 1 commit 2026-09-03 13:38:25 +00:00
fix(loop): refresh branches before merge and watch post-merge main CI
CI / check (push) Skipped
CI / e2e (push) Skipped
CI / check (pull_request) Successful in 3m16s
CI / e2e (pull_request) Successful in 11m30s
7838f45ed4
Adopting the six v0-era PRs surfaced two conflict-shaped cases the merge
leg handled only by luck. Behind-main branches are refused outright by
the repo's block_on_outdated_branch protection, so the leg now refreshes
every branch against origin/main before merging — which is also where a
textual conflict should surface, as diff text the loop resolves only
where it authored the hunks, otherwise abandoning the PR to a human
with a comment. And the one guard no mergeability check provides is the
push run on main after the merge: three PRs touching the same file can
merge cleanly and contradict each other, so a red main now halts the
loop instead of the tick reporting merged and moving on.

Closes #238
logan merged commit 7b90633456 into main 2026-09-03 13:53:45 +00:00
Sign in to join this conversation.