How do I open a new sprint?

Table of Contents

For the surrounding agile cycle (planning / execution / closure) and which cybernetic system owns the work, see Sprint planning and Sprint closure. For the build-side housekeeping that pairs with opening a new sprint, see How do I bump the project version? and How do I update submodules to latest?.

Question

How do I open a new sprint under the current version — scaffold the folder, set its mission, and link it from the version manifest?

Answer

  1. Identify the current version and sprint via the doc tools:

    ./projects/ores.compass/compass.sh list --type sprint --sort path | tail -5
    

    The lexicographically-highest sprint folder is the current one. The new sprint is current + 1 (e.g. sprint_17 follows sprint_16).

  2. Confirm the new sprint number with the user before scaffolding. Numbering is monotonic and cheap to reverse, but rolling backwards is awkward.
  3. Scaffold the sprint. Use compass add — it defaults --parent-dir to the current version automatically and mints a fresh :ID:, applies the right frontmatter, builds the skeleton sections, and the ancestor tag chain:

    projects/ores.compass/compass.sh add sprint \
      --slug sprint_17 \
      --title "Sprint 17" \
      --description "Sprint 17 — one-sentence mission." \
      --tags "v0"
    
  4. Set the Previous field. In the scaffolded sprint.org * Status table, set Previous to the id-link of the sprint that is closing:

    | Previous | Sprint N |
    
  5. Write the sprint mission. Open the generated doc/agile/versions/v0/sprint_17/sprint.org and fill in * Mission (one sentence — see sprint mission in the glossary).
  6. Wire into the version manifest. Open doc/agile/versions/v0/version.org and add the new sprint to its * Sprints list as an id-link:

    - Sprint 17 — TBD.
    
  7. Update the agile index. Open doc/agile/agile.org and update the * At a glance table — Current Sprint to an id-link for the new sprint, Next sprint to plain text (the next sprint doesn't exist yet). Update #+updated: to today:

    | Current Sprint | Sprint N |
    | Next sprint    | Sprint N+1                         |
    
  8. Scaffold the sprint story and task for the sprint-open work itself. This is required by compass pr create, which looks for a task doc whose #+branch: matches the current branch:

    ./projects/ores.compass/compass.sh add story \
      --parent-dir doc/agile/versions/v0/sprint_N/open_sprint_N \
      --slug open_sprint_N \
      --title "Open sprint N" \
      --description "Scaffold sprint N, wire version manifest, move postponed stories."
    ./projects/ores.compass/compass.sh add task \
      --parent-dir doc/agile/versions/v0/sprint_N/open_sprint_N \
      --slug task_open_sprint_N \
      --title "Task: Open sprint N"
    

    Then set #+branch: in the task file to the feature branch, link the task from the story's * Tasks table, and link the story from the sprint's ** Agile table.

  9. Move postponed stories from the previous sprint folder to the new sprint folder. For each story dir still present in sprint_(N-1)/:

    • git mv the directory from sprint_(N-1)/ to sprint_N/.
    • In every .org file inside it, update the #+filetags: tag from :sprint_(N-1): to :sprint_N:.
    • Update the Parent sprint field in the story's * Status table to an id-link pointing to the new sprint.
    • Update #+updated: to today.

    Verify with compass sprint story that all stories now appear under the new sprint.

  10. Promote captures into stories, if applicable. See Agile Product Owner for the promotion flow (capture → story, ID preserved).
  11. Bump the project version — see How do I bump the project version?. Land it as a separate commit on the same sprint-open PR.
  12. Update the vcpkg submodule to latest — see How do I update submodules to latest?. Land it as a separate commit on the same new-sprint PR so the build-side housekeeping ships with the sprint open.

Script

The entry point is projects/ores.compass/compass.sh add, mapping to src/compass.py (cmd_add), which calls ores.codegen's doc_generate as a library. The sprint template is doc_sprint.org.mustache.

Tested by

Manual. Scaffolding via the codegen guarantees the frontmatter; a visual check of the generated sprint.org confirms the wiring.

See also

Emacs 29.1 (Org mode 9.6.6)