No replay after an outage
When the worker was down or refused a capture, some capture paths kept that work and sent it again later, which could start model calls nobody asked for. They now drop what the worker refused and carry on with new work (#5663):
- Transcript capture: a transcript line the worker refuses or cannot take is skipped. Before, the watcher stopped at that line and, once the worker was back, sent it again with every line after it. A restart no longer resends lines from an outage either.
- Cowork: a prompt, observation or summary that fails to send is dropped instead of being spooled and sent again by a later hook. Only session start, session end and subagent stop events are still spooled, and prompts, observations and summaries left in an older spool are removed on its next flush.
- OpenCode: a session start the worker refused is sent once, like observations and summaries, instead of being retried in the background for about 10 seconds.
Fixes
- Redaction: Grafana service account tokens (
glsa_), Grafana Cloud tokens (glc_) and Postman API keys (PMAK-) are redacted, by the worker and by the Cowork shim. Turn either off by name withCLAUDE_MEM_REDACT_DISABLED_BUILTINS(grafana_token,postman_key) (#5662, thanks @kevin9327). - OpenClaw:
<private>content is removed from tool output before the output is cut to 1,000 characters. Before, a cut inside a private block dropped its closing tag, so the private text was stored. Text after an unclosed<private>tag is now dropped too (#5663). - Status and doctor:
claude-mem statusnames every dependency in words, such as "Observer data directory setup required" instead ofobserver_dir: setup_required, and its hint points toclaude-mem doctorinstead of a Settings screen that does not show these.doctorshows a status from a newer worker instead of dropping it (#5661). - Work state:
DoneandDroppedclose an item in any letter case, everywhere. Before, saving an owner-goals item asDonewas refused although every reader already treated it as closed (#5661). - CCS Align: a corrupt exclusion file is refused instead of being read as empty, so excluded observations stay excluded and the file is not overwritten (#5663).
- Viewer: observations of type
sensitiveget their own "Sensitive" filter on the session page instead of being counted under "Other" (#5663).
Also in this release
- Setup and My Work: each setup, billing, scan and refresh state is defined once and shared by the installer, the worker and the pages, so a new state fails the typecheck until every screen handles it (#5661).
- Tests: about 60,000 lines of tests removed: tests that only checked their own fixtures, duplicate cases (folded into tables) and four duplicate copies of the agent-cost-report Python tests. Kept regression tests run production code (#5663).
- CI: Bun is pinned to 1.4.4, ripgrep is installed, the Cowork runner and agent-cost-report Python tests run, and tool-heavy suites moved to the integration lane (#5663).
Full changelog: v15.15.0...v15.15.1