I read this as runtime reproduction and diagnosis - I’ll inspect the Senpi task lifecycle, run an isolated disposable instance, journal exact state/process/event evidence, and stop at the first divergence.

WORKING: runtime truth - repository and harness discovery.


WORKING: runtime truth - executing the isolated completed-resident revival scenario and capturing its durable store/event evidence.


WORKING: runtime truth - preserving the first divergence evidence, classifying the observed states, and cleaning only the four run-owned sandboxes.


I read this as runtime reproduction and diagnosis - I ran the isolated Senpi harness, preserved evidence, and stopped at the first reported divergence.

## Result

Completed-resident revival was reproduced on Senpi `2026.8.14`.

- Task: `st_01a002c2`
- Parent session: `01a002c2-af96-765d-97ab-24b08070e033`
- Child session: `01a002c2-b4e5-7f33-90a2-08629d2aa5f4`
- Execution: `in-process`; task record had no PID.
- Final record: `status=completed`, `residency_state=persisted_only`, `notification.run_epoch=1`.
- Four isolated Senpi scenario PIDs were launched; `leakedPids=0`.
- Real Senpi state changes: none attributed to the run.

## Observed ordering

Durable task log:

```text
running/resident
assistant_message: first unit complete
completed/resident
revived: run_epoch=1
assistant_message: second unit complete
completed/resident
completed/persisted_only
suspended: quit
```

Parent events establish the requested boundary:

```text
completion wake: status=completed
task_send start: {"to":"e2echild","message":"do the second unit"}
task_send end: {"kind":"revived","task_id":"st_01a002c2","run_epoch":1}
completion wake: status=completed, second unit complete
```

The same child session JSONL contains both the original prompt and follow-up, proving session reuse.

State distinctions from observed values:

- **No-task:** invalid-category flow returned `task_id=""`, `status=plan_error`; zero task records.
- **Running:** initial tool result and store transition reported `running`.
- **Completed:** terminal run status observed after each response.
- **Resident:** independent residency axis; the first terminal state was `completed/resident`, hence still messageable.
- **Terminal:** not a separate stored value; `completed` was the observed terminal status.
- **Shutdown:** residency changed to `persisted_only`, followed by `suspended`.

## First divergence

Harness verdict was `FAIL` solely because `task_output_peek=FAIL`; observed `task_output_event_count=0`. Revival, ordered JSONL, wake delivery, isolation, and cleanup checks passed. The driver itself exited `0`.

## Falsifiable root-cause candidate

The revival path reuses the resident handle and increments `run_epoch`, but does not persist a new `running` transition: the log goes directly from `completed/resident` through `revived` to the second response and another `completed/resident`.

Falsification: delay the second child response and read its task record after the `revived` result. This candidate predicts it remains `status=completed,residency_state=resident` while the second turn is executing; observing `status=running` would falsify it.

## Commands and artifacts

Executed:

```bash
cd /projects/richard/omo-native-pirate
TASK_E2E_OUT_DIR=/tmp/senpi-runtime-truth-st_01a002c1/evidence \
SENPI_BIN=/home/cube/.local/bin/senpi \
node packages/omo-senpi/scripts/qa/task-e2e.mjs
```

Extraction:

```bash
jq -c 'select((.type=="tool_execution_start" or .type=="tool_execution_end") and
  (.toolName=="task" or .toolName=="task_send" or .toolName=="task_output") or
  (.type=="message_end" and .message.customType=="omo-senpi:wake"))' \
  /tmp/senpi-runtime-truth-st_01a002c1/evidence/main.stdout.json.log
```

Evidence root:

```text
/tmp/senpi-runtime-truth-st_01a002c1/
├── journal.txt
├── SHA256SUMS
├── driver.stdout
└── evidence/runtime-state/
    ├── task-record.json
    ├── task-events.jsonl
    ├── parent-task-events.jsonl
    ├── parent-session.jsonl
    ├── child-session.jsonl
    └── observed-counts.txt
```

All four disposable `/tmp/omo-senpi-qa-*` sandboxes were removed; retained evidence is checksummed. No source was edited and the dualcoach runtime was not touched.