test(e2e): Playwright journey suite on the stock React app as the UI oracle

Ouverte
#45 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

Personne n'a encore pris cette issue.

Évaluation

Difficulté
5/5
Temps estimé
Plus d'une semaine
Accessibilité débutants
25/100
Type d'issue
Fonctionnalité
Clarté
Clairement spécifiée
Activité
Active
Stack technique
playwright, react, rust, typescript
Domaine
ci-cd, frontend, testing

Piste de recherche

Start with ADR-0123 and the existing contract runner in scripts/contract.sh, then read the oracle setup in research/0005-oracle-harness.md and the target journey in the issue. Define the M1 journey in e2e/ and run scripts/e2e.sh plane-oracle and scripts/e2e.sh worker-cf. Done means both runs pass, the target and journey-count guards work, the traceability matrix lists the journey, and its oracle HAR is committed.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

area:process prio:p0 review:fable-2026-10-19

Context

TRACEABILITY's parity matrix defines "functionally equivalent UI" as the adopted React app passing a Playwright smoke set over the P0 journeys. The set is still _TBD_ (.agents/plans/contrail/TRACEABILITY.md:122-126, :144). ADR-0123 names Playwright for e2e (adrs/test/standards/0123-test-standards-and-tooling.md:30), but no e2e package or profile exists (docs/src/testing/techniques/app-and-e2e.md:26-27, :52-53), and the defect matrix lists UI regression as uncovered (docs/src/testing/defect-matrix.md:27). Spike 0009's dynamic half has not run: recording the React app against the pinned oracle as HAR, and the replay harness (spikes/0009-compat-plane-inventory.md:19-20, :38). The pinned oracle stack lives in the Plane fork (oracle/scripts/run-all.sh, snapshot restore with scripts/db-state.sh; research/0005 lines 52-55).

Problem

  • FR-01: ADR-0013's Phase 2 gate depends on "oracle diff clean", but the oracle covers only /api/v1 (D-013; REVIEW-NOTES.md:80, :155). There is no UI oracle, so the gate cannot fire as written. The review moves the gate to "the daily-use release has held the SLO for 4 weeks and its Playwright journey suite is green". Journeys recorded on the screens in scope also fill the parity matrix (handoff A5.3).
  • M1 exits when the owner completes "sign in, create a workspace, project and work item, see it" on the production hostname through the stock React app (review §3). Nothing checks that journey today.

Proposal

  • Add a Playwright suite in e2e/: TypeScript, @playwright/test pinned in a lockfile, one spec per journey. scripts/e2e.sh <plane-oracle|worker-cf|url> runs it. The suite is opt-in like the contract scripts and never part of the default nextest loop (AGENTS.md rule 6).
  • Every journey runs twice: against the pinned Plane oracle stack (the UI oracle) and against Thrust. Green on Plane and red on Thrust is a parity defect. Red on Plane means the journey itself is wrong.
  • The first journey is M1's: sign up, onboard, create a workspace, a project and a work item, and see the item in the list. #46 adds one journey per M2 screen, and later screens add theirs.
  • Each oracle run saves a HAR per journey. Commit them as the input to spike 0009's replay harness.
  • Copy the vacuity guards from scripts/contract.sh:160-181 and :245-249. The script checks it reached the intended target (the Plane GET /api/instances/ shape, or Thrust's /_info), and that the passed count equals the journey count.
  • Thrust runs on the Cloudflare set only (Q-0123.2, handoff A5.8 default); the native cell stays covered by the contract suite.
  • In TRACEABILITY's parity matrix, list each journey with the screen it covers. Register the suite in the ADR-0006 non-Rust register as test tooling that no product crate imports.
  • CI: start as a scheduled job. Add it to gate's planned set after two weeks green.

Acceptance criteria

  • scripts/e2e.sh plane-oracle and scripts/e2e.sh worker-cf both pass the M1 journey. The script exits non-zero when the passed count differs from the journey count.
  • Control: against a Thrust build whose work-item list (S47) returns an empty list, the M1 journey fails at "see it in the list".
  • Control: scripts/e2e.sh worker-cf with its base URL pointed at the oracle stack fails the target guard.
  • TRACEABILITY's parity matrix has no _TBD_, and it names each journey and its screen.
  • A HAR per journey from the oracle run is committed, and spike 0009 records its path.
  • A scheduled CI workflow runs the suite against worker-cf.

References

  • Review: .agents/plans/contrail/reviews/2026-10-19-fable-architecture-review.md (FR-01; §3 M1, M2 and M4 rows)
  • .agents/plans/contrail/TRACEABILITY.md:122-126, :144; REVIEW-NOTES.md:79-80, :155
  • ADR-0020 (parity bar), ADR-0013 (round-29 note), ADR-0123, ADR-0122, ADR-0006 (register); DEVIATIONS D-013
  • Q-0123.2, Q-R3, Q-0013.1, Q-0010.1
  • research/0005-oracle-harness.md (oracle stack, snapshot restore); spikes/0009-compat-plane-inventory.md (dynamic half)
  • docs/src/testing/techniques/app-and-e2e.md:26-27, :52-53; docs/src/testing/defect-matrix.md:27; docs/src/testing/by-change.md:23
  • scripts/contract.sh:160-181, :245-249 (vacuity guards to mirror)

Blocked by: #44

Finding: FR-01

Langage dominant
Rust
Étoiles
0
Forks
0
Merge moyen
1 h 35 min
PR mergées (30 j)
67

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de aRustyDev/thrust

Toutes les issues de aRustyDev/thrust

Issues similaires

Plus d'issues Rust

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.