I read this as a coordinated Task23 service preparation - I’ll verify the supplied artifacts and current state, perform the one permitted preparation only if all gates pass, then restore/start the systemd unit and report redacted evidence.


I read this as a Task23 preparation attempt - I stopped at the first required fail-closed gate.

**DoneClaim: NO-GO**

- Offline Task23 verifier passed: candidate `35683a52...`, manifest `d4cd1495...`, freeze `6ff6004d...`, wheel `a2c04948...` / 994 members.
- Exact profile-package digest `3090dc7c...` matched its sealed manifest leaves.
- Live probe confirmed old session `EXPIRED`, generation `8`, ledger `e3271199...`; customer disabled, trainer absent, and all downstream authority paths absent.
- Task22 direct preflight failed once: `supplemental review freeze drift detected`.
- Per instruction, no Task23 preflight or prepare was run; no journal/successor/customer link was created.
- No systemd action was taken: stop count `0`, start count `0`.
- Service remains restored/unchanged: `active/running`, PID `675692`, restarts `0`.
- Telegram sends/clicks: `0`; no activation, check-in, owner card, or delivery mutation.


I read this as a read-only gate diagnosis - I’ll trace both preflight contracts, run the permitted Task23 read-only preflight once while the gateway remains active, and distinguish a stale Task22-only gate from a Task23 blocker.


I read this as a read-only gate diagnosis - the Task22 freeze check is extraneous to Task23, but Task23 has its own genuine live-state blocker.

**Verdict: genuine Task23 blocker.**

The exact Task22 command I ran was:

```bash
env -i HOME=/home/cube LANG=C.UTF-8 LC_ALL=C.UTF-8 \
  PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin \
  /home/cube/projects/richard/hermes-agent/.venv/bin/python -I -B \
  /home/cube/projects/richard/hermes-agent/scripts/task22-supplemental-owner-review
```

It reaches `historical.inspect()` in `scripts/task22-supplemental-owner-review:388-417`, then `_verify_document()` via `telegram_nutrition_onboarding_supplemental_review.py:354-363`. The observed error is raised at line `965`.

Read-only comparison found the exact freeze delta:

- `bootstrap_digest` differs.
- Sealed source `data/onboarding/telegram-room-bootstrap-v1/ledger.json` differs in both content hash and file identity.

That is expected relative to Task22's older freeze: the current ledger is exactly Task23's pinned `e3271199...`. This is a runtime-ledger change, not a Task23 code-status snapshot issue. The Task22 executor's historical `inspect()` path is therefore an **invalid extra executor gate** for this successor scenario.

Task23 itself is intentionally different:

- `Task23SupersessionStore.preflight()` is read-only (`...task23_supersession.py:168-181`) and has no quiescence lock.
- It binds the current full ledger hash `e327...` first (`:486-490`), then authenticates Task22 terminal evidence through `require_task22_supplemental_for_activation` (`:476-481`).
- Its tests prove read-only preflight, but fixture construction stubs the Task22 terminal verifier; they do not exercise this exact live ledger shape.

I ran the permitted live Task23 preflight once while the gateway remained active. It failed before Task22 terminal verification:

```text
Task23 expired session binding is invalid
```

The current `e327...`-pinned old session has:

- roles: `customer`, `trainer`
- populated historical trainer draft fields

Task23 rejects precisely those facts at `:504` and `:508-515`, requiring one customer claim and no trainer draft fields. Thus the deployed candidate contradicts its own pinned live ledger.

Safe continuation:

1. Do not stop, prepare, or mutate the profile.
2. Correct/reseal Task23 code only so the exact `e327...` historical trainer provenance is authenticated, while the existing successor draft stripping remains mandatory.
3. Add tests for the exact two-role historical shape and rejection of any other role/draft variation.
4. Re-run the same active-safe Task23 preflight; it must return `PREPARING`.
5. Only after that pass, perform the separately authorized systemd stop and one prepare.

No service or Telegram operation was performed; the unit remains active on PID `675692`.