{{ message }}
Repository navigation
v1.91.70.0 feat(unattended): artifact contract + validator, unattended session kind, findings-derived review log, gate list (multi-agent wave B-core) - #3115
Merged
Conversation
…nd, findings-derived review log, gate list Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
garrytan
force-pushed
the
capy/v191700-featunattended-artifact
branch
from
October 10, 2026 23:03
93b6ca1 to
8c1b920
Compare
…umer: headless-artifacts.test.ts) Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
Contributor
E2E Evals: ✅ PASS121 executed, 0 reused rule/judge records | 0 manual accepted (unscored; no score-cache credit) | $89.87 rule/judge cost | reconcile exit: 0 Profile: pr / mode Derived dependents (scripts/pr-dependencies.ts):
Rule and judge shardsFail-closed reconciliationSliced lane: planner → duration-packed executors → fail-closed report. Behavior cases run a pre-registered 3-trial panel (PASS at 2/3 with no contract violation); a PASS 2/3 is shown with its failed trial, never as a clean pass. Reused results retain their original provenance and expiry. |
This was referenced Oct 11, 2026
levi85
pushed a commit
to levi85/gstack
that referenced
this pull request
Oct 14, 2026
…ed` session kind, findings-derived review log, gate list (multi-agent wave B-core) (garrytan#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>
This was referenced Oct 18, 2026
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.

First implementation PR of the multi-agent wave (
docs/designs/MULTI_AGENT_WAVE_2026_10_10.md, plan PR #3113, owner-approved on every recommended option). This is B-core: items B0, B1, B7, B9, B10, B12 and thegstack-skill-starthalf of A3. B-runner (thenext/submitrunner, outside-voice runner, checklists, spend ledger) stacks on this branch next.What a parent agent gets
GSTACK_SESSION_KIND=unattended: a fourth session kind, explicit override only, outranksGSTACK_HEADLESS;headlesskeeps BLOCK semantics so no eval case changes meaning. Suppresses every prompt likespawned, and additionally skips the telemetry writer, artifacts sync and brain spool at the entrypoints with an explicit line each, whatever settings or queue the machine inherited. Unknown kinds coerce to interactive but say so (SESSION_KIND: interactive (unknown kind 'x')).STATE_ROOT: <path> durable=yes|noonce per session from theGSTACK_EPHEMERAL=1marker; unattended on an ephemeral root printslearnings: skipped (…; set GSTACK_STATE_ROOT)instead of writing silently.lib/headless-artifacts.ts):run.json,decisions.jsonl,findings.jsonl,tasks.jsonlv2,timing.json,pregate,ship-receipt, each withschema_version.bin/gstack-artifact validate run.jsonis the deterministic completion check: fails on interrupted run, missing reviewer, stale artifact hash, count mismatch, duplicate ids, dependency cycles, malformed JSONL tails, paths escaping the run dir (symlinks included).GSTACK_RESULT:terminal line + shared exit table (0 ok · 1 fail · 2 usage · 3 refused).docs/unattended.mdhas the six-step parent flow withjq/grep.lib/result-codes.ts(sibling ofgate-outcomes.ts), each with adocs/troubleshooting.mdanchor andfix:clause;test/troubleshooting-anchors.test.tscovers both tables.lib/gate-list.ts,bin/gstack-gate render|parse|decisions): stable ids across pages of 7,autovsapproval,gate_revbinding; stale or unparsed replies are rejected with no writes; grammarall/<id><option>/all except …, bare yes/no rejected. Unattended autoplan ends withGSTACK_RESULT: skill=autoplan status=gate_pending run=<dir>and never approves.## URGENT, outside this planis the fixed first block of the report and plan (None.form when empty), with a placement test.bindReview(--findings)validates before consuming the start token, derivesstatus/unresolved/issues_found/critical_gapsplusfindings_total/open/resolved, rejects disagreeing rows (REVIEW_STATUS_MISMATCH, exit 1; usage exit 2);reviewFreshnessreadsfindings_open; legacy counters stay conservative.bin/gstack-autoplan-timingwritestiming.jsonand<state root>/analytics/autoplan-timing.jsonl(skipped with a line on ephemeral roots); Phase 0 prints a median-of-last-10 estimate orno history./autoplanon hosts that do not execute hooks printsautoplan guard: not enforced by this host; publication order is unverified (GUARD_NOT_INSTALLED)once; Claude Code's deny-on-absent hook is untouched.Byte budgets
Union bytes shrank on every skill; autoplan −163 (ratio 1.1275 vs 1.1305 cap), ship/review/qa −5 each.
CARVE_GUARDSautoplangateAfterStopmarker now keys on the gate file write. Golden ship renders refreshed (AUQ-format compression only).Deviations from the plan text
run.json.statusenum iscomplete|gate_pending|incomplete|interrupted|refused|awaiting_result|running(the hand-written reference run'sapprovedbecamecomplete); artifact paths are run-dir-relative;findings.native_counterpartnullable.EXECUTION_UNKNOWNis not inresult-codes.tsyet: its only emitter is the B-runnerresume, which adds it with its anchor.--skill autoplanso it does not print in every unattended skill.gstack-session-kindignores unknownGSTACK_SESSION_KINDvalues before skill-start sees them, so the loud note also reads the raw env var.Validation
typecheck,typecheck:test(no new diagnostics),gen:skill-docs --host allidempotent, parity suite, module-size ratchet (4 new libs registered), state-root ratchet, spawnsync tripwire, troubleshooting anchors, host-config goldens, context-budget ratchet, agents-digest freshness: pass. New suites:headless-artifacts23,review-log-findings14,gate-list,autoplan-timing6,gstack-session-kind16, skill-start egress test (zero sink calls under unattended, all three under interactive). Last combined run of suites touching changed files: 886 pass / 0 fail.test:quickfailures are the same Chromium/PTY/CSO-native/Windows-only files that fail identically on base 91bbd9e; the fullbun run testwas not run on the 4-core machine.Version 1.91.70.0 (PATCH, clean bump from base per
bin/gstack-next-version).