# Fixed Physical-Card QA Traveler Deployment Evidence

Status: verified
Type: evidence
Updated: 2026-08-06
Ticket: work/tickets/ticket-replace-campaign-first-card-status-with-fixed-qa-sheet.md

## Delivered behavior

The physical-card status page is now an eight-row QA traveler rather than a
campaign list. It separates explicit sample/card failures from invalid method,
tool, fixture, or infrastructure attempts. The decision bar states overall
result, continue decision, current test, actual card failures, invalid
attempts, latest CID, and next action. Campaigns remain chronological and
immutable inside collapsed engineering history. A and B are independent and
feed a final paired gate only after both sheets finish.

The active row shows at most the five newest attempt summaries and reports the
complete attempt count. This reduced the live desktop page from roughly 6,400
CSS pixels to 1,863 while preserving source links.

## Source and image identity

- PR #38 merged the traveler at `94d78c8`.
- PR #39 corrected final disposition to use the newest card assignment at
  `cc6ed34`, preventing an obsolete blocked attempt from overriding active
  work.
- PR #40 capped compact attempt previews at final merge `fe27ecd`.
- Deployed image:
  `srv-rpi00-sd-qualifier:card-qa-fe27ecd`.
- Image ID:
  `sha256:e6dd3742ee69b0ce85ce86384a9935837a2ad0549336f61f8ab03fcca2c5a503`.
- Web start: `2026-08-06T17:14:28.331178213Z`.

## Validation

- Local `manage.py check` passed.
- Focused view tests passed `28/28`.
- The exact final ARM64 image passed `250/250` Linux tests with writable test
  evidence rooted under `/tmp`.
- `/sd-qualifier/healthz` returned `status: ok` with database, storage, clock,
  and workers true.
- Authenticated MCP Playwright verification passed at `1440x1000` and
  `390x844`.
- Mobile DOM measurement was `375` client pixels and `375` scroll pixels: no
  horizontal overflow.
- The live page contains exactly eight QA rows, one active accordion, five
  visible newest attempts, and collapsed engineering history.
- F1-B1 contains eight `NOT RUN` rows, no open QA accordion, and reads
  `NOT STARTED` / current test `Not started`.
- No application console error was observed; the browser logged only the
  pre-existing nonfunctional `/favicon.ico` 404.
- The five-minute verification session was deleted and browser cookies were
  cleared after inspection.

## Live card truth

F1-A1:

- overall `IN PROGRESS`;
- continue `YES`;
- current test `Bounded-stop measurement matrix`;
- actual card failures `0`;
- invalid attempts `5`;
- identity, baseline scrub, and HPT initialization rows `PASS`;
- matrix row `RUNNING`, `10 of 21 steps complete` at observation time;
- next action: prepare exact S4 `44640 / BEFORE` Start intent.

F1-B1:

- overall and continue decision `NOT STARTED`;
- all eight traveler rows `NOT RUN`;
- no card failure and no invalid attempt;
- Controller B qualification was not started.

## Continuity

Deployment used Compose `up -d --no-deps --wait web`. Command and notification
workers remained on image
`sha256:4237e644eec42d742be75942a9ff2f8013812ebc309e0f416f306b70aefbd9c7`
with unchanged starts `2026-08-06T00:38:14.016461929Z` and
`2026-08-06T00:38:14.026245241Z`. These four Controller A services remained
active:

- `sdq-controller-a-after-final.service`;
- `sdq-controller-a-after-ordinary.service`;
- `sdq-controller-a-final-after.service`;
- `sdq-controller-a-s4-matrix-v3.service`.
