Root cause of the recurring README-sync failure: 05.1 modified README.md in
earlier steps then ran `git pull`, which aborts on a dirty tree whenever a
concurrent bot commit advanced develop first. Rewrote its commit step as a
fetch → reset --hard → regenerate → commit → push retry loop (README is a pure
function of inventory, so a hard reset never loses data and eliminates the
merge-conflict / --ours/--theirs class entirely).
Also:
- 03.1/03.2/03.3: wrap the single-shot pull --rebase && push in a 5x retry loop.
- 07.1 PR Guardian: continue-on-error (advisory; keeps the comment, drops the
blocking red ❌ on AI false positives) + PR-scoped concurrency.
- 07.2 Markdown Linter: PR/branch-scoped concurrency with cancel-in-progress.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The rebase loop never attempted a push after self-healing; it looped
back to `git pull --rebase` and hit a fresh conflict every iteration
(5x), then the final bare push failed non-fast-forward.
Root cause: in a rebase `--ours` = remote side (not our bot commit),
so the README was discarded and rebuilt each round while the remote
kept advancing.
Fix:
- Pull latest *before* committing (shrinks conflict window)
- Retry loop now tries push first, then merge-pulls on rejection
- Uses `-X ours` merge (correct semantics: keep bot's README)
- Re-runs updater after each merge so metrics stay consistent
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>