fix(#1871): wire phase archival end-to-end (phases archive cmd + default + atomic) (#1924)

Follow-up to #1919 (archive-then-remove core). Closes the remaining #1871
acceptance criteria so phase history is preserved across the full milestone
lifecycle, not just at phases.clear:

- #2 src/milestone.cts + src/phases-command-router.cts: extract shared
  archivePhaseDirectories() helper; add cmdPhasesArchive (the previously
  half-wired phases.archive alias now routes instead of erroring Unknown).
- #4 gsd-tools.cjs + src/milestone.cts: milestone complete archives phase
  dirs by default (--no-archive-phases opts out; --archive-phases is now a
  harmless no-op). complete-milestone.md updated to drop the redundant manual
  Yes/Skip archive prompt.
- #3 gsd-core/workflows/new-milestone.md: §6 stages the archive move + source
  removal (git add .planning/milestones/ .planning/phases/) in the same commit
  as the milestone start, so the archive lands atomically — no orphaned
  uncommitted deletions, no un-archived dirs inherited.
- docs/CLI-TOOLS.md (+ ja/zh/ko/pt) + help/modes/full.md: flag accuracy.
- tests: phases archive command (#2) + milestone complete default archive /
  --no-archive-phases opt-out (#4). Goldens + workflow size baseline refreshed.

Closes #1871
This commit is contained in:
Tom Boucher
2026-07-02 11:14:01 -04:00
committed by GitHub
parent 5195a36cc5
commit 92091d71f2
30 changed files with 177 additions and 116 deletions

View File

@@ -444,7 +444,7 @@ if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
```bash
# Archive milestone
node gsd-tools.cjs milestone complete <version> [--name <name>] [--archive-phases]
node gsd-tools.cjs milestone complete <version> [--name <name>] [--no-archive-phases]
# Mark requirements as complete
node gsd-tools.cjs requirements mark-complete <ids>

View File

@@ -322,7 +322,7 @@ if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
```bash
# マイルストーンをアーカイブ
node gsd-tools.cjs milestone complete <version> [--name <name>] [--archive-phases]
node gsd-tools.cjs milestone complete <version> [--name <name>] [--no-archive-phases]
# 要件を完了としてマーク
node gsd-tools.cjs requirements mark-complete <ids>

View File

@@ -322,7 +322,7 @@ if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
```bash
# 마일스톤 아카이브
node gsd-tools.cjs milestone complete <version> [--name <name>] [--archive-phases]
node gsd-tools.cjs milestone complete <version> [--name <name>] [--no-archive-phases]
# 요구사항을 완료로 표시
node gsd-tools.cjs requirements mark-complete <ids>

View File

@@ -324,7 +324,7 @@ if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
```bash
# Arquiva milestone
node gsd-tools.cjs milestone complete <version> [--name <name>] [--archive-phases]
node gsd-tools.cjs milestone complete <version> [--name <name>] [--no-archive-phases]
# Marca requisitos como concluídos
node gsd-tools.cjs requirements mark-complete <ids>

View File

@@ -322,7 +322,7 @@ if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
```bash
# 归档里程碑
node gsd-tools.cjs milestone complete <version> [--name <name>] [--archive-phases]
node gsd-tools.cjs milestone complete <version> [--name <name>] [--no-archive-phases]
# 将需求标记为完成
node gsd-tools.cjs requirements mark-complete <ids>