fix(#2390): warn on goal-shaped phase.add titles, correct auto-detect docs (#2425)

* fix(#2390): phase.add title warning + auto-detect doc fix

phase.add now returns a `warning` field when a description reads as
goal-shaped (>80 chars and/or multi-sentence) rather than title-shaped,
instead of silently writing the whole paragraph verbatim as the
`### Phase N:` header. The CLI still creates the phase as-is (the
strict two-layer slash-vs-CLI interface is unchanged); the warning
just surfaces the gap.

Also clarifies six doc sites (command argument hints, workflow
detection steps, and how-to/reference docs) that described the
phase-number argument as "auto-detecting" the next unplanned phase --
that detection is an orchestrating-workflow/LLM step reading
ROADMAP.md (concretely: `query roadmap.analyze`'s `next_phase`
field), not a `gsd-tools.cjs` CLI feature.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* chore(#2390): regenerate fixtures + lint gate-prep

* fix(#2390): repair failing tests after gate verification

* chore(#2390): add changeset (#2425)

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Tom Boucher
2026-07-19 07:53:04 -04:00
committed by GitHub
parent 1720aacf0c
commit a7d83dc234
31 changed files with 245 additions and 111 deletions

View File

@@ -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)

View File

@@ -28,7 +28,7 @@ Flow: Select Framework → Research Docs → Research Domain → Design Eval Str
</execution_context>
<context>
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.
</context>
<process>

View File

@@ -40,7 +40,7 @@ Create executable phase prompts (PLAN.md files) for a roadmap phase with integra
</runtime_note>
<context>
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

View File

@@ -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 |
|------|-------------|

View File

@@ -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.
---

View File

@@ -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.
</step>
<step name="update_project_state">

View File

@@ -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}")

View File

@@ -158,7 +158,7 @@ Extract express-path args from $ARGUMENTS: `PRD_FILE` (`--prd <filepath>`), `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

View File

@@ -28,7 +28,7 @@ Flow: Select Framework → Research Docs → Research Domain → Design Eval Str
</execution_context>
<context>
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.
</context>
<process>

View File

@@ -40,7 +40,7 @@ Create executable phase prompts (PLAN.md files) for a roadmap phase with integra
</runtime_note>
<context>
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

View File

@@ -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<string, unknown> = {
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 {

View File

@@ -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",

View File

@@ -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",

View File

@@ -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",

View File

@@ -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",

View File

@@ -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",

View File

@@ -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",

View File

@@ -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",

View File

@@ -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",

View File

@@ -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",

View File

@@ -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",

View File

@@ -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",

View File

@@ -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",

View File

@@ -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",

View File

@@ -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",

View File

@@ -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",

View File

@@ -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",

View File

@@ -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",

View File

@@ -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",

View File

@@ -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/);
});
});
// ─────────────────────────────────────────────────────────────────────────────

View File

@@ -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,