# SD qualifier authoritative campaign progress candidate

Date: 2026-08-06
Status: production web deployment verified
Ticket: `work/tickets/ticket-show-authoritative-live-campaign-progress-in-sd-qualifier-ui.md`

## Exact identities

- Source repository: `PC-Redemption/sd-qualification`
- Branch: `codex/dashboard-authoritative-progress`
- Commit: `61aab947b30f18b0af7915b45b955b7073610c92`
- Merged PR: `https://github.com/PC-Redemption/sd-qualification/pull/33`
- Merged integration commit: `3780ca804dc613e5e16ed99ad29c6664bab6e22b`
- Candidate release: `dashboard-progress-61aab94`
- Candidate image: `sha256:26b06ec6d92ad5090ed3b4f5398abacfac0075757f7f68dd7e6e922f2d8d7e23`
- Retained rollback tag: `srv-rpi00-sd-qualifier:pre-dashboard-b586704`
- Retained deployed image: `sha256:4237e644eec42d742be75942a9ff2f8013812ebc309e0f416f306b70aefbd9c7`

## Verification

- Focused durable-progress/API and repeated-form-ID tests: `2/2` pass.
- Complete view suite: `17/17` pass.
- Django system check, Python compile, JavaScript syntax, and Git whitespace
  checks: pass.
- Exact Pi/Linux runtime suite from isolated checkout: `230/230` pass in
  `47.551 s`.
- Exact candidate-image Compose checks: Django check pass, no model changes,
  and no unapplied migrations.
- Isolated candidate-image health against the production database: HTTP 200;
  database, storage, clock, and worker gates true.
- Authenticated Chromium review at `1440x1000` and `390x844`: dashboard, card
  models, and the live campaign each return HTTP 200 with zero duplicate IDs,
  unlabeled controls, heading jumps, request failures, or horizontal overflow.
- Generated visual report and screenshots (ignored bulk evidence):
  `work/evidence/generated/site-review/dashboard-progress-exact-image-20260806/`.

The live preview showed campaign `648ba10c-0bc0-4319-8089-78a0cce287ce`
with 23 recorded runs, 22 completed, one open, Controller A specimen `F1-A1`,
case `S4`, checkpoint `AT 10080`, and Controller B not started. This confirms
the repaired surface represents the durable work already performed rather than
the separate appliance-admission state.

## Isolation and cleanup

The candidate preview was a separate one-worker container on loopback port
`18081`, reached through a temporary SSH tunnel. It performed authenticated
GET-only review. The preview container, tunnel, and temporary Django session
were removed afterward. No controller endpoint, intent, command, campaign
state, or production service was changed.

## Production deployment

Logical backup `/backups/sd-qualifier-20260806T133047Z.dump` passed a complete
restore check. Because the change affects only authenticated web reads,
templates, static assets, and form IDs, production used an explicit web-only
Compose override. The deployment waited for a new 30-second controller
observation sleep and recreated only `sd-qualifier-web-1` at
`2026-08-06T13:31:52Z` with sleep age zero. The container became healthy before
the runner's next possible web call.

The resulting split is intentional and verified:

- web: candidate image `sha256:26b06ec6...d7e23`, source `61aab94`;
- command and notification workers: retained image `sha256:4237e644...d9c7`;
- `srv-rpi00-sd-qualifier:local` and every subsequent one-shot controller tool:
  retained image `sha256:4237e644...d9c7`;
- PostgreSQL: unchanged and healthy;
- migrations: none.

All four Controller A orchestration units remained active, the campaign
remained `RUNNING`, and the durable count stayed one open run throughout the
swap. No target-tool container or queued command remained. Production
authenticated Chromium review on `http://srv-rpi00.local/sd-qualifier/`
returned HTTP 200 for all six desktop/mobile routes with zero duplicate IDs,
unlabeled controls, heading jumps, request failures, or horizontal overflow.
The campaign advanced between exact-image preview and production review from
23 recorded/22 complete to 24 recorded/23 complete, proving the deployed
surface reflects newer durable progress. Generated production review output is under
`work/evidence/generated/site-review/dashboard-progress-production-20260806/`.

The browser reported only pre-existing transport notices: COOP is ignored on
the intentionally accepted plain-HTTP origin, and the first page requests a
missing favicon. Neither affects progress refresh or layout.

PR #33 was marked ready and merged into
`codex/full-address-scrub-adapter` at integration commit
`3780ca804dc613e5e16ed99ad29c6664bab6e22b` after production verification.

## Staging tag correction

During isolated candidate staging, `:local` was briefly pointed at the
candidate before the runner dependency was inspected. It was restored to
`sha256:4237e644...d9c7` before production deployment. The campaign's
one-shot observation path may have instantiated the candidate during that
window. Impact review found no changed normal measurement, mailbox,
publication, reconciliation, or target-access implementation: commits between
the deployed source and the candidate add separate recovery modules/commands,
and this ticket changes web progress/views/templates/static assets only. The
normal command path and database schema are identical. Campaign progress,
identity, command counts, firewall cleanup, and subsequent old-image one-shot
execution remained valid. The final deployment keeps `:local` explicitly on
the retained controller-qualified image to prevent recurrence.
