@opengsd/gsd-core 1.5.0-rc.3 → 1.5.0-rc.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/plugin.json +1 -1
- package/agents/gsd-advisor-researcher.md +1 -1
- package/agents/gsd-assumptions-analyzer.md +1 -1
- package/agents/gsd-code-fixer.md +1 -1
- package/agents/gsd-code-reviewer.md +1 -1
- package/agents/gsd-codebase-mapper.md +1 -1
- package/agents/gsd-debugger.md +1 -1
- package/agents/gsd-doc-writer.md +1 -1
- package/agents/gsd-eval-auditor.md +1 -1
- package/agents/gsd-executor.md +1 -1
- package/agents/gsd-integration-checker.md +1 -1
- package/agents/gsd-nyquist-auditor.md +1 -0
- package/agents/gsd-phase-researcher.md +1 -1
- package/agents/gsd-plan-checker.md +1 -1
- package/agents/gsd-planner.md +1 -1
- package/agents/gsd-project-researcher.md +1 -1
- package/agents/gsd-research-synthesizer.md +1 -1
- package/agents/gsd-roadmapper.md +55 -2
- package/agents/gsd-security-auditor.md +1 -0
- package/agents/gsd-ui-auditor.md +1 -1
- package/agents/gsd-ui-checker.md +1 -1
- package/agents/gsd-ui-researcher.md +1 -1
- package/agents/gsd-verifier.md +13 -2
- package/bin/install.js +36 -57
- package/commands/gsd/progress.md +2 -1
- package/gemini-extension.json +1 -1
- package/gsd-core/bin/gsd-tools.cjs +167 -3
- package/gsd-core/bin/lib/active-workstream-store.cjs +6 -0
- package/gsd-core/bin/lib/capability-state.cjs +97 -3
- package/gsd-core/bin/lib/capability-writer.cjs +354 -0
- package/gsd-core/bin/lib/config.cjs +80 -24
- package/gsd-core/bin/lib/edge-probe.cjs +25 -2
- package/gsd-core/bin/lib/frontmatter.cjs +53 -1
- package/gsd-core/bin/lib/git-base-branch.cjs +194 -0
- package/gsd-core/bin/lib/init.cjs +28 -6
- package/gsd-core/bin/lib/install-profiles.cjs +55 -0
- package/gsd-core/bin/lib/installer-migration-report.cjs +1 -0
- package/gsd-core/bin/lib/phase.cjs +28 -12
- package/gsd-core/bin/lib/plan-drift-guard.cjs +117 -0
- package/gsd-core/bin/lib/probe-core.cjs +117 -1
- package/gsd-core/bin/lib/roadmap-parser.cjs +13 -3
- package/gsd-core/bin/lib/runtime-artifact-conversion.cjs +246 -0
- package/gsd-core/bin/lib/runtime-artifact-layout.cjs +34 -2
- package/gsd-core/bin/lib/state.cjs +240 -59
- package/gsd-core/bin/lib/verify.cjs +73 -4
- package/gsd-core/bin/lib/worktree-safety.cjs +2 -1
- package/gsd-core/references/edge-probe.md +11 -0
- package/gsd-core/references/prohibition-probe-fixtures/01-streak-reminder/expected.json +14 -0
- package/gsd-core/references/prohibition-probe-fixtures/02-clean-utility/expected.json +4 -0
- package/gsd-core/references/prohibition-probe-fixtures/03-multi-prohibition/expected.json +32 -0
- package/gsd-core/references/prohibition-probe.md +248 -0
- package/gsd-core/templates/spec.md +14 -0
- package/gsd-core/workflows/complete-milestone.md +1 -5
- package/gsd-core/workflows/execute-phase.md +4 -3
- package/gsd-core/workflows/execute-plan.md +21 -6
- package/gsd-core/workflows/help/modes/full.md +4 -0
- package/gsd-core/workflows/next.md +50 -2
- package/gsd-core/workflows/pause-work.md +7 -1
- package/gsd-core/workflows/plan-phase.md +2 -0
- package/gsd-core/workflows/plan-review-convergence.md +14 -4
- package/gsd-core/workflows/pr-branch.md +4 -2
- package/gsd-core/workflows/quick.md +3 -2
- package/gsd-core/workflows/resume-project.md +17 -1
- package/gsd-core/workflows/settings.md +27 -1
- package/gsd-core/workflows/ship.md +1 -5
- package/gsd-core/workflows/spec-phase.md +75 -0
- package/gsd-core/workflows/verify-phase.md +14 -4
- package/hooks/dist/gsd-ensure-canonical-path.js +305 -0
- package/hooks/dist/gsd-statusline.js +1 -1
- package/hooks/dist/managed-hooks-registry.cjs +1 -0
- package/hooks/gsd-ensure-canonical-path.js +305 -0
- package/hooks/gsd-statusline.js +1 -1
- package/hooks/hooks.json +1 -0
- package/hooks/managed-hooks-registry.cjs +1 -0
- package/package.json +3 -3
- package/scripts/build-hooks.js +7 -0
- package/scripts/changeset/new.cjs +17 -3
- package/scripts/fix-slash-commands.cjs +15 -3
- package/scripts/gen-capability-registry.cjs +14 -1
- package/scripts/lint-allow-test-rule-refs.allowlist.json +2 -1
- package/scripts/lint-test-file-count.allowlist.json +6 -0
- package/scripts/mutation-matrix.cjs +108 -7
- package/scripts/pr-target-policy.cjs +63 -0
- package/scripts/research-profiles.cjs +5 -5
- package/scripts/run-tests.cjs +107 -6
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gsd-core",
|
|
3
3
|
"displayName": "GSD Core",
|
|
4
|
-
"version": "1.5.0-rc.
|
|
4
|
+
"version": "1.5.0-rc.4",
|
|
5
5
|
"description": "GSD Core is a meta-prompting, context engineering, and spec-driven development system for AI coding agents.",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "open-gsd",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: gsd-advisor-researcher
|
|
3
3
|
description: Researches a single gray area decision and returns a structured comparison table with rationale. Spawned by discuss-phase advisor mode.
|
|
4
|
-
tools: Read, Bash, Grep, Glob, WebSearch, WebFetch, mcp__context7__*
|
|
4
|
+
tools: Read, Bash, Grep, Glob, Skill, WebSearch, WebFetch, mcp__context7__*
|
|
5
5
|
color: cyan
|
|
6
6
|
---
|
|
7
7
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: gsd-assumptions-analyzer
|
|
3
3
|
description: Deeply analyzes codebase for a phase and returns structured assumptions with evidence. Spawned by discuss-phase assumptions mode.
|
|
4
|
-
tools: Read, Bash, Grep, Glob
|
|
4
|
+
tools: Read, Bash, Grep, Glob, Skill
|
|
5
5
|
color: cyan
|
|
6
6
|
---
|
|
7
7
|
|
package/agents/gsd-code-fixer.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: gsd-code-fixer
|
|
3
3
|
description: Applies fixes to code review findings from REVIEW.md. Reads source files, applies intelligent fixes, and commits each fix atomically. Spawned by /gsd:code-review --fix.
|
|
4
|
-
tools: Read, Edit, Write, Bash, Grep, Glob
|
|
4
|
+
tools: Read, Edit, Write, Bash, Grep, Glob, Skill
|
|
5
5
|
color: green
|
|
6
6
|
# hooks:
|
|
7
7
|
# - before_write
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: gsd-code-reviewer
|
|
3
3
|
description: Reviews source files for bugs, security issues, and code quality problems. Produces structured REVIEW.md with severity-classified findings. Spawned by /gsd:code-review.
|
|
4
|
-
tools: Read, Write, Bash, Grep, Glob
|
|
4
|
+
tools: Read, Write, Bash, Grep, Glob, Skill
|
|
5
5
|
color: orange
|
|
6
6
|
# hooks:
|
|
7
7
|
# - before_write
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: gsd-codebase-mapper
|
|
3
3
|
description: Explores codebase and writes structured analysis documents. Spawned by map-codebase with a focus area (tech, arch, quality, concerns). Writes documents directly to reduce orchestrator context load.
|
|
4
|
-
tools: Read, Bash, Grep, Glob, Write
|
|
4
|
+
tools: Read, Bash, Grep, Glob, Write, Skill
|
|
5
5
|
color: cyan
|
|
6
6
|
# hooks:
|
|
7
7
|
# PostToolUse:
|
package/agents/gsd-debugger.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: gsd-debugger
|
|
3
3
|
description: Investigates bugs using scientific method, manages debug sessions, handles checkpoints. Spawned by /gsd:debug orchestrator.
|
|
4
|
-
tools: Read, Write, Edit, Bash, Grep, Glob, WebSearch
|
|
4
|
+
tools: Read, Write, Edit, Bash, Grep, Glob, Skill, WebSearch
|
|
5
5
|
color: orange
|
|
6
6
|
# hooks:
|
|
7
7
|
# PostToolUse:
|
package/agents/gsd-doc-writer.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: gsd-doc-writer
|
|
3
3
|
description: Writes and updates project documentation. Spawned with a doc_assignment block specifying doc type, mode (create/update/supplement), and project context.
|
|
4
|
-
tools: Read, Bash, Grep, Glob, Write, Edit
|
|
4
|
+
tools: Read, Bash, Grep, Glob, Write, Edit, Skill
|
|
5
5
|
color: purple
|
|
6
6
|
# hooks:
|
|
7
7
|
# PostToolUse:
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: gsd-eval-auditor
|
|
3
3
|
description: Retroactive audit of an implemented AI phase's evaluation coverage. Checks implementation against the AI-SPEC.md evaluation plan. Scores each eval dimension as COVERED/PARTIAL/MISSING. Produces a scored EVAL-REVIEW.md with findings, gaps, and remediation guidance. Spawned by /gsd:eval-review orchestrator.
|
|
4
|
-
tools: Read, Write, Bash, Grep, Glob
|
|
4
|
+
tools: Read, Write, Bash, Grep, Glob, Skill
|
|
5
5
|
color: red
|
|
6
6
|
# hooks:
|
|
7
7
|
# PostToolUse:
|
package/agents/gsd-executor.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: gsd-executor
|
|
3
3
|
description: Executes GSD plans with atomic commits, deviation handling, checkpoint protocols, and state management. Spawned by execute-phase orchestrator or execute-plan command.
|
|
4
|
-
tools: Read, Write, Edit, Bash, Grep, Glob, mcp__context7__*
|
|
4
|
+
tools: Read, Write, Edit, Bash, Grep, Glob, Skill, mcp__context7__*
|
|
5
5
|
color: yellow
|
|
6
6
|
# hooks:
|
|
7
7
|
# PostToolUse:
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: gsd-integration-checker
|
|
3
3
|
description: Verifies cross-phase integration and E2E flows. Checks that phases connect properly and user workflows complete end-to-end.
|
|
4
|
-
tools: Read, Bash, Grep, Glob
|
|
4
|
+
tools: Read, Bash, Grep, Glob, Skill
|
|
5
5
|
color: blue
|
|
6
6
|
---
|
|
7
7
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: gsd-phase-researcher
|
|
3
3
|
description: Researches how to implement a phase before planning. Produces RESEARCH.md consumed by gsd-planner. Spawned by /gsd:plan-phase orchestrator.
|
|
4
|
-
tools: Read, Write, Edit, Bash, Grep, Glob, WebSearch, WebFetch, mcp__context7__*, mcp__firecrawl__*, mcp__exa__*, mcp__tavily__*, mcp__ref__*, mcp__jina__*
|
|
4
|
+
tools: Read, Write, Edit, Bash, Grep, Glob, Skill, WebSearch, WebFetch, mcp__context7__*, mcp__firecrawl__*, mcp__exa__*, mcp__tavily__*, mcp__ref__*, mcp__jina__*
|
|
5
5
|
color: cyan
|
|
6
6
|
# hooks:
|
|
7
7
|
# PostToolUse:
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: gsd-plan-checker
|
|
3
3
|
description: Verifies plans will achieve phase goal before execution. Goal-backward analysis of plan quality. Spawned by /gsd:plan-phase orchestrator.
|
|
4
|
-
tools: Read, Bash, Glob, Grep
|
|
4
|
+
tools: Read, Bash, Glob, Grep, Skill
|
|
5
5
|
color: green
|
|
6
6
|
---
|
|
7
7
|
|
package/agents/gsd-planner.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: gsd-planner
|
|
3
3
|
description: Creates executable phase plans with task breakdown, dependency analysis, and goal-backward verification. Spawned by /gsd:plan-phase orchestrator.
|
|
4
|
-
tools: Read, Write, Edit, Bash, Glob, Grep, WebFetch, mcp__context7__*
|
|
4
|
+
tools: Read, Write, Edit, Bash, Glob, Grep, Skill, WebFetch, mcp__context7__*
|
|
5
5
|
color: green
|
|
6
6
|
# hooks:
|
|
7
7
|
# PostToolUse:
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: gsd-project-researcher
|
|
3
3
|
description: Researches domain ecosystem before roadmap creation. Produces files in .planning/research/ consumed during roadmap creation. Spawned by /gsd:new-project or /gsd:new-milestone orchestrators.
|
|
4
|
-
tools: Read, Write, Bash, Grep, Glob, WebSearch, WebFetch, mcp__context7__*, mcp__firecrawl__*, mcp__exa__*, mcp__tavily__*, mcp__ref__*, mcp__jina__*
|
|
4
|
+
tools: Read, Write, Bash, Grep, Glob, Skill, WebSearch, WebFetch, mcp__context7__*, mcp__firecrawl__*, mcp__exa__*, mcp__tavily__*, mcp__ref__*, mcp__jina__*
|
|
5
5
|
color: cyan
|
|
6
6
|
# hooks:
|
|
7
7
|
# PostToolUse:
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: gsd-research-synthesizer
|
|
3
3
|
description: Synthesizes research outputs from parallel researcher agents into SUMMARY.md. Spawned by /gsd:new-project after 4 researcher agents complete.
|
|
4
|
-
tools: Read, Write, Bash
|
|
4
|
+
tools: Read, Write, Bash, Skill
|
|
5
5
|
color: purple
|
|
6
6
|
# hooks:
|
|
7
7
|
# PostToolUse:
|
package/agents/gsd-roadmapper.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: gsd-roadmapper
|
|
3
3
|
description: Creates project roadmaps with phase breakdown, requirement mapping, success criteria derivation, and coverage validation. Spawned by /gsd:new-project orchestrator.
|
|
4
|
-
tools: Read, Write, Bash, Glob, Grep
|
|
4
|
+
tools: Read, Write, Bash, Glob, Grep, Skill
|
|
5
5
|
color: purple
|
|
6
6
|
# hooks:
|
|
7
7
|
# PostToolUse:
|
|
@@ -209,6 +209,23 @@ Track coverage as you go.
|
|
|
209
209
|
- New milestone: Start at 1
|
|
210
210
|
- Continuing milestone: Check existing phases, start at last + 1
|
|
211
211
|
|
|
212
|
+
## Phase ID Convention
|
|
213
|
+
|
|
214
|
+
Read `phase_id_convention` from config.json. This setting controls how phase headers and
|
|
215
|
+
checklist entries are formatted throughout the generated ROADMAP.md.
|
|
216
|
+
|
|
217
|
+
| Convention | Summary checklist form | Detail header form |
|
|
218
|
+
|---|---|---|
|
|
219
|
+
| `sequential` (default) | `- [ ] **Phase 1: Name**` | `### Phase 1: Name` |
|
|
220
|
+
| `milestone-prefixed` | `- [ ] **Phase 1-01: Name**` | `### Phase 1-01: Name` |
|
|
221
|
+
|
|
222
|
+
When `phase_id_convention` is absent or set to `"sequential"`, use plain sequential phase IDs
|
|
223
|
+
(e.g. `Phase 1`, `Phase 2`). When set to `"milestone-prefixed"`, prefix each phase ID with the
|
|
224
|
+
current milestone number and a two-digit phase index within that milestone
|
|
225
|
+
(e.g. `Phase 1-01`, `Phase 1-02`, `Phase 2-01`). The milestone number comes from the project's
|
|
226
|
+
active milestone context (default: `1` for new projects). This ensures downstream tools that
|
|
227
|
+
parse `### Phase N-NN:` headers for milestone-scoped workflows receive correctly prefixed IDs.
|
|
228
|
+
|
|
212
229
|
## Granularity Calibration
|
|
213
230
|
|
|
214
231
|
Read granularity from config.json. Granularity controls compression tolerance.
|
|
@@ -310,14 +327,30 @@ After roadmap creation, REQUIREMENTS.md gets updated with phase mappings:
|
|
|
310
327
|
|
|
311
328
|
### 1. Summary Checklist (under `## Phases`)
|
|
312
329
|
|
|
330
|
+
Use the form matching `phase_id_convention` from config.
|
|
331
|
+
|
|
332
|
+
**Sequential (default — when absent or `"sequential"`):**
|
|
333
|
+
|
|
313
334
|
```markdown
|
|
314
335
|
- [ ] **Phase 1: Name** - One-line description
|
|
315
336
|
- [ ] **Phase 2: Name** - One-line description
|
|
316
337
|
- [ ] **Phase 3: Name** - One-line description
|
|
317
338
|
```
|
|
318
339
|
|
|
340
|
+
**Milestone-prefixed (when `phase_id_convention: "milestone-prefixed"`):**
|
|
341
|
+
|
|
342
|
+
```markdown
|
|
343
|
+
- [ ] **Phase 1-01: Name** - One-line description
|
|
344
|
+
- [ ] **Phase 1-02: Name** - One-line description
|
|
345
|
+
- [ ] **Phase 1-03: Name** - One-line description
|
|
346
|
+
```
|
|
347
|
+
|
|
319
348
|
### 2. Detail Sections (under `## Phase Details`)
|
|
320
349
|
|
|
350
|
+
Use the header form matching `phase_id_convention` from config.
|
|
351
|
+
|
|
352
|
+
**Sequential (default):**
|
|
353
|
+
|
|
321
354
|
```markdown
|
|
322
355
|
### Phase 1: Name
|
|
323
356
|
**Goal**: What this phase delivers
|
|
@@ -334,7 +367,25 @@ After roadmap creation, REQUIREMENTS.md gets updated with phase mappings:
|
|
|
334
367
|
...
|
|
335
368
|
```
|
|
336
369
|
|
|
337
|
-
**
|
|
370
|
+
**Milestone-prefixed (when `phase_id_convention: "milestone-prefixed"`):**
|
|
371
|
+
|
|
372
|
+
```markdown
|
|
373
|
+
### Phase 1-01: Name
|
|
374
|
+
**Goal**: What this phase delivers
|
|
375
|
+
**Depends on**: Nothing (first phase)
|
|
376
|
+
**Requirements**: REQ-01, REQ-02
|
|
377
|
+
**Success Criteria** (what must be TRUE):
|
|
378
|
+
1. Observable behavior from user perspective
|
|
379
|
+
2. Observable behavior from user perspective
|
|
380
|
+
**Plans**: TBD
|
|
381
|
+
|
|
382
|
+
### Phase 1-02: Name
|
|
383
|
+
**Goal**: What this phase delivers
|
|
384
|
+
**Depends on**: Phase 1-01
|
|
385
|
+
...
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
**The `### Phase X:` headers are parsed by downstream tools.** If you only write the summary checklist, phase lookups will fail. Use the correct form for the configured convention so downstream parsing succeeds.
|
|
338
389
|
|
|
339
390
|
### UI Phase Detection
|
|
340
391
|
|
|
@@ -476,6 +527,8 @@ Apply phase identification methodology:
|
|
|
476
527
|
2. Identify dependencies between groups
|
|
477
528
|
3. Create phases that complete coherent capabilities
|
|
478
529
|
4. Check granularity setting for compression guidance
|
|
530
|
+
5. Read `phase_id_convention` from config (`sequential` or `milestone-prefixed`); apply the
|
|
531
|
+
matching header and checklist form throughout all output sections
|
|
479
532
|
|
|
480
533
|
## Step 5: Derive Success Criteria
|
|
481
534
|
|
package/agents/gsd-ui-auditor.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: gsd-ui-auditor
|
|
3
3
|
description: Retroactive 6-pillar visual audit of implemented frontend code. Produces scored UI-REVIEW.md. Spawned by /gsd:ui-review orchestrator.
|
|
4
|
-
tools: Read, Write, Bash, Grep, Glob
|
|
4
|
+
tools: Read, Write, Bash, Grep, Glob, Skill
|
|
5
5
|
color: pink
|
|
6
6
|
# hooks:
|
|
7
7
|
# PostToolUse:
|
package/agents/gsd-ui-checker.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: gsd-ui-checker
|
|
3
3
|
description: Validates UI-SPEC.md design contracts against 6 quality dimensions. Produces BLOCK/FLAG/PASS verdicts. Spawned by /gsd:ui-phase orchestrator.
|
|
4
|
-
tools: Read, Bash, Glob, Grep
|
|
4
|
+
tools: Read, Bash, Glob, Grep, Skill
|
|
5
5
|
color: cyan
|
|
6
6
|
---
|
|
7
7
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: gsd-ui-researcher
|
|
3
3
|
description: Produces UI-SPEC.md design contract for frontend phases. Reads upstream artifacts, detects design system state, asks only unanswered questions. Spawned by /gsd:ui-phase orchestrator.
|
|
4
|
-
tools: Read, Write, Edit, Bash, Grep, Glob, WebSearch, WebFetch, mcp__context7__*, mcp__firecrawl__*, mcp__exa__*, mcp__tavily__*, mcp__ref__*, mcp__jina__*
|
|
4
|
+
tools: Read, Write, Edit, Bash, Grep, Glob, Skill, WebSearch, WebFetch, mcp__context7__*, mcp__firecrawl__*, mcp__exa__*, mcp__tavily__*, mcp__ref__*, mcp__jina__*
|
|
5
5
|
color: purple
|
|
6
6
|
# hooks:
|
|
7
7
|
# PostToolUse:
|
package/agents/gsd-verifier.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: gsd-verifier
|
|
3
3
|
description: Verifies phase goal achievement through goal-backward analysis. Checks codebase delivers what phase promised, not just that tasks completed. Creates VERIFICATION.md report.
|
|
4
|
-
tools: Read, Write, Bash, Grep, Glob
|
|
4
|
+
tools: Read, Write, Bash, Grep, Glob, Skill
|
|
5
5
|
color: green
|
|
6
6
|
# hooks:
|
|
7
7
|
# PostToolUse:
|
|
@@ -85,7 +85,7 @@ cat "$PHASE_DIR"/*-VERIFICATION.md 2>/dev/null
|
|
|
85
85
|
**If previous verification exists with `gaps:` section → RE-VERIFICATION MODE:**
|
|
86
86
|
|
|
87
87
|
1. Parse previous VERIFICATION.md frontmatter
|
|
88
|
-
2. Extract `must_haves` (truths, artifacts, key_links)
|
|
88
|
+
2. Extract `must_haves` (truths, artifacts, key_links, prohibitions)
|
|
89
89
|
3. Extract `gaps` (items that failed)
|
|
90
90
|
4. Set `is_re_verification = true`
|
|
91
91
|
5. **Skip to Step 3** with optimization:
|
|
@@ -140,8 +140,19 @@ must_haves:
|
|
|
140
140
|
- from: "src/components/Chat.tsx"
|
|
141
141
|
to: "src/app/api/chat/route.ts"
|
|
142
142
|
via: "fetch in useEffect — calls /api/chat endpoint"
|
|
143
|
+
prohibitions:
|
|
144
|
+
- statement: "MUST NOT store raw SSN in plaintext"
|
|
145
|
+
status: "resolved"
|
|
146
|
+
verification: "judgment"
|
|
143
147
|
```
|
|
144
148
|
|
|
149
|
+
**Also extract `must_haves.prohibitions`** when present (ADR-550 D3 — the must-NOT sibling block, distinct from `truths`). Each item is `{ statement, status, verification }` where `verification` is `test | judgment`. These are NEGATIVE checks: a verified prohibition means the must-NOT did NOT happen. Route them by verification tier in the verdict assembly (ADR-550 D4, the "B-with-guard" 2026-06-12 maintainer decision):
|
|
150
|
+
|
|
151
|
+
- **judgment-tier prohibitions → mode-dependent soft-gate.** Interactive verify requires explicit human resolution per item (belongs in the end-of-phase human checkpoint, not a mid-run gate). Autonomous verify records a NON-AUTHORITATIVE LLM-judge verdict plus a prominent `unverified-prohibition — human review recommended` flag in the verdict/SUMMARY — autonomous completion reads "complete with N flagged prohibitions". NEVER a silent pass; NEVER a hard halt of an AFK run.
|
|
152
|
+
- **test-tier prohibitions → FAIL CLOSED (accept-and-flag, not reject-at-parse).** Accept the `verification: test` value (the SPEC↔must_haves.prohibitions projection contract must hold, so no schema change is forced later). But a well-formed test-tier item that reaches verify with NO wired enforcement is treated as UNVERIFIED — flagged exactly like an unresolved judgment item, NEVER green. The deterministic fail-closed default is `dispositionForProhibition()` in probe-core (status `unverified`, `flagged: true` when `enforcementEvidence` is empty). Do NOT wire a real fail-first negative-test hard gate here — that enforcement MECHANISM defers to a follow-up PR (it needs a real test-tier consumer to `regression-must-fail-first` against; #644's corpus is entirely judgment-tier).
|
|
153
|
+
|
|
154
|
+
A flagged prohibition counts as a human-verification item (status `human_needed`) or a gap (status `gaps_found`) per the existing decision tree — it must never be silently absorbed into a `passed` verdict.
|
|
155
|
+
|
|
145
156
|
**Step 2c: Merge must-haves**
|
|
146
157
|
|
|
147
158
|
Combine all sources into a single must-haves list:
|
package/bin/install.js
CHANGED
|
@@ -930,13 +930,11 @@ function readSettings(settingsPath) {
|
|
|
930
930
|
if (fs.existsSync(settingsPath)) {
|
|
931
931
|
try {
|
|
932
932
|
const raw = fs.readFileSync(settingsPath, 'utf8');
|
|
933
|
+
let parsed;
|
|
933
934
|
// Try standard JSON first (fast path)
|
|
934
|
-
try {
|
|
935
|
-
|
|
936
|
-
}
|
|
937
|
-
// Fall back to JSONC stripping
|
|
938
|
-
return JSON.parse(stripJsonComments(raw));
|
|
939
|
-
}
|
|
935
|
+
try { parsed = JSON.parse(raw); }
|
|
936
|
+
catch { parsed = JSON.parse(stripJsonComments(raw)); }
|
|
937
|
+
return parsed === null ? {} : parsed; // valid JSON null = empty settings, not malformed
|
|
940
938
|
} catch (e) {
|
|
941
939
|
// If even JSONC stripping fails, warn instead of silently returning {}
|
|
942
940
|
console.warn(' ' + yellow + '⚠' + reset + ' Warning: Could not parse ' + settingsPath + ' — file may be malformed. Existing settings preserved.');
|
|
@@ -2335,22 +2333,6 @@ const claudeToCursorTools = {
|
|
|
2335
2333
|
SlashCommand: null, // No equivalent — skills are auto-discovered
|
|
2336
2334
|
};
|
|
2337
2335
|
|
|
2338
|
-
/**
|
|
2339
|
-
* Convert a Claude Code tool name to Cursor CLI format
|
|
2340
|
-
* @returns {string|null} Cursor tool name, or null if tool should be excluded
|
|
2341
|
-
*/
|
|
2342
|
-
function convertCursorToolName(claudeTool) {
|
|
2343
|
-
if (claudeTool in claudeToCursorTools) {
|
|
2344
|
-
return claudeToCursorTools[claudeTool];
|
|
2345
|
-
}
|
|
2346
|
-
// MCP tools keep their format (Cursor supports MCP)
|
|
2347
|
-
if (claudeTool.startsWith('mcp__')) {
|
|
2348
|
-
return claudeTool;
|
|
2349
|
-
}
|
|
2350
|
-
// Most tools share the same name (Read, Write, Glob, Grep, Task, WebSearch, WebFetch, TodoWrite)
|
|
2351
|
-
return claudeTool;
|
|
2352
|
-
}
|
|
2353
|
-
|
|
2354
2336
|
function convertSlashCommandsToCursorSkillMentions(content) {
|
|
2355
2337
|
// Keep leading "/" for slash commands; only normalize gsd: -> gsd-.
|
|
2356
2338
|
// This preserves rendered "next step" commands like "/gsd-execute-phase 17".
|
|
@@ -2477,22 +2459,6 @@ const claudeToWindsurfTools = {
|
|
|
2477
2459
|
SlashCommand: null, // No equivalent — skills are auto-discovered
|
|
2478
2460
|
};
|
|
2479
2461
|
|
|
2480
|
-
/**
|
|
2481
|
-
* Convert a Claude Code tool name to Windsurf Cascade format
|
|
2482
|
-
* @returns {string|null} Windsurf tool name, or null if tool should be excluded
|
|
2483
|
-
*/
|
|
2484
|
-
function convertWindsurfToolName(claudeTool) {
|
|
2485
|
-
if (claudeTool in claudeToWindsurfTools) {
|
|
2486
|
-
return claudeToWindsurfTools[claudeTool];
|
|
2487
|
-
}
|
|
2488
|
-
// MCP tools keep their format (Windsurf supports MCP)
|
|
2489
|
-
if (claudeTool.startsWith('mcp__')) {
|
|
2490
|
-
return claudeTool;
|
|
2491
|
-
}
|
|
2492
|
-
// Most tools share the same name (Read, Write, Glob, Grep, Task, WebSearch, WebFetch, TodoWrite)
|
|
2493
|
-
return claudeTool;
|
|
2494
|
-
}
|
|
2495
|
-
|
|
2496
2462
|
function convertSlashCommandsToWindsurfSkillMentions(content) {
|
|
2497
2463
|
// Keep leading "/" for slash commands; only normalize gsd: -> gsd-.
|
|
2498
2464
|
return content.replace(/gsd:/gi, 'gsd-');
|
|
@@ -2605,25 +2571,6 @@ const claudeToAugmentTools = {
|
|
|
2605
2571
|
TodoWrite: 'add_tasks',
|
|
2606
2572
|
};
|
|
2607
2573
|
|
|
2608
|
-
function convertAugmentToolName(claudeTool) {
|
|
2609
|
-
if (claudeTool in claudeToAugmentTools) {
|
|
2610
|
-
return claudeToAugmentTools[claudeTool];
|
|
2611
|
-
}
|
|
2612
|
-
if (claudeTool.startsWith('mcp__')) {
|
|
2613
|
-
return claudeTool;
|
|
2614
|
-
}
|
|
2615
|
-
const toolMapping = {
|
|
2616
|
-
Read: 'view',
|
|
2617
|
-
Write: 'save-file',
|
|
2618
|
-
Glob: 'view',
|
|
2619
|
-
Grep: 'grep',
|
|
2620
|
-
Task: null,
|
|
2621
|
-
WebSearch: 'web-search',
|
|
2622
|
-
WebFetch: 'web-fetch',
|
|
2623
|
-
};
|
|
2624
|
-
return toolMapping[claudeTool] || claudeTool;
|
|
2625
|
-
}
|
|
2626
|
-
|
|
2627
2574
|
function convertSlashCommandsToAugmentSkillMentions(content) {
|
|
2628
2575
|
return content.replace(/gsd:/gi, 'gsd-');
|
|
2629
2576
|
}
|
|
@@ -8365,6 +8312,10 @@ function uninstall(isGlobal, runtime = 'claude') {
|
|
|
8365
8312
|
console.log(` ${green}✓${reset} Removed scripts/lib/ GSD files`);
|
|
8366
8313
|
}
|
|
8367
8314
|
}
|
|
8315
|
+
// Remove scripts/fix-slash-commands.cjs (#1223) — must come before the scripts/ rmdir
|
|
8316
|
+
const fixSlashUninstallPath = path.join(targetDir, 'scripts', 'fix-slash-commands.cjs');
|
|
8317
|
+
try { fs.unlinkSync(fixSlashUninstallPath); } catch (_) { /* best-effort */ }
|
|
8318
|
+
|
|
8368
8319
|
// If scripts/ dir is now empty, remove it too
|
|
8369
8320
|
const scriptsUninstallDir = path.join(targetDir, 'scripts');
|
|
8370
8321
|
if (fs.existsSync(scriptsUninstallDir)) {
|
|
@@ -9080,6 +9031,12 @@ function writeManifest(configDir, runtime = 'claude', options = {}) {
|
|
|
9080
9031
|
}
|
|
9081
9032
|
}
|
|
9082
9033
|
|
|
9034
|
+
// Track scripts/fix-slash-commands.cjs (top-level scripts/ file, not covered by changeset/lib loops)
|
|
9035
|
+
const fixSlashInstallPath = path.join(configDir, 'scripts', 'fix-slash-commands.cjs');
|
|
9036
|
+
if (fs.existsSync(fixSlashInstallPath)) {
|
|
9037
|
+
manifest.files['scripts/fix-slash-commands.cjs'] = fileHash(fixSlashInstallPath);
|
|
9038
|
+
}
|
|
9039
|
+
|
|
9083
9040
|
fs.writeFileSync(path.join(configDir, MANIFEST_NAME), JSON.stringify(manifest, null, 2));
|
|
9084
9041
|
return manifest;
|
|
9085
9042
|
}
|
|
@@ -10472,6 +10429,25 @@ function install(isGlobal, runtime = 'claude', options = {}) {
|
|
|
10472
10429
|
}
|
|
10473
10430
|
}
|
|
10474
10431
|
|
|
10432
|
+
// Copy scripts/fix-slash-commands.cjs — required by gsd-core/bin/lib/command-roster.cjs
|
|
10433
|
+
// at load time via require('../../../scripts/fix-slash-commands.cjs'). Without this file
|
|
10434
|
+
// every gsd-tools command crashes with MODULE_NOT_FOUND (#1223).
|
|
10435
|
+
// This copy is independent of scripts/changeset/ — it must land even when the
|
|
10436
|
+
// changeset CLI source is absent.
|
|
10437
|
+
{
|
|
10438
|
+
const fixSlashSrc = path.join(src, 'scripts', 'fix-slash-commands.cjs');
|
|
10439
|
+
const fixSlashDest = path.join(targetDir, 'scripts', 'fix-slash-commands.cjs');
|
|
10440
|
+
fs.mkdirSync(path.join(targetDir, 'scripts'), { recursive: true });
|
|
10441
|
+
if (!fs.existsSync(fixSlashSrc)) {
|
|
10442
|
+
failures.push('scripts/fix-slash-commands.cjs (source missing from package — reinstall from npm)');
|
|
10443
|
+
} else {
|
|
10444
|
+
fs.copyFileSync(fixSlashSrc, fixSlashDest);
|
|
10445
|
+
if (!verifyFileInstalled(fixSlashDest, 'scripts/fix-slash-commands.cjs')) {
|
|
10446
|
+
failures.push('scripts/fix-slash-commands.cjs');
|
|
10447
|
+
}
|
|
10448
|
+
}
|
|
10449
|
+
}
|
|
10450
|
+
|
|
10475
10451
|
// Remove legacy get-shit-done-cc artifacts and stale update caches (#607).
|
|
10476
10452
|
// cleanupLegacyGsdCc handles both the legacy shared cache and the per-package
|
|
10477
10453
|
// cache (formerly an inline unlinkSync here). A cleanup failure must never
|
|
@@ -12282,6 +12258,9 @@ module.exports = {
|
|
|
12282
12258
|
parseConfigDirFromArgs,
|
|
12283
12259
|
cleanupLegacyGsdCc,
|
|
12284
12260
|
_applyRuntimeRewrites,
|
|
12261
|
+
// #1191 — exported so tests exercise the REAL readSettings, not a replica
|
|
12262
|
+
readSettings,
|
|
12263
|
+
stripJsonComments,
|
|
12285
12264
|
...runtimeArtifactConversion,
|
|
12286
12265
|
};
|
|
12287
12266
|
|
package/commands/gsd/progress.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: gsd:progress
|
|
3
3
|
description: Check progress, advance workflow, or dispatch freeform intent — the unified GSD situational command
|
|
4
|
-
argument-hint: "[--forensic | --next | --do \"task description\"]"
|
|
4
|
+
argument-hint: "[--forensic | --next [--auto] [--converge] | --do \"task description\"]"
|
|
5
5
|
effort: low
|
|
6
6
|
allowed-tools:
|
|
7
7
|
- Read
|
|
@@ -25,6 +25,7 @@ Three modes:
|
|
|
25
25
|
<flags>
|
|
26
26
|
- **--next**: Detect current project state and automatically invoke the next logical GSD workflow step. Scans all prior phases for incomplete work before routing. `--next --force` bypasses safety gates.
|
|
27
27
|
- **--next --auto**: Like `--next`, but after the determined step completes, automatically re-invokes `/gsd:progress --next --auto` to continue chaining steps until completion or a blocking decision. Enables hands-free plan→execute→verify→complete progression.
|
|
28
|
+
- **--next --converge**: When the next action is planning (Route 3), route it through the plan-review **convergence** loop instead of the standard planner. Requires `workflow.plan_review_convergence=true` (enable with `gsd config-set workflow.plan_review_convergence true`). `--cross-ai` is an alias. Reviewer flags (`--codex`, `--gemini`, `--claude`, `--opencode`, `--ollama`, `--lm-studio`, `--llama-cpp`, `--all`) and `--max-cycles N` are forwarded to the convergence loop.
|
|
28
29
|
- **--do "..."**: Smart dispatcher — match freeform intent to the best GSD command using routing rules, confirm the match, then hand off.
|
|
29
30
|
- **--forensic**: Run 6-check integrity audit after the standard progress report.
|
|
30
31
|
- **(no flag)**: Standard progress check + intelligent routing (Routes A through F).
|
package/gemini-extension.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gsd-core",
|
|
3
|
-
"version": "1.5.0-rc.
|
|
3
|
+
"version": "1.5.0-rc.4",
|
|
4
4
|
"description": "GSD Core — a meta-prompting, context engineering, and spec-driven development system for AI coding agents. Loads gsd's operating context into every Gemini CLI session.",
|
|
5
5
|
"contextFileName": "GEMINI.md"
|
|
6
6
|
}
|