Files
Sylpheed/docs/agents/MERGE-STATE.md
sylph-decoder 6ee422b2d4 agents: the ancestor check prints nothing on success -- add the echo
sylpheed-port found this in their own §6 and it is in mine identically. I stated the
pass condition as 'exit 0' but left the command silent, so a reader running it as
written sees an empty line and cannot tell success from failure. Worse than a number
without a pass condition, because there is no number.

Now carries '; echo $?' and says why.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wuu56cE8vJGTBtn1ppsk8v
2026-08-31 04:12:36 +00:00

3.6 KiB

The two agent branches, measured — for whoever merges

PROTOCOL.md says "Commit to auto/<topic>; a human merges." Both agents have been blocked behind that for days, and both have been describing it rather than measuring it. Measured 2026-08-31:

branch ahead of main behind main an ancestor? files
auto/build-ordinal-audit (decoder) 328+ 0 yes — fast-forward 327
auto/port-p6-audio (port) 257 0 yes — fast-forward 58

Each is individually a fast-forward with nothing to resolve.

⚠️ The counts go stale by construction — every commit on either branch raises them. sylpheed-port re-derived this the same day and read 329 for the decoder branch, because a commit landed between the measurement and the check. The counts are not the claim. What does not move with the count is: main is an ancestor of both, the two change sets touch zero files in common, and the dry-run merge is clean. Re-derive with:

A=<decoder branch>; B=<port branch>

git rev-list --count origin/main..$A        # rises with every commit; not the claim
git merge-base --is-ancestor origin/main $A; echo $?
                                            # PASS = 0 (fast-forward)
                                            # ⚠️ prints NOTHING on success without
                                            #    the echo -- an empty line does not
                                            #    distinguish pass from fail
comm -12 <(git diff --name-only $(git merge-base $A $B)..$A | sort) \
         <(git diff --name-only $(git merge-base $A $B)..$B | sort) | wc -l
                                            # PASS = 0 (disjoint change sets)
git merge-tree --write-tree $A $B | wc -l   # PASS = 1 (a tree hash, no conflicts)
                                            # read-only; merges nothing

⚠️ All four were run as written before this was published, and the expected result is stated beside each — a documented command nobody has executed is the same class as a control that does not execute, and a command without a pass condition is half a check. Last run 2026-08-31: 330, exit 0, 0, 1.

And they do not conflict with each other. From their merge base (1b1a4df, 2026-08-29):

  • files touched by both branches: 0 — the change sets are disjoint;
  • git merge-tree --write-tree of the two heads exits clean, producing tree 6caed80a with no conflict markers.

So both can be merged, in either order, with zero conflicts. The first is a fast-forward; the second is an ordinary merge that touches no file the first did.

⚠️ Nothing here was merged. merge-tree is read-only and no branch was modified — this is a measurement, not an action. Merging is the human's, and neither agent may do it.

What is behind it

Three days of decoder work is reachable only from the topic branch: the dialog table (70/70 records, DLG_SELECT_DIFFICULTY = id 2000), DIFFICULTY located as a dialog in GP_DIALOG 2/3, the submenu focus rules (main menu persists, four submenus reset, reset targets the opening item), initial focus measured as NEW GAME, the corrected ring_row calibration, and the corrections to ui-record-loop-length.md's argument and the dialog record layout.

📌 The cost of the gap is not hypothetical. The port spent days reading main's 926-line HANDOFF.md while the current one — 4 000+ lines — sat on this branch; and this agent reported a defect in a BLOCKED.md row from a copy two days stale. Both were the same fault in opposite directions, and both are fixed by the merge above.