# Critic review — stage 43

**Verdict: ITERATE**

Reviewed immutable `stage-43-revision.md` at SHA-256 `dd0b3874d8153739450e7de15c861544c49fd49eda4d2c640db2d2f097ae6947` independently and without executing tests or product mutations.

## Verified

- Target baseline matches the stated four full-file pins exactly: wizard events `6eb973a06db55df9d4ee1614fb98c2c32f676b240bb03f1b8cc6c706bea989eb` (44/36,631); canonical sequence `238bddc00904d1177aff8e1279871d11e8996b5d9b224f3af96e6dfda6b131f3` (44/11,518); source-days `bb3fd649945c56d0e43fdcf3542fbc5321365a7f3f268317e1d22072e647aed3` (44/21,425); source-day-intents `525edd99e6d1b5e464bfaa7a05c6482684a1efc3b9570c78a58bed0e6295c20b` (88/57,986).
- The listed profile, registry, feature-epoch, overlay, and policy hashes match their target artifacts. Each of the 11 listed terminal IDs/digests matches the sealed canonical sequence.
- Seed and scenario digest formulae reproduce the stated values. The fixed KST range, timestamp, root set, omission, and training-offset set are internally count-consistent (18 roots plus one correction).
- Existing `CanonicalEventTransaction.recover()` truncates tails; current public canonical/adaptive readers can invoke recovery. The plan correctly requires a separate intent-gated mutator and fail-closed readers.

## Blocking corrections

1. **Correction ID is self-contradictory.** The deterministic-vector section declares `synthetic_6a2a26ed2bc60126dc0a040c` as the correction ID. The contracts section immediately calls that exact `...040c` value a superseded stage-41 typo, without supplying a replacement. State one final correction ID and its exact golden row bytes/digest; update every transaction/coverage/retraction assertion to use it.

2. **Coverage invariant conflicts with all-skipped and the sealed baseline.** The plan requires `coverage ID set == canonical sequence IDs`, but coverage starts absent, the canonical sequence already has 44 immutable IDs, and the all-skipped path must append nothing. It also only says the mutator creates coverage for *new* members. Define the invariant as either synthetic-generation member IDs only, or require deterministic baseline coverage materialization (which makes all-skipped non-zero-write). Specify the exact expected coverage member count before/after import and retraction.

3. **Schema target and boundary are unresolved.** `validate_event()` unconditionally reads `/home/cube/.hermes/profiles/physique-coach/contracts/checkin-event.schema.json`; current strict `Event` accepts neither the proposed retraction type nor `history_manifest`, `adherence_signal`, or `history_retraction`. The plan mandates extension of a “shared JSON schema” while restricting product/source changes to `workspace/checkin_cli`, but does not name an in-scope schema artifact or an approved schema-loading change. Name the exact authoritative schema path and include it in scope, or change validation so the synthetic protocol has an in-workspace authoritative schema without weakening normal canonical validation.

4. **The literal oracle is not reproducible from the revision.** `golden-canonical-events.jsonl` and the four baseline fixture files are absent today. The revision gives hashes and IDs but not their literal content; the stated vector leaves field-specific precision/index selection and several exact payload strings unspecified. Creating generator and expected output together cannot independently establish the claimed `56a49d...` byte oracle. Supply the checked-in immutable fixture content (or a separately sealed source artifact plus full deterministic construction spec) before execution.

5. **Allowed-delta journal inventory is inconsistent.** Six journals are named (pair intents, pair completes, transactions, coverage, coverage intents, tombstones), then the plan says “these five paths” are added to the immutable manifest. Enumerate all six exact relative paths, their initial states, and per-phase expected byte suffixes; otherwise an implementation can omit a journal from the seal.

No live/provider/Telegram/deployment path was invoked; no tests were run.
