Skip to content

PiClaw v2.12.12 — The Muster of Rohan

Choose a tag to compare

@github-actions github-actions released this 06 Aug 13:04
· 285 commits to main since this release

PiClaw v2.12.12 — "The Muster of Rohan"

Twelve reliability patches rode through the night, each bearing a modest grievance and enough regression tests to equip a small cavalry. We have gathered them here and shall pretend this was the plan from the first trumpet.

Fixes

  • Invalid optional MCP server entries are quarantined individually at startup instead of preventing every configured server from loading; duplicate environment targets, unresolved references and missing keychain secrets are reported through status diagnostics without exposing credentials.
  • A non-retryable recovery-compaction failure can emergency-rotate the session and resume with the neutral continuation, rather than returning the user to the same damaged crossing with a note that the bridge remains unavailable.
  • Completed tool executions now form the authoritative tool-budget boundary: already admitted parallel calls may settle, but no new call is admitted after the completed budget is reached, and terminal diagnostics report the actual boundary rather than a nearby theory.
  • One healthy tool-budget stop may schedule one tools-disabled automatic continuation on the same persisted thread lineage; queue failures release the reservation, repeated stops cannot breed additional roots, and terminal output is durable before the continuation is reserved.
  • Resolved tool turns that lack closing prose receive one tools-disabled finalisation attempt, allowing the assistant to produce the promised terminal reply without reopening the tool shed.
  • Dream grants slow providers extra grace only before the first provider event, while later streaming and tool phases retain the normal watchdog limits; contemplation is tolerated, catatonia remains measurable.
  • Abort causes now belong to the run they ended: planned shutdowns are logged as interruptions, stale provenance is cleared at run entry, and exceptional exits consume their cause instead of bequeathing it to an innocent later turn.
  • Empty inherited tool sets restore the configured default only when no explicit ceiling applies; protected recovery tool loss is classified separately, with before/after telemetry rather than an optimistic shrug.
  • Protected tools-disabled continuations that say they are “blocked from further tool execution”, “blocked from using the tools”, or otherwise unable to access tools now hand off exactly once to an ordinary tool-enabled continuation instead of being crowned recovered merely for phrasing the defeat politely.
  • Run-level tool ceilings now remain owned by the exact session that installed them, transfer cleanly across recovery rotation, and restore the correct setter/tool set without fastening one session’s harness to another horse.
  • Web protected-recovery handoffs are durably ordered ahead of ordinary follow-ups; continuation-user insertion and exact queued-intent removal commit in one immediate SQLite transaction, so a crash leaves either the intent or the message and replay cannot duplicate it.
  • Failed materialisation updates retry count by replacing the same persisted queue row rather than consume-then-prepend, closing the compensation gap discovered during release review.
  • Progressive length-stop repair halves the first effective provider cap—not merely the requested cap—so context-limited retries are materially smaller instead of repeating the same request in a different hat.

Platform news

  • make local-install keeps BUN_INSTALL rooted at /usr/local/lib/bun in this container layout, preventing a portable-runtime environment from redeploying an older build while proudly reporting success from the wrong forest.
  • Restart handling records planned service shutdown provenance before aborting active runs, preserving persisted sessions for explicit continuation after the service returns.

Under the hood

  • The cumulative 5 August audit corrected automatic-continuation lineage and reservation order, stale abort provenance, and effective-cap length repair; its focused evidence is recorded in docs/audits/2026-08-05-code-change-audit.md.
  • Regression coverage spans MCP startup diagnostics, recovery rotation, budget admission/finalisation, protected-recovery handoff, session-bound tool ownership, atomic queue materialisation, interruption logging, Dream first-response grace, web thread persistence, progress-watchdog behaviour and local-install runtime roots.
  • Monolithic CI fixtures now isolate continuation reservations and progress-watchdog phases with unique chat identities and before/after singleton cleanup, because a green test should not depend on which previous test last borrowed web:default.

Known issues

  • Quarantined MCP servers remain unavailable until their configuration or credentials are fixed; the improvement is that healthy neighbours continue to load and the broken entry is named safely.
  • Protected recovery is deliberately bounded: the protected attempt is tools-disabled, followed by at most one ordinary tool-enabled handoff. The generated handoff cannot recursively summon another handoff, and repeated provider failure still does not become an infinite pilgrimage.
  • The three older pre-prompt compaction tests remain skipped and are not counted as passing evidence for this release.

Upgrade

  • Upgrade from 2.12.11 to 2.12.12.
  • No data migration or configuration change is required.
  • Earendil packages remain pinned at 0.83.0.