Skip to content

v0.10.2

Choose a tag to compare

@wdhwg001 wdhwg001 released this 03 Sep 05:41
· 49 commits to main since this release

A patch release from the introspection ledger's first re-read after 0.10.1. Seventeen claims had no code site. Anchoring them, and re-reading the claims the previous audit had marked drifted, turned up the defects below. Every fix carries its ledger claim with the instrument that measured it, and the gate now refuses a claim with no code site.

wait: notifications absorbed mid-turn

wait --until notification fired only on the user record Claude Code writes when a completion arrives while the session is idle. A completion that lands mid-turn never becomes a user record: it exists on a queue-operation enqueue line and on a queued_command attachment. In this corpus the main transcripts hold 3218 pulse-bearing user records against 5893 enqueue lines, so roughly every other completion was invisible to the condition. The condition and the activity census now read the same three carriers the background section already joined. A queue remove or dequeue repeats the enqueue's pulse and counts nothing.

plan: the project root

The slug-only binding resolved plansDirectory against the slug record's own cwd. That field follows the tracked shell cwd, so a cd into a subdirectory before the first slug record joined the plan file under the subdirectory, and a plansDirectory set in the project's own .claude/settings.json was silently dropped because the settings lookup was anchored on the same drifted path. Both were reproduced on 0.10.1 against a synthetic tree. Claude Code memoizes its plans directory at the first access early in the session, through the same cwd getter that stamps records, so csift now binds against the transcript's first recorded cwd and reads the settings scopes from that root. A session resumed from another directory re-memoizes in the harness, which this instrument cannot see.

search and agents: fork clones

A /fork child's transcript is a clone of its parent's, opening with a fork-context-ref record. Its first turn-opener is therefore the parent's own human message, which 0.10.1 labeled as the spawn-prompt seed (agent.communication.inbox). Ten of the 42 clones in this corpus carry such a record. A clone now has no seed. The global spawn index also folded subagent locals later-wins, so a clone's copy of a sibling's spawn record could re-parent that sibling onto the clone. The fold is first-wins now, the main transcript first and the subs in discovery order. A superseded draft whose text is sectioned kept fanning out into per-section classes its own labels[] did not carry. It keeps the single user.unsent view.

strings and help

Two shipped strings had lost their line-continuation backslashes and printed runs of spaces: the wait timeout-guard message and a recover bash-append boundary detail. show --turn help now says which gated lines a turn fetch omits and how to address them. search --help names the eight LLM-invisible leaves instead of "exactly two".

The ledger

AGENTS.md section 7.1 documents the ledger schema field by field, the verdict semantics, the six gate rules and the four procedures (a new behavior, moved code, a release audit, a retirement). Rule 6 is new: every claim cites at least one code site.

Verification

The suite at the release commit is 1037 unit tests and 544 end-to-end tests (543 on the two Windows targets, where one unix-only process probe is compiled out), green on all eight targets of the release matrix. Line coverage is 95.69 percent, level with 0.10.1.

The nine files the fixes touched went through a scoped mutation pass: 378 mutants, 328 caught, 20 unviable, 3 timeouts and 27 survivors. Every survivor but one sits in the classes earlier releases documented (prefilter and performance-gate arithmetic, window math, the spawn-lookup stubs, the tool-result dual chain). The one survivor in new code, the last disjunct of the notification match, was killed by a regex that only the raw carrier text satisfies, and a targeted re-run caught all ten mutants of that function.

The ledger holds 521 claims, every one anchored to at least one verbatim code site, which the gate now requires. The eight claims behind this release's fixes carry a 0.10.2 check with the instrument that measured them: the corpus line census behind the notification carriers, the synthetic-tree runs behind the plans directory root, the fork-clone and fork-meta censuses, and the string and help audits.

The measurements a reader may want to repeat: in the 67 main transcripts of the reference corpus, 3218 pulse-bearing user records against 5893 queue enqueue lines. There are 42 subagent transcripts opening with a fork-context-ref record, 10 of them carrying a genuine user record, and 33 fork metas, none carrying parentAgentId.