v0.42.2
v0.42.2
Migration / breaking
- No shared database schema change; the fence stays at 84.
- No Rust module change;
ck-mcfrom v0.42.1 remains current.
Restart could clear every session's compaction marker (OpenCode)
A boot-time consistency check could decide that the OpenCode rows behind a session's compaction marker were missing when they were present, clear the persisted marker state for every session at once, and drop the marker row from the served history on the next pass. That changed the served bytes on an ordinary pass, so each affected session paid a full prompt-cache rewrite on its next request after a restart. The check is now diagnostic-only and can never clear live state on a lookup it cannot prove; a cleared marker leaves a durable envelope that later passes replay byte-identically until a cache-busting pass retires it. Pi has no equivalent boot sweep.
Pi turns could get stuck at high context fill
Pi sessions near the usable window could fail a turn with "Magic Context could not safely prepare this turn" and keep failing on retry. The pending-operation writer used a deferred SQLite transaction whose read-to-write upgrade fails immediately under contention without honouring the busy timeout; a failed durable-marker write was then treated as permission to substitute a fresh skeleton, and the recovery replay refused whenever the session carried host entries it could not map. The writer now takes the write lock up front and degrades in-pass (previous bytes retained, retry next pass) instead of failing the turn; a failed marker blocks both structural removal and sentinel substitution; and the Last-Known-Good replay tolerates head contraction and stable unmapped entries while still refusing interior divergence.
Dreamer backlog counted expired memories the executors skip (#439)
The sidebar and /ctx-dream backlog counters included TTL-expired memories that every task executor filters out, so classify-memories (and the other memory tasks) reported a backlog that never drained. Every backlog probe now counts the same live pool the executor processes. Expired active memories are also archived by the weekly curate run (reason expired) through the ordinary archive path — permanent memories are never touched, and the change rides the next memory-update delta rather than forcing a history rebuild.