test(e2e): Playwright journey suite on the stock React app as the UI oracle
維護者通常 1 天內回覆
還沒有人認領這個 Issue。
評估
- 難度
- 5/5
- 預估耗時
- 一週以上
- 新手友好度
- 25/100
- Issue 類型
- 功能
- 描述清晰度
- 描述清楚
- 活躍度
- 活躍
- 技術堆疊
- playwright, react, rust, typescript
研究方向
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.
由索引模型根據 Issue 內容生成。
描述
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/testpinned 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-181and:245-249. The script checks it reached the intended target (the PlaneGET /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-oracleandscripts/e2e.sh worker-cfboth 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-cfwith 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:23scripts/contract.sh:160-181,:245-249(vacuity guards to mirror)
Blocked by: #44
Finding: FR-01
- 主要語言
- Rust
- 星號
- 0
- 分支
- 0
- 平均合併
- 1 小時 35 分鐘
- 30 天內合併 PR
- 67
環境準備
- 沒有 Dockerfile 或 Docker Compose 檔案
- 沒有 Pull Request 範本
- 閱讀貢獻指南
從這裡開始
- 先讀完整個 Issue,再讀專案的貢獻指南。
- 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
- Fork 儲存庫,在一個分支上完成修改。
- 送出 Pull Request,並在描述裡引用這個 Issue 編號。
aRustyDev/thrust 的其他 Issue
-
area:process prio:p1 type:security
難度 4/5 3-5 天 新手友好度 48/100
維護者通常 1 天內回覆
-
area:process bug prio:p1
難度 4/5 3-5 天 新手友好度 38/100
維護者通常 1 天內回覆
-
area:process prio:p1
難度 4/5 3-5 天 新手友好度 55/100
維護者通常 1 天內回覆
-
area:process prio:p1
難度 4/5 1-2 天 新手友好度 55/100
維護者通常 1 天內回覆
-
area:process prio:p1
難度 4/5 3-5 天 新手友好度 56/100
維護者通常 1 天內回覆
相似的 Issue
-
Unit tests use deprecated constant (part 2)可能已有人在做 @servo-highfive 今天認領。 未關閉E-less-complex
難度 1/5 1 小時以內 新手友好度 84/100
維護者通常 1 天內回覆
-
bug good first issue help wanted linux macos testing
難度 2/5 1-3 小時 新手友好度 85/100
維護者通常 1 天內回覆
-
area: app type: test
難度 2/5 1-3 小時 新手友好度 82/100
維護者通常 1 天內回覆
-
bug priority: medium
難度 2/5 1-3 小時 新手友好度 78/100
storytold/photocraft#12706 · 1 則留言 ·
維護者通常 1 天內回覆
-
bug priority-low to-agent
難度 2/5 1-3 小時 新手友好度 68/100
維護者通常 1 天內回覆