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

Aberta
#45 0 comentários 0 reações 0 responsáveis Ver no GitHub

Mantenedores costumam responder em até 1 dia

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
5/5
Tempo estimado
Mais de uma semana
Facilidade para iniciantes
25/100
Tipo de issue
Funcionalidade
Clareza
Claramente especificada
Status de atividade
Ativa
Stack de tecnologia
playwright, react, rust, typescript
Domínio
ci-cd, frontend, testing

Direção de pesquisa

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.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

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

Linguagem predominante
Rust
Estrelas
0
Forks
0
Merge médio
1h 35min
PRs com merge (30d)
67

Preparar o ambiente

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de aRustyDev/thrust

Todas as issues de aRustyDev/thrust

Issues semelhantes

Mais issues de Rust

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.