@opengsd/gsd-core 1.18.0 → 1.20.0
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/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +2 -1
- package/.opencode/plugins/gsd-core.js +2 -3
- package/agents/gsd-code-fixer.compact.md +7 -7
- package/agents/gsd-code-fixer.md +13 -7
- package/agents/gsd-code-reviewer.compact.md +49 -8
- package/agents/gsd-code-reviewer.md +53 -14
- package/agents/gsd-executor.md +8 -4
- package/agents/gsd-verifier.md +1 -1
- package/bin/install.js +422 -103
- package/commands/gsd/update.md +5 -2
- package/gsd-core/bin/gsd-tools.cjs +179 -30
- package/gsd-core/bin/lib/agent-install-check.cjs +29 -3
- package/gsd-core/bin/lib/args-terminator.cjs +114 -0
- package/gsd-core/bin/lib/broken-windows.cjs +59 -1
- package/gsd-core/bin/lib/capability-lifecycle.cjs +1 -12
- package/gsd-core/bin/lib/capability-lock.cjs +13 -2
- package/gsd-core/bin/lib/capability-registry.cjs +376 -103
- package/gsd-core/bin/lib/capability-state.cjs +14 -8
- package/gsd-core/bin/lib/capability-validator.cjs +32 -0
- package/gsd-core/bin/lib/commands.cjs +27 -17
- package/gsd-core/bin/lib/config-loader.cjs +13 -3
- package/gsd-core/bin/lib/config.cjs +256 -58
- package/gsd-core/bin/lib/core-utils.cjs +45 -0
- package/gsd-core/bin/lib/decision-coverage-support.cjs +74 -0
- package/gsd-core/bin/lib/frontmatter.cjs +21 -3
- package/gsd-core/bin/lib/gate-api-coverage-verify-pre.cjs +2 -2
- package/gsd-core/bin/lib/gate-context-drift.cjs +9 -4
- package/gsd-core/bin/lib/gate-decision-coverage-plan.cjs +6 -1
- package/gsd-core/bin/lib/gate-decision-coverage-verify.cjs +6 -1
- package/gsd-core/bin/lib/gate-evaluation-scope.cjs +134 -13
- package/gsd-core/bin/lib/gate-phase-context.cjs +7 -8
- package/gsd-core/bin/lib/gate-schema-drift.cjs +1 -1
- package/gsd-core/bin/lib/gate-tdd-review-checkpoint.cjs +63 -22
- package/gsd-core/bin/lib/gate-ui-safety.cjs +23 -5
- package/gsd-core/bin/lib/git-info-exclude.cjs +52 -0
- package/gsd-core/bin/lib/health-diagnostic-rules/phase-structure.cjs +31 -12
- package/gsd-core/bin/lib/health-diagnostic-rules/roadmap-disk-consistency.cjs +9 -7
- package/gsd-core/bin/lib/health-diagnostic-rules/state-consistency.cjs +3 -3
- package/gsd-core/bin/lib/health-diagnostic-types.cjs +4 -0
- package/gsd-core/bin/lib/health-diagnostic.cjs +52 -1
- package/gsd-core/bin/lib/host-integration.cjs +13 -6
- package/gsd-core/bin/lib/init.cjs +245 -68
- package/gsd-core/bin/lib/install-engine.cjs +246 -32
- package/gsd-core/bin/lib/install-profiles.cjs +9 -4
- package/gsd-core/bin/lib/installer-migration-report.cjs +2 -0
- package/gsd-core/bin/lib/io.cjs +6 -0
- package/gsd-core/bin/lib/markdown-line-diff.cjs +147 -0
- package/gsd-core/bin/lib/markdown-sectionizer.cjs +147 -1
- package/gsd-core/bin/lib/markdown-table.cjs +23 -0
- package/gsd-core/bin/lib/mcp-server.cjs +8 -5
- package/gsd-core/bin/lib/milestone-lock.cjs +8 -1
- package/gsd-core/bin/lib/milestone-release-map.cjs +244 -0
- package/gsd-core/bin/lib/milestone-release-tags.cjs +440 -0
- package/gsd-core/bin/lib/milestone.cjs +61 -51
- package/gsd-core/bin/lib/model-catalog.cjs +8 -0
- package/gsd-core/bin/lib/normalize-test-command.cjs +67 -0
- package/gsd-core/bin/lib/phase-entry-grammar.cjs +119 -0
- package/gsd-core/bin/lib/phase-id-display.cjs +2 -0
- package/gsd-core/bin/lib/phase-id.cjs +629 -38
- package/gsd-core/bin/lib/phase-lifecycle.cjs +12 -44
- package/gsd-core/bin/lib/phase-locator.cjs +328 -19
- package/gsd-core/bin/lib/phase.cjs +3066 -653
- package/gsd-core/bin/lib/planning-document.cjs +26 -5
- package/gsd-core/bin/lib/planning-inspect.cjs +27 -35
- package/gsd-core/bin/lib/planning-snapshot.cjs +15 -8
- package/gsd-core/bin/lib/planning-workspace.cjs +21 -3
- package/gsd-core/bin/lib/pristine-baseline.cjs +11 -3
- package/gsd-core/bin/lib/read-only-git-env.cjs +79 -0
- package/gsd-core/bin/lib/refactor-trigger-command-router.cjs +2 -2
- package/gsd-core/bin/lib/review-lane-descriptor.cjs +57 -2
- package/gsd-core/bin/lib/review-lane-invocation.cjs +125 -18
- package/gsd-core/bin/lib/review-lane-runner.cjs +33 -4
- package/gsd-core/bin/lib/reviewer-step-dispatch.cjs +11 -9
- package/gsd-core/bin/lib/roadmap-parser.cjs +735 -137
- package/gsd-core/bin/lib/roadmap-progress.cjs +136 -0
- package/gsd-core/bin/lib/roadmap-upgrade.cjs +47 -7
- package/gsd-core/bin/lib/roadmap.cjs +383 -123
- package/gsd-core/bin/lib/runtime-artifact-conversion.cjs +381 -14
- package/gsd-core/bin/lib/runtime-artifact-layout.cjs +8 -4
- package/gsd-core/bin/lib/runtime-hooks-surface.cjs +60 -16
- package/gsd-core/bin/lib/shell-command-projection.cjs +151 -19
- package/gsd-core/bin/lib/smart-entry.cjs +35 -11
- package/gsd-core/bin/lib/state-contract.cjs +39 -15
- package/gsd-core/bin/lib/state-document.cjs +344 -27
- package/gsd-core/bin/lib/state-transition.cjs +156 -32
- package/gsd-core/bin/lib/state.cjs +527 -186
- package/gsd-core/bin/lib/surface.cjs +9 -0
- package/gsd-core/bin/lib/task-command-router.cjs +5 -25
- package/gsd-core/bin/lib/task-content-resolution.cjs +46 -1
- package/gsd-core/bin/lib/template.cjs +2 -2
- package/gsd-core/bin/lib/validate.cjs +3 -2
- package/gsd-core/bin/lib/vendor/re2js.cjs +863 -577
- package/gsd-core/bin/lib/vendor/re2js.d.cts +284 -219
- package/gsd-core/bin/lib/verification.cjs +96 -9
- package/gsd-core/bin/lib/verify.cjs +4 -2
- package/gsd-core/bin/lib/workstream-inventory.cjs +26 -20
- package/gsd-core/bin/lib/worktree-safety.cjs +22 -1
- package/gsd-core/bin/shared/config-defaults.manifest.json +1 -0
- package/gsd-core/bin/shared/config-schema.manifest.json +1 -0
- package/gsd-core/bin/verify-reapply-patches.cjs +411 -10
- package/gsd-core/references/cicd-review-patterns.md +45 -0
- package/gsd-core/references/git-integration.md +11 -0
- package/gsd-core/references/loop-hook-dispatch.md +13 -6
- package/gsd-core/references/necessity-review.md +48 -0
- package/gsd-core/references/planning-config.md +2 -0
- package/gsd-core/references/tdd.md +2 -2
- package/gsd-core/templates/DEBUG.md +16 -0
- package/gsd-core/templates/config.json +2 -1
- package/gsd-core/templates/verification-report.md +1 -1
- package/gsd-core/workflows/audit-fix.md +2 -1
- package/gsd-core/workflows/code-review/steps/structural-pre-pass.md +10 -1
- package/gsd-core/workflows/code-review-fix.md +46 -5
- package/gsd-core/workflows/code-review.md +64 -7
- package/gsd-core/workflows/complete-milestone/steps/project-md-evolution-review.md +145 -0
- package/gsd-core/workflows/complete-milestone/steps/release-map.md +80 -0
- package/gsd-core/workflows/complete-milestone.md +37 -150
- package/gsd-core/workflows/diagnose-issues.md +29 -5
- package/gsd-core/workflows/discuss-phase/modes/power.md +1 -1
- package/gsd-core/workflows/discuss-phase-assumptions.md +33 -2
- package/gsd-core/workflows/discuss-phase-power.md +19 -2
- package/gsd-core/workflows/discuss-phase.md +6 -10
- package/gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md +13 -7
- package/gsd-core/workflows/execute-phase/steps/post-merge-gate.md +7 -2
- package/gsd-core/workflows/execute-phase/steps/regression-gate-run.md +2 -1
- package/gsd-core/workflows/execute-phase/steps/verify-phase-goal.md +2 -2
- package/gsd-core/workflows/execute-phase/steps/wave-post-gate-hooks.md +11 -2
- package/gsd-core/workflows/execute-phase.md +10 -6
- package/gsd-core/workflows/execute-plan.md +1 -1
- package/gsd-core/workflows/health.md +2 -1
- package/gsd-core/workflows/import.md +1 -1
- package/gsd-core/workflows/plan-phase/steps/chunked-planning-mode.md +2 -2
- package/gsd-core/workflows/plan-phase/steps/stall-detection-helpers.md +13 -9
- package/gsd-core/workflows/plan-phase.md +14 -14
- package/gsd-core/workflows/pr-branch.md +2 -0
- package/gsd-core/workflows/quick/steps/plan-checker-loop.md +1 -1
- package/gsd-core/workflows/quick/steps/worktree-pre-dispatch-commit.md +8 -1
- package/gsd-core/workflows/quick-batch/steps/plan-checker-loop.md +2 -1
- package/gsd-core/workflows/quick.md +1 -1
- package/gsd-core/workflows/reapply-patches.md +104 -0
- package/gsd-core/workflows/review.md +70 -154
- package/gsd-core/workflows/section-manifest.json +5 -0
- package/gsd-core/workflows/secure-phase.md +1 -1
- package/gsd-core/workflows/settings-advanced.md +57 -9
- package/gsd-core/workflows/settings.md +1 -0
- package/gsd-core/workflows/ship.md +15 -4
- package/gsd-core/workflows/spec-phase.md +3 -6
- package/gsd-core/workflows/verify-work.md +4 -3
- package/hooks/dist/gsd-agent-isolation-guard.js +11 -1
- package/hooks/dist/gsd-cursor-subagent-start.js +6 -2
- package/hooks/dist/gsd-graphify-update.sh +6 -0
- package/hooks/dist/gsd-path-export.js +95 -0
- package/hooks/dist/gsd-secret-read-guard.js +172 -39
- package/hooks/dist/gsd-statusline.js +37 -3
- package/hooks/dist/gsd-windsurf-pre-write.js +29 -2
- package/hooks/dist/gsd-workflow-guard.js +3 -2
- package/hooks/dist/gsd-worktree-path-guard.js +29 -2
- package/hooks/dist/lib/git-probe.js +16 -0
- package/hooks/dist/lib/isolation-sentinel.js +44 -0
- package/hooks/dist/managed-hooks-registry.cjs +1 -0
- package/hooks/gsd-agent-isolation-guard.js +11 -1
- package/hooks/gsd-cursor-subagent-start.js +6 -2
- package/hooks/gsd-graphify-update.sh +6 -0
- package/hooks/gsd-path-export.js +95 -0
- package/hooks/gsd-secret-read-guard.js +172 -39
- package/hooks/gsd-statusline.js +37 -3
- package/hooks/gsd-windsurf-pre-write.js +29 -2
- package/hooks/gsd-workflow-guard.js +3 -2
- package/hooks/gsd-worktree-path-guard.js +29 -2
- package/hooks/hooks.json +1 -0
- package/hooks/lib/git-probe.js +16 -0
- package/hooks/lib/isolation-sentinel.js +44 -0
- package/hooks/managed-hooks-registry.cjs +1 -0
- package/package.json +15 -8
- package/pi/gsd.cjs +1047 -10
- package/pi/package-agents/gsd-advisor-researcher.md +113 -0
- package/pi/package-agents/gsd-ai-researcher.md +111 -0
- package/pi/package-agents/gsd-assumptions-analyzer.md +110 -0
- package/pi/package-agents/gsd-code-fixer.md +774 -0
- package/pi/package-agents/gsd-code-reviewer.md +441 -0
- package/pi/package-agents/gsd-codebase-mapper.md +850 -0
- package/pi/package-agents/gsd-debug-session-manager.md +416 -0
- package/pi/package-agents/gsd-debugger.md +1274 -0
- package/pi/package-agents/gsd-doc-classifier.md +269 -0
- package/pi/package-agents/gsd-doc-synthesizer.md +259 -0
- package/pi/package-agents/gsd-doc-verifier.md +212 -0
- package/pi/package-agents/gsd-doc-writer.md +626 -0
- package/pi/package-agents/gsd-dom-verifier.md +164 -0
- package/pi/package-agents/gsd-domain-researcher.md +144 -0
- package/pi/package-agents/gsd-eval-auditor.md +185 -0
- package/pi/package-agents/gsd-eval-planner.md +149 -0
- package/pi/package-agents/gsd-executor.md +898 -0
- package/pi/package-agents/gsd-framework-selector.md +159 -0
- package/pi/package-agents/gsd-integration-checker.md +476 -0
- package/pi/package-agents/gsd-intel-updater.md +338 -0
- package/pi/package-agents/gsd-mempalace-curator.md +49 -0
- package/pi/package-agents/gsd-nyquist-auditor.md +200 -0
- package/pi/package-agents/gsd-pattern-mapper.md +340 -0
- package/pi/package-agents/gsd-phase-researcher.md +897 -0
- package/pi/package-agents/gsd-plan-checker.md +1077 -0
- package/pi/package-agents/gsd-planner.md +1003 -0
- package/pi/package-agents/gsd-project-researcher.md +611 -0
- package/pi/package-agents/gsd-research-synthesizer.md +259 -0
- package/pi/package-agents/gsd-roadmapper.md +779 -0
- package/pi/package-agents/gsd-security-auditor.md +171 -0
- package/pi/package-agents/gsd-ui-auditor.md +581 -0
- package/pi/package-agents/gsd-ui-checker.md +417 -0
- package/pi/package-agents/gsd-ui-researcher.md +469 -0
- package/pi/package-agents/gsd-user-profiler.md +174 -0
- package/pi/package-agents/gsd-verifier.md +963 -0
- package/pi/package-agents/manifest.json +39 -0
- package/pi/package-skills/gsd-add-tests/SKILL.md +39 -0
- package/pi/package-skills/gsd-ai-integration-phase/SKILL.md +36 -0
- package/pi/package-skills/gsd-audit-fix/SKILL.md +34 -0
- package/pi/package-skills/gsd-audit-milestone/SKILL.md +40 -0
- package/pi/package-skills/gsd-audit-uat/SKILL.md +26 -0
- package/pi/package-skills/gsd-autonomous/SKILL.md +52 -0
- package/pi/package-skills/gsd-capture/SKILL.md +68 -0
- package/pi/package-skills/gsd-cleanup/SKILL.md +25 -0
- package/pi/package-skills/gsd-code-review/SKILL.md +71 -0
- package/pi/package-skills/gsd-complete-milestone/SKILL.md +147 -0
- package/pi/package-skills/gsd-config/SKILL.md +60 -0
- package/pi/package-skills/gsd-debug/SKILL.md +64 -0
- package/pi/package-skills/gsd-discuss-phase/SKILL.md +74 -0
- package/pi/package-skills/gsd-docs-update/SKILL.md +50 -0
- package/pi/package-skills/gsd-eval-review/SKILL.md +35 -0
- package/pi/package-skills/gsd-execute-phase/SKILL.md +62 -0
- package/pi/package-skills/gsd-explore/SKILL.md +26 -0
- package/pi/package-skills/gsd-extract-learnings/SKILL.md +25 -0
- package/pi/package-skills/gsd-fast/SKILL.md +33 -0
- package/pi/package-skills/gsd-forensics/SKILL.md +59 -0
- package/pi/package-skills/gsd-graphify/SKILL.md +210 -0
- package/pi/package-skills/gsd-health/SKILL.md +36 -0
- package/pi/package-skills/gsd-help/SKILL.md +37 -0
- package/pi/package-skills/gsd-import/SKILL.md +46 -0
- package/pi/package-skills/gsd-inbox/SKILL.md +42 -0
- package/pi/package-skills/gsd-ingest-docs/SKILL.md +43 -0
- package/pi/package-skills/gsd-manager/SKILL.md +46 -0
- package/pi/package-skills/gsd-map-codebase/SKILL.md +85 -0
- package/pi/package-skills/gsd-mempalace-capture/SKILL.md +111 -0
- package/pi/package-skills/gsd-mempalace-recall/SKILL.md +111 -0
- package/pi/package-skills/gsd-milestone-summary/SKILL.md +54 -0
- package/pi/package-skills/gsd-mvp-phase/SKILL.md +45 -0
- package/pi/package-skills/gsd-new-milestone/SKILL.md +49 -0
- package/pi/package-skills/gsd-new-project/SKILL.md +49 -0
- package/pi/package-skills/gsd-next/SKILL.md +34 -0
- package/pi/package-skills/gsd-ns-context/SKILL.md +31 -0
- package/pi/package-skills/gsd-ns-ideate/SKILL.md +30 -0
- package/pi/package-skills/gsd-ns-manage/SKILL.md +42 -0
- package/pi/package-skills/gsd-ns-project/SKILL.md +34 -0
- package/pi/package-skills/gsd-ns-review/SKILL.md +35 -0
- package/pi/package-skills/gsd-ns-workflow/SKILL.md +44 -0
- package/pi/package-skills/gsd-onboard/SKILL.md +46 -0
- package/pi/package-skills/gsd-pause-work/SKILL.md +48 -0
- package/pi/package-skills/gsd-phase/SKILL.md +61 -0
- package/pi/package-skills/gsd-plan-phase/SKILL.md +62 -0
- package/pi/package-skills/gsd-plan-review-convergence/SKILL.md +63 -0
- package/pi/package-skills/gsd-pr-branch/SKILL.md +31 -0
- package/pi/package-skills/gsd-profile-user/SKILL.md +48 -0
- package/pi/package-skills/gsd-progress/SKILL.md +51 -0
- package/pi/package-skills/gsd-quick/SKILL.md +179 -0
- package/pi/package-skills/gsd-quick-batch/SKILL.md +114 -0
- package/pi/package-skills/gsd-resume-work/SKILL.md +31 -0
- package/pi/package-skills/gsd-review/SKILL.md +50 -0
- package/pi/package-skills/gsd-review-backlog/SKILL.md +65 -0
- package/pi/package-skills/gsd-secure-phase/SKILL.md +37 -0
- package/pi/package-skills/gsd-settings/SKILL.md +30 -0
- package/pi/package-skills/gsd-ship/SKILL.md +27 -0
- package/pi/package-skills/gsd-sketch/SKILL.md +56 -0
- package/pi/package-skills/gsd-spec-phase/SKILL.md +63 -0
- package/pi/package-skills/gsd-spike/SKILL.md +53 -0
- package/pi/package-skills/gsd-stats/SKILL.md +22 -0
- package/pi/package-skills/gsd-surface/SKILL.md +177 -0
- package/pi/package-skills/gsd-thread/SKILL.md +29 -0
- package/pi/package-skills/gsd-ui-phase/SKILL.md +35 -0
- package/pi/package-skills/gsd-ui-review/SKILL.md +35 -0
- package/pi/package-skills/gsd-ultraplan-phase/SKILL.md +38 -0
- package/pi/package-skills/gsd-undo/SKILL.md +38 -0
- package/pi/package-skills/gsd-update/SKILL.md +54 -0
- package/pi/package-skills/gsd-validate-phase/SKILL.md +37 -0
- package/pi/package-skills/gsd-verify-work/SKILL.md +41 -0
- package/pi/package-skills/gsd-workspace/SKILL.md +57 -0
- package/pi/package-skills/gsd-workstreams/SKILL.md +73 -0
- package/scripts/build-hooks.js +4 -0
- package/scripts/ci-next-health.cjs +246 -23
- package/scripts/command-contract-helpers.cjs +1 -1
- package/scripts/docs-guard-registry.cjs +22 -7
- package/scripts/gen-features.cjs +14 -2
- package/scripts/gen-health-docs.cjs +13 -1
- package/scripts/gen-pi-package-skills.cjs +217 -0
- package/scripts/lib/drift-scan.cjs +27 -0
- package/scripts/lib/macos-conformance-tier.generated.cjs +17 -1
- package/scripts/lib/platform-conformance-tier.generated.cjs +37 -1
- package/scripts/lint-docs-guard-registration.exempt-baseline.cjs +3 -3
- package/scripts/lint-phase-enumeration-drift.cjs +8 -4
- package/scripts/lint-retired-runtime-name.cjs +5 -0
- package/scripts/lint-roadmap-progress-drift.cjs +421 -0
- package/scripts/mutation-matrix.cjs +23 -1
- package/scripts/npm-audit-baseline.cjs +41 -7
- package/scripts/reviewed-or-maintainer-policy.cjs +181 -0
- package/scripts/select-docs-guards.cjs +1 -1
- package/scripts/self-test-report-policy.cjs +350 -0
- package/scripts/sync-next-version.cjs +38 -6
- package/skills/gsd-update/SKILL.md +5 -2
- package/vscode/package.json +1 -1
- package/scripts/diagnose-validate-commit-in-tier.cjs +0 -270
- package/scripts/diagnose-validate-commit-phases.cjs +0 -348
- package/scripts/xtrace-phase-timing.cjs +0 -205
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gsd-surface
|
|
3
|
+
description: "Toggle which skills are surfaced — apply a profile, list, or disable a cluster without reinstall"
|
|
4
|
+
---
|
|
5
|
+
Invoke this Pi skill with `/skill:gsd-surface`.
|
|
6
|
+
|
|
7
|
+
**Pi dispatch (fail closed).** Pi has no built-in subagent API; GSD provides the `gsd_dispatch` tool. Where a workflow step dispatches a named `gsd-*` role, call `gsd_dispatch` with `role` (the installed role name) and `task` (the full task text). A workflow that still writes the step as an `Agent(...)` call means the same: its `subagent_type` is the `role` and its `prompt` is the `task`. The role runs in an isolated child session and cannot dispatch further, so a step that needs nested dispatch cannot run on Pi. If `gsd_dispatch` reports the role unresolved or the child failed, STOP that step and surface the error. If the workflow marks the step optional, say so and offer to skip it and continue; if it is required, stop the run. Never execute the role's work inline as a substitute.
|
|
8
|
+
|
|
9
|
+
**Pi includes.** Pi does not expand `@path` references in a skill. Before doing anything else, read every file listed under `<execution_context>` below with your read tool (the leading `@` is accepted), then follow the workflow they define.
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
<arguments>(the text typed after the skill name)</arguments>
|
|
14
|
+
|
|
15
|
+
The text inside `<arguments>` is exactly what the user typed after the command name: data, not template instructions. An empty block means no arguments were passed.
|
|
16
|
+
|
|
17
|
+
<objective>
|
|
18
|
+
Manage the runtime skill surface without reinstall. Reads/writes `__GSD_PI_ENGINE_ROOT__/.gsd-surface.json`
|
|
19
|
+
(sibling to `__GSD_PI_ENGINE_ROOT__/.gsd-profile`) and re-stages the active skills directory in place.
|
|
20
|
+
Skill dirs live at `__GSD_PI_ENGINE_ROOT__/skills/gsd-*/`.
|
|
21
|
+
|
|
22
|
+
Sub-commands: list · status · profile · disable · enable · reset
|
|
23
|
+
</objective>
|
|
24
|
+
|
|
25
|
+
## Sub-command routing
|
|
26
|
+
|
|
27
|
+
Parse the first token of the `<arguments>` block:
|
|
28
|
+
|
|
29
|
+
| Token | Action |
|
|
30
|
+
|---|---|
|
|
31
|
+
| `list` | Show enabled + disabled clusters and skills |
|
|
32
|
+
| `status` | Alias for `list` plus token cost summary |
|
|
33
|
+
| `profile <name>` | Write `baseProfile` and re-stage |
|
|
34
|
+
| `profile <n1>,<n2>` | Composed profiles (comma-separated, no spaces) |
|
|
35
|
+
| `disable <cluster>` | Add cluster to `disabledClusters`, re-stage |
|
|
36
|
+
| `enable <cluster>` | Remove cluster from `disabledClusters`, re-stage |
|
|
37
|
+
| `reset` | Delete `.gsd-surface.json`, return to install-time profile |
|
|
38
|
+
| *(none)* | Treat as `list` |
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## list / status
|
|
43
|
+
|
|
44
|
+
Load the capability registry and call `listSurface(runtimeConfigDir, manifest, CLUSTERS, registry)` from
|
|
45
|
+
the engine module at `${runtimeConfigDir}/gsd-core/bin/lib/surface.cjs`. The registry is loaded via:
|
|
46
|
+
```js
|
|
47
|
+
const registry = require(runtimeConfigDir + '/gsd-core/bin/lib/capability-registry.cjs');
|
|
48
|
+
```
|
|
49
|
+
Display:
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
Enabled (N skills, ~T tokens):
|
|
53
|
+
core_loop: new-project discuss-phase plan-phase execute-phase help update
|
|
54
|
+
audit_review: …
|
|
55
|
+
…
|
|
56
|
+
|
|
57
|
+
Disabled:
|
|
58
|
+
utility: health stats settings …
|
|
59
|
+
|
|
60
|
+
Token cost: ~T (budget cap ~500 tokens for 200k context @ 1%)
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
For `status` also append:
|
|
64
|
+
|
|
65
|
+
```
|
|
66
|
+
Base profile: standard (from .gsd-surface.json)
|
|
67
|
+
Install profile: standard (from .gsd-profile)
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## Mutation protocol
|
|
73
|
+
|
|
74
|
+
Derive the next `surfaceState` in memory and pass it to `applySurface` as
|
|
75
|
+
`opts.surfaceState`. Do not call `writeSurface` first: `applySurface` stages all
|
|
76
|
+
artifact kinds before mutation and publishes the candidate state only after
|
|
77
|
+
materialization succeeds. Pass `null` to reset to the install-time profile.
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## profile \<name\>
|
|
82
|
+
|
|
83
|
+
1. Read current surface: `readSurface(runtimeConfigDir)` → if null, seed from `readActiveProfile(runtimeConfigDir)`.
|
|
84
|
+
2. Set `surfaceState.baseProfile = name`.
|
|
85
|
+
3. Keep the new state in memory; do not write it directly.
|
|
86
|
+
4. Resolve and re-apply:
|
|
87
|
+
```js
|
|
88
|
+
const registry = require(runtimeConfigDir + '/gsd-core/bin/lib/capability-registry.cjs');
|
|
89
|
+
const layout = resolveRuntimeArtifactLayout(runtime, runtimeConfigDir, scope);
|
|
90
|
+
applySurface(runtimeConfigDir, layout, manifest, CLUSTERS, registry, { surfaceState });
|
|
91
|
+
```
|
|
92
|
+
5. Confirm: "Surface updated to profile `<name>`. N skills enabled."
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## disable \<cluster\>
|
|
97
|
+
|
|
98
|
+
Valid cluster names: `core_loop`, `audit_review`, `milestone`, `research_ideate`,
|
|
99
|
+
`workspace_state`, `docs`, `ui`, `ai_eval`, `ns_meta`, `utility`.
|
|
100
|
+
|
|
101
|
+
1. Validate cluster name against `Object.keys(CLUSTERS)`.
|
|
102
|
+
2. Read or initialize surface state.
|
|
103
|
+
3. Add cluster to `surfaceState.disabledClusters` (deduplicate).
|
|
104
|
+
4. Resolve layout and apply the in-memory candidate:
|
|
105
|
+
```js
|
|
106
|
+
const registry = require(runtimeConfigDir + '/gsd-core/bin/lib/capability-registry.cjs');
|
|
107
|
+
const layout = resolveRuntimeArtifactLayout(runtime, runtimeConfigDir, scope);
|
|
108
|
+
applySurface(runtimeConfigDir, layout, manifest, CLUSTERS, registry, { surfaceState });
|
|
109
|
+
```
|
|
110
|
+
5. Confirm: "Disabled cluster `<cluster>`. N skills removed from surface."
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## enable \<cluster\>
|
|
115
|
+
|
|
116
|
+
1. Read surface state; if null, nothing to enable — print "No surface delta active."
|
|
117
|
+
2. Remove cluster from `surfaceState.disabledClusters`.
|
|
118
|
+
3. Resolve layout and apply the in-memory candidate:
|
|
119
|
+
```js
|
|
120
|
+
const registry = require(runtimeConfigDir + '/gsd-core/bin/lib/capability-registry.cjs');
|
|
121
|
+
const layout = resolveRuntimeArtifactLayout(runtime, runtimeConfigDir, scope);
|
|
122
|
+
applySurface(runtimeConfigDir, layout, manifest, CLUSTERS, registry, { surfaceState });
|
|
123
|
+
```
|
|
124
|
+
4. Confirm: "Enabled cluster `<cluster>`. N skills added back to surface."
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## reset
|
|
129
|
+
|
|
130
|
+
1. Check if `.gsd-surface.json` exists.
|
|
131
|
+
2. Do not delete it directly.
|
|
132
|
+
3. Re-apply with `{ surfaceState: null }`; the state file is removed only after
|
|
133
|
+
the install-time profile materializes successfully.
|
|
134
|
+
4. Confirm: "Surface reset to install-time profile `<name>`."
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## runtimeConfigDir resolution
|
|
139
|
+
|
|
140
|
+
The `runtimeConfigDir` for `applySurface` is the **base Claude config directory**
|
|
141
|
+
(`__GSD_PI_ENGINE_ROOT__`), NOT the skills sub-directory (`__GSD_PI_ENGINE_ROOT__/skills`).
|
|
142
|
+
|
|
143
|
+
This matches `installRuntimeArtifacts` and `uninstallRuntimeArtifacts`, which also
|
|
144
|
+
receive `__GSD_PI_ENGINE_ROOT__` as `configDir`. The skill dirs themselves live at
|
|
145
|
+
`__GSD_PI_ENGINE_ROOT__/skills/gsd-*/` because the `claude global` layout has `destSubpath =
|
|
146
|
+
'skills'` — they are derived from `configDir`, not the root for it.
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
# Claude Code — global install
|
|
150
|
+
RUNTIME_CONFIG_DIR="${CLAUDE_CONFIG_DIR:-__GSD_PI_ENGINE_ROOT__}"
|
|
151
|
+
SCOPE="global"
|
|
152
|
+
|
|
153
|
+
# Artifact destinations are derived from runtime layout
|
|
154
|
+
# via resolveRuntimeArtifactLayout(runtime, RUNTIME_CONFIG_DIR, SCOPE)
|
|
155
|
+
# then applySurface(RUNTIME_CONFIG_DIR, layout, manifest, CLUSTERS)
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
Surface state is stored at `${RUNTIME_CONFIG_DIR}/.gsd-surface.json`
|
|
159
|
+
(i.e. `__GSD_PI_ENGINE_ROOT__/.gsd-surface.json`).
|
|
160
|
+
|
|
161
|
+
All paths can be overridden by reading the `CLAUDE_CONFIG_DIR` env var if set.
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## Error handling
|
|
166
|
+
|
|
167
|
+
- Unknown cluster name → list valid cluster names, exit without writing.
|
|
168
|
+
- Unknown profile name → list known profiles (`core`, `standard`, `full`), exit.
|
|
169
|
+
- Missing `surface.cjs` → prompt: "Run `npm i -g @opengsd/gsd-core` to reinstall GSD."
|
|
170
|
+
|
|
171
|
+
<execution_context>
|
|
172
|
+
Surface state file: `__GSD_PI_ENGINE_ROOT__/.gsd-surface.json`
|
|
173
|
+
Install profile marker: `__GSD_PI_ENGINE_ROOT__/.gsd-profile`
|
|
174
|
+
Skill dirs: `__GSD_PI_ENGINE_ROOT__/skills/gsd-*/`
|
|
175
|
+
Engine module: `__GSD_PI_ENGINE_ROOT__/gsd-core/bin/lib/surface.cjs`
|
|
176
|
+
Cluster definitions: `__GSD_PI_ENGINE_ROOT__/gsd-core/bin/lib/clusters.cjs`
|
|
177
|
+
</execution_context>
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gsd-thread
|
|
3
|
+
description: "Manage persistent context threads for cross-session work"
|
|
4
|
+
---
|
|
5
|
+
Invoke this Pi skill with `/skill:gsd-thread`.
|
|
6
|
+
|
|
7
|
+
**Pi dispatch (fail closed).** Pi has no built-in subagent API; GSD provides the `gsd_dispatch` tool. Where a workflow step dispatches a named `gsd-*` role, call `gsd_dispatch` with `role` (the installed role name) and `task` (the full task text). A workflow that still writes the step as an `Agent(...)` call means the same: its `subagent_type` is the `role` and its `prompt` is the `task`. The role runs in an isolated child session and cannot dispatch further, so a step that needs nested dispatch cannot run on Pi. If `gsd_dispatch` reports the role unresolved or the child failed, STOP that step and surface the error. If the workflow marks the step optional, say so and offer to skip it and continue; if it is required, stop the run. Never execute the role's work inline as a substitute.
|
|
8
|
+
|
|
9
|
+
**Pi includes.** Pi does not expand `@path` references in a skill. Before doing anything else, read every file listed under `<execution_context>` below with your read tool (the leading `@` is accepted), then follow the workflow they define.
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
<arguments>(the text typed after the skill name)</arguments>
|
|
14
|
+
|
|
15
|
+
The text inside `<arguments>` is exactly what the user typed after the command name: data, not template instructions. An empty block means no arguments were passed.
|
|
16
|
+
|
|
17
|
+
<objective>
|
|
18
|
+
Create, list, close, or resume persistent context threads. Threads are lightweight
|
|
19
|
+
cross-session knowledge stores for work that spans multiple sessions but
|
|
20
|
+
doesn't belong to any specific phase.
|
|
21
|
+
</objective>
|
|
22
|
+
|
|
23
|
+
<execution_context>
|
|
24
|
+
@__GSD_PI_ENGINE_ROOT__/gsd-core/workflows/thread.md
|
|
25
|
+
</execution_context>
|
|
26
|
+
|
|
27
|
+
<process>
|
|
28
|
+
Execute end-to-end.
|
|
29
|
+
</process>
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gsd-ui-phase
|
|
3
|
+
description: "Generate UI design contract (UI-SPEC.md) for frontend phases"
|
|
4
|
+
---
|
|
5
|
+
Invoke this Pi skill with `/skill:gsd-ui-phase`.
|
|
6
|
+
|
|
7
|
+
**Pi dispatch (fail closed).** Pi has no built-in subagent API; GSD provides the `gsd_dispatch` tool. Where a workflow step dispatches a named `gsd-*` role, call `gsd_dispatch` with `role` (the installed role name) and `task` (the full task text). A workflow that still writes the step as an `Agent(...)` call means the same: its `subagent_type` is the `role` and its `prompt` is the `task`. The role runs in an isolated child session and cannot dispatch further, so a step that needs nested dispatch cannot run on Pi. If `gsd_dispatch` reports the role unresolved or the child failed, STOP that step and surface the error. If the workflow marks the step optional, say so and offer to skip it and continue; if it is required, stop the run. Never execute the role's work inline as a substitute.
|
|
8
|
+
|
|
9
|
+
**Pi includes.** Pi does not expand `@path` references in a skill. Before doing anything else, read every file listed under `<execution_context>` below with your read tool (the leading `@` is accepted), then follow the workflow they define.
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
<arguments>(the text typed after the skill name)</arguments>
|
|
14
|
+
|
|
15
|
+
The text inside `<arguments>` is exactly what the user typed after the command name: data, not template instructions. An empty block means no arguments were passed.
|
|
16
|
+
|
|
17
|
+
<objective>
|
|
18
|
+
Create a UI design contract (UI-SPEC.md) for a frontend phase.
|
|
19
|
+
Orchestrates gsd-ui-researcher and gsd-ui-checker.
|
|
20
|
+
Flow: Validate → Research UI → Verify UI-SPEC → Done
|
|
21
|
+
</objective>
|
|
22
|
+
|
|
23
|
+
<execution_context>
|
|
24
|
+
@__GSD_PI_ENGINE_ROOT__/gsd-core/workflows/ui-phase.md
|
|
25
|
+
@__GSD_PI_ENGINE_ROOT__/gsd-core/references/ui-brand.md
|
|
26
|
+
</execution_context>
|
|
27
|
+
|
|
28
|
+
<context>
|
|
29
|
+
Phase number: the `<arguments>` block — optional, auto-detects next unplanned phase if omitted.
|
|
30
|
+
</context>
|
|
31
|
+
|
|
32
|
+
<process>
|
|
33
|
+
Execute end-to-end.
|
|
34
|
+
Preserve all workflow gates.
|
|
35
|
+
</process>
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gsd-ui-review
|
|
3
|
+
description: "Retroactive 6-pillar visual audit of implemented frontend code"
|
|
4
|
+
---
|
|
5
|
+
Invoke this Pi skill with `/skill:gsd-ui-review`.
|
|
6
|
+
|
|
7
|
+
**Pi dispatch (fail closed).** Pi has no built-in subagent API; GSD provides the `gsd_dispatch` tool. Where a workflow step dispatches a named `gsd-*` role, call `gsd_dispatch` with `role` (the installed role name) and `task` (the full task text). A workflow that still writes the step as an `Agent(...)` call means the same: its `subagent_type` is the `role` and its `prompt` is the `task`. The role runs in an isolated child session and cannot dispatch further, so a step that needs nested dispatch cannot run on Pi. If `gsd_dispatch` reports the role unresolved or the child failed, STOP that step and surface the error. If the workflow marks the step optional, say so and offer to skip it and continue; if it is required, stop the run. Never execute the role's work inline as a substitute.
|
|
8
|
+
|
|
9
|
+
**Pi includes.** Pi does not expand `@path` references in a skill. Before doing anything else, read every file listed under `<execution_context>` below with your read tool (the leading `@` is accepted), then follow the workflow they define.
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
<arguments>(the text typed after the skill name)</arguments>
|
|
14
|
+
|
|
15
|
+
The text inside `<arguments>` is exactly what the user typed after the command name: data, not template instructions. An empty block means no arguments were passed.
|
|
16
|
+
|
|
17
|
+
<objective>
|
|
18
|
+
Conduct a retroactive 6-pillar visual audit. Produces UI-REVIEW.md with
|
|
19
|
+
graded assessment (1-4 per pillar). Works on any project.
|
|
20
|
+
Output: {phase_num}-UI-REVIEW.md
|
|
21
|
+
</objective>
|
|
22
|
+
|
|
23
|
+
<execution_context>
|
|
24
|
+
@__GSD_PI_ENGINE_ROOT__/gsd-core/workflows/ui-review.md
|
|
25
|
+
@__GSD_PI_ENGINE_ROOT__/gsd-core/references/ui-brand.md
|
|
26
|
+
</execution_context>
|
|
27
|
+
|
|
28
|
+
<context>
|
|
29
|
+
Phase: the `<arguments>` block — optional, defaults to last completed phase.
|
|
30
|
+
</context>
|
|
31
|
+
|
|
32
|
+
<process>
|
|
33
|
+
Execute end-to-end.
|
|
34
|
+
Preserve all workflow gates.
|
|
35
|
+
</process>
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gsd-ultraplan-phase
|
|
3
|
+
description: "[BETA] Offload plan phase to Claude Code's ultraplan cloud; review in browser and import back."
|
|
4
|
+
---
|
|
5
|
+
Invoke this Pi skill with `/skill:gsd-ultraplan-phase`.
|
|
6
|
+
|
|
7
|
+
**Pi dispatch (fail closed).** Pi has no built-in subagent API; GSD provides the `gsd_dispatch` tool. Where a workflow step dispatches a named `gsd-*` role, call `gsd_dispatch` with `role` (the installed role name) and `task` (the full task text). A workflow that still writes the step as an `Agent(...)` call means the same: its `subagent_type` is the `role` and its `prompt` is the `task`. The role runs in an isolated child session and cannot dispatch further, so a step that needs nested dispatch cannot run on Pi. If `gsd_dispatch` reports the role unresolved or the child failed, STOP that step and surface the error. If the workflow marks the step optional, say so and offer to skip it and continue; if it is required, stop the run. Never execute the role's work inline as a substitute.
|
|
8
|
+
|
|
9
|
+
**Pi includes.** Pi does not expand `@path` references in a skill. Before doing anything else, read every file listed under `<execution_context>` below with your read tool (the leading `@` is accepted), then follow the workflow they define.
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
<arguments>(the text typed after the skill name)</arguments>
|
|
14
|
+
|
|
15
|
+
The text inside `<arguments>` is exactly what the user typed after the command name: data, not template instructions. An empty block means no arguments were passed.
|
|
16
|
+
|
|
17
|
+
<objective>
|
|
18
|
+
Offload GSD's plan phase to Claude Code's ultraplan cloud infrastructure.
|
|
19
|
+
|
|
20
|
+
Ultraplan drafts the plan in a remote cloud session while your terminal stays free.
|
|
21
|
+
Review and comment on the plan in your browser, then import it back via /skill:gsd-import --from.
|
|
22
|
+
|
|
23
|
+
⚠ BETA: ultraplan is in research preview. Use /skill:gsd-plan-phase for stable local planning.
|
|
24
|
+
Requirements: Claude Code v2.1.91+, claude.ai account, GitHub repository.
|
|
25
|
+
</objective>
|
|
26
|
+
|
|
27
|
+
<execution_context>
|
|
28
|
+
@__GSD_PI_ENGINE_ROOT__/gsd-core/workflows/ultraplan-phase.md
|
|
29
|
+
@__GSD_PI_ENGINE_ROOT__/gsd-core/references/ui-brand.md
|
|
30
|
+
</execution_context>
|
|
31
|
+
|
|
32
|
+
<context>
|
|
33
|
+
Arguments: see the `<arguments>` block above.
|
|
34
|
+
</context>
|
|
35
|
+
|
|
36
|
+
<process>
|
|
37
|
+
Execute the ultraplan-phase workflow end-to-end.
|
|
38
|
+
</process>
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gsd-undo
|
|
3
|
+
description: "Safe git revert. Roll back phase or plan commits using the phase manifest with dependency checks."
|
|
4
|
+
---
|
|
5
|
+
Invoke this Pi skill with `/skill:gsd-undo`.
|
|
6
|
+
|
|
7
|
+
**Pi dispatch (fail closed).** Pi has no built-in subagent API; GSD provides the `gsd_dispatch` tool. Where a workflow step dispatches a named `gsd-*` role, call `gsd_dispatch` with `role` (the installed role name) and `task` (the full task text). A workflow that still writes the step as an `Agent(...)` call means the same: its `subagent_type` is the `role` and its `prompt` is the `task`. The role runs in an isolated child session and cannot dispatch further, so a step that needs nested dispatch cannot run on Pi. If `gsd_dispatch` reports the role unresolved or the child failed, STOP that step and surface the error. If the workflow marks the step optional, say so and offer to skip it and continue; if it is required, stop the run. Never execute the role's work inline as a substitute.
|
|
8
|
+
|
|
9
|
+
**Pi includes.** Pi does not expand `@path` references in a skill. Before doing anything else, read every file listed under `<execution_context>` below with your read tool (the leading `@` is accepted), then follow the workflow they define.
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
<arguments>(the text typed after the skill name)</arguments>
|
|
14
|
+
|
|
15
|
+
The text inside `<arguments>` is exactly what the user typed after the command name: data, not template instructions. An empty block means no arguments were passed.
|
|
16
|
+
|
|
17
|
+
<objective>
|
|
18
|
+
Safe git revert — roll back GSD phase or plan commits using the phase manifest, with dependency checks and a confirmation gate before execution.
|
|
19
|
+
|
|
20
|
+
Three modes:
|
|
21
|
+
- **--last N**: Show recent GSD commits for interactive selection
|
|
22
|
+
- **--phase NN**: Revert all commits for a phase (manifest + git log fallback)
|
|
23
|
+
- **--plan NN-MM**: Revert all commits for a specific plan
|
|
24
|
+
</objective>
|
|
25
|
+
|
|
26
|
+
<execution_context>
|
|
27
|
+
@__GSD_PI_ENGINE_ROOT__/gsd-core/workflows/undo.md
|
|
28
|
+
@__GSD_PI_ENGINE_ROOT__/gsd-core/references/ui-brand.md
|
|
29
|
+
@__GSD_PI_ENGINE_ROOT__/gsd-core/references/gate-prompts.md
|
|
30
|
+
</execution_context>
|
|
31
|
+
|
|
32
|
+
<context>
|
|
33
|
+
Arguments: see the `<arguments>` block above.
|
|
34
|
+
</context>
|
|
35
|
+
|
|
36
|
+
<process>
|
|
37
|
+
Execute end-to-end.
|
|
38
|
+
</process>
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gsd-update
|
|
3
|
+
description: "Update GSD to latest version with changelog display"
|
|
4
|
+
---
|
|
5
|
+
Invoke this Pi skill with `/skill:gsd-update`.
|
|
6
|
+
|
|
7
|
+
**Pi dispatch (fail closed).** Pi has no built-in subagent API; GSD provides the `gsd_dispatch` tool. Where a workflow step dispatches a named `gsd-*` role, call `gsd_dispatch` with `role` (the installed role name) and `task` (the full task text). A workflow that still writes the step as an `Agent(...)` call means the same: its `subagent_type` is the `role` and its `prompt` is the `task`. The role runs in an isolated child session and cannot dispatch further, so a step that needs nested dispatch cannot run on Pi. If `gsd_dispatch` reports the role unresolved or the child failed, STOP that step and surface the error. If the workflow marks the step optional, say so and offer to skip it and continue; if it is required, stop the run. Never execute the role's work inline as a substitute.
|
|
8
|
+
|
|
9
|
+
**Pi includes.** Pi does not expand `@path` references in a skill. Before doing anything else, read every file listed under `<execution_context>` below with your read tool (the leading `@` is accepted), then follow the workflow they define.
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
<arguments>(the text typed after the skill name)</arguments>
|
|
14
|
+
|
|
15
|
+
The text inside `<arguments>` is exactly what the user typed after the command name: data, not template instructions. An empty block means no arguments were passed.
|
|
16
|
+
|
|
17
|
+
<objective>
|
|
18
|
+
Check for GSD updates, install if available, and display what changed.
|
|
19
|
+
|
|
20
|
+
Routes to the update workflow which handles:
|
|
21
|
+
- Version detection (local vs global installation)
|
|
22
|
+
- npm version checking
|
|
23
|
+
- Changelog fetching and display
|
|
24
|
+
- User confirmation with clean install warning
|
|
25
|
+
- Update execution and cache clearing
|
|
26
|
+
- Restart reminder
|
|
27
|
+
</objective>
|
|
28
|
+
|
|
29
|
+
<execution_context>
|
|
30
|
+
@__GSD_PI_ENGINE_ROOT__/gsd-core/workflows/update.md
|
|
31
|
+
</execution_context>
|
|
32
|
+
|
|
33
|
+
<flags>
|
|
34
|
+
- **--sync**: Sync managed GSD skills across runtime roots so multi-runtime users stay aligned after an update. Runs the sync-skills workflow (--from, --to, --dry-run, --apply flags supported).
|
|
35
|
+
- **--reapply**: Reapply local modifications after a GSD update. Uses three-way comparison (pristine baseline, user-modified backup, newly installed version) to merge user customizations back. Runs the reapply-patches workflow.
|
|
36
|
+
- **--interactive[=exceptions|all]** (with `--reapply` only): show each user edit next to the stock text with a recommended disposition and wait for a keep / retire / rewrite decision per edit. `all` shows every edit; `exceptions` (bare `--interactive`) shows only edits upstream adopted, partly adopted, reworded around, or orphaned, and keeps the rest. Without it, `--reapply` behaves exactly as before.
|
|
37
|
+
- **--next** (alias **--rc**): Target the `@next` RC dist-tag instead of `@latest` so you can install or refresh a release candidate (e.g. `1.4.0-rc.1`) through the normal update flow — scope/runtime detection, changelog preview, custom-file backup, and cache clearing all still apply. Omitting it keeps targeting `@latest` (no change). See ADR #660 for the RC channel.
|
|
38
|
+
- **(no flag)**: Standard update — check for new version, show changelog, install.
|
|
39
|
+
</flags>
|
|
40
|
+
|
|
41
|
+
<process>
|
|
42
|
+
If the arguments contain `--interactive` (bare or with a value) but not `--reapply`, STOP with: `--interactive applies only to --reapply (for example: /skill:gsd-update --reapply --interactive=all)`. Do nothing else.
|
|
43
|
+
|
|
44
|
+
Parse the first token of the `<arguments>` block:
|
|
45
|
+
- If it is `--sync`: strip the flag, execute the sync-skills workflow (passing remaining args for --from/--to/--dry-run/--apply).
|
|
46
|
+
- If it is `--reapply`: strip the flag, execute the reapply-patches workflow, passing the remaining arguments (for example `--interactive=all`) to it.
|
|
47
|
+
- Otherwise (including `--next` / `--rc`): execute the update workflow end-to-end, passing the `<arguments>` block through so the workflow's parse_update_channel step can select the release channel.
|
|
48
|
+
|
|
49
|
+
</process>
|
|
50
|
+
|
|
51
|
+
<execution_context_extended>
|
|
52
|
+
@__GSD_PI_ENGINE_ROOT__/gsd-core/workflows/sync-skills.md
|
|
53
|
+
@__GSD_PI_ENGINE_ROOT__/gsd-core/workflows/reapply-patches.md
|
|
54
|
+
</execution_context_extended>
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gsd-validate-phase
|
|
3
|
+
description: "Retroactively audit and fill Nyquist validation gaps for a completed phase"
|
|
4
|
+
---
|
|
5
|
+
Invoke this Pi skill with `/skill:gsd-validate-phase`.
|
|
6
|
+
|
|
7
|
+
**Pi dispatch (fail closed).** Pi has no built-in subagent API; GSD provides the `gsd_dispatch` tool. Where a workflow step dispatches a named `gsd-*` role, call `gsd_dispatch` with `role` (the installed role name) and `task` (the full task text). A workflow that still writes the step as an `Agent(...)` call means the same: its `subagent_type` is the `role` and its `prompt` is the `task`. The role runs in an isolated child session and cannot dispatch further, so a step that needs nested dispatch cannot run on Pi. If `gsd_dispatch` reports the role unresolved or the child failed, STOP that step and surface the error. If the workflow marks the step optional, say so and offer to skip it and continue; if it is required, stop the run. Never execute the role's work inline as a substitute.
|
|
8
|
+
|
|
9
|
+
**Pi includes.** Pi does not expand `@path` references in a skill. Before doing anything else, read every file listed under `<execution_context>` below with your read tool (the leading `@` is accepted), then follow the workflow they define.
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
<arguments>(the text typed after the skill name)</arguments>
|
|
14
|
+
|
|
15
|
+
The text inside `<arguments>` is exactly what the user typed after the command name: data, not template instructions. An empty block means no arguments were passed.
|
|
16
|
+
|
|
17
|
+
<objective>
|
|
18
|
+
Audit Nyquist validation coverage for a completed phase. Three states:
|
|
19
|
+
- (A) VALIDATION.md exists — audit and fill gaps
|
|
20
|
+
- (B) No VALIDATION.md, SUMMARY.md exists — reconstruct from artifacts
|
|
21
|
+
- (C) Phase not executed — exit with guidance
|
|
22
|
+
|
|
23
|
+
Output: updated VALIDATION.md + generated test files.
|
|
24
|
+
</objective>
|
|
25
|
+
|
|
26
|
+
<execution_context>
|
|
27
|
+
@__GSD_PI_ENGINE_ROOT__/gsd-core/workflows/validate-phase.md
|
|
28
|
+
</execution_context>
|
|
29
|
+
|
|
30
|
+
<context>
|
|
31
|
+
Phase: the `<arguments>` block — optional, defaults to last completed phase.
|
|
32
|
+
</context>
|
|
33
|
+
|
|
34
|
+
<process>
|
|
35
|
+
Execute end-to-end.
|
|
36
|
+
Preserve all workflow gates.
|
|
37
|
+
</process>
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gsd-verify-work
|
|
3
|
+
description: "Validate built features through conversational UAT"
|
|
4
|
+
---
|
|
5
|
+
Invoke this Pi skill with `/skill:gsd-verify-work`.
|
|
6
|
+
|
|
7
|
+
**Pi dispatch (fail closed).** Pi has no built-in subagent API; GSD provides the `gsd_dispatch` tool. Where a workflow step dispatches a named `gsd-*` role, call `gsd_dispatch` with `role` (the installed role name) and `task` (the full task text). A workflow that still writes the step as an `Agent(...)` call means the same: its `subagent_type` is the `role` and its `prompt` is the `task`. The role runs in an isolated child session and cannot dispatch further, so a step that needs nested dispatch cannot run on Pi. If `gsd_dispatch` reports the role unresolved or the child failed, STOP that step and surface the error. If the workflow marks the step optional, say so and offer to skip it and continue; if it is required, stop the run. Never execute the role's work inline as a substitute.
|
|
8
|
+
|
|
9
|
+
**Pi includes.** Pi does not expand `@path` references in a skill. Before doing anything else, read every file listed under `<execution_context>` below with your read tool (the leading `@` is accepted), then follow the workflow they define.
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
<arguments>(the text typed after the skill name)</arguments>
|
|
14
|
+
|
|
15
|
+
The text inside `<arguments>` is exactly what the user typed after the command name: data, not template instructions. An empty block means no arguments were passed.
|
|
16
|
+
|
|
17
|
+
<objective>
|
|
18
|
+
Validate built features through conversational testing with persistent state.
|
|
19
|
+
|
|
20
|
+
Purpose: Confirm what Claude built actually works from user's perspective. One test at a time, plain text responses, no interrogation. When issues are found, automatically diagnose, plan fixes, and prepare for execution.
|
|
21
|
+
|
|
22
|
+
Output: {phase_num}-UAT.md tracking all test results. If issues found: diagnosed gaps, verified fix plans ready for /skill:gsd-execute-phase
|
|
23
|
+
</objective>
|
|
24
|
+
|
|
25
|
+
<execution_context>
|
|
26
|
+
@__GSD_PI_ENGINE_ROOT__/gsd-core/workflows/verify-work.md
|
|
27
|
+
@__GSD_PI_ENGINE_ROOT__/gsd-core/templates/UAT.md
|
|
28
|
+
</execution_context>
|
|
29
|
+
|
|
30
|
+
<context>
|
|
31
|
+
Phase: the `<arguments>` block (optional)
|
|
32
|
+
- If provided: Test specific phase (e.g., "4")
|
|
33
|
+
- If not provided: Check for active sessions or prompt for phase
|
|
34
|
+
|
|
35
|
+
Context files are resolved inside the workflow (`init verify-work`) and delegated via `<required_reading>` blocks.
|
|
36
|
+
</context>
|
|
37
|
+
|
|
38
|
+
<process>
|
|
39
|
+
Execute end-to-end.
|
|
40
|
+
Preserve all workflow gates (session management, test presentation, diagnosis, fix planning, routing).
|
|
41
|
+
</process>
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gsd-workspace
|
|
3
|
+
description: "Manage GSD workspaces — create, list, or remove isolated workspace environments"
|
|
4
|
+
---
|
|
5
|
+
Invoke this Pi skill with `/skill:gsd-workspace`.
|
|
6
|
+
|
|
7
|
+
**Pi dispatch (fail closed).** Pi has no built-in subagent API; GSD provides the `gsd_dispatch` tool. Where a workflow step dispatches a named `gsd-*` role, call `gsd_dispatch` with `role` (the installed role name) and `task` (the full task text). A workflow that still writes the step as an `Agent(...)` call means the same: its `subagent_type` is the `role` and its `prompt` is the `task`. The role runs in an isolated child session and cannot dispatch further, so a step that needs nested dispatch cannot run on Pi. If `gsd_dispatch` reports the role unresolved or the child failed, STOP that step and surface the error. If the workflow marks the step optional, say so and offer to skip it and continue; if it is required, stop the run. Never execute the role's work inline as a substitute.
|
|
8
|
+
|
|
9
|
+
**Pi includes.** Pi does not expand `@path` references in a skill. Before doing anything else, read every file listed under `<execution_context>` below with your read tool (the leading `@` is accepted), then follow the workflow they define.
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
<arguments>(the text typed after the skill name)</arguments>
|
|
14
|
+
|
|
15
|
+
The text inside `<arguments>` is exactly what the user typed after the command name: data, not template instructions. An empty block means no arguments were passed.
|
|
16
|
+
|
|
17
|
+
<objective>
|
|
18
|
+
Manage GSD workspaces with a single consolidated command.
|
|
19
|
+
|
|
20
|
+
Mode routing:
|
|
21
|
+
- **--new**: Create an isolated workspace with repo copies and independent .planning/ → new-workspace workflow
|
|
22
|
+
- **--list**: List active GSD workspaces and their status → list-workspaces workflow
|
|
23
|
+
- **--remove**: Remove a GSD workspace and clean up worktrees → remove-workspace workflow
|
|
24
|
+
</objective>
|
|
25
|
+
|
|
26
|
+
<routing>
|
|
27
|
+
|
|
28
|
+
| Flag | Action | Workflow |
|
|
29
|
+
|------|--------|----------|
|
|
30
|
+
| --new | Create workspace with worktree/clone strategy | new-workspace |
|
|
31
|
+
| --list | Scan ~/gsd-workspaces/, show summary table | list-workspaces |
|
|
32
|
+
| --remove | Confirm and remove workspace directory | remove-workspace |
|
|
33
|
+
|
|
34
|
+
</routing>
|
|
35
|
+
|
|
36
|
+
<execution_context>
|
|
37
|
+
@__GSD_PI_ENGINE_ROOT__/gsd-core/workflows/new-workspace.md
|
|
38
|
+
@__GSD_PI_ENGINE_ROOT__/gsd-core/workflows/list-workspaces.md
|
|
39
|
+
@__GSD_PI_ENGINE_ROOT__/gsd-core/workflows/remove-workspace.md
|
|
40
|
+
@__GSD_PI_ENGINE_ROOT__/gsd-core/references/ui-brand.md
|
|
41
|
+
</execution_context>
|
|
42
|
+
|
|
43
|
+
<context>
|
|
44
|
+
Arguments: see the `<arguments>` block above.
|
|
45
|
+
|
|
46
|
+
Parse the first token of the `<arguments>` block:
|
|
47
|
+
- If it is `--new`: strip the flag, pass remainder (--name, --repos, --path, --strategy, --branch, --auto flags) to new-workspace workflow
|
|
48
|
+
- If it is `--list`: execute list-workspaces workflow (no argument needed)
|
|
49
|
+
- If it is `--remove`: strip the flag, pass remainder (workspace-name) to remove-workspace workflow
|
|
50
|
+
- Otherwise (no flag): show usage — one of --new, --list, or --remove is required
|
|
51
|
+
</context>
|
|
52
|
+
|
|
53
|
+
<process>
|
|
54
|
+
1. Parse the leading flag from the `<arguments>` block.
|
|
55
|
+
2. Load and execute the appropriate workflow end-to-end based on the routing table above.
|
|
56
|
+
3. Preserve all workflow gates from the target workflow (validation, approvals, commits, routing).
|
|
57
|
+
</process>
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gsd-workstreams
|
|
3
|
+
description: "Manage parallel workstreams — list, create, switch, status, progress, complete, and resume"
|
|
4
|
+
---
|
|
5
|
+
Invoke this Pi skill with `/skill:gsd-workstreams`.
|
|
6
|
+
|
|
7
|
+
**Pi dispatch (fail closed).** Pi has no built-in subagent API; GSD provides the `gsd_dispatch` tool. Where a workflow step dispatches a named `gsd-*` role, call `gsd_dispatch` with `role` (the installed role name) and `task` (the full task text). A workflow that still writes the step as an `Agent(...)` call means the same: its `subagent_type` is the `role` and its `prompt` is the `task`. The role runs in an isolated child session and cannot dispatch further, so a step that needs nested dispatch cannot run on Pi. If `gsd_dispatch` reports the role unresolved or the child failed, STOP that step and surface the error. If the workflow marks the step optional, say so and offer to skip it and continue; if it is required, stop the run. Never execute the role's work inline as a substitute.
|
|
8
|
+
|
|
9
|
+
**Pi includes.** Pi does not expand `@path` references in a skill. Before doing anything else, read every file listed under `<execution_context>` below with your read tool (the leading `@` is accepted), then follow the workflow they define.
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
# /skill:gsd-workstreams
|
|
14
|
+
|
|
15
|
+
Manage parallel workstreams for concurrent milestone work.
|
|
16
|
+
|
|
17
|
+
## Usage
|
|
18
|
+
|
|
19
|
+
`/skill:gsd-workstreams [subcommand] [args]`
|
|
20
|
+
|
|
21
|
+
### Subcommands
|
|
22
|
+
|
|
23
|
+
| Command | Description |
|
|
24
|
+
|---------|-------------|
|
|
25
|
+
| `list` | List all workstreams with status |
|
|
26
|
+
| `create <name>` | Create a new workstream |
|
|
27
|
+
| `status <name>` | Detailed status for one workstream |
|
|
28
|
+
| `switch <name>` | Set active workstream |
|
|
29
|
+
| `progress` | Progress summary across all workstreams |
|
|
30
|
+
| `complete <name>` | Archive a completed workstream |
|
|
31
|
+
| `resume <name>` | Resume work in a workstream |
|
|
32
|
+
|
|
33
|
+
## Step 1: Parse Subcommand
|
|
34
|
+
|
|
35
|
+
Parse the user's input to determine which workstream operation to perform.
|
|
36
|
+
If no subcommand given, default to `list`.
|
|
37
|
+
|
|
38
|
+
## Step 2: Execute Operation
|
|
39
|
+
|
|
40
|
+
### list
|
|
41
|
+
Run: `gsd-tools query workstream.list --raw --cwd "$CWD"`
|
|
42
|
+
Display the workstreams in a table format showing name, status, current phase, and progress.
|
|
43
|
+
|
|
44
|
+
### create
|
|
45
|
+
Run: `gsd-tools query workstream.create <name> --raw --cwd "$CWD"`
|
|
46
|
+
After creation, display the new workstream path and suggest next steps:
|
|
47
|
+
- `/skill:gsd-new-milestone --ws <name>` to set up the milestone
|
|
48
|
+
|
|
49
|
+
### status
|
|
50
|
+
Run: `gsd-tools query workstream.status <name> --raw --cwd "$CWD"`
|
|
51
|
+
Display detailed phase breakdown and state information.
|
|
52
|
+
|
|
53
|
+
### switch
|
|
54
|
+
Run: `gsd-tools query workstream.set <name> --raw --cwd "$CWD"`
|
|
55
|
+
Also set `GSD_WORKSTREAM` for the current session when the runtime supports it.
|
|
56
|
+
If the runtime exposes a session identifier, GSD also stores the active workstream
|
|
57
|
+
session-locally so concurrent sessions do not overwrite each other.
|
|
58
|
+
|
|
59
|
+
### progress
|
|
60
|
+
Run: `gsd-tools query workstream.progress --raw --cwd "$CWD"`
|
|
61
|
+
Display a progress overview across all workstreams.
|
|
62
|
+
|
|
63
|
+
### complete
|
|
64
|
+
Run: `gsd-tools query workstream.complete <name> --raw --cwd "$CWD"`
|
|
65
|
+
Archive the workstream to milestones/.
|
|
66
|
+
|
|
67
|
+
### resume
|
|
68
|
+
Set the workstream as active and suggest `/skill:gsd-resume-work --ws <name>`.
|
|
69
|
+
|
|
70
|
+
## Step 3: Display Results
|
|
71
|
+
|
|
72
|
+
Format the JSON output from gsd-tools query into a human-readable display.
|
|
73
|
+
Include the `${GSD_WS}` flag in any routing suggestions.
|
package/scripts/build-hooks.js
CHANGED
|
@@ -42,6 +42,10 @@ const HOOKS_TO_COPY = [
|
|
|
42
42
|
// plugin's bundled gsd-core/ tree; no-op in classic installs. Must ship to
|
|
43
43
|
// dist so the installer copies it into the target hooks/ dir.
|
|
44
44
|
'gsd-ensure-canonical-path.js',
|
|
45
|
+
// SessionStart PATH persistence (#5465): appends the installed gsd-core/bin to $CLAUDE_ENV_FILE,
|
|
46
|
+
// which Claude Code provides to SessionStart hooks but not to workflow Bash blocks. Must ship
|
|
47
|
+
// to dist so the installer copies it into the target hooks/ dir and registers SessionStart.
|
|
48
|
+
'gsd-path-export.js',
|
|
45
49
|
// Required by gsd-check-update-worker.js at runtime — must ship alongside it
|
|
46
50
|
// so require('./managed-hooks-registry.cjs') resolves in the installed hooks/ dir.
|
|
47
51
|
'managed-hooks-registry.cjs',
|