TODO.md collides on every single PR, and its Workflow section still says to branch from main #140

Closed
opened 2026-09-03 18:17:07 +02:00 by clawbot · 1 comment
Collaborator

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:

PR conflicting files
#97 TODO.md
#112 TODO.md
#113 TODO.md
#118 TODO.md
#122 TODO.md, Dockerfile, script/cibuild
#128 TODO.md, README.md, script/lint
#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.

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.
Author
Collaborator

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
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: sneak/dnswatcher#140