# Controller A USB R5 Lifecycle Qualification — 2026-07-29

Status: PASS for Controller A lifecycle and persistence gates; historical R4
`HPTE.TMP` orphan remains and was not repaired.

Identity alias: specimen observed here as `A-CTRL-2` was relabeled
`USB04_32G` later on 2026-07-29; serial unchanged.

## Candidate identity

- Controller / J-Link: `1751136` / `69664082`
- USB specimen: A-CTRL-2, USB serial `071C49DE246A1F97`, FAT label
  `A-CTRL-2`, UUID `E4FE-BA86`
- Controller SD raw CID: `035344535330384780976F0084018559`
- Debug SREC SHA-256:
  `C8094C8C264260F2EBBEA21ED0C4E618CBE59414177A50FB70B78A1921993601`
- Debug ELF SHA-256:
  `7241CD15A2AC7FABAAA14B9F1BEABDCD5ACA896E898EE2D6934531303853B3F3`
- Release SREC SHA-256:
  `2D04B793D15C28F2C6220150856C37DAF265CA82D5E6518CDB7336C2924D0341`
- Release ELF SHA-256:
  `4685EB5EA8BF807A9EB40FFB0ACE1592D3FDB25350BCFB094E6635C66B819E20`

## Software gates

- Managed Debug and Release builds: PASS
- Repository `script/check-*.ps1` suites: 23/23 PASS
- R5 lifecycle rule:
  - wait until the old storage instance is absent from the USBX class registry;
  - require all application FileX/storage references to be invalidated before
    restoring VBUS;
  - require the new storage instance to be registered/live before verification;
  - force this lifecycle in qualification independent of optional-command
    capability.

## Controller A execution

The 1 MiB and 7 MiB matrices each completed at 16, 32, 64, and 96 KiB write
limits. Every file reported exact requested/actual bytes, expected row count,
zero first/final FileX status, and `complete=1`. Both terminal captures reported
state `2`, overall status `0`, current file `4`, and USB mounted. Intermediate
captures during both matrices independently observed USB unmounted during the
deliberate VBUS-off interval.

- 1 MiB total: 6,693 ticks
- 7 MiB total: 12,508 ticks
- Raw captures:
  `work/evidence/hpt-log-store-circular-mirror/controller-a/usb-r5-lifecycle-20260729/`

## Independent unmounted Pi verification

The drive was returned to the Pi and identified by serial before inspection.
It was never mounted read-write. Read-only mounts were removed after hashing,
and the final `lsblk` state was unmounted.

| Files | Exact size | SHA-256 |
|---|---:|---|
| `U16K1M.CSV`, `U32K1M.CSV`, `U64K1M.CSV`, `U96K1M.CSV` | 1,048,576 each | `6ab78b4dde26efd91a20aa003198a13d794b1cd7276f3cc05880f944f56966b3` |
| `U16K7M.CSV`, `U32K7M.CSV`, `U64K7M.CSV`, `U96K7M.CSV` | 7,340,032 each | `885418a583a8ebf3d9e0c0f0811ca821fb82ee99a25ef6573a0a49f01fc82b1d` |

Read-only filesystem evidence:

- filesystem-prefix SHA-256:
  `3e3a834e4600614f7cc87e9151d72302cb4376ee45c3357dd40fc644505ad1a0`
- FAT1 SHA-256:
  `011e5ef0ef170642c0e1dbb10c129b2164ab8b474adeb94f9267ee7f581e505d`
- FAT2 SHA-256:
  `011e5ef0ef170642c0e1dbb10c129b2164ab8b474adeb94f9267ee7f581e505d`
- FAT copies: identical
- `fsck.vfat -n -v`: historical `/HPTE.TMP` is still zero length with an
  allocated cluster chain; the tool proposed truncation but explicitly left
  the filesystem unchanged.

## Decision

R5 passes the Controller A lifecycle truth and independent persistence gates
for both test tiers. It does not establish broad-drive production
compatibility, and it does not erase the preserved R4 incident. Controller B
and the broader drive/filesystem matrix remain separate gates.
