# SD Qualifier nine-campaign administrative closeout — 2026-08-14

Status: accepted administrative closeout evidence
Type: evidence
Updated: 2026-08-14
Parent: `work/checklists/checklist-sd-card-supply-change-project-closeout.md`
Decision basis: `work/evidence/sd-qualifier-cross-campaign-evidence-admission-audit-20260813.md`

## Decision and scope

The operator authorized closing the nine non-terminal campaigns visible on the
deployed SD Qualifier. This action did not synthesize a qualification, reject a
card, resume a coordinator, publish a controller command, program firmware,
cycle power, or delete evidence. The supported application closeout service
recorded each campaign as `ABORTED`, which represents an administrative
`INCONCLUSIVE — no qualification conclusion` disposition.

## Recovery and backup gate

Before closeout, a backup command was mistakenly launched from the obsolete
`/home/jong/dev/sd_qualification` checkout. Compose recreated PostgreSQL with
that checkout's incomplete deployment inputs; authentication failed, workers
observed a database disconnect, and no closeout transaction had run. The
database container was immediately reconciled with the deployed worktree and
all six production Compose inputs identified by the healthy web container:

- worktree `/home/jong/dev/sdq-independent-ab-20260813`;
- protected environment files `production.env` and
  `qualification-supervisor.env`; and
- the independent-A/B, dashboard-SSE, campaign-detail-performance,
  terminal-closeout-UI, and terminal-closeout overrides.

After recovery, PostgreSQL was healthy and carried the same exact production
Compose metadata as the web container. A repeatable-read, read-only audit again
found the same nine non-terminal campaigns and zero active runs, commands,
HPT2 operations, initialization operations, scrub operations, or claimed
coordinator tasks. The recovery therefore changed no campaign state.

The corrected production stack then created and restore-validated:

- backup: `/backups/sd-qualifier-20260814T111056Z.dump`;
- SHA-256: `7b1678a0d3d22ca1b73f8603100ffab99d9701a16b6ecd3908b851710149909b`;
- restore check: passed, with `11` campaigns recovered.

## Transactional closeout

One all-or-none transaction locked and revalidated the exact open-campaign set,
expected versions, global execution quiescence, coordinator state, and claimed
task count before calling `qualification.services.close_campaign` for each ID.
Each event stores `qualification_conclusion=false`, preserves its prior state in
the payload, and records that evidence and card results must be preserved.

| Campaign | Prior state/version | Final state/version | Fixture only | Closeout report evidence |
| --- | --- | --- | --- | --- |
| `dd8c73e4-fc41-44a2-aae4-6fc668eea438` | `DRAFT` / 1 | `ABORTED` / 2 | yes | `19659`, `19660` |
| `49024955-703c-4990-bed8-225ff3ef8434` | `BLOCKED` / 3 | `ABORTED` / 4 | yes | `19661`, `19662` |
| `d2263f26-6ac7-4a90-ad80-8875c0c24d2a` | `BLOCKED` / 3 | `ABORTED` / 4 | yes | `19663`, `19664` |
| `738c4a65-acf3-4492-8d17-244ade322670` | `BLOCKED` / 3 | `ABORTED` / 4 | yes | `19665`, `19666` |
| `c0b1b669-4828-476f-8879-c1077f139a26` | `INTAKE` / 2 | `ABORTED` / 3 | yes | `19667`, `19668` |
| `8f3fe483-c783-4170-a720-3c2df3a48fd6` | `RUNNING` / 4 | `ABORTED` / 5 | no | `19669`, `19670` |
| `7f13c433-e904-4320-a0d1-33d503057f69` | `RUNNING` / 4 | `ABORTED` / 5 | no | `19671`, `19672` |
| `dc4bd3bd-d696-4263-b746-12d7a92d85e7` | `DRAFT` / 1 | `ABORTED` / 2 | yes | `19673`, `19674` |
| `807a7038-1726-4fd7-a172-ade4b3f0b2ef` | `RUNNING` / 5 | `ABORTED` / 6 | yes | `19675`, `19676` |

Evidence IDs are ordered as immutable `campaign-manifest` then immutable
`qualification-report`. All 18 stored files were reread and matched their
recorded SHA-256 values.

## Verification

The post-close repeatable-read audit proved:

- target count `9`, all state and final disposition `ABORTED` at the expected
  incremented versions;
- exactly one `campaign.closed` event per target and no qualification
  conclusion in any event;
- zero non-terminal campaigns and database state counts `ABORTED=11`, all
  other campaign states `0`;
- sample-result rows exactly match the pre-close snapshot and no sample is
  `REJECTED`;
- zero active runs, commands, HPT2 operations, initialization operations, or
  scrub operations;
- the formerly waiting fixture coordinator is durably `PAUSED` with desired
  state `PAUSED` and zero claimed tasks;
- web and PostgreSQL containers healthy; and
- unauthenticated front door returned the expected `302` login redirect in
  `0.027 s`.

Machine-readable snapshots are retained under the ignored generated-evidence
area:

- `work/evidence/generated/sdq-close-nine-preflight-20260814.json`;
- `work/evidence/generated/sdq-close-nine-preflight-after-recovery-20260814.json`;
- `work/evidence/generated/sdq-close-nine-result-20260814.json` (includes the
  post-commit verification-script field-name error; it does not indicate a
  transaction failure); and
- `work/evidence/generated/sdq-close-nine-verification-20260814.json`.

## Result

Gate 1 is complete. The live SD Qualifier is truthful and quiescent with all
historical and fixture campaigns preserved as terminal history. The next work
is Gate 2: consolidate the accepted source lineage, integrate
`SMI-SDQ-CONTRACT-V1` into that release line, and register the immutable
contract-complete execution plan before any new controller qualification.
