4.4.6 UI — complete-sprint flow: complete modal (carry-over chooser) + sprint report view; self-mount in backlog active-sprint container
Estimate: 32m · Depends on: 4.4.1, 4.4.3, 4.4.4, 4.2.3
The complete-sprint UI — the complete modal + carry-over chooser + the sprint report — per design/sprints/sprint-lifecycle.mock.html. Ships as a self-contained mountable flow that Story 4.5.3 ALSO mounts in the scrum header (4.5.3 dependsOn 4.4 — the one-way arrow), and that 4.4.6 self-mounts in the backlog's active-sprint container so the flow is verifiable without Story 4.5.
The CompleteSprintDialog. A Modal opened from a Complete-sprint action on the active sprint: a summary ("N completed · M incomplete", from the 4.4.4 live report preview) and the carry-over chooser for the incomplete issues — Backlog (default) or a planned sprint (a Combobox/select of the project's planned sprints; absent/disabled when none). When there are no incomplete issues the chooser collapses to "All issues complete". Primary Complete sprint → POST /api/sprints/[id]/complete with the chosen carryOverTo (4.4.3).
The sprint report (success state + standalone). On completion, render the report from 4.4.4 GET /api/sprints/[id]/report: the completed vs not-completed issue lists (bounded page + a "view all in Issues" deep-link), the points summary (committed / completed / not-completed as labelled numbers; "—" when unestimated), and the scope-change line ("N added during the sprint"). Leave the documented chart seam for Story 4.6's burndown (an empty slot, no chart here). The report is also reachable standalone for a closed sprint (a route/panel) — Jira keeps closed-sprint reports.
Self-mount + the 4.5 seam. 4.4.6 mounts the Complete-sprint action in the backlog active-sprint container (its ⋯/header — Jira lets you complete from the backlog too), giving the flow an owned mount point. Story 4.5.3 separately mounts the SAME exported flow (CompleteSprintDialog + the report) in the scrum header — that is 4.5 depending on 4.4 (backward), NOT 4.4 depending on 4.5. 4.4.6 exposes the flow as a self-contained component (active sprint + id) for that reuse; it does NOT touch the scrum board.
Tokens + a11y. --el-* colour + element-shape tokens (no Tier-0 / raw rounded-*); labelled focus-trapped dialog; the carry-over chooser is keyboard-operable; the report's counts + points are text+number (not colour alone — finding #35); the issue lists reuse the work-items row vocabulary.
Acceptance criteria
- A Complete-sprint action on the active sprint (mounted in the backlog active-sprint container) opens the
CompleteSprintDialogshowing the completed/incomplete summary + the carry-over chooser (Backlog · a planned sprint · "All issues complete" when none incomplete); confirm callsPOST /api/sprints/[id]/completewith the chosencarryOverTo. - On completion the sprint report renders: completed vs not-completed lists (bounded page + "view all in Issues" link), committed/completed/not-completed points ("—" when unestimated), and the "N added during sprint" scope-change line, with a documented (empty) chart seam for Story 4.6; the report is also reachable standalone for a closed sprint.
- The flow ships as a self-contained exported component 4.5.3 can mount in the scrum header (4.5 → 4.4, one-way); 4.4.6 does NOT depend on or touch the scrum board; it self-mounts in the backlog so it is verifiable alone.
- Colours via
--el-*, shape via element tokens, AA-safe; labelled focus-trapped dialog; counts/points are text+number not colour-alone (finding #35); matchesdesign/sprints/sprint-lifecycle.mock.html. - Component tests assert the complete dialog (summary + carry-over chooser + no-incomplete collapse), the complete call with each
carryOverTo, and the report render (lists + points incl. "—" + scope-change + chart seam).
Context refs
- Story 4.4.3 (
POST /api/sprints/[id]/complete+ carry-over) + 4.4.4 (GET /api/sprints/[id]/report) — the backends this binds; Story 4.4.1 (design/sprints/sprint-lifecycle.mock.html+ design-notes) — the modal + report spec app/(authed)/backlog/_components/*(Story 4.2.3 — the active-sprint container) — where the Complete action self-mounts; Story 4.5.3 — the scrum-header consumer that re-mounts this exported flow- Story 2.5
/issuesnavigator — the report's "view all" deep-link; the work-items row vocabulary the report lists reuse components/ui/*(Modal,Combobox,Button,EmptyState,Pill) — the primitives; finding #35 / #54;motir-core/CLAUDE.md(--el-*+ element-shape, client UI)