Repository navigation
Reliability: Fish test homes (#403), superseded classifications (#408), multi-row progress redraws (#388) - #412
Merged
Merged
Conversation
…w redraws #403: an interactive Fish on a fresh home starts its man-page completion generator detached; it outlived test shells and raced home removal. Test homes now mark that generation as done (Fish 3 and 4 locations), and the runner no longer passes ambient XDG data, cache and state directories to tests. A regression asserts no generator starts. #408: newer shell knowledge resolved in-flight classifications as unknown, so a stored queued command could keep the unclassified color. A superseded lookup is now asked again against the new knowledge (bounded); stale answers are still never cached. The highlight tests wait for the shell's startup knowledge and for the lookups they started instead of one event-loop turn. #388: the output parser ignored row movement, so every frame of a multi-row progress display stayed in the transcript. Programs can now redraw their own recent rows (cursor up/down, save/restore, partial erases), never above NMSh's lines or more than a screen height; absolute positioning keeps the previous behavior.
This was referenced Oct 18, 2026
Open
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.
Stacked on #411 (design doc). Merge #411 first; GitHub then retargets this PR to
dev.What and why
#403: Fish test teardown race (test fixture, not a product leak). On a home with no generated completions, an interactive Fish starts
fish_update_completionsdetached:$__fish_cache_dir/generated_completions, Fish 3.x$__fish_user_data_dir/generated_completions.rmSync(the CIENOTEMPTY).Fix:
scripts/test-shell-home.mjsmarks that generation as done in test homes. The runner,LiveSandboxand the fixtures that start Fish with their own home use it.XDG_DATA_HOME/XDG_CACHE_HOME/XDG_STATE_HOMEto tests. Under a wrapper that sets a shared cache, test shells had been writing there.#408: queued-highlight classification (a production race, plus a test race).
SemanticService's cache and resolved in-flight lookups asunknown. A stored command whose lookup was in flight when the next prompt arrived (a fast queue) kept the unclassified color for good.setImmediate.#388: multi-row progress redraws.
AnsiOutputParserhandled\rand current-line erases but ignored row movement, so each frame of a multi-row progress display became permanent lines.CSI A/B/E/F,ESC M/D/E, save/restore (ESC 7/8,CSI s/u),CSI J0/1 andCSI K0/1/2.OutputBuffer.setScreenRows).Tests
Each new test fails on the unfixed code and passes with the fix:
shellAdapters: a prepared Fish home starts no generator. The negative control finds the generator.shellIntelligence: a superseded lookup is answered from the new knowledge.queuedHighlight: a stored command whose lookup was superseded still ends classified (realSemanticService). Old code: never recolored, and settledunknown.ansiLiveRegion: 10 tests, including the Inline multi-line ANSI progress redraws can accumulate duplicate transcript lines #388 fixture through a real zsh PTY, interleaved log lines, fences, split sequences, resume, and 10,000 frames in about 35 ms. The old parser fails 9 of 10; the tenth is the documented unchanged absolute-positioning case.Further runs:
OutputBuffer, the presenter or copy payloads: green.npm run verifylocally:Not verified
Physical terminal checks are listed in
docs/testing/v021-physical-qa.md(section 1) and have not been run.Refs #403, #408, #388, #410