# Ticket: Replace campaign-first card status with fixed QA sheet

Status: complete
Type: ticket
Updated: 2026-08-06
Next Action: resume the Controller A exact-identity S4 matrix at 44640 / BEFORE; keep Controller B qualification not started
Parent: work/wp/active/wp-build-standalone-pi-sd-qualification-operator-application.md

## Problem

The physical-card status page presents immutable campaigns as top-level
qualification stages. Campaigns are engineering attempts and corrective
branches, so this makes method/tool failures look like card failures, makes the
number of campaigns look like the required QA test count, and fails to answer
whether the card should continue. The `0/0 runs` metric also omits durable scrub
and initialization operations that occurred outside the generic `Run` model.

## Expected Behavior

The primary physical-card surface is a fixed, ordered QA traveler. It states
the overall card result, current test, continue/stop/wait decision, actual card
failure count, and next action. Each required test has one operator-facing
state: `NOT RUN`, `RUNNING`, `PASS`, `FAIL`, `INVALID ATTEMPT`, or `BLOCKED`.
Immutable campaigns, operations, runs, and evidence remain available as nested
attempt history under the applicable test. A and B remain independent sheets;
the final paired gate follows both.

## Acceptance Criteria

- [x] A fixed QA sheet replaces raw campaigns as the primary process tree.
- [x] The sheet has stable rows for identity/intake, baseline media scrub, HPT
      initialization, bounded-stop measurement matrix, controlled
      interrupted-session recovery, representative regression,
      post-campaign scrub and identity closeout, and final disposition.
- [x] Overall status explicitly shows card result, continue decision, current
      test, actual card failures, invalid attempts, and next action.
- [x] Failed method/tool/infrastructure attempts render `INVALID ATTEMPT` and
      never become a card `FAIL` without an explicit card/sample result.
- [x] Generic runs and durable scrub/initialization operations are counted and
      described without claiming an unexecuted test ran.
- [x] Campaign/operation history remains chronological, compact, expandable,
      and linked to immutable source detail.
- [x] F1-A1 truth reads `IN PROGRESS`, continue `YES`, no card failure, current
      S4 work, and historical invalid attempts; F1-B1 remains `NOT STARTED`.
- [x] Separate A/B sheets and the final paired gate remain intact.
- [x] Automated tests cover clean, running, card-fail, invalid-attempt,
      blocked, not-run, and unrelated-card cases.
- [x] Exact-image tests, desktop/mobile browser review, web-only deployment,
      health, and Controller A/worker continuity pass.

## Verification

Run focused and complete ARM Linux image tests. Deploy only the web service at
a safe observation boundary. Inspect the authenticated dashboard plus F1-A1
and F1-B1 at desktop and mobile widths; verify the rendered decision language,
row ordering, accordions, links, and horizontal overflow. Confirm the active
Controller A run, four systemd services, and qualified workers were not
interrupted.

## Delivery

Completed in SD Qualifier merge commits `94d78c8`, `cc6ed34`, and final
`fe27ecd` (PRs #38, #39, and #40). Production runs exact image
`sha256:e6dd3742ee69b0ce85ce86384a9935837a2ad0549336f61f8ab03fcca2c5a503`.
See `work/evidence/fixed-physical-card-qa-traveler-20260806.md`.
