# Ticket: Separate physical-card tracks and add final paired qualification gate

Status: complete
Type: ticket
Updated: 2026-08-11
Next Action: none; retain the deployed paired-gate and successor traveler evidence
Parent: work/wp/active/wp-build-standalone-pi-sd-qualification-operator-application.md

## Problem

Physical-card status pages correctly filter runs through exact
`CampaignSample` assignments, but they render the shared campaign name as the
primary phase label. Historical names containing `A/B qualification` or
`Controller A qualification` therefore make one physical-card page appear to
combine two cards. The process also lacks an explicit final gate showing that
the A and B card tracks remain separate until both are ready for paired review.

## Expected Behavior

Each phase is presented as work for one exact sample/controller track. The
original shared campaign remains immutable provenance and is visible only as
source context. After the card-specific chronology, a compact paired gate shows
the exact A/B members, their independent current states, missing roles, and
whether the pair is waiting, needs attention, is ready for review, or has been
approved.

## Acceptance Criteria

- [x] Card phase titles identify the exact sample and controller and do not
      present historical `A/B` scope as one physical card.
- [x] The original campaign name and campaign execution plan remain available
      as clearly labeled shared provenance.
- [x] A final paired-card gate is derived only from explicit shared campaign
      assignments; it never groups cards by name, family text, or inferred CID.
- [x] The gate shows separate A and B member tracks and links to each physical
      card status page.
- [x] Gate status fails closed for missing required roles or attention states
      and cannot claim approval before both exact tracks pass the same approved
      shared campaign.
- [x] Dashboard card shortcuts use the card-specific phase label.
- [x] Automated tests cover label projection, exact peer selection, missing
      roles, waiting/attention/approved gate states, and unrelated-card
      exclusion.
- [x] Production deployment remains web-only and does not interrupt Controller
      A or the qualified worker containers.
- [x] Desktop and mobile browser inspection confirms the paired gate remains
      compact, legible, and free of horizontal overflow.

## Verification

Run focused and full Linux-container tests, deploy the exact web image at a
fresh observation boundary, and use Playwright at desktop and mobile widths to
verify the two independent card tracks and final paired gate.

Implementation/deployment evidence:
`work/evidence/sd-qualifier-separated-card-tracks-paired-gate-20260806.md`.
Successor evidence
`work/evidence/fixed-physical-card-qa-traveler-20260806.md` records authenticated
MCP Playwright verification at desktop `1440x1000` and mobile `390x844`, the
independent A/B sheets and final paired gate, compact rendering, and zero
horizontal overflow. This directly closes the remaining visual-only criterion.
