# Task26 continuous lifecycle observer v4

## Status

`READY_CUSTOMER_ATTEST`

This append-only successor preserves v3 and remains bound to final candidate `4e9962be49b72951c3b9ed7e1a4fe36d0ca03e757872ae03364c1ab7a790f32b`, core `88caabf3dee923e720463d917d35b6dd32ecc31102ed3ab4df4c6a203df4a760`, and installed wheel `33688875a0d1ce20955bd8272257ee34d84cb138f6a23a43e5d16682368ae5e5`.

No product, source, candidate, profile, Git, prior observer, service, network, Telegram, or UI mutation was performed.

## Repaired validation

V4 removes the observer-only equality check against the migration rationale literal. It validates current answers by invoking the actual shipped profile module `checkin_cli.nutrition_onboarding_models.build_onboarding_baseline` and accepting its normalized non-empty `activity_rationale` when bounded by the domain contract.

Attestation remains closed unless all of these hold:

- `activity_category` is the canonical `moderate` enum;
- shipped baseline construction succeeds and normalized rationale is non-empty and at most 500 characters;
- resolved reconciliation digest and answers digest match current answers;
- the latest committed customer publication matches route, generation, message, state, payload, and body digest;
- generation and message are monotonic and `clarification_field` is absent;
- candidate-rendered customer text contains Korean goal/activity, activity semantic facts, and no-review copy;
- customer text excludes dict/internal keys, English enums, `미입력`, false health warnings, and stale advisory copy.

## Current authority and handoff

- Generation: `28`
- Message: `213`
- Answers digest: `280dabc7a1705face34a68fb61f62f079e20f6fc3844afe82f9752db0f5cf669`
- Baseline validation: `PASS_SHIPPED_CHECKIN_CLI`
- Handoff: `READY_CUSTOMER_ATTEST`
- Callback: `non2:attest:28:U7T5W1tNuaYREol2p7lRu-ItlhngWy_wf631sC-aU4A`

The callback is derived exclusively from committed generation 28/message 213. No click was performed.

## Observer launch

The output paths are fresh and absent:

```bash
/home/cube/projects/richard/hermes-agent/.venv/bin/python \
  '/home/cube/projects/richard/traning coach/.omo/evidence/task26/task26-continuous-lifecycle-observer-v4-4e9962be/observer_v4.py' observe \
  --profile /home/cube/.hermes/profiles/dualcoachtest \
  --ready '/home/cube/projects/richard/traning coach/.omo/evidence/task26/task26-continuous-lifecycle-observer-v4-4e9962be/live-v4-ready.json' \
  --events '/home/cube/projects/richard/traning coach/.omo/evidence/task26/task26-continuous-lifecycle-observer-v4-4e9962be/live-v4-events.jsonl'
```
