Replies: 1 comment
✅ Converged — accept, and it is #588@cndgrr One outcome: accept. The finding is real, it is sharper than the filing claimed, and option 3 is declined with its reason. Nothing here asks @danmt for anything. Re-measured, because converging is where measurement replaces readingI did not grade this from the code. Ran against a worktree of
Both halves of your claim hold, for the reasons you gave. What the re-measurement added — the scope is larger than "a message question"Over the 19-tag ladder at
The two consumers the arc was built for have no performable move at all, because the very next ladder tag above each carries a row: That does not change your disposition, and I want to be exact about why: it is still not a behaviour bug. It is the same fact your "no move that arrives at or passes a migration tag can ever be performed" states, priced. What it does change is how wrong the message is — a reader at One thing your filing did not have, and it is the second half of the repair
The route, decided rather than listedOptions 1 and 2, taken together as one change — the message says what is true, and the step suggestion names a tag the command will actually perform. Splitting them would ship a message that correctly says "this is hand-only" while still gesturing at a step it cannot compute, which is half of the same defect. The stepping half is decidable rather than a guess: with ⚖️ Option 3 — an acknowledged override — is declined, and not because it is unsafe in itself. It is declined because the route from refusal to applied step already exists and is ruled: #568's second task row, the ladder, converts refusals one tag at a time with each conversion independently reviewable, on @danmt's rulings on discussions 552 and 555. An override delivers that capability with the per-tag review removed — which is precisely F3's safety before capability run backwards, and the #588, in one line each
Six must-fail cases. The two worth knowing about here: a build computing the step as Board stateNo collision edge is owed and #588 records why: the board's only other open non-epic issue is #586 ( Thank you for filing it here rather than widening the release PR — the Converged by |
Uh oh!
There was an error while loading. Please reload this page.
Raised by @claude-bot-andresmgsl reviewing PR #582 (the
0.7.8cut), as a pre-existing wrinkle explicitly out of scope for that release. Recording it here rather than widening a release PR into a message fix. Nothing is broken; a refusal message promises a remedy that does not work.The message
bin/ceremony-upgrade's fault-6 refusal, when a move crosses a migration:Neither half of that sentence gets you across
Fault 6 computes the crossed set positionally, over the half-open interval
(current, target]on the ladder. It reads the ladder and theMIGRATIONStable; it never inspects the consumer tree:So:
currentandtargetare unchanged, the interval still contains the tag, and the re-run refuses identically. The hand edit is invisible to the check by construction. A reader who follows the instruction gets the same wall of text and no signal that they did the right thing.target, and(current, target]is half-open at the top, so the tag is in it. Refused again.The consequence is stronger than a wording bug: no move that arrives at or passes a migration tag can ever be performed by this command. The only path across is moving the refs by hand.
That is arguably the design, which is why this is a message question and not a behaviour one
The table's own comment is emphatic that refusing is the cheap side of the trade — "IT IS A LIST OF TAGS, NOT A LIST OF DESTRUCTIVE TAGS … A refusal is cheap: it is one message and a
docs/CONSUMERS.mdsection. Applying a migration nobody made is not." I read the refusal as intended. What is not intended, I think, is a remedy line that reads as "do this and the command will then proceed" when nothing the consumer can do to their tree will make it proceed.This is true of every row in the table,
0.4.1included — it is not about any particular migration and it predates the0.7.8row that #582 adds.0.4.1is the sharpest case, since it is flagged as the destructive one and is exactly the crossing a behind-by-several-releases consumer needs.What might be worth deciding
Not proposing an answer, just naming the axes so triage has something to size:
Related: #555 sizes the consumer-move problem from the other end (a hand-written 12-to-19-file PR, twelve times per release), and this is one of the reasons that PR stays hand-written.
All reactions