Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 8 additions & 5 deletions docs/architecture/010-commander-claude-bridge.md
Original file line number Diff line number Diff line change
Expand Up @@ -165,11 +165,14 @@ cancellation, overflow, termination, and close — the function resolves exactly
one frozen record. Nothing outside that handled set is promised to resolve. It
rejects deliberately, rather than reporting an outcome, when mandatory
post-spawn child-dispatch hardening cannot be established: the transport runs
its bounded, platform-qualified termination procedure, tears down its pipes and
listeners, and then rejects. That rejection is not `SPAWN_FAILED` and is not an
exchange outcome at all. Catches wrap only defined operational failures, so a
programmer or security-boundary defect still surfaces as a defect rather than
being laundered into a failure code.
its bounded, platform-qualified termination procedure, destroys the local
stdout and stderr ends, clears the child's listeners, re-arms the spawn-failure
absorber over the cleared handle, and then rejects. The local stdin end is left
as it is, and termination stays a request rather than a completion guarantee.
That rejection is not `SPAWN_FAILED` and is not an exchange outcome at all.
Catches wrap only defined operational failures, so a programmer or
security-boundary defect still surfaces as a defect rather than being laundered
into a failure code.

## Termination is qualified, and the limit is disclosed

Expand Down
15 changes: 9 additions & 6 deletions src/adapters/process-transport.ts
Original file line number Diff line number Diff line change
Expand Up @@ -605,12 +605,15 @@ async function terminate(
* exactly one frozen {@link AgentExchange}. Nothing outside that handled set
* is promised to resolve. Deliberate fail-closed rejection: when mandatory
* post-spawn child-dispatch hardening cannot be established, the transport
* runs its bounded, platform-qualified termination procedure, tears down its
* pipes and listeners, and then rejects. That rejection is not `SPAWN_FAILED`
* and is not an `AgentExchange` outcome at all. Catches are placed only around
* defined operational failures — `spawn`, `kill`, a broken stdin pipe, a
* hostile `AbortSignal` getter — so a programmer or security-boundary defect
* still surfaces as a defect rather than being laundered into a failure code.
* runs its bounded, platform-qualified termination procedure, destroys the
* local stdout and stderr ends, clears the child's listeners, re-arms the
* spawn-failure absorber over the cleared handle, and then rejects. The local
* stdin end is left as it is, and termination stays a request rather than a
* completion guarantee. That rejection is not `SPAWN_FAILED` and is not an
* `AgentExchange` outcome at all. Catches are placed only around defined
* operational failures — `spawn`, `kill`, a broken stdin pipe, a hostile
* `AbortSignal` getter — so a programmer or security-boundary defect still
* surfaces as a defect rather than being laundered into a failure code.
*
* **Deterministic precedence.** Every detected terminal cause is compared with
* `TERMINAL_CAUSE_PRECEDENCE`; callback arrival order cannot demote a stronger
Expand Down
Loading