Skip to content

feat: add gsd:plan-review-convergence command#2339

Open
caius-kong wants to merge 3 commits intogsd-build:mainfrom
caius-kong:feat/2306-feat-add-gsd-plan-review-convergence-com
Open

feat: add gsd:plan-review-convergence command#2339
caius-kong wants to merge 3 commits intogsd-build:mainfrom
caius-kong:feat/2306-feat-add-gsd-plan-review-convergence-com

Conversation

@caius-kong
Copy link
Copy Markdown

@caius-kong caius-kong commented Apr 17, 2026

Linked Issue

Closes #2306


Feature summary

Adds gsd:plan-review-convergence — a cross-AI plan convergence loop that automates the manual plan-phase → review → replan → re-review chain. The orchestrator spawns isolated Agents for existing gsd-plan-phase and gsd-review Skills, then loops until no HIGH concerns remain in REVIEWS.md or max cycles (default 3) are reached.

What changed

New files

File Purpose
commands/gsd/plan-review-convergence.md Command source — installs as gsd-plan-review-convergence skill
get-shit-done/workflows/plan-review-convergence.md Workflow logic: init, convergence loop, stall detection, escalation gate
tests/plan-review-convergence.test.cjs 27 tests covering command structure, loop behavior, stall detection, escalation

Modified files

File What changed
CHANGELOG.md Added [Unreleased] → Added entry for the new command

Implementation notes

Implementation matches the approved spec exactly. The only discretionary decisions:

  • Test file name follows existing <command-name>.test.cjs convention
  • Tests use content assertion pattern (same as chain-flag-plan-phase.test.cjs, code-review-command.test.cjs) — verifies workflow contains key instruction strings the LLM will read at runtime
  • CHANGELOG entry placed under ### Added in [Unreleased] section

Spec compliance

  • New command gsd:plan-review-convergence with all documented flags (--codex, --gemini, --claude, --opencode, --all, --max-cycles N)
  • --codex is the default reviewer when no flag specified
  • Orchestrator-only loop control — planning and reviewing happen in isolated Agents calling existing Skills
  • Initial planning gate: skips if plans exist, spawns gsd-plan-phase if not, errors if no PLAN.md produced
  • Review agent spawned each cycle via gsd-review
  • HIGH concern detection by grepping REVIEWS.md
  • Loop exits when HIGH_COUNT == 0, STATE.md updated
  • Stall detection: warns when HIGH count not decreasing
  • Escalation gate at max cycles: AskUserQuestion with "Proceed anyway" / "Manual review" options
  • TEXT_MODE fallback for plain-text escalation
  • Copilot vscode_askquestions runtime note

Testing

Test coverage

tests/plan-review-convergence.test.cjs — 27 tests across 7 suites:

  • Command source structure (name prefix, flags, allowed-tools, execution_context references)
  • Workflow initialization (gsd-tools.cjs init, --max-cycles parsing, banner)
  • Initial planning gate (has_plans check, agent spawn, error on empty output)
  • Convergence loop (review agent, HIGH grep, loop exit, STATE.md update, --reviews, --skip-research)
  • Stall detection (prev_high_count tracking, warning text)
  • Escalation gate (AskUserQuestion, "Proceed anyway", "Manual review", TEXT_MODE)
  • Artifact verification (REVIEWS.md existence check, error on missing)

All 27 tests pass: node --test tests/plan-review-convergence.test.cjs

Platforms tested

  • macOS
  • Windows (backslash paths — workflow uses bash string ops; no path construction in the new files)
  • Linux

Runtimes tested

  • Claude Code (validated on real phase, 2 cycles, 13 HIGH → 0 HIGH)
  • Gemini CLI
  • OpenCode
  • Codex (used as reviewer in real-world validation)
  • Copilot
  • Other

Scope confirmation

  • The implementation matches the scope approved in the linked issue exactly
  • No additional features, commands, or behaviors were added beyond what was approved
  • Scope did not change during implementation

Checklist

  • Issue linked above with Closes #2306
  • Linked issue has the approved-feature label
  • All acceptance criteria from the issue are met (listed above)
  • Implementation scope matches the approved spec exactly
  • All existing tests pass (npm test)
  • New tests cover the happy path, error cases, and edge cases (27 tests)
  • CHANGELOG.md updated with a user-facing description of the feature
  • Documentation updated — no existing docs reference this command; workflow self-documents via <objective> and <context> tags
  • No unnecessary external dependencies added
  • Works on Windows — no path construction in new files; workflow uses bash variable substitution only

Breaking changes

None

Screenshots / recordings

Real-world validation on Phase 04.1 (COMET Evaluation Metrics, 4 PLAN.md files):

Cycle HIGH count Action
1 13 Stall check passed (13 < ∞) → replan with review feedback
2 0 Converged — STATE.md updated

Concerns caught: verdict math not switched to new metric, missing INCONCLUSIVE outcome paths, silent COMET model failure modes. All resolved in one replan cycle.

Summary by CodeRabbit

  • New Features
    • Added iterative plan→review→replan convergence command: selectable reviewers, configurable max cycles (default 3), automatic replanning on HIGH concerns, stall detection, and escalation when limits reached.
  • Documentation
    • Added user-facing docs for command/workflow arguments, runtime prompts, convergence banners, and behavior guidance.
  • Tests
    • Added tests validating command/workflow structure, convergence loop, stall detection, escalation options, and produced artifacts.

@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Apr 17, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 77a9e94e-4905-4b6d-8280-fb051e038196

📥 Commits

Reviewing files that changed from the base of the PR and between 65c8c23 and 0cd8f81.

📒 Files selected for processing (4)
  • CHANGELOG.md
  • commands/gsd/plan-review-convergence.md
  • get-shit-done/workflows/plan-review-convergence.md
  • tests/plan-review-convergence.test.cjs
✅ Files skipped from review due to trivial changes (1)
  • get-shit-done/workflows/plan-review-convergence.md
🚧 Files skipped from review as they are similar to previous changes (2)
  • commands/gsd/plan-review-convergence.md
  • tests/plan-review-convergence.test.cjs

📝 Walkthrough

Walkthrough

A new gsd:plan-review-convergence command and workflow orchestrate a cross‑AI revision loop: spawn isolated gsd-plan-phase and gsd-review agents, count **HIGH concerns in REVIEWS.md, run replan→review cycles up to --max-cycles (default 3) with stall detection and an escalation gate.

Changes

Cohort / File(s) Summary
Changelog & Command
CHANGELOG.md, commands/gsd/plan-review-convergence.md
Adds changelog entry and new command declaration gsd:plan-review-convergence with args: <phase>, reviewer flags (--codex, --gemini, --claude, --opencode, --all, --text, --ws <name>), and --max-cycles N. Documents orchestrator-only loop control and allowed tools (includes Agent and AskUserQuestion / vscode_askquestions).
Workflow Implementation
get-shit-done/workflows/plan-review-convergence.md
New workflow implementing init (gsd-tools.cjs init plan-phase), optional initial planning spawn, convergence loop (spawn isolated review Agent, validate REVIEWS.md, parse CYCLE_SUMMARY to extract HIGH_COUNT and issue list), stall detection vs previous HIGH count, replan spawn (gsd-plan-phase --reviews --skip-research), escalation gate on max cycles with --text fallback and user prompt handling.
Tests
tests/plan-review-convergence.test.cjs
Adds test suite validating command/workflow structure and control flow: command metadata, flags, execution_context refs, init calls, initial plan gate, review/replan cycle behavior, HIGH counting and stall detection, escalation gate behavior, and artifact presence checks (PLAN.md, REVIEWS.md).

Sequence Diagram

sequenceDiagram
    participant User
    participant Orchestrator as Orchestrator<br/>(gsd:plan-review-convergence)
    participant PlanAgent as Agent<br/>(gsd-plan-phase)
    participant ReviewAgent as Agent<br/>(gsd-review)

    User->>Orchestrator: /gsd-plan-review-convergence 04.1 --codex --max-cycles 3
    Orchestrator->>Orchestrator: Init phase metadata\nCheck for existing plans

    alt No existing plans
        Orchestrator->>PlanAgent: Spawn Agent: gsd-plan-phase
        PlanAgent->>PlanAgent: Create PLAN.md artifacts
        PlanAgent-->>Orchestrator: Planning complete
    end

    loop Until HIGH == 0 or MAX_CYCLES reached
        Orchestrator->>ReviewAgent: Spawn Agent: gsd-review --codex
        ReviewAgent->>ReviewAgent: Analyze plans\nProduce REVIEWS.md with CYCLE_SUMMARY
        ReviewAgent-->>Orchestrator: Review complete

        Orchestrator->>Orchestrator: Parse CYCLE_SUMMARY\nExtract HIGH_COUNT and HIGH items

        alt HIGH == 0
            Orchestrator->>Orchestrator: Update STATE.md\nMark as planned-phase
            Orchestrator-->>User: ✓ Convergence achieved
        else if cycle >= MAX_CYCLES
            Orchestrator-->>User: Escalation gate: Proceed anyway? / Manual review?
            alt User selects Proceed
                Orchestrator-->>User: ✓ Accept remaining HIGHs, exit
            else User selects Manual
                Orchestrator-->>User: Print manual review instructions, exit
            end
        else
            Orchestrator-->>User: ⚠ Stall warning if HIGH not decreasing
            Orchestrator->>PlanAgent: Spawn Agent: gsd-plan-phase --reviews --skip-research
            PlanAgent->>PlanAgent: Replan with feedback
            PlanAgent-->>Orchestrator: Replan complete
        end
    end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related issues

Suggested reviewers

  • glittercowboy

Poem

🐰 I hop between plans and reviews tonight,
Agents hum and carve the errors right,
HIGHs shrink as cycles spin,
Replan, review — convergence wins,
A carrot cheer for automated flight.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title 'feat: add gsd:plan-review-convergence command' clearly identifies the main change — a new command implementing a plan convergence loop.
Description check ✅ Passed The PR description provides comprehensive coverage: linked issue, feature summary, detailed file changes, implementation notes, spec compliance, test coverage, scope confirmation, and a checklist. However, it does not use the feature template structure specified in the description_template.
Linked Issues check ✅ Passed The code changes fully address all objectives from issue #2306: new command with all documented flags, default Codex reviewer, orchestrator-only loop control, initial planning gate, review cycle spawning, HIGH concern detection, convergence on zero HIGH, stall detection, escalation gate, and reuse of existing skills.
Out of Scope Changes check ✅ Passed All changes are within scope: new command/workflow files for plan-review-convergence, tests for the new feature, and a CHANGELOG entry. No modifications to existing commands, core logic, or unrelated functionality.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@commands/gsd/plan-review-convergence.md`:
- Line 4: Update the argument-hint string to include the missing documented
flags so it's aligned with the CLI docs: change the existing argument-hint value
(the "argument-hint" entry in this file) from "<phase> [--codex] [--gemini]
[--all] [--max-cycles N]" to include the additional options (for example
"<phase> [--codex] [--gemini] [--claude] [--opencode] [--text] [--ws] [--all]
[--max-cycles N]"), and apply the same edit to the other argument-hint
occurrences noted elsewhere in the file (the repeated argument-hint blocks
around lines referenced in the comment).

In `@get-shit-done/workflows/plan-review-convergence.md`:
- Line 63: The markdown contains multiple fenced code blocks using ``` without
language tags which trips MD040; update each triple-backtick fence shown in the
diff (and the additional occurrences noted in the review) to include an
appropriate language identifier (for example use ```text for plain output
blocks, ```bash for shell snippets, or ```json for JSON examples) so every
fenced block is annotated and markdownlint MD040 is satisfied.
- Around line 138-140: The HIGH_COUNT assignment can produce "0\n0" because grep
-c exits nonzero when no matches and your || echo "0" runs again; change the
HIGH_COUNT pipeline to avoid emitting a second "0" and ensure a single numeric
value (for example, run grep -c ... 2>/dev/null || true to suppress the non-zero
exit, then normalize with parameter expansion like HIGH_COUNT=${HIGH_COUNT:-0});
update the assignment that defines HIGH_COUNT (and leave HIGH_LINES as-is) so
numeric comparisons against HIGH_COUNT work correctly.
- Around line 20-25: The script calls INIT via the node gsd-tools.cjs init
plan-phase command before extracting PHASE from ARGUMENTS, causing phase
metadata (phase_dir, padded_phase, has_plans, plan_count, etc.) to be
initialized with an empty/stale phase; reorder the logic so you first parse and
validate PHASE and other flags from ARGUMENTS (extract PHASE, ensure it's
non-empty, collect REVIEWER_FLAGS, MAX_CYCLES, GSD_WS, text_mode,
response_language), then run INIT=$(node
"$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" init plan-phase "$PHASE") and
parse its JSON output into phase_dir, phase_number, padded_phase, phase_name,
has_plans, plan_count, commit_docs, text_mode, response_language; add explicit
validation to fail early if PHASE is empty and ensure response_language is
handled after parsing.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 06cd5b1f-a32b-4823-a43a-6cef6891d1ff

📥 Commits

Reviewing files that changed from the base of the PR and between 06c528b and d7e6ce9.

📒 Files selected for processing (4)
  • CHANGELOG.md
  • commands/gsd/plan-review-convergence.md
  • get-shit-done/workflows/plan-review-convergence.md
  • tests/plan-review-convergence.test.cjs

Comment thread commands/gsd/plan-review-convergence.md Outdated
Comment thread get-shit-done/workflows/plan-review-convergence.md Outdated
Comment thread get-shit-done/workflows/plan-review-convergence.md Outdated
Comment thread get-shit-done/workflows/plan-review-convergence.md Outdated
@trek-e trek-e added size/XL area: workflow Phase execution, ROADMAP, STATE.md labels Apr 17, 2026
Copy link
Copy Markdown
Collaborator

@trek-e trek-e left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Adversarial review.

New command and workflow for a cross-AI plan convergence loop. Overall well-structured. Key findings:

Issues addressed by author: All 4 CodeRabbit findings (grep -c fallback, init-before-parse ordering, argument-hint completeness, code block language identifiers) confirmed addressed in commit c401fd3.

No security issues found: No command injection vectors, no path traversal, no unsafe eval/exec patterns. Agent spawning uses Skill() calls, not raw shell.

Structural concerns:

  1. No test for the HIGH-count stall detection — the test suite covers loop structure, escalation gates, and REVIEWS.md verification, but there's no test verifying that prev_high_count == HIGH_COUNT triggers the stall warning. This is the most fragile logic path and the one most likely to silently regress.

  2. --ws forwarding to review agent — the workflow spawns Skill('gsd-review', ...) without threading GSD_WS through to it. If a user is working in a named workspace, the review agent may read from the wrong workspace. This was flagged by CodeRabbit (id 3097651140) and the author addressed init ordering but it's not clear --ws is forwarded. Worth confirming.

  3. Max-cycles=1 edge case — with --max-cycles 1, if the initial review finds HIGHs, the loop escalates immediately without a replan. The workflow text handles this but the test suite doesn't cover it.

@trek-e trek-e added the needs changes Review requested changes that must be addressed label Apr 17, 2026
Copy link
Copy Markdown
Collaborator

@trek-e trek-e left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Adversarial review — REQUEST CHANGES.

Trek-e's prior review (2026-04-17T13:15:29Z) raised three concerns. The author addressed CodeRabbit's four findings in commit c401fd3, but trek-e's structural concerns were not addressed. The PR has no response from the author on those points and no subsequent commits that cover them.

Unresolved concerns:

1. --ws forwarding to review agent (correctness bug)
The convergence workflow spawns Skill('gsd-review', args='--phase {PHASE} {REVIEWER_FLAGS}') but does not thread GSD_WS through to the review agent. If the user is working in a named workspace (--ws project-name), the review agent reads from the wrong workspace context. The replan agent does pass {GSD_WS} — making the behavior asymmetric: planning is workspace-aware, reviewing is not. The review agent must also receive the workspace flag.

2. Missing stall detection test
The test suite has 7 suites covering command structure, init, planning gate, convergence loop, stall detection, escalation gate, and artifact verification. The stall detection suite tests that prev_high_count is tracked and that a warning is emitted — but no test verifies the condition HIGH_COUNT >= prev_high_count triggers the warning when the count does not decrease between cycles. The existing stall tests are structural (string presence) rather than behavioral. This is the most fragile path: a refactor of the stall variable names or comparison would break stall detection silently with no test catching it.

3. --max-cycles 1 edge case
With --max-cycles 1, a cycle 1 review that finds HIGHs immediately hits the escalation gate without a replan attempt. The workflow handles this correctly in prose, but the test suite has no coverage for this boundary. Users who set --max-cycles 1 as a dry-run/review-only mode will hit behavior that is untested.

Required fixes before approval:

  • Thread GSD_WS through to the review agent spawn call in plan-review-convergence.md
  • Add a behavioral stall detection test: simulate decreasing HIGH count (no stall warning) and stable HIGH count (stall warning emitted)
  • Add a --max-cycles 1 test covering the immediate escalation path

The spec, overall structure, and orchestrator-only design are correct. These are targeted gaps, not architectural problems.

@trek-e
Copy link
Copy Markdown
Collaborator

trek-e commented Apr 20, 2026

CodeRabbit finding audit — all four findings were valid and are confirmed addressed.

The most recent CodeRabbit review on this PR (run ID 2fa0485c) found no actionable comments, indicating commit c401fd3 addressed all four findings from the prior review:

  1. Argument-hint missing flags — VALID, addressed.
  2. Fenced code blocks without language tags (MD040) — VALID, addressed.
  3. HIGH_COUNT grep -c producing double "0" — VALID, addressed.
  4. INIT called before PHASE is parsed — VALID, addressed.

The trek-e adversarial review (CHANGES_REQUESTED, 2026-04-20) has three structural concerns that are separate from the CodeRabbit findings and remain open: (1) --ws not forwarded to review agent, (2) stall detection test is structural not behavioral, (3) --max-cycles 1 not tested. These are unrelated to CodeRabbit's findings but require author response before merge.

@caius-kong
Copy link
Copy Markdown
Author

Thanks for the thorough review @trek-e. All three concerns are addressed in commit 65c8c23:

1. --ws forwarding to review agent — fixed. Review agent spawn now passes {GSD_WS} to the gsd-review skill args, symmetric with replan agent. Added review agent spawn forwards --ws via {GSD_WS} test to catch regressions.

2. Behavioral stall detection tests — added. The suite now includes:

  • BEHAVIORAL: decreasing HIGH count (progress) does NOT trigger stall — 5→3, 10→1
  • BEHAVIORAL: stable HIGH count (no progress) DOES trigger stall — 5→5 (the classic revision-loop case)
  • BEHAVIORAL: increasing HIGH count (regression) DOES trigger stall — 5→7, 3→13
  • stall condition uses >= (covers both "stable" AND "increasing" cases) — guards against the > vs >= refactor risk you identified

3. --max-cycles 1 edge case — covered. Added:

  • BEHAVIORAL: --max-cycles 1 with HIGHs in cycle 1 immediately escalates (no replan)
  • BEHAVIORAL: --max-cycles 3 (default) only escalates after 3 cycles

Bonus fix (CYCLE_SUMMARY contract): In real-world validation on a phase with 3 review cycles, I discovered the raw-grep approach in cycle 2 triggered a false stall: the reviewer's cycle 2 output re-listed resolved HIGHs for audit, inflating the grep -c '**HIGH' count from 5 to 11 even though convergence was actually progressing (3 genuinely new HIGHs).

Fixed by mirroring gsd-plan-phase's pattern — instead of re-reading the artifact file, the orchestrator now parses a CYCLE_SUMMARY: current_high=<N> line from the review agent's return message. The contract explicitly excludes resolved HIGHs, historical references, and retrospective summary table mentions. Fail-loud if the contract is violated (no silent defaulting).

Test count: 27 → 39. All green locally (node --test tests/plan-review-convergence.test.cjs).

caiuskong and others added 3 commits April 20, 2026 17:52
Cross-AI plan convergence loop that automates the plan→review→replan
cycle until no HIGH concerns remain or max cycles (default 3) reached.

- Orchestrator-only loop control: spawns isolated Agents for existing
  gsd-plan-phase and gsd-review Skills — no new planning/review logic
- Stall detection: warns immediately when HIGH count not decreasing
- Escalation gate: AskUserQuestion when max cycles reached with HIGHs
- TEXT_MODE fallback for plain-text escalation (Copilot compatibility)
- vscode_askquestions runtime note for VS Code Copilot

New files:
  commands/gsd/plan-review-convergence.md
  get-shit-done/workflows/plan-review-convergence.md
  tests/plan-review-convergence.test.cjs (27 tests, all passing)

Closes gsd-build#2306

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- argument-hint: add missing --claude, --opencode, --text, --ws flags
- workflow step ordering: parse ARGUMENTS before calling gsd-tools init
  so PHASE is populated when init plan-phase is invoked
- HIGH_COUNT: use || true + parameter expansion to avoid "0\n0" when
  grep -c finds no matches and exits nonzero
- MD040: add language tags to all fenced code blocks (bash/text/js)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
gsd-build#2306)

Addresses the three structural concerns from trek-e's adversarial review
and also fixes a latent cycle-awareness bug in HIGH detection.

Changes:

1. Thread {GSD_WS} through to review agent spawn call (symmetric with replan).
   Previously review agent ran in default workspace when user passed --ws,
   while replan agent correctly received the flag. This was a real
   correctness bug for named workspaces.

2. Replace raw grep of REVIEWS.md with CYCLE_SUMMARY contract parsed from
   the review agent's return message. This mirrors gsd-plan-phase's pattern
   of parsing structured data from the checker's return (not re-reading
   the artifact file).

   Rationale: REVIEWS.md accumulates historical content across cycles.
   A cycle 2 review that lists resolved HIGHs for audit would inflate the
   raw grep count and falsely trigger stall detection, even though
   convergence was actually progressing. CYCLE_SUMMARY asks the reviewer
   to report ONLY current unresolved HIGHs (excluding resolved, historical
   refs, retrospective summary tables). Fail-loud if the contract is
   violated — no silent defaulting.

3. Strengthen test suite from 27 → 39 tests:
   - BEHAVIORAL stall detection tests: verify the >= condition correctly
     classifies decreasing/stable/increasing HIGH transitions (catches
     logic inversions or > vs >= regressions).
   - BEHAVIORAL --max-cycles 1 edge case: verify cycle=1/max=1/HIGHs>0
     immediately escalates without replan, and cycle=1/max=1/HIGHs=0
     converges via the HIGH_COUNT==0 branch.
   - New structural tests: step ordering (Parse ARGUMENTS before init),
     --ws forwarding to review agent, --ws forwarding to replan agent,
     CYCLE_SUMMARY regex presence, CYCLE_SUMMARY exclusion rules,
     CYCLE_SUMMARY contract fail-loud abort.

Closes gsd-build#2306

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@caius-kong caius-kong force-pushed the feat/2306-feat-add-gsd-plan-review-convergence-com branch from 65c8c23 to 0cd8f81 Compare April 20, 2026 09:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: workflow Phase execution, ROADMAP, STATE.md needs changes Review requested changes that must be addressed size/XL

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat: add gsd:plan-review-convergence command — cross-AI plan convergence loop

3 participants