diff --git a/.changeset/plucky-bears-snooze.md b/.changeset/plucky-bears-snooze.md new file mode 100644 index 000000000..82078b1bf --- /dev/null +++ b/.changeset/plucky-bears-snooze.md @@ -0,0 +1,5 @@ +--- +type: Fixed +pr: 1924 +--- +**Phase archival is now wired end-to-end across the milestone lifecycle** — finishes the #1871 follow-up: `phases archive` is now a real command (the half-wired alias is routed, no longer errors Unknown), `milestone complete` archives phase dirs by default (`--no-archive-phases` opts out), and `new-milestone` §6 stages the archive move + source removal in the same commit so history is preserved atomically rather than left as orphaned uncommitted deletions. (#1871) diff --git a/docs/CLI-TOOLS.md b/docs/CLI-TOOLS.md index c698a986f..c4fb5aa3d 100644 --- a/docs/CLI-TOOLS.md +++ b/docs/CLI-TOOLS.md @@ -444,7 +444,7 @@ if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi ```bash # Archive milestone -node gsd-tools.cjs milestone complete [--name ] [--archive-phases] +node gsd-tools.cjs milestone complete [--name ] [--no-archive-phases] # Mark requirements as complete node gsd-tools.cjs requirements mark-complete diff --git a/docs/ja-JP/CLI-TOOLS.md b/docs/ja-JP/CLI-TOOLS.md index c44183c3e..00012e7c8 100644 --- a/docs/ja-JP/CLI-TOOLS.md +++ b/docs/ja-JP/CLI-TOOLS.md @@ -322,7 +322,7 @@ if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi ```bash # マイルストーンをアーカイブ -node gsd-tools.cjs milestone complete [--name ] [--archive-phases] +node gsd-tools.cjs milestone complete [--name ] [--no-archive-phases] # 要件を完了としてマーク node gsd-tools.cjs requirements mark-complete diff --git a/docs/ko-KR/CLI-TOOLS.md b/docs/ko-KR/CLI-TOOLS.md index 5de2f3643..80496bf35 100644 --- a/docs/ko-KR/CLI-TOOLS.md +++ b/docs/ko-KR/CLI-TOOLS.md @@ -322,7 +322,7 @@ if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi ```bash # 마일스톤 아카이브 -node gsd-tools.cjs milestone complete [--name ] [--archive-phases] +node gsd-tools.cjs milestone complete [--name ] [--no-archive-phases] # 요구사항을 완료로 표시 node gsd-tools.cjs requirements mark-complete diff --git a/docs/pt-BR/CLI-TOOLS.md b/docs/pt-BR/CLI-TOOLS.md index 01dd4d571..24441e6bd 100644 --- a/docs/pt-BR/CLI-TOOLS.md +++ b/docs/pt-BR/CLI-TOOLS.md @@ -324,7 +324,7 @@ if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi ```bash # Arquiva milestone -node gsd-tools.cjs milestone complete [--name ] [--archive-phases] +node gsd-tools.cjs milestone complete [--name ] [--no-archive-phases] # Marca requisitos como concluídos node gsd-tools.cjs requirements mark-complete diff --git a/docs/zh-CN/CLI-TOOLS.md b/docs/zh-CN/CLI-TOOLS.md index dc6dc6e01..ff86c98e9 100644 --- a/docs/zh-CN/CLI-TOOLS.md +++ b/docs/zh-CN/CLI-TOOLS.md @@ -322,7 +322,7 @@ if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi ```bash # 归档里程碑 -node gsd-tools.cjs milestone complete [--name ] [--archive-phases] +node gsd-tools.cjs milestone complete [--name ] [--no-archive-phases] # 将需求标记为完成 node gsd-tools.cjs requirements mark-complete diff --git a/gsd-core/bin/gsd-tools.cjs b/gsd-core/bin/gsd-tools.cjs index b55356820..19fe574b1 100755 --- a/gsd-core/bin/gsd-tools.cjs +++ b/gsd-core/bin/gsd-tools.cjs @@ -57,7 +57,7 @@ * Milestone Operations: * milestone complete Archive milestone, create MILESTONES.md * [--name ] - * [--archive-phases] Move phase dirs to milestones/vX.Y-phases/ + * [--no-archive-phases] Skip moving phase dirs to milestones/vX.Y-phases/ (archived by default) * * User Story Validation: * user-story validate --story "..." Validate "As a / I want to / so that" format @@ -1453,7 +1453,9 @@ async function runCommand(command, args, cwd, raw, defaultValue, originalCommand const subcommand = args[1]; if (subcommand === 'complete') { const milestoneName = parseMultiwordArg(args, 'name'); - const archivePhases = args.includes('--archive-phases'); + // #1871: archive phase dirs by default on milestone complete so the next + // new-milestone never inherits un-archived dirs. --no-archive-phases opts out. + const archivePhases = !args.includes('--no-archive-phases'); const force = args.includes('--force'); milestone.cmdMilestoneComplete(cwd, args[2], { name: milestoneName, archivePhases, force }, raw); } else { diff --git a/gsd-core/workflows/complete-milestone.md b/gsd-core/workflows/complete-milestone.md index 4b61b6022..6cfa1bd01 100644 --- a/gsd-core/workflows/complete-milestone.md +++ b/gsd-core/workflows/complete-milestone.md @@ -453,21 +453,17 @@ Extract from result: `version`, `date`, `phases`, `plans`, `tasks`, `accomplishm Verify: `✅ Milestone archived to .planning/milestones/` -**Phase archival (optional):** After archival completes, ask the user: +**Phase archival (default-on):** `milestone complete` archives phase directories to `milestones/v[X.Y]-phases/` by default (#1871), so the next `/gsd:new-milestone` never inherits un-archived dirs. No manual `mkdir`/`mv` or `--archive-phases` flag is needed. +If the user explicitly wants to keep phase directories in place as raw execution history, invoke `milestone complete` with `--no-archive-phases`: + +```bash +gsd_run query milestone complete v[X.Y] --no-archive-phases +``` + +Verify after a default (archived) completion: `✅ Phase directories archived to .planning/milestones/v[X.Y]-phases/` **Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Gemini CLI, etc.) where `AskUserQuestion` is not available. -AskUserQuestion(header="Archive Phases", question="Archive phase directories to milestones/?", options: "Yes — move to milestones/v[X.Y]-phases/" | "Skip — keep phases in place") - -If "Yes": move phase directories to the milestone archive: -```bash -mkdir -p .planning/milestones/v[X.Y]-phases -# For each phase directory in .planning/phases/: -mv .planning/phases/{phase-dir} .planning/milestones/v[X.Y]-phases/ -``` -Verify: `✅ Phase directories archived to .planning/milestones/v[X.Y]-phases/` - -If "Skip": Phase directories remain in `.planning/phases/` as raw execution history. Use `/gsd:cleanup` later to archive retroactively. After archival, the AI still handles: - Reorganizing ROADMAP.md with milestone grouping (requires judgment) — overwrite in place after extracting Backlog section diff --git a/gsd-core/workflows/help/modes/full.md b/gsd-core/workflows/help/modes/full.md index b64e7bdba..cce3e9250 100644 --- a/gsd-core/workflows/help/modes/full.md +++ b/gsd-core/workflows/help/modes/full.md @@ -673,7 +673,7 @@ These six skills exist primarily for the model to perform two-stage hierarchical ├── milestones/ │ ├── v1.0-ROADMAP.md # Archived roadmap snapshot │ ├── v1.0-REQUIREMENTS.md # Archived requirements -│ └── v1.0-phases/ # Archived phase dirs (via /gsd:cleanup or --archive-phases) +│ └── v1.0-phases/ # Archived phase dirs (via /gsd:cleanup or milestone complete, which archives by default) │ ├── 01-foundation/ │ └── 02-core-features/ ├── codebase/ # Codebase map (brownfield projects) diff --git a/gsd-core/workflows/new-milestone.md b/gsd-core/workflows/new-milestone.md index 1f7f7b3b3..fdbe9b002 100644 --- a/gsd-core/workflows/new-milestone.md +++ b/gsd-core/workflows/new-milestone.md @@ -212,6 +212,12 @@ Clear leftover phase directories from the previous milestone: gsd_run query phases.clear --confirm ``` +Stage the phase archive move + source removal so they land in the same commit as the milestone start (atomic — no orphaned uncommitted deletions, no un-archived dirs carried forward). `phases.clear` archives each non-999 dir to `milestones/-phases/`; staging both dirs captures the new archive and the removals together (#1871). + +```bash +git add .planning/milestones/ .planning/phases/ 2>/dev/null || true +``` + ```bash gsd_run query commit "docs: start milestone v[X.Y] [Name]" --files .planning/PROJECT.md .planning/STATE.md ``` diff --git a/src/milestone.cts b/src/milestone.cts index 2c91429e9..c167e2672 100644 --- a/src/milestone.cts +++ b/src/milestone.cts @@ -341,7 +341,8 @@ function cmdMilestoneComplete(cwd: string, version: string, options: MilestoneCo // Archive phase directories if requested let phasesArchived = false; - if (options.archivePhases) { + // #1871: archive phase dirs by default on milestone complete (opt out via --no-archive-phases). + if (options.archivePhases !== false) { try { const phaseArchiveDir = path.join(archiveDir, `${version}-phases`); platformEnsureDir(phaseArchiveDir); @@ -440,32 +441,8 @@ function cmdPhasesClear(cwd: string, raw: boolean, args: string[]): void { } try { - // #1871: archive phase directories instead of destroying them. Move each - // non-999 dir to milestones/-phases/ so browsable phase history - // survives the milestone switch (previously rmSync hard-deleted committed - // dirs, leaving orphaned uncommitted deletions and no archive). - let archiveVersion: string | null = null; - try { - archiveVersion = getMilestoneInfo(cwd).version ?? null; - } catch { - /* ROADMAP/STATE unreadable — fall back to a dated label */ - } - if (!archiveVersion) { - archiveVersion = `archived-${new Date().toISOString().replace(/[-:T]/g, '').slice(0, 8)}`; - } - const archivePhasesDir = path.join(planningPaths(cwd).planning, 'milestones', `${archiveVersion}-phases`); - platformEnsureDir(archivePhasesDir); - for (const entry of dirs) { - const src = path.join(phasesDir, entry.name); - // Collision-safe: if a same-named archive entry exists (re-run), suffix it. - let dest = path.join(archivePhasesDir, entry.name); - let n = 1; - while (fs.existsSync(dest)) { - dest = path.join(archivePhasesDir, `${entry.name}.${n++}`); - } - retryRenameSync(src, dest); - cleared++; - } + // #1871: archive phase directories instead of destroying them (shared helper). + cleared = archivePhaseDirectories(cwd, phasesDir, dirs).archived; } catch (e) { const message = e instanceof Error ? e.message : String(e); error('Failed to clear phases directory: ' + message); @@ -475,6 +452,40 @@ function cmdPhasesClear(cwd: string, raw: boolean, args: string[]): void { output({ cleared }, raw, `${cleared} phase director${cleared === 1 ? 'y' : 'ies'} cleared`); } +/** + * #1871: move each non-999 phase directory under `phasesDir` into + * `milestones/-phases/` (collision-safe; version from getMilestoneInfo, + * timestamp fallback). Shared by `phases clear` (archive-then-remove) and the + * internal milestone.complete phase archival so phase history survives a + * milestone switch instead of being hard-deleted. + */ +function archivePhaseDirectories(cwd: string, phasesDir: string, dirs: ReadonlyArray<{ name: string }>): { archiveDir: string; archived: number } { + let archiveVersion: string | null = null; + try { + archiveVersion = getMilestoneInfo(cwd).version ?? null; + } catch { + /* ROADMAP/STATE unreadable — fall back to a dated label */ + } + if (!archiveVersion) { + archiveVersion = `archived-${new Date().toISOString().replace(/[-:T]/g, '').slice(0, 8)}`; + } + const archivePhasesDir = path.join(planningPaths(cwd).planning, 'milestones', `${archiveVersion}-phases`); + platformEnsureDir(archivePhasesDir); + let archived = 0; + for (const entry of dirs) { + const src = path.join(phasesDir, entry.name); + // Collision-safe: if a same-named archive entry exists (re-run), suffix it. + let dest = path.join(archivePhasesDir, entry.name); + let n = 1; + while (fs.existsSync(dest)) { + dest = path.join(archivePhasesDir, `${entry.name}.${n++}`); + } + retryRenameSync(src, dest); + archived++; + } + return { archiveDir: archivePhasesDir, archived }; +} + export = { cmdRequirementsMarkComplete, cmdMilestoneComplete, diff --git a/src/phases-command-router.cts b/src/phases-command-router.cts index e5622c8ec..88549427f 100644 --- a/src/phases-command-router.cts +++ b/src/phases-command-router.cts @@ -3,8 +3,8 @@ * Keeps gsd-tools.cjs thin while preserving current CJS semantics. * * Unsupported in this router (treated as unknown): - * - archive: `phases archive` is excluded from the subcommands list so it - * falls through to the unknown-subcommand error path. + * - archive: `phases archive` is excluded (#2684) — it is an internal + * subcommand that milestone.complete forwards to, not a public surface. * * ADR-457 build-at-publish: the hand-written bin/lib/phases-command-router.cjs * collapsed to a TypeScript source of truth. Behaviour is preserved byte-for-behaviour @@ -46,7 +46,8 @@ interface RoutePhasesCommandOptions { function routePhasesCommand({ phase, milestone, args, cwd, raw, error }: RoutePhasesCommandOptions): void { routeCjsCommandFamily({ args, - // Exclude 'archive' so it hits the unknownMessage path. + // #2684: `phases archive` is deliberately excluded — it is an internal + // subcommand that milestone.complete forwards to, not a public surface. subcommands: PHASES_SUBCOMMANDS.filter((s) => s !== 'archive'), error, unknownMessage: (_subcommand: string, available: string[]) => `Unknown phases subcommand. Available: ${available.join(', ')}`, diff --git a/tests/fixtures/golden-install-parity/antigravity.json b/tests/fixtures/golden-install-parity/antigravity.json index fb44f1a2e..8afbfa6d4 100644 --- a/tests/fixtures/golden-install-parity/antigravity.json +++ b/tests/fixtures/golden-install-parity/antigravity.json @@ -37,7 +37,7 @@ "agents/gsd-verifier.md": "d2bd23b62f95a64f", "gsd-core/VERSION": "ef0deccd81a6723c", "gsd-core/bin/check-latest-version.cjs": "e4a224058c8f4d74", - "gsd-core/bin/gsd-tools.cjs": "5cf26d5f9e588cf8", + "gsd-core/bin/gsd-tools.cjs": "775a6f3d86f8e5e3", "gsd-core/bin/gsd_run": "62d9b647ede212e6", "gsd-core/bin/shared/config-defaults.manifest.json": "517e6a7c1e9f4f16", "gsd-core/bin/shared/config-schema.manifest.json": "7d398e94c44e5268", @@ -205,7 +205,7 @@ "gsd-core/workflows/cleanup.md": "53aa20672fe253bd", "gsd-core/workflows/code-review-fix.md": "715d98a6ff5931e2", "gsd-core/workflows/code-review.md": "d3d22e8705ab8323", - "gsd-core/workflows/complete-milestone.md": "74ca982730c7d735", + "gsd-core/workflows/complete-milestone.md": "f3fd3c8fc7bd1616", "gsd-core/workflows/debug.md": "5ec71cc100973523", "gsd-core/workflows/diagnose-issues.md": "4d80e23ab8adf2d7", "gsd-core/workflows/discovery-phase.md": "3de990caffdde4f8", @@ -243,7 +243,7 @@ "gsd-core/workflows/help.md": "5d040504b9ab35e3", "gsd-core/workflows/help/modes/brief.md": "2e923b3ed635d495", "gsd-core/workflows/help/modes/default.md": "b544113eb9aa54fa", - "gsd-core/workflows/help/modes/full.md": "200a42681ef05a29", + "gsd-core/workflows/help/modes/full.md": "3c3b67b4eb28cd82", "gsd-core/workflows/help/modes/topic.md": "a404990fcf2d7df7", "gsd-core/workflows/import.md": "3cbe85643922fd3b", "gsd-core/workflows/inbox.md": "a448220c548f27bc", @@ -256,7 +256,7 @@ "gsd-core/workflows/map-codebase.md": "ea0ad99dd10c3d1c", "gsd-core/workflows/milestone-summary.md": "6af78ebf0ba7546b", "gsd-core/workflows/mvp-phase.md": "cd39027462579233", - "gsd-core/workflows/new-milestone.md": "5abba9fb6c9c3252", + "gsd-core/workflows/new-milestone.md": "f13199a8e199298f", "gsd-core/workflows/new-project.md": "b8dc0226e885ea9c", "gsd-core/workflows/new-workspace.md": "70dec4f25df02d64", "gsd-core/workflows/next.md": "c45606fc89965aed", diff --git a/tests/fixtures/golden-install-parity/augment.json b/tests/fixtures/golden-install-parity/augment.json index 04a11625a..844770983 100644 --- a/tests/fixtures/golden-install-parity/augment.json +++ b/tests/fixtures/golden-install-parity/augment.json @@ -106,7 +106,7 @@ "commands/gsd-workstreams.md": "52ab9c585d3a00f3", "gsd-core/VERSION": "ef0deccd81a6723c", "gsd-core/bin/check-latest-version.cjs": "e4a224058c8f4d74", - "gsd-core/bin/gsd-tools.cjs": "74594e8bf36e5580", + "gsd-core/bin/gsd-tools.cjs": "43e6c5810defe512", "gsd-core/bin/gsd_run": "62d9b647ede212e6", "gsd-core/bin/shared/config-defaults.manifest.json": "517e6a7c1e9f4f16", "gsd-core/bin/shared/config-schema.manifest.json": "7d398e94c44e5268", @@ -274,7 +274,7 @@ "gsd-core/workflows/cleanup.md": "5cf0772521c192a4", "gsd-core/workflows/code-review-fix.md": "b442c670f8c1fe93", "gsd-core/workflows/code-review.md": "1bfa3bf542e30c5e", - "gsd-core/workflows/complete-milestone.md": "8a4cfb41a4de5a99", + "gsd-core/workflows/complete-milestone.md": "337d177126f1bd67", "gsd-core/workflows/debug.md": "da62e7a62c113b29", "gsd-core/workflows/diagnose-issues.md": "a5f15332b3833a80", "gsd-core/workflows/discovery-phase.md": "3ba7cfb89fb1e761", @@ -312,7 +312,7 @@ "gsd-core/workflows/help.md": "5d040504b9ab35e3", "gsd-core/workflows/help/modes/brief.md": "5fe077fbbdb5d9f7", "gsd-core/workflows/help/modes/default.md": "cc8ef97de634c995", - "gsd-core/workflows/help/modes/full.md": "39703b79d77bf691", + "gsd-core/workflows/help/modes/full.md": "5d60d11d63089892", "gsd-core/workflows/help/modes/topic.md": "d7c60d488810fbd6", "gsd-core/workflows/import.md": "97861d522319d56e", "gsd-core/workflows/inbox.md": "437f981ef9ae7b26", @@ -325,7 +325,7 @@ "gsd-core/workflows/map-codebase.md": "582bddef590de9c6", "gsd-core/workflows/milestone-summary.md": "f956783f7d063963", "gsd-core/workflows/mvp-phase.md": "bfa668107be972ed", - "gsd-core/workflows/new-milestone.md": "6d07ca2fc7aec3a4", + "gsd-core/workflows/new-milestone.md": "23d2135a555e95df", "gsd-core/workflows/new-project.md": "e6855b300fcac71e", "gsd-core/workflows/new-workspace.md": "fdd63a9adf030cb1", "gsd-core/workflows/next.md": "48bd4b5d54f0d1f8", diff --git a/tests/fixtures/golden-install-parity/claude.json b/tests/fixtures/golden-install-parity/claude.json index 5d9c979a3..cd8657059 100644 --- a/tests/fixtures/golden-install-parity/claude.json +++ b/tests/fixtures/golden-install-parity/claude.json @@ -36,7 +36,7 @@ "agents/gsd-verifier.md": "d62ffb1f520520c0", "gsd-core/VERSION": "ef0deccd81a6723c", "gsd-core/bin/check-latest-version.cjs": "e4a224058c8f4d74", - "gsd-core/bin/gsd-tools.cjs": "74594e8bf36e5580", + "gsd-core/bin/gsd-tools.cjs": "43e6c5810defe512", "gsd-core/bin/gsd_run": "62d9b647ede212e6", "gsd-core/bin/shared/config-defaults.manifest.json": "517e6a7c1e9f4f16", "gsd-core/bin/shared/config-schema.manifest.json": "7d398e94c44e5268", @@ -204,7 +204,7 @@ "gsd-core/workflows/cleanup.md": "5cf0772521c192a4", "gsd-core/workflows/code-review-fix.md": "a416c764425cbb61", "gsd-core/workflows/code-review.md": "3999e5bc9ce9171e", - "gsd-core/workflows/complete-milestone.md": "6778d5f383d6f2f3", + "gsd-core/workflows/complete-milestone.md": "49a005d4a9521477", "gsd-core/workflows/debug.md": "d5856f61f3a1ff84", "gsd-core/workflows/diagnose-issues.md": "363684618298aecd", "gsd-core/workflows/discovery-phase.md": "6161c60d752d0058", @@ -242,7 +242,7 @@ "gsd-core/workflows/help.md": "5d040504b9ab35e3", "gsd-core/workflows/help/modes/brief.md": "2e923b3ed635d495", "gsd-core/workflows/help/modes/default.md": "b544113eb9aa54fa", - "gsd-core/workflows/help/modes/full.md": "b909d41bada51a6d", + "gsd-core/workflows/help/modes/full.md": "a731f1b3a744be08", "gsd-core/workflows/help/modes/topic.md": "bd2e4cc8e460f5bd", "gsd-core/workflows/import.md": "b40557b17ca31024", "gsd-core/workflows/inbox.md": "91aac6360e1a8672", @@ -255,7 +255,7 @@ "gsd-core/workflows/map-codebase.md": "27c356aa00fb022a", "gsd-core/workflows/milestone-summary.md": "5bf68a980d8b5590", "gsd-core/workflows/mvp-phase.md": "bfa668107be972ed", - "gsd-core/workflows/new-milestone.md": "74753bc968621017", + "gsd-core/workflows/new-milestone.md": "7c957068b523ff47", "gsd-core/workflows/new-project.md": "4184d47a8797dd4e", "gsd-core/workflows/new-workspace.md": "668cd5038c76c771", "gsd-core/workflows/next.md": "ef1b4c60ea3ddbc9", diff --git a/tests/fixtures/golden-install-parity/cline.json b/tests/fixtures/golden-install-parity/cline.json index 0110d7b73..ea2a579f4 100644 --- a/tests/fixtures/golden-install-parity/cline.json +++ b/tests/fixtures/golden-install-parity/cline.json @@ -40,7 +40,7 @@ "agents/gsd-verifier.md": "5645dfb20b787f01", "gsd-core/VERSION": "ef0deccd81a6723c", "gsd-core/bin/check-latest-version.cjs": "e4a224058c8f4d74", - "gsd-core/bin/gsd-tools.cjs": "74594e8bf36e5580", + "gsd-core/bin/gsd-tools.cjs": "43e6c5810defe512", "gsd-core/bin/gsd_run": "62d9b647ede212e6", "gsd-core/bin/shared/config-defaults.manifest.json": "517e6a7c1e9f4f16", "gsd-core/bin/shared/config-schema.manifest.json": "7d398e94c44e5268", @@ -208,7 +208,7 @@ "gsd-core/workflows/cleanup.md": "869f953fb25e57a7", "gsd-core/workflows/code-review-fix.md": "40d723ec1c6b45d1", "gsd-core/workflows/code-review.md": "4aee640e6e6951ce", - "gsd-core/workflows/complete-milestone.md": "c3a489ca30f8bccb", + "gsd-core/workflows/complete-milestone.md": "512494b0d8c17777", "gsd-core/workflows/debug.md": "1d138ad68a5f94dd", "gsd-core/workflows/diagnose-issues.md": "ed74414bee6a146f", "gsd-core/workflows/discovery-phase.md": "3ba7cfb89fb1e761", @@ -246,7 +246,7 @@ "gsd-core/workflows/help.md": "5d040504b9ab35e3", "gsd-core/workflows/help/modes/brief.md": "5fe077fbbdb5d9f7", "gsd-core/workflows/help/modes/default.md": "77c34f4a77dec02c", - "gsd-core/workflows/help/modes/full.md": "6924f9cf169175e0", + "gsd-core/workflows/help/modes/full.md": "a123dd946319a258", "gsd-core/workflows/help/modes/topic.md": "d7c60d488810fbd6", "gsd-core/workflows/import.md": "64c8031374b39376", "gsd-core/workflows/inbox.md": "437f981ef9ae7b26", @@ -259,7 +259,7 @@ "gsd-core/workflows/map-codebase.md": "893f13a40162ce23", "gsd-core/workflows/milestone-summary.md": "dd87dcdecb0b069d", "gsd-core/workflows/mvp-phase.md": "e6a902c3308345f2", - "gsd-core/workflows/new-milestone.md": "ff7a75c9d7e863eb", + "gsd-core/workflows/new-milestone.md": "2804d6f976923412", "gsd-core/workflows/new-project.md": "f5799451fb7c1983", "gsd-core/workflows/new-workspace.md": "277c868dc684ad05", "gsd-core/workflows/next.md": "e64c75922be6d8e2", diff --git a/tests/fixtures/golden-install-parity/codebuddy.json b/tests/fixtures/golden-install-parity/codebuddy.json index 93329c034..c393ca37c 100644 --- a/tests/fixtures/golden-install-parity/codebuddy.json +++ b/tests/fixtures/golden-install-parity/codebuddy.json @@ -106,7 +106,7 @@ "commands/gsd-workstreams.md": "884b6c8d648422c7", "gsd-core/VERSION": "ef0deccd81a6723c", "gsd-core/bin/check-latest-version.cjs": "e4a224058c8f4d74", - "gsd-core/bin/gsd-tools.cjs": "74594e8bf36e5580", + "gsd-core/bin/gsd-tools.cjs": "43e6c5810defe512", "gsd-core/bin/gsd_run": "62d9b647ede212e6", "gsd-core/bin/shared/config-defaults.manifest.json": "517e6a7c1e9f4f16", "gsd-core/bin/shared/config-schema.manifest.json": "7d398e94c44e5268", @@ -274,7 +274,7 @@ "gsd-core/workflows/cleanup.md": "5cf0772521c192a4", "gsd-core/workflows/code-review-fix.md": "b442c670f8c1fe93", "gsd-core/workflows/code-review.md": "1bfa3bf542e30c5e", - "gsd-core/workflows/complete-milestone.md": "8a4cfb41a4de5a99", + "gsd-core/workflows/complete-milestone.md": "337d177126f1bd67", "gsd-core/workflows/debug.md": "da62e7a62c113b29", "gsd-core/workflows/diagnose-issues.md": "690c523df07f2ea7", "gsd-core/workflows/discovery-phase.md": "3ba7cfb89fb1e761", @@ -312,7 +312,7 @@ "gsd-core/workflows/help.md": "5d040504b9ab35e3", "gsd-core/workflows/help/modes/brief.md": "5fe077fbbdb5d9f7", "gsd-core/workflows/help/modes/default.md": "cc8ef97de634c995", - "gsd-core/workflows/help/modes/full.md": "1e95876d570df64b", + "gsd-core/workflows/help/modes/full.md": "de202c9910773a1d", "gsd-core/workflows/help/modes/topic.md": "d7c60d488810fbd6", "gsd-core/workflows/import.md": "97861d522319d56e", "gsd-core/workflows/inbox.md": "437f981ef9ae7b26", @@ -325,7 +325,7 @@ "gsd-core/workflows/map-codebase.md": "582bddef590de9c6", "gsd-core/workflows/milestone-summary.md": "f956783f7d063963", "gsd-core/workflows/mvp-phase.md": "bfa668107be972ed", - "gsd-core/workflows/new-milestone.md": "6d07ca2fc7aec3a4", + "gsd-core/workflows/new-milestone.md": "23d2135a555e95df", "gsd-core/workflows/new-project.md": "2fa5ddc0fe749b28", "gsd-core/workflows/new-workspace.md": "fdd63a9adf030cb1", "gsd-core/workflows/next.md": "48bd4b5d54f0d1f8", diff --git a/tests/fixtures/golden-install-parity/codex.json b/tests/fixtures/golden-install-parity/codex.json index 346834c7a..3fd420579 100644 --- a/tests/fixtures/golden-install-parity/codex.json +++ b/tests/fixtures/golden-install-parity/codex.json @@ -72,7 +72,7 @@ "config.toml": "a34316b9ac61a620", "gsd-core/VERSION": "ef0deccd81a6723c", "gsd-core/bin/check-latest-version.cjs": "e4a224058c8f4d74", - "gsd-core/bin/gsd-tools.cjs": "74594e8bf36e5580", + "gsd-core/bin/gsd-tools.cjs": "43e6c5810defe512", "gsd-core/bin/gsd_run": "62d9b647ede212e6", "gsd-core/bin/shared/config-defaults.manifest.json": "517e6a7c1e9f4f16", "gsd-core/bin/shared/config-schema.manifest.json": "7d398e94c44e5268", @@ -240,7 +240,7 @@ "gsd-core/workflows/cleanup.md": "b990139192ab7c08", "gsd-core/workflows/code-review-fix.md": "3311f5fa61f8a90b", "gsd-core/workflows/code-review.md": "937aeabfff8963b3", - "gsd-core/workflows/complete-milestone.md": "d203f68731d9d325", + "gsd-core/workflows/complete-milestone.md": "c0eab93d97dd298e", "gsd-core/workflows/debug.md": "e8367cffd3dfa758", "gsd-core/workflows/diagnose-issues.md": "b6766f3830f5b130", "gsd-core/workflows/discovery-phase.md": "71a4b78ff876a854", @@ -278,7 +278,7 @@ "gsd-core/workflows/help.md": "08e1349950c5602a", "gsd-core/workflows/help/modes/brief.md": "becceb85b25dca89", "gsd-core/workflows/help/modes/default.md": "18c7dc50066f5cd6", - "gsd-core/workflows/help/modes/full.md": "9fec66a5a4eb8389", + "gsd-core/workflows/help/modes/full.md": "072c20fe275d54df", "gsd-core/workflows/help/modes/topic.md": "fc6697bdb47df8b3", "gsd-core/workflows/import.md": "8b8c3a25526c0d41", "gsd-core/workflows/inbox.md": "61b8b10e7a74b2e9", @@ -291,7 +291,7 @@ "gsd-core/workflows/map-codebase.md": "320d5bfc9df29013", "gsd-core/workflows/milestone-summary.md": "121ecb40504caf10", "gsd-core/workflows/mvp-phase.md": "9a9b8b58d59a893f", - "gsd-core/workflows/new-milestone.md": "923f10697d743555", + "gsd-core/workflows/new-milestone.md": "e7329ba10b6d8182", "gsd-core/workflows/new-project.md": "f69c90cee1d7952d", "gsd-core/workflows/new-workspace.md": "cc9660e79d5ba7b4", "gsd-core/workflows/next.md": "ede3f6183e513000", diff --git a/tests/fixtures/golden-install-parity/copilot.json b/tests/fixtures/golden-install-parity/copilot.json index a53c65c59..abf294854 100644 --- a/tests/fixtures/golden-install-parity/copilot.json +++ b/tests/fixtures/golden-install-parity/copilot.json @@ -38,7 +38,7 @@ "copilot-instructions.md": "1fb04111759f1645", "gsd-core/VERSION": "ef0deccd81a6723c", "gsd-core/bin/check-latest-version.cjs": "e4a224058c8f4d74", - "gsd-core/bin/gsd-tools.cjs": "5cf26d5f9e588cf8", + "gsd-core/bin/gsd-tools.cjs": "775a6f3d86f8e5e3", "gsd-core/bin/gsd_run": "62d9b647ede212e6", "gsd-core/bin/shared/config-defaults.manifest.json": "517e6a7c1e9f4f16", "gsd-core/bin/shared/config-schema.manifest.json": "7d398e94c44e5268", @@ -206,7 +206,7 @@ "gsd-core/workflows/cleanup.md": "a67cfbd98eca5b86", "gsd-core/workflows/code-review-fix.md": "84d5f91b2856a1f2", "gsd-core/workflows/code-review.md": "fd8cd5c87ab977c2", - "gsd-core/workflows/complete-milestone.md": "f1a93edd3480bcf7", + "gsd-core/workflows/complete-milestone.md": "172f380eaa4ffe85", "gsd-core/workflows/debug.md": "d9a9d4c858da1314", "gsd-core/workflows/diagnose-issues.md": "3810d5329109a87e", "gsd-core/workflows/discovery-phase.md": "8e99da61fb2b7074", @@ -244,7 +244,7 @@ "gsd-core/workflows/help.md": "5d040504b9ab35e3", "gsd-core/workflows/help/modes/brief.md": "2e923b3ed635d495", "gsd-core/workflows/help/modes/default.md": "b544113eb9aa54fa", - "gsd-core/workflows/help/modes/full.md": "bb4ee969b98be538", + "gsd-core/workflows/help/modes/full.md": "6985d700bbb1cbe5", "gsd-core/workflows/help/modes/topic.md": "a404990fcf2d7df7", "gsd-core/workflows/import.md": "0e4a8880126d196b", "gsd-core/workflows/inbox.md": "a448220c548f27bc", @@ -257,7 +257,7 @@ "gsd-core/workflows/map-codebase.md": "576d06b03edff8db", "gsd-core/workflows/milestone-summary.md": "20d93b795568d970", "gsd-core/workflows/mvp-phase.md": "803ddbd575f86311", - "gsd-core/workflows/new-milestone.md": "34888afc152da98e", + "gsd-core/workflows/new-milestone.md": "4e252aa59b46d88f", "gsd-core/workflows/new-project.md": "d0af61f0e5f99485", "gsd-core/workflows/new-workspace.md": "e61ad52a17e7570a", "gsd-core/workflows/next.md": "a4cb2a110e0bce2c", diff --git a/tests/fixtures/golden-install-parity/cursor.json b/tests/fixtures/golden-install-parity/cursor.json index b1a2a8264..3d9beb841 100644 --- a/tests/fixtures/golden-install-parity/cursor.json +++ b/tests/fixtures/golden-install-parity/cursor.json @@ -106,7 +106,7 @@ "commands/gsd-workstreams.md": "112660ceb663c750", "gsd-core/VERSION": "ef0deccd81a6723c", "gsd-core/bin/check-latest-version.cjs": "e4a224058c8f4d74", - "gsd-core/bin/gsd-tools.cjs": "5cf26d5f9e588cf8", + "gsd-core/bin/gsd-tools.cjs": "775a6f3d86f8e5e3", "gsd-core/bin/gsd_run": "62d9b647ede212e6", "gsd-core/bin/shared/config-defaults.manifest.json": "517e6a7c1e9f4f16", "gsd-core/bin/shared/config-schema.manifest.json": "7d398e94c44e5268", @@ -274,7 +274,7 @@ "gsd-core/workflows/cleanup.md": "2bd6ad5f107fe439", "gsd-core/workflows/code-review-fix.md": "c62547be55f13dcd", "gsd-core/workflows/code-review.md": "fcb3f24e4cecc737", - "gsd-core/workflows/complete-milestone.md": "023cc8aa729b8987", + "gsd-core/workflows/complete-milestone.md": "36221b9fc6bce09e", "gsd-core/workflows/debug.md": "2e3c29ded1ce0d28", "gsd-core/workflows/diagnose-issues.md": "fa7ae5bb16f424a4", "gsd-core/workflows/discovery-phase.md": "7dcf150998559c11", @@ -312,7 +312,7 @@ "gsd-core/workflows/help.md": "08e1349950c5602a", "gsd-core/workflows/help/modes/brief.md": "2e923b3ed635d495", "gsd-core/workflows/help/modes/default.md": "37c5149aae232e61", - "gsd-core/workflows/help/modes/full.md": "58d35e918fb1f868", + "gsd-core/workflows/help/modes/full.md": "b893a940160dbcb9", "gsd-core/workflows/help/modes/topic.md": "9f00f5f94c5497aa", "gsd-core/workflows/import.md": "791424ae67c9cf32", "gsd-core/workflows/inbox.md": "797c287852eb8957", @@ -325,7 +325,7 @@ "gsd-core/workflows/map-codebase.md": "d43dffe5098a8684", "gsd-core/workflows/milestone-summary.md": "40e3049e42ecde63", "gsd-core/workflows/mvp-phase.md": "542d898e0e9b928f", - "gsd-core/workflows/new-milestone.md": "9912521d111bdd22", + "gsd-core/workflows/new-milestone.md": "514a66fe7d07c0f3", "gsd-core/workflows/new-project.md": "559e93f61313311b", "gsd-core/workflows/new-workspace.md": "7045e17f5dbdc204", "gsd-core/workflows/next.md": "6c3900ed84f03670", diff --git a/tests/fixtures/golden-install-parity/gemini.json b/tests/fixtures/golden-install-parity/gemini.json index 9e9883856..3c39e1c1b 100644 --- a/tests/fixtures/golden-install-parity/gemini.json +++ b/tests/fixtures/golden-install-parity/gemini.json @@ -106,7 +106,7 @@ "commands/gsd/workstreams.toml": "95f0c349b808a84c", "gsd-core/VERSION": "ef0deccd81a6723c", "gsd-core/bin/check-latest-version.cjs": "e4a224058c8f4d74", - "gsd-core/bin/gsd-tools.cjs": "74594e8bf36e5580", + "gsd-core/bin/gsd-tools.cjs": "43e6c5810defe512", "gsd-core/bin/gsd_run": "62d9b647ede212e6", "gsd-core/bin/shared/config-defaults.manifest.json": "517e6a7c1e9f4f16", "gsd-core/bin/shared/config-schema.manifest.json": "7d398e94c44e5268", @@ -274,7 +274,7 @@ "gsd-core/workflows/cleanup.md": "e73b3969f5c10dcf", "gsd-core/workflows/code-review-fix.md": "b442c670f8c1fe93", "gsd-core/workflows/code-review.md": "1bfa3bf542e30c5e", - "gsd-core/workflows/complete-milestone.md": "262c6bf1691b1ec9", + "gsd-core/workflows/complete-milestone.md": "d768b744210ef4bc", "gsd-core/workflows/debug.md": "1c137aaa9ffac0dc", "gsd-core/workflows/diagnose-issues.md": "dfd26bce63e52b00", "gsd-core/workflows/discovery-phase.md": "100b931f0f40bf1c", @@ -312,7 +312,7 @@ "gsd-core/workflows/help.md": "5d040504b9ab35e3", "gsd-core/workflows/help/modes/brief.md": "5fe077fbbdb5d9f7", "gsd-core/workflows/help/modes/default.md": "cc8ef97de634c995", - "gsd-core/workflows/help/modes/full.md": "d15ffdcd90ff06b1", + "gsd-core/workflows/help/modes/full.md": "c7068334fba84dd8", "gsd-core/workflows/help/modes/topic.md": "d7c60d488810fbd6", "gsd-core/workflows/import.md": "c740cfabacf7b70a", "gsd-core/workflows/inbox.md": "41371f790ef06101", @@ -325,7 +325,7 @@ "gsd-core/workflows/map-codebase.md": "582bddef590de9c6", "gsd-core/workflows/milestone-summary.md": "f956783f7d063963", "gsd-core/workflows/mvp-phase.md": "6cb2d9d97bd239b3", - "gsd-core/workflows/new-milestone.md": "7fbdbad9b2c38215", + "gsd-core/workflows/new-milestone.md": "86959fbb6f5e8893", "gsd-core/workflows/new-project.md": "72b2c17e9f9cb79d", "gsd-core/workflows/new-workspace.md": "226482083477bc43", "gsd-core/workflows/next.md": "48bd4b5d54f0d1f8", diff --git a/tests/fixtures/golden-install-parity/hermes.json b/tests/fixtures/golden-install-parity/hermes.json index 2d656d36b..753b8c26c 100644 --- a/tests/fixtures/golden-install-parity/hermes.json +++ b/tests/fixtures/golden-install-parity/hermes.json @@ -37,7 +37,7 @@ "agents/gsd-verifier.md": "c5916e463df6306e", "gsd-core/VERSION": "ef0deccd81a6723c", "gsd-core/bin/check-latest-version.cjs": "e4a224058c8f4d74", - "gsd-core/bin/gsd-tools.cjs": "74594e8bf36e5580", + "gsd-core/bin/gsd-tools.cjs": "43e6c5810defe512", "gsd-core/bin/gsd_run": "62d9b647ede212e6", "gsd-core/bin/shared/config-defaults.manifest.json": "517e6a7c1e9f4f16", "gsd-core/bin/shared/config-schema.manifest.json": "7d398e94c44e5268", @@ -205,7 +205,7 @@ "gsd-core/workflows/cleanup.md": "6380894e67d2435d", "gsd-core/workflows/code-review-fix.md": "5090840d834ec31a", "gsd-core/workflows/code-review.md": "29046f7fa6a9d40a", - "gsd-core/workflows/complete-milestone.md": "96db03239ff95208", + "gsd-core/workflows/complete-milestone.md": "7bd066db127dc274", "gsd-core/workflows/debug.md": "5840a39f14a029c4", "gsd-core/workflows/diagnose-issues.md": "b350281a56ee5832", "gsd-core/workflows/discovery-phase.md": "6161c60d752d0058", @@ -243,7 +243,7 @@ "gsd-core/workflows/help.md": "5d040504b9ab35e3", "gsd-core/workflows/help/modes/brief.md": "2e923b3ed635d495", "gsd-core/workflows/help/modes/default.md": "bb6876c976996dbd", - "gsd-core/workflows/help/modes/full.md": "eba05fd7c355b65f", + "gsd-core/workflows/help/modes/full.md": "2df924dd3815ff0e", "gsd-core/workflows/help/modes/topic.md": "bd2e4cc8e460f5bd", "gsd-core/workflows/import.md": "da7ca19f487c6b60", "gsd-core/workflows/inbox.md": "91aac6360e1a8672", @@ -256,7 +256,7 @@ "gsd-core/workflows/map-codebase.md": "23fae66ceef58e1c", "gsd-core/workflows/milestone-summary.md": "5cc04210fea41834", "gsd-core/workflows/mvp-phase.md": "5ce3c326ef0f6e27", - "gsd-core/workflows/new-milestone.md": "13f278af2e696d8b", + "gsd-core/workflows/new-milestone.md": "97750332c52a9ef7", "gsd-core/workflows/new-project.md": "40c94cfb81bde99b", "gsd-core/workflows/new-workspace.md": "af3397e97cec7d0b", "gsd-core/workflows/next.md": "e044321fdd6b5e9c", diff --git a/tests/fixtures/golden-install-parity/kilo.json b/tests/fixtures/golden-install-parity/kilo.json index 7ce93078a..7d51fd07b 100644 --- a/tests/fixtures/golden-install-parity/kilo.json +++ b/tests/fixtures/golden-install-parity/kilo.json @@ -106,7 +106,7 @@ "command/gsd-workstreams.md": "5e57eed1881c3891", "gsd-core/VERSION": "ef0deccd81a6723c", "gsd-core/bin/check-latest-version.cjs": "e4a224058c8f4d74", - "gsd-core/bin/gsd-tools.cjs": "74594e8bf36e5580", + "gsd-core/bin/gsd-tools.cjs": "43e6c5810defe512", "gsd-core/bin/gsd_run": "62d9b647ede212e6", "gsd-core/bin/shared/config-defaults.manifest.json": "517e6a7c1e9f4f16", "gsd-core/bin/shared/config-schema.manifest.json": "7d398e94c44e5268", @@ -274,7 +274,7 @@ "gsd-core/workflows/cleanup.md": "d124682912dab9f6", "gsd-core/workflows/code-review-fix.md": "a416c764425cbb61", "gsd-core/workflows/code-review.md": "3999e5bc9ce9171e", - "gsd-core/workflows/complete-milestone.md": "cb9a1ad0d611c765", + "gsd-core/workflows/complete-milestone.md": "d0f7e0599ab54dca", "gsd-core/workflows/debug.md": "0fa12d266c29d9d4", "gsd-core/workflows/diagnose-issues.md": "af98c318e0aa27bf", "gsd-core/workflows/discovery-phase.md": "ca7b2be46e59e862", @@ -312,7 +312,7 @@ "gsd-core/workflows/help.md": "5d040504b9ab35e3", "gsd-core/workflows/help/modes/brief.md": "2e923b3ed635d495", "gsd-core/workflows/help/modes/default.md": "b544113eb9aa54fa", - "gsd-core/workflows/help/modes/full.md": "737a6396e998929e", + "gsd-core/workflows/help/modes/full.md": "89044c816457cf48", "gsd-core/workflows/help/modes/topic.md": "a404990fcf2d7df7", "gsd-core/workflows/import.md": "95734bf6d48ef776", "gsd-core/workflows/inbox.md": "a073396097c89c01", @@ -325,7 +325,7 @@ "gsd-core/workflows/map-codebase.md": "fcc2796ebf8ea2c7", "gsd-core/workflows/milestone-summary.md": "423287cd509b7774", "gsd-core/workflows/mvp-phase.md": "3935c0d9969e3e84", - "gsd-core/workflows/new-milestone.md": "c4ff690cd48a52db", + "gsd-core/workflows/new-milestone.md": "9abdd85c65989620", "gsd-core/workflows/new-project.md": "0dce9298c090bdb4", "gsd-core/workflows/new-workspace.md": "074efbc589061182", "gsd-core/workflows/next.md": "0a9b4e23ac0bf7ea", diff --git a/tests/fixtures/golden-install-parity/kimi.json b/tests/fixtures/golden-install-parity/kimi.json index 693465732..4535c9fd1 100644 --- a/tests/fixtures/golden-install-parity/kimi.json +++ b/tests/fixtures/golden-install-parity/kimi.json @@ -73,7 +73,7 @@ "agents/subagents/gsd-verifier.yaml": "2d2bd6b37626f382", "gsd-core/VERSION": "ef0deccd81a6723c", "gsd-core/bin/check-latest-version.cjs": "e4a224058c8f4d74", - "gsd-core/bin/gsd-tools.cjs": "74594e8bf36e5580", + "gsd-core/bin/gsd-tools.cjs": "43e6c5810defe512", "gsd-core/bin/gsd_run": "62d9b647ede212e6", "gsd-core/bin/shared/config-defaults.manifest.json": "517e6a7c1e9f4f16", "gsd-core/bin/shared/config-schema.manifest.json": "7d398e94c44e5268", @@ -241,7 +241,7 @@ "gsd-core/workflows/cleanup.md": "5cf0772521c192a4", "gsd-core/workflows/code-review-fix.md": "b442c670f8c1fe93", "gsd-core/workflows/code-review.md": "1bfa3bf542e30c5e", - "gsd-core/workflows/complete-milestone.md": "8a4cfb41a4de5a99", + "gsd-core/workflows/complete-milestone.md": "337d177126f1bd67", "gsd-core/workflows/debug.md": "da62e7a62c113b29", "gsd-core/workflows/diagnose-issues.md": "b1fd597cb9420c33", "gsd-core/workflows/discovery-phase.md": "3ba7cfb89fb1e761", @@ -279,7 +279,7 @@ "gsd-core/workflows/help.md": "5d040504b9ab35e3", "gsd-core/workflows/help/modes/brief.md": "5fe077fbbdb5d9f7", "gsd-core/workflows/help/modes/default.md": "cc8ef97de634c995", - "gsd-core/workflows/help/modes/full.md": "26b7c72f1a12a80f", + "gsd-core/workflows/help/modes/full.md": "d7432c8631f3cae8", "gsd-core/workflows/help/modes/topic.md": "d7c60d488810fbd6", "gsd-core/workflows/import.md": "97861d522319d56e", "gsd-core/workflows/inbox.md": "437f981ef9ae7b26", @@ -292,7 +292,7 @@ "gsd-core/workflows/map-codebase.md": "582bddef590de9c6", "gsd-core/workflows/milestone-summary.md": "f956783f7d063963", "gsd-core/workflows/mvp-phase.md": "bfa668107be972ed", - "gsd-core/workflows/new-milestone.md": "6d07ca2fc7aec3a4", + "gsd-core/workflows/new-milestone.md": "23d2135a555e95df", "gsd-core/workflows/new-project.md": "69d356f41ea36aa2", "gsd-core/workflows/new-workspace.md": "fdd63a9adf030cb1", "gsd-core/workflows/next.md": "48bd4b5d54f0d1f8", diff --git a/tests/fixtures/golden-install-parity/opencode.json b/tests/fixtures/golden-install-parity/opencode.json index 62db158a6..dddc2f218 100644 --- a/tests/fixtures/golden-install-parity/opencode.json +++ b/tests/fixtures/golden-install-parity/opencode.json @@ -106,7 +106,7 @@ "command/gsd-workstreams.md": "5e57eed1881c3891", "gsd-core/VERSION": "ef0deccd81a6723c", "gsd-core/bin/check-latest-version.cjs": "e4a224058c8f4d74", - "gsd-core/bin/gsd-tools.cjs": "74594e8bf36e5580", + "gsd-core/bin/gsd-tools.cjs": "43e6c5810defe512", "gsd-core/bin/gsd_run": "62d9b647ede212e6", "gsd-core/bin/shared/config-defaults.manifest.json": "517e6a7c1e9f4f16", "gsd-core/bin/shared/config-schema.manifest.json": "7d398e94c44e5268", @@ -274,7 +274,7 @@ "gsd-core/workflows/cleanup.md": "daca0c4f1d531a02", "gsd-core/workflows/code-review-fix.md": "618c850533bd5c9e", "gsd-core/workflows/code-review.md": "e362de9cce43c8fc", - "gsd-core/workflows/complete-milestone.md": "f48a1771ebb15067", + "gsd-core/workflows/complete-milestone.md": "840e524216772d8d", "gsd-core/workflows/debug.md": "0e12f6f3589cc0ea", "gsd-core/workflows/diagnose-issues.md": "d8c817d029ea186e", "gsd-core/workflows/discovery-phase.md": "724408336596c50c", @@ -312,7 +312,7 @@ "gsd-core/workflows/help.md": "5d040504b9ab35e3", "gsd-core/workflows/help/modes/brief.md": "2e923b3ed635d495", "gsd-core/workflows/help/modes/default.md": "b544113eb9aa54fa", - "gsd-core/workflows/help/modes/full.md": "4683429199900853", + "gsd-core/workflows/help/modes/full.md": "d43cbea8b5e6e290", "gsd-core/workflows/help/modes/topic.md": "a404990fcf2d7df7", "gsd-core/workflows/import.md": "46337b37d375f4da", "gsd-core/workflows/inbox.md": "a073396097c89c01", @@ -325,7 +325,7 @@ "gsd-core/workflows/map-codebase.md": "40624186d001658f", "gsd-core/workflows/milestone-summary.md": "0acae8647e544018", "gsd-core/workflows/mvp-phase.md": "efeb5d11f5b10e73", - "gsd-core/workflows/new-milestone.md": "56ae3ae36ab32cef", + "gsd-core/workflows/new-milestone.md": "08d97dcb66df7776", "gsd-core/workflows/new-project.md": "d3c0ce0e163d5048", "gsd-core/workflows/new-workspace.md": "cfbe1d7f60f2bfe4", "gsd-core/workflows/next.md": "83ccac8577032cb6", diff --git a/tests/fixtures/golden-install-parity/qwen.json b/tests/fixtures/golden-install-parity/qwen.json index c1bc320ff..af6922e7f 100644 --- a/tests/fixtures/golden-install-parity/qwen.json +++ b/tests/fixtures/golden-install-parity/qwen.json @@ -37,7 +37,7 @@ "agents/gsd-verifier.md": "7286d42f73e54be1", "gsd-core/VERSION": "ef0deccd81a6723c", "gsd-core/bin/check-latest-version.cjs": "e4a224058c8f4d74", - "gsd-core/bin/gsd-tools.cjs": "74594e8bf36e5580", + "gsd-core/bin/gsd-tools.cjs": "43e6c5810defe512", "gsd-core/bin/gsd_run": "62d9b647ede212e6", "gsd-core/bin/shared/config-defaults.manifest.json": "517e6a7c1e9f4f16", "gsd-core/bin/shared/config-schema.manifest.json": "7d398e94c44e5268", @@ -205,7 +205,7 @@ "gsd-core/workflows/cleanup.md": "804c5d481279f008", "gsd-core/workflows/code-review-fix.md": "7d6caed073170b2a", "gsd-core/workflows/code-review.md": "ca4a87c143bb2d55", - "gsd-core/workflows/complete-milestone.md": "d72e6131a14244da", + "gsd-core/workflows/complete-milestone.md": "35a311ed5cea3599", "gsd-core/workflows/debug.md": "6000ef61c0a67d84", "gsd-core/workflows/diagnose-issues.md": "1aa7b1f3c4cbe15d", "gsd-core/workflows/discovery-phase.md": "6161c60d752d0058", @@ -243,7 +243,7 @@ "gsd-core/workflows/help.md": "5d040504b9ab35e3", "gsd-core/workflows/help/modes/brief.md": "2e923b3ed635d495", "gsd-core/workflows/help/modes/default.md": "cef457f954a9991e", - "gsd-core/workflows/help/modes/full.md": "c4e359b86de6b99d", + "gsd-core/workflows/help/modes/full.md": "8f70d84fd3549aa0", "gsd-core/workflows/help/modes/topic.md": "bd2e4cc8e460f5bd", "gsd-core/workflows/import.md": "5c0e3e97b0a59a06", "gsd-core/workflows/inbox.md": "91aac6360e1a8672", @@ -256,7 +256,7 @@ "gsd-core/workflows/map-codebase.md": "8ce1e33f45827202", "gsd-core/workflows/milestone-summary.md": "886ec00825fb1442", "gsd-core/workflows/mvp-phase.md": "b3561a8ab1b26a4c", - "gsd-core/workflows/new-milestone.md": "8ec6c5fbc26d8227", + "gsd-core/workflows/new-milestone.md": "3f2875618897718b", "gsd-core/workflows/new-project.md": "6c1440959e637d2d", "gsd-core/workflows/new-workspace.md": "9b41c1b5c0196936", "gsd-core/workflows/next.md": "80f2feb243818c90", diff --git a/tests/fixtures/golden-install-parity/trae.json b/tests/fixtures/golden-install-parity/trae.json index 578521f22..f5b52b35c 100644 --- a/tests/fixtures/golden-install-parity/trae.json +++ b/tests/fixtures/golden-install-parity/trae.json @@ -37,7 +37,7 @@ "agents/gsd-verifier.md": "2fef6afe676b0e34", "gsd-core/VERSION": "ef0deccd81a6723c", "gsd-core/bin/check-latest-version.cjs": "e4a224058c8f4d74", - "gsd-core/bin/gsd-tools.cjs": "5cf26d5f9e588cf8", + "gsd-core/bin/gsd-tools.cjs": "775a6f3d86f8e5e3", "gsd-core/bin/gsd_run": "62d9b647ede212e6", "gsd-core/bin/shared/config-defaults.manifest.json": "517e6a7c1e9f4f16", "gsd-core/bin/shared/config-schema.manifest.json": "7d398e94c44e5268", @@ -205,7 +205,7 @@ "gsd-core/workflows/cleanup.md": "78080ff25ba43f8c", "gsd-core/workflows/code-review-fix.md": "4eebfb7f1612b441", "gsd-core/workflows/code-review.md": "7630639b5f2f9ff2", - "gsd-core/workflows/complete-milestone.md": "0bbdd56c4251797d", + "gsd-core/workflows/complete-milestone.md": "5f7dbe9842b23e57", "gsd-core/workflows/debug.md": "87c20def8d313e45", "gsd-core/workflows/diagnose-issues.md": "a0b3fee49d516c0b", "gsd-core/workflows/discovery-phase.md": "b32b6197b66c9a13", @@ -243,7 +243,7 @@ "gsd-core/workflows/help.md": "08e1349950c5602a", "gsd-core/workflows/help/modes/brief.md": "2e923b3ed635d495", "gsd-core/workflows/help/modes/default.md": "1b3c315342701265", - "gsd-core/workflows/help/modes/full.md": "ffb3e525818ed5bc", + "gsd-core/workflows/help/modes/full.md": "6d4aacaec9858e28", "gsd-core/workflows/help/modes/topic.md": "5419498effee148f", "gsd-core/workflows/import.md": "47cc99b635e45f82", "gsd-core/workflows/inbox.md": "e9ea37b2d46dc5b4", @@ -256,7 +256,7 @@ "gsd-core/workflows/map-codebase.md": "f90d0577d254c38e", "gsd-core/workflows/milestone-summary.md": "b50a5d4369d29978", "gsd-core/workflows/mvp-phase.md": "1d2292f3c444c13d", - "gsd-core/workflows/new-milestone.md": "28d4d2b571cae752", + "gsd-core/workflows/new-milestone.md": "f69e9ccc51ab956b", "gsd-core/workflows/new-project.md": "d1a0070ed292c25a", "gsd-core/workflows/new-workspace.md": "555689ccf58bafdb", "gsd-core/workflows/next.md": "569c68513fd94ea7", diff --git a/tests/fixtures/golden-install-parity/windsurf.json b/tests/fixtures/golden-install-parity/windsurf.json index 0d5e089e8..34afab5fa 100644 --- a/tests/fixtures/golden-install-parity/windsurf.json +++ b/tests/fixtures/golden-install-parity/windsurf.json @@ -37,7 +37,7 @@ "agents/gsd-verifier.md": "b16b34a580941124", "gsd-core/VERSION": "ef0deccd81a6723c", "gsd-core/bin/check-latest-version.cjs": "e4a224058c8f4d74", - "gsd-core/bin/gsd-tools.cjs": "5cf26d5f9e588cf8", + "gsd-core/bin/gsd-tools.cjs": "775a6f3d86f8e5e3", "gsd-core/bin/gsd_run": "62d9b647ede212e6", "gsd-core/bin/shared/config-defaults.manifest.json": "517e6a7c1e9f4f16", "gsd-core/bin/shared/config-schema.manifest.json": "7d398e94c44e5268", @@ -205,7 +205,7 @@ "gsd-core/workflows/cleanup.md": "edc0bc375acdb563", "gsd-core/workflows/code-review-fix.md": "aa750f6d1abd3b9f", "gsd-core/workflows/code-review.md": "20c76ddd702e7cd5", - "gsd-core/workflows/complete-milestone.md": "6706e0dc3e95acd0", + "gsd-core/workflows/complete-milestone.md": "921f9197b4d7f5fd", "gsd-core/workflows/debug.md": "9679214d9472e213", "gsd-core/workflows/diagnose-issues.md": "7c0b8debfc906ca0", "gsd-core/workflows/discovery-phase.md": "7dcf150998559c11", @@ -243,7 +243,7 @@ "gsd-core/workflows/help.md": "08e1349950c5602a", "gsd-core/workflows/help/modes/brief.md": "2e923b3ed635d495", "gsd-core/workflows/help/modes/default.md": "91509fe03bad9795", - "gsd-core/workflows/help/modes/full.md": "fec340660fa7b2ff", + "gsd-core/workflows/help/modes/full.md": "8fb3c93df5883f56", "gsd-core/workflows/help/modes/topic.md": "9f00f5f94c5497aa", "gsd-core/workflows/import.md": "f5b3826c4cfb2682", "gsd-core/workflows/inbox.md": "797c287852eb8957", @@ -256,7 +256,7 @@ "gsd-core/workflows/map-codebase.md": "6c89a16e0d9fddfe", "gsd-core/workflows/milestone-summary.md": "1ced13b54a1fab0b", "gsd-core/workflows/mvp-phase.md": "bcc8037866fa1d4d", - "gsd-core/workflows/new-milestone.md": "763c096ead93de90", + "gsd-core/workflows/new-milestone.md": "b43ff95a594bd688", "gsd-core/workflows/new-project.md": "d6709238a3ada30c", "gsd-core/workflows/new-workspace.md": "8a9ab30eac218190", "gsd-core/workflows/next.md": "3ebbf30622521e76", diff --git a/tests/milestone.test.cjs b/tests/milestone.test.cjs index 20e38cbdc..5e35f0ea1 100644 --- a/tests/milestone.test.cjs +++ b/tests/milestone.test.cjs @@ -759,3 +759,43 @@ describe('#1911 — milestone complete --ws archives to the workstream', () => { ); }); }); + +// ───────────────────────────────────────────────────────────────────────────── +// #1871: milestone complete archives phase dirs by default +// ───────────────────────────────────────────────────────────────────────────── + +describe('#1871 — milestone complete archives phase dirs by default', () => { + let tmpDir; + + beforeEach(() => { tmpDir = createTempProject(); }); + afterEach(() => cleanup(tmpDir)); + + function seedCompletableMilestone() { + writeRoadmap(tmpDir, '# Roadmap v1.0 MVP\n\n### Phase 1: Foundation\n**Goal:** Setup\n'); + fs.writeFileSync(path.join(tmpDir, '.planning', 'REQUIREMENTS.md'), '# Requirements\n- [ ] x\n'); + writeState(tmpDir); + mkPhaseDir(tmpDir, '01-foundation', { oneLiner: 'Set up project infrastructure' }); + } + + test('archives phase dirs by default (no --archive-phases flag needed)', () => { + seedCompletableMilestone(); + const result = runGsdTools('milestone complete v1.0 --name MVP', tmpDir); + assert.ok(result.success, `Command failed: ${result.error}`); + const out = JSON.parse(result.output); + assert.ok(out.archived.phases, 'phases should be archived by default'); + assert.ok( + fs.existsSync(path.join(tmpDir, '.planning', 'milestones', 'v1.0-phases', '01-foundation')), + 'phase dir should be archived under milestones/v1.0-phases/', + ); + }); + + test('--no-archive-phases opts out of default archiving', () => { + seedCompletableMilestone(); + const phaseDir = path.join(tmpDir, '.planning', 'phases', '01-foundation'); + const result = runGsdTools('milestone complete v1.0 --name MVP --no-archive-phases', tmpDir); + assert.ok(result.success, `Command failed: ${result.error}`); + const out = JSON.parse(result.output); + assert.ok(!out.archived.phases, 'phases should NOT be archived with --no-archive-phases'); + assert.ok(fs.existsSync(phaseDir), 'phase dir should remain in place with --no-archive-phases'); + }); +}); diff --git a/tests/workflow-size-baseline.json b/tests/workflow-size-baseline.json index 255f8e2ad..dff88dfb6 100644 --- a/tests/workflow-size-baseline.json +++ b/tests/workflow-size-baseline.json @@ -13,7 +13,7 @@ "cleanup.md": 9897, "code-review-fix.md": 23890, "code-review.md": 31602, - "complete-milestone.md": 31134, + "complete-milestone.md": 31027, "debug.md": 13505, "diagnose-issues.md": 12820, "discovery-phase.md": 8651, @@ -44,7 +44,7 @@ "map-codebase.md": 20789, "milestone-summary.md": 11774, "mvp-phase.md": 13582, - "new-milestone.md": 32422, + "new-milestone.md": 32844, "new-project.md": 66138, "new-workspace.md": 11254, "next.md": 20094,