Repository navigation
test(chat): the pending-input recorder polls its screen instead of trusting fs.watch - #756
Merged
Merged
Conversation
…usting fs.watch The recorder fixture redrew its screen from fs.watch. Bun's watcher can drop the change event that follows writeFileSync's truncation, so the recorder sometimes drew the empty file it read in between and never drew the new screen: "recorder screen did not update" (CI runs 38011364808 and 38044126400). Locally, truncate-then-write lost the final event 32 times in 200, three of them left on the empty read. The recorder now polls the file every 20 ms and redraws on any change, so a read during the truncation is corrected on the next tick. showScreen also waits for the pane's rendering to change: two screens end with the same footer (the trailing-space marker is trimmed away), so it returned before the redraw and the next submit raced it. The browser suite's pending-agent fixture had the same watcher and gets the same poll.
…reen-flake # Conflicts: # server/pending-input.contract.test.ts
This was referenced Oct 11, 2026
devswha
added a commit
that referenced
this pull request
Oct 11, 2026
## Change Release 0.4.7, from main at 80ca9bb (47 PRs since v0.4.6). - `package.json` and `herdr-plugin.toml`: 0.4.7. - CHANGELOG: `[Unreleased]` becomes `[0.4.7] - 2026-10-12`, with the compare links. - #513's entry moves out of the 0.4.0 section, where its branch's merge left it, and gets its credit; it says the pace is a setting, off by default (#834). - A Maintenance section covers the PRs that had no entry: #743, #756, #767, #795, #805, #810, #813, #821, #826, #831. - The note under the Hermes entry that asked for a runtime bump at release now says what a remote PC needs. - `release-summaries.json`: 0.4.7 in en/ko/ja/zh/tr (6 new, 6 improved, 5 fixed). The Turkish lines are not checked by a native speaker. - `REMOTE_BUNDLE_VERSION` 25 -> 26. Since v0.4.5's runtime the bridge gained Hermes transcripts (#604), conversation pushes (#689) and Grok/Antigravity activity (#816), so `remote-v26` is published before the app release. Not in this release: #606. ## Validation - `bun scripts/release-notes.ts 0.4.7` renders the summaries and the full changelog (235 lines). - `bun run typecheck` and `bun run build`: pass. - `TMPDIR=/tmp bun run test:unit`: one failure, `server/voice.test.ts` ("audio.webm" vs "clip.webm"), which fails the same way on unmodified `main` on this Mac (Bun 1.4.0); CI runs Bun 1.4.2. - Every PR merged since v0.4.6 was checked against the changelog section: all 47 are linked. ## Release After this merges and its CI on `main` passes: push `remote-v26`, wait for its release, then run the Release workflow with `0.4.7`.
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.
Summary
Fixes a recurring CI flake:
server/pending-input.contract.test.tsfailed with "recorder screen did not update" (main Website deploy run 38011364808, and 38044126400), unrelated to the PRs it hit.fs.watch. Bun's watcher can drop the change that followswriteFileSync's truncation, leaving the empty file it read in between on screen. Locally, truncate-then-write lost the final event 32/200 times (3 ended on the empty read). The recorder now polls its screen file every 20 ms and redraws on change.showScreennow also waits for the pane's ANSI rendering to change: two screens (lines 271, 323) end with the same footer once the trailing-space marker is trimmed, so the wait returned before the redraw and the next submit raced it. The poll made that race visible.scripts/ui-regression.ts's pending-agent fixture used the same watcher and gets the same poll.Test-only change; no changelog entry.
Verification
bun run check runwith the fullpending-input.contract.test.tsrepeated under 28 CPU burners on an isolated herdr session (results in the PR thread).bun run typecheckpasses.