Fix what the distillation found in its own handoff fix
The first two-sided distillation this repo has produced reviewed the change that made it possible, and found four defects in it. Three were confirmed against the code here; the fourth the reviewer experienced first-hand.
One: the new messages could not print in the window they were for
summarizeRun drops unanswered SEEDED questions from rounds, so unanswered is 0 for any run whose only outstanding questions are the standing six — which is every run before the reviewer records a batch. get_answers branched on that before either new string, so the reviewer was told "That is every round, and all of them are answered" while six were unanswered, and neither the stall warning nor the "the author is working" reassurance was reachable. The reviewer confirmed it live: no author_seen signal at all until it recorded 17 questions, at which point the message appeared and worked.
So the count that decides all of this is now unanswered + standing_unanswered, which is what the reviewer is actually waiting for.
Two: patience was sized against the wrong quantity
The flat 420s was justified by one run taking 9m52s END TO END. That is not the largest gap between two author calls, and the gap that matters is the answer batch itself: the author answers a whole batch in ONE call, so there is no contact from the moment it starts composing until the answers land, and that stretch grows with the number of questions.
The reviewer hit it. It asked 17 on top of the standing 6, the author went quiet for 426s composing 23 answers, crossed 420s, and was told STOP POLLING — the same false negative, one step further on, and again with the perverse direction: a thorough reviewer asks more, which lengthens the batch, which makes the cliff likelier. Being careful was punished.
Patience now scales with what is being waited for: 420s plus 45s per outstanding question. The 426s gap passes at any realistic batch size, and a crashed author is still eventually given up on.
Three: the overwrite guard broke the documented correction cycle
Comparing head SHAs refuses the flow reviewer.md prescribes — commit the document, fix a finding, the branch moves because committing moved it, compute_diff again, resubmit — because the committed file then holds the old head. It fires from a branch's SECOND commit onward, not only on main, and the remedy it printed ("put this change on its own branch") is unusable when it already is, sending every post-commit correction to overwrite: true — the flag the guard exists to keep rare.
The test is now which RUN wrote the file. document_path is exact: a resubmit from the same run is a correction however far the branch has moved, and a file written by another run, or by a person, is not this run's to replace. Ancestry was the other candidate and fails the opposite way — it allows drift but on a long-lived branch waves through two distillations at successive points, which is the overwrite this is for.
FOUR, and smaller:
- •The guard tested one end of a range its comment called a range. Same head with a different base is a different run describing a different change, and it wrote silently. Both ends now.
- •
existing_interviewechoed a PR-editable file's contents unbounded into a response. Every other response here is bounded because a 234KB one once spilled to disk and took a run_id with it. Now a short summary, defensively read. - •answer_questions was the only heartbeat that fired before the run was known to exist. A call naming a run that does not exist is not evidence of an author working on one that does.
- •styles.css was stale again: 62aeec7 added a
.ruleclass and the CSS was not rebuilt, 55 bytes. The author predicted this failure from reading the diff, with no shell, and it is this repo's commonest CI break for the second time in three days.
The document that found all this is committed with it.
Also
- •Stop the reviewer abandoning a working author, and stop clobbering a document. Two failures from dogfooding the distillation on this repo's own commits. Both were found by running it, not by reading it.
- •Let the author's whole read count as working, and stop paying twice. Three findings from the distillation's own review of the handoff fix. All three are the same shape: the fix was right about what to do and wrong about where the boundaries were.
- •Redesign the guided review and landing page from the approved mocks. The guided review becomes a route: Overview, Diagrams, Verification, Risk cues, Walk the change, Open questions, then Submit. Every step ends in one fixed Continue bar, so navigation never moves as content changes.
Commits for this release: v1.0.7…v1.0.8