# V2 Phase D Implementation Evidence

**Revision:** `0.2.0` working tree  
**Date:** 28 August 2026  
**Policy/API/schema:** `sim-policy-2026-08-27.6` / `v1 + v2 Phase D` / `sim-schema-v2-phase-d`
**Scope:** passenger hardening, fair-access explainer, accessible recovery, responsive/low-data behavior, production-build browser tests and hackathon evidence

## Decision

`PASS` for local Phase D implementation and production-build browser evidence. Public deployment completion remains `BLOCKED`: no public URL or hosted Redis credentials were supplied, and an independent manual screen-reader review cannot be truthfully claimed from this environment.

## Implemented hardening

- One main landmark, keyboard skip link, visible focus, desktop navigation and functional mobile menu. The incomplete language indicator was removed.
- Minimum 12-pixel rendered supporting text, practical 44-pixel targets, 320 CSS-pixel reflow, forced-color affordances and no document-level horizontal overflow in tested passenger routes.
- Reduced-motion support disables nonessential motion. An explicit low-data preference persists locally and hides scenario activity without changing queue state.
- Material-only queue live announcements, focus transfer to an offered claim action, focused booking/PNR errors, and focus transfer to the booking-result heading.
- Offline queue copy retains the last server status, reports its age and reconnects to the same queue reference. Loading failures expose retry actions.
- Complete “what works/what is mocked” copy. V1 and operator evidence remain directly addressable but are absent from passenger navigation.
- A sourced `/tatkal-fair-access` explainer distinguishes dated public measurements, proposed production behavior, and synthetic modeling. It includes a responsive full-window timeline, accessible data equivalents, a deterministic privacy-safe audit fixture, and an adjustable request-volume comparison.
- [Hackathon summary and two-minute runbook](./HACKATHON_SUBMISSION.md).

## Automated evidence

`tests/e2e/phase-d.spec.ts` runs Chromium against `next start`, with in-memory production explicitly enabled only for the disposable local smoke. It verifies:

- all passenger navigation targets and disclosure anchors resolve;
- the homepage “More Info” link reaches the fair-access explainer, dated evidence and simulation limitations remain visible, the comparison model updates, and the page has no 320-pixel horizontal overflow;
- public synthetic PNR retrieval;
- General search-to-ticket completion without a queue;
- keyboard skip/search entry;
- reduced-motion behavior;
- required 360 × 800, 390 × 844, 768 × 1024, 1280 × 720 and 1440 × 900 viewports, plus 640/320 CSS-pixel 200%/400%-equivalent reflow;
- no visible leaf text below 12 CSS pixels in the tested results page;
- protected queue reference preservation across offline/reconnect;
- distinct anonymous subjects in two isolated browser contexts; and
- a delayed session request keeps a clear loading state and recovers.

The in-app production preview was also visually inspected at 1440 × 900 and 390 × 844. Both had exactly one main landmark and no document-level horizontal overflow.

## Verification commands

```text
corepack pnpm typecheck      PASS
corepack pnpm vitest run tests/fair-access-model.test.ts
                             PASS — 4 comparison, boundary, determinism and duplicate-entry tests
corepack pnpm test           FAIL — 48/53 pass; 5 pre-existing catalogue-baseline failures remain (8 imported stations versus the older 12-station fixture and superseded route/date assumptions)
corepack pnpm build          PASS — Next.js 16.3.2 production build; `/tatkal-fair-access` prerendered
corepack pnpm test:browser   PASS — 10 Chromium tests
```

## Unmet evidence and owner

| Item | Status | Owner / next action |
| --- | --- | --- |
| Public URL navigation and two-session smoke | Blocked | Deployment owner supplies the URL and hosted Redis environment. Re-run `pnpm test:browser` with the deployed base URL. |
| Hosted cold-restart queue recovery | Blocked | Deployment owner supplies Redis credentials and performs a restart between join and status. |
| Manual NVDA/VoiceOver timer and live-region review | Blocked | Accessibility reviewer follows the queue and price-change script and records browser/AT versions and findings. |
| 200%/400% visual-signoff on a second browser engine | Pending external review | Accessibility reviewer; Chromium 320-pixel reflow is automated locally. |

These blockers do not weaken any queue, permit, payment, inventory or honesty invariant, and Phase D is not represented as publicly complete until they are closed.
