@opengsd/gsd-core 1.14.0 → 1.16.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 +1 -1
- package/.opencode/plugins/gsd-core.js +85 -5
- package/README.ja-JP.md +3 -3
- package/README.ko-KR.md +3 -3
- package/README.pt-BR.md +3 -3
- package/README.zh-CN.md +3 -3
- package/agents/gsd-code-fixer.compact.md +7 -6
- package/agents/gsd-code-fixer.md +9 -8
- package/agents/gsd-code-reviewer.compact.md +5 -3
- package/agents/gsd-code-reviewer.md +8 -6
- package/agents/gsd-debug-session-manager.compact.md +17 -2
- package/agents/gsd-debug-session-manager.md +17 -2
- package/agents/gsd-debugger.md +3 -3
- package/agents/gsd-eval-auditor.compact.md +1 -1
- package/agents/gsd-eval-auditor.md +1 -1
- package/agents/gsd-executor.md +17 -12
- package/agents/gsd-intel-updater.compact.md +1 -1
- package/agents/gsd-intel-updater.md +1 -1
- package/agents/gsd-mempalace-curator.md +2 -2
- package/agents/gsd-phase-researcher.md +19 -11
- package/agents/gsd-plan-checker.md +15 -9
- package/agents/gsd-planner.md +15 -11
- package/agents/gsd-project-researcher.compact.md +1 -1
- package/agents/gsd-project-researcher.md +1 -1
- package/agents/gsd-research-synthesizer.compact.md +1 -1
- package/agents/gsd-research-synthesizer.md +1 -1
- package/agents/gsd-ui-auditor.compact.md +21 -30
- package/agents/gsd-ui-auditor.md +166 -37
- package/agents/gsd-ui-researcher.compact.md +1 -1
- package/agents/gsd-ui-researcher.md +1 -1
- package/agents/gsd-verifier.md +37 -14
- package/bin/install.js +764 -287
- package/commands/gsd/add-tests.md +6 -1
- package/commands/gsd/ai-integration-phase.md +6 -1
- package/commands/gsd/audit-fix.md +5 -0
- package/commands/gsd/audit-milestone.md +6 -1
- package/commands/gsd/autonomous.md +7 -2
- package/commands/gsd/capture.md +9 -5
- package/commands/gsd/code-review.md +7 -2
- package/commands/gsd/complete-milestone.md +4 -0
- package/commands/gsd/config.md +7 -3
- package/commands/gsd/debug.md +11 -7
- package/commands/gsd/discuss-phase.md +7 -3
- package/commands/gsd/docs-update.md +12 -7
- package/commands/gsd/eval-review.md +6 -1
- package/commands/gsd/execute-phase.md +12 -7
- package/commands/gsd/extract-learnings.md +5 -0
- package/commands/gsd/fast.md +4 -0
- package/commands/gsd/forensics.md +5 -1
- package/commands/gsd/graphify.md +10 -6
- package/commands/gsd/health.md +5 -0
- package/commands/gsd/help.md +7 -2
- package/commands/gsd/import.md +7 -3
- package/commands/gsd/inbox.md +5 -0
- package/commands/gsd/ingest-docs.md +5 -1
- package/commands/gsd/manager.md +6 -1
- package/commands/gsd/map-codebase.md +7 -3
- package/commands/gsd/mempalace-capture.md +12 -4
- package/commands/gsd/mempalace-recall.md +5 -1
- package/commands/gsd/milestone-summary.md +5 -1
- package/commands/gsd/mvp-phase.md +8 -3
- package/commands/gsd/new-milestone.md +6 -1
- package/commands/gsd/new-project.md +5 -0
- package/commands/gsd/next.md +6 -1
- package/commands/gsd/ns-context.md +4 -0
- package/commands/gsd/ns-ideate.md +4 -0
- package/commands/gsd/ns-manage.md +4 -0
- package/commands/gsd/ns-project.md +4 -0
- package/commands/gsd/ns-review.md +4 -0
- package/commands/gsd/ns-workflow.md +4 -0
- package/commands/gsd/onboard.md +6 -1
- package/commands/gsd/pause-work.md +5 -1
- package/commands/gsd/phase.md +8 -4
- package/commands/gsd/plan-phase.md +6 -1
- package/commands/gsd/plan-review-convergence.md +11 -7
- package/commands/gsd/pr-branch.md +4 -0
- package/commands/gsd/profile-user.md +5 -1
- package/commands/gsd/progress.md +7 -2
- package/commands/gsd/quick-batch.md +21 -9
- package/commands/gsd/quick.md +12 -7
- package/commands/gsd/review.md +7 -4
- package/commands/gsd/secure-phase.md +6 -1
- package/commands/gsd/ship.md +5 -0
- package/commands/gsd/sketch.md +7 -2
- package/commands/gsd/spec-phase.md +5 -1
- package/commands/gsd/spike.md +8 -3
- package/commands/gsd/surface.md +5 -1
- package/commands/gsd/thread.md +4 -0
- package/commands/gsd/ui-phase.md +6 -1
- package/commands/gsd/ui-review.md +6 -1
- package/commands/gsd/ultraplan-phase.md +5 -1
- package/commands/gsd/undo.md +5 -1
- package/commands/gsd/update.md +6 -2
- package/commands/gsd/validate-phase.md +6 -1
- package/commands/gsd/verify-work.md +6 -1
- package/commands/gsd/workspace.md +7 -3
- package/gsd-core/bin/gsd-tools.cjs +477 -78
- package/gsd-core/bin/lib/active-workstream-store.cjs +15 -0
- package/gsd-core/bin/lib/adr-parser.cjs +3 -1
- package/gsd-core/bin/lib/agent-install-check.cjs +4 -1
- package/gsd-core/bin/lib/audit.cjs +144 -42
- package/gsd-core/bin/lib/broken-windows.cjs +13 -13
- package/gsd-core/bin/lib/capability-activation.cjs +9 -4
- package/gsd-core/bin/lib/capability-registry.cjs +197 -222
- package/gsd-core/bin/lib/capability-validator.cjs +16 -1
- package/gsd-core/bin/lib/check-auto-mode.cjs +35 -0
- package/gsd-core/bin/lib/check-command-router.cjs +164 -1625
- package/gsd-core/bin/lib/cjs-command-router-adapter.cjs +13 -2
- package/gsd-core/bin/lib/cli-exit.cjs +12 -0
- package/gsd-core/bin/lib/codex-agent-toml.cjs +32 -33
- package/gsd-core/bin/lib/command-aliases.cjs +7 -0
- package/gsd-core/bin/lib/command-routing-hub.cjs +48 -1
- package/gsd-core/bin/lib/commands.cjs +343 -207
- package/gsd-core/bin/lib/complexity-trigger.cjs +8 -7
- package/gsd-core/bin/lib/config-loader.cjs +65 -4
- package/gsd-core/bin/lib/config.cjs +76 -19
- package/gsd-core/bin/lib/core-utils.cjs +6 -1
- package/gsd-core/bin/lib/coverage.cjs +4 -8
- package/gsd-core/bin/lib/decision-coverage-support.cjs +259 -0
- package/gsd-core/bin/lib/decisions.cjs +30 -14
- package/gsd-core/bin/lib/drift.cjs +177 -42
- package/gsd-core/bin/lib/frontmatter-fence.cjs +90 -0
- package/gsd-core/bin/lib/frontmatter-splice.cjs +494 -0
- package/gsd-core/bin/lib/frontmatter.cjs +426 -234
- package/gsd-core/bin/lib/gap-checker.cjs +72 -29
- package/gsd-core/bin/lib/gate-api-coverage-verify-pre.cjs +381 -0
- package/gsd-core/bin/lib/gate-args.cjs +53 -0
- package/gsd-core/bin/lib/gate-codebase-drift.cjs +285 -0
- package/gsd-core/bin/lib/gate-config.cjs +46 -0
- package/gsd-core/bin/lib/gate-context-drift.cjs +141 -0
- package/gsd-core/bin/lib/gate-decision-coverage-plan.cjs +169 -0
- package/gsd-core/bin/lib/gate-decision-coverage-verify.cjs +126 -0
- package/gsd-core/bin/lib/gate-evaluation-scope.cjs +555 -0
- package/gsd-core/bin/lib/gate-evidence.cjs +138 -0
- package/gsd-core/bin/lib/gate-exit.cjs +27 -0
- package/gsd-core/bin/lib/gate-gap-analysis-plan-post.cjs +61 -0
- package/gsd-core/bin/lib/gate-phase-context.cjs +170 -0
- package/gsd-core/bin/lib/gate-predicate-evaluator.cjs +1 -1
- package/gsd-core/bin/lib/gate-predicate.cjs +165 -0
- package/gsd-core/bin/lib/gate-prohibition-enforcement.cjs +94 -0
- package/gsd-core/bin/lib/gate-schema-drift.cjs +165 -0
- package/gsd-core/bin/lib/gate-tdd-red-evidence.cjs +100 -0
- package/gsd-core/bin/lib/gate-tdd-review-checkpoint.cjs +182 -0
- package/gsd-core/bin/lib/gate-ui-plan.cjs +86 -0
- package/gsd-core/bin/lib/gate-ui-safety.cjs +80 -0
- package/gsd-core/bin/lib/gate-verdict.cjs +64 -0
- package/gsd-core/bin/lib/gate-verify-command-paths.cjs +78 -0
- package/gsd-core/bin/lib/gate-verify-failure-directions.cjs +41 -0
- package/gsd-core/bin/lib/graphify.cjs +10 -2
- package/gsd-core/bin/lib/health-diagnostic-rules/phase-structure.cjs +43 -47
- package/gsd-core/bin/lib/health-diagnostic.cjs +45 -8
- package/gsd-core/bin/lib/host-runtime-detection.cjs +9 -0
- package/gsd-core/bin/lib/init.cjs +364 -132
- package/gsd-core/bin/lib/install-engine.cjs +30 -33
- package/gsd-core/bin/lib/install-profiles.cjs +7 -4
- package/gsd-core/bin/lib/installer-migrations.cjs +8 -1
- package/gsd-core/bin/lib/io.cjs +122 -3
- package/gsd-core/bin/lib/loop-resolver.cjs +95 -0
- package/gsd-core/bin/lib/markdown-sectionizer.cjs +75 -1
- package/gsd-core/bin/lib/milestone.cjs +37 -6
- package/gsd-core/bin/lib/model-resolver.cjs +171 -62
- package/gsd-core/bin/lib/observability/event.cjs +1 -1
- package/gsd-core/bin/lib/observability/logger.cjs +46 -1
- package/gsd-core/bin/lib/pattern.cjs +10 -0
- package/gsd-core/bin/lib/phase-command-router.cjs +20 -5
- package/gsd-core/bin/lib/phase-estimation.cjs +5 -4
- package/gsd-core/bin/lib/phase-id-card.cjs +32 -0
- package/gsd-core/bin/lib/phase-id-display.cjs +78 -0
- package/gsd-core/bin/lib/phase-id.cjs +110 -8
- package/gsd-core/bin/lib/phase-lifecycle.cjs +9 -2
- package/gsd-core/bin/lib/phase-locator.cjs +29 -10
- package/gsd-core/bin/lib/phase-status.cjs +360 -0
- package/gsd-core/bin/lib/phase.cjs +489 -88
- package/gsd-core/bin/lib/plan-document.cjs +142 -20
- package/gsd-core/bin/lib/plan-drift-guard.cjs +5 -0
- package/gsd-core/bin/lib/planning-document.cjs +692 -0
- package/gsd-core/bin/lib/planning-inspect.cjs +60 -9
- package/gsd-core/bin/lib/planning-snapshot.cjs +18 -0
- package/gsd-core/bin/lib/planning-workspace.cjs +83 -55
- package/gsd-core/bin/lib/pr-branch-patterns.cjs +57 -0
- package/gsd-core/bin/lib/pristine-baseline.cjs +10 -0
- package/gsd-core/bin/lib/probe-core.cjs +7 -1
- package/gsd-core/bin/lib/profile-output.cjs +6 -3
- package/gsd-core/bin/lib/prohibition-enforcement.cjs +0 -55
- package/gsd-core/bin/lib/project-root.cjs +41 -2
- package/gsd-core/bin/lib/quick-batch-command-router.cjs +35 -9
- package/gsd-core/bin/lib/quick-batch-dispatch.cjs +11 -8
- package/gsd-core/bin/lib/real-home-guard.cjs +9 -1
- package/gsd-core/bin/lib/report-parser.cjs +269 -0
- package/gsd-core/bin/lib/review-lane-descriptor.cjs +10 -30
- package/gsd-core/bin/lib/review-reviewer-selection.cjs +2 -2
- package/gsd-core/bin/lib/roadmap-command-router.cjs +25 -19
- package/gsd-core/bin/lib/roadmap-parser.cjs +242 -15
- package/gsd-core/bin/lib/roadmap-upgrade.cjs +1653 -65
- package/gsd-core/bin/lib/roadmap.cjs +405 -88
- package/gsd-core/bin/lib/runtime-artifact-conversion.cjs +373 -187
- package/gsd-core/bin/lib/runtime-artifact-install-plan.cjs +5 -2
- package/gsd-core/bin/lib/runtime-artifact-layout.cjs +57 -1
- package/gsd-core/bin/lib/runtime-homes.cjs +14 -7
- package/gsd-core/bin/lib/runtime-hooks-surface.cjs +522 -624
- package/gsd-core/bin/lib/runtime-name-policy.cjs +246 -21
- package/gsd-core/bin/lib/runtime-slash.cjs +47 -30
- package/gsd-core/bin/lib/shell-command-projection.cjs +47 -8
- package/gsd-core/bin/lib/smart-entry.cjs +19 -3
- package/gsd-core/bin/lib/stale-bake-guard.cjs +32 -48
- package/gsd-core/bin/lib/state-contract.cjs +15 -18
- package/gsd-core/bin/lib/state-document.cjs +100 -22
- package/gsd-core/bin/lib/state-transition.cjs +39 -2
- package/gsd-core/bin/lib/state.cjs +256 -105
- package/gsd-core/bin/lib/surface.cjs +19 -2
- package/gsd-core/bin/lib/tdd-red-evidence.cjs +48 -79
- package/gsd-core/bin/lib/uat-predicate.cjs +359 -38
- package/gsd-core/bin/lib/uat.cjs +432 -7
- package/gsd-core/bin/lib/ui-consideration-probe.cjs +15 -2
- package/gsd-core/bin/lib/ui-frontend-evidence.cjs +167 -40
- package/gsd-core/bin/lib/undo-commit-selection.cjs +131 -0
- package/gsd-core/bin/lib/vendor/README.md +31 -9
- package/gsd-core/bin/lib/vendor/saxes.cjs +1934 -0
- package/gsd-core/bin/lib/vendor/saxes.cjs.LICENSE.txt +92 -0
- package/gsd-core/bin/lib/vendor/tap-parser.cjs +8927 -0
- package/gsd-core/bin/lib/vendor/tap-parser.cjs.LICENSE.txt +152 -0
- package/gsd-core/bin/lib/verification-command-router.cjs +2 -1
- package/gsd-core/bin/lib/verification.cjs +1378 -274
- package/gsd-core/bin/lib/verify-command-grounding.cjs +46 -2
- package/gsd-core/bin/lib/verify-command-router.cjs +18 -7
- package/gsd-core/bin/lib/verify.cjs +357 -531
- package/gsd-core/bin/lib/workstream-inventory-builder.cjs +14 -6
- package/gsd-core/bin/lib/workstream-inventory.cjs +31 -21
- package/gsd-core/bin/lib/workstream-name-policy.cjs +31 -1
- package/gsd-core/bin/lib/workstream.cjs +11 -2
- package/gsd-core/bin/lib/worktree-base-ref.cjs +482 -73
- package/gsd-core/bin/lib/worktree-safety.cjs +784 -51
- package/gsd-core/bin/shared/config-defaults.manifest.json +8 -0
- package/gsd-core/bin/shared/config-schema.manifest.json +5 -0
- package/gsd-core/references/autonomous-smart-discuss.md +2 -1
- package/gsd-core/references/autonomous-ui-design-contract.md +3 -3
- package/gsd-core/references/checkpoints.md +5 -3
- package/gsd-core/references/edge-probe-fixtures/01-round-half-even/expected-coverage.json +28 -3
- package/gsd-core/references/edge-probe-fixtures/02-merge-intervals/expected-coverage.json +37 -4
- package/gsd-core/references/edge-probe-fixtures/03-truncate-graphemes/expected-coverage.json +28 -3
- package/gsd-core/references/edge-probe-fixtures/04-money-rounding/expected-coverage.json +28 -3
- package/gsd-core/references/edge-probe-fixtures/05-list-dedupe/expected-coverage.json +37 -4
- package/gsd-core/references/edge-probe-fixtures/06-resolved-mixed/expected-coverage.json +37 -4
- package/gsd-core/references/edge-probe.md +195 -21
- package/gsd-core/references/execute-mvp-tdd.md +5 -10
- package/gsd-core/references/execute-phase-between-wave-reset.md +10 -6
- package/gsd-core/references/execute-phase-response-language.md +1 -1
- package/gsd-core/references/execute-phase-wave-guard.md +22 -11
- package/gsd-core/references/gsd-run-resolver.md +1 -1
- package/gsd-core/references/loop-hook-dispatch.md +7 -1
- package/gsd-core/references/model-profiles.md +1 -1
- package/gsd-core/references/offer-next.md +1 -1
- package/gsd-core/references/phase-argument-parsing.md +9 -7
- package/gsd-core/references/phase-id-convention.md +28 -0
- package/gsd-core/references/planner-gap-closure.md +2 -0
- package/gsd-core/references/planner-load-graph-context.md +24 -13
- package/gsd-core/references/planner-verify-command-grounding.md +14 -0
- package/gsd-core/references/planning-config.md +12 -3
- package/gsd-core/references/spidr-splitting.md +1 -1
- package/gsd-core/references/tdd.md +37 -8
- package/gsd-core/references/ui-consideration-probe.md +10 -5
- package/gsd-core/references/verifier-phase-gates.md +5 -2
- package/gsd-core/references/verify-command-path-resolvability.md +10 -2
- package/gsd-core/references/verify-mvp-mode.md +2 -2
- package/gsd-core/references/workstream-flag.md +33 -3
- package/gsd-core/references/worktree-path-safety.md +321 -0
- package/gsd-core/templates/README.md +1 -1
- package/gsd-core/templates/UAT.md +17 -1
- package/gsd-core/templates/config.json +2 -11
- package/gsd-core/templates/verification-report.md +1 -1
- package/gsd-core/workflows/_runtime-launcher.snippet.sh +1 -1
- package/gsd-core/workflows/add-backlog.md +1 -1
- package/gsd-core/workflows/add-phase.md +8 -7
- package/gsd-core/workflows/add-tests.md +4 -3
- package/gsd-core/workflows/add-todo.md +6 -5
- package/gsd-core/workflows/ai-integration-phase.md +13 -4
- package/gsd-core/workflows/audit-fix.md +1 -1
- package/gsd-core/workflows/audit-milestone.md +4 -3
- package/gsd-core/workflows/audit-uat.md +1 -1
- package/gsd-core/workflows/autonomous/steps/converge-fail-fast.md +9 -18
- package/gsd-core/workflows/autonomous.md +43 -23
- package/gsd-core/workflows/check-todos.md +7 -6
- package/gsd-core/workflows/cleanup.md +2 -2
- package/gsd-core/workflows/code-review/steps/dispatch-fix.md +4 -3
- package/gsd-core/workflows/code-review/steps/structural-pre-pass.md +20 -13
- package/gsd-core/workflows/code-review-fix.md +112 -25
- package/gsd-core/workflows/code-review.md +146 -135
- package/gsd-core/workflows/complete-milestone/detail/elaboration.md +4 -3
- package/gsd-core/workflows/complete-milestone.md +13 -8
- package/gsd-core/workflows/debug.md +32 -7
- package/gsd-core/workflows/diagnose-issues.md +3 -2
- package/gsd-core/workflows/discuss-phase/modes/advisor.md +1 -1
- package/gsd-core/workflows/discuss-phase/modes/chain.md +1 -1
- package/gsd-core/workflows/discuss-phase-assumptions.md +4 -3
- package/gsd-core/workflows/discuss-phase.md +4 -3
- package/gsd-core/workflows/do.md +2 -2
- package/gsd-core/workflows/docs-update.md +6 -5
- package/gsd-core/workflows/edit-phase.md +4 -3
- package/gsd-core/workflows/eval-review.md +14 -5
- package/gsd-core/workflows/execute-phase/detail/elaboration.md +2 -2
- package/gsd-core/workflows/execute-phase/steps/code-review-disposition.md +1019 -0
- package/gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md +15 -4
- package/gsd-core/workflows/execute-phase/steps/completion-reconciliation.md +10 -7
- package/gsd-core/workflows/execute-phase/steps/executor-isolation-dispatch.md +37 -3
- package/gsd-core/workflows/execute-phase/steps/gap-closure-artifacts.md +3 -1
- package/gsd-core/workflows/execute-phase/steps/partial-wave.md +2 -2
- package/gsd-core/workflows/execute-phase/steps/per-plan-executor-routing.md +1 -1
- package/gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md +1 -1
- package/gsd-core/workflows/execute-phase/steps/post-merge-gate.md +46 -9
- package/gsd-core/workflows/execute-phase/steps/protected-branch.md +1 -1
- package/gsd-core/workflows/execute-phase/steps/ready-wave-gate.md +37 -0
- package/gsd-core/workflows/execute-phase/steps/regression-gate-run.md +1 -1
- package/gsd-core/workflows/execute-phase/steps/regression-gate.md +2 -0
- package/gsd-core/workflows/execute-phase/steps/tdd-applicability-resolution.md +1 -1
- package/gsd-core/workflows/execute-phase/steps/threat-id-gate.md +28 -0
- package/gsd-core/workflows/execute-phase/steps/verify-phase-goal.md +187 -0
- package/gsd-core/workflows/execute-phase/steps/wave-post-gate-hooks.md +2 -3
- package/gsd-core/workflows/execute-phase/steps/worktree-base-check.md +25 -0
- package/gsd-core/workflows/execute-phase.md +96 -178
- package/gsd-core/workflows/execute-plan.md +18 -23
- package/gsd-core/workflows/explore.md +4 -4
- package/gsd-core/workflows/extract-learnings.md +4 -2
- package/gsd-core/workflows/fast.md +1 -1
- package/gsd-core/workflows/forensics.md +1 -1
- package/gsd-core/workflows/graduation.md +1 -1
- package/gsd-core/workflows/health.md +3 -2
- package/gsd-core/workflows/help/modes/full.compact.md +3 -3
- package/gsd-core/workflows/help/modes/full.md +5 -5
- package/gsd-core/workflows/help/modes/topic.md +15 -5
- package/gsd-core/workflows/import.md +4 -3
- package/gsd-core/workflows/inbox.md +2 -2
- package/gsd-core/workflows/ingest-docs.md +3 -3
- package/gsd-core/workflows/insert-phase.md +4 -3
- package/gsd-core/workflows/list-seeds.md +1 -1
- package/gsd-core/workflows/list-workspaces.md +1 -1
- package/gsd-core/workflows/manager.md +6 -4
- package/gsd-core/workflows/map-codebase.md +5 -4
- package/gsd-core/workflows/milestone-summary.md +3 -2
- package/gsd-core/workflows/mvp-phase.md +14 -14
- package/gsd-core/workflows/new-milestone.md +11 -11
- package/gsd-core/workflows/new-project/steps/auto-mode-config.md +3 -3
- package/gsd-core/workflows/new-project/steps/codebase-map-offer.md +1 -1
- package/gsd-core/workflows/new-project.md +7 -7
- package/gsd-core/workflows/new-workspace.md +2 -2
- package/gsd-core/workflows/next.md +1 -1
- package/gsd-core/workflows/note.md +1 -1
- package/gsd-core/workflows/onboard.md +1 -1
- package/gsd-core/workflows/pause-work.md +2 -2
- package/gsd-core/workflows/plan-phase/detail/elaboration.md +1 -1
- package/gsd-core/workflows/plan-phase/steps/chunked-planning-mode.md +17 -5
- package/gsd-core/workflows/plan-phase/steps/closed-phase-gate.md +1 -1
- package/gsd-core/workflows/plan-phase/steps/prd-express-path.md +1 -1
- package/gsd-core/workflows/plan-phase/steps/stall-detection-helpers.md +23 -5
- package/gsd-core/workflows/plan-phase.md +50 -24
- package/gsd-core/workflows/plan-review-convergence.md +21 -5
- package/gsd-core/workflows/plant-seed.md +62 -20
- package/gsd-core/workflows/pr-branch.md +113 -13
- package/gsd-core/workflows/profile-user.md +2 -2
- package/gsd-core/workflows/progress.md +19 -49
- package/gsd-core/workflows/quick/steps/plan-checker-loop.md +27 -0
- package/gsd-core/workflows/quick/steps/quick-verification.md +4 -4
- package/gsd-core/workflows/quick/steps/worktree-pre-dispatch-commit.md +30 -11
- package/gsd-core/workflows/quick-batch/steps/batch-init.md +1 -1
- package/gsd-core/workflows/quick-batch/steps/completion.md +1 -1
- package/gsd-core/workflows/quick-batch/steps/merge-wave.md +1 -1
- package/gsd-core/workflows/quick-batch/steps/planner-wave.md +1 -1
- package/gsd-core/workflows/quick-batch/steps/research-phase.md +1 -1
- package/gsd-core/workflows/quick-batch/steps/resume-mode.md +1 -1
- package/gsd-core/workflows/quick-batch/steps/verification-wave.md +9 -3
- package/gsd-core/workflows/quick-batch/steps/worktree-dispatch.md +1 -1
- package/gsd-core/workflows/quick-batch.md +15 -10
- package/gsd-core/workflows/quick.md +62 -39
- package/gsd-core/workflows/reapply-patches.md +9 -3
- package/gsd-core/workflows/remove-phase.md +3 -2
- package/gsd-core/workflows/remove-workspace.md +2 -2
- package/gsd-core/workflows/resume-project.md +3 -2
- package/gsd-core/workflows/review.md +33 -17
- package/gsd-core/workflows/scan.md +3 -2
- package/gsd-core/workflows/secure-phase.md +13 -13
- package/gsd-core/workflows/settings-advanced.md +30 -10
- package/gsd-core/workflows/settings-integrations.md +2 -3
- package/gsd-core/workflows/settings.md +4 -4
- package/gsd-core/workflows/ship.md +14 -13
- package/gsd-core/workflows/sketch-wrap-up.md +1 -1
- package/gsd-core/workflows/sketch.md +1 -1
- package/gsd-core/workflows/smart-entry.md +2 -2
- package/gsd-core/workflows/spec-phase.md +15 -5
- package/gsd-core/workflows/spike-wrap-up.md +1 -1
- package/gsd-core/workflows/spike.md +1 -1
- package/gsd-core/workflows/stats.md +1 -1
- package/gsd-core/workflows/sync-skills.md +5 -5
- package/gsd-core/workflows/thread.md +2 -2
- package/gsd-core/workflows/transition.md +13 -23
- package/gsd-core/workflows/ui-phase.md +48 -11
- package/gsd-core/workflows/ui-review.md +21 -6
- package/gsd-core/workflows/ultraplan-phase.md +3 -2
- package/gsd-core/workflows/undo.md +339 -20
- package/gsd-core/workflows/update.md +7 -7
- package/gsd-core/workflows/validate-phase.md +12 -13
- package/gsd-core/workflows/verify-work/detail/elaboration.md +43 -3
- package/gsd-core/workflows/verify-work/steps/automated-ui-verification.md +1 -1
- package/gsd-core/workflows/verify-work/steps/mvp-uat-framing.md +5 -3
- package/gsd-core/workflows/verify-work.md +129 -55
- package/hooks/dist/gsd-agent-isolation-guard.js +32 -0
- package/hooks/dist/gsd-check-update-worker.js +8 -0
- package/hooks/dist/gsd-check-update.js +8 -0
- package/hooks/dist/gsd-context-monitor.js +31 -8
- package/hooks/dist/gsd-cursor-subagent-start.js +8 -0
- package/hooks/dist/gsd-secret-read-guard.js +161 -4
- package/hooks/dist/gsd-statusline.js +85 -20
- package/hooks/dist/gsd-update-banner.js +8 -0
- package/hooks/dist/gsd-validate-commit.sh +63 -4
- package/hooks/dist/gsd-windsurf-pre-write.js +11 -2
- package/hooks/dist/gsd-workflow-guard.js +5 -4
- package/hooks/dist/gsd-worktree-path-guard.js +6 -2
- package/hooks/dist/lib/cli-exit.js +12 -0
- package/hooks/dist/lib/git-probe.js +17 -1
- package/hooks/dist/lib/isolation-sentinel.js +2 -2
- package/hooks/gsd-agent-isolation-guard.js +32 -0
- package/hooks/gsd-check-update-worker.js +8 -0
- package/hooks/gsd-check-update.js +8 -0
- package/hooks/gsd-context-monitor.js +31 -8
- package/hooks/gsd-cursor-subagent-start.js +8 -0
- package/hooks/gsd-secret-read-guard.js +161 -4
- package/hooks/gsd-statusline.js +85 -20
- package/hooks/gsd-update-banner.js +8 -0
- package/hooks/gsd-validate-commit.sh +63 -4
- package/hooks/gsd-windsurf-pre-write.js +11 -2
- package/hooks/gsd-workflow-guard.js +5 -4
- package/hooks/gsd-worktree-path-guard.js +6 -2
- package/hooks/hooks.json +5 -5
- package/hooks/lib/cli-exit.js +12 -0
- package/hooks/lib/git-probe.js +17 -1
- package/hooks/lib/isolation-sentinel.js +2 -2
- package/package.json +22 -4
- package/scripts/build-hooks.js +15 -6
- package/scripts/changeset/parse.cjs +52 -4
- package/scripts/check-contract-drift.cjs +127 -11
- package/scripts/ci-timeout-report.cjs +770 -4
- package/scripts/command-contract-helpers.cjs +15 -8
- package/scripts/docs-guard-registry.cjs +34 -0
- package/scripts/gen-features.cjs +13 -8
- package/scripts/gen-hooks-cli-exit.cjs +12 -28
- package/scripts/gen-loop-host-contract.cjs +79 -1
- package/scripts/gen-platform-conformance-tier.cjs +187 -1
- package/scripts/gen-plugin-skills.cjs +87 -1
- package/scripts/gen-research-agents.cjs +24 -31
- package/scripts/gen-scripts-cli-exit.cjs +30 -3
- package/scripts/gen-test-timings.cjs +32 -7
- package/scripts/lib/cli-exit.cjs +12 -0
- package/scripts/lib/macos-conformance-tier.generated.cjs +34 -2
- package/scripts/lib/ndjson-reporter.cjs +31 -5
- package/scripts/lib/platform-conformance-tier.generated.cjs +45 -5
- package/scripts/lib/registration-ledger-preload.cjs +155 -0
- package/scripts/lib/vendor-bundle.cjs +59 -0
- package/scripts/lib/vendor-licenses/saxes-6.0.0.txt +64 -0
- package/scripts/lint-allow-test-rule-refs.effective-ceiling.json +1 -1
- package/scripts/lint-allow-test-rule-refs.unverified-ceiling.json +1 -1
- package/scripts/lint-completion-predicate-drift.cjs +18 -19
- package/scripts/lint-descriptions.cjs +7 -3
- package/scripts/lint-docs-guard-registration.exempt-baseline.cjs +38 -1
- package/scripts/lint-eslint-glob-coverage.allowlist.json +20 -0
- package/scripts/lint-frontmatter-fence-drift.cjs +313 -0
- package/scripts/lint-frontmatter-scalar-broad-grep.cjs +122 -16
- package/scripts/lint-phase-arg-assignment.cjs +257 -0
- package/scripts/lint-phase-enumeration-drift.cjs +12 -8
- package/scripts/lint-phase-id-drift.cjs +319 -5
- package/scripts/lint-planning-document-positive-control.cjs +329 -0
- package/scripts/lint-pr-branch-pattern-drift.cjs +148 -0
- package/scripts/lint-response-language-coverage.cjs +3 -0
- package/scripts/lint-retired-runtime-name.cjs +619 -0
- package/scripts/lint-skill-deps.cjs +7 -3
- package/scripts/lint-state-write-path-drift.cjs +93 -0
- package/scripts/lint-test-file-count.allowlist.json +38 -9
- package/scripts/lint-test-file-count.cjs +34 -1
- package/scripts/lint-vendored-deps.cjs +41 -5
- package/scripts/lint-workflow-shellcheck-baseline.json +25 -10
- package/scripts/mutation-matrix.cjs +50 -5
- package/scripts/prompt-injection-scan.sh +4 -0
- package/scripts/release-tarball-smoke.cjs +194 -1
- package/scripts/require-issue-link-policy.cjs +6 -2
- package/scripts/sync-runtime-launcher.cjs +184 -2
- package/scripts/verify-npm-publish.cjs +76 -20
- package/skills/gsd-add-tests/SKILL.md +6 -1
- package/skills/gsd-ai-integration-phase/SKILL.md +6 -1
- package/skills/gsd-audit-fix/SKILL.md +5 -0
- package/skills/gsd-audit-milestone/SKILL.md +6 -1
- package/skills/gsd-autonomous/SKILL.md +7 -2
- package/skills/gsd-capture/SKILL.md +9 -5
- package/skills/gsd-code-review/SKILL.md +7 -2
- package/skills/gsd-complete-milestone/SKILL.md +4 -0
- package/skills/gsd-config/SKILL.md +8 -4
- package/skills/gsd-debug/SKILL.md +11 -7
- package/skills/gsd-discuss-phase/SKILL.md +7 -3
- package/skills/gsd-docs-update/SKILL.md +12 -7
- package/skills/gsd-eval-review/SKILL.md +6 -1
- package/skills/gsd-execute-phase/SKILL.md +12 -7
- package/skills/gsd-extract-learnings/SKILL.md +5 -0
- package/skills/gsd-fast/SKILL.md +4 -0
- package/skills/gsd-forensics/SKILL.md +5 -1
- package/skills/gsd-graphify/SKILL.md +10 -6
- package/skills/gsd-health/SKILL.md +5 -0
- package/skills/gsd-help/SKILL.md +7 -2
- package/skills/gsd-import/SKILL.md +7 -3
- package/skills/gsd-inbox/SKILL.md +5 -0
- package/skills/gsd-ingest-docs/SKILL.md +5 -1
- package/skills/gsd-manager/SKILL.md +6 -1
- package/skills/gsd-map-codebase/SKILL.md +7 -3
- package/skills/gsd-mempalace-capture/SKILL.md +12 -4
- package/skills/gsd-mempalace-recall/SKILL.md +5 -1
- package/skills/gsd-milestone-summary/SKILL.md +5 -1
- package/skills/gsd-mvp-phase/SKILL.md +8 -3
- package/skills/gsd-new-milestone/SKILL.md +6 -1
- package/skills/gsd-new-project/SKILL.md +5 -0
- package/skills/gsd-next/SKILL.md +6 -1
- package/skills/gsd-ns-context/SKILL.md +4 -0
- package/skills/gsd-ns-ideate/SKILL.md +4 -0
- package/skills/gsd-ns-manage/SKILL.md +4 -0
- package/skills/gsd-ns-project/SKILL.md +4 -0
- package/skills/gsd-ns-review/SKILL.md +4 -0
- package/skills/gsd-ns-workflow/SKILL.md +4 -0
- package/skills/gsd-onboard/SKILL.md +6 -1
- package/skills/gsd-pause-work/SKILL.md +5 -1
- package/skills/gsd-phase/SKILL.md +8 -4
- package/skills/gsd-plan-phase/SKILL.md +6 -1
- package/skills/gsd-plan-review-convergence/SKILL.md +10 -6
- package/skills/gsd-pr-branch/SKILL.md +4 -0
- package/skills/gsd-profile-user/SKILL.md +5 -1
- package/skills/gsd-progress/SKILL.md +7 -2
- package/skills/gsd-quick/SKILL.md +16 -10
- package/skills/gsd-quick-batch/SKILL.md +21 -9
- package/skills/gsd-review/SKILL.md +7 -4
- package/skills/gsd-review-backlog/SKILL.md +3 -2
- package/skills/gsd-secure-phase/SKILL.md +6 -1
- package/skills/gsd-ship/SKILL.md +5 -0
- package/skills/gsd-sketch/SKILL.md +7 -2
- package/skills/gsd-spec-phase/SKILL.md +5 -1
- package/skills/gsd-spike/SKILL.md +8 -3
- package/skills/gsd-surface/SKILL.md +5 -1
- package/skills/gsd-thread/SKILL.md +4 -0
- package/skills/gsd-ui-phase/SKILL.md +6 -1
- package/skills/gsd-ui-review/SKILL.md +6 -1
- package/skills/gsd-ultraplan-phase/SKILL.md +5 -1
- package/skills/gsd-undo/SKILL.md +5 -1
- package/skills/gsd-update/SKILL.md +6 -2
- package/skills/gsd-validate-phase/SKILL.md +6 -1
- package/skills/gsd-verify-work/SKILL.md +6 -1
- package/skills/gsd-workspace/SKILL.md +7 -3
- package/skills/gsd-workstreams/SKILL.md +6 -6
- package/vscode/package.json +1 -1
|
@@ -10,7 +10,7 @@ const capabilities = {
|
|
|
10
10
|
"ai-integration": {
|
|
11
11
|
"id": "ai-integration",
|
|
12
12
|
"role": "feature",
|
|
13
|
-
"version": "1.
|
|
13
|
+
"version": "1.16.0",
|
|
14
14
|
"title": "AI design contract",
|
|
15
15
|
"description": "AI-SPEC design contract workflow for phases that build AI systems; owns the AI integration command, agents, and workflow.ai_integration_phase activation key.",
|
|
16
16
|
"tier": "full",
|
|
@@ -95,7 +95,7 @@ const capabilities = {
|
|
|
95
95
|
"antigravity": {
|
|
96
96
|
"id": "antigravity",
|
|
97
97
|
"role": "runtime",
|
|
98
|
-
"version": "1.
|
|
98
|
+
"version": "1.16.0",
|
|
99
99
|
"title": "Antigravity",
|
|
100
100
|
"description": "Google Antigravity IDE — config/settings home nested under ~/.gemini/antigravity (probed across 1.x and 2.x layouts); global skills/agents install under ~/.gemini/config, the dir AGY scans for global discovery (#3738); Gemini hook event dialect; flat skill layout; tier-1 support.",
|
|
101
101
|
"tier": "core",
|
|
@@ -197,7 +197,8 @@ const capabilities = {
|
|
|
197
197
|
"projectInstructionFile": "GEMINI.md",
|
|
198
198
|
"noPathRewrite": true,
|
|
199
199
|
"hookPathStyle": "raw",
|
|
200
|
-
"globalDirResolver": "antigravity"
|
|
200
|
+
"globalDirResolver": "antigravity",
|
|
201
|
+
"contentRewriteProfile": "attribution-only"
|
|
201
202
|
}
|
|
202
203
|
},
|
|
203
204
|
"reviewer": {
|
|
@@ -258,7 +259,7 @@ const capabilities = {
|
|
|
258
259
|
"assumption-delta": {
|
|
259
260
|
"id": "assumption-delta",
|
|
260
261
|
"role": "feature",
|
|
261
|
-
"version": "1.
|
|
262
|
+
"version": "1.16.0",
|
|
262
263
|
"title": "Assumption-delta architecture checkpoint",
|
|
263
264
|
"description": "Rarely-firing advisory checkpoint that triggers when a phase makes something plural, optional, or chosen that used to be singular, required, or derived. Surfaces one identity-model question (promote the new general representation to primary, or add it alongside?) so a silent primary-key drift does not accumulate into a later user-facing bug. Non-blocking; fires only on a detected signal.",
|
|
264
265
|
"tier": "full",
|
|
@@ -304,7 +305,7 @@ const capabilities = {
|
|
|
304
305
|
"audit": {
|
|
305
306
|
"id": "audit",
|
|
306
307
|
"role": "feature",
|
|
307
|
-
"version": "1.
|
|
308
|
+
"version": "1.16.0",
|
|
308
309
|
"title": "Audit",
|
|
309
310
|
"description": "Open-artifact audit and UAT-gap audit for milestone close gates; exposes `gsd-tools audit-uat` (cross-phase UAT outstanding items) and `gsd-tools audit-open` (structured open-artifact scan across debug, tasks, threads, todos, seeds, UAT, verification, context-questions).",
|
|
310
311
|
"tier": "full",
|
|
@@ -341,7 +342,7 @@ const capabilities = {
|
|
|
341
342
|
"augment": {
|
|
342
343
|
"id": "augment",
|
|
343
344
|
"role": "runtime",
|
|
344
|
-
"version": "1.
|
|
345
|
+
"version": "1.16.0",
|
|
345
346
|
"title": "Augment Code",
|
|
346
347
|
"description": "Augment Code CLI — commands + nested-skill artifact layout; settings-json hook surface; Claude hook event dialect; tier-2 support.",
|
|
347
348
|
"tier": "core",
|
|
@@ -428,7 +429,8 @@ const capabilities = {
|
|
|
428
429
|
"extendedHookEvents": [],
|
|
429
430
|
"hostBehaviors": {
|
|
430
431
|
"commandBodyConverter": "convertClaudeToAugmentMarkdown",
|
|
431
|
-
"mcpCompanion": "settings-json"
|
|
432
|
+
"mcpCompanion": "settings-json",
|
|
433
|
+
"contentRewriteProfile": "slash-lookahead-own-derived"
|
|
432
434
|
},
|
|
433
435
|
"hostIntegration": {
|
|
434
436
|
"embeddingMode": "declarative",
|
|
@@ -455,7 +457,7 @@ const capabilities = {
|
|
|
455
457
|
"broken-windows": {
|
|
456
458
|
"id": "broken-windows",
|
|
457
459
|
"role": "feature",
|
|
458
|
-
"version": "1.
|
|
460
|
+
"version": "1.16.0",
|
|
459
461
|
"title": "Broken-windows ledger",
|
|
460
462
|
"description": "Cross-phase defect register accumulating stubs, TODOs, skipped tests, unrun verifies, and unmet truths into .planning/WINDOWS.md. When enforcement is enabled, it blocks /gsd-ship while any window is open unless explicitly waived with a recorded reason. Operationalizes GSD's no-defer discipline as a tracked artifact (issue #1950).",
|
|
461
463
|
"tier": "full",
|
|
@@ -501,7 +503,7 @@ const capabilities = {
|
|
|
501
503
|
"claude": {
|
|
502
504
|
"id": "claude",
|
|
503
505
|
"role": "runtime",
|
|
504
|
-
"version": "1.
|
|
506
|
+
"version": "1.16.0",
|
|
505
507
|
"title": "Claude Code",
|
|
506
508
|
"description": "Anthropic Claude Code — primary development runtime; tier-1 support with full hook surface and skills-based global install.",
|
|
507
509
|
"tier": "core",
|
|
@@ -614,7 +616,14 @@ const capabilities = {
|
|
|
614
616
|
"skillsGlobalOnboarding": true,
|
|
615
617
|
"legacyCommandsGsdInstallMigration": true,
|
|
616
618
|
"legacyCommandsGsdUninstall": "global",
|
|
617
|
-
"hyphenNameAgentBody": true
|
|
619
|
+
"hyphenNameAgentBody": true,
|
|
620
|
+
"skipCompactAgents": true,
|
|
621
|
+
"omitBashRunnerOnWindows": true,
|
|
622
|
+
"specRootSkillPass": true,
|
|
623
|
+
"restoreAtRefTildeInAgents": true,
|
|
624
|
+
"restoreAtRefTildeInSpecTree": true,
|
|
625
|
+
"skipRuntimeDefaultsStamp": true,
|
|
626
|
+
"contentRewriteProfile": "slash-tilde-restore"
|
|
618
627
|
}
|
|
619
628
|
},
|
|
620
629
|
"reviewer": {
|
|
@@ -682,7 +691,7 @@ const capabilities = {
|
|
|
682
691
|
"claude-orchestration": {
|
|
683
692
|
"id": "claude-orchestration",
|
|
684
693
|
"role": "feature",
|
|
685
|
-
"version": "1.
|
|
694
|
+
"version": "1.16.0",
|
|
686
695
|
"title": "Claude orchestration (Workflow backend)",
|
|
687
696
|
"description": "Default-off, BETA, claude-only capability that adopts Claude Code's Workflow tool (the engine behind /effort ultracode) as an optional parallel-execution backend for the GSD loop. When the runtime exposes the Workflow tool and claude_orchestration.execution_backend resolves to 'workflow', execute-phase emits a generated Workflow script (waves -> parallel() barriers, plans -> agent({ agentType: 'gsd-executor', isolation: 'worktree' }), files_modified overlap -> separate sequential stages, resumeFromRunId wired to the phase run id, shared token budget) that composes the SAME gsd-executor agent and worktree isolation the inline path uses, restoring the wave parallelism the #853 backgrounded-agent nesting limitation forces inline on Claude Code. (The plan-checker and verifier remain inline until separately wired — this capability delivers the parallel-execution backend, not those gates.) Also folds the ultraplan plan-offload under one runtime gate (plan:* surface). On any runtime lacking the Workflow tool, or when the capability is disabled, behaviour is byte-identical to today (inline/manual dispatch). Detection + emission live in gsd-core/bin/lib/claude-orchestration.cjs (pure, fail-closed). Mirrors the existing gsd-ultraplan-phase BETA-isolation posture.",
|
|
688
697
|
"tier": "full",
|
|
@@ -736,20 +745,6 @@ const capabilities = {
|
|
|
736
745
|
},
|
|
737
746
|
"steps": [],
|
|
738
747
|
"contributions": [
|
|
739
|
-
{
|
|
740
|
-
"point": "execute:wave:pre",
|
|
741
|
-
"into": "executor",
|
|
742
|
-
"fragment": {
|
|
743
|
-
"path": "fragments/execute-wave-pre.md",
|
|
744
|
-
"inline": "# Claude orchestration — Workflow execution backend (BETA)\n\n> Injected at `execute:wave:pre` `into: executor` only when\n> `claude_orchestration.enabled` is true. Default-off; `onError: skip`.\n\n## When this contribution is active\n\nThe Claude orchestration capability is **default-off and BETA**. It activates only\nwhen ALL of the following hold:\n\n1. `claude_orchestration.enabled` is `true` in `.planning/config.json`, AND\n2. the active runtime is **Claude Code** (the Workflow tool is Claude / Agent\n SDK-specific), AND\n3. `claude_orchestration.execution_backend` resolves to `workflow` — either\n explicitly, or via `auto` — **and** the Agent SDK version is\n `>= claude_orchestration.min_agent_sdk_version` (default `0.3.149`). The SDK\n floor applies in both `auto` and `workflow` modes (fail-closed: a pre-release\n or older SDK never activates the preview backend).\n\nDetection is fail-closed: any miss degrades to **inline, manual, one-agent-per-\nmessage dispatch** — exactly today's behaviour. On a non-Claude runtime this\ncontribution is a no-op.\n\n## Why `execute:wave:pre` (not `execute:wave:post`)\n\nThis is a **dispatch-backend selector** — it decides HOW a wave's executor agents\nare spawned. That decision has to be made BEFORE the wave's `Agent()` calls in\n`execute-phase.md` step 3, not after the wave has already finished (#2285). The\ncapability previously registered at `execute:wave:post`, which fires only after\nworktree merge/post-merge tests/tracking updates — by then the wave was already\ndispatched inline, so the contribution was structurally unable to change how\ndispatch happened. This fragment is injected at the point that actually precedes\ndispatch.\n\n## What the orchestrator does when the Workflow backend is active\n\nBefore spawning executor agents for the current wave (execute-phase.md step 3),\nresolve the dispatch backend through the single composed CLI seam:\n\n```bash\ngsd-tools claude-orchestration resolve-wave-dispatch \\\n --waves \"$WAVE_MANIFEST_PATH\" --run-id \"$PHASE_RUN_ID\" \\\n --runtime \"$RUNTIME\" \\\n --phase-dir \"$PHASE_DIR\" --raw\n```\n\n`--agent-sdk-version` is no longer passed here (#2590). The router resolves the\ninstalled Agent SDK version itself; see **Agent SDK version** below. The former\n`${AGENT_SDK_VERSION:+--agent-sdk-version \"$AGENT_SDK_VERSION\"}` line was also\n**shell-dependent**: zsh does not word-split unquoted parameter expansions, so it\ncollapsed to a SINGLE argv element there, `argValue()` never matched, and the run\nfailed into `agent_sdk_version_unknown` — indistinguishable from genuinely\nunknown. Pass `--agent-sdk-version <ver>` explicitly only to pin a version.\n\nThis composes `detectWorkflowBackend` (the gate ladder above) with\n`emitWorkflowScript` (the wave→plan mapping below) in ONE call — the pure\nfunction backing it is `resolveWaveDispatch` in\n`gsd-core/bin/lib/claude-orchestration.cjs`. Response shape:\n`{ backend: 'inline'|'workflow', reason, script?, summary? }`.\n\n### Manifest construction (`$WAVE_MANIFEST_PATH`, `$PHASE_RUN_ID`, `$PHASE_DIR`)\n\nThese are NOT pre-existing execute-phase.md variables — the orchestrator builds\nthem at this step, from data it already has in-context from `discover_and_group_plans`\n(the `PLAN_INDEX` JSON) and step 2.5 (the per-plan `USE_WORKTREES_FOR_PLAN` decision):\n\n1. **`$PHASE_DIR`** — reuse `{phase_dir}` from the `INIT` bundle (already loaded\n in the `initialize` step). No new value needed.\n\n2. **`$PHASE_RUN_ID`** — a stable identifier for THIS phase-execution attempt, so\n `resumeFromRunId` can resume an interrupted run without re-dispatching plans\n the Workflow tool already completed. Construct it deterministically —\n `execute-{phase_number}-{phase_slug}` — from `INIT`'s `phase_number`/`phase_slug`\n (both are already validated identifiers used elsewhere in this workflow, so\n they satisfy `emitWorkflowScript`'s `isScriptableIdentifier` check). Do NOT\n mint a new random id per wave — the SAME `$PHASE_RUN_ID` is reused for every\n wave in the phase so the Workflow tool can correctly track cross-wave resume\n state.\n\n3. **`$WAVE_MANIFEST_PATH`** — a fresh temp file for THIS wave's manifest (one\n wave = one `waves` array with a single entry, matching the wave-by-wave\n dispatch loop; do not batch multiple waves into one manifest — waves are\n dispatched in wave order, not all at once):\n\n ```bash\n WAVE_MANIFEST_PATH=$(mktemp \"${TMPDIR:-/tmp}/gsd-wave-dispatch-XXXXXX\") && mv \"$WAVE_MANIFEST_PATH\" \"$WAVE_MANIFEST_PATH.json\" && WAVE_MANIFEST_PATH=\"$WAVE_MANIFEST_PATH.json\"\n ```\n\n Then **use the Write tool** (not a bash/jq pipeline — the orchestrator already\n has every field parsed in-context) to write the manifest JSON to\n `$WAVE_MANIFEST_PATH`:\n\n ```json\n {\n \"waves\": [\n {\n \"id\": \"wave-{N}\",\n \"plans\": [\n {\n \"id\": \"{plan_id}\",\n \"brief\": \"{the SAME <objective>...<success_criteria> prompt block step 3 builds for this plan's inline Agent() call}\",\n \"files_modified\": [\"{from PLAN_INDEX.plans[].files_modified for this plan}\"],\n \"use_worktree\": {true unless step 2.5 set USE_WORKTREES_FOR_PLAN=false for this plan}\n }\n ]\n }\n ]\n }\n ```\n\n - **`id`** — the plan id from `PLAN_INDEX`, e.g. `\"01-01\"`.\n - **`brief`** — MUST carry the same task content as step 3's inline `Agent()`\n prompt (the `<objective>`/`<execution_context>`/`<required_reading>`/\n `<success_criteria>` block, with `{plan_number}`/`{phase_number}`/\n `{phase_name}` substituted) — a short summary here would NOT reproduce\n step 3's behavior and would violate the \"identical artifacts\" contract.\n - **`files_modified`** — copy verbatim from the plan's `PLAN_INDEX` entry.\n - **`use_worktree`** — `true` for every plan UNLESS step 2.5's per-plan\n worktree gate (`execute-phase/steps/per-plan-worktree-gate.md`) set\n `USE_WORKTREES_FOR_PLAN=false` for that plan (submodule-touching plan, or\n project-level `USE_WORKTREES=false`) — in which case pass `false` here so\n `emitWorkflowScript` omits `isolation: \"worktree\"` for that plan (#2772 /\n #2285 finding 1). **Never** hardcode `true` — that would force worktree\n isolation on a plan the inline path explicitly keeps out of worktrees.\n\n4. **`$AGENT_SDK_VERSION`** — no longer built here; the router resolves it.\n\n**Agent SDK version:** the orchestrator has no *bash-computable* way to\nintrospect the live Agent SDK version — but the router runs in Node, so it\nresolves the version itself (#2590), in this order:\n\n1. an explicit `--agent-sdk-version <ver>` (pin a version),\n2. `GSD_AGENT_SDK_VERSION`,\n3. the **installed** `@anthropic-ai/claude-agent-sdk` package version, read from\n its `package.json` on disk by walking `node_modules` up the tree. (Read\n directly rather than via `require.resolve`: the SDK's `exports` map does not\n expose `./package.json`, so `require.resolve` throws\n `ERR_PACKAGE_PATH_NOT_EXPORTED`.)\n\nPreviously nothing computed this at all, so gate 5 returned\n`agent_sdk_version_unknown` on **every** automated run and the Workflow backend\ncould never activate — while `gsd-tools capability state` still reported the\ncapability `active: true`. Fail-closed is preserved: when no version can be\nresolved, gate 5 still declines to `inline`. What changed is that a resolvable\nversion is now actually found, so a genuinely-too-old SDK reports\n`agent_sdk_version_below_floor` — the truthful reason — instead of `unknown`.\n\n**If `backend == \"workflow\"`:** run the emitted `script` via the Workflow tool\nfor THIS wave instead of the per-message `Agent()` loop in step 3. The script\ncomposes the SAME `gsd-executor` agent type the inline path uses, with\nworktree isolation applied PER PLAN from the manifest's `use_worktree` field\n(see `emitWorkflowScript`):\n\n- **waves → one or more sequential `parallel()` barriers** — each wave is a\n barrier group; when plans within a wave share `files_modified`, they are split\n into separate sequential stages within that wave's barrier.\n- **plans → `agent(brief, { agentType: 'gsd-executor', isolation: 'worktree' })`**\n when `use_worktree` is not `false`, or `agent(brief, { agentType: 'gsd-executor' })`\n (no isolation) when it is — so the produced `SUMMARY.md` and commits are\n identical to inline dispatch, INCLUDING the inline path's submodule safety\n gate (#2772 / #2285 finding 1).\n- **`files_modified` overlap → separate sequential stages** — the same overlap\n rule execute-phase already applies inline (step 1 of the wave loop).\n- **`resumeFromRunId`** — **pass `summary.resumeRunId` as the Workflow tool's\n `resumeFromRunId` INPUT when you invoke the tool.** It is a tool parameter,\n not a script function; the script deliberately does not call it (#2590 — doing\n so threw \"resumeFromRunId is not defined\" and rejected the entire script).\n Omitting it from the tool invocation silently regresses phase-resume to a\n no-op: an interrupted phase re-runs completed plans.\n\n### After the run: manifest bridge into the merge chain (#3302)\n\nThe single Workflow tool call replaces step 3's per-plan `Agent()` loop — which also\nmeans step 3's manifest bookkeeping (creation + per-agent recording) does NOT happen on\nthis path. The orchestrator MUST bridge the run's per-agent results into the SAME\nmanifest-scoped merge chain inline dispatch uses, before steps 4–5.8, which then run\nunchanged:\n\n1. **Create the manifest BEFORE invoking the tool** (this is step 3's creation block,\n which this path skips). When ANY plan in the wave has `use_worktree` not `false`:\n\n ```bash\n if [ -z \"${WAVE_WORKTREE_MANIFEST:-}\" ]; then\n M=$(mktemp \"${TMPDIR:-/tmp}/gsd-worktree-wave-XXXXXX\") && mv \"$M\" \"$M.json\" && WAVE_WORKTREE_MANIFEST=\"$M.json\" || exit 1 # XXXXXX must be path-final on BSD/macOS (#1520)\n # Persist the dispatch-time orchestrator worktree root so wave-cleanup pins back\n # to the orchestrator's OWN worktree (#630), exactly as inline dispatch does.\n ORCH_ROOT=$(git rev-parse --show-toplevel)\n ORCH_ROOT=\"$ORCH_ROOT\" MANIFEST=\"$WAVE_WORKTREE_MANIFEST\" node -e 'const fs=require(\"fs\");fs.writeFileSync(process.env.MANIFEST,JSON.stringify({orchestrator_root:process.env.ORCH_ROOT||null,worktrees:[]})+\"\\n\")'\n export WAVE_WORKTREE_MANIFEST\n fi\n ```\n\n2. **Invoke the Workflow tool with the emitted script and\n `resumeFromRunId: summary.resumeRunId`.** The script top-level `return`s one entry\n per dispatched plan: `{ plan, expects_worktree, metadata }`. `metadata` is that\n plan's executor `<worktree_metadata>` JSON (`{agent_id, worktree_path, branch,\n expected_base}` — captured by the executor itself per\n `agents/gsd-executor.md`), or `null` when the agent's result carried none\n (interrupted agent, resumed-from-cache plan, or a non-worktree plan).\n\n3. **Record every worktree plan** exactly as inline dispatch does at step 3's\n \"After each `Agent()` returns\" — one `worktree.record-agent` per returned entry\n with `expects_worktree: true` and complete metadata:\n\n ```bash\n gsd_run query worktree.record-agent --manifest \"$WAVE_WORKTREE_MANIFEST\" \\\n --agent-id \"<metadata.agent_id>\" --path \"<metadata.worktree_path>\" \\\n --branch \"<metadata.branch>\" --base \"<metadata.expected_base>\" \\\n --files \"<plan files_modified, space-separated>\" \\\n --deletions \"<plan files_deleted, space-separated>\"\n ```\n\n `--deletions` (#3003) carries the plan's declared `files_deleted` so a plan that scoped a file\n removal merges through `cleanup-wave` instead of being blocked. Unlike `--files` it is not\n advisory: omitting it leaves the deletions guard blocking on any deletion at all, so this\n dispatch path must pass it or plans declaring a removal fail to merge here while succeeding on\n the inline path.\n\n The verb's write-strict validation applies as inline: on a non-zero exit or any\n missing field, stop and ask for recovery — do not append an under-populated entry.\n\n4. **HALT on uncapturable metadata — never a silently-empty manifest (#3302).**\n After recording, the manifest must hold one entry per `expects_worktree: true`\n outcome (`summary.worktreePlans` from `resolve-wave-dispatch` is the expected\n count). Any shortfall — a `null` `metadata`, a missing/empty field, or a count\n mismatch — means commits are stranded on their `worktree-wf_*` branches and\n `worktree.cleanup-wave` would merge nothing while the phase looks green. STOP the\n phase with the failing plan id and the recovery hint below; do NOT run\n `worktree.cleanup-wave` and do NOT proceed to step 4.\n\n **Recovery hint:** the unmerged `worktree-wf_*` branch still holds the work. Recover\n the missing metadata from the run's per-agent result journal (`journal.jsonl` — one\n `{\"type\":\"result\",…}` line per agent — in the Workflow run's transcript dir), re-run\n `worktree.record-agent` by hand, then re-run cleanup. If the journal cannot be\n recovered either, merge the branch manually after review — never discard it.\n\n5. **Resume (`resumeFromRunId`).** Cached/resumed agents do not re-emit their final\n messages, so a previously-completed plan can return with `metadata: null`. Recover\n that plan's metadata from the ORIGINAL run's journal (same hint as above). If it\n cannot be recovered, fail loudly per rule 4 — a resumed run must never report\n success over silently-dropped agent work.\n\n6. **Non-worktree plans** (`expects_worktree: false` — `use_worktree: false` in the\n manifest): they ran without isolation; their commits are already on the main working\n tree. No record-agent entry, no manifest write.\n\nWith the manifest populated, steps 4–5.8 (wait/completion bookkeeping, step 5.5's\nmanifest-scoped `worktree.cleanup-wave`, post-merge gate, tracking update) run\nUNCHANGED — the Workflow backend replaces HOW agents are spawned and returns their\nmetadata; the merge chain itself is the inline path's own, now with real input.\n\n**If `backend == \"inline\"`** (any gate miss, or `resolve-wave-dispatch` itself\nunavailable/erroring): proceed to step 3's standard per-message `Agent()`\ndispatch — the default, byte-identical-to-today path. `onError: skip` on this\ncontribution means a `resolve-wave-dispatch` command failure is treated exactly\nlike an `inline` result, never as a fatal wave error.\n\n## Fallback contract\n\nDetection is fail-closed end-to-end: capability disabled, non-Claude runtime,\n`execution_backend:\"inline\"`, missing/incapable host descriptor, unknown or\nbelow-floor Agent SDK version, or an `emitWorkflowScript` failure on a malformed\nwave manifest — ANY of these degrades to `backend:\"inline\"` and execute-phase's\nstandard inline dispatch (step 3) runs unmodified. The Workflow backend never\npartially activates; the executor MUST NOT assume parallelism, a shared budget,\nor resume-from-run-id semantics when `backend == \"inline\"`.\n"
|
|
745
|
-
},
|
|
746
|
-
"produces": [],
|
|
747
|
-
"consumes": [
|
|
748
|
-
"PLAN.md"
|
|
749
|
-
],
|
|
750
|
-
"when": "claude_orchestration.enabled",
|
|
751
|
-
"onError": "skip"
|
|
752
|
-
},
|
|
753
748
|
{
|
|
754
749
|
"point": "plan:post",
|
|
755
750
|
"into": "planner",
|
|
@@ -770,7 +765,7 @@ const capabilities = {
|
|
|
770
765
|
"cline": {
|
|
771
766
|
"id": "cline",
|
|
772
767
|
"role": "runtime",
|
|
773
|
-
"version": "1.
|
|
768
|
+
"version": "1.16.0",
|
|
774
769
|
"title": "Cline",
|
|
775
770
|
"description": "Cline (VS Code extension) — global-only nested-skill layout; cline-rules hook surface (.clinerules); no hook events emitted; tier-2 support.",
|
|
776
771
|
"tier": "core",
|
|
@@ -856,14 +851,15 @@ const capabilities = {
|
|
|
856
851
|
"skipSharedHooksInstall": true,
|
|
857
852
|
"localTargetIsProjectRoot": true,
|
|
858
853
|
"clineRulesSurface": true,
|
|
859
|
-
"localCommandsViaRules": true
|
|
854
|
+
"localCommandsViaRules": true,
|
|
855
|
+
"contentRewriteProfile": "slash-bare-own-tilde"
|
|
860
856
|
}
|
|
861
857
|
}
|
|
862
858
|
},
|
|
863
859
|
"code-review": {
|
|
864
860
|
"id": "code-review",
|
|
865
861
|
"role": "feature",
|
|
866
|
-
"version": "1.
|
|
862
|
+
"version": "1.16.0",
|
|
867
863
|
"title": "Code review",
|
|
868
864
|
"description": "Source-file code review and review-fix workflow support for completed execution work.",
|
|
869
865
|
"tier": "full",
|
|
@@ -949,7 +945,7 @@ const capabilities = {
|
|
|
949
945
|
"codebuddy": {
|
|
950
946
|
"id": "codebuddy",
|
|
951
947
|
"role": "runtime",
|
|
952
|
-
"version": "1.
|
|
948
|
+
"version": "1.16.0",
|
|
953
949
|
"title": "CodeBuddy",
|
|
954
950
|
"description": "CodeBuddy (Tencent) — converted commands + skills artifact layout; settings-json hook surface; Claude hook event dialect; tier-2 support.",
|
|
955
951
|
"tier": "core",
|
|
@@ -1060,14 +1056,15 @@ const capabilities = {
|
|
|
1060
1056
|
"effortSurface": "undocumented"
|
|
1061
1057
|
},
|
|
1062
1058
|
"hostBehaviors": {
|
|
1063
|
-
"reportCommandsDir": true
|
|
1059
|
+
"reportCommandsDir": true,
|
|
1060
|
+
"contentRewriteProfile": "slash-bare-own-tilde-bare"
|
|
1064
1061
|
}
|
|
1065
1062
|
}
|
|
1066
1063
|
},
|
|
1067
1064
|
"coderabbit": {
|
|
1068
1065
|
"id": "coderabbit",
|
|
1069
1066
|
"role": "reviewer",
|
|
1070
|
-
"version": "1.
|
|
1067
|
+
"version": "1.16.0",
|
|
1071
1068
|
"title": "CodeRabbit",
|
|
1072
1069
|
"description": "CodeRabbit CLI — cross-AI /gsd:review reviewer lane only; not a GSD install target (no runtime body, no artifacts). Reviews the working-tree diff (`coderabbit review --prompt-only`), not the source tree, and accepts neither a prompt nor a model flag; findings are down-weighted in consensus (evidenceClass: diff-only).",
|
|
1073
1070
|
"tier": "full",
|
|
@@ -1119,7 +1116,7 @@ const capabilities = {
|
|
|
1119
1116
|
"codex": {
|
|
1120
1117
|
"id": "codex",
|
|
1121
1118
|
"role": "runtime",
|
|
1122
|
-
"version": "1.
|
|
1119
|
+
"version": "1.16.0",
|
|
1123
1120
|
"title": "OpenAI Codex CLI",
|
|
1124
1121
|
"description": "OpenAI Codex CLI — shell-var command style; per-agent sandbox tiers; config.toml + hooks.json hook surface; tier-1 support.",
|
|
1125
1122
|
"tier": "core",
|
|
@@ -1231,6 +1228,13 @@ const capabilities = {
|
|
|
1231
1228
|
"unsupportedFeatures": [
|
|
1232
1229
|
"context-warnings",
|
|
1233
1230
|
"phase-lifecycle-display"
|
|
1231
|
+
],
|
|
1232
|
+
"rewriteClaudeAtIncludes": true,
|
|
1233
|
+
"contentRewriteProfile": "slash-own-tilde",
|
|
1234
|
+
"bakesStaticAgentModel": true,
|
|
1235
|
+
"bakedAgentFileExtensions": [
|
|
1236
|
+
".toml",
|
|
1237
|
+
".md"
|
|
1234
1238
|
]
|
|
1235
1239
|
}
|
|
1236
1240
|
},
|
|
@@ -1299,7 +1303,7 @@ const capabilities = {
|
|
|
1299
1303
|
"copilot": {
|
|
1300
1304
|
"id": "copilot",
|
|
1301
1305
|
"role": "runtime",
|
|
1302
|
-
"version": "1.
|
|
1306
|
+
"version": "1.16.0",
|
|
1303
1307
|
"title": "GitHub Copilot",
|
|
1304
1308
|
"description": "GitHub Copilot (VS Code) — markdown config format; copilot-inline hook surface; no hook events emitted; flat skill nesting (unconfirmed recursive loader); tier-2 support.",
|
|
1305
1309
|
"tier": "core",
|
|
@@ -1392,14 +1396,15 @@ const capabilities = {
|
|
|
1392
1396
|
"reapplyCommand": "/gsd-update --reapply",
|
|
1393
1397
|
"agentFileExtension": ".agent.md",
|
|
1394
1398
|
"skipSharedHooksInstall": true,
|
|
1395
|
-
"noPathRewrite": true
|
|
1399
|
+
"noPathRewrite": true,
|
|
1400
|
+
"contentRewriteProfile": "attribution-only"
|
|
1396
1401
|
}
|
|
1397
1402
|
}
|
|
1398
1403
|
},
|
|
1399
1404
|
"cursor": {
|
|
1400
1405
|
"id": "cursor",
|
|
1401
1406
|
"role": "runtime",
|
|
1402
|
-
"version": "1.
|
|
1407
|
+
"version": "1.16.0",
|
|
1403
1408
|
"title": "Cursor",
|
|
1404
1409
|
"description": "Cursor IDE — skills-only workflow surface; hooks.json surface; Claude hook event dialect; recursive skill loader (flat nesting); tier-2 support.",
|
|
1405
1410
|
"tier": "core",
|
|
@@ -1510,7 +1515,8 @@ const capabilities = {
|
|
|
1510
1515
|
"stop",
|
|
1511
1516
|
"subagentStart",
|
|
1512
1517
|
"subagentStop"
|
|
1513
|
-
]
|
|
1518
|
+
],
|
|
1519
|
+
"contentRewriteProfile": "slash-lookahead-own-tilde"
|
|
1514
1520
|
}
|
|
1515
1521
|
},
|
|
1516
1522
|
"reviewer": {
|
|
@@ -1568,9 +1574,9 @@ const capabilities = {
|
|
|
1568
1574
|
"drift": {
|
|
1569
1575
|
"id": "drift",
|
|
1570
1576
|
"role": "feature",
|
|
1571
|
-
"version": "1.
|
|
1577
|
+
"version": "1.16.0",
|
|
1572
1578
|
"title": "Drift detection gates",
|
|
1573
|
-
"description": "Drift detection gates for the planning loop. At execute:wave:post: a blocking schema drift gate (detects schema files changed without a database push) and a non-blocking codebase drift gate (detects structural additions
|
|
1579
|
+
"description": "Drift detection gates for the planning loop. At execute:wave:post: a blocking schema drift gate (detects schema files changed without a database push) and a non-blocking codebase drift gate (detects structural additions outside the codebase map and modified or deleted files inside it). At plan:pre: a non-blocking, warn-only codebase drift gate (gated on workflow.plan_drift_precheck) that flags a stale codebase map before planning, so plans are authored against a fresh STRUCTURE.md instead of discovering drift mid-execution.",
|
|
1574
1580
|
"tier": "full",
|
|
1575
1581
|
"requires": [],
|
|
1576
1582
|
"engines": {
|
|
@@ -1589,7 +1595,7 @@ const capabilities = {
|
|
|
1589
1595
|
"workflow.drift_threshold": {
|
|
1590
1596
|
"type": "number",
|
|
1591
1597
|
"default": 3,
|
|
1592
|
-
"description": "Minimum number of
|
|
1598
|
+
"description": "Minimum number of drift elements (new directories, barrel exports, migrations, routes, plus modified and deleted files inside mapped directories) before the codebase drift gate triggers a warn or auto-remap action."
|
|
1593
1599
|
},
|
|
1594
1600
|
"workflow.drift_action": {
|
|
1595
1601
|
"type": "enum",
|
|
@@ -1603,12 +1609,12 @@ const capabilities = {
|
|
|
1603
1609
|
"workflow.schema_drift_gate": {
|
|
1604
1610
|
"type": "boolean",
|
|
1605
1611
|
"default": true,
|
|
1606
|
-
"description": "Enable the drift gates at execute:wave:post. When enabled, the schema drift gate blocks verification if schema-relevant files changed during execution but no database push command was executed; the codebase drift gate (non-blocking) warns when
|
|
1612
|
+
"description": "Enable the drift gates at execute:wave:post. When enabled, the schema drift gate blocks verification if schema-relevant files changed during execution but no database push command was executed; the codebase drift gate (non-blocking) warns when drift elements exceed the drift_threshold."
|
|
1607
1613
|
},
|
|
1608
1614
|
"workflow.plan_drift_precheck": {
|
|
1609
1615
|
"type": "boolean",
|
|
1610
1616
|
"default": true,
|
|
1611
|
-
"description": "Enable the non-blocking codebase drift pre-check at plan:pre, before /gsd:plan-phase spawns the planner. When enabled, a stale STRUCTURE.md (
|
|
1617
|
+
"description": "Enable the non-blocking codebase drift pre-check at plan:pre, before /gsd:plan-phase spawns the planner. When enabled, a stale STRUCTURE.md (drift elements exceeding drift_threshold) is surfaced up front as a warn-only advisory pointing to /gsd:map-codebase; it never blocks planning and never spawns the mapper agent. Separate from schema_drift_gate so autonomous/CI runs can silence the plan-time advisory while keeping the execute:wave:post gates enabled."
|
|
1612
1618
|
},
|
|
1613
1619
|
"workflow.context_drift_precheck": {
|
|
1614
1620
|
"type": "boolean",
|
|
@@ -1669,7 +1675,7 @@ const capabilities = {
|
|
|
1669
1675
|
"external-job": {
|
|
1670
1676
|
"id": "external-job",
|
|
1671
1677
|
"role": "feature",
|
|
1672
|
-
"version": "1.
|
|
1678
|
+
"version": "1.16.0",
|
|
1673
1679
|
"title": "Async external-job scheduler adapter",
|
|
1674
1680
|
"description": "Default-off producer of the async external-job manifest (#1164). At execute:wave:post an executor can externalize long-running compute (SLURM first, scheduler-pluggable), commit a .planning/async-jobs/<job>.json manifest, defer SUMMARY.md, and return external_job_waiting. The core loop (#1165) consumes the manifest; this capability is the only thing that writes it. NOTE on contribution point: #1164 specifies classification at execute:wave:pre and recording at execute:wave:post. This capability still contributes executor guidance at wave:post; execute-phase now renders wave:pre entries and dispatches generic step hooks there independently. Moving external-job classification to wave:pre is a separate capability change, not part of #4148. The adapter (scripts/slurm-adapter.cjs) reads external_job.submit_timeout_ms / poll_timeout_ms / artifact_dir through the canonical capability-config seam (env override > config > registry default).",
|
|
1675
1681
|
"tier": "full",
|
|
@@ -1752,7 +1758,7 @@ const capabilities = {
|
|
|
1752
1758
|
"gap-analysis": {
|
|
1753
1759
|
"id": "gap-analysis",
|
|
1754
1760
|
"role": "feature",
|
|
1755
|
-
"version": "1.
|
|
1761
|
+
"version": "1.16.0",
|
|
1756
1762
|
"title": "Post-planning gap analysis",
|
|
1757
1763
|
"description": "Proactive, non-blocking post-planning coverage report. After all PLAN.md files are generated, cross-references every REQ-ID and D-ID from REQUIREMENTS.md and CONTEXT.md against plan bodies. Emits a Source | Item | Status table. Does not block phase advancement.",
|
|
1758
1764
|
"tier": "standard",
|
|
@@ -1790,73 +1796,10 @@ const capabilities = {
|
|
|
1790
1796
|
}
|
|
1791
1797
|
]
|
|
1792
1798
|
},
|
|
1793
|
-
"gemini": {
|
|
1794
|
-
"id": "gemini",
|
|
1795
|
-
"role": "reviewer",
|
|
1796
|
-
"version": "1.14.0",
|
|
1797
|
-
"title": "Gemini CLI",
|
|
1798
|
-
"description": "Google Gemini CLI — cross-AI /gsd:review reviewer lane only; not a GSD install target (no runtime body, no artifacts). Spawned as `gemini -p - -m <model>` with the plan piped on stdin.",
|
|
1799
|
-
"tier": "full",
|
|
1800
|
-
"requires": [],
|
|
1801
|
-
"engines": {
|
|
1802
|
-
"gsd": ">=1.8.0"
|
|
1803
|
-
},
|
|
1804
|
-
"reviewer": {
|
|
1805
|
-
"slug": "gemini",
|
|
1806
|
-
"flags": [
|
|
1807
|
-
"--gemini"
|
|
1808
|
-
],
|
|
1809
|
-
"transport": "spawn",
|
|
1810
|
-
"probe": {
|
|
1811
|
-
"kind": "command-exists",
|
|
1812
|
-
"binary": "gemini"
|
|
1813
|
-
},
|
|
1814
|
-
"invoke": {
|
|
1815
|
-
"binary": "gemini",
|
|
1816
|
-
"args": [
|
|
1817
|
-
"{{model}}",
|
|
1818
|
-
"-p",
|
|
1819
|
-
"-"
|
|
1820
|
-
],
|
|
1821
|
-
"promptChannel": "stdin",
|
|
1822
|
-
"outputChannel": "stdout",
|
|
1823
|
-
"modelArg": "-m",
|
|
1824
|
-
"effortChannel": "none"
|
|
1825
|
-
},
|
|
1826
|
-
"timeoutFloorMs": 900000,
|
|
1827
|
-
"timeoutConfigKey": "review.timeouts.gemini",
|
|
1828
|
-
"emptyOutput": "stub-with-stderr",
|
|
1829
|
-
"reviewsSection": "Gemini",
|
|
1830
|
-
"evidenceClass": "source-grounded",
|
|
1831
|
-
"requiresBinaries": [],
|
|
1832
|
-
"promptBudgetKey": "review.max_prompt_tokens_per_reviewer.gemini",
|
|
1833
|
-
"modelConfigKey": "review.models.gemini",
|
|
1834
|
-
"effortConfigKey": null,
|
|
1835
|
-
"defaultEffort": null,
|
|
1836
|
-
"handler": null
|
|
1837
|
-
},
|
|
1838
|
-
"config": {
|
|
1839
|
-
"review.models.gemini": {
|
|
1840
|
-
"type": "string",
|
|
1841
|
-
"default": "",
|
|
1842
|
-
"description": "Model passed to the Gemini reviewer lane."
|
|
1843
|
-
},
|
|
1844
|
-
"review.max_prompt_tokens_per_reviewer.gemini": {
|
|
1845
|
-
"type": "number",
|
|
1846
|
-
"default": -1,
|
|
1847
|
-
"description": "Prompt-token budget for the Gemini reviewer lane. Unset is -1, a sentinel: 0 is a legitimate value meaning \"do not trim this lane\", so it cannot double as \"not configured\"."
|
|
1848
|
-
},
|
|
1849
|
-
"review.timeouts.gemini": {
|
|
1850
|
-
"type": "number",
|
|
1851
|
-
"default": -1,
|
|
1852
|
-
"description": "Outer wall-clock timeout override (seconds) for the Gemini reviewer lane. Unset is -1, a sentinel: 0 or a negative number is also treated as unset (a timeout has no legitimate zero/negative value), so no second sentinel is needed. Falls back to the lane's built-in timeoutFloorMs when unset."
|
|
1853
|
-
}
|
|
1854
|
-
}
|
|
1855
|
-
},
|
|
1856
1799
|
"graphify": {
|
|
1857
1800
|
"id": "graphify",
|
|
1858
1801
|
"role": "feature",
|
|
1859
|
-
"version": "1.
|
|
1802
|
+
"version": "1.16.0",
|
|
1860
1803
|
"title": "Knowledge graph",
|
|
1861
1804
|
"description": "Build, query, and inspect the project knowledge graph in `.planning/graphs/`; exposes graphify CLI subcommands (build, query, status, diff) and the /gsd-graphify skill.",
|
|
1862
1805
|
"tier": "full",
|
|
@@ -1897,7 +1840,7 @@ const capabilities = {
|
|
|
1897
1840
|
"hermes": {
|
|
1898
1841
|
"id": "hermes",
|
|
1899
1842
|
"role": "runtime",
|
|
1900
|
-
"version": "1.
|
|
1843
|
+
"version": "1.16.0",
|
|
1901
1844
|
"title": "Hermes Agent",
|
|
1902
1845
|
"description": "Hermes Agent (NousResearch) — skills nest under skills/gsd/ category bucket; nested skill layout; settings-json hook surface; Claude hook event dialect; tier-2 support.",
|
|
1903
1846
|
"tier": "core",
|
|
@@ -1982,7 +1925,11 @@ const capabilities = {
|
|
|
1982
1925
|
"reapplyCommand": "gsd-update --reapply (mention the skill name)",
|
|
1983
1926
|
"legacyCommandsGsdInstallMigration": true,
|
|
1984
1927
|
"legacyCommandsGsdUninstall": true,
|
|
1985
|
-
"hyphenNameAgentBody": true
|
|
1928
|
+
"hyphenNameAgentBody": true,
|
|
1929
|
+
"legacyFlatSkillsCleanup": true,
|
|
1930
|
+
"bareStemSkillsCleanup": true,
|
|
1931
|
+
"categoryContainerCleanup": true,
|
|
1932
|
+
"contentRewriteProfile": "branded-lookahead-own-derived"
|
|
1986
1933
|
},
|
|
1987
1934
|
"hostIntegration": {
|
|
1988
1935
|
"embeddingMode": "imperative",
|
|
@@ -2009,7 +1956,7 @@ const capabilities = {
|
|
|
2009
1956
|
"intel": {
|
|
2010
1957
|
"id": "intel",
|
|
2011
1958
|
"role": "feature",
|
|
2012
|
-
"version": "1.
|
|
1959
|
+
"version": "1.16.0",
|
|
2013
1960
|
"title": "Codebase intelligence",
|
|
2014
1961
|
"description": "Code-intelligence store for codebase querying, diff, snapshot, and API-surface extraction; exposes `gsd-tools intel` subcommands (query, status, update, diff, snapshot, patch-meta, validate, extract-exports, api-surface) and backs `/gsd-map-codebase` and `gsd-intel-updater`.",
|
|
2015
1962
|
"tier": "full",
|
|
@@ -2061,7 +2008,7 @@ const capabilities = {
|
|
|
2061
2008
|
"kilo": {
|
|
2062
2009
|
"id": "kilo",
|
|
2063
2010
|
"role": "runtime",
|
|
2064
|
-
"version": "1.
|
|
2011
|
+
"version": "1.16.0",
|
|
2065
2012
|
"title": "Kilo Code",
|
|
2066
2013
|
"description": "Kilo Code — XDG-based config dir; global skills at ~/.kilo/skills (separate from XDG config); flat command/ + skills artifact layout; no lifecycle hook registration; tier-2 support.",
|
|
2067
2014
|
"tier": "core",
|
|
@@ -2184,14 +2131,18 @@ const capabilities = {
|
|
|
2184
2131
|
"file": "gsd-core.js",
|
|
2185
2132
|
"source": ".kilo/plugins/gsd-core.js"
|
|
2186
2133
|
},
|
|
2187
|
-
"skipUpdateBannerCommand": true
|
|
2134
|
+
"skipUpdateBannerCommand": true,
|
|
2135
|
+
"bakesStaticAgentModel": true,
|
|
2136
|
+
"bakedAgentFileExtensions": [
|
|
2137
|
+
".md"
|
|
2138
|
+
]
|
|
2188
2139
|
}
|
|
2189
2140
|
}
|
|
2190
2141
|
},
|
|
2191
2142
|
"kimi": {
|
|
2192
2143
|
"id": "kimi",
|
|
2193
2144
|
"role": "runtime",
|
|
2194
|
-
"version": "1.
|
|
2145
|
+
"version": "1.16.0",
|
|
2195
2146
|
"title": "Kimi CLI",
|
|
2196
2147
|
"description": "Kimi CLI (Moonshot AI) — generic agents root at ~/.config/agents; skills + kimi-agents artifact layout; native config.toml [[hooks]] bus at ~/.kimi/config.toml; background dispatch; tier-2 support.",
|
|
2197
2148
|
"tier": "core",
|
|
@@ -2288,14 +2239,16 @@ const capabilities = {
|
|
|
2288
2239
|
"agentManifestStyle": "kimi-nested",
|
|
2289
2240
|
"doneBannerStyle": "kimi-agent-file",
|
|
2290
2241
|
"skipSharedHooksInstall": true,
|
|
2291
|
-
"noPathRewrite": true
|
|
2242
|
+
"noPathRewrite": true,
|
|
2243
|
+
"requiresSubagentPair": true,
|
|
2244
|
+
"contentRewriteProfile": "slash-bare"
|
|
2292
2245
|
}
|
|
2293
2246
|
}
|
|
2294
2247
|
},
|
|
2295
2248
|
"kimi-code": {
|
|
2296
2249
|
"id": "kimi-code",
|
|
2297
2250
|
"role": "runtime",
|
|
2298
|
-
"version": "1.
|
|
2251
|
+
"version": "1.16.0",
|
|
2299
2252
|
"title": "Kimi Code CLI",
|
|
2300
2253
|
"description": "Kimi Code CLI (Moonshot AI, Node) — Agent Skills auto-discovered at ~/.kimi-code/skills; global AGENTS.md at ~/.kimi-code/AGENTS.md; native config.toml + [[hooks]] bus; three built-in subagents (coder/explore/plan), NO custom named subagents; background dispatch; tier-2 support. Distinct from Python kimi-cli (the 'kimi' capability) per ADR-1239 EoS — Kimi Code cannot dispatch named subagents so the kimi-agents YAML layout does NOT apply; persona injection rides the existing ${AGENT_SKILLS_*} workflow fallback. Install-layout, agent-install-check, and install-time decision (kimi vs kimi-code) land in follow-up PRs; this descriptor is the EoS foundation.",
|
|
2301
2254
|
"tier": "core",
|
|
@@ -2402,7 +2355,8 @@ const capabilities = {
|
|
|
2402
2355
|
"agentManifestStyle": "none",
|
|
2403
2356
|
"doneBannerStyle": "kimi-code",
|
|
2404
2357
|
"skipSharedHooksInstall": true,
|
|
2405
|
-
"namedSubagentsSupported": false
|
|
2358
|
+
"namedSubagentsSupported": false,
|
|
2359
|
+
"reclaimsKimiLegacyHooksRoot": true
|
|
2406
2360
|
}
|
|
2407
2361
|
},
|
|
2408
2362
|
"reviewer": {
|
|
@@ -2462,7 +2416,7 @@ const capabilities = {
|
|
|
2462
2416
|
"live-dom-uat": {
|
|
2463
2417
|
"id": "live-dom-uat",
|
|
2464
2418
|
"role": "feature",
|
|
2465
|
-
"version": "1.
|
|
2419
|
+
"version": "1.16.0",
|
|
2466
2420
|
"title": "Live-DOM UAT",
|
|
2467
2421
|
"description": "Default-off live-DOM verification (#2856). Confines browser MCP reach to one purpose-built agent (gsd-dom-verifier) that carries the browser globs in its own tools: line, registered as an additive step hook at execute:wave:post. agents/gsd-executor.md is deliberately NOT widened: for a first-party agent the static tool list is the only control that exists, no capability can grant tools to one (ADR-1244 D2), no hook kind grants tool permissions (ADR-857 D4), and there is no per-dispatch tool override. Gated by activationKey workflow.live_dom_uat (default false), so with the key off the capability resolves inactive and the hook does not render at all. NOTE on the browser profile lock: chrome-devtools-mcp holds an exclusive lock on $HOME/.cache/chrome-devtools-mcp/chrome-profile, and --isolated is a flag on the user's own MCP-server registration that GSD cannot pass. Concurrent execution waves sharing one profile will therefore collide; the step tolerates and reports that (onError: skip, never blocking) rather than pretending to coordinate a resource it does not own.",
|
|
2468
2422
|
"tier": "full",
|
|
@@ -2515,7 +2469,7 @@ const capabilities = {
|
|
|
2515
2469
|
"llama-cpp": {
|
|
2516
2470
|
"id": "llama-cpp",
|
|
2517
2471
|
"role": "reviewer",
|
|
2518
|
-
"version": "1.
|
|
2472
|
+
"version": "1.16.0",
|
|
2519
2473
|
"title": "llama.cpp",
|
|
2520
2474
|
"description": "llama.cpp server — cross-AI /gsd:review reviewer lane only; not a GSD install target (no runtime body, no artifacts). OpenAI-compatible HTTP transport against a user-configured `review.llama_cpp_host` (POST /v1/chat/completions); model discovered via GET /v1/models piped through jq. Capability id/folder are kebab (`llama-cpp`, required by KEBAB_RE); `reviewer.slug` stays snake (`llama_cpp`) to match the shipped roster and the `review.llama_cpp_host` config key (ADR-2782's three-namespace trap).",
|
|
2521
2475
|
"tier": "full",
|
|
@@ -2581,7 +2535,7 @@ const capabilities = {
|
|
|
2581
2535
|
"lm-studio": {
|
|
2582
2536
|
"id": "lm-studio",
|
|
2583
2537
|
"role": "reviewer",
|
|
2584
|
-
"version": "1.
|
|
2538
|
+
"version": "1.16.0",
|
|
2585
2539
|
"title": "LM Studio",
|
|
2586
2540
|
"description": "LM Studio local model server — cross-AI /gsd:review reviewer lane only; not a GSD install target (no runtime body, no artifacts). OpenAI-compatible HTTP transport against a user-configured `review.lm_studio_host` (POST /v1/chat/completions); model discovered via GET /v1/models piped through jq. Capability id/folder are kebab (`lm-studio`, required by KEBAB_RE); `reviewer.slug` stays snake (`lm_studio`) to match the shipped roster and the `review.lm_studio_host` config key (ADR-2782's three-namespace trap).",
|
|
2587
2541
|
"tier": "full",
|
|
@@ -2647,7 +2601,7 @@ const capabilities = {
|
|
|
2647
2601
|
"mempalace": {
|
|
2648
2602
|
"id": "mempalace",
|
|
2649
2603
|
"role": "feature",
|
|
2650
|
-
"version": "1.
|
|
2604
|
+
"version": "1.16.0",
|
|
2651
2605
|
"title": "MemPalace memory",
|
|
2652
2606
|
"description": "Cross-session, cross-project memory: deliberate recall before discuss/plan and verbatim capture + temporal-KG sync at phase boundaries, via the MemPalace MCP server and CLI.",
|
|
2653
2607
|
"tier": "full",
|
|
@@ -2808,7 +2762,7 @@ const capabilities = {
|
|
|
2808
2762
|
"into": "verifier",
|
|
2809
2763
|
"fragment": {
|
|
2810
2764
|
"path": "fragments/capture-problems.md",
|
|
2811
|
-
"inline": "<!--\n MemPalace capability — contribution fragment.\n Rendered into the execute:wave:post verifier prompt when `mempalace.capture_artifacts` is true.\n Contributes DATA (capture instructions), not control flow. onError: skip — never fails a wave.\n-->\n### Capture problems → fixes (MemPalace)\n\n**Gate first.** Read `.planning/config.json`. If `mempalace.enabled` is not `true`, or `mempalace.capture_artifacts` is `false`, **skip this entire section** and let the wave complete unchanged. (This contribution is only injected when the capability is enabled; the `capture_artifacts` check lets you turn capture off without disabling the rest of the capability.)\n\nOtherwise — after verifying this wave, persist any *confirmed* problem→fix pairs into the palace so they are recalled in future phases. This is best-effort; if MemPalace is unreachable, skip silently — capture never fails a wave.\n\nFor each confirmed bug/issue resolved in this wave:\n\n1. **Resolve the wing** (`mempalace.wing`, else `project_code`, else project dir) and target `room: problems`.\n2. **Dedupe first.** Call `mempalace_check_duplicate` (interactive) before filing so re-runs don't create duplicate drawers.\n3. **File the drawer verbatim.** Store the problem statement and its fix as a drawer in `room: problems` — interactive: `mempalace_add_drawer`; headless: stage the artifact under the `problems/` folder and run `mempalace mine` (no `--room` flag — see [CLI reference](https://mempalaceofficial.com/reference/cli.html); room assignment is via `detect_room()` folder-path match per the [mining guide](https://mempalaceofficial.com/guide/mining.html); use the same staging pattern documented in `gsd-mempalace-capture` Step 3). Include provenance (`source_file`, phase id).\n4. **Mirror the KG fact** when `mempalace.mirror_kg` is on: add `(<bug>, fixed_by, <fix>)` with `valid_from` = the phase date via `mempalace_kg_add`.\n5. **Mode awareness** (`mempalace.memory_mode`). Under `augment` the fact is an *additive* mirror alongside `.planning/graphs/`. Under `kg_backend`/`replace` the palace is the *authoritative* store for the fact; GSD still writes `.planning/graphs/` through its normal graphify, so an unreachable palace never loses it.\n\nCaptures are idempotent: deterministic drawer IDs + `check_duplicate` mean re-running the wave re-files the same content without duplication. On any error, skip and let the wave complete normally.\n"
|
|
2765
|
+
"inline": "<!--\n MemPalace capability — contribution fragment.\n Rendered into the execute:wave:post verifier prompt when `mempalace.capture_artifacts` is true.\n Contributes DATA (capture instructions), not control flow. onError: skip — never fails a wave.\n-->\n### Capture problems → fixes (MemPalace)\n\n**Gate first.** Read `.planning/config.json`. If `mempalace.enabled` is not `true`, or `mempalace.capture_artifacts` is `false`, **skip this entire section** and let the wave complete unchanged. (This contribution is only injected when the capability is enabled; the `capture_artifacts` check lets you turn capture off without disabling the rest of the capability.)\n\nOtherwise — after verifying this wave, persist any *confirmed* problem→fix pairs into the palace so they are recalled in future phases. This is best-effort; if MemPalace is unreachable, skip silently — capture never fails a wave.\n\nFor each confirmed bug/issue resolved in this wave:\n\n1. **Resolve the wing** (`mempalace.wing`, else `project_code`, else project dir) and target `room: problems`.\n2. **Dedupe first.** Call `mempalace_check_duplicate` (interactive) before filing so re-runs don't create duplicate drawers.\n3. **File the drawer verbatim.** Store the problem statement and its fix as a drawer in `room: problems` — interactive: `mempalace_add_drawer`; headless: stage the artifact under the `problems/` folder and run `mempalace mine --daemon --background` (no `--room` flag; the background queue defers the write when another writer holds the palace lock, #4700 — see [CLI reference](https://mempalaceofficial.com/reference/cli.html); room assignment is via `detect_room()` folder-path match per the [mining guide](https://mempalaceofficial.com/guide/mining.html); use the same staging pattern documented in `gsd-mempalace-capture` Step 3). Include provenance (`source_file`, phase id).\n4. **Mirror the KG fact** when `mempalace.mirror_kg` is on: add `(<bug>, fixed_by, <fix>)` with `valid_from` = the phase date via `mempalace_kg_add`.\n5. **Mode awareness** (`mempalace.memory_mode`). Under `augment` the fact is an *additive* mirror alongside `.planning/graphs/`. Under `kg_backend`/`replace` the palace is the *authoritative* store for the fact; GSD still writes `.planning/graphs/` through its normal graphify, so an unreachable palace never loses it.\n\nCaptures are idempotent: deterministic drawer IDs + `check_duplicate` mean re-running the wave re-files the same content without duplication. On any error, skip and let the wave complete normally.\n"
|
|
2812
2766
|
},
|
|
2813
2767
|
"produces": [],
|
|
2814
2768
|
"consumes": [],
|
|
@@ -2821,7 +2775,7 @@ const capabilities = {
|
|
|
2821
2775
|
"nyquist": {
|
|
2822
2776
|
"id": "nyquist",
|
|
2823
2777
|
"role": "feature",
|
|
2824
|
-
"version": "1.
|
|
2778
|
+
"version": "1.16.0",
|
|
2825
2779
|
"title": "Nyquist validation",
|
|
2826
2780
|
"description": "Validation coverage audit that maps executed work back to tests and manual-only evidence.",
|
|
2827
2781
|
"tier": "full",
|
|
@@ -2871,7 +2825,7 @@ const capabilities = {
|
|
|
2871
2825
|
"ollama": {
|
|
2872
2826
|
"id": "ollama",
|
|
2873
2827
|
"role": "reviewer",
|
|
2874
|
-
"version": "1.
|
|
2828
|
+
"version": "1.16.0",
|
|
2875
2829
|
"title": "Ollama",
|
|
2876
2830
|
"description": "Ollama local model server — cross-AI /gsd:review reviewer lane only; not a GSD install target (no runtime body, no artifacts). OpenAI-compatible HTTP transport against a user-configured `review.ollama_host` (POST /v1/chat/completions); model discovered via GET /v1/models piped through jq.",
|
|
2877
2831
|
"tier": "full",
|
|
@@ -2937,7 +2891,7 @@ const capabilities = {
|
|
|
2937
2891
|
"opencode": {
|
|
2938
2892
|
"id": "opencode",
|
|
2939
2893
|
"role": "runtime",
|
|
2940
|
-
"version": "1.
|
|
2894
|
+
"version": "1.16.0",
|
|
2941
2895
|
"title": "OpenCode",
|
|
2942
2896
|
"description": "OpenCode — XDG-based config dir; flat commands/ + skills artifact layout; settings-json config format; no lifecycle hook registration; tier-2 support.",
|
|
2943
2897
|
"tier": "core",
|
|
@@ -3066,7 +3020,11 @@ const capabilities = {
|
|
|
3066
3020
|
"skipHomePrefixSubstitution": true,
|
|
3067
3021
|
"skipSettingsUi": true,
|
|
3068
3022
|
"skipUpdateBannerCommand": true,
|
|
3069
|
-
"
|
|
3023
|
+
"opencodePathPrefix": true,
|
|
3024
|
+
"bakesStaticAgentModel": true,
|
|
3025
|
+
"bakedAgentFileExtensions": [
|
|
3026
|
+
".md"
|
|
3027
|
+
]
|
|
3070
3028
|
}
|
|
3071
3029
|
},
|
|
3072
3030
|
"reviewer": {
|
|
@@ -3132,7 +3090,7 @@ const capabilities = {
|
|
|
3132
3090
|
"pattern-mapper": {
|
|
3133
3091
|
"id": "pattern-mapper",
|
|
3134
3092
|
"role": "feature",
|
|
3135
|
-
"version": "1.
|
|
3093
|
+
"version": "1.16.0",
|
|
3136
3094
|
"title": "Pattern mapping",
|
|
3137
3095
|
"description": "Optional codebase-pattern mapping before planning; owns the pattern mapper agent and workflow.pattern_mapper activation key.",
|
|
3138
3096
|
"tier": "full",
|
|
@@ -3186,7 +3144,7 @@ const capabilities = {
|
|
|
3186
3144
|
"pi": {
|
|
3187
3145
|
"id": "pi",
|
|
3188
3146
|
"role": "runtime",
|
|
3189
|
-
"version": "1.
|
|
3147
|
+
"version": "1.16.0",
|
|
3190
3148
|
"title": "pi",
|
|
3191
3149
|
"description": "pi (pi.dev) — bun-runtime programmatic-CLI; TS ExtensionAPI (registerCommand/registerTool/registerProvider/pi.on); single native-extension file at ~/.pi/agent/extensions/gsd.js (.js, not .cjs — pi's extension auto-discovery accepts only .ts/.js, #2470); no shared-settings hook surface; tier-2 support.",
|
|
3192
3150
|
"tier": "core",
|
|
@@ -3256,7 +3214,7 @@ const capabilities = {
|
|
|
3256
3214
|
"profile-pipeline": {
|
|
3257
3215
|
"id": "profile-pipeline",
|
|
3258
3216
|
"role": "feature",
|
|
3259
|
-
"version": "1.
|
|
3217
|
+
"version": "1.16.0",
|
|
3260
3218
|
"title": "Developer profiling pipeline",
|
|
3261
3219
|
"description": "Developer behavioral profiling from Claude Code session history; scans session JSONL files, extracts and samples user messages, and generates profile artifacts (USER-PROFILE.md, dev-preferences.md, CLAUDE.md sections). Exposes eight `gsd-tools` commands: scan-sessions, extract-messages, profile-sample (pipeline phase) and write-profile, profile-questionnaire, generate-dev-preferences, generate-claude-profile, generate-claude-md (output phase). Backs the /gsd-profile-user skill and gsd-user-profiler agent.",
|
|
3262
3220
|
"tier": "full",
|
|
@@ -3333,7 +3291,7 @@ const capabilities = {
|
|
|
3333
3291
|
"qwen": {
|
|
3334
3292
|
"id": "qwen",
|
|
3335
3293
|
"role": "runtime",
|
|
3336
|
-
"version": "1.
|
|
3294
|
+
"version": "1.16.0",
|
|
3337
3295
|
"title": "Qwen Code",
|
|
3338
3296
|
"description": "Qwen Code (Alibaba) — nested-skill artifact layout; settings-json hook surface; Claude hook event dialect; tier-2 support.",
|
|
3339
3297
|
"tier": "core",
|
|
@@ -3437,7 +3395,8 @@ const capabilities = {
|
|
|
3437
3395
|
"legacyCommandsGsdCleanup": true,
|
|
3438
3396
|
"legacyCommandsGsdInstallMigration": true,
|
|
3439
3397
|
"legacyCommandsGsdUninstall": true,
|
|
3440
|
-
"hyphenNameAgentBody": true
|
|
3398
|
+
"hyphenNameAgentBody": true,
|
|
3399
|
+
"contentRewriteProfile": "branded-lookahead-own-derived"
|
|
3441
3400
|
}
|
|
3442
3401
|
},
|
|
3443
3402
|
"reviewer": {
|
|
@@ -3483,7 +3442,7 @@ const capabilities = {
|
|
|
3483
3442
|
"refactor-trigger": {
|
|
3484
3443
|
"id": "refactor-trigger",
|
|
3485
3444
|
"role": "feature",
|
|
3486
|
-
"version": "1.
|
|
3445
|
+
"version": "1.16.0",
|
|
3487
3446
|
"title": "Complexity-triggered refactor",
|
|
3488
3447
|
"description": "Measures the complexity of the code a phase touched and, when a function crosses a configured threshold or jumps past its recorded anchor, surfaces a scoped refactor proposal at .planning/phases/<N>/<NN>-REFACTOR.md. Advisory by default — it never edits code and never blocks. Opt-in strict mode blocks /gsd-ship while a proposal is untriaged; a declined proposal is recorded in the broken-windows ledger when that capability is present. Operationalizes 'refactor early, refactor often' as continuous pressure instead of a thing you have to remember (issue #1953).",
|
|
3489
3448
|
"tier": "full",
|
|
@@ -3550,7 +3509,7 @@ const capabilities = {
|
|
|
3550
3509
|
"research": {
|
|
3551
3510
|
"id": "research",
|
|
3552
3511
|
"role": "feature",
|
|
3553
|
-
"version": "1.
|
|
3512
|
+
"version": "1.16.0",
|
|
3554
3513
|
"title": "Phase research",
|
|
3555
3514
|
"description": "Optional phase research before planning; owns the phase researcher agent and workflow.research activation key.",
|
|
3556
3515
|
"tier": "standard",
|
|
@@ -3602,7 +3561,7 @@ const capabilities = {
|
|
|
3602
3561
|
"schema-gate": {
|
|
3603
3562
|
"id": "schema-gate",
|
|
3604
3563
|
"role": "feature",
|
|
3605
|
-
"version": "1.
|
|
3564
|
+
"version": "1.16.0",
|
|
3606
3565
|
"title": "Schema push detection gate",
|
|
3607
3566
|
"description": "Detects ORM schema-relevant files in the phase scope during planning and injects a mandatory [BLOCKING] schema push task into the plan. Prevents false-positive verification where build/types pass because TypeScript types come from config, not the live database.",
|
|
3608
3567
|
"tier": "full",
|
|
@@ -3648,7 +3607,7 @@ const capabilities = {
|
|
|
3648
3607
|
"security": {
|
|
3649
3608
|
"id": "security",
|
|
3650
3609
|
"role": "feature",
|
|
3651
|
-
"version": "1.
|
|
3610
|
+
"version": "1.16.0",
|
|
3652
3611
|
"title": "Security enforcement",
|
|
3653
3612
|
"description": "Threat mitigation verification and ship-time security blocking for phases with security enforcement enabled.",
|
|
3654
3613
|
"tier": "full",
|
|
@@ -3747,7 +3706,7 @@ const capabilities = {
|
|
|
3747
3706
|
"tdd": {
|
|
3748
3707
|
"id": "tdd",
|
|
3749
3708
|
"role": "feature",
|
|
3750
|
-
"version": "1.
|
|
3709
|
+
"version": "1.16.0",
|
|
3751
3710
|
"title": "Test-driven development",
|
|
3752
3711
|
"description": "Injects TDD heuristics into the planner and enforces RED/GREEN gate compliance on type:tdd plans after execution. Owns workflow.tdd_mode; the --tdd CLI flag is the ephemeral override.",
|
|
3753
3712
|
"tier": "full",
|
|
@@ -3800,7 +3759,7 @@ const capabilities = {
|
|
|
3800
3759
|
"trae": {
|
|
3801
3760
|
"id": "trae",
|
|
3802
3761
|
"role": "runtime",
|
|
3803
|
-
"version": "1.
|
|
3762
|
+
"version": "1.16.0",
|
|
3804
3763
|
"title": "Trae IDE",
|
|
3805
3764
|
"description": "Trae IDE — nested-skill artifact layout; no hook surface (profile-marker-only config); tier-2 support.",
|
|
3806
3765
|
"tier": "core",
|
|
@@ -3891,14 +3850,15 @@ const capabilities = {
|
|
|
3891
3850
|
"hostBehaviors": {
|
|
3892
3851
|
"skipSharedHooksInstall": true,
|
|
3893
3852
|
"soloStageMetadata": "workflow",
|
|
3894
|
-
"projectInstructionFile": ".trae/rules/rules.md"
|
|
3853
|
+
"projectInstructionFile": ".trae/rules/rules.md",
|
|
3854
|
+
"contentRewriteProfile": "slash-bare-own-derived"
|
|
3895
3855
|
}
|
|
3896
3856
|
}
|
|
3897
3857
|
},
|
|
3898
3858
|
"ui": {
|
|
3899
3859
|
"id": "ui",
|
|
3900
3860
|
"role": "feature",
|
|
3901
|
-
"version": "1.
|
|
3861
|
+
"version": "1.16.0",
|
|
3902
3862
|
"title": "UI design contracts",
|
|
3903
3863
|
"description": "UI-SPEC design contract + retrospective UI audit for frontend phases.",
|
|
3904
3864
|
"tier": "full",
|
|
@@ -3936,6 +3896,11 @@ const capabilities = {
|
|
|
3936
3896
|
"type": "boolean",
|
|
3937
3897
|
"default": true,
|
|
3938
3898
|
"description": "Block execution on unmet UI-SPEC contracts."
|
|
3899
|
+
},
|
|
3900
|
+
"workflow.ui_interaction_capture": {
|
|
3901
|
+
"type": "boolean",
|
|
3902
|
+
"default": false,
|
|
3903
|
+
"description": "Default-off. Let gsd-ui-auditor add post-interaction captures (hover, focus, open menus, filled forms) through the chrome-devtools CLI, driven from Bash — no MCP server and no tools: change (#4223). Requires an installed Chrome; when off, or when none resolves, the auditor's Playwright-only static capture is unchanged."
|
|
3939
3904
|
}
|
|
3940
3905
|
},
|
|
3941
3906
|
"steps": [
|
|
@@ -3993,7 +3958,7 @@ const capabilities = {
|
|
|
3993
3958
|
"vscode": {
|
|
3994
3959
|
"id": "vscode",
|
|
3995
3960
|
"role": "runtime",
|
|
3996
|
-
"version": "1.
|
|
3961
|
+
"version": "1.16.0",
|
|
3997
3962
|
"title": "VS Code",
|
|
3998
3963
|
"description": "VS Code — Marketplace/VSIX extension; no file-projected config directory; IDE-profile reference host (active vscode.lm model, engine-owned hook bus, sandboxed globalState/workspaceState stateIO).",
|
|
3999
3964
|
"tier": "core",
|
|
@@ -4051,7 +4016,7 @@ const capabilities = {
|
|
|
4051
4016
|
"windsurf": {
|
|
4052
4017
|
"id": "windsurf",
|
|
4053
4018
|
"role": "runtime",
|
|
4054
|
-
"version": "1.
|
|
4019
|
+
"version": "1.16.0",
|
|
4055
4020
|
"title": "Windsurf",
|
|
4056
4021
|
"description": "Windsurf (Codeium) — workspace workflow artifact layout for slash commands; Cascade native hooks.json blocking hook bus (pre_write_code, pre_run_command); tier-2 support.",
|
|
4057
4022
|
"tier": "core",
|
|
@@ -4136,14 +4101,15 @@ const capabilities = {
|
|
|
4136
4101
|
"skipSharedHooksInstall": true,
|
|
4137
4102
|
"legacyDevinSkillsCleanup": true,
|
|
4138
4103
|
"installsCommandBodiesForWorkflowDelegation": true,
|
|
4139
|
-
"verificationStyle": "windsurf-workflows"
|
|
4104
|
+
"verificationStyle": "windsurf-workflows",
|
|
4105
|
+
"contentRewriteProfile": "slash-lookahead-nested-own-devin"
|
|
4140
4106
|
}
|
|
4141
4107
|
}
|
|
4142
4108
|
},
|
|
4143
4109
|
"zcode": {
|
|
4144
4110
|
"id": "zcode",
|
|
4145
4111
|
"role": "runtime",
|
|
4146
|
-
"version": "1.
|
|
4112
|
+
"version": "1.16.0",
|
|
4147
4113
|
"title": "ZCode",
|
|
4148
4114
|
"description": "ZCode (Z.ai) — desktop Agentic Development Environment for GLM-5.2; Claude-shaped nested skills at ~/.zcode/skills/<name>/SKILL.md, slash commands, named subagents, native MCP; declarative plugin surface; profile-marker install; tier-2 community support.",
|
|
4149
4115
|
"tier": "core",
|
|
@@ -4248,7 +4214,8 @@ const capabilities = {
|
|
|
4248
4214
|
"effortSurface": "undocumented"
|
|
4249
4215
|
},
|
|
4250
4216
|
"hostBehaviors": {
|
|
4251
|
-
"skipSharedHooksInstall": true
|
|
4217
|
+
"skipSharedHooksInstall": true,
|
|
4218
|
+
"contentRewriteProfile": "slash-tilde-restore"
|
|
4252
4219
|
}
|
|
4253
4220
|
}
|
|
4254
4221
|
}
|
|
@@ -4600,23 +4567,7 @@ const byLoopPoint = {
|
|
|
4600
4567
|
},
|
|
4601
4568
|
"execute:wave:pre": {
|
|
4602
4569
|
"steps": [],
|
|
4603
|
-
"contributions": [
|
|
4604
|
-
{
|
|
4605
|
-
"capId": "claude-orchestration",
|
|
4606
|
-
"point": "execute:wave:pre",
|
|
4607
|
-
"into": "executor",
|
|
4608
|
-
"fragment": {
|
|
4609
|
-
"path": "fragments/execute-wave-pre.md",
|
|
4610
|
-
"inline": "# Claude orchestration — Workflow execution backend (BETA)\n\n> Injected at `execute:wave:pre` `into: executor` only when\n> `claude_orchestration.enabled` is true. Default-off; `onError: skip`.\n\n## When this contribution is active\n\nThe Claude orchestration capability is **default-off and BETA**. It activates only\nwhen ALL of the following hold:\n\n1. `claude_orchestration.enabled` is `true` in `.planning/config.json`, AND\n2. the active runtime is **Claude Code** (the Workflow tool is Claude / Agent\n SDK-specific), AND\n3. `claude_orchestration.execution_backend` resolves to `workflow` — either\n explicitly, or via `auto` — **and** the Agent SDK version is\n `>= claude_orchestration.min_agent_sdk_version` (default `0.3.149`). The SDK\n floor applies in both `auto` and `workflow` modes (fail-closed: a pre-release\n or older SDK never activates the preview backend).\n\nDetection is fail-closed: any miss degrades to **inline, manual, one-agent-per-\nmessage dispatch** — exactly today's behaviour. On a non-Claude runtime this\ncontribution is a no-op.\n\n## Why `execute:wave:pre` (not `execute:wave:post`)\n\nThis is a **dispatch-backend selector** — it decides HOW a wave's executor agents\nare spawned. That decision has to be made BEFORE the wave's `Agent()` calls in\n`execute-phase.md` step 3, not after the wave has already finished (#2285). The\ncapability previously registered at `execute:wave:post`, which fires only after\nworktree merge/post-merge tests/tracking updates — by then the wave was already\ndispatched inline, so the contribution was structurally unable to change how\ndispatch happened. This fragment is injected at the point that actually precedes\ndispatch.\n\n## What the orchestrator does when the Workflow backend is active\n\nBefore spawning executor agents for the current wave (execute-phase.md step 3),\nresolve the dispatch backend through the single composed CLI seam:\n\n```bash\ngsd-tools claude-orchestration resolve-wave-dispatch \\\n --waves \"$WAVE_MANIFEST_PATH\" --run-id \"$PHASE_RUN_ID\" \\\n --runtime \"$RUNTIME\" \\\n --phase-dir \"$PHASE_DIR\" --raw\n```\n\n`--agent-sdk-version` is no longer passed here (#2590). The router resolves the\ninstalled Agent SDK version itself; see **Agent SDK version** below. The former\n`${AGENT_SDK_VERSION:+--agent-sdk-version \"$AGENT_SDK_VERSION\"}` line was also\n**shell-dependent**: zsh does not word-split unquoted parameter expansions, so it\ncollapsed to a SINGLE argv element there, `argValue()` never matched, and the run\nfailed into `agent_sdk_version_unknown` — indistinguishable from genuinely\nunknown. Pass `--agent-sdk-version <ver>` explicitly only to pin a version.\n\nThis composes `detectWorkflowBackend` (the gate ladder above) with\n`emitWorkflowScript` (the wave→plan mapping below) in ONE call — the pure\nfunction backing it is `resolveWaveDispatch` in\n`gsd-core/bin/lib/claude-orchestration.cjs`. Response shape:\n`{ backend: 'inline'|'workflow', reason, script?, summary? }`.\n\n### Manifest construction (`$WAVE_MANIFEST_PATH`, `$PHASE_RUN_ID`, `$PHASE_DIR`)\n\nThese are NOT pre-existing execute-phase.md variables — the orchestrator builds\nthem at this step, from data it already has in-context from `discover_and_group_plans`\n(the `PLAN_INDEX` JSON) and step 2.5 (the per-plan `USE_WORKTREES_FOR_PLAN` decision):\n\n1. **`$PHASE_DIR`** — reuse `{phase_dir}` from the `INIT` bundle (already loaded\n in the `initialize` step). No new value needed.\n\n2. **`$PHASE_RUN_ID`** — a stable identifier for THIS phase-execution attempt, so\n `resumeFromRunId` can resume an interrupted run without re-dispatching plans\n the Workflow tool already completed. Construct it deterministically —\n `execute-{phase_number}-{phase_slug}` — from `INIT`'s `phase_number`/`phase_slug`\n (both are already validated identifiers used elsewhere in this workflow, so\n they satisfy `emitWorkflowScript`'s `isScriptableIdentifier` check). Do NOT\n mint a new random id per wave — the SAME `$PHASE_RUN_ID` is reused for every\n wave in the phase so the Workflow tool can correctly track cross-wave resume\n state.\n\n3. **`$WAVE_MANIFEST_PATH`** — a fresh temp file for THIS wave's manifest (one\n wave = one `waves` array with a single entry, matching the wave-by-wave\n dispatch loop; do not batch multiple waves into one manifest — waves are\n dispatched in wave order, not all at once):\n\n ```bash\n WAVE_MANIFEST_PATH=$(mktemp \"${TMPDIR:-/tmp}/gsd-wave-dispatch-XXXXXX\") && mv \"$WAVE_MANIFEST_PATH\" \"$WAVE_MANIFEST_PATH.json\" && WAVE_MANIFEST_PATH=\"$WAVE_MANIFEST_PATH.json\"\n ```\n\n Then **use the Write tool** (not a bash/jq pipeline — the orchestrator already\n has every field parsed in-context) to write the manifest JSON to\n `$WAVE_MANIFEST_PATH`:\n\n ```json\n {\n \"waves\": [\n {\n \"id\": \"wave-{N}\",\n \"plans\": [\n {\n \"id\": \"{plan_id}\",\n \"brief\": \"{the SAME <objective>...<success_criteria> prompt block step 3 builds for this plan's inline Agent() call}\",\n \"files_modified\": [\"{from PLAN_INDEX.plans[].files_modified for this plan}\"],\n \"use_worktree\": {true unless step 2.5 set USE_WORKTREES_FOR_PLAN=false for this plan}\n }\n ]\n }\n ]\n }\n ```\n\n - **`id`** — the plan id from `PLAN_INDEX`, e.g. `\"01-01\"`.\n - **`brief`** — MUST carry the same task content as step 3's inline `Agent()`\n prompt (the `<objective>`/`<execution_context>`/`<required_reading>`/\n `<success_criteria>` block, with `{plan_number}`/`{phase_number}`/\n `{phase_name}` substituted) — a short summary here would NOT reproduce\n step 3's behavior and would violate the \"identical artifacts\" contract.\n - **`files_modified`** — copy verbatim from the plan's `PLAN_INDEX` entry.\n - **`use_worktree`** — `true` for every plan UNLESS step 2.5's per-plan\n worktree gate (`execute-phase/steps/per-plan-worktree-gate.md`) set\n `USE_WORKTREES_FOR_PLAN=false` for that plan (submodule-touching plan, or\n project-level `USE_WORKTREES=false`) — in which case pass `false` here so\n `emitWorkflowScript` omits `isolation: \"worktree\"` for that plan (#2772 /\n #2285 finding 1). **Never** hardcode `true` — that would force worktree\n isolation on a plan the inline path explicitly keeps out of worktrees.\n\n4. **`$AGENT_SDK_VERSION`** — no longer built here; the router resolves it.\n\n**Agent SDK version:** the orchestrator has no *bash-computable* way to\nintrospect the live Agent SDK version — but the router runs in Node, so it\nresolves the version itself (#2590), in this order:\n\n1. an explicit `--agent-sdk-version <ver>` (pin a version),\n2. `GSD_AGENT_SDK_VERSION`,\n3. the **installed** `@anthropic-ai/claude-agent-sdk` package version, read from\n its `package.json` on disk by walking `node_modules` up the tree. (Read\n directly rather than via `require.resolve`: the SDK's `exports` map does not\n expose `./package.json`, so `require.resolve` throws\n `ERR_PACKAGE_PATH_NOT_EXPORTED`.)\n\nPreviously nothing computed this at all, so gate 5 returned\n`agent_sdk_version_unknown` on **every** automated run and the Workflow backend\ncould never activate — while `gsd-tools capability state` still reported the\ncapability `active: true`. Fail-closed is preserved: when no version can be\nresolved, gate 5 still declines to `inline`. What changed is that a resolvable\nversion is now actually found, so a genuinely-too-old SDK reports\n`agent_sdk_version_below_floor` — the truthful reason — instead of `unknown`.\n\n**If `backend == \"workflow\"`:** run the emitted `script` via the Workflow tool\nfor THIS wave instead of the per-message `Agent()` loop in step 3. The script\ncomposes the SAME `gsd-executor` agent type the inline path uses, with\nworktree isolation applied PER PLAN from the manifest's `use_worktree` field\n(see `emitWorkflowScript`):\n\n- **waves → one or more sequential `parallel()` barriers** — each wave is a\n barrier group; when plans within a wave share `files_modified`, they are split\n into separate sequential stages within that wave's barrier.\n- **plans → `agent(brief, { agentType: 'gsd-executor', isolation: 'worktree' })`**\n when `use_worktree` is not `false`, or `agent(brief, { agentType: 'gsd-executor' })`\n (no isolation) when it is — so the produced `SUMMARY.md` and commits are\n identical to inline dispatch, INCLUDING the inline path's submodule safety\n gate (#2772 / #2285 finding 1).\n- **`files_modified` overlap → separate sequential stages** — the same overlap\n rule execute-phase already applies inline (step 1 of the wave loop).\n- **`resumeFromRunId`** — **pass `summary.resumeRunId` as the Workflow tool's\n `resumeFromRunId` INPUT when you invoke the tool.** It is a tool parameter,\n not a script function; the script deliberately does not call it (#2590 — doing\n so threw \"resumeFromRunId is not defined\" and rejected the entire script).\n Omitting it from the tool invocation silently regresses phase-resume to a\n no-op: an interrupted phase re-runs completed plans.\n\n### After the run: manifest bridge into the merge chain (#3302)\n\nThe single Workflow tool call replaces step 3's per-plan `Agent()` loop — which also\nmeans step 3's manifest bookkeeping (creation + per-agent recording) does NOT happen on\nthis path. The orchestrator MUST bridge the run's per-agent results into the SAME\nmanifest-scoped merge chain inline dispatch uses, before steps 4–5.8, which then run\nunchanged:\n\n1. **Create the manifest BEFORE invoking the tool** (this is step 3's creation block,\n which this path skips). When ANY plan in the wave has `use_worktree` not `false`:\n\n ```bash\n if [ -z \"${WAVE_WORKTREE_MANIFEST:-}\" ]; then\n M=$(mktemp \"${TMPDIR:-/tmp}/gsd-worktree-wave-XXXXXX\") && mv \"$M\" \"$M.json\" && WAVE_WORKTREE_MANIFEST=\"$M.json\" || exit 1 # XXXXXX must be path-final on BSD/macOS (#1520)\n # Persist the dispatch-time orchestrator worktree root so wave-cleanup pins back\n # to the orchestrator's OWN worktree (#630), exactly as inline dispatch does.\n ORCH_ROOT=$(git rev-parse --show-toplevel)\n ORCH_ROOT=\"$ORCH_ROOT\" MANIFEST=\"$WAVE_WORKTREE_MANIFEST\" node -e 'const fs=require(\"fs\");fs.writeFileSync(process.env.MANIFEST,JSON.stringify({orchestrator_root:process.env.ORCH_ROOT||null,worktrees:[]})+\"\\n\")'\n export WAVE_WORKTREE_MANIFEST\n fi\n ```\n\n2. **Invoke the Workflow tool with the emitted script and\n `resumeFromRunId: summary.resumeRunId`.** The script top-level `return`s one entry\n per dispatched plan: `{ plan, expects_worktree, metadata }`. `metadata` is that\n plan's executor `<worktree_metadata>` JSON (`{agent_id, worktree_path, branch,\n expected_base}` — captured by the executor itself per\n `agents/gsd-executor.md`), or `null` when the agent's result carried none\n (interrupted agent, resumed-from-cache plan, or a non-worktree plan).\n\n3. **Record every worktree plan** exactly as inline dispatch does at step 3's\n \"After each `Agent()` returns\" — one `worktree.record-agent` per returned entry\n with `expects_worktree: true` and complete metadata:\n\n ```bash\n gsd_run query worktree.record-agent --manifest \"$WAVE_WORKTREE_MANIFEST\" \\\n --agent-id \"<metadata.agent_id>\" --path \"<metadata.worktree_path>\" \\\n --branch \"<metadata.branch>\" --base \"<metadata.expected_base>\" \\\n --files \"<plan files_modified, space-separated>\" \\\n --deletions \"<plan files_deleted, space-separated>\"\n ```\n\n `--deletions` (#3003) carries the plan's declared `files_deleted` so a plan that scoped a file\n removal merges through `cleanup-wave` instead of being blocked. Unlike `--files` it is not\n advisory: omitting it leaves the deletions guard blocking on any deletion at all, so this\n dispatch path must pass it or plans declaring a removal fail to merge here while succeeding on\n the inline path.\n\n The verb's write-strict validation applies as inline: on a non-zero exit or any\n missing field, stop and ask for recovery — do not append an under-populated entry.\n\n4. **HALT on uncapturable metadata — never a silently-empty manifest (#3302).**\n After recording, the manifest must hold one entry per `expects_worktree: true`\n outcome (`summary.worktreePlans` from `resolve-wave-dispatch` is the expected\n count). Any shortfall — a `null` `metadata`, a missing/empty field, or a count\n mismatch — means commits are stranded on their `worktree-wf_*` branches and\n `worktree.cleanup-wave` would merge nothing while the phase looks green. STOP the\n phase with the failing plan id and the recovery hint below; do NOT run\n `worktree.cleanup-wave` and do NOT proceed to step 4.\n\n **Recovery hint:** the unmerged `worktree-wf_*` branch still holds the work. Recover\n the missing metadata from the run's per-agent result journal (`journal.jsonl` — one\n `{\"type\":\"result\",…}` line per agent — in the Workflow run's transcript dir), re-run\n `worktree.record-agent` by hand, then re-run cleanup. If the journal cannot be\n recovered either, merge the branch manually after review — never discard it.\n\n5. **Resume (`resumeFromRunId`).** Cached/resumed agents do not re-emit their final\n messages, so a previously-completed plan can return with `metadata: null`. Recover\n that plan's metadata from the ORIGINAL run's journal (same hint as above). If it\n cannot be recovered, fail loudly per rule 4 — a resumed run must never report\n success over silently-dropped agent work.\n\n6. **Non-worktree plans** (`expects_worktree: false` — `use_worktree: false` in the\n manifest): they ran without isolation; their commits are already on the main working\n tree. No record-agent entry, no manifest write.\n\nWith the manifest populated, steps 4–5.8 (wait/completion bookkeeping, step 5.5's\nmanifest-scoped `worktree.cleanup-wave`, post-merge gate, tracking update) run\nUNCHANGED — the Workflow backend replaces HOW agents are spawned and returns their\nmetadata; the merge chain itself is the inline path's own, now with real input.\n\n**If `backend == \"inline\"`** (any gate miss, or `resolve-wave-dispatch` itself\nunavailable/erroring): proceed to step 3's standard per-message `Agent()`\ndispatch — the default, byte-identical-to-today path. `onError: skip` on this\ncontribution means a `resolve-wave-dispatch` command failure is treated exactly\nlike an `inline` result, never as a fatal wave error.\n\n## Fallback contract\n\nDetection is fail-closed end-to-end: capability disabled, non-Claude runtime,\n`execution_backend:\"inline\"`, missing/incapable host descriptor, unknown or\nbelow-floor Agent SDK version, or an `emitWorkflowScript` failure on a malformed\nwave manifest — ANY of these degrades to `backend:\"inline\"` and execute-phase's\nstandard inline dispatch (step 3) runs unmodified. The Workflow backend never\npartially activates; the executor MUST NOT assume parallelism, a shared budget,\nor resume-from-run-id semantics when `backend == \"inline\"`.\n"
|
|
4611
|
-
},
|
|
4612
|
-
"produces": [],
|
|
4613
|
-
"consumes": [
|
|
4614
|
-
"PLAN.md"
|
|
4615
|
-
],
|
|
4616
|
-
"when": "claude_orchestration.enabled",
|
|
4617
|
-
"onError": "skip"
|
|
4618
|
-
}
|
|
4619
|
-
],
|
|
4570
|
+
"contributions": [],
|
|
4620
4571
|
"gates": []
|
|
4621
4572
|
},
|
|
4622
4573
|
"execute:wave:post": {
|
|
@@ -4680,7 +4631,7 @@ const byLoopPoint = {
|
|
|
4680
4631
|
"into": "verifier",
|
|
4681
4632
|
"fragment": {
|
|
4682
4633
|
"path": "fragments/capture-problems.md",
|
|
4683
|
-
"inline": "<!--\n MemPalace capability — contribution fragment.\n Rendered into the execute:wave:post verifier prompt when `mempalace.capture_artifacts` is true.\n Contributes DATA (capture instructions), not control flow. onError: skip — never fails a wave.\n-->\n### Capture problems → fixes (MemPalace)\n\n**Gate first.** Read `.planning/config.json`. If `mempalace.enabled` is not `true`, or `mempalace.capture_artifacts` is `false`, **skip this entire section** and let the wave complete unchanged. (This contribution is only injected when the capability is enabled; the `capture_artifacts` check lets you turn capture off without disabling the rest of the capability.)\n\nOtherwise — after verifying this wave, persist any *confirmed* problem→fix pairs into the palace so they are recalled in future phases. This is best-effort; if MemPalace is unreachable, skip silently — capture never fails a wave.\n\nFor each confirmed bug/issue resolved in this wave:\n\n1. **Resolve the wing** (`mempalace.wing`, else `project_code`, else project dir) and target `room: problems`.\n2. **Dedupe first.** Call `mempalace_check_duplicate` (interactive) before filing so re-runs don't create duplicate drawers.\n3. **File the drawer verbatim.** Store the problem statement and its fix as a drawer in `room: problems` — interactive: `mempalace_add_drawer`; headless: stage the artifact under the `problems/` folder and run `mempalace mine` (no `--room` flag — see [CLI reference](https://mempalaceofficial.com/reference/cli.html); room assignment is via `detect_room()` folder-path match per the [mining guide](https://mempalaceofficial.com/guide/mining.html); use the same staging pattern documented in `gsd-mempalace-capture` Step 3). Include provenance (`source_file`, phase id).\n4. **Mirror the KG fact** when `mempalace.mirror_kg` is on: add `(<bug>, fixed_by, <fix>)` with `valid_from` = the phase date via `mempalace_kg_add`.\n5. **Mode awareness** (`mempalace.memory_mode`). Under `augment` the fact is an *additive* mirror alongside `.planning/graphs/`. Under `kg_backend`/`replace` the palace is the *authoritative* store for the fact; GSD still writes `.planning/graphs/` through its normal graphify, so an unreachable palace never loses it.\n\nCaptures are idempotent: deterministic drawer IDs + `check_duplicate` mean re-running the wave re-files the same content without duplication. On any error, skip and let the wave complete normally.\n"
|
|
4634
|
+
"inline": "<!--\n MemPalace capability — contribution fragment.\n Rendered into the execute:wave:post verifier prompt when `mempalace.capture_artifacts` is true.\n Contributes DATA (capture instructions), not control flow. onError: skip — never fails a wave.\n-->\n### Capture problems → fixes (MemPalace)\n\n**Gate first.** Read `.planning/config.json`. If `mempalace.enabled` is not `true`, or `mempalace.capture_artifacts` is `false`, **skip this entire section** and let the wave complete unchanged. (This contribution is only injected when the capability is enabled; the `capture_artifacts` check lets you turn capture off without disabling the rest of the capability.)\n\nOtherwise — after verifying this wave, persist any *confirmed* problem→fix pairs into the palace so they are recalled in future phases. This is best-effort; if MemPalace is unreachable, skip silently — capture never fails a wave.\n\nFor each confirmed bug/issue resolved in this wave:\n\n1. **Resolve the wing** (`mempalace.wing`, else `project_code`, else project dir) and target `room: problems`.\n2. **Dedupe first.** Call `mempalace_check_duplicate` (interactive) before filing so re-runs don't create duplicate drawers.\n3. **File the drawer verbatim.** Store the problem statement and its fix as a drawer in `room: problems` — interactive: `mempalace_add_drawer`; headless: stage the artifact under the `problems/` folder and run `mempalace mine --daemon --background` (no `--room` flag; the background queue defers the write when another writer holds the palace lock, #4700 — see [CLI reference](https://mempalaceofficial.com/reference/cli.html); room assignment is via `detect_room()` folder-path match per the [mining guide](https://mempalaceofficial.com/guide/mining.html); use the same staging pattern documented in `gsd-mempalace-capture` Step 3). Include provenance (`source_file`, phase id).\n4. **Mirror the KG fact** when `mempalace.mirror_kg` is on: add `(<bug>, fixed_by, <fix>)` with `valid_from` = the phase date via `mempalace_kg_add`.\n5. **Mode awareness** (`mempalace.memory_mode`). Under `augment` the fact is an *additive* mirror alongside `.planning/graphs/`. Under `kg_backend`/`replace` the palace is the *authoritative* store for the fact; GSD still writes `.planning/graphs/` through its normal graphify, so an unreachable palace never loses it.\n\nCaptures are idempotent: deterministic drawer IDs + `check_duplicate` mean re-running the wave re-files the same content without duplication. On any error, skip and let the wave complete normally.\n"
|
|
4684
4635
|
},
|
|
4685
4636
|
"produces": [],
|
|
4686
4637
|
"consumes": [],
|
|
@@ -4942,9 +4893,6 @@ const configKeys = {
|
|
|
4942
4893
|
"external_job.submit_timeout_ms": "external-job",
|
|
4943
4894
|
"external_job.poll_timeout_ms": "external-job",
|
|
4944
4895
|
"workflow.post_planning_gaps": "gap-analysis",
|
|
4945
|
-
"review.models.gemini": "gemini",
|
|
4946
|
-
"review.max_prompt_tokens_per_reviewer.gemini": "gemini",
|
|
4947
|
-
"review.timeouts.gemini": "gemini",
|
|
4948
4896
|
"graphify.enabled": "graphify",
|
|
4949
4897
|
"intel.enabled": "intel",
|
|
4950
4898
|
"review.models.kimi-code": "kimi-code",
|
|
@@ -4993,7 +4941,8 @@ const configKeys = {
|
|
|
4993
4941
|
"workflow.tdd_mode": "tdd",
|
|
4994
4942
|
"workflow.ui_phase": "ui",
|
|
4995
4943
|
"workflow.ui_review": "ui",
|
|
4996
|
-
"workflow.ui_safety_gate": "ui"
|
|
4944
|
+
"workflow.ui_safety_gate": "ui",
|
|
4945
|
+
"workflow.ui_interaction_capture": "ui"
|
|
4997
4946
|
};
|
|
4998
4947
|
|
|
4999
4948
|
const configSchema = {
|
|
@@ -5159,7 +5108,7 @@ const configSchema = {
|
|
|
5159
5108
|
"owner": "drift",
|
|
5160
5109
|
"type": "number",
|
|
5161
5110
|
"default": 3,
|
|
5162
|
-
"description": "Minimum number of
|
|
5111
|
+
"description": "Minimum number of drift elements (new directories, barrel exports, migrations, routes, plus modified and deleted files inside mapped directories) before the codebase drift gate triggers a warn or auto-remap action."
|
|
5163
5112
|
},
|
|
5164
5113
|
"workflow.drift_action": {
|
|
5165
5114
|
"owner": "drift",
|
|
@@ -5175,13 +5124,13 @@ const configSchema = {
|
|
|
5175
5124
|
"owner": "drift",
|
|
5176
5125
|
"type": "boolean",
|
|
5177
5126
|
"default": true,
|
|
5178
|
-
"description": "Enable the drift gates at execute:wave:post. When enabled, the schema drift gate blocks verification if schema-relevant files changed during execution but no database push command was executed; the codebase drift gate (non-blocking) warns when
|
|
5127
|
+
"description": "Enable the drift gates at execute:wave:post. When enabled, the schema drift gate blocks verification if schema-relevant files changed during execution but no database push command was executed; the codebase drift gate (non-blocking) warns when drift elements exceed the drift_threshold."
|
|
5179
5128
|
},
|
|
5180
5129
|
"workflow.plan_drift_precheck": {
|
|
5181
5130
|
"owner": "drift",
|
|
5182
5131
|
"type": "boolean",
|
|
5183
5132
|
"default": true,
|
|
5184
|
-
"description": "Enable the non-blocking codebase drift pre-check at plan:pre, before /gsd:plan-phase spawns the planner. When enabled, a stale STRUCTURE.md (
|
|
5133
|
+
"description": "Enable the non-blocking codebase drift pre-check at plan:pre, before /gsd:plan-phase spawns the planner. When enabled, a stale STRUCTURE.md (drift elements exceeding drift_threshold) is surfaced up front as a warn-only advisory pointing to /gsd:map-codebase; it never blocks planning and never spawns the mapper agent. Separate from schema_drift_gate so autonomous/CI runs can silence the plan-time advisory while keeping the execute:wave:post gates enabled."
|
|
5185
5134
|
},
|
|
5186
5135
|
"workflow.context_drift_precheck": {
|
|
5187
5136
|
"owner": "drift",
|
|
@@ -5238,24 +5187,6 @@ const configSchema = {
|
|
|
5238
5187
|
"default": true,
|
|
5239
5188
|
"description": "Run the post-planning gap analysis report after plans are generated."
|
|
5240
5189
|
},
|
|
5241
|
-
"review.models.gemini": {
|
|
5242
|
-
"owner": "gemini",
|
|
5243
|
-
"type": "string",
|
|
5244
|
-
"default": "",
|
|
5245
|
-
"description": "Model passed to the Gemini reviewer lane."
|
|
5246
|
-
},
|
|
5247
|
-
"review.max_prompt_tokens_per_reviewer.gemini": {
|
|
5248
|
-
"owner": "gemini",
|
|
5249
|
-
"type": "number",
|
|
5250
|
-
"default": -1,
|
|
5251
|
-
"description": "Prompt-token budget for the Gemini reviewer lane. Unset is -1, a sentinel: 0 is a legitimate value meaning \"do not trim this lane\", so it cannot double as \"not configured\"."
|
|
5252
|
-
},
|
|
5253
|
-
"review.timeouts.gemini": {
|
|
5254
|
-
"owner": "gemini",
|
|
5255
|
-
"type": "number",
|
|
5256
|
-
"default": -1,
|
|
5257
|
-
"description": "Outer wall-clock timeout override (seconds) for the Gemini reviewer lane. Unset is -1, a sentinel: 0 or a negative number is also treated as unset (a timeout has no legitimate zero/negative value), so no second sentinel is needed. Falls back to the lane's built-in timeoutFloorMs when unset."
|
|
5258
|
-
},
|
|
5259
5190
|
"graphify.enabled": {
|
|
5260
5191
|
"owner": "graphify",
|
|
5261
5192
|
"type": "boolean",
|
|
@@ -5561,6 +5492,12 @@ const configSchema = {
|
|
|
5561
5492
|
"type": "boolean",
|
|
5562
5493
|
"default": true,
|
|
5563
5494
|
"description": "Block execution on unmet UI-SPEC contracts."
|
|
5495
|
+
},
|
|
5496
|
+
"workflow.ui_interaction_capture": {
|
|
5497
|
+
"owner": "ui",
|
|
5498
|
+
"type": "boolean",
|
|
5499
|
+
"default": false,
|
|
5500
|
+
"description": "Default-off. Let gsd-ui-auditor add post-interaction captures (hover, focus, open menus, filled forms) through the chrome-devtools CLI, driven from Bash — no MCP server and no tools: change (#4223). Requires an installed Chrome; when off, or when none resolves, the auditor's Playwright-only static capture is unchanged."
|
|
5564
5501
|
}
|
|
5565
5502
|
};
|
|
5566
5503
|
|
|
@@ -5568,7 +5505,7 @@ const runtimes = {
|
|
|
5568
5505
|
"antigravity": {
|
|
5569
5506
|
"id": "antigravity",
|
|
5570
5507
|
"role": "runtime",
|
|
5571
|
-
"version": "1.
|
|
5508
|
+
"version": "1.16.0",
|
|
5572
5509
|
"title": "Antigravity",
|
|
5573
5510
|
"description": "Google Antigravity IDE — config/settings home nested under ~/.gemini/antigravity (probed across 1.x and 2.x layouts); global skills/agents install under ~/.gemini/config, the dir AGY scans for global discovery (#3738); Gemini hook event dialect; flat skill layout; tier-1 support.",
|
|
5574
5511
|
"tier": "core",
|
|
@@ -5670,7 +5607,8 @@ const runtimes = {
|
|
|
5670
5607
|
"projectInstructionFile": "GEMINI.md",
|
|
5671
5608
|
"noPathRewrite": true,
|
|
5672
5609
|
"hookPathStyle": "raw",
|
|
5673
|
-
"globalDirResolver": "antigravity"
|
|
5610
|
+
"globalDirResolver": "antigravity",
|
|
5611
|
+
"contentRewriteProfile": "attribution-only"
|
|
5674
5612
|
}
|
|
5675
5613
|
},
|
|
5676
5614
|
"reviewer": {
|
|
@@ -5731,7 +5669,7 @@ const runtimes = {
|
|
|
5731
5669
|
"augment": {
|
|
5732
5670
|
"id": "augment",
|
|
5733
5671
|
"role": "runtime",
|
|
5734
|
-
"version": "1.
|
|
5672
|
+
"version": "1.16.0",
|
|
5735
5673
|
"title": "Augment Code",
|
|
5736
5674
|
"description": "Augment Code CLI — commands + nested-skill artifact layout; settings-json hook surface; Claude hook event dialect; tier-2 support.",
|
|
5737
5675
|
"tier": "core",
|
|
@@ -5818,7 +5756,8 @@ const runtimes = {
|
|
|
5818
5756
|
"extendedHookEvents": [],
|
|
5819
5757
|
"hostBehaviors": {
|
|
5820
5758
|
"commandBodyConverter": "convertClaudeToAugmentMarkdown",
|
|
5821
|
-
"mcpCompanion": "settings-json"
|
|
5759
|
+
"mcpCompanion": "settings-json",
|
|
5760
|
+
"contentRewriteProfile": "slash-lookahead-own-derived"
|
|
5822
5761
|
},
|
|
5823
5762
|
"hostIntegration": {
|
|
5824
5763
|
"embeddingMode": "declarative",
|
|
@@ -5845,7 +5784,7 @@ const runtimes = {
|
|
|
5845
5784
|
"claude": {
|
|
5846
5785
|
"id": "claude",
|
|
5847
5786
|
"role": "runtime",
|
|
5848
|
-
"version": "1.
|
|
5787
|
+
"version": "1.16.0",
|
|
5849
5788
|
"title": "Claude Code",
|
|
5850
5789
|
"description": "Anthropic Claude Code — primary development runtime; tier-1 support with full hook surface and skills-based global install.",
|
|
5851
5790
|
"tier": "core",
|
|
@@ -5958,7 +5897,14 @@ const runtimes = {
|
|
|
5958
5897
|
"skillsGlobalOnboarding": true,
|
|
5959
5898
|
"legacyCommandsGsdInstallMigration": true,
|
|
5960
5899
|
"legacyCommandsGsdUninstall": "global",
|
|
5961
|
-
"hyphenNameAgentBody": true
|
|
5900
|
+
"hyphenNameAgentBody": true,
|
|
5901
|
+
"skipCompactAgents": true,
|
|
5902
|
+
"omitBashRunnerOnWindows": true,
|
|
5903
|
+
"specRootSkillPass": true,
|
|
5904
|
+
"restoreAtRefTildeInAgents": true,
|
|
5905
|
+
"restoreAtRefTildeInSpecTree": true,
|
|
5906
|
+
"skipRuntimeDefaultsStamp": true,
|
|
5907
|
+
"contentRewriteProfile": "slash-tilde-restore"
|
|
5962
5908
|
}
|
|
5963
5909
|
},
|
|
5964
5910
|
"reviewer": {
|
|
@@ -6026,7 +5972,7 @@ const runtimes = {
|
|
|
6026
5972
|
"cline": {
|
|
6027
5973
|
"id": "cline",
|
|
6028
5974
|
"role": "runtime",
|
|
6029
|
-
"version": "1.
|
|
5975
|
+
"version": "1.16.0",
|
|
6030
5976
|
"title": "Cline",
|
|
6031
5977
|
"description": "Cline (VS Code extension) — global-only nested-skill layout; cline-rules hook surface (.clinerules); no hook events emitted; tier-2 support.",
|
|
6032
5978
|
"tier": "core",
|
|
@@ -6112,14 +6058,15 @@ const runtimes = {
|
|
|
6112
6058
|
"skipSharedHooksInstall": true,
|
|
6113
6059
|
"localTargetIsProjectRoot": true,
|
|
6114
6060
|
"clineRulesSurface": true,
|
|
6115
|
-
"localCommandsViaRules": true
|
|
6061
|
+
"localCommandsViaRules": true,
|
|
6062
|
+
"contentRewriteProfile": "slash-bare-own-tilde"
|
|
6116
6063
|
}
|
|
6117
6064
|
}
|
|
6118
6065
|
},
|
|
6119
6066
|
"codebuddy": {
|
|
6120
6067
|
"id": "codebuddy",
|
|
6121
6068
|
"role": "runtime",
|
|
6122
|
-
"version": "1.
|
|
6069
|
+
"version": "1.16.0",
|
|
6123
6070
|
"title": "CodeBuddy",
|
|
6124
6071
|
"description": "CodeBuddy (Tencent) — converted commands + skills artifact layout; settings-json hook surface; Claude hook event dialect; tier-2 support.",
|
|
6125
6072
|
"tier": "core",
|
|
@@ -6230,14 +6177,15 @@ const runtimes = {
|
|
|
6230
6177
|
"effortSurface": "undocumented"
|
|
6231
6178
|
},
|
|
6232
6179
|
"hostBehaviors": {
|
|
6233
|
-
"reportCommandsDir": true
|
|
6180
|
+
"reportCommandsDir": true,
|
|
6181
|
+
"contentRewriteProfile": "slash-bare-own-tilde-bare"
|
|
6234
6182
|
}
|
|
6235
6183
|
}
|
|
6236
6184
|
},
|
|
6237
6185
|
"codex": {
|
|
6238
6186
|
"id": "codex",
|
|
6239
6187
|
"role": "runtime",
|
|
6240
|
-
"version": "1.
|
|
6188
|
+
"version": "1.16.0",
|
|
6241
6189
|
"title": "OpenAI Codex CLI",
|
|
6242
6190
|
"description": "OpenAI Codex CLI — shell-var command style; per-agent sandbox tiers; config.toml + hooks.json hook surface; tier-1 support.",
|
|
6243
6191
|
"tier": "core",
|
|
@@ -6349,6 +6297,13 @@ const runtimes = {
|
|
|
6349
6297
|
"unsupportedFeatures": [
|
|
6350
6298
|
"context-warnings",
|
|
6351
6299
|
"phase-lifecycle-display"
|
|
6300
|
+
],
|
|
6301
|
+
"rewriteClaudeAtIncludes": true,
|
|
6302
|
+
"contentRewriteProfile": "slash-own-tilde",
|
|
6303
|
+
"bakesStaticAgentModel": true,
|
|
6304
|
+
"bakedAgentFileExtensions": [
|
|
6305
|
+
".toml",
|
|
6306
|
+
".md"
|
|
6352
6307
|
]
|
|
6353
6308
|
}
|
|
6354
6309
|
},
|
|
@@ -6417,7 +6372,7 @@ const runtimes = {
|
|
|
6417
6372
|
"copilot": {
|
|
6418
6373
|
"id": "copilot",
|
|
6419
6374
|
"role": "runtime",
|
|
6420
|
-
"version": "1.
|
|
6375
|
+
"version": "1.16.0",
|
|
6421
6376
|
"title": "GitHub Copilot",
|
|
6422
6377
|
"description": "GitHub Copilot (VS Code) — markdown config format; copilot-inline hook surface; no hook events emitted; flat skill nesting (unconfirmed recursive loader); tier-2 support.",
|
|
6423
6378
|
"tier": "core",
|
|
@@ -6510,14 +6465,15 @@ const runtimes = {
|
|
|
6510
6465
|
"reapplyCommand": "/gsd-update --reapply",
|
|
6511
6466
|
"agentFileExtension": ".agent.md",
|
|
6512
6467
|
"skipSharedHooksInstall": true,
|
|
6513
|
-
"noPathRewrite": true
|
|
6468
|
+
"noPathRewrite": true,
|
|
6469
|
+
"contentRewriteProfile": "attribution-only"
|
|
6514
6470
|
}
|
|
6515
6471
|
}
|
|
6516
6472
|
},
|
|
6517
6473
|
"cursor": {
|
|
6518
6474
|
"id": "cursor",
|
|
6519
6475
|
"role": "runtime",
|
|
6520
|
-
"version": "1.
|
|
6476
|
+
"version": "1.16.0",
|
|
6521
6477
|
"title": "Cursor",
|
|
6522
6478
|
"description": "Cursor IDE — skills-only workflow surface; hooks.json surface; Claude hook event dialect; recursive skill loader (flat nesting); tier-2 support.",
|
|
6523
6479
|
"tier": "core",
|
|
@@ -6628,7 +6584,8 @@ const runtimes = {
|
|
|
6628
6584
|
"stop",
|
|
6629
6585
|
"subagentStart",
|
|
6630
6586
|
"subagentStop"
|
|
6631
|
-
]
|
|
6587
|
+
],
|
|
6588
|
+
"contentRewriteProfile": "slash-lookahead-own-tilde"
|
|
6632
6589
|
}
|
|
6633
6590
|
},
|
|
6634
6591
|
"reviewer": {
|
|
@@ -6686,7 +6643,7 @@ const runtimes = {
|
|
|
6686
6643
|
"hermes": {
|
|
6687
6644
|
"id": "hermes",
|
|
6688
6645
|
"role": "runtime",
|
|
6689
|
-
"version": "1.
|
|
6646
|
+
"version": "1.16.0",
|
|
6690
6647
|
"title": "Hermes Agent",
|
|
6691
6648
|
"description": "Hermes Agent (NousResearch) — skills nest under skills/gsd/ category bucket; nested skill layout; settings-json hook surface; Claude hook event dialect; tier-2 support.",
|
|
6692
6649
|
"tier": "core",
|
|
@@ -6771,7 +6728,11 @@ const runtimes = {
|
|
|
6771
6728
|
"reapplyCommand": "gsd-update --reapply (mention the skill name)",
|
|
6772
6729
|
"legacyCommandsGsdInstallMigration": true,
|
|
6773
6730
|
"legacyCommandsGsdUninstall": true,
|
|
6774
|
-
"hyphenNameAgentBody": true
|
|
6731
|
+
"hyphenNameAgentBody": true,
|
|
6732
|
+
"legacyFlatSkillsCleanup": true,
|
|
6733
|
+
"bareStemSkillsCleanup": true,
|
|
6734
|
+
"categoryContainerCleanup": true,
|
|
6735
|
+
"contentRewriteProfile": "branded-lookahead-own-derived"
|
|
6775
6736
|
},
|
|
6776
6737
|
"hostIntegration": {
|
|
6777
6738
|
"embeddingMode": "imperative",
|
|
@@ -6798,7 +6759,7 @@ const runtimes = {
|
|
|
6798
6759
|
"kilo": {
|
|
6799
6760
|
"id": "kilo",
|
|
6800
6761
|
"role": "runtime",
|
|
6801
|
-
"version": "1.
|
|
6762
|
+
"version": "1.16.0",
|
|
6802
6763
|
"title": "Kilo Code",
|
|
6803
6764
|
"description": "Kilo Code — XDG-based config dir; global skills at ~/.kilo/skills (separate from XDG config); flat command/ + skills artifact layout; no lifecycle hook registration; tier-2 support.",
|
|
6804
6765
|
"tier": "core",
|
|
@@ -6921,14 +6882,18 @@ const runtimes = {
|
|
|
6921
6882
|
"file": "gsd-core.js",
|
|
6922
6883
|
"source": ".kilo/plugins/gsd-core.js"
|
|
6923
6884
|
},
|
|
6924
|
-
"skipUpdateBannerCommand": true
|
|
6885
|
+
"skipUpdateBannerCommand": true,
|
|
6886
|
+
"bakesStaticAgentModel": true,
|
|
6887
|
+
"bakedAgentFileExtensions": [
|
|
6888
|
+
".md"
|
|
6889
|
+
]
|
|
6925
6890
|
}
|
|
6926
6891
|
}
|
|
6927
6892
|
},
|
|
6928
6893
|
"kimi": {
|
|
6929
6894
|
"id": "kimi",
|
|
6930
6895
|
"role": "runtime",
|
|
6931
|
-
"version": "1.
|
|
6896
|
+
"version": "1.16.0",
|
|
6932
6897
|
"title": "Kimi CLI",
|
|
6933
6898
|
"description": "Kimi CLI (Moonshot AI) — generic agents root at ~/.config/agents; skills + kimi-agents artifact layout; native config.toml [[hooks]] bus at ~/.kimi/config.toml; background dispatch; tier-2 support.",
|
|
6934
6899
|
"tier": "core",
|
|
@@ -7025,14 +6990,16 @@ const runtimes = {
|
|
|
7025
6990
|
"agentManifestStyle": "kimi-nested",
|
|
7026
6991
|
"doneBannerStyle": "kimi-agent-file",
|
|
7027
6992
|
"skipSharedHooksInstall": true,
|
|
7028
|
-
"noPathRewrite": true
|
|
6993
|
+
"noPathRewrite": true,
|
|
6994
|
+
"requiresSubagentPair": true,
|
|
6995
|
+
"contentRewriteProfile": "slash-bare"
|
|
7029
6996
|
}
|
|
7030
6997
|
}
|
|
7031
6998
|
},
|
|
7032
6999
|
"kimi-code": {
|
|
7033
7000
|
"id": "kimi-code",
|
|
7034
7001
|
"role": "runtime",
|
|
7035
|
-
"version": "1.
|
|
7002
|
+
"version": "1.16.0",
|
|
7036
7003
|
"title": "Kimi Code CLI",
|
|
7037
7004
|
"description": "Kimi Code CLI (Moonshot AI, Node) — Agent Skills auto-discovered at ~/.kimi-code/skills; global AGENTS.md at ~/.kimi-code/AGENTS.md; native config.toml + [[hooks]] bus; three built-in subagents (coder/explore/plan), NO custom named subagents; background dispatch; tier-2 support. Distinct from Python kimi-cli (the 'kimi' capability) per ADR-1239 EoS — Kimi Code cannot dispatch named subagents so the kimi-agents YAML layout does NOT apply; persona injection rides the existing ${AGENT_SKILLS_*} workflow fallback. Install-layout, agent-install-check, and install-time decision (kimi vs kimi-code) land in follow-up PRs; this descriptor is the EoS foundation.",
|
|
7038
7005
|
"tier": "core",
|
|
@@ -7139,7 +7106,8 @@ const runtimes = {
|
|
|
7139
7106
|
"agentManifestStyle": "none",
|
|
7140
7107
|
"doneBannerStyle": "kimi-code",
|
|
7141
7108
|
"skipSharedHooksInstall": true,
|
|
7142
|
-
"namedSubagentsSupported": false
|
|
7109
|
+
"namedSubagentsSupported": false,
|
|
7110
|
+
"reclaimsKimiLegacyHooksRoot": true
|
|
7143
7111
|
}
|
|
7144
7112
|
},
|
|
7145
7113
|
"reviewer": {
|
|
@@ -7199,7 +7167,7 @@ const runtimes = {
|
|
|
7199
7167
|
"opencode": {
|
|
7200
7168
|
"id": "opencode",
|
|
7201
7169
|
"role": "runtime",
|
|
7202
|
-
"version": "1.
|
|
7170
|
+
"version": "1.16.0",
|
|
7203
7171
|
"title": "OpenCode",
|
|
7204
7172
|
"description": "OpenCode — XDG-based config dir; flat commands/ + skills artifact layout; settings-json config format; no lifecycle hook registration; tier-2 support.",
|
|
7205
7173
|
"tier": "core",
|
|
@@ -7328,7 +7296,11 @@ const runtimes = {
|
|
|
7328
7296
|
"skipHomePrefixSubstitution": true,
|
|
7329
7297
|
"skipSettingsUi": true,
|
|
7330
7298
|
"skipUpdateBannerCommand": true,
|
|
7331
|
-
"
|
|
7299
|
+
"opencodePathPrefix": true,
|
|
7300
|
+
"bakesStaticAgentModel": true,
|
|
7301
|
+
"bakedAgentFileExtensions": [
|
|
7302
|
+
".md"
|
|
7303
|
+
]
|
|
7332
7304
|
}
|
|
7333
7305
|
},
|
|
7334
7306
|
"reviewer": {
|
|
@@ -7394,7 +7366,7 @@ const runtimes = {
|
|
|
7394
7366
|
"pi": {
|
|
7395
7367
|
"id": "pi",
|
|
7396
7368
|
"role": "runtime",
|
|
7397
|
-
"version": "1.
|
|
7369
|
+
"version": "1.16.0",
|
|
7398
7370
|
"title": "pi",
|
|
7399
7371
|
"description": "pi (pi.dev) — bun-runtime programmatic-CLI; TS ExtensionAPI (registerCommand/registerTool/registerProvider/pi.on); single native-extension file at ~/.pi/agent/extensions/gsd.js (.js, not .cjs — pi's extension auto-discovery accepts only .ts/.js, #2470); no shared-settings hook surface; tier-2 support.",
|
|
7400
7372
|
"tier": "core",
|
|
@@ -7464,7 +7436,7 @@ const runtimes = {
|
|
|
7464
7436
|
"qwen": {
|
|
7465
7437
|
"id": "qwen",
|
|
7466
7438
|
"role": "runtime",
|
|
7467
|
-
"version": "1.
|
|
7439
|
+
"version": "1.16.0",
|
|
7468
7440
|
"title": "Qwen Code",
|
|
7469
7441
|
"description": "Qwen Code (Alibaba) — nested-skill artifact layout; settings-json hook surface; Claude hook event dialect; tier-2 support.",
|
|
7470
7442
|
"tier": "core",
|
|
@@ -7568,7 +7540,8 @@ const runtimes = {
|
|
|
7568
7540
|
"legacyCommandsGsdCleanup": true,
|
|
7569
7541
|
"legacyCommandsGsdInstallMigration": true,
|
|
7570
7542
|
"legacyCommandsGsdUninstall": true,
|
|
7571
|
-
"hyphenNameAgentBody": true
|
|
7543
|
+
"hyphenNameAgentBody": true,
|
|
7544
|
+
"contentRewriteProfile": "branded-lookahead-own-derived"
|
|
7572
7545
|
}
|
|
7573
7546
|
},
|
|
7574
7547
|
"reviewer": {
|
|
@@ -7614,7 +7587,7 @@ const runtimes = {
|
|
|
7614
7587
|
"trae": {
|
|
7615
7588
|
"id": "trae",
|
|
7616
7589
|
"role": "runtime",
|
|
7617
|
-
"version": "1.
|
|
7590
|
+
"version": "1.16.0",
|
|
7618
7591
|
"title": "Trae IDE",
|
|
7619
7592
|
"description": "Trae IDE — nested-skill artifact layout; no hook surface (profile-marker-only config); tier-2 support.",
|
|
7620
7593
|
"tier": "core",
|
|
@@ -7705,14 +7678,15 @@ const runtimes = {
|
|
|
7705
7678
|
"hostBehaviors": {
|
|
7706
7679
|
"skipSharedHooksInstall": true,
|
|
7707
7680
|
"soloStageMetadata": "workflow",
|
|
7708
|
-
"projectInstructionFile": ".trae/rules/rules.md"
|
|
7681
|
+
"projectInstructionFile": ".trae/rules/rules.md",
|
|
7682
|
+
"contentRewriteProfile": "slash-bare-own-derived"
|
|
7709
7683
|
}
|
|
7710
7684
|
}
|
|
7711
7685
|
},
|
|
7712
7686
|
"vscode": {
|
|
7713
7687
|
"id": "vscode",
|
|
7714
7688
|
"role": "runtime",
|
|
7715
|
-
"version": "1.
|
|
7689
|
+
"version": "1.16.0",
|
|
7716
7690
|
"title": "VS Code",
|
|
7717
7691
|
"description": "VS Code — Marketplace/VSIX extension; no file-projected config directory; IDE-profile reference host (active vscode.lm model, engine-owned hook bus, sandboxed globalState/workspaceState stateIO).",
|
|
7718
7692
|
"tier": "core",
|
|
@@ -7770,7 +7744,7 @@ const runtimes = {
|
|
|
7770
7744
|
"windsurf": {
|
|
7771
7745
|
"id": "windsurf",
|
|
7772
7746
|
"role": "runtime",
|
|
7773
|
-
"version": "1.
|
|
7747
|
+
"version": "1.16.0",
|
|
7774
7748
|
"title": "Windsurf",
|
|
7775
7749
|
"description": "Windsurf (Codeium) — workspace workflow artifact layout for slash commands; Cascade native hooks.json blocking hook bus (pre_write_code, pre_run_command); tier-2 support.",
|
|
7776
7750
|
"tier": "core",
|
|
@@ -7855,14 +7829,15 @@ const runtimes = {
|
|
|
7855
7829
|
"skipSharedHooksInstall": true,
|
|
7856
7830
|
"legacyDevinSkillsCleanup": true,
|
|
7857
7831
|
"installsCommandBodiesForWorkflowDelegation": true,
|
|
7858
|
-
"verificationStyle": "windsurf-workflows"
|
|
7832
|
+
"verificationStyle": "windsurf-workflows",
|
|
7833
|
+
"contentRewriteProfile": "slash-lookahead-nested-own-devin"
|
|
7859
7834
|
}
|
|
7860
7835
|
}
|
|
7861
7836
|
},
|
|
7862
7837
|
"zcode": {
|
|
7863
7838
|
"id": "zcode",
|
|
7864
7839
|
"role": "runtime",
|
|
7865
|
-
"version": "1.
|
|
7840
|
+
"version": "1.16.0",
|
|
7866
7841
|
"title": "ZCode",
|
|
7867
7842
|
"description": "ZCode (Z.ai) — desktop Agentic Development Environment for GLM-5.2; Claude-shaped nested skills at ~/.zcode/skills/<name>/SKILL.md, slash commands, named subagents, native MCP; declarative plugin surface; profile-marker install; tier-2 community support.",
|
|
7868
7843
|
"tier": "core",
|
|
@@ -7967,7 +7942,8 @@ const runtimes = {
|
|
|
7967
7942
|
"effortSurface": "undocumented"
|
|
7968
7943
|
},
|
|
7969
7944
|
"hostBehaviors": {
|
|
7970
|
-
"skipSharedHooksInstall": true
|
|
7945
|
+
"skipSharedHooksInstall": true,
|
|
7946
|
+
"contentRewriteProfile": "slash-tilde-restore"
|
|
7971
7947
|
}
|
|
7972
7948
|
}
|
|
7973
7949
|
}
|
|
@@ -8145,7 +8121,6 @@ const _requiresGraph = {
|
|
|
8145
8121
|
"drift": [],
|
|
8146
8122
|
"external-job": [],
|
|
8147
8123
|
"gap-analysis": [],
|
|
8148
|
-
"gemini": [],
|
|
8149
8124
|
"graphify": [],
|
|
8150
8125
|
"hermes": [],
|
|
8151
8126
|
"intel": [],
|