Release 0.6.1 #77

Merged
mph merged 1 commit from release/0.6.1 into main 2026-09-09 08:09:03 +00:00
Owner

Cuts 0.6.1.

A patch, not a minor: the diff from v0.6.0 is this one fix and its tests, with no API change.

What it fixes

An interrupted query left the Claude CLI running. Three faults at one seam:

  1. The blocking stdout read sat on the consuming fiber, so that fiber never unwound and no
    finalizer ever ran.
  2. Teardown awaited the forked pipe readers, and a pipe read answers neither fiber nor thread
    interruption — only the process dying ends it, so waiting before the kill was a deadlock.
  3. A window between Command.run and ZIO.addFinalizer(kill) left a spawned CLI with nothing
    registered to end it.

The kill also reached only the direct child, so a Stop taken during a tool call orphaned the tool
and left it working. It now ends the tree.

Both call sites — a one-off query and a long-lived session — run one mechanism:
ProcessManager.spawnUnderKill and ProcessManager.forkPipeReader.

Also: a reply Claude Code writes itself when repairing a transcript killed mid-turn is marked
<synthetic>, and was being drawn as the agent's own words. It now renders as an injected reply.

Evidence

Measured on the consumer before the version was cut: the CLI and the tools it started are gone
within ~150 ms of a Stop, and the next message continues the same conversation. Before, the process
outlived the interrupt entirely.

Shipped by #76. Full reasoning in project-management/efforts/cc-chat/slices/07-stop-stops-the-machine/.

🤖 Generated with Claude Code

https://claude.ai/code/session_01XTrxcxBQiNjXh79dN8Sh5x

Cuts `0.6.1`. A patch, not a minor: the diff from `v0.6.0` is this one fix and its tests, with no API change. ## What it fixes An interrupted query left the Claude CLI running. Three faults at one seam: 1. The blocking stdout read sat on the **consuming** fiber, so that fiber never unwound and no finalizer ever ran. 2. Teardown **awaited** the forked pipe readers, and a pipe read answers neither fiber nor thread interruption — only the process dying ends it, so waiting before the kill was a deadlock. 3. A window between `Command.run` and `ZIO.addFinalizer(kill)` left a spawned CLI with nothing registered to end it. The kill also reached only the direct child, so a Stop taken during a tool call orphaned the tool and left it working. It now ends the tree. Both call sites — a one-off query and a long-lived session — run one mechanism: `ProcessManager.spawnUnderKill` and `ProcessManager.forkPipeReader`. Also: a reply Claude Code writes itself when repairing a transcript killed mid-turn is marked `<synthetic>`, and was being drawn as the agent's own words. It now renders as an injected reply. ## Evidence Measured on the consumer before the version was cut: the CLI **and the tools it started** are gone within ~150 ms of a Stop, and the next message continues the same conversation. Before, the process outlived the interrupt entirely. Shipped by #76. Full reasoning in `project-management/efforts/cc-chat/slices/07-stop-stops-the-machine/`. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01XTrxcxBQiNjXh79dN8Sh5x
Release 0.6.1
All checks were successful
CI / Check Formatting (pull_request) Successful in 54s
CI / Compile (pull_request) Successful in 1m19s
CI / Check Linting (pull_request) Successful in 57s
CI / Run Tests (pull_request) Successful in 1m25s
CI / Check Bundle Size (pull_request) Successful in 45s
CI / Run Integration Tests (pull_request) Successful in 1m42s
0239d1ce17
A patch: Stop now stops the machine. An interrupted query left the Claude
CLI running — three faults at one seam. The blocking stdout read sat on
the consuming fiber, so that fiber never unwound and no finalizer ran.
Teardown then awaited the forked pipe readers, and a pipe read answers
neither fiber nor thread interruption, so waiting for one before the kill
was a deadlock. And an interrupt landing between the spawn and the kill's
registration left a CLI with nothing to end it.

The kill also reached only the direct child, so a Stop taken during a
tool call orphaned the tool and left it working. It now ends the tree.

Both call sites — a one-off query and a long-lived session — run one
mechanism: ProcessManager.spawnUnderKill and forkPipeReader.

Also: a reply Claude Code writes itself when it repairs a transcript
killed mid-turn is marked `<synthetic>`, and was being drawn as the
agent's own words. It now renders as an injected reply.

No API change. Measured on the consumer before the version was cut: the
CLI and the tools it started are gone within ~150 ms of a Stop, and the
next message continues the same conversation.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XTrxcxBQiNjXh79dN8Sh5x
mph merged commit 07f77144b4 into main 2026-09-09 08:09:03 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
iterative-works/claude-code-query!77
No description provided.