I read this as a read-only forensic classification of Task27 F2’s H3/H4 findings - I’ll trace the live artifacts, runtime consumers, plan language, and Task25 provenance, then return a decisive keep/exclude/fail judgment.


The first pass confirms the disputed names occur inside sealed rehearsal payloads as well as two live top-level files. I’m narrowing now to Task27’s exact F2/H3/H4 rule, Task25’s archive contract, and code paths that can resolve those files from the active profile root.


The authority trace is now decisive: the legacy manifest is a real validator input, but only while its exact customer is currently enabled under a matching committed v1 activation journal and registry projection. In today’s profile that prerequisite graph is absent, so the file cannot authorize anything. I’m doing the final boundary check on archive readers and checklist call semantics before issuing the F2 correction.


I read this as resolving H3/H4 false positives - the legacy files are inert retained migration evidence, and trainer-named archive paths are historical payload, not active trainer authority.

## Decisive classification

### H3: `legacy-activation-authority.json` — exclude from F2 failure

**Classification:** retained, customer-bound migration evidence; **not current consumable authority**.

It is read only by the legacy branch of `_require_committed_activation_receipt()` in `customer_admin.py`. That branch is reachable only when all of these match:

- the customer is currently registered and `enabled=true`;
- a committed legacy activation journal exists;
- journal customer, registry/data/audit paths, registry digest, and audit receipt match;
- the manifest matches that exact customer, journal digest, current registry nutrition projection, and current owner digest;
- the customer data directory exists.

Current live state defeats every relevant prerequisite:

- Registry contains only `task26_claim_20260818145508_1b96b23d`, disabled and nonconsenting.
- `gate_d_delivery` is absent.
- `data/customers/gate_d_delivery` is absent.
- `data/customer-activation-journal.json` and activation audit are absent.
- Runtime validation iterates only enabled registry entries.

Therefore the manifest cannot activate, enable, route, or deliver for `gate_d_delivery`. Calling it an “orphan authority” is semantically wrong; it is **inert stale migration residue deliberately retained by cleanup policy**.

Evidence:

- Live manifest SHA-256: `10463f38e7e1c1977a83bc9a7a3ee0b033053cdacccaa692243f80eb20b2c064`
- Reader: `workspace/checkin_cli/checkin_cli/customer_admin.py:1910-1935`
- Enabled-only dispatch: `customer_admin.py:1983-1993`
- Writer: `nutrition_onboarding_migration.py:58-92`
- Task25 reset code explicitly preserves `data/migrations`.
- Task26 cleanup contracts explicitly list `migrations` as a protected data root.

### `gate-d-delivery-g5-checklist.json` — belongs to the same historical customer, but is a separate inert prerequisite

It is historical G5 evidence for `gate_d_delivery`, not authority by itself.

- Activation never discovers this filename automatically; a caller must explicitly pass a checklist path.
- The checklist is checked against the currently registered customer, data root, registry, consent version, token-rotation policy, membership evidence, readiness evidence, and the locked activation transaction.
- The named customer and data root no longer exist.

Task25’s reset implementation deliberately preserves both:

- `migrations`
- `gate-d-delivery-g5-checklist.json`

Task26 cleanup contracts repeat that protection. Removing only one would produce a misleading partial historical record. If historical residue is ever relocated, archive the manifest and checklist together with provenance; no release remediation currently requires that.

Checklist SHA-256: `e7d0d8c86839197de0a29bdd64e0c88d768f35b9040d108ea3717bbcffe5a21b`.

## H4: trainer-named paths inside rehearsal archives — exclude from active-residue scans

**Classification:** sealed historical payload, not active product/profile authority.

Direct live scan found:

- **zero trainer-named paths outside** `data/rehearsal-reset-archives`;
- 16 trainer-named paths inside archive payloads.

Those include:

- old trainer binding files from archive `9b128933...`;
- Task22’s `trainer-authority-removal-v1` migration record inside Task25 archive `2009ac...`.

The latter is affirmative evidence that trainer authority was removed. Deleting it would destroy part of the exact Task22-25 provenance chain. Task25 intentionally archived customer state and verified 23 scopes; Task26 binds that archive as:

> `historical_compatibility_and_provenance_evidence_only`

and explicitly states:

> `historical_execution_retargeted_to_successor: false`

Authoritative binding:

- Archive `2009ac177177839cefddb98f285e27fa`
- Digest `644d74b05bc8115f9e3aeeba035188da195a7de18f1bc737648931d64bf43bcf`
- Manifest `ca4811444e114a06749620b9a44e05c8bd62bc3223ec80b1b5740c832c4a84c1`
- Receipt `e81a84a8584400401f83aace36283dee18660144ede11e854758e725796e7fb3`
- Binding: `task26-repaired-archive-successor-653cc2f0.../bindings/historical-archive-binding.json`

Runtime code does not traverse archive payloads for customer loading, routing, activation, claims, cards, or delivery. Archive readers are explicit reset verification/provenance tools.

The archive trees are owner-private (`0700`/`0600`), not filesystem read-only. “Immutable” here means hash-sealed historical evidence, not WORM storage. F2 should verify hashes and boundaries rather than grep payload names.

## Minimal remediation

For H3/H4: **none. Do not delete or rewrite these artifacts.**

Correct the F2 scanner/classifier to:

1. Exclude `data/rehearsal-reset-archives/**` from active trainer/route/card/claim residue findings.
2. Treat archive contents only as historical evidence and integrity-check them separately.
3. Classify a legacy migration manifest as active authority only if its exact customer is enabled and the complete matching committed-journal graph exists.
4. Treat top-level G5 checklists as explicitly supplied evidence, not automatically consumed authority.

## F2 disposition

- **H3 should be withdrawn.**
- **H4 should be withdrawn.**
- These findings do not justify F2 FAIL.
- F2 may still fail only on independently proven non-archive live residue, such as the publication outbox, if its committed rows remain runtime-consumable or violate the explicit no-workflow acceptance clause.
- The stale Task27 hash manifest is a real handoff/provenance cleanup item, but other final lanes consistently classify it as nonblocking; it is not evidence of trainer authority.
- On H3/H4 alone, F2 should report **PASS / false-positive correction**, not FAIL.