# Autonomous SD soak implementation, build, and controller-A load

Status: software/build/load and short EDGE-card start/stop target gate passed
Type: evidence
Updated: 2026-07-16
Next Action: operator confirms service-code 474 start/status on the EDGE card, then leaves the autonomous weekend run active
Campaign Reason: Historical record from campaign 009-complete-clean-contract-bound-a-b-qualification; retained independently after campaign closure and requires no separate owner-queue execution.
Campaign: standalone
Parent: work/wp/active/wp-sd-card-accelerated-endurance-evaluator-and-media-qualification.md

## Requested operating contract

The weekend test must not require a connected J-Link. An operator starts it by
service code, the controller continues normal operation and one-minute
production logging, the monitor runs until manual stop or failure, and progress
and first-failure evidence remain available for later J-Link/host analysis.

## Implementation

- Added non-formatting service code `474`; destructive accelerated code `472`
  remains separate and mutually exclusive.
- Added indefinite start/running/stopped/failed state with controlled stop.
- Normal queued production records retain priority; successful periodic records
  feed soak progress counters.
- Dropped records, either mirror failure, SD I/O failure, unavailable media, or
  more than three minutes without a completed periodic record latch failure.
- `SOAK<run>.CHK` is flushed at start and hourly; `SOAK<run>.RESULT` is flushed
  on controlled stop/failure when media remains writable.
- Reserved `gRamConfig.Log_Spares[0..7]` persist run/state/start/checkpoint,
  minute-record count, first failure, and reset count through the existing
  generation/readback-verified VEEPROM save path.
- An active persisted run resumes after reset and increments reset count.
- Live status is exported as `gSdSoakStatus` at `0x20044424` (60 bytes); its
  persistent config words are at `0x20023648` (32 bytes) in both Debug/Release.

Operator documentation is `docs/sd-autonomous-soak-monitor.md`. Later capture
uses `script/jlink-capture-sd-soak-474.jlink`.

## Automated and build gates

- Autonomous soak source invariant checks: 14 passed.
- Persistence/restart/failure model checks: 10 passed.
- Existing evaluator checks: 18 passed.
- Existing SD-safety checks: 10 passed.
- Isolated clean Debug build/package: passed.
- Isolated clean Release build/package: passed.

| Artifact | Bytes | SHA-256 |
| --- | ---: | --- |
| Debug `7520553_SMI_FW_00_04_12.srec` | 8,491,290 | `53ACAD4610FBB72919C2E9E1956C5136433B6D376271F04CDEC26B683B705F7C` |
| Debug `7520553_SMI_FW_00_04_12.elf` | 14,749,600 | `13659ACFB3298EE11E6A099B0E099D92EAF3A148C072F610FA37E87624F31E09` |
| Release `7520553_SMI_FW_00_04_12.srec` | 8,491,290 | `734F258F13E80215396C3A141145E89B0E66FCE3E73BFEE744C16FD4B75E824B` |
| Release `7520553_SMI_FW_00_04_12.elf` | 11,087,404 | `2B63AAD655C2B9D57EE442C82854A184EB258EE4AC42A00D2340DA9157FC23B0` |

## Controller-A load

J-Link serial `69664082` programmed and verified the exact Debug S-record on
Setup A/controller `1751219`. With no SD card installed, startup reached
`0xC00000FF`, configuration remained operational with no findings/events and
generation 6, and the new soak status initialized to all-zero/idle.

| Capture | Bytes | SHA-256 |
| --- | ---: | --- |
| Pre-load VEEPROM | 4,096 | `C0AD6BF06D7CA041F36D09A7CBF4205F40E5C762AA736A582AECD080C4B48EFE` |
| Post-load VEEPROM | 4,096 | `C0AD6BF06D7CA041F36D09A7CBF4205F40E5C762AA736A582AECD080C4B48EFE` |
| Program-flash capture | 3,145,728 | `5F4F138C91163A7A45344EF2AB0FD6928C1E71FD76E4ACA5EFA60D36371881E5` |
| Idle soak-status capture | 60 | `5DCC1B5872DD9FF1C234501F1FEFDA01F664164E1583C3E1BB3DBEA47588AB31` |

## EDGE-card proof-of-concept correction and target gate

The first operator run `86700` failed immediately with FileX status `0x0D`
because `SOAK86700.CHK` exceeded strict FAT 8.3 basename limits. Checkpoint and
result evidence names were corrected to `SK<run>.CHK` and `SK<run>.RES`.

A subsequent J-Link proof run showed the corrected checkpoint succeeded, then
the first production record failed with `0x0D`. Target time inspection found
the battery-backed RTC at January 2017; production logging intentionally rejects
pre-2018 timestamps. The firmware now seeds uninitialized or stale RTC values to
2026-07-01 00:00:00 while retaining `gIsClockValid == false` so the operator is
still asked to set the exact time.

The corrected image was programmed and verified on Setup A/controller `1751219`.
Target proof run `35218` entered Running, created its checkpoint, completed one
normal production minute record, and retained zero drops, mirror failures, I/O
failures, and first-failure status. A controlled stop reached Stopped with FileX
status zero, proving the final result write succeeded. The captured terminal
status is `soak-status-jlink-69664082-20260716-poc-stopped.bin`.
