Conversation
The test wrote the canned curl responses to a temp file and handed Bash its path. On Windows that path is `C:\...\responses`, and Git Bash reads the backslashes in `exec 3< "C:\...\responses"` as escapes: the redirect fails with "No such file or directory" and the shell exits before the first iteration. Every case failed with status 1 and no `attempt` lines, while Linux CI stayed green. The responses now arrive on stdin and the script duplicates fd 0, so there is no path to survive the trip into Bash. That keeps the property the file was there for -- one shared descriptor that advances even inside curl's command substitution -- and drops the temp directory, its cleanup, and the extra environment variable with it. Refs every-app#329
kenchikuliu
pushed a commit
to kenchikuliu/open-seo
that referenced
this pull request
Sep 15, 2026
…tumn 429, exception noise (every-app#333)
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.
Refs #329.
The defect
The test wrote its canned
curlresponses to a temp file and handed Bash the path. On Windows that path isC:\…\responses, and Git Bash reads the backslashes inas escapes — the redirect fails with
No such file or directoryand the shell exits before the first loop iteration. Every case then reports status 1 and zeroattemptlines, exactly as the issue describes, while Linux CI stays green.Demonstrable without Windows, since it is the quoting that breaks rather than the filesystem:
The fix
The responses arrive on stdin (
spawnSync'sinput) and the script duplicates fd 0:There is now no path to survive the trip into Bash, so the failure mode cannot occur on any platform — rather than being translated around with
cygpathor a backslash rewrite, which would leave the same shape one quoting rule away from breaking again.It keeps the property the temp file was there for, and which the comment names: one shared descriptor that advances even inside curl's command substitution. The temp directory, its
try/finallycleanup, thePREVIEW_RESPONSESvariable and three imports go with it — the diff removes slightly more than it adds.Verified
Two mutations, each breaking the shared-fd property in a different way:
exec 3< /dev/nullinstead of stdininputhanded to bashThe three that survive both are the single-response cases, where the first read is all that matters — which is the right shape: a test that passes on one response says nothing about a descriptor advancing.
I could not run this on Windows — no Windows machine here. The argument that it fixes #329 is structural (there is no longer a path for Git Bash to mis-quote) plus the quoting demonstration above, not an observed green run on Windows. Worth one confirmation from a Windows contributor before you trust it.
Related: #331 covers the other half of the Windows story (CRLF checkout), sent separately as #332.