Split out of #135 while rebasing the seven open PRs onto next. Every one of the seven conflicted, and TODO.md was the only conflicting file in four of them.
The collision
TODO.md has a # Completed Steps section that is a newest-first prose changelog. The documented workflow tells every branch to prepend an entry to it and to commit that entry in the same commit as the work. Two branches therefore always insert at the same offset, at the top of the same list, so every pair of concurrent PRs conflicts by construction. This is not an occasional merge accident; it is guaranteed by the file's design.
Measured on the current seven open PRs against next:
The cost is real: it is conflict-resolution work on every merge, and each resolution is an opportunity to silently drop somebody else's entry.
The stale content
Separately, the file's own instructions are now wrong:
# Workflow opens with "branch (from main)". Branches are cut from next now, per sneak 2026-08-10. Following the file as written produces exactly the mis-based PRs we just spent a cycle rebasing.
# Workflow says "merge to main if the branch is not protected, otherwise open a PR". main is protected and is only ever touched by the milestone PR from next.
# Status describes a checkout that has not existed for months: it claims core resolver work is in flight on feature/resolver with a dirty internal/resolver/resolver_test.go, that origin/main is 8 commits ahead, and that feature/resolver contains "hermetic mocked tests". Mocked DNS tests are now forbidden outright, so that sentence documents a banned practice as the current state.
# Next Step claims the required README sections may still be missing; that work has since landed.
Suggested fix
Two parts, both cheap:
Stop the collisions. Either drop # Completed Steps entirely — git log plus the issue tracker already hold this history, and it is duplicated effort to maintain a hand-written third copy — or, if the narrative is wanted, move it to append-at-bottom ordering so concurrent inserts stop landing at the same offset. Dropping it is preferred; it is a changelog reimplemented by hand.
Correct the stale text.# Workflow must say branch from next, PR into next, manager squash-merges, main only via the milestone PR. # Status should be rewritten to current reality or deleted, and the "hermetic mocked tests" sentence must go regardless, since it contradicts the no-DNS-mocking rule.
Not assigning this to anyone. It needs a decision on part 1 before a worker touches it, and it should land after the seven in-flight PRs merge, otherwise it just adds an eighth conflict on the same file.
Split out of https://git.eeqj.de/sneak/dnswatcher/issues/135 while rebasing the seven open PRs onto `next`. Every one of the seven conflicted, and `TODO.md` was the *only* conflicting file in four of them.
## The collision
`TODO.md` has a `# Completed Steps` section that is a newest-first prose changelog. The documented workflow tells every branch to prepend an entry to it and to commit that entry *in the same commit as the work*. Two branches therefore always insert at the same offset, at the top of the same list, so every pair of concurrent PRs conflicts by construction. This is not an occasional merge accident; it is guaranteed by the file's design.
Measured on the current seven open PRs against `next`:
| PR | conflicting files |
| --- | --- |
| https://git.eeqj.de/sneak/dnswatcher/pulls/97 | `TODO.md` |
| https://git.eeqj.de/sneak/dnswatcher/pulls/112 | `TODO.md` |
| https://git.eeqj.de/sneak/dnswatcher/pulls/113 | `TODO.md` |
| https://git.eeqj.de/sneak/dnswatcher/pulls/118 | `TODO.md` |
| https://git.eeqj.de/sneak/dnswatcher/pulls/122 | `TODO.md`, `Dockerfile`, `script/cibuild` |
| https://git.eeqj.de/sneak/dnswatcher/pulls/128 | `TODO.md`, `README.md`, `script/lint` |
| https://git.eeqj.de/sneak/dnswatcher/pulls/131 | `TODO.md`, `script/bootstrap` |
The cost is real: it is conflict-resolution work on every merge, and each resolution is an opportunity to silently drop somebody else's entry.
## The stale content
Separately, the file's own instructions are now wrong:
- `# Workflow` opens with **"branch (from `main`)"**. Branches are cut from `next` now, per sneak 2026-08-10. Following the file as written produces exactly the mis-based PRs we just spent a cycle rebasing.
- `# Workflow` says "merge to `main` if the branch is not protected, otherwise open a PR". `main` is protected and is only ever touched by the milestone PR from `next`.
- `# Status` describes a checkout that has not existed for months: it claims core resolver work is in flight on `feature/resolver` with a dirty `internal/resolver/resolver_test.go`, that origin/main is 8 commits ahead, and that `feature/resolver` contains "hermetic mocked tests". Mocked DNS tests are now forbidden outright, so that sentence documents a banned practice as the current state.
- `# Next Step` claims the required README sections may still be missing; that work has since landed.
## Suggested fix
Two parts, both cheap:
1. **Stop the collisions.** Either drop `# Completed Steps` entirely — git log plus the issue tracker already hold this history, and it is duplicated effort to maintain a hand-written third copy — or, if the narrative is wanted, move it to append-at-*bottom* ordering so concurrent inserts stop landing at the same offset. Dropping it is preferred; it is a changelog reimplemented by hand.
2. **Correct the stale text.** `# Workflow` must say branch from `next`, PR into `next`, manager squash-merges, `main` only via the milestone PR. `# Status` should be rewritten to current reality or deleted, and the "hermetic mocked tests" sentence must go regardless, since it contradicts the no-DNS-mocking rule.
Not assigning this to anyone. It needs a decision on part 1 before a worker touches it, and it should land *after* the seven in-flight PRs merge, otherwise it just adds an eighth conflict on the same file.
Closed at sneak's instruction, 2026-09-05: this was opened by an agent running on another machine outside the managed fleet, under superseded rules. Reopen if the content is wanted.
Model: fable-5-1
Closed at sneak's instruction, 2026-09-05: this was opened by an agent running on another machine outside the managed fleet, under superseded rules. Reopen if the content is wanted.
Model: fable-5-1
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Split out of #135 while rebasing the seven open PRs onto
next. Every one of the seven conflicted, andTODO.mdwas the only conflicting file in four of them.The collision
TODO.mdhas a# Completed Stepssection that is a newest-first prose changelog. The documented workflow tells every branch to prepend an entry to it and to commit that entry in the same commit as the work. Two branches therefore always insert at the same offset, at the top of the same list, so every pair of concurrent PRs conflicts by construction. This is not an occasional merge accident; it is guaranteed by the file's design.Measured on the current seven open PRs against
next:TODO.mdTODO.mdTODO.mdTODO.mdTODO.md,Dockerfile,script/cibuildTODO.md,README.md,script/lintTODO.md,script/bootstrapThe cost is real: it is conflict-resolution work on every merge, and each resolution is an opportunity to silently drop somebody else's entry.
The stale content
Separately, the file's own instructions are now wrong:
# Workflowopens with "branch (frommain)". Branches are cut fromnextnow, per sneak 2026-08-10. Following the file as written produces exactly the mis-based PRs we just spent a cycle rebasing.# Workflowsays "merge tomainif the branch is not protected, otherwise open a PR".mainis protected and is only ever touched by the milestone PR fromnext.# Statusdescribes a checkout that has not existed for months: it claims core resolver work is in flight onfeature/resolverwith a dirtyinternal/resolver/resolver_test.go, that origin/main is 8 commits ahead, and thatfeature/resolvercontains "hermetic mocked tests". Mocked DNS tests are now forbidden outright, so that sentence documents a banned practice as the current state.# Next Stepclaims the required README sections may still be missing; that work has since landed.Suggested fix
Two parts, both cheap:
# Completed Stepsentirely — git log plus the issue tracker already hold this history, and it is duplicated effort to maintain a hand-written third copy — or, if the narrative is wanted, move it to append-at-bottom ordering so concurrent inserts stop landing at the same offset. Dropping it is preferred; it is a changelog reimplemented by hand.# Workflowmust say branch fromnext, PR intonext, manager squash-merges,mainonly via the milestone PR.# Statusshould be rewritten to current reality or deleted, and the "hermetic mocked tests" sentence must go regardless, since it contradicts the no-DNS-mocking rule.Not assigning this to anyone. It needs a decision on part 1 before a worker touches it, and it should land after the seven in-flight PRs merge, otherwise it just adds an eighth conflict on the same file.
clawbot referenced this issue2026-09-04 00:10:40 +02:00
Closed at sneak's instruction, 2026-09-05: this was opened by an agent running on another machine outside the managed fleet, under superseded rules. Reopen if the content is wanted.
Model: fable-5-1