I read this as a final privacy/authority audit - I will inspect the candidate, policy evidence, source, and verification artifacts without making changes.


I read this as a completed final audit - I found the v17 trainer-free privacy/authority controls satisfied without edits or live actions.

## PASS

- **Trainer-free surface:** zero `trainer` occurrences across the 137 declared source files, gateway evidence source, source/installed Golden data and receipts, and all text members of both sealed wheels (960 Hermes, 55 profile). Bootstrap roles permit only `customer`; no trainer claim, invite, card, route, membership, data, or authority exists.
- **Isolation and roles:** bootstrap ledger has exactly one customer claim `200/200/0`, owner `100`, and no shared-room authority. Wheel code requires customer private-DM identity (`user_id == chat_id`, topic `0`), rejects owner-as-customer, and rejects unsupported route roles. Customer delivery evidence routes only to `200/0`; approval card routes only to owner `100/0`.
- **Owner membership:** `source-membership-evidence.json` has only the owner private staff DM, empty membership results, and explicit customer identity separation. Source validation fails closed on stale/incomplete membership evidence.
- **Provider advisory-only:** recorded coach output is subject to owner review and `operator_approved`; a card-projection fault produced no capability. Delivery required an owner-approved, exact-bound capability; unknown provider outcome made zero transport calls and did not retry.
- **Seven clauses / observer / cleanup:** installed contract records all seven chained clauses. Observer is `dnotify_signalfd_v1`, one directory resource, zero inotify watches, five receipts. Cleanup ends committed with active/pending/unknown/orphan all `0`, disabled/nonconsenting customer, verified archive/journal.
- **Exact authority and ledger binding:** capability/deployment receipts bind the candidate, product binding, Hermes wheel `9189...23a3e`, and profile wheel `62c5...4121`. Candidate manifest, seal, ledger-ready receipt, and all 366 inventoried evidence entries recomputed valid.
- **Revocation:** direct authority verification accepted only candidate `448252...65aa7f`; it lists 12 invalidated candidates. A revoked digest was rejected with `candidate digest is revoked`.
- **No candidate/wheel/raw-RECORD confusion:** candidate digest differs from both wheel and raw RECORD hashes. Raw installed RECORDs are explicitly non-portable; only hash-bound portable projections are compared.
- **Bootstrap/rehydration/wheelhouse:** I ran the sealed `python3 -I .../task26_frozen_bootstrap.py` successfully. It rebuilt an isolated offline venv, verified wheelhouse closure (107 entries), wheel bytes, origin proof, portable RECORD projections, and the installed Golden path. Postfreeze wheelhouse before/after receipt is equal.

**Blockers:** None for the requested privacy/authority verdict.

**Residual risk:** `verification-tools/independent_verify_candidate.py` is not standalone-reproducible now: direct execution lacks the `gateway` import path; with that path supplied it references the intentionally removed original runtime. This is a verification-tool portability defect, not an authority bypass: the shipped isolated frozen bootstrap and direct authority validation both passed.