diff --git a/docs/INVENTORY.md b/docs/INVENTORY.md index 4203c0b59..ee234fd0a 100644 --- a/docs/INVENTORY.md +++ b/docs/INVENTORY.md @@ -357,7 +357,7 @@ The `gsd-planner` agent is decomposed into a core agent plus reference modules t | `user-story-template.md` | User story format for MVP planning — "As a / I want to / So that" structured fields. | | `spidr-splitting.md` | SPIDR splitting decomposition rules for handling large user stories in MVP mode. | -> **Subdirectory:** `get-shit-done/references/few-shot-examples/` contains additional few-shot examples (`plan-checker.md`, `verifier.md`) that are referenced from specific agents. These are not counted in the 60 top-level references. +> **Subdirectory:** `get-shit-done/references/few-shot-examples/` contains additional few-shot examples (`plan-checker.md`, `verifier.md`) that are referenced from specific agents. These are not counted in the 61 top-level references. --- diff --git a/get-shit-done/bin/lib/workstream-inventory-builder.generated.cjs b/get-shit-done/bin/lib/workstream-inventory-builder.generated.cjs index 5a0aed285..c7c4eca16 100644 --- a/get-shit-done/bin/lib/workstream-inventory-builder.generated.cjs +++ b/get-shit-done/bin/lib/workstream-inventory-builder.generated.cjs @@ -19,8 +19,8 @@ function toPosixPath(p) { } function isCompletedInventory(status) { - const s = String(status ?? '').toLowerCase(); - return s.includes('milestone complete') || s.includes('archived'); + const s = String(status ?? '').trim().toLowerCase(); + return /\bmilestone\s+complete\b/.test(s) || /\barchived\b/.test(s); } function buildWorkstreamInventory(inputs) { diff --git a/get-shit-done/workflows/settings.md b/get-shit-done/workflows/settings.md index 53c9215d0..851627bfe 100644 --- a/get-shit-done/workflows/settings.md +++ b/get-shit-done/workflows/settings.md @@ -91,7 +91,7 @@ Verifier, TDD Mode, Code Review, Code Review Depth _(conditional — only when c Commit Docs, Skip Discuss, Worktrees ### Features -Intel, Graphify +Intel, Graphify, Graph auto-update _(conditional — only when graphify=on)_ ### Model & Pipeline Model Profile, Auto-Advance, Branching @@ -101,6 +101,8 @@ Context Warnings, Research Qs **Conditional visibility — code_review_depth:** This question is shown only when the user's chosen `code_review` value (after they answer that question, or the pre-selected value if unchanged) is on. If `code_review` is off, omit the `code_review_depth` question from the AskUserQuestion block and preserve the existing `workflow.code_review_depth` value in config (do not overwrite). Implementation: ask the Model + Planning + Execution-up-to-Code-Review questions first; if `code_review=on`, include `code_review_depth` in the same batch; otherwise skip it. Conceptually this is a one-branch split on the `code_review` answer. +**Conditional visibility — graphify.auto_update:** This question is shown only when the user's chosen `graphify.enabled` value is on. If `graphify.enabled` is off, omit the `graphify.auto_update` question and preserve the existing `graphify.auto_update` value in config (do not overwrite). Implementation: ask Graphify first; only ask Graph auto-update when Graphify is enabled. + ``` AskUserQuestion([ { @@ -437,7 +439,8 @@ Write `~/.gsd/defaults.json` with: "enabled": }, "graphify": { - "enabled": + "enabled": , + "auto_update": } } ``` diff --git a/sdk/src/workstream-inventory/builder.test.ts b/sdk/src/workstream-inventory/builder.test.ts index 34cdb275c..a1dbb4039 100644 --- a/sdk/src/workstream-inventory/builder.test.ts +++ b/sdk/src/workstream-inventory/builder.test.ts @@ -231,6 +231,10 @@ describe('isCompletedInventory', () => { expect(isCompletedInventory('unknown')).toBe(false); }); + it('returns false for "unarchived" (word-boundary guard)', () => { + expect(isCompletedInventory('unarchived')).toBe(false); + }); + it('returns false for empty string', () => { expect(isCompletedInventory('')).toBe(false); }); diff --git a/sdk/src/workstream-inventory/builder.ts b/sdk/src/workstream-inventory/builder.ts index 23676cab3..af4214c57 100644 --- a/sdk/src/workstream-inventory/builder.ts +++ b/sdk/src/workstream-inventory/builder.ts @@ -86,11 +86,11 @@ function toPosixPath(p: string): string { /** * Pure classifier: returns true if the given status string indicates a - * completed or archived workstream (case-insensitive substring match). + * completed or archived workstream (case-insensitive, boundary-aware match). */ export function isCompletedInventory(status: string): boolean { - const s = String(status ?? '').toLowerCase(); - return s.includes('milestone complete') || s.includes('archived'); + const s = String(status ?? '').trim().toLowerCase(); + return /\bmilestone\s+complete\b/.test(s) || /\barchived\b/.test(s); } /**