# SD qualifier campaign execution tree deployment

Date: 2026-08-06
Status: complete
Result: production web deployment verified
Type: evidence
Updated: 2026-08-06
Next Action: retain while the approved Controller A chain continues through the displayed tree
Campaign: 006-start-clean-contract-bound-sd-qualification-campaign
Parent: work/tickets/ticket-show-campaign-execution-tree-with-active-node-progress.md
Ticket: `work/tickets/ticket-show-campaign-execution-tree-with-active-node-progress.md`

## Exact identities

- Source repository: `PC-Redemption/sd-qualification`
- Source branch: `codex/campaign-execution-tree`
- Source commit: `48025fd83501c878d984ac77595dbd27c3dec04d`
- Merged PR: `https://github.com/PC-Redemption/sd-qualification/pull/34`
- Integration merge commit: `b305b5c867f1af7f4ee6bfd176b3f0c9b7081a62`
- Candidate release/tag: `campaign-tree-48025fd`
- Candidate image: `sha256:ee4a63aad18ded46e1083236db07a059ef02201bd26f76eb0c388d1d7a0c36f7`
- Production web override: `/home/jong/.local/share/sd-qualifier/campaign-tree-48025fd-compose.override.yaml`
- Qualified tools-worker image retained: `sha256:4237e644eec42d742be75942a9ff2f8013812ebc309e0f416f306b70aefbd9c7`

## Durable plan and migration

- Additive migration `qualification.0019_campaignexecutionplan` passed.
- Active plan key: `controller-a-s4-recovery-regression-2026-08-06`, revision `1`.
- The registered plan contains 30 ordered leaf steps from admission through
  exact S4, identity-local S0-S3/S5/S6, five interrupted-session recovery
  cases, representative regression, post-campaign scrub, and final read-only
  observation.
- Older campaigns without an exact registered plan display an explicitly
  labeled generic lifecycle tree and do not invent test totals.
- Pre-migration backup:
  `/backups/sd-qualifier-20260806T140059Z.dump`, `466532` bytes,
  SHA-256 `c05aada2d2b13ea8ef039382a28e82e3226dfbb139140a5572a2824a9bbbf067`.
- The backup hash check and disposable restore check both passed before the
  migration was applied.

## Verification

- Targeted tree/view suite: `21/21` pass.
- Exact Pi/Linux candidate-image suite: `234/234` pass in `49.069 s`.
- Django system check, migration-drift check, Python compilation, JavaScript
  parsing, and Git whitespace checks pass.
- Desktop `1440x1000` and mobile `390x844` Chromium review of the authenticated
  campaign response found zero horizontal overflow, console errors, request
  failures, unlabeled controls, duplicate IDs, or heading jumps.
- The disposable visual-review database was restored from the verified backup,
  migrated, plan-registered, reviewed, and removed. Production credentials and
  browser sessions were not read or changed.
- Production campaign page and events API both return HTTP 200 and contain the
  exact plan.
- At verification, campaign
  `648ba10c-0bc0-4319-8089-78a0cce287ce` reported `10/30` planned steps
  complete, active node `matrix.s4.10080.after`, active run
  `65ab5d14-1a0`, checkpoint `AFTER 10080`, and `0/3` credited observations
  on that leaf.
- All four persistent Controller A chain services remained active after the
  web-only deployment. Controller B remained disabled.

## Deployment isolation

The web container was recreated at the start of a fresh runner observation
sleep (`sleep_age=0`). The migration was additive. No Controller A service,
command worker, notification worker, controller endpoint, machine intent, or
target action was stopped, replayed, or changed. The disposable preview
container/database were removed after review; the verified backup and prior
web/tools images remain available for rollback.
