Files
msd-core/docs/features/archive-quick-tasks-at-milestone-close.md
Jakub Zych a9a7a328e6 refactor: hard-fork GSD -> MSD (Make Software Done)
Mechanical rename produced by scripts/msd-rename.cjs: gsd/Gsd/GSD -> msd/Msd/MSD
across contents and paths, upstream package/repo coordinates -> @golem15/msd-core
and golem15com/msd-core. Deep links into upstream history, sibling upstream
packages, the GSD-2 import feature, CHANGELOG.md and .changeset/ are kept as-is.

Hand edits on top: MSD block-letter banner and logos, LICENSE copyright line,
package/plugin identity, regenerated lockfile, install-tree fixtures, derived
registries and benchmark baseline; migration checksum baseline re-locked
(MSD keeps its own install state, so no install had applied the old sums);
sort-order and regex-escaped expectations in tests adjusted.
2026-10-06 01:47:40 +02:00

3.5 KiB

id, title, group
id title group
160 Archive Quick Tasks at Milestone Close v1.7.0 Features

Command: /msd-complete-milestone (forward path), /msd-cleanup (retroactive path), msd-tools milestone complete --archive-quick / msd-tools milestone archive-quick <version> (#2142)

Behavior: .planning/quick/ otherwise accumulates one directory per /msd-quick task forever. /msd-complete-milestone now offers a Yes/Skip prompt — when accepted, it moves every directory under .planning/quick/ into .planning/milestones/<version>-quick/, (re)writes that archive directory's README.md (an index built by scanning the archive directory, one entry per task, linked to its SUMMARY.md when one exists), and clears the data rows of STATE.md's ### Quick Tasks Completed table while preserving its header and detected column variant. /msd-cleanup offers the same archival retroactively, for milestones that were already closed before their quick tasks were swept, via the narrower milestone archive-quick <version> command — identical move/index/reset behavior, but without touching ROADMAP.md, REQUIREMENTS.md, MILESTONES.md, or milestone-completion guards, so it can be re-run safely against an already-completed milestone.

Why opt-in. Phase-directory archival is default-ON (#1871) — omitting a phase directory from an archive would silently leave stale execution history in the way of the next milestone's roadmap. Quick tasks carry no such downstream conflict, so archival here defaults OFF: a user who never passes --archive-quick sees zero behavior change. This is a deliberate asymmetry with phase archival, not an oversight.

Why bucket-all, not per-milestone. .planning/quick/ is a flat directory with no on-disk record of which milestone a given task belongs to. Splitting tasks per milestone was considered and rejected — inferring provenance from dates (creation time vs. a milestone's shipped date) is a proxy, not a fact, and a wrong inference on a one-way mv is silently irreversible. Archival instead buckets everything currently in .planning/quick/ into the one milestone being completed (or, on the retroactive path, the one milestone chosen), and says so in the confirmation prompt.

Why the index is built from disk, not from STATE.md's table. The ### Quick Tasks Completed table is a running log a workflow step appends to — it demonstrably drifts from what's actually in .planning/quick/ (the motivating case: 53 rows against 49 directories, ~22 rows pointing at directories that no longer existed, 18 directories with no row at all). Building the archive's README.md index by scanning the archive directory itself, rather than trusting the table, means the index can never inherit that drift; a re-run's index also naturally includes entries a prior run already archived, since it's re-derived from what's physically present.

Known limits:

  • No per-milestone provenance — bucket-all is the only option (see above).
  • A ### Quick Tasks Completed table whose columns match neither registered variant (with/without a Status column) is left untouched with a warning rather than reset, since clearing it would risk destroying rows under a schema MSD doesn't recognize.
  • A STATE.md with no ### Quick Tasks Completed section at all is a normal, silent no-op for the reset step — the section is created lazily by /msd-quick, not present in the project template.

See Archiving quick tasks for the full walkthrough.