{{ message }}
Repository navigation
Conversation
… / as-is grammar (garrytan#3282) gstack-gate --help still gave the reply grammar as it shipped in garrytan#3115 (`all`, `all except <tokens>`), and so did the GATE_REPLY_UNPARSED fix in docs/troubleshooting.md. Since 1.91.107.0 the parser leads with `rec` (alias `all`) and adds `as-is`, and the rendered list, the result-code fix text and docs/unattended.md say so. A parent that learned the grammar from --help never saw `rec` or `as-is`. Both now match the render. A test requires every reply form the rendered list offers to appear in --help's grammar line, so the next grammar change cannot leave the help behind again. Fixes garrytan#3282 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Why (in your own words)
gstack-gate --helpstill gives the reply grammar as it shipped in #3115:all·<id><option>tokens ·all except <tokens>.Since 1.91.107.0 (#3190) the parser leads with
rec, keepsallas an alias and addsas-is. Everything else already says so:lib/gate-list.ts:117)GATE_REPLY_UNPARSEDfix text inRESULT_CODES(lib/result-codes.ts:117)docs/unattended.mdA parent agent that learns the grammar from
--helpnever seesrecoras-is, while the list it relays to the owner leads withrec. Nothing parses differently (all except d1bandrec except d1bresolve to the same choices); the help text was left behind.The same old grammar also sat in the Fix. paragraph of
docs/troubleshooting.md#gate-reply-unparsed. That copy now matches the result-code row.Fixes #3282.
Why this shape
rec(aliasall) ·rec except <tokens>·<id><option>tokens (d3b uc1a) ·as-is. Bare yes/no is rejected."RESULT_CODESrow uses.--help's "Reply grammar:" line.--helpcatches up, and the test never needs the words. That keeps the file's rule: "Prose in the rendering is not pinned."upstream/main(no`rec`) and green here.main, and fine to absorb into a wave.What it does
bin/gstack-gate: theReply grammar:line of--help.docs/troubleshooting.md: theGATE_REPLY_UNPARSEDFix. paragraph.test/gate-list.test.ts: one test indescribe('bin/gstack-gate').What it deliberately does not do
all,approve alland the other aliases keep working, and the renderedReply withline is untouched.--helpfrom the render's grammar). The test guards the drift instead. Happy to do the refactor if you'd rather have it.docs/designs/*andtest/fixtures/multi-agent-wave/*keep the original B9 grammar, as records of the plan.VERSION/CHANGELOG/ README / ETHOS untouched, and no generated files./shipnot run (the wave stamps the version).AI was used for assistance.
Live evidence
Setup. A synthetic one-item gate list in a temp dir.
gstack-gatewrites nothing.Before (
upstream/mainatafac8dfd8):--helpand the rendered list disagree.After (this branch,
afff2b927): they agree, and theallalias still parses the same asrec.Scope
bin/gstack-gate(+1/−1),docs/troubleshooting.md(+3/−3),test/gate-list.test.ts(+8). No VERSION, no CHANGELOG, no generated files.upstream/main, green here.afac8dfd8it fails attoContain('`rec`'), receiving the oldReply grammar:line.test/gate-list.test.tspass.originis my fork, so I pointed a temporaryorigin/pregate-baseref atupstream/main(afac8dfd8):--timeout=30000.autoplan-gate-artifactsfails 3 tests here and the same 3 onupstream/main:gstack-autoplan nextrefuses with "bun 1.4.0 is below the supported minimum 1.4.2". This box has Bun 1.4.0; CI pins 1.4.2.bun run typecheckexits 0.mainand with the four open PRs that touchdocs/troubleshooting.md(fix(pregate): Dart import graph and test lanes #3285, feat(pregate): user-owned policy file and local lanes #3286, v1.91.153.0 fix(outside-review): no-findings counts only as the review's conclusion; add regressions (#3294) #3304, v1.91.161.0 fix(pregate): Django, Dart, asset and tool-config lanes; init drafts from the repo (#3266-#3269) #3306).bun run test: not green on this Linux box, onupstream/maineither.afff2b927failed 365 tests in 69 files.bun run build:csoand Docker.autoplan-gate-artifacts, above.2d42e4ece), no file fails now that didn't fail then, and every common file has the same count.bootstrap-retention) passed its 36 tests but was marked failed by the home-containment check:~/.claude/sessions/<id>.jsonchanged while it ran, and that file belongs to a live Claude Code session on this machine. No new~/.gstack/projectsentries.bun run eval:select --base upstream/mainpicks the whole PR gate (108 behaviors, 24 judges), because every gate case reachesbin/gstack-gate. Fork PRs get no eval secrets, so I couldn't run it. The change is the--helptext only:render,parseanddecisionsoutput is byte-identical (the twoReply withlines above), so a case that relays or answers a gate is unaffected.bin/gstack-redact --repo-visibility publicon the diff reports no findings.git diff --checkis clean.Liveness proof (required for external contributors)
Checklist
GSTACK PRtyped live into a real surface) or PR author is @garrytan (owner exemption)all), withoutrecandas-is#3282Test plan
upstream/mainand green here--help, the rendered list and the aliasbun run test: the same environment failures asupstream/main; none comes from the changed filesFork PRs do not get eval secrets; the free files above are the gate.
Fixes #3282