enhance(#2272): forward --cursor/--qwen reviewer flags to convergence - #2412
enhance(#2272): forward --cursor/--qwen reviewer flags to convergence#2412drungrin wants to merge 6 commits into
Conversation
PR template requiredThis PR does not follow one of the required pull request templates from the contribution guidelines. Please update the PR description to use the correct typed template: This check only validates template format. It does not close PRs for an unfilled issue number such as Detected problem: PR body does not match the fix, enhancement, or feature template. |
|
PR body fixed |
trek-e
left a comment
There was a problem hiding this comment.
This is a small, correctly-wired parity fix — the --cursor/--qwen flags do reach the inner gsd-review call (verified at plan-review-convergence.md:141), and the issue/changeset/template gates are otherwise in order. But it ships incomplete:
gsd-core/workflows/help/modes/full.md(both the direct convergence signature and the--next --convergepassthrough list) wasn't updated for the new flags.tests/fixtures/golden-install-parity/*.jsonwasn't regenerated despite this PR changing the content ofplan-review-convergence.mdandSKILL.md— compare with #2417, which touches the same workflow file and correctly bumped ~13 fixture hashes. That will fail golden-parity in CI..changeset/2272-convergence-reviewer-flags.mdhaspr: 1— please set it to the real PR number (2412).
Separately, heads-up that CI's Tests / Docs / Security / Changeset workflows are stuck in action_required (fork-approval) and haven't actually run yet — a maintainer approval is needed so these issues surface in CI, not just here. And #2321 also edits this same REVIEWER_FLAGS block, so there's a merge-order rebase to coordinate.
60168de to
4bcd913
Compare
|
Thanks for the thorough review. All three blocking items are addressed, and the branch is now rebased onto current 1. 2. Golden fixtures not regenerated. Regenerated via No unrelated hashes moved. The One gotcha for anyone else regenerating on top of current 3. On the rebase. Done, onto Worth noting for merge ordering: the Verification run locally. CI is still gated on fork-approval, so none of this has been confirmed by CI yet:
I have not run the full suite locally, so the fork-approval you mentioned is still the real gate. One open question. |
trek-e
left a comment
There was a problem hiding this comment.
The core change is right — I ran the actual extraction block from both origin/next and your head: on base, --cursor and --qwen both collapse to --codex (reproducing the bug); on your branch both pass through, mixed accumulation works, unknown-flag fallback is preserved, and --gemini doesn't false-trip the new entries. Flag spellings match gsd-core/workflows/review.md exactly, so nothing is forwarded-then-rejected downstream.
Two blockers.
Blocker
B1 — Stale tests/workflow-size-baseline.json; will fail CI.
I measured at PR head:
actual bytes : 23903
committed baseline: 23713
tests/workflow-size-budget.test.cjs → assertFileBaseline (scripts/lib/allowlist-ratchet.cjs:180-207) fails on any growth against the committed snapshot. Tests is already red on test (ubuntu-latest, 22), test (ubuntu-latest, 24), and the full test shard-1 jobs on macOS and Windows.
Fix: npm run size:baseline and commit tests/workflow-size-baseline.json. (I confirmed agent-size-baseline.json needs no change — regen produced zero diff there.)
B2 — Two upstream CONVERGENCE_ARGS allowlists still drop --cursor/--qwen.
gsd-core/workflows/autonomous.md:49 and gsd-core/workflows/next.md:266 both build CONVERGENCE_ARGS via
for REVIEW_FLAG in --codex --gemini --claude --opencode --ollama --lm-studio --llama-cpp --all --text; do …
and forward only CONVERGENCE_ARGS, never raw $ARGUMENTS, into the skill call (autonomous.md:384,405,419; next.md:313). So /gsd:autonomous --converge --cursor and /gsd:progress --next --converge --cursor silently drop the flag and fall back to --codex — the exact silent-fallback footgun #2272 exists to kill, one hop upstream.
This isn't newly introduced (--agy never got added to these loops after #2293 either). What makes it blocking here is that your own edit to gsd-core/workflows/help/modes/full.md:287 now asserts these flags "forward to the convergence loop" via --next --converge — and for that path the claim is false. Shipping the doc promise without the wiring is worse than the status quo.
Same stale claim also appears in, none touched by this PR: commands/gsd/autonomous.md:43, skills/gsd-autonomous/SKILL.md:43, commands/gsd/progress.md:28, skills/gsd-progress/SKILL.md:28, docs/COMMANDS.md:631, docs/COMMANDS.md:861, docs/how-to/run-phases-autonomously.md:73.
No test catches this — tests/docs-parity-live-registry.test.cjs:708 only does a loose "flag token appears anywhere in help.md" check, which your full.md edit already satisfies trivially. So it ships silently broken unless fixed by hand.
Fix: add --cursor and --qwen to both CONVERGENCE_ARGS loops (and --agy/--antigravity while you're in there, since it's the same omission). A test asserting CONVERGENCE_ARGS parity against the convergence REVIEWER_FLAGS whitelist would stop this recurring.
Minor
- m3 — Branch prefix
enhance/isn't in CONTRIBUTING.md's table (CONTRIBUTING.md:131-136) or.github/workflows/branch-naming.yml:24-27. The check passes only because the script warns rather thansetFailed, so the green tick isn't compliance. Non-blocking —enhance(#NNN):as a PR-title/commit type is established and well-precedented here.
Verified as correct
REVIEWER_FLAGS whitelisting at plan-review-convergence.md:33-34 is shaped exactly like the existing --codex entries and forwarded verbatim at :143. Default --codex fallback and --all semantics unchanged; no new quoting/word-splitting exposure. --agy/--antigravity genuinely already landed on next (commit 1bb724048, #2293), so with this PR merged the aggregate satisfies #2272's full scope — not a blocker on its own. skills/gsd-plan-review-convergence/SKILL.md is correctly machine-regenerated (gen:plugin-skills --check → 71 skills up to date; full lint:generated-sync clean). Changeset valid (type: Changed, real backfilled pr: 2412, correct bold-lead + (#2272)). docs/COMMANDS.md:262,268-269 accurate and complete for both flags. Localized docs correctly left alone per CONTRIBUTING.md:277. No source-grep violation; eslint clean.
Memtrace Evidence
detect_changes/ diff scoping: confined to workflow/command/skill markdown,docs/COMMANDS.md, a test, and regenerated goldens. No.cts/.cjssource symbols touched, so there is no changed code symbol forget_impact/get_symbol_contextto anchor to. Stating that plainly rather than implying a call-graph analysis I did not run — the real blast radius here is the set of parallel flag-declaration surfaces, which is what B2 is about.find_code_review_issues(strict, deterministic AST + YAML + cross-module) on theREVIEWER_FLAGSdiff → 0 issues. Expected: B2 is a cross-surface completeness gap between two shell allowlists in separate markdown files, which no AST rule models.recall_decisionover the reviewer-flag/convergence topic returned ranked prior decisions with no recorded ban — this is additive parity work consistent with #2293's precedent, not a reversal.- Direct diff inspection confirmed the
--agy/--antigravityclaim: the pre-image line atplan-review-convergence.md:18already lists--agy/--antigravity, so that flag genuinely landed earlier (#2293) and its absence from this PR is correct scope, not an omission. - Measured directly:
plan-review-convergence.mdat PR head is 23,903 bytes against a committed baseline of 23,713 intests/workflow-size-baseline.json— that is B1.
1377467 to
8718621
Compare
|
Thanks, both blockers were real. Fixed, and the branch is rebased onto B1: stale size baselineConfirmed at the same numbers you measured (23713 → 23903). B2:
|
8718621 to
7a2c2da
Compare
trek-e
left a comment
There was a problem hiding this comment.
The reviewer-flag parity work itself is well done — the flags are wired end-to-end into the real gsd-review invocation rather than just added to a whitelist, and the dynamic cross-surface parity test is a better guard than I'd have asked for. Three things block.
Blocker
B1 — The branch conflicts with next.
gh api repos/open-gsd/gsd-core/pulls/2412 returns {"mergeable": false, "mergeable_state": "dirty", "rebaseable": false}. git merge-tree confirms 21 conflicting files, including all 17 golden install-parity fixtures, tests/workflow-size-baseline.json, docs/COMMANDS.md, and gsd-core/workflows/help/modes/full.md.
The fixtures are the awkward part: next's antigravity.json now records help/modes/full.md at a hash matching neither your pre- nor post-image, because another PR changed that file independently. So this needs a rebase and a regeneration (npm run gen:golden + npm run size:baseline), not a textual conflict resolution.
B2 — The substantive CI has never run on this head.
All seven green ticks are lightweight validators (title, template, issue-link, target, GitGuardian, Socket). The checks that matter — Tests, Changeset Required, Docs Required, Security Scan, Validate Branch Name — are all completed/action_required on 7a2c2daf, i.e. queued behind fork-workflow approval and never executed. My static read of the baseline and fixtures says they're internally consistent, but that is a manual check, not a CI verdict, and B1 will invalidate it anyway.
Major
M1 — Scope expanded past what #2272 approved, and the checklist says otherwise.
Issue #2272's scope-of-changes names the convergence workflow, its command and skill, its test, docs/COMMANDS.md, and the changeset. My approval comment on 2026-07-15 said "exactly as the issue's scope-of-changes describes."
Commit 7a2c2daf (07-20) additionally modifies commands/gsd/autonomous.md, commands/gsd/progress.md, gsd-core/workflows/autonomous.md, gsd-core/workflows/next.md, skills/gsd-autonomous/SKILL.md, skills/gsd-progress/SKILL.md, and docs/how-to/run-phases-autonomously.md. Issue #2272 has two comments — my approval and your 07-18 implementation note — and neither discloses this.
Meanwhile the PR body checks both "The implementation matches the scope approved in the linked issue — no additions or removals" and "If scope changed during implementation, I updated the issue and got re-approval." Both are contradicted by the issue timeline.
To be clear about the substance: the change itself is correct. autonomous.md and next.md were dropping the same flags one hop upstream, so fixing only the convergence workflow would have left the feature half-working. I'd have approved it on request. The problem is that it landed silently against an issue-first rule, with a checklist asserting the opposite.
Fix: comment on #2272 describing the upstream forwarders and get re-approval, or split them into their own issue/PR. Either way, correct the checklist.
Minor
- m2 —
tests/autonomous-converge.test.cjs:82-96andtests/adr-15-progress-converge.test.cjs:95-109still hardcode areviewerFlagsarray missing--cursor/--qwen/--agy/--antigravity, despite testing exactly the two files your last commit changed. Not a coverage hole (your new dynamic parity test supersedes them), but they now read as authoritative and are wrong. Extend both arrays or annotate them as superseded.
Verified as correct
Flags reach the actual reviewer invocation (plan-review-convergence.md:33-34 accumulate, forwarded at the Skill(skill='gsd-review', ...) call); gsd-review already implements Cursor and Qwen so this is genuine parity, not a dead whitelist entry; argument-hint / help/modes/full.md / docs/COMMANDS.md are all three updated per the parity gate; changeset is type: Changed, pr: 2412 (correctly backfilled from the earlier pr: 1); no injection surface — every new line appends a fixed literal with $ARGUMENTS double-quoted throughout.
I also checked the surfaces you did not touch and confirmed they're correctly excluded rather than missed: /gsd-review's own flag list is the parity target; the two ADRs are point-in-time records; translated docs are exempt per CONTRIBUTING; and the --codex/--cursor hits in stale-bake-guard.cjs and docs/ARCHITECTURE.md are installer runtime-target flags in a different namespace.
Memtrace Evidence
- No indexed code symbols change in this PR — the diff is workflow/command/skill markdown plus regenerated fixtures.
get_impact/get_symbol_contexthave no changed symbol to anchor to, so the blast radius here is contract-level (LLM-executed workflow instructions), not call-graph-level. Recording that explicitly rather than implying an analysis I did not run. - The verification that carried weight was direct:
gh api .../pulls/2412for mergeability andgit merge-tree origin/next <head>for the conflicting-file set (B1), andgh api .../actions/runs?head_sha=7a2c2daffor the real check states (B2). Both are reproducible from the commands quoted above. - The reviewer-flag surface inventory was built by grepping every
--codexoccurrence across*.md/*.cts/*.cjsand classifying each hit, rather than trusting the PR's own list — that is what surfaced m2. get_impact/get_symbol_context: this diff changes no indexed code symbol, so neither tool has a changed target to anchor to. I probed the runtime-resolution seam the reviewer flags eventually reach and confirmed the flags terminate in workflow prose rather than in a typed resolver. Stating that plainly rather than attaching a blast radius to a symbol this PR does not touch.recall_decisionover the convergence/reviewer-flag topic surfaced no recorded ban or contract that this change reverses — adding cursor/qwen to the whitelist is an extension of the existing counting contract, not a reversal.find_code_review_issues(strict; AST + YAML + cross-module) on the changed flag-parsing block → 0 issues. Expected for shell-in-markdown: the rule pack does not model workflow prose, and all three findings here (merge conflict, unrun CI, scope disclosure) sit outside what static analysis can see.
|
Rebased onto current B1 — rebased and regeneratedAll 21 conflicting paths were generated artifacts: the 18
Rebased head: m2 — stale hardcoded reviewer arraysExtended the B2 — CI still gated on fork approvalConfirmed — the substantive checks are still
A maintainer approval is still the real gate. M1 — scope disclosureYou're right — the upstream forwarders ( |
7a2c2da to
8e3b0e3
Compare
8e3b0e3 to
7edc3a3
Compare
trek-e
left a comment
There was a problem hiding this comment.
This was generated by AI during review.
Summary
enhance/2272-convergence-reviewer-flag-parity forwards --cursor/--qwen through /gsd-plan-review-convergence's REVIEWER_FLAGS whitelist, plus (disclosed mid-review, not in the original approved scope) the same two flags through the upstream CONVERGENCE_ARGS allowlists in autonomous.md/next.md. Three prior maintainer review rounds (2026-07-19, 07-20, 07-21) are on record, all CHANGES_REQUESTED. This is a Phase B.1.5 merge-conflict-gate pass: it re-verifies the conflict set against current next (ae8526cd5) and re-checks which prior findings are actually still resolved post-rebase, rather than re-litigating already-settled points.
Prior findings now resolved
Verified directly against the current diff/tree, not just taken on the author's word:
- Round 1 —
help/modes/full.mdnot updated — fixed; both the direct convergence signature and the--next --convergepassthrough list now list--cursor/--qwen. - Round 1 — golden fixtures not regenerated — fixed then, and regenerated again on every subsequent rebase (most recently for
next@352876ff0). - Round 1 — changeset
pr: 1— corrected topr: 2412. - Round 2 (B1) — stale
tests/workflow-size-baseline.json(23713 actual vs 23713 committed at the time) — fixed viaf13920c6. - Round 2 (B2) —
CONVERGENCE_ARGSallowlists inautonomous.md/next.mdstill dropped--cursor/--qwen— fixed via70db6cce, and this is the one finding that's more than cosmetic: without it,/gsd-autonomous --converge --cursorwould have kept silently falling back to--codexone hop upstream of the flag this PR was written to fix. The added dynamic parity test (asserts bothCONVERGENCE_ARGSloops are a superset of the convergenceREVIEWER_FLAGSset) is a real regression guard, not a static pin. - Round 3 (m2) — hardcoded
reviewerFlagsarrays intests/autonomous-converge.test.cjs/tests/adr-15-progress-converge.test.cjsstale — extended via7edc3a38. - Round 3 (B2) — CI never ran (fork-approval gate) — moot for this pass; not re-verified here since gate re-verification is out of scope for B.1.5, but note it below under CI.
Merge-conflict detail
Throwaway merge test (git merge --no-commit --no-ff) of PR head 7edc3a380aeae393ee6a800882a3758aef13df23 (confirmed current — matches gh pr view --json headRefOid) onto next @ ae8526cd5: 20 conflicting files, all generated artifacts, zero source conflicts:
tests/fixtures/golden-install-parity/{antigravity,augment,claude,claude-local,cline,codebuddy,codex,copilot,cursor,hermes,kilo,kimi,kimi-code,opencode,pi,qwen,trae,windsurf,zcode}.json(19 files)tests/workflow-size-baseline.json
Root cause: next has moved under this branch again since its last rebase (352876ff0). The structural driver is the #2505 Kimi-variant-disambiguation epic — bf8f32008 (feat(#2505): Phase 1 — EoS descriptor split (kimi-code capability.json + drift-guard registration), PR #2519) and f654c24a3 (feat(#2505): Phase 4, PR #2525) — which introduced kimi-code as an 18th runtime after this PR's fixtures were last regenerated, so every golden fixture (and the workflow-size baseline, which tracks byte counts across the same regenerated surface) now disagrees with next's committed hashes in the kimi-code row this PR never touched. 0ad3c5dd1/200daa456/77bf21b3a (unrelated fixes landed today) compound it. This is the same treadmill the author already described three times in review comments — it is not a defect in this PR's own source, just staleness. docs/COMMANDS.md and gsd-core/workflows/help/modes/full.md, which conflicted in round 3, now merge cleanly (no longer in the conflict list), confirming the round-3 rebase's regen was real.
Blast radius
No indexed .cts/.cjs source symbol is touched by this diff — the change is confined to workflow/command/skill markdown, docs/COMMANDS.md, a test file, and regenerated golden fixtures. get_impact/get_symbol_context have no changed symbol to anchor to, consistent with all three prior maintainer reviews' own conclusion. The real blast radius here is the parallel flag-declaration surface (workflow prose, command docs, generated skills, two CONVERGENCE_ARGS loops) rather than a call graph — which is exactly what round 2's B2 finding, and the parity test that now guards it, addressed.
Co-change completeness
get_cochange_context on gsd-core/workflows/plan-review-convergence.md returns only a batch of agents/gsd-*.md files sharing one commit timestamp (2026-07-05T18:20:52Z, an unrelated bulk resync) — no historically-coupled file is absent from this diff. Given this file's low natural co-change signal (prose workflow, not a heavily-shared module), this check is low-confidence either way; nothing concrete to flag.
Memtrace Evidence
get_impact/get_symbol_context: no indexed.cts/.cjsproduction symbol is touched by this diff (workflow/command/skill markdown +docs/COMMANDS.md+ a test file only), so neither tool has a changed symbol to anchor to — stated plainly rather than implying a call-graph analysis that doesn't apply here.get_symbol_contextonnormalizeKimiPayload(a same-shape sibling function inhooks/gsd-prompt-guard.js, used for pattern comparison since this PR touches no equivalent symbol itself) confirms theMap-based lookup convention used elsewhere in the guard family — not directly relevant to this PR's diff, included for completeness since it's the nearest indexed symbol to the PR's problem domain (reviewer-flag dispatch tables).find_code_review_issues(repo-graph-backed,onlinemode) against the newtests/plan-review-convergence.test.cjssuite → 0 reviewer-facing issues (1 raw AST candidate, filtered below the confidence threshold).recall_decision("reviewer flag whitelist convergence gsd-review cursor qwen antigravity")→ ranked results returned, no clearly on-point recorded ban or convention outranking the rest — consistent with this being additive parity work, not a policy reversal.get_cochange_contextongsd-core/workflows/plan-review-convergence.md(180-day default window) → top partners are a batch ofagents/gsd-*.mdfiles from one unrelated bulk-resync commit (2026-07-05); no historically-coupled file absent from this diff.
Findings by severity
Major
- M1 — Scope re-approval on #2272 is still pending. The author disclosed the upstream
CONVERGENCE_ARGSpassthrough expansion on issue #2272 on 2026-07-21T16:40:12Z and asked for explicit re-approval or a split into a separate PR. As of this review, there is no maintainer response on the issue thread. The PR body's scope-confirmation boxes are correctly left unchecked with a note, which is the right interim state — but the substantive gate (maintainer says yes, keep it in #2412, or split it) has not closed. This blocks merge independent of the conflict/CI state; recommend resolving on #2272 before further rounds on the code itself.
Minor
- m3 (carried from round 2, still true) — branch prefix
enhance/is not inCONTRIBUTING.md's allowed-prefix table (feat, fix, chore, docs, refactor, test, perf, ci, revert) and is not recognized by.github/workflows/branch-naming.yml. Non-blocking today only because that check warns instead of failing the build — the green tick is not actually compliance.enhance(#NNN):as a commit-message type is established in this repo; the branch prefix is the specific gap. - Generated-fixture conflicts (20 files) will recur on every future rebase until this merges — not actionable now, just flagging the churn.
Nit
- None beyond what's already tracked above.
Verdict
Request changes. The reviewer-flag-parity mechanism itself is sound and thoroughly reviewed (three rounds, all substantive findings fixed and independently re-verified here) — this is not a code-quality rejection. Two blockers remain, neither of which is new: (1) the branch needs another rebase + fixture/baseline regen against current next (mechanical, same as the author has done three times already), and (2) the scope-expansion re-approval on #2272 needs a maintainer answer before the upstream autonomous.md/next.md passthrough can be considered in-scope for this PR. Branch-prefix nonconformance (m3) remains a non-blocking carry-over.
7edc3a3 to
09477f9
Compare
…vergence The plan-review-convergence REVIEWER_FLAGS whitelist parsed only a subset of the reviewers gsd-review accepts. Passing --cursor or --qwen was silently dropped and the loop fell back to --codex, so a user believed they converged against Cursor/Qwen when they converged against Codex, and the only way to reach those reviewers was --all (which pulls in every detected CLI). Add --cursor and --qwen to the argument-parsing step so each accumulates into REVIEWER_FLAGS and is forwarded to the inner gsd-review call, and mirror them in the argument-hint and flag docs (command, generated SKILL.md, COMMANDS.md). Purely additive: default behavior, --all, and the already-parsed flags are unchanged; an unknown reviewer still falls back to --codex. Tests assert both new flags pass through the deployed extraction block and that the unknown-reviewer fallback is preserved.
…golden fixtures The convergence signature in the full help mode and the --next --converge passthrough list still advertised the pre-parity reviewer set. Add the two flags to both, and regenerate the golden-install-parity hashes for the command, skill, and workflow files whose content changed.
…e flags Adding the --cursor/--qwen parse lines grew plan-review-convergence.md from 23713 to 23903 bytes, tripping the per-file workflow size ratchet. The growth is two grep lines plus their doc entries, not lazy-loadable content, so the baseline is regenerated rather than the content extracted.
…omous/next autonomous.md and next.md build CONVERGENCE_ARGS from a fixed allowlist and forward only that variable into the convergence skill call; raw ARGUMENTS never reaches it. The allowlist stopped at --llama-cpp, so '--converge --cursor' and '--converge --qwen' were silently dropped to the --codex default one hop before the convergence workflow ever saw them. --agy/--antigravity had the same gap. Add the four flags to both loops, correct the flag enumerations in the command and how-to docs that advertise the passthrough, widen the changeset to cover the passthrough fix, and regenerate the derived skills, install-parity fixtures, and workflow size baseline. Cover it with a parity test that derives the expected set from the convergence REVIEWER_FLAGS whitelist rather than hardcoding it, so a future reviewer flag cannot be added to the workflow without both forwarders being updated too.
…r/qwen/agy/antigravity The static reviewerFlags arrays in autonomous-converge and adr-15-progress-converge asserted only the pre-existing flag set, so they read as authoritative while omitting the flags the forwarding loops now emit. Align both arrays with the CONVERGENCE_ARGS loop order in autonomous.md and next.md.
Enhancement PR
Linked Issue
Closes #2272
What this enhancement improves
Reviewer-flag parsing in
/gsd-plan-review-convergence(thegsd-plan-review-convergenceworkflow). It brings the convergence wrapper to parity with the reviewer flags/gsd-reviewalready accepts.Before / After
Before:
The convergence
REVIEWER_FLAGSwhitelist parsed only a subset of the reviewers/gsd-reviewsupports. Passing--cursoror--qwenwas silently ignored and the loop fell back to the default--codex:The only way to reach Cursor/Qwen was
--all, which also pulls in every other detected reviewer on every cycle. (--agy/--antigravityfrom the original proposal had already landed via #2293.)After:
--cursorand--qwenare recognized and forwarded to the inner review call, exactly like--codex:Purely additive — default behavior,
--all, and the already-parsed flags are unchanged. An unknown reviewer flag still falls back to--codex.How it was implemented
gsd-core/workflows/plan-review-convergence.md— added--cursorand--qwento theREVIEWER_FLAGSgrep-accumulation step (and to the "Extract from $ARGUMENTS" prose list) so each appends and is forwarded to the innergsd-reviewcall.commands/gsd/plan-review-convergence.md— added the two flags toargument-hintand the flag documentation list.skills/gsd-plan-review-convergence/SKILL.md— regenerated from the command vianpm run gen:plugin-skills(not hand-edited).docs/COMMANDS.md— documented the added reviewer flags and added usage examples.tests/plan-review-convergence.test.cjs— new#2272suite.Testing
How I verified the enhancement works
node --test tests/plan-review-convergence.test.cjs→ 122 pass, 0 fail.REVIEWER_FLAGSextraction block and asserts--cursor/--qwenpass through (not the--codexfallback), both accumulate together, the unknown-reviewer fallback to--codexis preserved, and an unrelated flag (--gemini) does not trip the new whitelist entries.SKILL.mdparity.npm run lint:generated-sync→ clean (SKILL.md in sync with the command source).npx eslint tests/plan-review-convergence.test.cjs→ clean.tests/plan-review-convergence.test.cjs— new#2272suite.Upstream
--convergepassthrough (disclosed on #2272, re-approval pending — see Scope note):gsd-core/workflows/autonomous.md,gsd-core/workflows/next.md— added--cursor --qwen --agy --antigravityto theCONVERGENCE_ARGSallowlist loops so/gsd-autonomous --convergeand/gsd-progress --next --convergestop silently dropping these flags to--codex.commands/gsd/autonomous.md,commands/gsd/progress.md,docs/how-to/run-phases-autonomously.md— corrected the reviewer-flag enumerations.skills/gsd-autonomous/SKILL.md,skills/gsd-progress/SKILL.md— regenerated from the commands (npm run gen:plugin-skills), not hand-edited.tests/plan-review-convergence.test.cjs— added a dynamic parity test asserting bothCONVERGENCE_ARGSloops are a superset of the convergenceREVIEWER_FLAGSset, so CI fails if a future reviewer flag is added to one forwarder but not the others.Platforms tested
Runtimes tested
Scope confirmation
Documentation
docs/to reflect this change (docs/COMMANDS.md)docs/content added in this PR is written in EnglishChecklist
Closes #NNN— PR will be auto-closed if missingapproved-enhancementlabel — PR will be closed if missingnpm test).changeset/fragment added (npm run changeset -- --type Changed --pr <NNN> --body "...") — orno-changeloglabel applied if not user-facingBreaking changes
None
Need help on this PR? Tag
/codesmithwith what you need. Autofix is disabled.