<analysis>
**Literal Request**: Diagnose the `SOURCE_GOLDEN_PATH_FAIL: check-in finalization cardinality is invalid` error after a production journey + cleanup, returning exact references and a PASS/BLOCK verdict.

**Actual Need**: Understand the golden-path verification system — the source_golden_path driver, the verifier, the NutritionCoaching wizard's EventStore/native event schemas, the finalization journal, and the archive manifest/path mapping — so the caller can determine (a) exactly what rows exist in `wizard/events.jsonl` for one completed 12-answer check-in, (b) whether the verifier reads the correct artifact, (c) the correct exactly-once finalized-event contract, and (d) the smallest fix. This is a diagnosis + proposal task, read-only, no file writes.

**Success Looks Like**: A structured report with absolute file paths, exact file/line references, the concrete row content question answered via reading source, a clear PASS/BLOCK per hypothesis, and a focused RED-test + minimal-fix proposal the caller can act on without follow-up.
</analysis>

Let me start with a broad parallel sweep of the repository


The `.omo` task logs are flooding results. The real repo is `/home/cube/projects/richard/hermes-agent`. Let me focus there


The verifier raises it at line 368. Let me read both scripts fully and search for the check-in artifact machinery


I have the full verifier and driver. The blocker is at `verify_source_golden_path.py:368`. Now I need the native wizard EventStore/schema that writes `wizard/events.jsonl`, and how cleanup archives it. Let me search the production source tree


The wizard event store is `src-p/checkin_cli/store.py` (`class EventStore`), and wizard.ts binds EventStore for the daily check-in. Let me read the EventStore schema/recording and the wizard test


Now I understand the wizard EventStore. Let me examine the wizard `save` flow, the Event schema/event_id/revision, how the generation request binds check-in ID/revision, and how cleanup archives `wizard/events.jsonl


The daily check-in in the driver goes through `NutritionCoachingCoordinator` (gateway), while the EventStore appends via production `checkin_cli.wizard`. Let me find how the nutrition_coaching coordinator persists the check-in event and binds event ID/revision into the generation request


Let me read the coordinator's generator-binding logic around lines 3780-3990 and 2440-2470, which shows how the check-in event ID/revision binds into the generation request


Let me read the wizard save flow (`wizard.py` 860-1030) and search for where the `nutrition_checkin` event is built, plus how cleanup archives wizard/events.jsonl


`_save` appends exactly one `nutrition_checkin`. But the verifier demands `len == 1` for the whole file. I need to confirm whether any other production step (draft generation/approve/deliver) also appends events to the same `wizard/events.jsonl`. Let me trace draft-event appends and the coordinator bridge save/finalized path


The user confirms 4 rows (nutrition_checkin, draft_created, draft_approved, draft_sent) in the archived canonical stream. Let me independently verify where these draft events get appended to `wizard/events.jsonl` and how they're bound, before finalizing


The `draft_created` matches in the gateway are from an unrelated legacy snapshot. I need to confirm the nutrition_coaching coordinator actually appends `draft_*` events to `wizard/events.jsonl`. Let me inspect the coordinator's bridge save/append/finalized paths and where draft events get written to the canonical EventStore


Confirmed: the coordinator appends `draft_created`/`draft_approved`/`draft_sent` events into the same canonical `wizard/events.jsonl` via `resolved.bridge.append_event` (contributing to the 4-row stream). Now let me pin the exact Event schema/digest fields and the revision binding so I can specify the verifier fix precisely


I have the full contract. Let me confirm the cleanup archive path mapping for `wizard/events.jsonl` and the DRAFT_GENERATIONS projection so the "correct artifact" question is exact


I have independent, source-grounded confirmation of the full picture. Finalizing now.

<results>
<answer>

**VERDICT: CONFIRMED (4-row stream) — BLOCK on the current verifier contract.**

The archived canonical customer stream `wizard/events.jsonl` legitimately contains **4 rows**, not 1, for one completed journey:

| # | event_type | written by | reference |
|---|---|---|---|
| 1 | `nutrition_checkin` | `WizardService` → `EventStore.append_wizard_event` | `…/src-p/checkin_cli/wizard.py:1013-1019` (builder `_event` at `wizard.py:1198-1223`) |
| 2 | `draft_created` | coordinator → `resolved.bridge.append_event` | `…/hermes-agent/gateway/platforms/nutrition_coaching.py:8049`; builder `build_draft_event(DRAFT_CREATED,…)` `models.py:740-752` |
| 3 | `draft_approved` | same bridge path | `nutrition_coaching.py:8049`; `build_draft_event(DRAFT_APPROVED,…)` |
| 4 | `draft_sent` | same bridge path | `nutrition_coaching.py:8049`; `build_draft_event(DRAFT_SENT,…)` |

All four are appended to the **same** registered-customer canonical EventStore (`CanonicalEventTransaction.for_customer_runtime` → `wizard_root/"events.jsonl"`, `store.py:163-166`; `append_wizard_event` → `_append_wizard_event_locked`, `store.py:921/935`). `_canonical_events()` at `nutrition_coaching.py:6687-6640` reads exactly that store (`bridge.events`/`_service.events` and `data_root/events.jsonl`), and `_canonical_approval_event_id` / `mark_draft_sent` (6695-6774) iterate it looking for `draft_approved` / `draft_sent` rows — proving the draft events reside in the same `wizard/events.jsonl`. So the verifier is reading the **correct artifact**; its bug is purely the predicate `len(wizard_events) != 1` (`scripts/verify_source_golden_path.py:366-368`), which conflates "exactly one finalized check-in" with "the file has exactly one line."

**Correct total cardinality = 4. Required per-row schema** (`…/src-p/checkin_cli/models.py:755-849`, `validate_event` at 930): unique `event_id` (`wizard_{sha256(session_id:version:type)[:24]}` for the check-in; build-draft event ids per `models.py:523-524`), `dedupe_key`, `schema_version` in {"1.0","2.0"}, discriminator-consistent payload (`draft` type ⇒ must carry `draft`; `nutrition_checkin` carries `check_in`/`safety`).

**Native digest / correction / supersession / unique-event binding checks (what the final determination must assert):**

1. **Binding artifact = the draft-generations ledger.** The archived DRAFT_GENERATIONS rows (`…/src-p/checkin_cli/customer_cleanup_shared.py:25-26`; tests `test_customer_cleanup_shared_ledgers.py:23-24`) carry `checkin_event_id` and `checkin_revision`. These are produced by `_canonical_finalized_event_id` (`nutrition_coaching.py:3815-3833`, = `bridge.finalized_event(session_id).event_id`, i.e. the wizard `event_id`) and `current_judgment_revision_binding` (`nutrition_coaching.py:7837-7897`, = `judgment_revision_binding` digest), and bound into the generation authority digest `_draft_generation_authority_digest(owner, customer_key, checkin_event_id, checkin_revision)` (`nutrition_coaching.py:3854-3864`). This ledger — not the wizard-file row count — is the correct cross-check.

2. **Unique finalized-event binding:** exactly **one** `nutrition_checkin` for this check-in, identified by `event_id` == generation `checkin_event_id`. Dedupe is per-session `dedupe_key = sha256(session_id:version:event_type)` (`wizard.py:1206-1219`); `_append_wizard_event_locked` rejects duplicate `dedupe_key`s, so reopen cannot double-finalize (`test_completed_nutrition_day_reopens_without_duplicate_event`).

3. **Draft lifecycle uniqueness:** exactly one each of `draft_created`, `draft_approved`, `draft_sent`, all sharing one `draft_id`, each `dedupe_key = draft_dedupe_key(event_type, customer, draft_id)` (`models.py:505`, `720-733`) — unique per (type, customer, draft), so each set must be cardinality 1.

4. **Supersession:** on first save `nutrition_checkin` has `supersedes = session.supersedes = None`; CRC writes a separate correction row only (`models.py:847-849`). The golden-path clean run must expect `supersedes is None` and no duplicate event.

5. **Native schema/digest:** each archived `wizard/events.jsonl` row validates under `validate_event` (strict frozen Event, discriminator payload, event_type enum); the canonical archive row-set SHA-256 matches the detailed-digest entries in the cleanup manifest (`…/src-p/checkin_cli/customer_cleanup.py:80-83`, e.g. per-`events.jsonl` `rows_sha256`); the generation ledger `predecessor_digest`/`record_digest` chain is intact.

**Smallest verifier fix (`…/hermes-agent/scripts/verify_source_golden_path.py:366-370`):** replace the whole-file length test with a filtered one plus drafts-set assertion, e.g.:
```python
checkin_events = [e for e in wizard_events if e.get("event_type") == "nutrition_checkin"]
if len(checkin_events) != 1:
    raise ValueError("check-in finalization cardinality is invalid")
checkin_event = checkin_events[0]
checkin_id = checkin_event.get("event_id")
# require the lifecycle set for this draft_id, each cardinality 1 and unique events
```

**Focus RED test (real production coordinator, driven through the driver shape, 12 daily answers → save → generate → approve → send):** assert the archived `wizard/events.jsonl` holds exactly `{nutrition_checkin, draft_created, draft_approved, draft_sent}`; `checkin_event_id` of the generation row == the `nutrition_checkin` event_id; all three draft rows share one `draft_id`; all event_ids unique.

</answer>

<files>
- /home/cube/projects/richard/hermes-agent/scripts/verify_source_golden_path.py  (faulty predicate; lines 366-370)
- /home/cube/projects/richard/hermes-agent/gateway/platforms/nutrition_coaching.py  (draft events → canonical store: 8049; binding/digests: 3815-3833, 3854-3864, 7837-7897; canonical reader: 6640-6700, draft-sent/approved lookups: 6695-6774)
- /home/cube/.cache/task26-strict-successor-1786976146/src-p/checkin_cli/wizard.py  (nutrition_checkin event: 1013-1019, 1198-1223; finalized_event: 1226-1238)
- /home/cube/.cache/task26-strict-successor-1786976146/src-p/checkin_cli/models.py  (EventType enum 30-42, Event schema 755-849, validate_event 930, build_draft_event 710-752, dedupe/event_id 505-524, draft_dedupe_key 720-733)
- /home/cube/.cache/task26-strict-successor-1786976146/src-p/checkin_cli/store.py  (canonical transaction/runtime path 163-166; append_wizard_event/_append_wizard_event_locked 921, 935)
- /home/cube/.cache/task26-strict-successor-1786976146/src-p/checkin_cli/customer_cleanup_shared.py  (DRAFT_GENERATIONS row schema 25-26)
- /home/cube/.cache/task26-strict-successor-1786976146/src-p/checkin_cli/customer_cleanup.py  (archive manifest + per-`events.jsonl` rows_sha256 80-83; inventory/verify)
- /home/cube/.cache/task26-strict-successor-1786976146/src-p/tests/test_customer_nutrition_wizard.py  (12-answer ⇒ 1 nutrition_checkin; reopen dedupe no duplicate)
- /home/cube/.cache/task26-strict-successor-1786976146/src-p/tests/test_customer_cleanup_shared_ledgers.py  (generation row schema/binding)
</files>

<next_steps>
Confirm (blocked only by the deleted fail bundle, not by source): the archive inventory relative path resolves to `customers/client_001/wizard/events.jsonl` under the archive `files/` root (verified: `safe_relative`/`source_inventory` at `customer_cleanup_fs.py:48-101`, copy to `files/` at 166-181), so the verifier's `required(artifacts, "wizard/events.jsonl")` `.endswith` match hits the single correct archived file — artifact choice is correct; only the cardinality predicate is wrong. With the bundle recreatable by running the driver again, apply the filtered cardinality + draft-lifecycle-set fix above and rerun the verifier (expected `SOURCE_GOLDEN_PATH_PASS` at 4 rows).
</next_steps>
</results>