2.6.5 E2E — Epic-2 acceptance journey (Playwright): create → detail → lifecycle → list/tree
Estimate: 35m · Depends on: 2.6.1
Add tests/e2e/epic2-acceptance.spec.ts — the card’s "Playwright over the create → detail → status-change flow" as ONE consolidated, user-visible epic-acceptance journey through the real shell, where the existing e2e specs are per-feature smoke tests. It proves the type-parent rule + the full status lifecycle + list/tree reflection compose for a real user.
The journey (one signed-in session, against the seeded shell):
- Open a project and create an issue via the create modal — pick a
kind, then confirm the parent picker offers only LEGAL parents for that kind (e.g. asubtaskrequires a story/task/bug parent and is never offered an epic; the type-parent rule surfaced in the UI), select a legal parent, submit. - Open its detail page and confirm it rendered (identifier, title, kind, status, assignee, parent breadcrumb).
- Walk it through a multi-step status lifecycle via the status picker (
todo → in_progress → in_review → done), confirming at each step that illegal targets are not offered / are blocked under the restricted default policy (e.g. no directtodo → done). - Verify reflection in both read surfaces: the issue List view shows the item with its updated status, and the Tree view shows it nested under its parent — closing the loop on Stories 2.4 (tree) + 2.5 (list).
Reuse the existing e2e patterns and selector conventions; this file owns the cross-feature journey, the per-feature specs keep their focused smoke coverage (do not duplicate them). Heed the known E2E selector gotchas: a Combobox option’s accessible name is label + secondary text (match the substring, not an exact name), and the /issues empty state has an h1 Issues + an h2 "No issues yet" (use exact/level on heading selectors). Branch is subtask/PROD-2.6.5-* (a subtask/* branch → CI runs Playwright; E2E is NOT skipped, unlike seed/* / design/*).
Acceptance criteria
- New file
tests/e2e/epic2-acceptance.spec.ts, grep-taggable asepic2-acceptance; passes underpnpm test:e2e. - The create step asserts the parent picker offers only legal parents for the chosen kind (an illegal parent is absent), exercising the type-parent rule through the UI.
- The status walk drives a multi-step lifecycle via the status picker and asserts an illegal direct transition is unavailable/blocked under restricted policy.
- After the walk, BOTH the List and the Tree views are asserted to reflect the item’s final status + parentage.
- Reuses existing fixtures/helpers + selector conventions; no duplication of the focused per-feature specs.
- Runs in the CI
e2ejob (subtask/* branch — Playwright not skipped).
Context refs
tests/e2e/{issue-create-edit-flow,issue-detail-flow,workflow-flow}.spec.ts— the per-feature specs this journey composes (patterns to reuse, not duplicate)tests/e2e/work-items-isolation.spec.ts,playwright.config.ts, the e2e auth/sign-in helper- The issue create modal + detail page + List/Tree view components (Stories 2.3 / 2.4 / 2.5)
- Memory: prodect-e2e-selector-gotchas (Combobox option name = label + secondary;
/issuesempty-state headings) motir-core/CLAUDE.md— manual merge mode; real-stack E2E