Repository navigation
The held-read control holds the read it names - #1734
Merged
Merged
Conversation
It passed one run in three. Three separate reasons, each measured: Patching the reply hook catches every read in flight, so a CommsConversation RevisionTool poll could be held instead of the page. entered was set, the loop stopped, and the test waited for a page nobody had asked for. A reply whose pending read is gone is discarded by received() by design, so holding one held nothing and released nothing. A failing run recorded process.reads.get(request_id) as None while entered was set. entered is set when the page's REPLY arrives, but the loop checked it straight after the press and broke at scroll_y == 0, racing the child it had just asked. With the filter in place, this was the only failure left and it failed honestly: no child read was held, so this proves nothing. The product was answering correctly throughout: a held read recorded resumed=True delivered=True on release. Four runs, four passes. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
There was a problem hiding this comment.
Copilot was unable to review this pull request because the user who requested the review has insufficient remaining quota. Try requesting a review at a lower effort level.
An organization owner can choose the repository organization as the billing source for reviews requested by members with a paid Copilot license. Learn about Copilot code review billing.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
test_a_held_child_read_leaves_paint_and_input_live_and_pages_when_it_is_releasedlanded with #1727 and passes one run in three. A control that proves its claim a
third of the time proves nothing, and this one guards a real user-visible promise: that
typing lands and the message area still draws while a read is outstanding in the child.
The product is not at fault. Instrumenting the held reply recorded
resumed=True delivered=Trueon release: the child answers, and the answer isdelivered. Three defects in the control, each measured:
It could hold a reply nobody was waiting for
A failing run recorded
process.reads.get(self.request_id)asNonewhileenteredwas set.
received()says what happens to those:Holding one holds nothing and releases nothing, and the test then waits ten seconds for
a page that was never owed.
It could hold the wrong read
Patching the reply hook catches every read in flight. A failing run recorded
HELD CoreReadOperation CommsConversationRevisionTool— a routine revision poll, notthe page.
enteredwas set by it, the loop stopped, and the test waited for a page nopress had asked for.
entered.is_set()can only ever detect the absence of a read. It cannot detect thewrong one, which is why the existing assertion's own words — "no child read was held,
so this proves nothing" — were true and silent.
It raced the reply it was waiting for
enteredis set when the page's reply arrives, but the loop checked it immediatelyafter the press and broke at
scroll_y == 0— the very point where the older page isrequested. The request was out and its answer had not landed. With the filter above in
place this became the only remaining failure, and it failed honestly: "no child read was
held". The loop now waits for that reply instead of racing it.
Checks
Four runs, four passes, on the branch; three for three after rebasing onto current main.
Whole file: 8 passed.
Interpreter built from declarations with
bin/toad-test-env --agent-comms /home/ts/code/projects/agent-comms --textual /home/ts/wt/claude-laptop--textual, againstCore
b8da1aac0(P101) and Textual main19df8339e.Correction to something I posted in #comms
I reported
test_a_growing_channel_draws_new_messages_for_a_tail_reader_and_keeps_a_scrolled_reader_in_placeas consistently red on toad main. It is intermittent — it passed in the whole-file run
above. I generalised from one observation. comms-phone-performance's reading stands: the
test asserts absolute
scroll_yat:163before checking painted rows at:165, whileReaderPositionpreserves content position and layout deliberately adjustsscroll_y.🤖 Generated with Claude Code