I read this as a read-only F2 privacy/authority release audit - I’ll identify the F1 candidate/release artifacts, independently verify every stated invariant against repository and local runtime evidence, and return a JSON-ready PASS/FAIL report without writes or live actions.


The release under review is the adjacent `hermes-agent-dualcoach-v1.1` tree; the current workspace only holds earlier Task 26 evidence. I’m now correlating v1.1’s sealed candidate, its v1 rollback root, verifier output, and terminal profile/service records, while keeping all commands observational.


The sealed delta is exactly the TTL source member plus wheel `RECORD`, and the binding changes only the Hermes wheel hash; the profile wheel, trust boundary, qualification tools, and wheelhouse are byte-identical. I’m finishing the authority-chain and terminal-state checks, including observational process/service inspection only, then I’ll state the evidence limitations explicitly.


I read this as a read-only F2 privacy/authority release audit - I verified the sealed delta, inherited controls, authority lineage, and current local terminal state without external or live actions.

# F2 result: PASS

Candidate: `0e383539aea1b83205771772f1e8b417840defe60f5ea6ce184f80e3af8d25f9`

## Evidence

- **Exact wheel delta**
  - Both wheels contain exactly `992` members with identical order/inventory.
  - Only changed members:
    1. `gateway/platforms/telegram_customer_bootstrap.py`
    2. `hermes_agent-0.17.0.dist-info/RECORD`
  - Sole executable replacement:
    - Before: `_INVITE_TTL = timedelta(minutes=30)`
    - After: `_INVITE_TTL = timedelta(hours=24)`
  - Both wheel `RECORD` inventories and member hashes validated.
  - Independent verifier: `DUALCOACH_V11_CANDIDATE_INPUTS_PASS`.

- **No role/chat/consent/customer/provider/delivery authority expansion**
  - Byte-level wheel comparison proves every authority, transport, consent, storage-provider, customer-model, and delivery member is unchanged apart from the TTL literal.
  - Changed bootstrap member is otherwise byte-identical.
  - Private-DM claim remains fail-closed:
    - `user_id == chat_id` required.
    - Owner cannot claim customer role.
    - Exactly one `CUSTOMER` claim is created with `topic_id="0"`.
    - Existing role claims or customer identity make the invite unavailable.
  - No new role, chat type, customer field, provider call, storage backend, or delivery path was introduced.

- **One-time token behavior**
  - Token lookup requires state `PREPARED`, no role claims, and no claimed customer identity.
  - Successful claim transitions to `REGISTERING`; replay returns “unavailable.”
  - Boundary behavior verified:
    - Valid at `23:59:59`.
    - Expired at exactly `24:00:00`.
    - Claimed token remains single-use.
  - Test result: `2 passed`.

- **Unchanged profile/tool/trust identities**
  - Profile wheel: `a56da2417df0912f3fe407c0b78befd7362207d1c8a35271000af46701ba79d2`
  - Trust boundary: `1273abc223a8f1eb6d4adb5178d5ab466d68bbcc365b33364cf6d7ef602410c6`
  - Entire `qualification_tool_sha256` map unchanged.
  - Wheelhouse inventory unchanged:
    - Count: `107`
    - Hash: `b7cab3f2f8ed09e552c77640d3f4b364fa8aba22dc524b50854a74050bfe13f4`
  - Binding input delta is exclusively `hermes_wheel_sha256`.

- **Append-only release authority**
  - Registry/ledger sequence `42` qualifies current candidate `0e383...`.
  - Registry head: `b18f72e6773c2c6e16a188dfe6f6b8333c2e480c345c234a25b7e5fe8aabca23`
  - Ledger head: `e4c2a6a84ecb23f92cdbbb493ba1e58a175acde72f950ba8157e71802466c4ba`
  - Sequence `41` remains the qualified v1 candidate:
    - `d1109d8f78aaccf949ec4f664d9e62584c3cca33032030518bc3e2d712239112`
  - v1 is absent from `invalidated_candidate_digests`; therefore it remains a non-revoked rollback candidate.
  - Sequence 42 extends sequence 41; it does not rewrite or revoke it.

- **Terminal live profile**
  - `/home/cube/.hermes/profiles/dualcoachtest/customers/registry.json`:
    - Customer `enabled: false`
    - `ai_processing_consent.granted: false`
  - Live config:
    - Telegram platform disabled.
    - Customer delivery disabled.
  - Live `gateway_state.json`:
    - `gateway_state: "stopped"`
    - Telegram `state: "disconnected"`
    - `active_agents: 0`
  - `hermes-gateway-dualcoachtest.service`:
    - `ActiveState=inactive`
    - `SubState=dead`
    - `MainPID=0`
  - Clean-shutdown marker exists.

## Exclusions and residual risks

- The deliberate TTL extension increases the pre-claim bearer-token exposure window and local pending-bootstrap draft lifetime from 30 minutes to 24 hours. This is temporal exposure, not broader data fields or authority.
- “Provider storage unchanged” is established by byte identity and unchanged trust/profile bindings; no external provider API was contacted to inspect remote retention.
- The systemd unit remains enabled but is currently inactive/dead. A future authorized or boot-triggered start remains possible.
- An old unrelated physique-profile `pytest` process exists, but no DualCoach/physique gateway service process is running.
- No Telegram messages, provider calls, service starts/stops, deployment, token claims, or external writes were performed.

## JSON-ready summary

```json
{
  "task": "F2_privacy_authority_review",
  "status": "PASS",
  "candidate_digest": "0e383539aea1b83205771772f1e8b417840defe60f5ea6ce184f80e3af8d25f9",
  "base_candidate_digest": "d1109d8f78aaccf949ec4f664d9e62584c3cca33032030518bc3e2d712239112",
  "wheel": {
    "member_count": 992,
    "changed_members": [
      "gateway/platforms/telegram_customer_bootstrap.py",
      "hermes_agent-0.17.0.dist-info/RECORD"
    ],
    "executable_delta": "timedelta(minutes=30) -> timedelta(hours=24)",
    "record_valid": true
  },
  "authority_broadening": {
    "roles": false,
    "chat_scope": false,
    "consent": false,
    "customer_data_fields": false,
    "provider_storage_authority": false,
    "delivery": false
  },
  "private_dm_claim": {
    "user_equals_chat_required": true,
    "owner_claim_rejected": true,
    "role": "CUSTOMER",
    "topic_id": "0"
  },
  "token": {
    "ttl_hours": 24,
    "single_use": true,
    "expires_at_boundary": true,
    "replay_rejected": true
  },
  "unchanged_hashes": {
    "profile_wheel_sha256": "a56da2417df0912f3fe407c0b78befd7362207d1c8a35271000af46701ba79d2",
    "trust_boundary_sha256": "1273abc223a8f1eb6d4adb5178d5ab466d68bbcc365b33364cf6d7ef602410c6",
    "qualification_tools": true,
    "wheelhouse_inventory_sha256": "b7cab3f2f8ed09e552c77640d3f4b364fa8aba22dc524b50854a74050bfe13f4"
  },
  "release_authority": {
    "append_only_sequence": 42,
    "registry_head_sha256": "b18f72e6773c2c6e16a188dfe6f6b8333c2e480c345c234a25b7e5fe8aabca23",
    "ledger_head_sha256": "e4c2a6a84ecb23f92cdbbb493ba1e58a175acde72f950ba8157e71802466c4ba",
    "current_candidate_qualified": true,
    "v1_non_revoked_rollback": true
  },
  "terminal_live_state": {
    "customer_enabled": false,
    "ai_processing_consent_granted": false,
    "delivery_enabled": false,
    "gateway_state": "stopped",
    "telegram_state": "disconnected",
    "systemd_active_state": "inactive",
    "systemd_sub_state": "dead",
    "main_pid": 0
  },
  "verification": {
    "candidate_verifier": "PASS",
    "candidate_tests": "4 passed",
    "ttl_tests": "2 passed",
    "external_actions": false,
    "live_actions": false
  },
  "residual_risks": [
    "Bearer-token exposure and local pending-draft lifetime increase from 30 minutes to 24 hours.",
    "Remote provider retention was not queried; non-broadening is proven from sealed byte identity.",
    "The inactive gateway systemd unit remains enabled and could be started later."
  ]
}
```