1.6 KiB
1.6 KiB
id, title, status, wave, depends_on, plan, spec
| id | title | status | wave | depends_on | plan | spec | ||
|---|---|---|---|---|---|---|---|---|
| 10-persistent-request-lifecycle | Persistent review-request lifecycle | done | 5 |
|
plan.md | ../../specs/ui/github-pr-review-actions.md |
Task 10: Persistent Review-request Lifecycle
Acceptance
- An in-flight or successful optimistic request survives keyed panel unmounts and remounts for the same immutable PR identity.
- A deterministic deferred-write A → B → A test proves only one POST and no re-enabled dismissed action.
- The atomic duplicate guard does not depend on a React render occurring between clicks.
- Optimistic pending clears when current requested-reviewer data confirms it or when a newer review by that reviewer supersedes the dismissed baseline, even if no refresh ever observed the intermediate requested state.
- Failed writes remain retryable and lifecycle metadata is reclaimed after a terminal server state.
- Obsolete duplicate mutation helpers/tests are removed.
Ownership
apps/web/components/github/use-pr-scoped-review-request.tsapps/web/components/github/pr-detail-panel.tsxand.test.tsapps/web/components/github/pr-reviews-section.tsxand.test.tsxonly if the callback needs review identity data.apps/web/e2e/tests/pr/mobile-pr-rerequest-review.spec.ts- Task 10 status only.
Do not alter mobile layout geometry, backend, public docs, spec, or plan.md.
Output contract
Use TDD. Report RED/GREEN evidence for both lifecycle races, exact checks,
state-lifetime/cleanup rationale, files changed, and set only this task file to
done.