---
name: v0387-legacy-wake-retired
description: "2026-09-06 v0.38.7 SHIPPED: legacy !!checkpoint!! marker + {checkpoint/checkpoint_fire} envelope acceptance retired (stage 3 of the staged wake rename, promised at v0.24.0, slipped 40 releases). Gate caught two int scripts still feeding the legacy shape."
metadata:
  type: project
---

**v0.38.7 (2026-09-06 11:47Z) — REQ-WAKE-LEGACY-RETIRED.** Receive side accepts only `!!wake!!`
and `{"wake_arm":"v1","directive":…}` / `{"wake_fire":"v1"}`. Legacy marker = ordinary text (no
arm, no pair; a live marker beside it is still a single marker); legacy envelopes deliver as
ordinary messages (they PARK like a peer message — the unit must use the parking helper, the
control helper panics on park). Safe because emit flipped at v0.24.0 and both binaries ship in one
archive; a still-running old resident translate accepts both, so no skew window. Units re-anchored
to live shapes rather than deleted; two refusal units + one int probe, mutation-checked.
Related: [[v0384-commune-frame-replay]], [[brief-rule-scoped-to-mechanism]].

⭐ **The gate found a consumer I did not enumerate:** `ci/idle-translate/translate-proof-int.sh`
and `wake-survival-int.sh` fed the legacy JSON shape by hand. Grepping `src/` for the retired
key is not enumerating its consumers — the int scripts are consumers too. Grep the whole repo
(ci/, tests/, plugin/) for a wire token before retiring it.

⭐ Multi-line python replaces on this repo: `.sh` files here are LF but my heredoc `\n` escapes
did not match on the first try — when an `assert old in s` fails, shrink the anchor to the
smallest unique line rather than guessing at the cause.
