From 45a678323b3777fbfa52a1e4d3bb9d6beb61c505 Mon Sep 17 00:00:00 2001 From: Garry Tan Date: Sat, 10 Oct 2026 16:26:08 -0700 Subject: [PATCH] v1.91.70.0 feat(unattended): artifact contract + validator, `unattended` session kind, findings-derived review log, gate list (multi-agent wave B-core) (#3115) * v1.91.70.0 feat(unattended): artifact contract, unattended session kind, findings-derived review log, gate list Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> * test: register test/fixtures/multi-agent-wave as a free fixture (consumer: headless-artifacts.test.ts) 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> --- CHANGELOG.md | 36 ++ VERSION | 2 +- agents-digest/gstack-AGENTS.md | 2 +- autoplan/SKILL.md | 224 ++++---- autoplan/SKILL.md.tmpl | 169 +++--- autoplan/sections/phase-close.md | 3 + autoplan/sections/phase-close.md.tmpl | 3 + autoplan/sections/tasks-aggregator.md | 35 +- bin/gstack-artifact | 113 ++++ bin/gstack-autoplan-timing | 98 ++++ bin/gstack-brain-enqueue | 6 + bin/gstack-gate | 100 ++++ bin/gstack-review-log | 55 +- bin/gstack-session-kind | 26 +- bin/gstack-skill-end | 19 +- bin/gstack-skill-start | 90 ++- canary/SKILL.md | 55 +- codex/SKILL.md | 55 +- context-restore/SKILL.md | 55 +- context-save/SKILL.md | 55 +- design-consultation/SKILL.md | 55 +- design-html/SKILL.md | 55 +- design-review/SKILL.md | 55 +- design-shotgun/SKILL.md | 55 +- devex-review/SKILL.md | 55 +- docs/troubleshooting.md | 184 +++++++ docs/unattended.md | 151 ++++++ document-generate/SKILL.md | 55 +- document-release/SKILL.md | 55 +- health/SKILL.md | 55 +- hosts/claude/hooks/auq-error-fallback-hook.ts | 21 +- investigate/SKILL.md | 55 +- ios-clean/SKILL.md | 55 +- ios-design-review/SKILL.md | 55 +- ios-fix/SKILL.md | 55 +- ios-qa/SKILL.md | 55 +- ios-sync/SKILL.md | 55 +- land-and-deploy/SKILL.md | 55 +- landing-report/SKILL.md | 55 +- learn/SKILL.md | 55 +- lib/autoplan-timing.ts | 146 +++++ lib/gate-list.ts | 166 ++++++ lib/headless-artifacts.ts | 511 ++++++++++++++++++ lib/result-codes.ts | 124 +++++ lib/review-evidence.ts | 44 +- office-hours/SKILL.md | 55 +- package.json | 2 +- pair-agent/SKILL.md | 55 +- plan-ceo-review/SKILL.md | 51 +- plan-design-review/SKILL.md | 51 +- plan-devex-review/SKILL.md | 51 +- plan-eng-review/SKILL.md | 51 +- plan-tune/SKILL.md | 55 +- qa-only/SKILL.md | 55 +- qa/SKILL.md | 55 +- retro/SKILL.md | 55 +- review/SKILL.md | 55 +- .../preamble/generate-ask-user-format.ts | 55 +- scripts/resolvers/tasks-section.ts | 35 +- setup-deploy/SKILL.md | 55 +- setup-gbrain/SKILL.md | 55 +- ship/SKILL.md | 55 +- skillify/SKILL.md | 55 +- spec/SKILL.md | 55 +- sync-gbrain/SKILL.md | 55 +- test-audit/SKILL.md | 55 +- test/auq-error-fallback-hook.test.ts | 9 + test/autoplan-timing.test.ts | 129 +++++ test/fixtures/golden/agy-ship-SKILL.md | 55 +- test/fixtures/golden/claude-ship-SKILL.md | 55 +- test/fixtures/golden/codex-ship-SKILL.md | 55 +- test/fixtures/golden/factory-ship-SKILL.md | 55 +- test/fixtures/module-size-ratchet.json | 6 +- test/fixtures/multi-agent-wave/INCIDENTS.md | 20 + .../reference-run/ceo-native.md | 232 ++++++++ .../reference-run/ceo-outside.md | 47 ++ .../reference-run/decisions.jsonl | 13 + .../reference-run/dx-native.md | 165 ++++++ .../reference-run/dx-outside.md | 51 ++ .../reference-run/eng-native.md | 263 +++++++++ .../reference-run/eng-outside.md | 162 ++++++ .../reference-run/findings.jsonl | 65 +++ .../multi-agent-wave/reference-run/plan.md | 393 ++++++++++++++ .../multi-agent-wave/reference-run/run.json | 120 ++++ .../reference-run/tasks.jsonl | 28 + .../reference-run/timing.json | 46 ++ test/gate-list.test.ts | 201 +++++++ test/gstack-session-kind.test.ts | 35 +- test/gstack-skill-start.test.ts | 110 ++++ test/headless-artifacts.test.ts | 352 ++++++++++++ test/helpers/carve-guards.ts | 4 +- test/helpers/free-fixtures-data.ts | 1 + test/review-log-findings.test.ts | 191 +++++++ test/troubleshooting-anchors.test.ts | 22 +- 94 files changed, 5954 insertions(+), 1480 deletions(-) create mode 100755 bin/gstack-artifact create mode 100755 bin/gstack-autoplan-timing create mode 100755 bin/gstack-gate create mode 100644 docs/unattended.md create mode 100644 lib/autoplan-timing.ts create mode 100644 lib/gate-list.ts create mode 100644 lib/headless-artifacts.ts create mode 100644 lib/result-codes.ts create mode 100644 test/autoplan-timing.test.ts create mode 100644 test/fixtures/multi-agent-wave/INCIDENTS.md create mode 100644 test/fixtures/multi-agent-wave/reference-run/ceo-native.md create mode 100644 test/fixtures/multi-agent-wave/reference-run/ceo-outside.md create mode 100644 test/fixtures/multi-agent-wave/reference-run/decisions.jsonl create mode 100644 test/fixtures/multi-agent-wave/reference-run/dx-native.md create mode 100644 test/fixtures/multi-agent-wave/reference-run/dx-outside.md create mode 100644 test/fixtures/multi-agent-wave/reference-run/eng-native.md create mode 100644 test/fixtures/multi-agent-wave/reference-run/eng-outside.md create mode 100644 test/fixtures/multi-agent-wave/reference-run/findings.jsonl create mode 100644 test/fixtures/multi-agent-wave/reference-run/plan.md create mode 100644 test/fixtures/multi-agent-wave/reference-run/run.json create mode 100644 test/fixtures/multi-agent-wave/reference-run/tasks.jsonl create mode 100644 test/fixtures/multi-agent-wave/reference-run/timing.json create mode 100644 test/gate-list.test.ts create mode 100644 test/headless-artifacts.test.ts create mode 100644 test/review-log-findings.test.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 2910520fe..ae3409ae0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,41 @@ # Changelog +## [1.91.70.0] - 2026-10-10 + +**gstack runs unattended for a parent agent: one artifact contract a parent can validate, an `unattended` session kind that never prompts or syncs, a review log whose status is derived from its findings, and a gate list that is written, never auto-approved.** + +Parent agents running gstack on a subagent machine had no way to tell a finished `/autoplan` from an interrupted one, no session kind that meant "nobody is at the keyboard but this is not CI", and a review log whose `clean` status could disagree with its own findings. This release is the first half of the multi-agent wave (`docs/designs/MULTI_AGENT_WAVE_2026_10_10.md`, PR B-core). + +### What this means for you + +- **`GSTACK_SESSION_KIND=unattended`** is a fourth session kind, honored only as the explicit override. It suppresses every prompt and publication the way `spawned` does and also skips the telemetry writer, the artifacts sync and the brain spool with an explicit line each (`TELEMETRY_WRITE: skipped`, `ARTIFACTS_SYNC: skipped (unattended session; …)`), whatever settings the machine inherited. `headless` keeps its BLOCK meaning, so no eval case changes. +- **Every run prints `STATE_ROOT: durable=yes|no`.** With `GSTACK_EPHEMERAL=1` set by the host, an unattended run says `learnings: skipped (state root is ephemeral; set GSTACK_STATE_ROOT)` instead of writing to a disk that will vanish. +- **`/autoplan` unattended writes a run directory** (`run.json`, `decisions.jsonl`, `findings.jsonl`, `tasks.jsonl`, `timing.json`, `plan.md`, `review-record.md`) and ends with `GSTACK_RESULT: skill=autoplan status=gate_pending run=`. `gstack-artifact validate run.json` is the one deterministic completion check; it fails on an interrupted run, a missing reviewer, a stale artifact, a findings count that disagrees with the file, duplicate ids, dependency cycles or a path that escapes the run directory. `docs/unattended.md` shows the six-step parent flow with `jq` and `grep`. +- **The final gate is one list with one reply grammar** (`all`, `