# 0033 — Wake resumes via reconcile-driven intent, not an edge-driven spawn

Date: 2026-07-04 · Status: accepted (operator-ruled, v0.24.0 bug-batch grill Q2)

## Context

CONTEXT promises `suspended` = "resumed-on-wake", but the wake edge only
writes the rest-intent field; nothing resumes a cold session (field bugs:
`WOKE:… -> Active` with the endpoint still cold; `NO_EDGE` on a
definitely-suspended endpoint). Two candidate mechanisms: the wake edge
spawns the resume synchronously, or the edge stays thin and the daemon's
reconcile machinery performs the resume.

## Decision

The wake edge stays **thin**: it writes rest intent + wake effects, nothing
else. The daemon reconcile gains a **resume leg**: *intent says active,
session is cold → resume it* (adapter `[session.resume]`, last ledger sid,
recorded adapter per the session-adapter-is-recorded-truth rule). `status =
online` is set **only by a real bind** — wake never asserts liveness it
didn't observe. `spt endpoint wake` is non-blocking by default (`WOKE` = wake
accepted, resume in flight); a `--wait` flag blocks on observed bind (F-027
bind-await machinery).

All rest-state readers derive **effective instance state** through one shared
function (liveness discriminates warm/cold; stored intent refines within
warm; absent intent never defaults active) — the same derivation
`advertised_status` uses.

## Consequences

- Wake is idempotent and retryable: a wedged resume is retried each reconcile
  tick and fails loud via the F-027 spawn-fail surfaces, instead of blocking
  or lying at the CLI.
- Remote wake needs no resume RPC: the intent lands on the target node; its
  own daemon does the lift. Local and remote wake are the same machinery.
- Live agents gain the exact analog shells already have
  (`shellwake` relaunch-offline).
- `WOKE:` no longer implies "session is up" — accepted-not-bound honesty;
  `--wait` exists for callers that need bound.
- Rejected: edge-driven synchronous spawn — duplicates spawn machinery
  outside the daemon, blocks the CLI on bringup, and requires a remote-spawn
  RPC the design has deliberately deferred.
