fix(app-boot): keep the fail-loud exit fatal while the terminal is released
Review of the previous commit found two defects in the release path, both reproduced against the implementation: - The timeout guarding a never-settling release was unref'ed. An unhandledRejection listener suppresses Node's default fatal exit, so with nothing else referenced the process reached an empty event loop and exited 0 on the very failure it was reporting. Keep the timer referenced and clear it once the race settles. - The handler uninstalled itself before awaiting the release. A second concurrent rejection then became uncaught and killed the process mid-teardown, stranding exactly the terminal state this restores. Replace the uninstall with a latch: the first rejection is the reported one, and later rejections (teardown's own included) fall through to the pending exit. Add the PTY regression the fake-process tests cannot express: boot the shipped tree over a fixture whose llm-pi-ai providers value is list-shaped, expect exit 1, and assert the captured bytes carry both the diagnostic and ESC[?2004l. Against the pre-fix source the stream ends at ESC[?2004h ESC[>7u ESC[?u ESC[c with no reset and the case fails, so it pins the actual bug. Split the two-shape formatting test into one install per case; a latched handler reports once by design.
This commit is contained in:
10
apps/cli/tests/fixtures/tui-invalid-provider.cordis.yml
vendored
Normal file
10
apps/cli/tests/fixtures/tui-invalid-provider.cordis.yml
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
# An overlay whose `llm-pi-ai` config fails schema validation: `providers` is a
|
||||
# dict keyed by provider name, and a list is the shape users reach for. The
|
||||
# entry rejects while `ui-tui` — mounted concurrently by the Loader — already
|
||||
# holds the terminal, which is the boot failure the fail-loud release hook
|
||||
# exists for.
|
||||
- id: llm-pi-ai
|
||||
config:
|
||||
providers:
|
||||
- provider: openai
|
||||
apiKey: keyless-invalid-shape
|
||||
Reference in New Issue
Block a user