Sprints and milestones
Plan sprints, move unfinished work and mark important dates.
Sprints
A sprint groups work around a named outcome, a goal and declared product, component or task coverage. Dates are optional and stay unset when omitted. A task has at most one owning sprint. Names are unique within a project; you can rename a sprint or change its dates. Sprints remain in history and cannot be deleted.
The project's Overview leads with its sprints on a timeline: pick a sprint's band and the page below shows its cockpit and its tasks, where you start or complete it and add work straight into it (an older Sprints-hub link lands there too, its sprint kept). The same click opens the sprint's card on the right panel — the one place a sprint is edited: name, goal, start and end date (each set or cleared on its own) and covered components, with its progress beside them. Plan › Backlog lists the open work outside any sprint. Move a task into the sprint with Move to sprint on its row, or select several tasks and use the bulk bar.
- Start a sprint on its own or alongside other active sprints. Starting one never silently completes another.
- Complete through a reviewed preview: select the unfinished tasks to carry and explicitly choose a destination sprint or backlog. Apply moves only that selection, preserving each task's status and membership history. Unselected and completed work stays in the original sprint.
- If the scope changes after preview, refresh and review it again. Repeating an apply with the same request ID is safe.
In the browser, New sprint leads the timeline's toolbar and opens an empty card with Create; Start sprint or Complete sprint stands beside the picked sprint's title and in its card's top bar. Completion asks you to select unfinished tasks and a destination, then review the preview before applying it. From a terminal:
vitrinka sprint create "Checkout delivery" --goal "Ship reliable checkout" --coverage component:checkout
vitrinka sprint start 13
vitrinka sprint complete 12 --into 13 --task 41,42 > carry-preview.json
vitrinka sprint complete 12 --apply carry-preview.json --request-id checkout-carry-1Review the preview file before the second command. Use --into 0 for backlog; omitting --task selects no tasks. There is no automatic next sprint based on dates.
Session scope and routing
Before brainstorming creates feature work, choose a sprint or explicitly choose No sprint. A session begins as unknown; none is an affirmative choice, not the absence of one. The binding is stored per project and session, with a version that prevents overwriting a newer choice.
vitrinka sprint binding get <session>
vitrinka sprint binding set <session> --sprint 13 --version 0
vitrinka sprint binding set <session> --none --version 1Use the version returned by the preceding read; 0 is only for a previously unknown binding. Children and necessary follow-ups inherit the approved work's scope. A verified bug routes to the one active sprint whose declared coverage matches. Several matches require a choice; unverified bugs, uncovered bugs and enhancements enter Intake.
Milestones
A milestone marks a date such as a release or demo. Tasks can reference one milestone. The timeline displays milestone markers, + Filter narrows any task display to one milestone, and a todo can wait for it to be reached (vitrinka me todo milestone reach) — see reminders and milestones. Milestones can be renamed and rescheduled; they cannot be deleted.
Where they show
Task filters support sprint and milestone, and saved views keep that selection. Agents use create, update and list with kind: "sprint" or kind: "milestone". The release flow separately collects merged work into the next release page.
The Overview shows the picked sprint's work and readiness; Product history retains its evidence.