patch-cc 0.1.3
Added
-
thinking-summaries— thinking that stayed blank on some accounts now renders. Same binary, same config, same model: thinking rendered under one account and not another. It was never a rendering bug — the text was never sent. Claude Code caches a server-side A/B assignment (clientDataCacheSlots[...].atisin~/.claude.json) and replays it to the API in anx-cc-atisheader so the server applies the same bucket. An account in a suppressing bucket is served thinking blocks carrying a signature and an empty string; nodisplaymode, effort level orthinking.typemoves it, so every other thinking patch renders that empty string faithfully. The patch empties the getter the header is built from, letting the set-site's existingif(value!==void 0)guard skip it — nothing is sent, and no branch was added to stop it.Established against a pristine 2.1.217 with the full request body and headers dumped and diffed: two accounts, byte-identical
thinking: {type:"adaptive", display:"summarized"}, identical betas, identicaloutput_config.effort— one returned summaries, the other empty blocks. Stripping the one differing header restored them, in alternating runs.Note the breadth: this drops the bucket for every server-side experiment the account is enrolled in, not only the one that empties thinking. Local feature values still come from the on-disk cache, so only the server's view of the assignment changes.
-
Expectations. A sub-step now declares what its own absence means —
expect=Truefor a link the feature cannot live without, or a named group of alternates of which at least one must land. Absence is checked rather than noted, so a green tick can no longer cover a dead feature.live-thinking's two load-bearing state updates are credited by the markers their builders emit, not by "some rewrite happened", after a reducer whose incidental edits applied reported hits and streamed nothing.
Changed
-
One verdict, and
applyacts on it.apply,doctorand the menu now read a singleOutcome.health(ok/partial/broken) instead of each re-deriving it from raw counts —doctoronce printed a red cross and "all patches still match this build" in the same report. A broken patch is re-run out of the final pass, so its orphan edits never reach the binary, the manifest never claims it, and the command exits non-zero; the healthy patches still apply. That re-run is a fixpoint, not one retry: patches see each other's output, so dropping one can change what the next finds, and each patch is reported by the last run it took part in. -
Defaults.
subagent-promptis on again, reverting 0.1.2.spinner-tipsis now opt-in.
Fixed
-
The CLI and the menu draw findings from one renderer. Each had worded its own, and the menu's copy had quietly lost the exception that broke a patch, along with every note.
-
The manifest records
brand,suffixandmodelsonly when their patch actually landed, sostatuscan never assert a name the bundle does not contain. -
docs/PLAYBOOK.mddocumentedbrandingas opt-in; it is on by default, deriving<username>'s Code.
Install: uv tool install patch-cc or pipx install patch-cc