# HPT2 M3 candidate and qualifier preflight — 2026-08-27

Status: protected approval and A/B binding installed; target qualification pending
Type: evidence
Updated: 2026-08-27
Campaign: standalone
Roadmap: hpt2-qualification
Roadmap Revision: 3
Milestone: M3
Gate: G3
Next Action: resume M3 with exact-candidate read-only target preflight and the separately authorized programming and A/B qualification sequence.
Campaign Reason: Historical record from campaign hpt2-qualify-and-close-supported-claim; retained independently after campaign closure and requires no separate owner-queue execution.

## Result

The exact M2 candidate has a passing canonical Production Release rebuild, an
immutable reviewed-working-tree bundle, and a successful content-addressed
import into the deployed qualification appliance. The appliance is healthy and
fixture-ready after import, but live qualification remains fail-closed. No
controller, J-Link endpoint, SD card, USB drive, power control, or physical
media operation was used during this preflight.

M3 is not complete. The exact candidate has not been programmed or run on
Controller A or Controller B, no same-run CID block has been captured, and no
physical-target performance or lifecycle claim is made by this artifact.

## Canonical Release build

Command:
`./script/vscode-e2-build.ps1 -Action Rebuild -Configuration Release -Jobs 8`

Result: PASS, exit 0.

| Artifact | Bytes | SHA-256 |
| --- | ---: | --- |
| `Release/7520553_SMI_FW.elf` | 11,441,204 | `749bc62f9bcd7f7860f4b30f4f9612b69e83d92384a675fbaf31a0d23db12c03` |
| `Release/7520553_SMI_FW.map` | 5,460,202 | `438fca84ec8ce23f34a15d30b68c4de971234c865e8a83e402fc66aeeace52b9` |
| `Release/7520553_SMI_FW.srec` | 8,688,298 | `9bcaff9cad193eb7e6bdfc64d5fbd8e7f448978a54f9dac83ea91066954595af` |

## Immutable candidate bundle

- Bundle ID: `smi-00-05-00-0af93c55c092-9bcaff9cad19-release`.
- Local bundle:
  `work/evidence/generated/hpt2-m3-bundles/smi-00-05-00-0af93c55c092-9bcaff9cad19-release`.
- Source base: `0cd01909e141171c3b5ba9dd14c14969de8c4f64`.
- Reviewed working-tree snapshot SHA-256:
  `0af93c55c09291de3f357f1f3831f0cea614f748ece546d6870ba05d089687b6`.
- Diagnostic mapping member SHA-256:
  `7b402e36801f0845e7c5684d2fe2a36d816bda78adba0fc4304da95bede2401c`.
- HPT2 profile SHA-256:
  `b0d5247f4c2de03b02ab57c5748920a606d4b37cba61b82aeb065777f10fa0e8`.
- Imported canonical manifest SHA-256:
  `ee2a551fdfdf38215fc5146695a7aa65965a56e742c48146bfb199f9ae89416d`.
- Import state: `valid=true`, `admitted=false`, `scope=none`.

The bundle contains the ELF, map, S-record, canonical bundle manifest,
diagnostic mapping, firmware build descriptor, and profile contract. It is
bound to a reviewed dirty working-tree snapshot rather than falsely described
as a clean Git commit. The currently deployed campaign-admission implementation
accepts only `source.dirty=false`; therefore this bundle must not be silently
represented as satisfying that separate clean-source admission rule.

## Deployed qualifier preflight

- Host/workspace: `jong@srv-rpi00.local:/home/jong/dev/sd_qualification`.
- Deployed checkout:
  `/home/jong/dev/sdq-gate2-release-20260817`.
- Deployed source commit:
  `5a4b109594e801ee646ba8708e9245d7ae39afb0`.
- Deployed image identity: `campaign009-s6-series-5a4b109`.
- Appliance mode: production.
- Fixture readiness: PASS (`fixture_ready=true`).
- Live admission: blocked (`live_admitted=false`).
- Selected profile: `HPT2_ENDURANCE_BASELINE_V1`, contract valid but
  `selected_profile_live_ready=false`.
- State-changing profiles: disabled.
- Bounded stop and recovery: not yet admitted.

Fresh appliance gates passed for the database, durable evidence storage,
system clock, workers, qualification-supervisor deployment, offline bundle
store, HPT validator fixture, HPT fixture image, selected profile contract,
Controller A/B registry parsing, and foundation compatibility.

The two required-before-live blockers were:

1. `APPROVAL_TRUST_STORE_MISSING`: the configured protected
   `/protected/approval-trust-store.json` file is absent.
2. `BOUNDED_STOP_RECOVERY_UNSUPPORTED`: exact target qualification, deployed
   and admitted command authority, measured stop deadline, interrupted-session
   recovery, representative regression, and exact-run authorization remain
   incomplete for this candidate.

Expected-disabled controller, HPT2 media-write, and power/media authorities
remain disabled. They were not treated as appliance failures or enabled by
this preflight.

## Protected A/B identity state

The protected registry currently identifies:

| Role | Assembly | Probe | Hardware variant |
| --- | --- | --- | --- |
| A | `1751136` | `69664082` | `0` |
| B | `1751219` | `69660123` | `1` |

Both entries remain bound to the preceding manifest
`3b3470483906ec521df4814dffdcb90e9754ca9701f36f37c6210fda700bfe12`,
not the imported candidate manifest
`ee2a551fdfdf38215fc5146695a7aa65965a56e742c48146bfb199f9ae89416d`.
Changing this protected binding is an independent operator/reviewer action; it
was not inferred from conversational approval.

## Import incident and restoration

The first import invocation was launched from the source checkout with its
stale local `.env`. Compose project-name reuse recreated only the PostgreSQL
container with the wrong environment, and the import then failed at database
authentication before bundle-database mutation.

The production PostgreSQL service was immediately restored with the exact
production Compose file, override, and environment set. PostgreSQL returned
healthy, the web health endpoint returned HTTP 200, durable workers were
restarted, and the subsequent appliance snapshot reported database and worker
PASS. The bundle was then imported successfully through the production image.
No controller, media, power, or physical operation occurred during the
incident or recovery.

## Tool Shed execution note

The owner-approved App Server route was attempted for this campaign. It made
no mutation and returned `codex_version_not_qualified`; the campaign therefore
continued through the normal Tool Shed route as required by the Tool Shed
fallback contract.

## Exact continuation boundary

Before any controller programming or live HPT2 command, an independent
protected-config operator must:

1. review and publish a non-synthetic `external-approval/0.1` record for the
   exact candidate bundle, mapping, and A/B assignments;
2. install that record's uppercase canonical SHA-256 in
   `/home/jong/dev/sd_qualification/config/protected/approval-trust-store.json`;
3. rebind both protected registry entries to the exact imported canonical
   manifest SHA-256; and
4. preserve the existing controller identities and ordinary exact-run,
   endpoint, safe-state, power, and media safeguards.

A review packet containing the exact proposed approval, trust store, and
registry is staged at
`work/evidence/generated/hpt2-m3-protected-review/`. The proposed approval's
canonical SHA-256 is
`E7E839048C48397D280DD869AE6134ADFC7B78C607EB118082BE28B5BFDD0E01`.
These are review inputs only; they have not been copied into protected
configuration and do not authorize a target action by their presence in the
firmware workspace.

The same three files are staged outside protected configuration on the Pi at
`/home/jong/.local/share/sd-qualifier/review-inbox/hpt2-m3-20260827/`.
Their transport hashes are:

- `external-approval.json`:
  `2b4f91a7e75a7f0079311074fde609b9bdecd64a6480ee920590f0b09c612254`;
- `approval-trust-store.json`:
  `4476bb11c6726efece411f503c09d78cb31adfae3b83a6b999b719a3f58b565d`;
- `controller-registry.json`:
  `2727a9f140876e906ff96c50c305d5078148a7870d62836e65638f4037ead367`.

All three staged files parse as JSON. They remain non-authoritative until the
independent review and protected installation are completed.

Chat or UI approval is intentionally not a substitute for these protected
machine-verifiable records. After that independent intervention, M3 resumes
with read-only exact-candidate preflight, programming authorization, baseline
CID capture, and the approved Controller A/Controller B matrix. Physical SD
removal or insertion while powered remains prohibited.

## Protected installation verification

The owner explicitly authorized the agent to perform the protected Pi
installation after confirming full Pi access. On 2026-08-27 the three staged
files passed their recorded transport hashes. The previous protected registry
was preserved at
`/home/jong/.local/share/sd-qualifier/protected-config-backups/hpt2-m3-preinstall-20260827T1135Z/`,
and the approval record was published read-only at
`/home/jong/.local/share/sd-qualifier/approved-records/hpt2-m3-20260827/external-approval.json`.

The running production appliance then reported:

- `APPROVAL_TRUST_STORE_READY`: PASS, one protected anchor;
- exact approval document trust verification: `true`;
- `CONTROLLER_REGISTRY_READY`: PASS;
- `FOUNDATION_COMPATIBILITY_READY`: PASS for the imported exact bundle and
  protected A/B identities; and
- fixture readiness remained `true`.

`BOUNDED_STOP_RECOVERY_UNSUPPORTED` remains expected until the target
qualification, stop-deadline, recovery, regression, adapter admission, and
exact-run evidence generated by the remaining M3 sequence are complete. It is
not bypassed by the protected installation.
