# Ticket: Show campaign execution tree with active-node progress

Status: complete
Type: ticket
Updated: 2026-08-06
Next Action: none; retain the deployed tree and its rollback/backup identities while the approved Controller A chain continues
Parent: work/wp/active/wp-build-standalone-pi-sd-qualification-operator-application.md

## Problem

The campaign detail page reports durable recorded-run counts and the current run, but it does not show the approved start-to-finish campaign plan. Operators cannot see which planned stage is active, what is complete, or how much of the active stage remains.

## Expected Behavior

Every campaign detail page shows an ordered tree from campaign start through closeout. A registered plan is durable data with stable node keys, hierarchy, order, and explicit progress rules. The tree derives completion and active progress from durable runs/evidence/campaign state. A campaign without a registered exact plan shows an honestly labeled lifecycle fallback and never fabricates a planned test total.

## Acceptance Criteria

- [x] Add a durable, versioned campaign-plan model with ordered parent/child nodes and stable per-campaign keys.
- [x] Project each node as pending, active, complete, attention, or skipped from authoritative campaign/run/evidence data.
- [x] Show the complete plan tree on every campaign detail page; clearly label the generic fallback when no exact plan is registered.
- [x] Show completed/required work and the active run checkpoint, elapsed time, and heartbeat age on the active branch.
- [x] Register the exact approved Controller A campaign tree, including ordinary S4, local S0-S3/S5/S6, final S4 AFTER, recovery, representative regression, post-campaign scrub, and final observation.
- [x] Refresh tree state through the existing read-only campaign events endpoint without enabling or submitting any control.
- [x] Cover model constraints, projection behavior, API output, rendering, accessibility, and responsive layout with automated tests and Playwright review.
- [x] Deploy additively without stopping or restarting the active Controller A campaign services or changing the qualified tools-worker image.

## Verification

Verified in `work/evidence/sd-qualifier-campaign-execution-tree-20260806.md`.
