Skip to content

fix(server): clean exit on stdin EOF; bump 0.2.0 -> 0.2.1 - #20

Merged
David-BS merged 1 commit into
mainfrom
fix/stdin-eof-clean-exit
Jun 15, 2026
Merged

David-BS merged 1 commit into
mainfrom
fix/stdin-eof-clean-exit

Conversation

@David-BS

Copy link
Copy Markdown
Owner

Deterministic clean exit on stdin EOF (os._exit(0) once server.run returns), guarded by a new frozen-server tier T5. Version bumped 0.2.0 -> 0.2.1 to fold the post-v0.2.0 fixes (Findings A/B/C + this) under one label. Floor 270/270 green; T0/T5 green on the Windows dev server.

server.py exits via os._exit(0) once asyncio.run(main()) returns. After the host closes stdin (EOF), anyio's stdin worker thread can be parked on the now-closed handle and the transport's TextIOWrapper has closed sys.stdout; falling through to interpreter shutdown raised a noisy post-result 'ValueError: I/O operation on closed file'. os._exit runs no finalizers and touches no std stream, so neither hazard fires; a real failure still propagates out of asyncio.run above the exit.

test_frozen_server.py adds tier T5: spawn the target with stdin closed at once, assert rc=0 with no teardown traceback (per-platform guard, bites on the frozen binary).

0.2.0 -> 0.2.1 (patch): folds the post-v0.2.0 fixes (Findings A/B/C + this) under one label; SERVER_VERSION and manifest bumped together, T0 refuses a half-bump.
@David-BS
David-BS merged commit 124212f into main Jun 15, 2026
6 checks passed
@David-BS
David-BS deleted the fix/stdin-eof-clean-exit branch June 15, 2026 15:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant