E2E (Playwright) + acceptance video — the whole /p/* journey on motir.co, paced for a person to watch
Opened by Zhu Yue ·
The story's E2E — a Playwright walk of the whole /p/* journey on motir.co, in the lane the Playwright-lane card builds — and the acceptance video a person watches to accept this story.
The spec walks the story's verification_recipe:
- Arrive from
/explore— click a project card and land on/p/<identifier>, with the overview rendered for a logged-out visitor. - Move through Board, Items, Tree, Roadmap and Changelog; page one list past its first page and expand one tree level.
- Open a work item from a list, and a feature request from the roadmap.
- Submit a feature request — ⚠️ amended 2026-09-02 (MOTIR-4166): NOT anonymous. The intake has always required a session (
requireCompliantSession()), so drive the hand-offpublic-surface-hosts.mdAMENDMENT 4 row 6 specifies: the control onmotir.cois a link, the submission and its duplicate-suggestion step happen onapp.motir.co, and the visitor returns to the project page with the request visible. - Exercise the act affordances as the amendment specifies them for an anonymous visitor and for one signed in on the application host — including, where the mechanism is a hand-off, that the visitor returns to the page they left.
- Drive the empty, error and terminal states: a project with no overview, an unreachable public API, and at least one terminal/destructive action the surface offers.
It runs against the stubbed public API the lane provides, and that is correct, not a compromise. The contract itself is guarded in the producing repository (public-surface-hosts.md §3, and the motir-core gate); this spec's subject is the site. Say so in the spec's own header so the next reader does not mistake the stub for a second source of truth.
Wait on authoritative signals — a response, a URL, a rendered landmark — never a timeout (the E2E discipline in motir-core/CLAUDE.md).
The acceptance video is the story's receipt, and it must be WATCHABLE. The recorded happy path is paced for a person: the reviewer watches it in-app and approves the story on it. A run that races through the flow satisfies the letter and defeats the point — say on the card and in the spec that the recorded path is deliberately paced, and publish the clip to MOTIR-3877.
Not in scope: the app.motir.co/p/* → motir.co redirect. It ships in proxy.ts and is already asserted by MOTIR-3886's acceptance spec in motir-core; re-asserting it here would be a second owner of the same check, in a repository that does not ship it.
Acceptance criteria
- A Playwright spec walks steps 1–6 above end to end and passes in
motir-marketing'se2ejob, which gatesdeploy. - Every assertion waits on an authoritative signal; the spec contains no bare timeout.
- The feature-request submission is exercised for real, including the duplicate step, and the resulting request is asserted on the project surface — ⚠️ as the SIGN-IN-TO-ACT hand-off of AMENDMENT 4 row 6, not anonymously (amended 2026-09-02, MOTIR-4166). Both session states are driven: an anonymous visitor is sent to sign in and returns, and a visitor already signed in on the application host round-trips without one.
- The act affordances are exercised in both the anonymous and signed-in-elsewhere cases, and the return-to-the-page hand-off is asserted where the amendment specifies one.
- The empty state, the API-unreachable error state and one terminal action are each driven and asserted.
- The spec's header records that the public API is stubbed and names the producing repository as the contract's owner.
- The run records and publishes an acceptance video to MOTIR-3877, and the card states that the recorded happy path is paced for a human to watch.
- The spec does not assert the
app.motir.coredirect (owned by MOTIR-3886). - No file outside
motir-marketingis touched.
Context refs
motir-marketing/.github/workflows/ci.yml— thee2ejob and theneedsgate the lane card addsmotir-core/e2e/andmotir-core/CLAUDE.md§ E2E — the discipline and the authoritative-signal rulemotir-core/docs/decisions/acceptance-video.md— the receipt, the size limit, and the withdrawn duration ceiling- MOTIR-3886 — the sibling story's E2E, and the redirect assertion this spec does not repeat
motir-core/docs/decisions/public-surface-hosts.md§3 — why the contract guard lives in the producing repositorymotir-marketing/design/public-projects/— the states the spec drives
⚠️ ORDINAL CORRECTED AGAIN, 2026-09-02 — it is AMENDMENT 4. MOTIR-4139 (
b615991c4) merged its own AMENDMENT 3 intopublic-surface-hosts.md— the subprocessor seam — while this story was in flight, so the affordance table is AMENDMENT 4. Every reference to AMENDMENT 2 or AMENDMENT 3 on this card and its siblings means that section. Twice in one day: an ADR ordinal is a serialized resource and nothing in the corpus says so — the amendment's own banner now does.
Discussion
No comments yet.
Adding to this discussion signs you in on app.motir.co and brings you back to this request.