I read this as a controlled Gate20 verification run - I’ll inspect the immutable candidate and prior gate evidence, capture pre-state, execute the canonical gateway suite exactly once in an isolated environment, verify post-state/parity/pins, clean up, and append the receipt without touching protected assets.


The repository has extensive pre-existing uncommitted work and no existing `.omo/evidence/task26` directory. I’m treating that state as protected baseline, locating the digest-addressed successor and its established receipt format before running anything.


Preflight is clean: the immutable verifier passes, all 2,374 executable-closure entries match the repository, all 836 source-backed wheel members are byte-identical, repository status matches the sealed hash, and the repaired controller/test pins match. I’m starting the sole canonical full Gateway invocation now, with an isolated read-only filesystem, denied network namespace, and disposable HOME/TMP/cache.


The sole run completed with 22 failures: 21 local HTTP fixture tests were blocked by the denied network namespace, and one PID-identity test was altered by the sandbox process surface. These are isolation-induced rather than repaired-candidate regressions, but the exact-once constraint means I will not rerun or suppress them; I’m completing post-verification and issuing a FAIL receipt with the incompatibility isolated explicitly.


I read this as Gate20 execution completion - report the immutable successor verdict and evidence.

**Gate20: FAIL**

- Exact suite ran once: `8116 passed, 22 failed, 59 skipped, 256 warnings`
- Exit code: `1`
- Duration: `561.034s`
- Failures isolated to sandbox incompatibility:
  - 21 tests required DNS/safe-URL resolution before mocked transport.
  - 1 PID-identity test differed under bwrap.
  - No repaired controller/test failure observed.
- Candidate verification, 2,374-entry source closure, repository status, 836-member source-wheel parity, and repaired pins all passed before/after.
- No source/profile/archive/candidate/Git mutations or service/provider/Telegram/customer actions occurred.
- Disposable state cleaned successfully.

Receipt:

`/home/cube/projects/richard/traning coach/.omo/evidence/task26/task26-gate20-3b42723d0e8256351defdf31958f9ade795f80a7be456529740949c87875d527-receipt.json`

SHA-256: `0eb81aeeb2a1d49ec05bbf80e6a9073c3a16e22b9e5e9d876f6b5a76f6f6e14d`


I read this as a canonical direct-host Gate20 retry - I’ll bind fresh pre/post candidate, source, status, and service checks to the prior sandbox FAIL, run the exact project command once without environment overrides beyond `PYTHONDONTWRITEBYTECODE=1`, then append a separate retry receipt with unsuppressed results and cleanup evidence.


Preflight passes and the retry path is unused. The host profile service is inactive with PID 0, the repository status remains the sealed 1,294-entry snapshot, and candidate/source-wheel/controller/test pins are unchanged. I’m now executing the direct-host canonical command exactly once.


The preparation wrapper stopped before invoking pytest because its pre-existing cache inventory used relative paths from the wrong directory. No test command started and no result files were created. I’m retaining that append-only preparation error as evidence and switching to a corrected artifact directory; the canonical direct-host invocation count remains zero.


The canonical direct-host run completed once with one unsuppressed failure: `test_get_running_pid_rejects_live_non_gateway_pid`; all 21 DNS-dependent sandbox failures cleared. I’m treating the remaining direct-host failure as a real Gate20 failure pending classification, not suppressing or rerunning it, and completing post-state verification and the linked retry receipt.


I read this as Gate20 retry completion - report the canonical direct-host result and receipt.

**Gate20 retry: FAIL**

- Exact canonical invocation count: 1
- Results: `8137 passed, 1 failed, 59 skipped, 258 warnings`
- Exit code: `1`
- Failure: `test_get_running_pid_rejects_live_non_gateway_pid`
  - `get_running_pid()` deletes an untrusted legacy numeric PID file.
  - The bound test contract requires preserving it.
  - Candidate-bound source/test contract mismatch; not suppressed or rerun.
- Candidate, source closure, status, source-wheel parity, and repaired pins remained unchanged.
- Service remained inactive; no external, profile, customer, or Git actions.
- Pytest cache unchanged; temporary test directory removed.
- An initial preparation wrapper aborted before pytest; canonical invocation count remained zero for that attempt.

Retry receipt:

`/home/cube/projects/richard/traning coach/.omo/evidence/task26/task26-gate20-3b42723d0e8256351defdf31958f9ade795f80a7be456529740949c87875d527-retry-receipt.json`

SHA-256: `ecad63a8af05067e7469216599a6f31f3545c77181ef713ce3a2c08155a42c2b`