I read this as a read-only release-closure audit - I’ll independently inventory both artifacts, recompute all hashes, inspect authority and binding evidence, run the V15 verifier, and return one unconditional verdict with an exact blocker count.


The artifact layout is immutable at the filesystem level and the initial anomaly scan is clean. I’m now validating the manifests and supersession semantics independently before invoking the bundled verifier, so its result is corroboration rather than the sole basis for the verdict.


A release-blocking closure defect has surfaced: the frozen V15 verifier cannot execute from its own sealed source closure because it imports `scripts.nutricoach_v150_live_upgrade_common`, which is absent from both the controller-source inventory and tree. I’m completing the remaining binding and digest recomputations to ensure the final blocker count is exact rather than stopping at the first failure.


I read this as a completed read-only V15 closure audit - I recomputed the evidence, ran the verifier, and found three release blockers.

# BLOCKERS

**blocker_count: 3**

1. **V15 verifier is not executable from its immutable closure.**
   - `/home/cube/.hermes/migrations/nutricoach-v1.5.0-combined/live-transaction-preseal-v15-runtime-authority-r21/controller-source/scripts/verify_nutricoach_v150_preseal_v15.py:19`
   - Imports absent `scripts.nutricoach_v150_live_upgrade_common`.
   - The module is absent from the 319-file `controller-source-manifest.json` inventory and closure.
   - Read-only execution failed with:
     `ModuleNotFoundError: No module named 'scripts.nutricoach_v150_live_upgrade_common'`
   - Supplying the mutable worktree externally still failed candidate verification with:
     `CandidateContractError: working source mismatch: scripts/seal_nutricoach_v150_candidate.py`

2. **Detached bootstrap remains bound to superseded r20.**
   - `controller-source/scripts/nutricoach_v150_detached_bootstrap.py:15-18`
   - `PRESEAL` resolves to `live-transaction-preseal-v14-live-representative-r20`, not V15 r21.
   - File SHA-256: `8fe10a684a1f7623e1ce3b018e3b18e6042d492db8cc4a8f1c854095a914fdd9`

3. **Live launcher remains bound to superseded r20.**
   - `controller-source/scripts/execute_nutricoach_v150_sealed_live.py:18-23`
   - Its bootstrap command targets `live-transaction-preseal-v14-live-representative-r20`.
   - File SHA-256: `2679bec02297ce8023fefa622ccc349387bd22c6fc75e2e6cb6a94d9e053077b`

## Criteria checked

- **Candidate exact inventory:** PASS — 331 expected/actual files; no missing, extra, or hash mismatches.
- **Preseal exact inventory:** PASS — 332 expected/actual files; no missing, extra, or hash mismatches.
- **Source closure inventory:** PASS — 319 expected/actual files; no missing, extra, or hash mismatches.
- **Modes/immutability:** PASS — files `0444`, directories `0555`; zero writable paths.
- **Symlinks/hardlinks/bytecode:** PASS — zero symlinks, hardlinked files, `.pyc`/`.pyo`, or `__pycache__`.
- **Authority modules in source closure and both Hermes wheels:** PASS.
  - `task26_candidate_authority.py`: `9b9c1b470e1c6183c2b6f47f13a0a1a3be5a9ef31b6c6a859d7968680a7a4232`
  - `task26_runtime_authority.py`: `b3868f02a78ed761e477d640b472a5086c5ac0f1e4275a3c34614ea547dca762`
- **Controller target binding:** PASS — `nutricoach_v150_sealed_controller.py:41-43` targets V15 r21.
- **Bootstrap target binding:** FAIL — blocker 2.
- **Launcher target binding:** FAIL — blocker 3.
- **r20 supersession:** PASS — exactly one row for package `c88bf7cd6354ae36222e7057af5d227a6a966c58d896cb8de994313cd79bea84`, with `approval_phrase_reusable:false`.
- **Live roots absent:** PASS — authorization root, execution root, and successor runtime parent are absent.
- **V15 verifier:** FAIL — blocker 1.

## Recomputed digests

- Package payload: `0225ccab282b19648f5ac7984725f1d347c887068ef75fd705272c9c8d7c6e7f`
- Candidate derivation: `0d1b735cbe7257a58eac0923660b42ddd9095c0a04050f72fed825a3ac1072ae`
- Controller closure: `sha256:c584aa24b0b2eb068f68468ab92e49dc48dd40a031cfc964896c37f0dacd3470`
- Permission package file: `e04f4ab0362e28464b3db83e693bd27a823675708a30e34760803d87ac609406`
- Candidate manifest: `0c39c25a5a5d299b135dc980af6e87a09fdf746195eb29f6280b3c13584b6e2d`
- Package manifest: `f04a0d2d7e84d9da689dcd16d84656339d1f448bbad88478ecf57698cb1429de`
- Controller-source manifest: `a238bde2729710ffb82dcb571b8c0bc87cfda4c908fd521aeeb55ae5049c3916`
- Supersession document: `b44bba7e9221b6afe7edd7df9cee6a2549e0853a320c69548fb913537a2636d5`
- Sealed target: `a9726ef146ed6c211055b2988b7e95bf06eff3a71fb75a7af6c69ec027550c09`
- Hermes wheel: `7b2ead8c0ccbe04222d50a0c2e319c9267989a9204a68bc8e11a44dc32e8aeb5`
- Profile wheel: `af141cb96c8aa4ad00fc2511dcae6d5313db2cf004f663cdc1dfbd9f15954d96`

No files were modified.