mirror of
https://github.com/garrytan/gstack.git
synced 2026-10-31 14:06:50 +01:00
v1.91.187.0 docs: unattended contract, gate reply grammar, session-kind override and voice triggers match the code (GSTA-69) (#3367)
* docs: unattended contract, gate reply grammar, session-kind override and voice triggers match the code (GSTA-69) Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> * v1.91.187.0 stamp Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> --------- Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
This commit is contained in:
1 parent
00100f1598
commit
632bde77de
10 files changed
+61
-14
No files matched your search
+3
-1
@@ -152,7 +152,9 @@ gstack itself uses this: `/ship` Step 14.5 dispatches the `/document-release`
|
||||
subagent with this prefix before final commit, verification and publication.
|
||||
Its ship-owned scope overrides generic spawned auto-choice: risky or uncertain
|
||||
documentation changes return as blockers for the parent, without interactive
|
||||
questions or automatic approval. Deliberately narrow: only `spawned` is honored — `headless`
|
||||
questions or automatic approval. Deliberately narrow: only `spawned` and `unattended` are honored
|
||||
(`unattended` is a separate, explicitly selected contract for a parent that
|
||||
reads a run's artifacts; see [unattended.md](unattended.md)) — `headless`
|
||||
already has `GSTACK_HEADLESS`, and letting an env var force `interactive`
|
||||
over CI markers would be a misclassification footgun. Empty or other values
|
||||
are reserved and ignored (fall through to ambient detection). Note that hook
|
||||
|
||||
@@ -2440,9 +2440,9 @@ reply with the printed `gate_rev`.
|
||||
**Meaning.** Part of the reply matched no gate item or option. Nothing was
|
||||
applied; the unparsed tokens are listed.
|
||||
|
||||
**Fix.** Reply with `all`, with `<id><option>` tokens (`d3b uc1a`), or with
|
||||
`all except <tokens>`. A bare `yes` or `no` is ambiguous across multi-option
|
||||
items and is never guessed.
|
||||
**Fix.** Reply with `rec` (alias `all`), with `rec except <tokens>`, with
|
||||
`<id><option>` tokens (`d3b uc1a`), or with `as-is` (the plan as written). A
|
||||
bare `yes` or `no` is ambiguous across multi-option items and is never guessed.
|
||||
|
||||
<a id="answer-by-required"></a>
|
||||
### `ANSWER_BY_REQUIRED`
|
||||
|
||||
+27
-2
@@ -57,18 +57,41 @@ An unknown `GSTACK_SESSION_KIND` value coerces to `interactive` and says so:
|
||||
|
||||
## The terminal line
|
||||
|
||||
Every workflow skill ends an unattended run with one line the parent greps:
|
||||
A run that writes a record ends with one line the parent greps:
|
||||
|
||||
```
|
||||
GSTACK_RESULT: skill=<name> status=<status> run=<dir>
|
||||
```
|
||||
|
||||
`status` is one of `complete`, `gate_pending`, `incomplete`, `interrupted` or
|
||||
`refused`; `run` is the directory that holds the artifacts below. `/autoplan`
|
||||
`refused`; `run` is where the run's record is. `/autoplan`
|
||||
always ends `gate_pending` when it reaches the final gate, because the gate is
|
||||
written and never approved. Pure queries (`gstack-artifact schema`,
|
||||
`gstack-gate render`) print no result line.
|
||||
|
||||
Not every workflow writes this line or a run directory today:
|
||||
|
||||
- **`/autoplan`** writes the full run directory below through `gstack-autoplan`,
|
||||
and `gstack-artifact validate` checks it. It is the only skill with steps
|
||||
and helpers that write `run.json`, `decisions.jsonl` and `gate.json`.
|
||||
- **Workflow commands** `gstack-pregate`, `gstack-regen`, `gstack-restamp` and
|
||||
`gstack-ship-queue` print their own line, with `run=` naming their own record
|
||||
(the pregate receipt, the regen worktree, the restamp journal, the queue
|
||||
record), not a run directory.
|
||||
- **A refused launch.** Any skill whose install check refuses it at startup
|
||||
prints `GSTACK_RESULT: skill=<name> status=refused run=-` and stops.
|
||||
- **Every other workflow skill** (`/ship`, `/review`, `/qa`, `/design-review`,
|
||||
`/spec`, `/land-and-deploy` and the rest) gets the session rules above (no
|
||||
prompts, approvals stay pending, nothing published), but has no step that
|
||||
writes a run directory or prints the line, so a parent should not wait for
|
||||
either. `/eval-plan` asks for a `gate_pending` line at its spend gate, but no
|
||||
helper writes its `gate.json` yet (`gstack-gate` renders and parses a gate
|
||||
list; it does not create one). `/cso` skips the shared startup, so these
|
||||
session rules do not reach it at all. Read each skill's own record instead:
|
||||
the ship receipt in the PR body (`gstack-ship-receipt read --pr <n> --json`)
|
||||
for `/ship`, the review-log rows (`gstack-review-read`) for `/review`, and the
|
||||
`qa-report-*.md` file for `/qa`.
|
||||
|
||||
Every workflow command shares one exit table: `0` ok, `1` fail, `2` usage,
|
||||
`3` refused or needs a flag. Error lines end with a result code in parentheses,
|
||||
for example `findings.jsonl:12: ... (ARTIFACT_SCHEMA)`; each code has an anchor
|
||||
@@ -77,6 +100,8 @@ a `fix:` clause. Grep the code, not the prose.
|
||||
|
||||
## The run directory
|
||||
|
||||
`/autoplan` writes these files; the next section shows how a parent reads them.
|
||||
|
||||
| File | Schema | Contents |
|
||||
|------|--------|----------|
|
||||
| `run.json` | `run` v1 | The manifest: `run` id, `status`, `required_phases`, each phase's `native` and `outside` outcome (`status`, `model`, `provider`), input `snapshot` hashes, `counts`, every artifact's `path` (relative to the run directory) and `sha256`, `session_kind`, `gate_rev`, `deviations`, `consumed_by`. |
|
||||
|
||||
Reference in new issue
Block a user