# SD Qualifier site-audit recommendations deployment — 2026-08-11

Status: verified
Type: evidence
Updated: 2026-08-11
Next Action: review the current Aug. 10 Controller A `ORCHESTRATOR_SERVICE_DIVERGENCE` evidence and reconcile the expected service state without replaying a controller command
Campaign Reason: Historical record from campaign 014-complete-standalone-sd-qualifier-acceptance; retained independently after campaign closure and requires no separate owner-queue execution.
Campaign: standalone
Parent: work/wp/active/wp-build-standalone-pi-sd-qualification-operator-application.md
Canonical Truth: `jong@srv-rpi00.local:~/dev/sd_qualification/README.md`, current source, database, and deployed runtime

## Outcome

The authenticated site audit recommendations are shipped as web release
`qualification-site-audit-dda5b0d`:

- card-traveler interventions are constrained to the deterministically selected
  current campaign and exact assignment, so unresolved Aug. 6 notifications no
  longer populate the Aug. 10 traveler;
- `/sd-qualifier/healthz` returns `503`/`degraded` unless every gate labeled
  `required-now` passes, and exposes `required_now_ready` explicitly;
- closed help tooltips are removed from layout overflow and opened tooltips are
  centered at a bounded width; and
- the previously enabled read-only `sdq-qualification-observer.service`, which
  had been stopped during the prior web deployment, is active again and
  refreshing the required `qualification-host-observer` heartbeat.

The observer restoration exposed current truth rather than replaying or
changing a qualification run. Controller A now reports the current Aug. 10
`ORCHESTRATOR_SERVICE_DIVERGENCE` because
`sdq-controller-a-representative-hpt.service` is inactive/dead while the
observer is active. F1-A1 therefore still shows supervisor review, now sourced
from the current campaign. F1-B1 correctly shows no active intervention. This
remaining Controller A block must not be hidden, inferred away, or repaired by
replaying a controller command.

## Source, tests, and image

- Isolated source branch: `codex/site-audit-recommendations-20260811`.
- Implementation commit:
  `dda5b0dae617a68444e8a706598c3ee0a1ea9669`.
- Regression coverage proves that a successor card ignores an open predecessor
  intervention, still displays a current successor intervention, degrades
  health for failed required-now gates, restores HTTP `200` when they pass, and
  keeps closed tooltip content out of layout overflow.
- Focused regressions: `5/5` passed.
- Exact ARM64 application suite: `337/337` passed in the command-worker test
  surface with its required executable tmpfs.
- `makemigrations --check --dry-run`: no changes detected.
- Django system check: no issues.
- Image:
  `srv-rpi00-sd-qualifier:qualification-site-audit-dda5b0d`.
- Image ID:
  `sha256:d0706d1f47317b9c30f2d3426d6c228f60efba204175e127c34604e575340fd6`.
- OCI revision and version labels match the implementation commit and release.

An initial full-suite invocation in the web service produced two fixture-only
execution-root failures because that service intentionally lacks
`/run/hpt-exec`. Re-running the same `337` tests in the repository-defined
command-worker surface passed completely; no source mitigation was needed.

## Deployment and rollback

Only `sd-qualifier-web-1` was recreated. It is Docker `healthy` on container
`95ede9887e435d060fd6ae6bd069436dc2c9d1d55e4536183ae745b996e09f8b`.
The command worker, notification worker, and qualification watchdog retained
their exact container IDs and original start times:

- command worker `0d1a7d42b32374c9b6fb95f2cd46bce6aab7ea634dba7d458ea155bcf9e4759b`;
- notification worker `e9422966382e532c13633a3de94413ee77ed5af7a98c4a21df9b5fd2ce85422c`;
- qualification watchdog `9c8d7c43aaa186633feb25d1d8f42a9e817b243a4797c4987ccb794d6a1de268`.

The prior image
`srv-rpi00-sd-qualifier:qualification-card-current-47b1fb5` remains available.
Its exact rollback override is retained at
`/home/jong/.local/share/sd-qualifier/rollback-site-audit-dda5b0d-20260811T213200Z/qualification-card-current-47b1fb5-compose.override.yaml`.
No migration or database restore is required for image rollback.

## Live verification

- `/sd-qualifier/healthz`: HTTP `200`, `status=ok`,
  `required_now_ready=true`, `clock=true`, and `workers=true`.
- Dashboard: both fixed cards select Aug. 10 campaign
  `8c7a2b1a-7e67-48ac-8895-7999d76c4c2a`; Durable workers reports `PASS`.
- F1-B1: operator action is `NONE`, sourced from the traveler; neither retained
  Aug. 6 supervisor notification is projected.
- F1-A1: operator action is sourced from `QUALIFICATION SUPERVISOR`, not the
  historical notification query. Current notification `275` records the
  current service-divergence transition.
- Family detail and specimen detail pages remain exactly `1265/1265` CSS pixels
  wide before and while every tooltip is keyboard-focused. All focused tooltips
  display.
- Representative mobile pages remain `375/375` CSS pixels wide.
- Current campaign event polling returned HTTP `200` after sequence `318`.
- No non-favicon browser-console error occurred during authenticated checks.
- The temporary verification account was deleted.

No firmware build, state-changing controller command, command replay, power
operation, card movement, or media operation was performed.
