diff --git a/.changeset/2390-phase-add-autodetect.md b/.changeset/2390-phase-add-autodetect.md
new file mode 100644
index 000000000..6a7d520f4
--- /dev/null
+++ b/.changeset/2390-phase-add-autodetect.md
@@ -0,0 +1,5 @@
+---
+type: Fixed
+pr: 2425
+---
+**`phase.add` no longer silently mistakes a goal-shaped description for a phase title** — a long or multi-sentence description used to land verbatim in the `### Phase N:` header with no signal anything was off; `phase.add` now returns a `warning` field when the description looks goal-shaped, and the phase-number auto-detect docs now correctly point callers at the orchestrating workflow instead of implying `gsd-tools.cjs` resolves it itself. (#2390)
diff --git a/commands/gsd/ai-integration-phase.md b/commands/gsd/ai-integration-phase.md
index af46f259d..d4af60608 100644
--- a/commands/gsd/ai-integration-phase.md
+++ b/commands/gsd/ai-integration-phase.md
@@ -28,7 +28,7 @@ Flow: Select Framework → Research Docs → Research Domain → Design Eval Str
-Phase number: $ARGUMENTS — optional, auto-detects next unplanned phase if omitted.
+Phase number: $ARGUMENTS — optional; when omitted, the orchestrating workflow reads ROADMAP.md and selects the next unplanned phase. This is not a `gsd-tools.cjs` CLI feature — the CLI's phase-lookup primitives require an explicit phase number.
diff --git a/commands/gsd/plan-phase.md b/commands/gsd/plan-phase.md
index bf7ef82db..6e06880ea 100644
--- a/commands/gsd/plan-phase.md
+++ b/commands/gsd/plan-phase.md
@@ -40,7 +40,7 @@ Create executable phase prompts (PLAN.md files) for a roadmap phase with integra
-Phase number: $ARGUMENTS (optional — auto-detects next unplanned phase if omitted)
+Phase number: $ARGUMENTS (optional — when omitted, the orchestrating workflow reads ROADMAP.md and selects the next unplanned phase; `gsd-tools.cjs` itself has no auto-detect feature and requires an explicit phase number)
**Flags:**
- `--research` — Force re-research even if RESEARCH.md exists
diff --git a/docs/COMMANDS.md b/docs/COMMANDS.md
index 65b2761ef..e4728281b 100644
--- a/docs/COMMANDS.md
+++ b/docs/COMMANDS.md
@@ -193,7 +193,7 @@ Research, plan, and verify a phase.
| Argument | Required | Description |
|----------|----------|-------------|
-| `N` | No | Phase number (defaults to next unplanned phase) |
+| `N` | No | Phase number (if omitted, the orchestrating workflow reads ROADMAP.md and targets the next unplanned phase — not a `gsd-tools.cjs` CLI feature) |
| Flag | Description |
|------|-------------|
diff --git a/docs/how-to/plan-a-phase.md b/docs/how-to/plan-a-phase.md
index 94b60d908..124adbbba 100644
--- a/docs/how-to/plan-a-phase.md
+++ b/docs/how-to/plan-a-phase.md
@@ -18,7 +18,7 @@ This runs three stages in sequence:
2. **Plan** — A `gsd-planner` subagent reads context, research, and requirements, then writes one or more `{phase}-{N}-PLAN.md` files.
3. **Verify** — A `gsd-plan-checker` subagent validates plan quality across eight dimensions and triggers a revision loop (up to three iterations) until quality gates pass.
-If no phase number is given, GSD Core targets the next unplanned phase from the roadmap.
+If no phase number is given, the `/gsd-plan-phase` orchestrating workflow reads `ROADMAP.md` and targets the next unplanned phase. This detection happens in the workflow/LLM layer, not in the `gsd-tools.cjs` CLI — its phase-lookup commands require an explicit phase number.
---
diff --git a/gsd-core/workflows/add-phase.md b/gsd-core/workflows/add-phase.md
index 71106777c..419cda316 100644
--- a/gsd-core/workflows/add-phase.md
+++ b/gsd-core/workflows/add-phase.md
@@ -57,6 +57,8 @@ The CLI handles:
- Inserting the phase entry into ROADMAP.md with Goal, Depends on, and Plans sections
Extract from result: `phase_number`, `padded`, `name`, `slug`, `directory`.
+
+**If result includes a `warning` field:** the description read as goal-shaped (long and/or multi-sentence) rather than title-shaped, and was written verbatim as the `### Phase N:` header. The phase was still created — surface the warning to the user and suggest a short title with the detail moved to `**Goal:**` in ROADMAP.md.
diff --git a/gsd-core/workflows/ai-integration-phase.md b/gsd-core/workflows/ai-integration-phase.md
index 2955e604c..746025efc 100644
--- a/gsd-core/workflows/ai-integration-phase.md
+++ b/gsd-core/workflows/ai-integration-phase.md
@@ -52,7 +52,7 @@ Exit workflow.
## 2. Parse and Validate Phase
-Extract phase number from $ARGUMENTS. If not provided, detect next unplanned phase.
+Extract phase number from $ARGUMENTS. If not provided, this orchestrator (not `gsd-tools.cjs`) detects the next unplanned phase: run `gsd_run query roadmap.analyze` and read its `next_phase` field (the first phase whose `disk_status` is `no_directory`, `empty`, `discussed`, or `researched` — i.e. not yet planned). `query roadmap.get-phase` below hard-requires an explicit `${PHASE}` and does not auto-detect.
```bash
PHASE_INFO=$(gsd_run query roadmap.get-phase "${PHASE}")
diff --git a/gsd-core/workflows/plan-phase.md b/gsd-core/workflows/plan-phase.md
index 626d89803..1bd7a5e4c 100644
--- a/gsd-core/workflows/plan-phase.md
+++ b/gsd-core/workflows/plan-phase.md
@@ -158,7 +158,7 @@ Extract express-path args from $ARGUMENTS: `PRD_FILE` (`--prd `), `ING
`--prd` and `--ingest` are mutually exclusive. If both are present, error and exit:
`Invalid arguments: cannot combine \`--prd\` with \`--ingest\`.`
-**If no phase number:** Detect next unplanned phase from roadmap.
+**If no phase number:** Auto-detect it — `query init.plan-phase` and `query roadmap.get-phase` require an explicit number, so this is an orchestrator step. Run `gsd_run query roadmap.analyze` and read `next_phase` (first phase with `disk_status` of `no_directory`, `empty`, `discussed`, or `researched`). If `next_phase` is `null`, read ROADMAP.md's `### Phase N:` headers and ask the user which phase to plan. Set `PHASE` to the result before step 1's `query init.plan-phase "$PHASE"` call.
**If `phase_found` is false:** Validate phase exists in ROADMAP.md. If valid, create the directory using `expected_phase_dir` from init (includes `project_code` prefix when set):
```bash
diff --git a/skills/gsd-ai-integration-phase/SKILL.md b/skills/gsd-ai-integration-phase/SKILL.md
index 4a020dee4..cb31560dd 100644
--- a/skills/gsd-ai-integration-phase/SKILL.md
+++ b/skills/gsd-ai-integration-phase/SKILL.md
@@ -28,7 +28,7 @@ Flow: Select Framework → Research Docs → Research Domain → Design Eval Str
-Phase number: $ARGUMENTS — optional, auto-detects next unplanned phase if omitted.
+Phase number: $ARGUMENTS — optional; when omitted, the orchestrating workflow reads ROADMAP.md and selects the next unplanned phase. This is not a `gsd-tools.cjs` CLI feature — the CLI's phase-lookup primitives require an explicit phase number.
diff --git a/skills/gsd-plan-phase/SKILL.md b/skills/gsd-plan-phase/SKILL.md
index 4d911579d..e6548952b 100644
--- a/skills/gsd-plan-phase/SKILL.md
+++ b/skills/gsd-plan-phase/SKILL.md
@@ -40,7 +40,7 @@ Create executable phase prompts (PLAN.md files) for a roadmap phase with integra
-Phase number: $ARGUMENTS (optional — auto-detects next unplanned phase if omitted)
+Phase number: $ARGUMENTS (optional — when omitted, the orchestrating workflow reads ROADMAP.md and selects the next unplanned phase; `gsd-tools.cjs` itself has no auto-detect feature and requires an explicit phase number)
**Flags:**
- `--research` — Force re-research even if RESEARCH.md exists
diff --git a/src/phase.cts b/src/phase.cts
index e7e60d6dc..08dacdbaa 100644
--- a/src/phase.cts
+++ b/src/phase.cts
@@ -759,6 +759,32 @@ function cmdPhasePlanIndex(cwd: string, phase: string, raw: boolean): void {
output(result, raw);
}
+// #2390 — phase.add title-shape heuristic. A description at or under this many
+// characters, and with no sentence-ending punctuation followed by more text,
+// reads as a short Title. Anything longer or multi-sentence reads as a Goal,
+// not a Title. phase.add still writes the phase verbatim (it never mangles
+// ROADMAP.md), but when the description looks goal-shaped the JSON result
+// gains a `warning` key naming the gap, so the caller — or the orchestrating
+// add-phase workflow — can split title vs. goal instead of the whole paragraph
+// landing silently in the `### Phase N:` header.
+const PHASE_ADD_TITLE_MAX_LEN = 80;
+const PHASE_ADD_MULTI_SENTENCE_RE = /[.!?]['")\]]?\s+\S/;
+
+function describeGoalShapedTitle(description: string): string | null {
+ const trimmed = description.trim();
+ const tooLong = trimmed.length > PHASE_ADD_TITLE_MAX_LEN;
+ const multiSentence = PHASE_ADD_MULTI_SENTENCE_RE.test(trimmed);
+ if (!tooLong && !multiSentence) return null;
+ const reasons = [
+ tooLong ? `${trimmed.length} chars (over the ${PHASE_ADD_TITLE_MAX_LEN}-char title threshold)` : null,
+ multiSentence ? 'multiple sentences' : null,
+ ].filter(Boolean).join(', ');
+ return (
+ `description looks goal-shaped, not title-shaped (${reasons}). It was written verbatim ` +
+ `as the phase title; consider a short title with the detail moved to **Goal:**.`
+ );
+}
+
function cmdPhaseAdd(cwd: string, description: string, raw: boolean, customId?: string): void {
if (!description) {
error('description required for phase add');
@@ -858,7 +884,9 @@ function cmdPhaseAdd(cwd: string, description: string, raw: boolean, customId?:
return { newPhaseId: _newPhaseId, dirName: _dirName };
});
- const result = {
+ const titleWarning = describeGoalShapedTitle(description);
+
+ const result: Record = {
phase_number: typeof newPhaseId === 'number' ? newPhaseId : String(newPhaseId),
padded:
typeof newPhaseId === 'number' ? String(newPhaseId).padStart(2, '0') : String(newPhaseId),
@@ -869,8 +897,9 @@ function cmdPhaseAdd(cwd: string, description: string, raw: boolean, customId?:
),
naming_mode: config.phase_naming,
};
+ if (titleWarning) result['warning'] = titleWarning;
- output(result, raw, result.padded);
+ output(result, raw, result['padded']);
}
function cmdPhaseAddBatch(cwd: string, descriptions: string[], raw: boolean): void {
diff --git a/tests/fixtures/golden-install-parity/antigravity.json b/tests/fixtures/golden-install-parity/antigravity.json
index 8097d04ea..143b63472 100644
--- a/tests/fixtures/golden-install-parity/antigravity.json
+++ b/tests/fixtures/golden-install-parity/antigravity.json
@@ -207,10 +207,10 @@
"gsd-core/templates/verification-report.md": "78ab9264ce63ed7e",
"gsd-core/workflows/_runtime-launcher.snippet.sh": "bf2dd5d1debd5335",
"gsd-core/workflows/add-backlog.md": "8cc2e884a021b79b",
- "gsd-core/workflows/add-phase.md": "f82afa2f93be19fa",
+ "gsd-core/workflows/add-phase.md": "820572da6367308c",
"gsd-core/workflows/add-tests.md": "ad6d49634e04ca7c",
"gsd-core/workflows/add-todo.md": "e410a72c168e43c0",
- "gsd-core/workflows/ai-integration-phase.md": "22f5466085c47c00",
+ "gsd-core/workflows/ai-integration-phase.md": "ea5a229a9cad3b4d",
"gsd-core/workflows/analyze-dependencies.md": "77aff48f97fa6f1c",
"gsd-core/workflows/audit-fix.md": "582e9a31df15dd8b",
"gsd-core/workflows/audit-milestone.md": "280cd85908dd45cb",
@@ -281,7 +281,7 @@
"gsd-core/workflows/onboard.md": "69d871aa53a1a859",
"gsd-core/workflows/pause-work.md": "564de32981a24337",
"gsd-core/workflows/plan-milestone-gaps.md": "dd6a4b3a8b05ab6e",
- "gsd-core/workflows/plan-phase.md": "c8d8e646fccd4bd3",
+ "gsd-core/workflows/plan-phase.md": "5f7f231a249dc23f",
"gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "4099ef6d0868de60",
"gsd-core/workflows/plan-phase/steps/prd-express-path.md": "ab0b22244c3389aa",
"gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "e9de7a96bbfff261",
@@ -364,7 +364,7 @@
"scripts/lib/allowlist-ratchet.cjs": "ffaceaac3efc2660",
"scripts/lib/cli-exit.cjs": "612d0c372c75b7e7",
"skills/gsd-add-tests/SKILL.md": "95cd3eb1698fc79b",
- "skills/gsd-ai-integration-phase/SKILL.md": "0dc87ce16bc31884",
+ "skills/gsd-ai-integration-phase/SKILL.md": "df6dad8e87226f35",
"skills/gsd-audit-fix/SKILL.md": "e5e30c307bca6c89",
"skills/gsd-audit-milestone/SKILL.md": "f701c229ac380077",
"skills/gsd-audit-uat/SKILL.md": "8b304b54e1c587d1",
@@ -407,7 +407,7 @@
"skills/gsd-onboard/SKILL.md": "1447665c64c8ade8",
"skills/gsd-pause-work/SKILL.md": "9d3cc6bd70b03df1",
"skills/gsd-phase/SKILL.md": "00676bbea61410bf",
- "skills/gsd-plan-phase/SKILL.md": "8439b569426ff621",
+ "skills/gsd-plan-phase/SKILL.md": "03a8f71d4385a50d",
"skills/gsd-plan-review-convergence/SKILL.md": "e4d52b4473c6234b",
"skills/gsd-pr-branch/SKILL.md": "5e050db73988f9a8",
"skills/gsd-profile-user/SKILL.md": "10f2ff4be2e7d55f",
diff --git a/tests/fixtures/golden-install-parity/augment.json b/tests/fixtures/golden-install-parity/augment.json
index 364625d6f..26ab4c360 100644
--- a/tests/fixtures/golden-install-parity/augment.json
+++ b/tests/fixtures/golden-install-parity/augment.json
@@ -36,7 +36,7 @@
"agents/gsd-user-profiler.md": "622220df0654b6bf",
"agents/gsd-verifier.md": "f5c00a9b08fc1a7e",
"commands/gsd-add-tests.md": "3608d0cf4b515103",
- "commands/gsd-ai-integration-phase.md": "70843d4904743f7e",
+ "commands/gsd-ai-integration-phase.md": "cbc59ad7a5064b26",
"commands/gsd-audit-fix.md": "1b805946362c4f19",
"commands/gsd-audit-milestone.md": "046573a643714178",
"commands/gsd-audit-uat.md": "d3de44d1c3e59b57",
@@ -79,7 +79,7 @@
"commands/gsd-onboard.md": "1e8acf7be31834be",
"commands/gsd-pause-work.md": "4fb032f72238fe33",
"commands/gsd-phase.md": "4920d15d779329eb",
- "commands/gsd-plan-phase.md": "d467c713ea161e9e",
+ "commands/gsd-plan-phase.md": "6b05898d574f3666",
"commands/gsd-plan-review-convergence.md": "87def0355116452a",
"commands/gsd-pr-branch.md": "e168fcd545d72d0d",
"commands/gsd-profile-user.md": "ffd9c2feb4c69f11",
@@ -278,10 +278,10 @@
"gsd-core/templates/verification-report.md": "dd5faa6254183731",
"gsd-core/workflows/_runtime-launcher.snippet.sh": "bf2dd5d1debd5335",
"gsd-core/workflows/add-backlog.md": "1bc7377b105194fc",
- "gsd-core/workflows/add-phase.md": "46e0551ffdd8ce1a",
+ "gsd-core/workflows/add-phase.md": "ac43883e2d8e34d8",
"gsd-core/workflows/add-tests.md": "24b0d8157a9ccb8b",
"gsd-core/workflows/add-todo.md": "953314cdfef56bc4",
- "gsd-core/workflows/ai-integration-phase.md": "40c217869a06981f",
+ "gsd-core/workflows/ai-integration-phase.md": "45c727e49de71636",
"gsd-core/workflows/analyze-dependencies.md": "52942af10f140717",
"gsd-core/workflows/audit-fix.md": "ca751f6538c8f496",
"gsd-core/workflows/audit-milestone.md": "3835762c3147a927",
@@ -352,7 +352,7 @@
"gsd-core/workflows/onboard.md": "6f9e6c0b484271a9",
"gsd-core/workflows/pause-work.md": "f2b33bba5593d422",
"gsd-core/workflows/plan-milestone-gaps.md": "852f6d7c0c4299dc",
- "gsd-core/workflows/plan-phase.md": "3fd22c43ad1fcc90",
+ "gsd-core/workflows/plan-phase.md": "9f1c7dfc3ccac616",
"gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "b36f77ac7344a072",
"gsd-core/workflows/plan-phase/steps/prd-express-path.md": "197c0590326371b2",
"gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "49f58c3f75be3eb5",
@@ -490,7 +490,7 @@
"skills/gsd-ns-review/skills/validate-phase/SKILL.md": "8972b413eb712cae",
"skills/gsd-ns-workflow/SKILL.md": "9c03c167c9af062a",
"skills/gsd-ns-workflow/skills/add-tests/SKILL.md": "851084b695ab8328",
- "skills/gsd-ns-workflow/skills/ai-integration-phase/SKILL.md": "34fa7aff585eb78f",
+ "skills/gsd-ns-workflow/skills/ai-integration-phase/SKILL.md": "125533edf40cb047",
"skills/gsd-ns-workflow/skills/autonomous/SKILL.md": "1565a532889d3ea3",
"skills/gsd-ns-workflow/skills/discuss-phase/SKILL.md": "94ac4065ceeee80b",
"skills/gsd-ns-workflow/skills/execute-phase/SKILL.md": "67c9a6189f045de0",
@@ -498,7 +498,7 @@
"skills/gsd-ns-workflow/skills/mvp-phase/SKILL.md": "f259f089a8d07a54",
"skills/gsd-ns-workflow/skills/next/SKILL.md": "e7409245f1a0f9de",
"skills/gsd-ns-workflow/skills/phase/SKILL.md": "fe5b26417ee466be",
- "skills/gsd-ns-workflow/skills/plan-phase/SKILL.md": "99a229cf1b4fb7ee",
+ "skills/gsd-ns-workflow/skills/plan-phase/SKILL.md": "0dda686ce26d9171",
"skills/gsd-ns-workflow/skills/plan-review-convergence/SKILL.md": "8181db9842a79620",
"skills/gsd-ns-workflow/skills/progress/SKILL.md": "68bda87136db9fb3",
"skills/gsd-ns-workflow/skills/quick/SKILL.md": "014dec52d85dcb0e",
diff --git a/tests/fixtures/golden-install-parity/claude-local.json b/tests/fixtures/golden-install-parity/claude-local.json
index 311b0e65c..c10fd98a8 100644
--- a/tests/fixtures/golden-install-parity/claude-local.json
+++ b/tests/fixtures/golden-install-parity/claude-local.json
@@ -35,7 +35,7 @@
"agents/gsd-user-profiler.md": "d40584599906f3b7",
"agents/gsd-verifier.md": "628ef3a944a7a6eb",
"commands/gsd-add-tests.md": "057e3e440989e681",
- "commands/gsd-ai-integration-phase.md": "998dc23188e131fb",
+ "commands/gsd-ai-integration-phase.md": "e1f1e0bd6c50506d",
"commands/gsd-audit-fix.md": "ebdcc267a2bebaab",
"commands/gsd-audit-milestone.md": "319caced85c69ff3",
"commands/gsd-audit-uat.md": "99c9af1b2a2c600a",
@@ -78,7 +78,7 @@
"commands/gsd-onboard.md": "d0d9405bc73899bd",
"commands/gsd-pause-work.md": "01dbaebfefacd252",
"commands/gsd-phase.md": "e8c226d2694692a5",
- "commands/gsd-plan-phase.md": "ae70b58d4d8550c8",
+ "commands/gsd-plan-phase.md": "7d14158eb377a248",
"commands/gsd-plan-review-convergence.md": "c24bc978d9d743dc",
"commands/gsd-pr-branch.md": "382c23a6a644c0e4",
"commands/gsd-profile-user.md": "adbc5b025b30e836",
@@ -277,10 +277,10 @@
"gsd-core/templates/verification-report.md": "dd5faa6254183731",
"gsd-core/workflows/_runtime-launcher.snippet.sh": "bf2dd5d1debd5335",
"gsd-core/workflows/add-backlog.md": "8d05775f367d1e48",
- "gsd-core/workflows/add-phase.md": "7285e6e8894a41c5",
+ "gsd-core/workflows/add-phase.md": "b3c61dc9b4d799ed",
"gsd-core/workflows/add-tests.md": "ffbaf55a25f455a2",
"gsd-core/workflows/add-todo.md": "0a0f4d718ea50bea",
- "gsd-core/workflows/ai-integration-phase.md": "3503f52a7356caf0",
+ "gsd-core/workflows/ai-integration-phase.md": "462b75ae916e2793",
"gsd-core/workflows/analyze-dependencies.md": "77aff48f97fa6f1c",
"gsd-core/workflows/audit-fix.md": "b441993d57cf83bc",
"gsd-core/workflows/audit-milestone.md": "ae8605b4ecc37c0b",
@@ -351,7 +351,7 @@
"gsd-core/workflows/onboard.md": "b86d78eef6c77e5b",
"gsd-core/workflows/pause-work.md": "da902807d2213204",
"gsd-core/workflows/plan-milestone-gaps.md": "7679fac068d1009d",
- "gsd-core/workflows/plan-phase.md": "4b20c2d821e2df8a",
+ "gsd-core/workflows/plan-phase.md": "06970687f439918b",
"gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "4099ef6d0868de60",
"gsd-core/workflows/plan-phase/steps/prd-express-path.md": "b810f9f2374e23a5",
"gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "e9de7a96bbfff261",
diff --git a/tests/fixtures/golden-install-parity/claude.json b/tests/fixtures/golden-install-parity/claude.json
index 5f7be45b6..147a1f90d 100644
--- a/tests/fixtures/golden-install-parity/claude.json
+++ b/tests/fixtures/golden-install-parity/claude.json
@@ -206,10 +206,10 @@
"gsd-core/templates/verification-report.md": "dd5faa6254183731",
"gsd-core/workflows/_runtime-launcher.snippet.sh": "bf2dd5d1debd5335",
"gsd-core/workflows/add-backlog.md": "485c4b6673ddf832",
- "gsd-core/workflows/add-phase.md": "0d90083e9c17bec1",
+ "gsd-core/workflows/add-phase.md": "b2c06b7ed648658c",
"gsd-core/workflows/add-tests.md": "c4b133a102d36a27",
"gsd-core/workflows/add-todo.md": "2c5176263ad4ae8f",
- "gsd-core/workflows/ai-integration-phase.md": "a898d99b8d844215",
+ "gsd-core/workflows/ai-integration-phase.md": "a280593ad22fc9a3",
"gsd-core/workflows/analyze-dependencies.md": "77aff48f97fa6f1c",
"gsd-core/workflows/audit-fix.md": "ca751f6538c8f496",
"gsd-core/workflows/audit-milestone.md": "9f8ec364e58d5710",
@@ -280,7 +280,7 @@
"gsd-core/workflows/onboard.md": "3c50ed1f1fd07619",
"gsd-core/workflows/pause-work.md": "5716362557f44ce4",
"gsd-core/workflows/plan-milestone-gaps.md": "1b43d12812f7bc1e",
- "gsd-core/workflows/plan-phase.md": "7e6899ce19c134e0",
+ "gsd-core/workflows/plan-phase.md": "b8773ed817e24b37",
"gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "4099ef6d0868de60",
"gsd-core/workflows/plan-phase/steps/prd-express-path.md": "197c0590326371b2",
"gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "e9de7a96bbfff261",
@@ -362,7 +362,7 @@
"scripts/lib/allowlist-ratchet.cjs": "ffaceaac3efc2660",
"scripts/lib/cli-exit.cjs": "612d0c372c75b7e7",
"skills/gsd-add-tests/SKILL.md": "6661195a66f25ae8",
- "skills/gsd-ai-integration-phase/SKILL.md": "96c8151779ad510e",
+ "skills/gsd-ai-integration-phase/SKILL.md": "e58f7e9b779b8cee",
"skills/gsd-audit-fix/SKILL.md": "d47c757ad361e503",
"skills/gsd-audit-milestone/SKILL.md": "edb6a0cc6305d724",
"skills/gsd-audit-uat/SKILL.md": "f3cb11adb6dab54f",
@@ -405,7 +405,7 @@
"skills/gsd-onboard/SKILL.md": "46460b479b7524bf",
"skills/gsd-pause-work/SKILL.md": "35e8a148e44f5361",
"skills/gsd-phase/SKILL.md": "00be96e7ae36c6f0",
- "skills/gsd-plan-phase/SKILL.md": "a512ac3d14194133",
+ "skills/gsd-plan-phase/SKILL.md": "f64953d1af7b0f34",
"skills/gsd-plan-review-convergence/SKILL.md": "a42e226d17b69108",
"skills/gsd-pr-branch/SKILL.md": "c5e26f2c6dff1355",
"skills/gsd-profile-user/SKILL.md": "894eb2850ecd2dde",
diff --git a/tests/fixtures/golden-install-parity/cline.json b/tests/fixtures/golden-install-parity/cline.json
index 84ac13c4e..a09a3031b 100644
--- a/tests/fixtures/golden-install-parity/cline.json
+++ b/tests/fixtures/golden-install-parity/cline.json
@@ -210,10 +210,10 @@
"gsd-core/templates/verification-report.md": "dd5faa6254183731",
"gsd-core/workflows/_runtime-launcher.snippet.sh": "bf2dd5d1debd5335",
"gsd-core/workflows/add-backlog.md": "6c4393113fa9d209",
- "gsd-core/workflows/add-phase.md": "cac9b86f66ab26f5",
+ "gsd-core/workflows/add-phase.md": "2558614a81b9e977",
"gsd-core/workflows/add-tests.md": "0354376bffdc0080",
"gsd-core/workflows/add-todo.md": "aa89018230c87f13",
- "gsd-core/workflows/ai-integration-phase.md": "5159c6bdf102f74b",
+ "gsd-core/workflows/ai-integration-phase.md": "878d0a2c6eb08c88",
"gsd-core/workflows/analyze-dependencies.md": "52942af10f140717",
"gsd-core/workflows/audit-fix.md": "d6a41fc6879424f8",
"gsd-core/workflows/audit-milestone.md": "202b726748604c93",
@@ -284,7 +284,7 @@
"gsd-core/workflows/onboard.md": "6f9e6c0b484271a9",
"gsd-core/workflows/pause-work.md": "3530607514b0ac00",
"gsd-core/workflows/plan-milestone-gaps.md": "bafdc6945cd2bd87",
- "gsd-core/workflows/plan-phase.md": "32c4a6cb4937cce3",
+ "gsd-core/workflows/plan-phase.md": "a3b27f3832d62470",
"gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "b36f77ac7344a072",
"gsd-core/workflows/plan-phase/steps/prd-express-path.md": "4b0a2cb0f4f28179",
"gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "090c31e22b1508fe",
@@ -394,7 +394,7 @@
"skills/gsd-ns-review/skills/validate-phase/SKILL.md": "62dc6ae62bb38c16",
"skills/gsd-ns-workflow/SKILL.md": "0cb9c23c065fe448",
"skills/gsd-ns-workflow/skills/add-tests/SKILL.md": "addc3a220961a9c7",
- "skills/gsd-ns-workflow/skills/ai-integration-phase/SKILL.md": "e74b83a991dc9fc7",
+ "skills/gsd-ns-workflow/skills/ai-integration-phase/SKILL.md": "0b1553cb7f4c8f7a",
"skills/gsd-ns-workflow/skills/autonomous/SKILL.md": "37dc7b78ceb74803",
"skills/gsd-ns-workflow/skills/discuss-phase/SKILL.md": "fedb2e2c77ff82ae",
"skills/gsd-ns-workflow/skills/execute-phase/SKILL.md": "e249a35959e49e99",
@@ -402,7 +402,7 @@
"skills/gsd-ns-workflow/skills/mvp-phase/SKILL.md": "6c2beccceb46fda1",
"skills/gsd-ns-workflow/skills/next/SKILL.md": "3856471d0f64bf09",
"skills/gsd-ns-workflow/skills/phase/SKILL.md": "4e1363db6013a1e5",
- "skills/gsd-ns-workflow/skills/plan-phase/SKILL.md": "643641b45747815e",
+ "skills/gsd-ns-workflow/skills/plan-phase/SKILL.md": "5796e8744314dcf5",
"skills/gsd-ns-workflow/skills/plan-review-convergence/SKILL.md": "d44c5d4d78cbee13",
"skills/gsd-ns-workflow/skills/progress/SKILL.md": "493f467c22d55b6b",
"skills/gsd-ns-workflow/skills/quick/SKILL.md": "605e596c680cbb1c",
diff --git a/tests/fixtures/golden-install-parity/codebuddy.json b/tests/fixtures/golden-install-parity/codebuddy.json
index 380fcc5cd..b200f7a7a 100644
--- a/tests/fixtures/golden-install-parity/codebuddy.json
+++ b/tests/fixtures/golden-install-parity/codebuddy.json
@@ -36,7 +36,7 @@
"agents/gsd-user-profiler.md": "622220df0654b6bf",
"agents/gsd-verifier.md": "c8a8c73a277a512f",
"commands/gsd-add-tests.md": "aa65032141557fb7",
- "commands/gsd-ai-integration-phase.md": "373053d7cd887aa9",
+ "commands/gsd-ai-integration-phase.md": "6199b7198f928adc",
"commands/gsd-audit-fix.md": "c21ef925131fade7",
"commands/gsd-audit-milestone.md": "accbb975f85df506",
"commands/gsd-audit-uat.md": "f34f9d211780c8e7",
@@ -79,7 +79,7 @@
"commands/gsd-onboard.md": "63283b90aa671229",
"commands/gsd-pause-work.md": "6caa75a7c2b4dd2d",
"commands/gsd-phase.md": "e3ca4958ea20a935",
- "commands/gsd-plan-phase.md": "03e08147bee2e446",
+ "commands/gsd-plan-phase.md": "ad988a271bf20e9c",
"commands/gsd-plan-review-convergence.md": "3d8837015534969f",
"commands/gsd-pr-branch.md": "f5be514b9f69eaf5",
"commands/gsd-profile-user.md": "7a9289910719d828",
@@ -278,10 +278,10 @@
"gsd-core/templates/verification-report.md": "dd5faa6254183731",
"gsd-core/workflows/_runtime-launcher.snippet.sh": "bf2dd5d1debd5335",
"gsd-core/workflows/add-backlog.md": "1bc7377b105194fc",
- "gsd-core/workflows/add-phase.md": "46e0551ffdd8ce1a",
+ "gsd-core/workflows/add-phase.md": "ac43883e2d8e34d8",
"gsd-core/workflows/add-tests.md": "24b0d8157a9ccb8b",
"gsd-core/workflows/add-todo.md": "953314cdfef56bc4",
- "gsd-core/workflows/ai-integration-phase.md": "40c217869a06981f",
+ "gsd-core/workflows/ai-integration-phase.md": "45c727e49de71636",
"gsd-core/workflows/analyze-dependencies.md": "52942af10f140717",
"gsd-core/workflows/audit-fix.md": "ca751f6538c8f496",
"gsd-core/workflows/audit-milestone.md": "3835762c3147a927",
@@ -352,7 +352,7 @@
"gsd-core/workflows/onboard.md": "6f9e6c0b484271a9",
"gsd-core/workflows/pause-work.md": "f2b33bba5593d422",
"gsd-core/workflows/plan-milestone-gaps.md": "852f6d7c0c4299dc",
- "gsd-core/workflows/plan-phase.md": "5124211d53f66feb",
+ "gsd-core/workflows/plan-phase.md": "1d58b8554e8cc29a",
"gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "b36f77ac7344a072",
"gsd-core/workflows/plan-phase/steps/prd-express-path.md": "197c0590326371b2",
"gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "49f58c3f75be3eb5",
@@ -434,7 +434,7 @@
"scripts/lib/allowlist-ratchet.cjs": "ffaceaac3efc2660",
"scripts/lib/cli-exit.cjs": "612d0c372c75b7e7",
"skills/gsd-add-tests/SKILL.md": "60dd7f9779d5f493",
- "skills/gsd-ai-integration-phase/SKILL.md": "686ba35b47442cf4",
+ "skills/gsd-ai-integration-phase/SKILL.md": "eb9b5d76d91dd2fe",
"skills/gsd-audit-fix/SKILL.md": "309dcbc406750fd6",
"skills/gsd-audit-milestone/SKILL.md": "1f328f0c7448f27c",
"skills/gsd-audit-uat/SKILL.md": "597d4f8cd0fa5240",
@@ -477,7 +477,7 @@
"skills/gsd-onboard/SKILL.md": "6ad789a03124cd4f",
"skills/gsd-pause-work/SKILL.md": "e2de20b7539e78d4",
"skills/gsd-phase/SKILL.md": "f87211f779315ced",
- "skills/gsd-plan-phase/SKILL.md": "262e2e7ff694fc09",
+ "skills/gsd-plan-phase/SKILL.md": "5f00d90224127bd5",
"skills/gsd-plan-review-convergence/SKILL.md": "bbad9a21eacdbfcf",
"skills/gsd-pr-branch/SKILL.md": "87bb3306488565fb",
"skills/gsd-profile-user/SKILL.md": "ee8e8547298006b8",
diff --git a/tests/fixtures/golden-install-parity/codex.json b/tests/fixtures/golden-install-parity/codex.json
index e4be6d98f..0409958de 100644
--- a/tests/fixtures/golden-install-parity/codex.json
+++ b/tests/fixtures/golden-install-parity/codex.json
@@ -1,6 +1,6 @@
{
".agents/skills/gsd-add-tests/SKILL.md": "f3c1594a059de3ee",
- ".agents/skills/gsd-ai-integration-phase/SKILL.md": "ba4b5f406db6de96",
+ ".agents/skills/gsd-ai-integration-phase/SKILL.md": "279cc57f38c78756",
".agents/skills/gsd-audit-fix/SKILL.md": "9cea2764b92aa352",
".agents/skills/gsd-audit-milestone/SKILL.md": "0528ef8a5834b5df",
".agents/skills/gsd-audit-uat/SKILL.md": "6c2aa0c2b62c5233",
@@ -43,7 +43,7 @@
".agents/skills/gsd-onboard/SKILL.md": "f42fc2edebeda671",
".agents/skills/gsd-pause-work/SKILL.md": "b379469eed78a196",
".agents/skills/gsd-phase/SKILL.md": "25477edc97a90c91",
- ".agents/skills/gsd-plan-phase/SKILL.md": "c6f734135356faac",
+ ".agents/skills/gsd-plan-phase/SKILL.md": "0a7a22d226bcec30",
".agents/skills/gsd-plan-review-convergence/SKILL.md": "9a7ce3391c33139d",
".agents/skills/gsd-pr-branch/SKILL.md": "6901da15e321913e",
".agents/skills/gsd-profile-user/SKILL.md": "6259fabfb6afe7be",
@@ -313,10 +313,10 @@
"gsd-core/templates/verification-report.md": "78ab9264ce63ed7e",
"gsd-core/workflows/_runtime-launcher.snippet.sh": "bf2dd5d1debd5335",
"gsd-core/workflows/add-backlog.md": "62431b27424ff1ff",
- "gsd-core/workflows/add-phase.md": "27f282bf5b8af59d",
+ "gsd-core/workflows/add-phase.md": "d7a401b48271964f",
"gsd-core/workflows/add-tests.md": "5cdb15508c4b6075",
"gsd-core/workflows/add-todo.md": "776e554602e3d1b7",
- "gsd-core/workflows/ai-integration-phase.md": "1dfa15d8f28c022d",
+ "gsd-core/workflows/ai-integration-phase.md": "d46f7e1a0b24345a",
"gsd-core/workflows/analyze-dependencies.md": "f799abc00907377f",
"gsd-core/workflows/audit-fix.md": "ca751f6538c8f496",
"gsd-core/workflows/audit-milestone.md": "5f362cead97ceaca",
@@ -387,7 +387,7 @@
"gsd-core/workflows/onboard.md": "83c40ba7055b8b24",
"gsd-core/workflows/pause-work.md": "a217770ecafcb2e0",
"gsd-core/workflows/plan-milestone-gaps.md": "73d46f77c50a0690",
- "gsd-core/workflows/plan-phase.md": "395fe273b017b2ff",
+ "gsd-core/workflows/plan-phase.md": "4b0010d581ccce22",
"gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "d838b87563feedf6",
"gsd-core/workflows/plan-phase/steps/prd-express-path.md": "f10975692cbd036e",
"gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "f5edc589cab52a7b",
diff --git a/tests/fixtures/golden-install-parity/copilot.json b/tests/fixtures/golden-install-parity/copilot.json
index d0e7cc629..6d65be8ac 100644
--- a/tests/fixtures/golden-install-parity/copilot.json
+++ b/tests/fixtures/golden-install-parity/copilot.json
@@ -208,10 +208,10 @@
"gsd-core/templates/verification-report.md": "78ab9264ce63ed7e",
"gsd-core/workflows/_runtime-launcher.snippet.sh": "bf2dd5d1debd5335",
"gsd-core/workflows/add-backlog.md": "98f2dbb7c7cc93c2",
- "gsd-core/workflows/add-phase.md": "34e6dd38c25b5b61",
+ "gsd-core/workflows/add-phase.md": "f4fbfad54be5d46f",
"gsd-core/workflows/add-tests.md": "7f5da4d2a9fa8a1a",
"gsd-core/workflows/add-todo.md": "f86f4efa25a5d0d6",
- "gsd-core/workflows/ai-integration-phase.md": "ef0c2474cee76b00",
+ "gsd-core/workflows/ai-integration-phase.md": "9dd7f80180f9c8e9",
"gsd-core/workflows/analyze-dependencies.md": "77aff48f97fa6f1c",
"gsd-core/workflows/audit-fix.md": "646fc39302300887",
"gsd-core/workflows/audit-milestone.md": "258e4dfd259ab13f",
@@ -282,7 +282,7 @@
"gsd-core/workflows/onboard.md": "a62602c6f3fd538a",
"gsd-core/workflows/pause-work.md": "9ce66367be6c40db",
"gsd-core/workflows/plan-milestone-gaps.md": "5cf589802d08bdf3",
- "gsd-core/workflows/plan-phase.md": "ab96c552cc86d2cc",
+ "gsd-core/workflows/plan-phase.md": "b72262aa58c82429",
"gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "4099ef6d0868de60",
"gsd-core/workflows/plan-phase/steps/prd-express-path.md": "bb052483744f0a6d",
"gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "e9de7a96bbfff261",
@@ -337,7 +337,7 @@
"scripts/lib/allowlist-ratchet.cjs": "ffaceaac3efc2660",
"scripts/lib/cli-exit.cjs": "612d0c372c75b7e7",
"skills/gsd-add-tests/SKILL.md": "dfe3f8a07f34c438",
- "skills/gsd-ai-integration-phase/SKILL.md": "7cdaa253924740b0",
+ "skills/gsd-ai-integration-phase/SKILL.md": "22593b80a1f3e340",
"skills/gsd-audit-fix/SKILL.md": "ac3e209167e2171a",
"skills/gsd-audit-milestone/SKILL.md": "faa9473569f5fa4b",
"skills/gsd-audit-uat/SKILL.md": "00f0a430a5c43da0",
@@ -380,7 +380,7 @@
"skills/gsd-onboard/SKILL.md": "4d325f3033df2d37",
"skills/gsd-pause-work/SKILL.md": "4f0caa008a8001ff",
"skills/gsd-phase/SKILL.md": "d38c7f9b1d0d2360",
- "skills/gsd-plan-phase/SKILL.md": "7761a2f06ac98b30",
+ "skills/gsd-plan-phase/SKILL.md": "d1ba21e500bf62a8",
"skills/gsd-plan-review-convergence/SKILL.md": "d6b850077d62d723",
"skills/gsd-pr-branch/SKILL.md": "9cd9740db385d95a",
"skills/gsd-profile-user/SKILL.md": "052a8e17ecda40f1",
diff --git a/tests/fixtures/golden-install-parity/cursor.json b/tests/fixtures/golden-install-parity/cursor.json
index cced95471..01cfbd301 100644
--- a/tests/fixtures/golden-install-parity/cursor.json
+++ b/tests/fixtures/golden-install-parity/cursor.json
@@ -36,7 +36,7 @@
"agents/gsd-user-profiler.md": "622220df0654b6bf",
"agents/gsd-verifier.md": "dea8e61123848fb4",
"commands/gsd-add-tests.md": "1f89b16ab2cca426",
- "commands/gsd-ai-integration-phase.md": "3ccac39673ffb92c",
+ "commands/gsd-ai-integration-phase.md": "99f66291ded1899d",
"commands/gsd-audit-fix.md": "d88502ffa2151cec",
"commands/gsd-audit-milestone.md": "db525e85095d268a",
"commands/gsd-audit-uat.md": "70d1d0f175734d8f",
@@ -79,7 +79,7 @@
"commands/gsd-onboard.md": "d9e52f558fc2b90f",
"commands/gsd-pause-work.md": "59630f05f95fff68",
"commands/gsd-phase.md": "9a073dcd0f934f90",
- "commands/gsd-plan-phase.md": "462995ee69ba35b4",
+ "commands/gsd-plan-phase.md": "d9bdd3726e9c3dff",
"commands/gsd-plan-review-convergence.md": "04d89318e0e23a1b",
"commands/gsd-pr-branch.md": "ef2eedb0ed4295da",
"commands/gsd-profile-user.md": "0e99de36619c3b7d",
@@ -278,10 +278,10 @@
"gsd-core/templates/verification-report.md": "dd5faa6254183731",
"gsd-core/workflows/_runtime-launcher.snippet.sh": "bf2dd5d1debd5335",
"gsd-core/workflows/add-backlog.md": "2926457ed07b4500",
- "gsd-core/workflows/add-phase.md": "0d90083e9c17bec1",
+ "gsd-core/workflows/add-phase.md": "b2c06b7ed648658c",
"gsd-core/workflows/add-tests.md": "37f031c4b3236a32",
"gsd-core/workflows/add-todo.md": "1ee0525664fb062f",
- "gsd-core/workflows/ai-integration-phase.md": "b79f320d59a68773",
+ "gsd-core/workflows/ai-integration-phase.md": "a349e94b18839873",
"gsd-core/workflows/analyze-dependencies.md": "77aff48f97fa6f1c",
"gsd-core/workflows/audit-fix.md": "ca751f6538c8f496",
"gsd-core/workflows/audit-milestone.md": "9f8ec364e58d5710",
@@ -352,7 +352,7 @@
"gsd-core/workflows/onboard.md": "20c28136423d40ac",
"gsd-core/workflows/pause-work.md": "5716362557f44ce4",
"gsd-core/workflows/plan-milestone-gaps.md": "1b43d12812f7bc1e",
- "gsd-core/workflows/plan-phase.md": "2aa913f604e21704",
+ "gsd-core/workflows/plan-phase.md": "abe2eb62620f372f",
"gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "e06ccd4d4c0703fb",
"gsd-core/workflows/plan-phase/steps/prd-express-path.md": "197c0590326371b2",
"gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "3bed01c3c906ac52",
@@ -412,7 +412,7 @@
"scripts/lib/allowlist-ratchet.cjs": "ffaceaac3efc2660",
"scripts/lib/cli-exit.cjs": "612d0c372c75b7e7",
"skills/gsd-add-tests/SKILL.md": "1719810d0f8dd79e",
- "skills/gsd-ai-integration-phase/SKILL.md": "9c8242023a8bcc29",
+ "skills/gsd-ai-integration-phase/SKILL.md": "56ee07ad9596c6f3",
"skills/gsd-audit-fix/SKILL.md": "2d2ee3894efbee1c",
"skills/gsd-audit-milestone/SKILL.md": "d953bd7170402fc3",
"skills/gsd-audit-uat/SKILL.md": "97794348d617f873",
@@ -455,7 +455,7 @@
"skills/gsd-onboard/SKILL.md": "c7f216749ba4c09c",
"skills/gsd-pause-work/SKILL.md": "7d310e7329b7ae7d",
"skills/gsd-phase/SKILL.md": "49fca93e5f2ccc70",
- "skills/gsd-plan-phase/SKILL.md": "62dc688c24e59f18",
+ "skills/gsd-plan-phase/SKILL.md": "c5e1a4ab2ede399a",
"skills/gsd-plan-review-convergence/SKILL.md": "c2793cacf3f40d70",
"skills/gsd-pr-branch/SKILL.md": "a8f8838a6aa5e1dd",
"skills/gsd-profile-user/SKILL.md": "3be8d50399836ef2",
diff --git a/tests/fixtures/golden-install-parity/hermes.json b/tests/fixtures/golden-install-parity/hermes.json
index 985d27178..b85dec2f3 100644
--- a/tests/fixtures/golden-install-parity/hermes.json
+++ b/tests/fixtures/golden-install-parity/hermes.json
@@ -207,10 +207,10 @@
"gsd-core/templates/verification-report.md": "dd5faa6254183731",
"gsd-core/workflows/_runtime-launcher.snippet.sh": "bf2dd5d1debd5335",
"gsd-core/workflows/add-backlog.md": "79a453a2270483fb",
- "gsd-core/workflows/add-phase.md": "b4c4b32c111a116a",
+ "gsd-core/workflows/add-phase.md": "2a6452fc51339b9c",
"gsd-core/workflows/add-tests.md": "02f9e11ad2371c00",
"gsd-core/workflows/add-todo.md": "8ba173153be63a40",
- "gsd-core/workflows/ai-integration-phase.md": "ddab2912d025db65",
+ "gsd-core/workflows/ai-integration-phase.md": "753a41301e4d2a4c",
"gsd-core/workflows/analyze-dependencies.md": "77aff48f97fa6f1c",
"gsd-core/workflows/audit-fix.md": "bf84c94d2ccdacbf",
"gsd-core/workflows/audit-milestone.md": "b96a78c6bd2e7690",
@@ -281,7 +281,7 @@
"gsd-core/workflows/onboard.md": "3c50ed1f1fd07619",
"gsd-core/workflows/pause-work.md": "ae2d5789a95f70fe",
"gsd-core/workflows/plan-milestone-gaps.md": "c86cdc1964256b98",
- "gsd-core/workflows/plan-phase.md": "2f0c5b0b66ebcf1d",
+ "gsd-core/workflows/plan-phase.md": "c181932975852b0e",
"gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "4099ef6d0868de60",
"gsd-core/workflows/plan-phase/steps/prd-express-path.md": "9607e6d03e93c1c2",
"gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "62f8e4f3b475fe5f",
@@ -420,7 +420,7 @@
"skills/gsd/gsd-ns-review/skills/validate-phase/SKILL.md": "f2c31c34fc8e24c4",
"skills/gsd/gsd-ns-workflow/SKILL.md": "f54502a2c6bf5495",
"skills/gsd/gsd-ns-workflow/skills/add-tests/SKILL.md": "29e5863322ad6f2d",
- "skills/gsd/gsd-ns-workflow/skills/ai-integration-phase/SKILL.md": "317912c0488d701b",
+ "skills/gsd/gsd-ns-workflow/skills/ai-integration-phase/SKILL.md": "97eb01851d368d50",
"skills/gsd/gsd-ns-workflow/skills/autonomous/SKILL.md": "3c9bc726e13c4916",
"skills/gsd/gsd-ns-workflow/skills/discuss-phase/SKILL.md": "326303209b745eea",
"skills/gsd/gsd-ns-workflow/skills/execute-phase/SKILL.md": "a2e4e6211e09b3c0",
@@ -428,7 +428,7 @@
"skills/gsd/gsd-ns-workflow/skills/mvp-phase/SKILL.md": "0804dfd4124526ba",
"skills/gsd/gsd-ns-workflow/skills/next/SKILL.md": "1d30cf6061d15168",
"skills/gsd/gsd-ns-workflow/skills/phase/SKILL.md": "610bd06d71198849",
- "skills/gsd/gsd-ns-workflow/skills/plan-phase/SKILL.md": "cb1cf29451588047",
+ "skills/gsd/gsd-ns-workflow/skills/plan-phase/SKILL.md": "e564bd88707a0e69",
"skills/gsd/gsd-ns-workflow/skills/plan-review-convergence/SKILL.md": "87e5f3a0c1f2a6af",
"skills/gsd/gsd-ns-workflow/skills/progress/SKILL.md": "6ec0e4715dde7ee2",
"skills/gsd/gsd-ns-workflow/skills/quick/SKILL.md": "65e377345e9c49a8",
diff --git a/tests/fixtures/golden-install-parity/kilo.json b/tests/fixtures/golden-install-parity/kilo.json
index 9583bb9e3..978bf7dd2 100644
--- a/tests/fixtures/golden-install-parity/kilo.json
+++ b/tests/fixtures/golden-install-parity/kilo.json
@@ -36,7 +36,7 @@
"agents/gsd-user-profiler.md": "b8cb09319c517701",
"agents/gsd-verifier.md": "af609b1959cde3f3",
"command/gsd-add-tests.md": "c314f9a6be312bfa",
- "command/gsd-ai-integration-phase.md": "bbab86a540e00db5",
+ "command/gsd-ai-integration-phase.md": "9c47e446af993c53",
"command/gsd-audit-fix.md": "4106e9dce9b71585",
"command/gsd-audit-milestone.md": "0f627d956b5030ed",
"command/gsd-audit-uat.md": "119f204ca3cd0cd6",
@@ -79,7 +79,7 @@
"command/gsd-onboard.md": "3e87a21c9c04f0d7",
"command/gsd-pause-work.md": "04e993b1c9f8322b",
"command/gsd-phase.md": "8f0e98dc6c223229",
- "command/gsd-plan-phase.md": "5ef48b00031b341c",
+ "command/gsd-plan-phase.md": "8c39408407b6bf9f",
"command/gsd-plan-review-convergence.md": "45060e2c490fcae7",
"command/gsd-pr-branch.md": "68e724607de3c480",
"command/gsd-profile-user.md": "9704158b2d79cad2",
@@ -278,10 +278,10 @@
"gsd-core/templates/verification-report.md": "78ab9264ce63ed7e",
"gsd-core/workflows/_runtime-launcher.snippet.sh": "bf2dd5d1debd5335",
"gsd-core/workflows/add-backlog.md": "485c4b6673ddf832",
- "gsd-core/workflows/add-phase.md": "0d90083e9c17bec1",
+ "gsd-core/workflows/add-phase.md": "b2c06b7ed648658c",
"gsd-core/workflows/add-tests.md": "6e54f3d71a202671",
"gsd-core/workflows/add-todo.md": "31bc520d77b14139",
- "gsd-core/workflows/ai-integration-phase.md": "c85c6afdc64f0da6",
+ "gsd-core/workflows/ai-integration-phase.md": "d4400169618e6925",
"gsd-core/workflows/analyze-dependencies.md": "77aff48f97fa6f1c",
"gsd-core/workflows/audit-fix.md": "ca751f6538c8f496",
"gsd-core/workflows/audit-milestone.md": "9f8ec364e58d5710",
@@ -352,7 +352,7 @@
"gsd-core/workflows/onboard.md": "78b288089305dc46",
"gsd-core/workflows/pause-work.md": "a6e5336c409fdc8b",
"gsd-core/workflows/plan-milestone-gaps.md": "1b43d12812f7bc1e",
- "gsd-core/workflows/plan-phase.md": "aca787850411c004",
+ "gsd-core/workflows/plan-phase.md": "5ed4eaa6691f76fd",
"gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "4099ef6d0868de60",
"gsd-core/workflows/plan-phase/steps/prd-express-path.md": "f10975692cbd036e",
"gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "e9de7a96bbfff261",
@@ -436,7 +436,7 @@
"scripts/lib/allowlist-ratchet.cjs": "ffaceaac3efc2660",
"scripts/lib/cli-exit.cjs": "612d0c372c75b7e7",
"skills/gsd-add-tests/SKILL.md": "addc3a220961a9c7",
- "skills/gsd-ai-integration-phase/SKILL.md": "e74b83a991dc9fc7",
+ "skills/gsd-ai-integration-phase/SKILL.md": "0b1553cb7f4c8f7a",
"skills/gsd-audit-fix/SKILL.md": "2c1f601f2fb52585",
"skills/gsd-audit-milestone/SKILL.md": "739ed755ad84e58e",
"skills/gsd-audit-uat/SKILL.md": "2c450432b6fd1c3e",
@@ -479,7 +479,7 @@
"skills/gsd-onboard/SKILL.md": "0e3cc902f44b41b8",
"skills/gsd-pause-work/SKILL.md": "34366b18a392a717",
"skills/gsd-phase/SKILL.md": "64a241d4f8665aa2",
- "skills/gsd-plan-phase/SKILL.md": "fd51709d82eb05b6",
+ "skills/gsd-plan-phase/SKILL.md": "c95d9376440c4725",
"skills/gsd-plan-review-convergence/SKILL.md": "fb7355db56f5eaec",
"skills/gsd-pr-branch/SKILL.md": "a80da6aa95efc50d",
"skills/gsd-profile-user/SKILL.md": "4ac2c5ea45d17a9d",
diff --git a/tests/fixtures/golden-install-parity/kimi.json b/tests/fixtures/golden-install-parity/kimi.json
index 09e5b64f5..4cfeb42d2 100644
--- a/tests/fixtures/golden-install-parity/kimi.json
+++ b/tests/fixtures/golden-install-parity/kimi.json
@@ -271,10 +271,10 @@
"gsd-core/templates/verification-report.md": "dd5faa6254183731",
"gsd-core/workflows/_runtime-launcher.snippet.sh": "bf2dd5d1debd5335",
"gsd-core/workflows/add-backlog.md": "1bc7377b105194fc",
- "gsd-core/workflows/add-phase.md": "46e0551ffdd8ce1a",
+ "gsd-core/workflows/add-phase.md": "ac43883e2d8e34d8",
"gsd-core/workflows/add-tests.md": "24b0d8157a9ccb8b",
"gsd-core/workflows/add-todo.md": "953314cdfef56bc4",
- "gsd-core/workflows/ai-integration-phase.md": "40c217869a06981f",
+ "gsd-core/workflows/ai-integration-phase.md": "45c727e49de71636",
"gsd-core/workflows/analyze-dependencies.md": "52942af10f140717",
"gsd-core/workflows/audit-fix.md": "ca751f6538c8f496",
"gsd-core/workflows/audit-milestone.md": "3835762c3147a927",
@@ -345,7 +345,7 @@
"gsd-core/workflows/onboard.md": "6f9e6c0b484271a9",
"gsd-core/workflows/pause-work.md": "f2b33bba5593d422",
"gsd-core/workflows/plan-milestone-gaps.md": "852f6d7c0c4299dc",
- "gsd-core/workflows/plan-phase.md": "851eb6ba0bc911b9",
+ "gsd-core/workflows/plan-phase.md": "a0e6a19b0cec72ed",
"gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "b36f77ac7344a072",
"gsd-core/workflows/plan-phase/steps/prd-express-path.md": "197c0590326371b2",
"gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "49f58c3f75be3eb5",
@@ -399,7 +399,7 @@
"scripts/lib/allowlist-ratchet.cjs": "ffaceaac3efc2660",
"scripts/lib/cli-exit.cjs": "612d0c372c75b7e7",
"skills/gsd-add-tests/SKILL.md": "217fc2587d3e7ec2",
- "skills/gsd-ai-integration-phase/SKILL.md": "739a1376f6f56094",
+ "skills/gsd-ai-integration-phase/SKILL.md": "949c29f9a6f4a256",
"skills/gsd-audit-fix/SKILL.md": "ed585da70ba6da12",
"skills/gsd-audit-milestone/SKILL.md": "ad78e50cef304155",
"skills/gsd-audit-uat/SKILL.md": "b8e73cbb993a30e2",
@@ -442,7 +442,7 @@
"skills/gsd-onboard/SKILL.md": "fd66b3c5b9c6a871",
"skills/gsd-pause-work/SKILL.md": "95017c70ae9dca0d",
"skills/gsd-phase/SKILL.md": "31578c329cc2583e",
- "skills/gsd-plan-phase/SKILL.md": "4c2c6641f59f6496",
+ "skills/gsd-plan-phase/SKILL.md": "83362394f648deeb",
"skills/gsd-plan-review-convergence/SKILL.md": "ab63cb338105d27f",
"skills/gsd-pr-branch/SKILL.md": "67f468db29ff2cf1",
"skills/gsd-profile-user/SKILL.md": "19a1d3aba57f6c7c",
diff --git a/tests/fixtures/golden-install-parity/opencode.json b/tests/fixtures/golden-install-parity/opencode.json
index 996dd209d..b3535d6bb 100644
--- a/tests/fixtures/golden-install-parity/opencode.json
+++ b/tests/fixtures/golden-install-parity/opencode.json
@@ -36,7 +36,7 @@
"agents/gsd-user-profiler.md": "d825b4c0a6431f8b",
"agents/gsd-verifier.md": "b9f2e801f9395a35",
"commands/gsd-add-tests.md": "b9cd93ed01945f75",
- "commands/gsd-ai-integration-phase.md": "9d4bc4dcce7f1ee0",
+ "commands/gsd-ai-integration-phase.md": "038709fe91d897e4",
"commands/gsd-audit-fix.md": "5615403843d5e491",
"commands/gsd-audit-milestone.md": "4c700c081f3918ba",
"commands/gsd-audit-uat.md": "47dce58d5823da8d",
@@ -79,7 +79,7 @@
"commands/gsd-onboard.md": "3aafaeb5d3941efe",
"commands/gsd-pause-work.md": "bb5bf91a2e3e480e",
"commands/gsd-phase.md": "6bcda1539f949d5a",
- "commands/gsd-plan-phase.md": "2c673275cb9517fe",
+ "commands/gsd-plan-phase.md": "4e19ddc0ca22fbf6",
"commands/gsd-plan-review-convergence.md": "88c4284aa8b3dd7e",
"commands/gsd-pr-branch.md": "31fca4f1d6c4ee62",
"commands/gsd-profile-user.md": "725c14ae7203b5b6",
@@ -278,10 +278,10 @@
"gsd-core/templates/verification-report.md": "78ab9264ce63ed7e",
"gsd-core/workflows/_runtime-launcher.snippet.sh": "bf2dd5d1debd5335",
"gsd-core/workflows/add-backlog.md": "08289088a88d410f",
- "gsd-core/workflows/add-phase.md": "5154a5fb3e0d4370",
+ "gsd-core/workflows/add-phase.md": "739e34f6122e1e61",
"gsd-core/workflows/add-tests.md": "b4deb88c74d491c7",
"gsd-core/workflows/add-todo.md": "36b6d7fec9631ec7",
- "gsd-core/workflows/ai-integration-phase.md": "90e5f97018715b18",
+ "gsd-core/workflows/ai-integration-phase.md": "f8288f0434d17c84",
"gsd-core/workflows/analyze-dependencies.md": "77aff48f97fa6f1c",
"gsd-core/workflows/audit-fix.md": "20d2c2a6c49e750b",
"gsd-core/workflows/audit-milestone.md": "8bd0b730de08d1a8",
@@ -352,7 +352,7 @@
"gsd-core/workflows/onboard.md": "102556e1715c01b9",
"gsd-core/workflows/pause-work.md": "70c72beca55c080a",
"gsd-core/workflows/plan-milestone-gaps.md": "0a9dacd422cd9533",
- "gsd-core/workflows/plan-phase.md": "b252c6e1427d508e",
+ "gsd-core/workflows/plan-phase.md": "bb029bf7a3d3c6ef",
"gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "4099ef6d0868de60",
"gsd-core/workflows/plan-phase/steps/prd-express-path.md": "3a09141de7f3dedb",
"gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "e9de7a96bbfff261",
@@ -436,7 +436,7 @@
"scripts/lib/allowlist-ratchet.cjs": "ffaceaac3efc2660",
"scripts/lib/cli-exit.cjs": "612d0c372c75b7e7",
"skills/gsd-add-tests/SKILL.md": "f60794b90b48cbac",
- "skills/gsd-ai-integration-phase/SKILL.md": "868ca7c86ef61033",
+ "skills/gsd-ai-integration-phase/SKILL.md": "d2418122ba6f6330",
"skills/gsd-audit-fix/SKILL.md": "740d255df04b6e93",
"skills/gsd-audit-milestone/SKILL.md": "68b57f54877f35a9",
"skills/gsd-audit-uat/SKILL.md": "d73e6e175a711ed9",
@@ -479,7 +479,7 @@
"skills/gsd-onboard/SKILL.md": "ea0b1217e5ecae23",
"skills/gsd-pause-work/SKILL.md": "c7e9ba4f242c4648",
"skills/gsd-phase/SKILL.md": "ee78c0c56c814d84",
- "skills/gsd-plan-phase/SKILL.md": "c9b3b5cb0fbb42a9",
+ "skills/gsd-plan-phase/SKILL.md": "4b65f0a9d7d42ec7",
"skills/gsd-plan-review-convergence/SKILL.md": "78820e21dd05d5d4",
"skills/gsd-pr-branch/SKILL.md": "8fa5a8fa217fe913",
"skills/gsd-profile-user/SKILL.md": "3e6155a64523d59f",
diff --git a/tests/fixtures/golden-install-parity/pi.json b/tests/fixtures/golden-install-parity/pi.json
index 30bf878f2..db22f6b1f 100644
--- a/tests/fixtures/golden-install-parity/pi.json
+++ b/tests/fixtures/golden-install-parity/pi.json
@@ -174,10 +174,10 @@
"gsd-core/templates/verification-report.md": "dd5faa6254183731",
"gsd-core/workflows/_runtime-launcher.snippet.sh": "bf2dd5d1debd5335",
"gsd-core/workflows/add-backlog.md": "1bc7377b105194fc",
- "gsd-core/workflows/add-phase.md": "46e0551ffdd8ce1a",
+ "gsd-core/workflows/add-phase.md": "ac43883e2d8e34d8",
"gsd-core/workflows/add-tests.md": "24b0d8157a9ccb8b",
"gsd-core/workflows/add-todo.md": "953314cdfef56bc4",
- "gsd-core/workflows/ai-integration-phase.md": "40c217869a06981f",
+ "gsd-core/workflows/ai-integration-phase.md": "45c727e49de71636",
"gsd-core/workflows/analyze-dependencies.md": "52942af10f140717",
"gsd-core/workflows/audit-fix.md": "ca751f6538c8f496",
"gsd-core/workflows/audit-milestone.md": "3835762c3147a927",
@@ -248,7 +248,7 @@
"gsd-core/workflows/onboard.md": "6f9e6c0b484271a9",
"gsd-core/workflows/pause-work.md": "f2b33bba5593d422",
"gsd-core/workflows/plan-milestone-gaps.md": "852f6d7c0c4299dc",
- "gsd-core/workflows/plan-phase.md": "915e5aee921c011f",
+ "gsd-core/workflows/plan-phase.md": "d04009957f972f33",
"gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "b36f77ac7344a072",
"gsd-core/workflows/plan-phase/steps/prd-express-path.md": "197c0590326371b2",
"gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "49f58c3f75be3eb5",
diff --git a/tests/fixtures/golden-install-parity/qwen.json b/tests/fixtures/golden-install-parity/qwen.json
index 1514e33cf..2c338a664 100644
--- a/tests/fixtures/golden-install-parity/qwen.json
+++ b/tests/fixtures/golden-install-parity/qwen.json
@@ -207,10 +207,10 @@
"gsd-core/templates/verification-report.md": "dd5faa6254183731",
"gsd-core/workflows/_runtime-launcher.snippet.sh": "bf2dd5d1debd5335",
"gsd-core/workflows/add-backlog.md": "cee41d5fc52d4e37",
- "gsd-core/workflows/add-phase.md": "cc63a3e108c9a065",
+ "gsd-core/workflows/add-phase.md": "395fb0f9f0385073",
"gsd-core/workflows/add-tests.md": "7cd945118e83246e",
"gsd-core/workflows/add-todo.md": "83426131a56b8e77",
- "gsd-core/workflows/ai-integration-phase.md": "afdc7c15f03a95fc",
+ "gsd-core/workflows/ai-integration-phase.md": "dd58ee9044bdf3c2",
"gsd-core/workflows/analyze-dependencies.md": "77aff48f97fa6f1c",
"gsd-core/workflows/audit-fix.md": "fe2e5a89d158f9eb",
"gsd-core/workflows/audit-milestone.md": "78dbc1e8c4499d7d",
@@ -281,7 +281,7 @@
"gsd-core/workflows/onboard.md": "3c50ed1f1fd07619",
"gsd-core/workflows/pause-work.md": "be33f84dc1d4822f",
"gsd-core/workflows/plan-milestone-gaps.md": "d98e98486123eb97",
- "gsd-core/workflows/plan-phase.md": "2b0110c2cd8de18a",
+ "gsd-core/workflows/plan-phase.md": "0e4471f6bff26866",
"gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "4099ef6d0868de60",
"gsd-core/workflows/plan-phase/steps/prd-express-path.md": "c22ff5ea46de665a",
"gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "d050d8d551ed1756",
@@ -419,7 +419,7 @@
"skills/gsd-ns-review/skills/validate-phase/SKILL.md": "70375e2381319d2b",
"skills/gsd-ns-workflow/SKILL.md": "5a65f9fb93a71cec",
"skills/gsd-ns-workflow/skills/add-tests/SKILL.md": "6661195a66f25ae8",
- "skills/gsd-ns-workflow/skills/ai-integration-phase/SKILL.md": "96c8151779ad510e",
+ "skills/gsd-ns-workflow/skills/ai-integration-phase/SKILL.md": "e58f7e9b779b8cee",
"skills/gsd-ns-workflow/skills/autonomous/SKILL.md": "fb57d2c08ea9e8bc",
"skills/gsd-ns-workflow/skills/discuss-phase/SKILL.md": "ff522155265107d2",
"skills/gsd-ns-workflow/skills/execute-phase/SKILL.md": "13518a22e020e1bf",
@@ -427,7 +427,7 @@
"skills/gsd-ns-workflow/skills/mvp-phase/SKILL.md": "f9a1348c6c297579",
"skills/gsd-ns-workflow/skills/next/SKILL.md": "13e394affe675498",
"skills/gsd-ns-workflow/skills/phase/SKILL.md": "1ed640e5f06c7be6",
- "skills/gsd-ns-workflow/skills/plan-phase/SKILL.md": "cdfe074359399099",
+ "skills/gsd-ns-workflow/skills/plan-phase/SKILL.md": "ff46b5450c9c4313",
"skills/gsd-ns-workflow/skills/plan-review-convergence/SKILL.md": "a42e226d17b69108",
"skills/gsd-ns-workflow/skills/progress/SKILL.md": "943538c4ac6bde19",
"skills/gsd-ns-workflow/skills/quick/SKILL.md": "bd5e4cb79bc41611",
diff --git a/tests/fixtures/golden-install-parity/trae.json b/tests/fixtures/golden-install-parity/trae.json
index 2734968b7..7128f0abe 100644
--- a/tests/fixtures/golden-install-parity/trae.json
+++ b/tests/fixtures/golden-install-parity/trae.json
@@ -207,10 +207,10 @@
"gsd-core/templates/verification-report.md": "dd5faa6254183731",
"gsd-core/workflows/_runtime-launcher.snippet.sh": "bf2dd5d1debd5335",
"gsd-core/workflows/add-backlog.md": "1851e97996d445d5",
- "gsd-core/workflows/add-phase.md": "09bdebbc62f3310e",
+ "gsd-core/workflows/add-phase.md": "7403cf0bc93a9699",
"gsd-core/workflows/add-tests.md": "8ad08d29415f8f43",
"gsd-core/workflows/add-todo.md": "fefa923ed596225f",
- "gsd-core/workflows/ai-integration-phase.md": "d469eb120e52de0f",
+ "gsd-core/workflows/ai-integration-phase.md": "197ebcc6abb0b873",
"gsd-core/workflows/analyze-dependencies.md": "77aff48f97fa6f1c",
"gsd-core/workflows/audit-fix.md": "2d4d783caf51f781",
"gsd-core/workflows/audit-milestone.md": "ebec95af8f68f2ed",
@@ -281,7 +281,7 @@
"gsd-core/workflows/onboard.md": "61f111302af0f404",
"gsd-core/workflows/pause-work.md": "c20d267e28ce92f0",
"gsd-core/workflows/plan-milestone-gaps.md": "26db7b9329b7ddc8",
- "gsd-core/workflows/plan-phase.md": "ab5ecd1e6a256c11",
+ "gsd-core/workflows/plan-phase.md": "8e0485af2536a0e8",
"gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "e06ccd4d4c0703fb",
"gsd-core/workflows/plan-phase/steps/prd-express-path.md": "778b73a8db6f7c32",
"gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "619946c879f33b9d",
@@ -391,7 +391,7 @@
"skills/gsd-ns-review/skills/validate-phase/SKILL.md": "536619be8c40ff5e",
"skills/gsd-ns-workflow/SKILL.md": "2c85abe6d78c7cf7",
"skills/gsd-ns-workflow/skills/add-tests/SKILL.md": "6e10735c8b18de8a",
- "skills/gsd-ns-workflow/skills/ai-integration-phase/SKILL.md": "b5cce2e6e801420d",
+ "skills/gsd-ns-workflow/skills/ai-integration-phase/SKILL.md": "8bbad0f4c9624d4e",
"skills/gsd-ns-workflow/skills/autonomous/SKILL.md": "a9d7374b631ae7b3",
"skills/gsd-ns-workflow/skills/discuss-phase/SKILL.md": "d2f1554b9faab0a1",
"skills/gsd-ns-workflow/skills/execute-phase/SKILL.md": "e05fc375d4b5f7b5",
@@ -399,7 +399,7 @@
"skills/gsd-ns-workflow/skills/mvp-phase/SKILL.md": "fef8178c9920c2dd",
"skills/gsd-ns-workflow/skills/next/SKILL.md": "faadd9e2817e7324",
"skills/gsd-ns-workflow/skills/phase/SKILL.md": "df3efcd61f7cc796",
- "skills/gsd-ns-workflow/skills/plan-phase/SKILL.md": "a937c8c42e5eaea3",
+ "skills/gsd-ns-workflow/skills/plan-phase/SKILL.md": "31962f06bc124c89",
"skills/gsd-ns-workflow/skills/plan-review-convergence/SKILL.md": "5c4475320977818f",
"skills/gsd-ns-workflow/skills/progress/SKILL.md": "37a37d2cdfba46ea",
"skills/gsd-ns-workflow/skills/quick/SKILL.md": "6fd1b96274b23a9f",
diff --git a/tests/fixtures/golden-install-parity/windsurf.json b/tests/fixtures/golden-install-parity/windsurf.json
index 4aa8487a5..89afadcc5 100644
--- a/tests/fixtures/golden-install-parity/windsurf.json
+++ b/tests/fixtures/golden-install-parity/windsurf.json
@@ -207,10 +207,10 @@
"gsd-core/templates/verification-report.md": "dd5faa6254183731",
"gsd-core/workflows/_runtime-launcher.snippet.sh": "bf2dd5d1debd5335",
"gsd-core/workflows/add-backlog.md": "61169973a10b1321",
- "gsd-core/workflows/add-phase.md": "f9b1f7cc229b57f8",
+ "gsd-core/workflows/add-phase.md": "78cca7f86793f7f8",
"gsd-core/workflows/add-tests.md": "d51e69bb433535a4",
"gsd-core/workflows/add-todo.md": "50d17053c6cfbc31",
- "gsd-core/workflows/ai-integration-phase.md": "8948988717506320",
+ "gsd-core/workflows/ai-integration-phase.md": "e556fe979752c52b",
"gsd-core/workflows/analyze-dependencies.md": "77aff48f97fa6f1c",
"gsd-core/workflows/audit-fix.md": "fe4d636f2dca6d74",
"gsd-core/workflows/audit-milestone.md": "868db5a8f5d55040",
@@ -281,7 +281,7 @@
"gsd-core/workflows/onboard.md": "20c28136423d40ac",
"gsd-core/workflows/pause-work.md": "93fcc1c845da6396",
"gsd-core/workflows/plan-milestone-gaps.md": "7880866ee1caf923",
- "gsd-core/workflows/plan-phase.md": "0404dbc786881567",
+ "gsd-core/workflows/plan-phase.md": "8b1522804296adfd",
"gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "e06ccd4d4c0703fb",
"gsd-core/workflows/plan-phase/steps/prd-express-path.md": "80b1ba493a9a967f",
"gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "3fed4740a91d0443",
diff --git a/tests/fixtures/golden-install-parity/zcode.json b/tests/fixtures/golden-install-parity/zcode.json
index 5e498dae7..1f87b07e1 100644
--- a/tests/fixtures/golden-install-parity/zcode.json
+++ b/tests/fixtures/golden-install-parity/zcode.json
@@ -36,7 +36,7 @@
"agents/gsd-user-profiler.md": "ca3bf75581f211a0",
"agents/gsd-verifier.md": "8282761ba471c022",
"commands/gsd-add-tests.md": "51542808862d4aa7",
- "commands/gsd-ai-integration-phase.md": "22b1e98786c2a43e",
+ "commands/gsd-ai-integration-phase.md": "a693c0ade172bc3d",
"commands/gsd-audit-fix.md": "24d7e5478c271584",
"commands/gsd-audit-milestone.md": "192c2d4979ef6a5e",
"commands/gsd-audit-uat.md": "a7ce7c63bf2db68e",
@@ -79,7 +79,7 @@
"commands/gsd-onboard.md": "a35340ce39334fc7",
"commands/gsd-pause-work.md": "40a953fcddbedb5d",
"commands/gsd-phase.md": "5dd3d40e3461a973",
- "commands/gsd-plan-phase.md": "3fd288ea8d4748e2",
+ "commands/gsd-plan-phase.md": "d6ba79bf0ede5bcd",
"commands/gsd-plan-review-convergence.md": "551597f2add981cb",
"commands/gsd-pr-branch.md": "ab1fcffe92129061",
"commands/gsd-profile-user.md": "37c9ef202669bfd3",
@@ -278,10 +278,10 @@
"gsd-core/templates/verification-report.md": "dd5faa6254183731",
"gsd-core/workflows/_runtime-launcher.snippet.sh": "bf2dd5d1debd5335",
"gsd-core/workflows/add-backlog.md": "1bc7377b105194fc",
- "gsd-core/workflows/add-phase.md": "46e0551ffdd8ce1a",
+ "gsd-core/workflows/add-phase.md": "ac43883e2d8e34d8",
"gsd-core/workflows/add-tests.md": "24b0d8157a9ccb8b",
"gsd-core/workflows/add-todo.md": "953314cdfef56bc4",
- "gsd-core/workflows/ai-integration-phase.md": "40c217869a06981f",
+ "gsd-core/workflows/ai-integration-phase.md": "45c727e49de71636",
"gsd-core/workflows/analyze-dependencies.md": "52942af10f140717",
"gsd-core/workflows/audit-fix.md": "ca751f6538c8f496",
"gsd-core/workflows/audit-milestone.md": "3835762c3147a927",
@@ -352,7 +352,7 @@
"gsd-core/workflows/onboard.md": "6f9e6c0b484271a9",
"gsd-core/workflows/pause-work.md": "f2b33bba5593d422",
"gsd-core/workflows/plan-milestone-gaps.md": "852f6d7c0c4299dc",
- "gsd-core/workflows/plan-phase.md": "d491791075b1aca9",
+ "gsd-core/workflows/plan-phase.md": "142484d37dfb94ed",
"gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "b36f77ac7344a072",
"gsd-core/workflows/plan-phase/steps/prd-express-path.md": "197c0590326371b2",
"gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "49f58c3f75be3eb5",
@@ -462,7 +462,7 @@
"skills/gsd-ns-review/skills/validate-phase/SKILL.md": "9e1c7909c089ee46",
"skills/gsd-ns-workflow/SKILL.md": "5a65f9fb93a71cec",
"skills/gsd-ns-workflow/skills/add-tests/SKILL.md": "303c01b7dd9c7614",
- "skills/gsd-ns-workflow/skills/ai-integration-phase/SKILL.md": "d30c04aeb1d09bb7",
+ "skills/gsd-ns-workflow/skills/ai-integration-phase/SKILL.md": "f0333bffe02141b7",
"skills/gsd-ns-workflow/skills/autonomous/SKILL.md": "f1c614fed8f4d0a5",
"skills/gsd-ns-workflow/skills/discuss-phase/SKILL.md": "997ae1063e8c3703",
"skills/gsd-ns-workflow/skills/execute-phase/SKILL.md": "b2627b774725a381",
@@ -470,7 +470,7 @@
"skills/gsd-ns-workflow/skills/mvp-phase/SKILL.md": "3455ea7562a447a2",
"skills/gsd-ns-workflow/skills/next/SKILL.md": "63659cd48a0276f9",
"skills/gsd-ns-workflow/skills/phase/SKILL.md": "b377b03d13db8573",
- "skills/gsd-ns-workflow/skills/plan-phase/SKILL.md": "c7cfcb8f3606e69c",
+ "skills/gsd-ns-workflow/skills/plan-phase/SKILL.md": "4564f415845d6c15",
"skills/gsd-ns-workflow/skills/plan-review-convergence/SKILL.md": "12d1696eaaf60043",
"skills/gsd-ns-workflow/skills/progress/SKILL.md": "fb24eab4a0e5f6a3",
"skills/gsd-ns-workflow/skills/quick/SKILL.md": "48629fef2b9ac5b0",
diff --git a/tests/phase.test.cjs b/tests/phase.test.cjs
index 6bdf34b2e..cb000a1d1 100644
--- a/tests/phase.test.cjs
+++ b/tests/phase.test.cjs
@@ -1520,6 +1520,104 @@ describe('phase add command', () => {
'directory should be 1001-after-one-thousand'
);
});
+
+ // #2390 — phase.add title/goal split-or-warn regression coverage.
+ test('phase add with a short, title-shaped description has no warning key', () => {
+ fs.writeFileSync(
+ path.join(tmpDir, '.planning', 'ROADMAP.md'),
+ `# Roadmap v1.0\n\n### Phase 1: Foundation\n**Goal:** Setup\n\n---\n`
+ );
+
+ const result = runGsdTools(['phase', 'add', 'Add auth'], tmpDir);
+ assert.ok(result.success, `Command failed: ${result.error}`);
+
+ const output = JSON.parse(result.output);
+ assert.strictEqual(output.name, 'Add auth');
+ assert.ok(!('warning' in output), 'short title-shaped description should not produce a warning');
+
+ const roadmap = fs.readFileSync(path.join(tmpDir, '.planning', 'ROADMAP.md'), 'utf-8');
+ assert.ok(roadmap.includes('### Phase 2: Add auth'), 'roadmap should include the new phase header');
+ });
+
+ test('phase add with a goal-shaped (long, multi-sentence) description surfaces a warning but still creates the phase (regression #2390)', () => {
+ fs.writeFileSync(
+ path.join(tmpDir, '.planning', 'ROADMAP.md'),
+ `# Roadmap v1.0\n\n### Phase 1: Foundation\n**Goal:** Setup\n\n---\n`
+ );
+
+ const goalShaped =
+ 'Add a comprehensive authentication and authorization system with OAuth2 support. ' +
+ 'This will also include session management and rate limiting for the public API.';
+
+ const result = runGsdTools(['phase', 'add', goalShaped], tmpDir);
+ assert.ok(result.success, `Command failed: ${result.error}`);
+
+ const output = JSON.parse(result.output);
+ // Negative proof: before the #2390 fix, phase.add emitted no `warning` key
+ // for ANY description, however goal-shaped -- the paragraph landed silently
+ // in the phase title with no signal in the JSON result. This assertion
+ // fails on the pre-fix tree.
+ assert.ok(
+ typeof output.warning === 'string' && output.warning.length > 0,
+ 'goal-shaped description should surface a warning field'
+ );
+ assert.match(output.warning, /goal-shaped/);
+
+ // The phase must still be created -- the warning surfaces the gap, it
+ // does not block the write or mangle ROADMAP.md (preserves the two-layer
+ // slash-command vs. raw-CLI interface: the CLI stays a strict primitive).
+ assert.strictEqual(output.phase_number, 2);
+ const roadmap = fs.readFileSync(path.join(tmpDir, '.planning', 'ROADMAP.md'), 'utf-8');
+ assert.ok(
+ roadmap.includes(`### Phase 2: ${goalShaped}`),
+ 'phase should still be created verbatim despite the warning'
+ );
+ assert.ok(
+ fs.existsSync(path.join(tmpDir, output.directory)),
+ 'phase directory should still be created'
+ );
+ });
+
+ test('phase add title-length boundary: 79/80/81 chars (regression #2390)', () => {
+ fs.writeFileSync(
+ path.join(tmpDir, '.planning', 'ROADMAP.md'),
+ `# Roadmap v1.0\n\n### Phase 1: Foundation\n**Goal:** Setup\n\n---\n`
+ );
+
+ const underLimit = 'A'.repeat(79); // limit - 1
+ const atLimit = 'A'.repeat(80); // limit
+ const overLimit = 'A'.repeat(81); // limit + 1
+
+ const underResult = runGsdTools(['phase', 'add', underLimit], tmpDir);
+ assert.ok(underResult.success, `Command failed: ${underResult.error}`);
+ assert.ok(
+ !('warning' in JSON.parse(underResult.output)),
+ '79 chars (limit-1) should not warn'
+ );
+
+ const atResult = runGsdTools(['phase', 'add', atLimit], tmpDir);
+ assert.ok(atResult.success, `Command failed: ${atResult.error}`);
+ assert.ok(!('warning' in JSON.parse(atResult.output)), '80 chars (limit) should not warn');
+
+ const overResult = runGsdTools(['phase', 'add', overLimit], tmpDir);
+ assert.ok(overResult.success, `Command failed: ${overResult.error}`);
+ const overOutput = JSON.parse(overResult.output);
+ assert.ok(
+ typeof overOutput.warning === 'string' && overOutput.warning.length > 0,
+ '81 chars (limit+1) should warn'
+ );
+ });
+
+ test('phase add rejects an empty description (unaffected by the #2390 warning heuristic)', () => {
+ fs.writeFileSync(
+ path.join(tmpDir, '.planning', 'ROADMAP.md'),
+ `# Roadmap v1.0\n\n### Phase 1: Foundation\n**Goal:** Setup\n\n---\n`
+ );
+
+ const result = runGsdTools(['phase', 'add', ''], tmpDir);
+ assert.ok(!result.success, 'empty description should still fail');
+ assert.match(result.error, /description required/);
+ });
});
// ─────────────────────────────────────────────────────────────────────────────
diff --git a/tests/workflow-size-baseline.json b/tests/workflow-size-baseline.json
index b3f28db3e..93e0e715c 100644
--- a/tests/workflow-size-baseline.json
+++ b/tests/workflow-size-baseline.json
@@ -1,9 +1,9 @@
{
"add-backlog.md": 7176,
- "add-phase.md": 7247,
+ "add-phase.md": 7578,
"add-tests.md": 16961,
"add-todo.md": 10734,
- "ai-integration-phase.md": 14805,
+ "ai-integration-phase.md": 15134,
"analyze-dependencies.md": 3887,
"audit-fix.md": 11723,
"audit-milestone.md": 18448,
@@ -53,7 +53,7 @@
"onboard.md": 8590,
"pause-work.md": 14441,
"plan-milestone-gaps.md": 11809,
- "plan-phase.md": 93959,
+ "plan-phase.md": 94387,
"plan-review-convergence.md": 23713,
"plant-seed.md": 11785,
"pr-branch.md": 15963,