* docs: finish trust-bug fixes in user guide and commands Correct load-bearing defects in the v1.36.0 docs corpus so readers stop acting on wrong defaults and stale exhaustiveness claims. - README.md: drop "Complete feature"/"Every command"/"All 18 agents" exhaustiveness claims; replace version-pinned "What's new in v1.32" bullet with a CHANGELOG pointer. - CONFIGURATION.md: fix `claude_md_path` default (null/none -> `./CLAUDE.md`) in both Full Schema and core settings table; correct `workflow.tdd_mode` provenance from "Added in v1.37" to "Added in v1.36". - USER-GUIDE.md: fix `workflow.discuss_mode` default (`standard` -> `discuss`) in the workflow-toggles table AND in the abbreviated Full Schema JSON block above it; align the Options cell with the shipped enum. - COMMANDS.md: drop "Complete command syntax" subtitle overclaim to match the README posture. - AGENTS.md: weaken "All 21 specialized agents" header to reflect that the `agents/` filesystem is authoritative (shipped roster is 31). Part 1 of a stacked docs refresh series (PR 1/4). * docs: refresh shipped surface coverage for v1.36 Close the v1.36.0 shipped-surface gaps in the docs corpus. - COMMANDS.md: add /gsd-graphify section (build/query/status/diff) and its config gate; expand /gsd-quick with --validate flag and list/ status/resume subcommands; expand /gsd-thread with list --open, list --resolved, close <slug>, status <slug>. - CLI-TOOLS.md: replace the hardcoded "15 domain modules" count with a pointer to the Module Architecture table; add a graphify verb-family section (build/query/status/diff/snapshot); add Graphify and Learnings rows to the Module Architecture table. - FEATURES.md: add TOC entries for #116 TDD Pipeline Mode and #117 Knowledge Graph Integration; add the #117 body with REQ-GRAPH-01..05. - CONFIGURATION.md: move security_enforcement / security_asvs_level / security_block_on from root into `workflow.*` in Full Schema to match templates/config.json and the gsd-sdk runtime reads; update Security Settings table to use the workflow.* prefix; add planning.sub_repos to Full Schema and description table; add a Graphify Settings section documenting graphify.enabled and graphify.build_timeout. Note: VALID_CONFIG_KEYS in bin/lib/config.cjs does not yet include workflow.security_* or planning.sub_repos, so config-set currently rejects them. That is a pre-existing validator gap that this PR does not attempt to fix; the docs now correctly describe where these keys live per the shipped template and runtime reads. Part 2 of a stacked docs refresh series (PR 2/5), based on PR 1. * docs: make inventory authoritative and reconcile architecture Upgrade docs/INVENTORY.md from "complete for agents, selective for others" to authoritative across all six shipped-surface families, and reconcile docs/ARCHITECTURE.md against the new inventory so the PR that introduces INVENTORY does not also introduce an INVENTORY/ARCHITECTURE contradiction. - docs/AGENTS.md: weaken "21 specialized agents" header to 21 primary + 10 advanced (31 shipped); add new "Advanced and Specialized Agents" section with concise role cards for the 10 previously-omitted shipped agents (pattern-mapper, debug-session-manager, code-reviewer, code-fixer, ai-researcher, domain-researcher, eval-planner, eval-auditor, framework-selector, intel-updater); footnote the Agent Tool Permissions Summary as primary-agents-only so it no longer misleads. - docs/INVENTORY.md (rewritten to be authoritative): * Full 31-agent roster with one-line role + spawner + primary-doc status per agent (unchanged from prior partial work). * Commands: full 75-row enumeration grouped by Core Workflow, Phase & Milestone Management, Session & Navigation, Codebase Intelligence, Review/Debug/Recovery, and Docs/Profile/Utilities — each row carries a one-line role derived from the command's frontmatter and a link to the source file. * Workflows: full 72-row enumeration covering every get-shit-done/workflows/*.md, with a one-line role per workflow and a column naming the user-facing command (or internal orchestrator) that invokes it. * References: full 41-row enumeration grouped by Core, Workflow, Thinking-Model clusters, and the Modular Planner decomposition, matching the groupings docs/ARCHITECTURE.md already uses; notes the few-shot-examples subdirectory separately. * CLI Modules and Hooks: unchanged — already full rosters. * Maintenance section rewritten to describe the drift-guard test suite that will land in PR4 (inventory-counts, commands-doc-parity, agents-doc-parity, cli-modules-doc-parity, hooks-doc-parity). - docs/ARCHITECTURE.md reconciled against INVENTORY: * References block: drop the stale "(35 total)" count; point at INVENTORY.md#references-41-shipped for the authoritative count. * CLI Tools block: drop the stale "19 domain modules" count; point at INVENTORY.md#cli-modules-24-shipped for the authoritative roster. * Agent Spawn Categories: relabel as "Primary Agent Spawn Categories" and add a footer naming the 10 advanced agents and pointing at INVENTORY.md#agents-31-shipped for the full 31-agent roster. - docs/CONFIGURATION.md: preserve the six model-profile rows added in the prior partial work, and tighten the fallback note so it names the 13 shipped agents without an explicit profile row, documents model_overrides as the escape hatch, and points at INVENTORY.md for the authoritative 31-agent roster. Part 3 of a stacked docs refresh series (PR 3/4). Remaining consistency work (USER-GUIDE config-section delete-and-link, FEATURES.md TOC reorder, ARCHITECTURE.md Hook-table expansion + installation-layout collapse, CLI-TOOLS.md module-row additions, workflow-discuss-mode invocation normalization, and the five doc-parity tests) lands in PR4. * test(docs): add consistency guards and remove duplicate refs Consolidates USER-GUIDE.md's command/config duplicates into pointers to COMMANDS.md and CONFIGURATION.md (kills a ghost `resolve_model_ids` key and a stale `discuss_mode: standard` default); reorders FEATURES.md TOC chronologically so v1.32 precedes v1.34/1.35/1.36; expands ARCHITECTURE.md's Hook table to the 11 shipped hooks (gsd-read-injection-scanner, gsd-check-update-worker) and collapses the installation-layout hook enumeration to the *.js/*.sh pattern form; adds audit/gsd2-import/intel rows and state signal-*, audit-open, from-gsd2 verbs to CLI-TOOLS.md; normalizes workflow-discuss-mode.md invocations to `node gsd-tools.cjs config-set`. Adds five drift guards anchored on docs/INVENTORY.md as the authoritative roster: inventory-counts (all six families), commands/agents/cli-modules/hooks parity checks that every shipped surface has a row somewhere. * fix(convergence): thread --ws to review agent; add stall and max-cycles behavioral tests - Thread GSD_WS through to review agent spawn in plan-review-convergence workflow (step 5a) so --ws scoping is symmetric with planning step - Add behavioral stall detection test: asserts workflow compares HIGH_COUNT >= prev_high_count and emits a stall warning - Add behavioral --max-cycles 1 test: asserts workflow reaches escalation gate when cycle >= MAX_CYCLES with HIGH > 0 after a single cycle - Include original PR files (commands, workflow, tests) as the branch predated the PR commits Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(docs,config): PR #2390 review — security_* config keys and REQ-GRAPH-02 scope Addresses trek-e's review items that don't require rebase: - config.cjs: add workflow.security_enforcement, workflow.security_asvs_level, workflow.security_block_on to VALID_CONFIG_KEYS so gsd-sdk config-set accepts them (closed the gap where docs/CONFIGURATION.md listed keys the validator rejected). - core.cjs: add matching CONFIG_DEFAULTS entries (true / 1 / 'high') so the canonical defaults table matches the documented values. - config.cjs: wire the three keys into the new-project workflow defaults so fresh configs inherit them. - planning-config.md: document the three keys in the Workflow Fields table, keeping the CONFIG_DEFAULTS ↔ doc parity test happy. - config-field-docs.test.cjs: extend NAMESPACE_MAP so the flat keys in CONFIG_DEFAULTS resolve to their workflow.* doc rows. - FEATURES.md REQ-GRAPH-02: split the slash-command surface (build|query| status|diff) from the CLI surface which additionally exposes `snapshot` (invoked automatically at the tail of `graphify build`). The prior text overstated the slash-command surface. * docs(inventory): refresh rosters and counts for post-rebase drift origin/main accumulated surfaces since this PR was authored: - Agents: 31 → 33 (+ gsd-doc-classifier, gsd-doc-synthesizer) - Commands: 76 → 82 (+ ingest-docs, ultraplan-phase, spike, spike-wrap-up, sketch, sketch-wrap-up) - Workflows: 73 → 79 (same 6 names) - References: 41 → 49 (+ debugger-philosophy, doc-conflict-engine, mandatory-initial-read, project-skills-discovery, sketch-interactivity, sketch-theme-system, sketch-tooling, sketch-variant-patterns) Adds rows in the existing sub-groupings, introduces a Sketch References subsection, and bumps all four headline counts. Roles are pulled from source frontmatter / purpose blocks for each file. All 5 parity tests (inventory-counts, agents-doc-parity, commands-doc-parity, cli-modules-doc-parity, hooks-doc-parity) pass against this state — 156 assertions, 0 failures. Also updates the 'Coverage note' advanced-agent count 10 → 12 and the few-shot-examples footnote "41 top-level references" → "49" to keep the file internally consistent. * docs(agents): add advanced stubs for gsd-doc-classifier and gsd-doc-synthesizer Both agents ship on main (spawned by /gsd-ingest-docs) but had no coverage in docs/AGENTS.md. Adds the "advanced stub" entries (Role, property table, Key behaviors) following the template used by the other 10 advanced/specialized agents in the same section. Also updates the Agent Tool Permissions Summary scope note from "10 advanced/specialized agents" to 12 to reflect the two new stubs. * docs(commands): add entries for ingest-docs, ultraplan-phase, plan-review-convergence These three commands ship on main (plan-review-convergence via trek-e's 4b452d29 commit on this branch) but had no user-facing section in docs/COMMANDS.md — they lived only in INVENTORY.md. The commands-doc-parity test already passes via INVENTORY, but the user-facing doc was missing canonical explanations, argument tables, and examples. - /gsd-plan-review-convergence → Core Workflow (after /gsd-plan-phase) - /gsd-ultraplan-phase → Core Workflow (after plan-review-convergence) - /gsd-ingest-docs → Brownfield (after /gsd-import, since both consume the references/doc-conflict-engine.md contract) Content pulled from each command's frontmatter and workflow purpose block. * test: remove redundant ARCHITECTURE.md count tests tests/architecture-counts.test.cjs and tests/command-count-sync.test.cjs were added when docs/ARCHITECTURE.md carried hardcoded counts for commands/ workflows/agents. With the PR #2390 cleanup, ARCHITECTURE.md no longer owns those numbers — docs/INVENTORY.md does, enforced by tests/inventory-counts.test.cjs (scans the same filesystem directories with the same readdirSync filter). Keeping these ARCHITECTURE-specific tests would re-introduce the hardcoded counts they guard, defeating trek-e's review point. The single-source-of- truth parity tests already catch the same drift scenarios. Related: #2257 (the regression this replaced). --------- Co-authored-by: Tom Boucher <trekkie@nomorestars.com> Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
255 lines
8.4 KiB
Markdown
255 lines
8.4 KiB
Markdown
<purpose>
|
|
Cross-AI plan convergence loop — automates the manual chain:
|
|
gsd-plan-phase N → gsd-review N --codex → gsd-plan-phase N --reviews → gsd-review N --codex → ...
|
|
Each step runs inside an isolated Agent that calls the corresponding Skill.
|
|
Orchestrator only does: init, loop control, HIGH count check, stall detection, escalation.
|
|
</purpose>
|
|
|
|
<required_reading>
|
|
Read all files referenced by the invoking prompt's execution_context before starting.
|
|
|
|
@$HOME/.claude/get-shit-done/references/revision-loop.md
|
|
@$HOME/.claude/get-shit-done/references/gates.md
|
|
@$HOME/.claude/get-shit-done/references/agent-contracts.md
|
|
</required_reading>
|
|
|
|
<process>
|
|
|
|
## 1. Parse and Normalize Arguments
|
|
|
|
Extract from $ARGUMENTS: phase number, reviewer flags (`--codex`, `--gemini`, `--claude`, `--opencode`, `--all`), `--max-cycles N`, `--text`, `--ws`.
|
|
|
|
```bash
|
|
PHASE=$(echo "$ARGUMENTS" | grep -oE '[0-9]+\.?[0-9]*' | head -1)
|
|
|
|
REVIEWER_FLAGS=""
|
|
echo "$ARGUMENTS" | grep -q '\-\-codex' && REVIEWER_FLAGS="$REVIEWER_FLAGS --codex"
|
|
echo "$ARGUMENTS" | grep -q '\-\-gemini' && REVIEWER_FLAGS="$REVIEWER_FLAGS --gemini"
|
|
echo "$ARGUMENTS" | grep -q '\-\-claude' && REVIEWER_FLAGS="$REVIEWER_FLAGS --claude"
|
|
echo "$ARGUMENTS" | grep -q '\-\-opencode' && REVIEWER_FLAGS="$REVIEWER_FLAGS --opencode"
|
|
echo "$ARGUMENTS" | grep -q '\-\-all' && REVIEWER_FLAGS="$REVIEWER_FLAGS --all"
|
|
if [ -z "$REVIEWER_FLAGS" ]; then REVIEWER_FLAGS="--codex"; fi
|
|
|
|
MAX_CYCLES=$(echo "$ARGUMENTS" | grep -oE '\-\-max-cycles\s+[0-9]+' | awk '{print $2}')
|
|
if [ -z "$MAX_CYCLES" ]; then MAX_CYCLES=3; fi
|
|
|
|
GSD_WS=""
|
|
echo "$ARGUMENTS" | grep -qE '\-\-ws\s+\S+' && GSD_WS=$(echo "$ARGUMENTS" | grep -oE '\-\-ws\s+\S+')
|
|
```
|
|
|
|
## 2. Initialize
|
|
|
|
```bash
|
|
INIT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" init plan-phase "$PHASE")
|
|
if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
|
|
```
|
|
|
|
Parse JSON for: `phase_dir`, `phase_number`, `padded_phase`, `phase_name`, `has_plans`, `plan_count`, `commit_docs`, `text_mode`, `response_language`.
|
|
|
|
**If `response_language` is set:** All user-facing output should be in `{response_language}`.
|
|
|
|
Set `TEXT_MODE=true` if `--text` is present in $ARGUMENTS OR `text_mode` from init JSON is `true`. When `TEXT_MODE` is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number.
|
|
|
|
## 3. Validate Phase + Pre-flight Gate
|
|
|
|
```bash
|
|
PHASE_INFO=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" roadmap get-phase "${PHASE}")
|
|
```
|
|
|
|
**If `found` is false:** Error with available phases. Exit.
|
|
|
|
Display startup banner:
|
|
|
|
```text
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
GSD ► PLAN CONVERGENCE — Phase {phase_number}
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
|
|
Reviewers: {REVIEWER_FLAGS}
|
|
Max cycles: {MAX_CYCLES}
|
|
```
|
|
|
|
## 4. Initial Planning (if no plans exist)
|
|
|
|
**If `has_plans` is true:** Skip to step 5. Display: `Plans found: {plan_count} PLAN.md files — skipping initial planning.`
|
|
|
|
**If `has_plans` is false:**
|
|
|
|
Display: `◆ No plans found — spawning initial planning agent...`
|
|
|
|
```text
|
|
Agent(
|
|
description="Initial planning Phase {PHASE}",
|
|
prompt="Run /gsd-plan-phase for Phase {PHASE}.
|
|
|
|
Execute: Skill(skill='gsd-plan-phase', args='{PHASE} {GSD_WS}')
|
|
|
|
Complete the full planning workflow. Do NOT return until planning is complete and PLAN.md files are committed.",
|
|
mode="auto"
|
|
)
|
|
```
|
|
|
|
After agent returns, verify plans were created:
|
|
```bash
|
|
PLAN_COUNT=$(ls ${phase_dir}/${padded_phase}-*-PLAN.md 2>/dev/null | wc -l)
|
|
```
|
|
|
|
If PLAN_COUNT == 0: Error — initial planning failed. Exit.
|
|
|
|
Display: `Initial planning complete: ${PLAN_COUNT} PLAN.md files created.`
|
|
|
|
## 5. Convergence Loop
|
|
|
|
Initialize loop variables:
|
|
|
|
```text
|
|
cycle = 0
|
|
prev_high_count = Infinity
|
|
```
|
|
|
|
### 5a. Review (Spawn Agent)
|
|
|
|
Increment `cycle`.
|
|
|
|
Display: `◆ Cycle {cycle}/{MAX_CYCLES} — spawning review agent...`
|
|
|
|
```text
|
|
Agent(
|
|
description="Cross-AI review Phase {PHASE} cycle {cycle}",
|
|
prompt="Run /gsd-review for Phase {PHASE}.
|
|
|
|
Execute: Skill(skill='gsd-review', args='--phase {PHASE} {REVIEWER_FLAGS} {GSD_WS}')
|
|
|
|
Complete the full review workflow. Do NOT return until REVIEWS.md is committed.",
|
|
mode="auto"
|
|
)
|
|
```
|
|
|
|
After agent returns, verify REVIEWS.md exists:
|
|
```bash
|
|
REVIEWS_FILE=$(ls ${phase_dir}/${padded_phase}-REVIEWS.md 2>/dev/null)
|
|
```
|
|
|
|
If REVIEWS_FILE is empty: Error — review agent did not produce REVIEWS.md. Exit.
|
|
|
|
### 5b. Check for HIGH Concerns
|
|
|
|
```bash
|
|
HIGH_COUNT=$(grep -c '\*\*HIGH' "${REVIEWS_FILE}" 2>/dev/null || true)
|
|
HIGH_COUNT=${HIGH_COUNT:-0}
|
|
HIGH_LINES=$(grep -B0 -A1 '\*\*HIGH' "${REVIEWS_FILE}" 2>/dev/null)
|
|
```
|
|
|
|
**If HIGH_COUNT == 0 (converged):**
|
|
|
|
```bash
|
|
node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" state planned-phase --phase "${PHASE}" --name "${phase_name}" --plans "${PLAN_COUNT}"
|
|
```
|
|
|
|
Display:
|
|
```text
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
GSD ► CONVERGENCE COMPLETE ✓
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
|
|
Phase {phase_number} converged in {cycle} cycle(s).
|
|
No HIGH concerns remaining.
|
|
|
|
REVIEWS.md: {REVIEWS_FILE}
|
|
Next: /gsd-execute-phase {PHASE}
|
|
```
|
|
|
|
Exit — convergence achieved.
|
|
|
|
**If HIGH_COUNT > 0:** Continue to 5c.
|
|
|
|
### 5c. Stall Detection + Escalation Check
|
|
|
|
Display: `◆ Cycle {cycle}/{MAX_CYCLES} — {HIGH_COUNT} HIGH concerns found`
|
|
|
|
**Stall detection:** If `HIGH_COUNT >= prev_high_count`:
|
|
```text
|
|
⚠ Convergence stalled — HIGH concern count not decreasing
|
|
({HIGH_COUNT} HIGH concerns, previous cycle had {prev_high_count})
|
|
```
|
|
|
|
**Max cycles check:** If `cycle >= MAX_CYCLES`:
|
|
|
|
If `TEXT_MODE` is true, present as plain-text numbered list:
|
|
```text
|
|
Plan convergence did not complete after {MAX_CYCLES} cycles.
|
|
{HIGH_COUNT} HIGH concerns remain:
|
|
|
|
{HIGH_LINES}
|
|
|
|
How would you like to proceed?
|
|
|
|
1. Proceed anyway — Accept plans with remaining HIGH concerns and move to execution
|
|
2. Manual review — Stop here, review REVIEWS.md and address concerns manually
|
|
|
|
Enter number:
|
|
```
|
|
|
|
Otherwise use AskUserQuestion:
|
|
```js
|
|
AskUserQuestion([
|
|
{
|
|
question: "Plan convergence did not complete after {MAX_CYCLES} cycles. {HIGH_COUNT} HIGH concerns remain:\n\n{HIGH_LINES}\n\nHow would you like to proceed?",
|
|
header: "Convergence",
|
|
multiSelect: false,
|
|
options: [
|
|
{ label: "Proceed anyway", description: "Accept plans with remaining HIGH concerns and move to execution" },
|
|
{ label: "Manual review", description: "Stop here — review REVIEWS.md and address concerns manually" }
|
|
]
|
|
}
|
|
])
|
|
```
|
|
|
|
If "Proceed anyway": Display final status and exit.
|
|
If "Manual review":
|
|
```text
|
|
Review the concerns in: {REVIEWS_FILE}
|
|
|
|
To replan manually: /gsd-plan-phase {PHASE} --reviews
|
|
To restart loop: /gsd-plan-review-convergence {PHASE} {REVIEWER_FLAGS}
|
|
```
|
|
Exit workflow.
|
|
|
|
### 5d. Replan (Spawn Agent)
|
|
|
|
**If under max cycles:**
|
|
|
|
Update `prev_high_count = HIGH_COUNT`.
|
|
|
|
Display: `◆ Spawning replan agent with review feedback...`
|
|
|
|
```text
|
|
Agent(
|
|
description="Replan Phase {PHASE} with review feedback cycle {cycle}",
|
|
prompt="Run /gsd-plan-phase with --reviews for Phase {PHASE}.
|
|
|
|
Execute: Skill(skill='gsd-plan-phase', args='{PHASE} --reviews --skip-research {GSD_WS}')
|
|
|
|
This will replan incorporating cross-AI review feedback from REVIEWS.md.
|
|
Do NOT return until replanning is complete and updated PLAN.md files are committed.
|
|
|
|
IMPORTANT: When gsd-plan-phase outputs '## PLANNING COMPLETE', that means replanning is done. Return at that point.",
|
|
mode="auto"
|
|
)
|
|
```
|
|
|
|
After agent returns → go back to **step 5a** (review again).
|
|
|
|
</process>
|
|
|
|
<success_criteria>
|
|
- [ ] Initial planning via Agent → Skill("gsd-plan-phase") if no plans exist
|
|
- [ ] Review via Agent → Skill("gsd-review") — isolated, not inline
|
|
- [ ] Replan via Agent → Skill("gsd-plan-phase --reviews") — isolated, not inline
|
|
- [ ] Orchestrator only does: init, loop control, grep HIGHs, stall detection, escalation
|
|
- [ ] Each Agent fully completes its Skill before returning
|
|
- [ ] Loop exits on: no HIGH concerns (converged) OR max cycles (escalation)
|
|
- [ ] Stall detection reported when HIGH count not decreasing
|
|
- [ ] STATE.md updated on convergence completion
|
|
</success_criteria>
|