mirror of
https://github.com/garrytan/gstack.git
synced 2026-11-02 15:04:37 +01:00
chore: release 1.91.102.0 (tentative stamp) — GBRA-40 field list
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
This commit is contained in:
1 parent
31318907f1
commit
e957b2194c
4 files changed
+30
-3
No files matched your search
@@ -1,5 +1,32 @@
|
||||
# Changelog
|
||||
|
||||
## [1.91.102.0] - 2026-10-14
|
||||
|
||||
**The GBRA-40 field list is fixed: install and check agree on one Bun, `rec` approves an autoplan gate in one word, and pregate never sits silent.** Eighteen Capy threads upgraded to v1.91.101.0 and reported 21 problems (`GBRA-40`, October 14). Each gstack item was reproduced with a test that failed first; the plan went through `/autoplan` (two gate revisions, Claude and GPT-6.1 Sol voices per phase) and two independent code reviews. Two items are Capy's (skills not mounted on some crew threads, Drive copies not re-synced) and are handed off, not worked around.
|
||||
|
||||
### What this means for you
|
||||
|
||||
- **Install, `--check` and upgrade resolve the same Bun.** One resolution contract (`gstack_bun_resolve` in `bin/gstack-bun-version.sh`, twinned in `lib/pregate/runtime.ts`) picks, in order, the project's exact verified pin in gstack's runtime store, the install default, `$BUN_INSTALL/bin`, `~/.bun/bin`, then PATH, and only a Bun that satisfies every applicable pin. The install verdict is keyed by checkout and project (`install-verdicts/<checkout>/<project|none>.json`) and records the Bun's path and version; `--check` fails `BUN_RESOLUTION_DRIFT` only when that Bun is gone, changed or no longer fits the pins.
|
||||
- **Fresh machines get Bun 1.4.3; the floor stays 1.4.2.** `GSTACK_BUN_DEFAULT="1.4.3"` is installed when no pin decides (`GSTACK_BUN_INSTALL_VERSION` overrides it with another verified version). Verified Buns unpack into `$GSTACK_STATE_ROOT/runtimes/bun/<version>/` with `bunx`; `~/.bun/bin/bun` is never overwritten.
|
||||
- **Fresh Capy shells run the right Bun without a PATH export.** On Capy cloud machines the installer writes marked `~/.local/bin/bun` and `bunx` shims that pick the Bun recorded for the current project (or the no-project record), validate and contain any `.bun-version` pin, and stay quiet unless a pin cannot be served. `GSTACK_BUN_SHIM_EXPLAIN=1` says why; `GSTACK_BUN_SHIM=0` opts out; a foreign `~/.local/bin/bun` is never touched.
|
||||
- **CI pins in different jobs are alternatives.** A project whose CI tests Bun 1.4.2 and 1.4.3 in different jobs is satisfied by either; package.json, `.tool-versions` and `.bun-version` pins are still all required. This also explains GBRA-39's backwards `outside CI 1.4.2` report.
|
||||
- **`gstack-upgrade` certifies the project you ran it from**, on the no-op, fast-forward and pending-repair paths alike. A pins failure prints `gstack: fail pins …` after a kept move and leaves no pending-reinstall marker; any other installer stop prints `gstack: fail runtime — …`.
|
||||
- **The ok trailer says what it skipped and what is newer:** `gstack: ok <rev> for=<skill> (pins: skipped (planning-only|no project); latest: <ver> available)`. The `gstack: fail <components>` head is unchanged.
|
||||
- **A stale Drive wrapper is visible.** With no active-wrapper provenance the doctor reads the Drive copies itself and fails `CAPY_WRAPPER_STALE` only when every copy is stale; an active copy below the minimum is a `WARN` owner action.
|
||||
- **`rec` takes every recommendation, plan changes included.** `all`, `approve all`, `accept all` and `take all recommendations` are aliases; `as-is` keeps the plan as written; `rec except d4a` overrides one item. The render shows `rec` first with a `rec_hash`; the new `gstack-autoplan recommend` lets the relaying parent set an item's recommendation, after which a stale `rec` is refused (`GATE_REC_STALE`). An agent's answer needs `--owner-reply` with the owner's words, and words that parse to different choices are refused. Gates rendered by an older gstack refuse alias replies until re-rendered.
|
||||
- **Two-voice recommendations need a shared remedy.** A file:line or title match alone is `unverified`; opposite remedies are a disagreement.
|
||||
- **Autoplan artifacts survive revisions, late edits and machine loss.** An empty findings fence means no findings. Each attempt writes its own result file and `submit` binds a sealed `.bound.md` copy. `answer` reopens nothing (`amend_pending`); `revise` reopens what actually changed, and `revise --settle <id>` closes a packaging-only change, in the same call as `--incorporates` if needed. With `GSTACK_AUTOPLAN_CHECKPOINT_DIR` set, each rest state publishes an immutable checkpoint generation; `gstack-autoplan checkpoints --from <dir>` lists them and `resume --from <dir>` restores the newest valid one after validating it.
|
||||
- **Smaller autoplan fixes:** `status` lists `PENDING:` attempts; `gstack-gate render --all`; findings' `file` fields are repo-relative; numbers quoted from the plan are not `NUMBER_UNRECEIPTED`; an outside voice without `--runner` is `(host-subagent)`; PLAN_REALITY flags an unquantified "minimum effect / margin / decision rule" beside the approval item without blocking.
|
||||
- **`gstack-pregate` never hangs silently.** Test commands run in their own process group with output to a log; `PREGATE_TEST:` progress and heartbeats go to stderr live; `--stall-timeout` (default 300 s, `stall_timeout_s` in `.gstack/pregate.json`) kills a silent group (`PREGATE_STALLED`); `--timeout` stays per runner process. Under 8 cores with a declared remote gate the tier becomes a `requires-remote` obligation; `--remote --spend-cap <usd>` runs it and clears it only on a matching `PREGATE_REMOTE:` receipt.
|
||||
- **`/ship` issue links.** `gstack-issue-links` lists commit mentions as `Refs` candidates (`fix #N` promotes one), adds `Related: #N (@author)` for other authors' open PRs closing the same issues (Supersedes and credit only with `--supersedes`/`--credit`), and maps a CI run id only to a bot-filed flake issue naming that run and a test. `gstack-ship-receipt write` refuses a body missing its issue lines (`ISSUE_LINKS_MISSING`).
|
||||
- **Also:** the Capy installer ends with one `gstack ready (claude, codex)` line and says `cloned … at <rev>` for a fresh clone; `ubi-runner -S` accepts only 320 or 640 unless `UBI_ALLOWED_STORAGE` says otherwise.
|
||||
|
||||
### For contributors
|
||||
|
||||
- New CI job `quick-bun-default` runs the quick tier on `GSTACK_BUN_DEFAULT`; `test/bun-version-drift.test.ts` pins it and `free-tests` requires it.
|
||||
- New tests: `test/bun-resolve.test.ts`, `test/autoplan-checkpoint.test.ts`, `test/autoplan-pairing.test.ts` (with this run's real pairs as fixtures), `test/pregate-supervise.test.ts`, `test/pregate-remote.test.ts`; many existing suites gained regressions.
|
||||
- The ship parity union cap is 1.6488 (measured), and the Capy skill's eager budget is 2601 tokens for its new autoplan checklist.
|
||||
|
||||
## [1.91.101.0] - 2026-10-13
|
||||
|
||||
**The field wave's residual gaps are closed.** v1.91.96.0 through v1.91.100.0 shipped the install-honesty and unattended-`/autoplan` wave (`docs/designs/GSTACK_FIELD_WAVE_2026_10_12.md`); running that release on a Capy machine left six gaps, each reproduced here with a test that failed first.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# gstack digest v1.91.101.0 — regenerate/re-copy after upgrading gstack
|
||||
# gstack digest v1.91.102.0 — regenerate/re-copy after upgrading gstack
|
||||
|
||||
Behavioral rules from gstack (https://github.com/garrytan/gstack), compressed
|
||||
for agent hosts without a full skill install. The full skills add workflows,
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "gstack",
|
||||
"version": "1.91.101",
|
||||
"version": "1.91.102",
|
||||
"description": "Garry's Stack — Claude Code skills + fast headless browser. One repo, one install, entire AI engineering workflow.",
|
||||
"license": "MIT",
|
||||
"type": "module",
|
||||
|
||||
Reference in new issue
Block a user