diff --git a/CHANGELOG.md b/CHANGELOG.md index e7f22bd76..f3222fcba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Changelog -## [1.91.23.0] - 2026-10-05 +## [1.91.24.0] - 2026-10-05 **A failed eval now says what happened, with the evidence and the next command.** **Bun is checked before anything installs, and make-pdf and /review work in Codex.** @@ -11,7 +11,7 @@ This release follows up on the severe fix wave. Its eight census runs had 21 red Each row is a regression test on this release that fails on v1.91.19.0, or a measurement from the 2026-10-03/04 census artifacts named in the row. -| Check | v1.91.19.0 | v1.91.23.0 | +| Check | v1.91.19.0 | v1.91.24.0 | |---|---|---| | make-pdf blocks on Codex that use `$P` without finding it | 7 of 8 | 0 | | /review with a read-only `.git` (Codex's sandbox) | prints nothing, "Nothing to review" | reviews against the local base, says `stale at ` | diff --git a/TODOS.md b/TODOS.md index 4eff11ca0..65225f9f8 100644 --- a/TODOS.md +++ b/TODOS.md @@ -2,7 +2,7 @@ ## NEXT PRIORITY -### P2/P3: reliability follow-ups deferrals (filed 2026-10-04, v1.91.23.0) +### P2/P3: reliability follow-ups deferrals (filed 2026-10-04, v1.91.24.0) Deferred from the approved reliability follow-ups plan (docs/designs/RELIABILITY_FOLLOWUPS_2026_10.md), each with its reason. @@ -95,7 +95,7 @@ Deferred from the approved reliability follow-ups plan (docs/designs/RELIABILITY Deferred from the approved severe fix wave (docs/designs/SEVERE_FIX_WAVE_2026_10.md), each with its reason. -- ~~**Enforce the Bun floor at setup (#2815)**~~ — done in v1.91.23.0: setup refuses Bun below 1.3.3 and warns below 1.4.0; auto-update and /gstack-upgrade check the incoming floor before moving the checkout. Original note: — `engines.bun` is now `>=1.4.0` +- ~~**Enforce the Bun floor at setup (#2815)**~~ — done in v1.91.24.0: setup refuses Bun below 1.3.3 and warns below 1.4.0; auto-update and /gstack-upgrade check the incoming floor before moving the checkout. Original note: — `engines.bun` is now `>=1.4.0` (the CI pin), but Bun does not enforce `engines` and setup never checks the version. Bun older than 1.3.3 silently ignores `--no-compile-autoload-dotenv` and `--no-env-file` (verified with 1.3.2), so D0's protection against a @@ -109,12 +109,12 @@ Deferred from the approved severe fix wave (docs/designs/SEVERE_FIX_WAVE_2026_10 - **C8 router wording behind a routing panel** — disabled skills now leave the router, but the "When in doubt, invoke the skill" wording change (Tier 3) was not run through a routing eval panel. **Effort:** S. **Priority:** P3. -- ~~**Cross-block variables on fresh-shell hosts: make-pdf `$P`**~~ — done in v1.91.23.0: env-var hosts re-derive `$P` in every block (MAKE_PDF_BIN honored). Original note: — make-pdf +- ~~**Cross-block variables on fresh-shell hosts: make-pdf `$P`**~~ — done in v1.91.24.0: env-var hosts re-derive `$P` in every block (MAKE_PDF_BIN honored). Original note: — make-pdf "exports" `$P` for later blocks, which Codex and the other env-var hosts lose between blocks (same class as `$B`/`$D`, which the shared prelude now re-derives). Add `P` to the runtime prelude or resolve it per block. **Effort:** S. **Priority:** P2. -- ~~**#2709's recorded-Chromium reap never runs on Playwright 1.62**~~ — done in v1.91.23.0: the owned headless launch records the browser PID over CDP `SystemInfo.getProcessInfo`. Original note: — Playwright +- ~~**#2709's recorded-Chromium reap never runs on Playwright 1.62**~~ — done in v1.91.24.0: the owned headless launch records the browser PID over CDP `SystemInfo.getProcessInfo`. Original note: — Playwright 1.62's `Browser` has no `process()`, so `chromiumProcInfo` is always null and the cleanup is a no-op (verified by probe). Record the PID another way (CDP `SystemInfo.getProcessInfo` or the launch server). **Effort:** S. **Priority:** P2. diff --git a/VERSION b/VERSION index a47cfa8fd..5073fc2dd 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.91.23.0 +1.91.24.0 diff --git a/agents-digest/gstack-AGENTS.md b/agents-digest/gstack-AGENTS.md index f60ca1b16..e63eea0d2 100644 --- a/agents-digest/gstack-AGENTS.md +++ b/agents-digest/gstack-AGENTS.md @@ -1,4 +1,4 @@ -# gstack digest v1.91.23.0 — regenerate/re-copy after upgrading gstack +# gstack digest v1.91.24.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, diff --git a/package.json b/package.json index 79be89e1e..b9d9968d7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gstack", - "version": "1.91.23", + "version": "1.91.24", "description": "Garry's Stack — Claude Code skills + fast headless browser. One repo, one install, entire AI engineering workflow.", "license": "MIT", "type": "module", diff --git a/review/SKILL.md b/review/SKILL.md index 662cae539..559850bab 100644 --- a/review/SKILL.md +++ b/review/SKILL.md @@ -798,7 +798,7 @@ Never install, import cookies or bootstrap tests. Functional-only skips browser **3. Run smoke and plan checks.** Follow the shared Probe loop for smoke checks and replays until the smoke limit. -Then run required plan checks and revalidation, even after smoke expires, using the same procedure but no smoke guard; never reset the clock. Their checkpoints sit beside DEADLINE_FILE; they skip `DEADLINE_TOOL status DEADLINE_FILE` and use `--timeout-ms`, not `--deadline DEADLINE_FILE`. Post-expiry smoke rechecks are not-run, even in 4c. +Then run required plan checks and revalidation, even after smoke expires, using the same procedure but no smoke guard; never reset the clock. Their checkpoints sit beside DEADLINE_FILE; they skip `DEADLINE_TOOL status DEADLINE_FILE` and use `--timeout-ms`, not `--deadline DEADLINE_FILE`. Post-expiry smoke rechecks are not-run. Use finite command timeouts, capped at the caller's remaining time if it has a deadline. /review sets none; only an invoker-supplied EARLIER_UTC counts. Await clock/guard results before acting. When the caller's deadline expires, mark unfinished checks not-run. diff --git a/scripts/resolvers/qa.ts b/scripts/resolvers/qa.ts index d5aeab50c..b758f830f 100644 --- a/scripts/resolvers/qa.ts +++ b/scripts/resolvers/qa.ts @@ -263,7 +263,7 @@ Never install, import cookies or bootstrap tests. Functional-only skips browser **3. Run smoke and plan checks.** Follow the shared Probe loop for smoke checks and replays until the smoke limit. -Then run required plan checks and revalidation, even after smoke expires, using the same procedure but no smoke guard; never reset the clock. Their checkpoints sit beside DEADLINE_FILE; they skip \`DEADLINE_TOOL status DEADLINE_FILE\` and use \`--timeout-ms\`, not \`--deadline DEADLINE_FILE\`. Post-expiry smoke rechecks are not-run, even in 4c. +Then run required plan checks and revalidation, even after smoke expires, using the same procedure but no smoke guard; never reset the clock. Their checkpoints sit beside DEADLINE_FILE; they skip \`DEADLINE_TOOL status DEADLINE_FILE\` and use \`--timeout-ms\`, not \`--deadline DEADLINE_FILE\`. Post-expiry smoke rechecks are not-run. Use finite command timeouts, capped at the caller's remaining time if it has a deadline.${ship ? '' : ' /review sets none; only an invoker-supplied EARLIER_UTC counts.'} Await clock/guard results before acting. When the caller's deadline expires, mark unfinished checks not-run. diff --git a/ship/sections/review-army.md b/ship/sections/review-army.md index d1749bc48..a1914723d 100644 --- a/ship/sections/review-army.md +++ b/ship/sections/review-army.md @@ -503,7 +503,7 @@ Run the shared preflight; start its smoke guard once. Guard every smoke probe. F **3. Run smoke and plan checks.** Follow the shared Probe loop for smoke checks and replays until the smoke limit. -Then run required plan checks and revalidation, even after smoke expires, using the same procedure but no smoke guard; never reset the clock. Their checkpoints sit beside DEADLINE_FILE; they skip `DEADLINE_TOOL status DEADLINE_FILE` and use `--timeout-ms`, not `--deadline DEADLINE_FILE`. Post-expiry smoke rechecks are not-run, even in 4c. +Then run required plan checks and revalidation, even after smoke expires, using the same procedure but no smoke guard; never reset the clock. Their checkpoints sit beside DEADLINE_FILE; they skip `DEADLINE_TOOL status DEADLINE_FILE` and use `--timeout-ms`, not `--deadline DEADLINE_FILE`. Post-expiry smoke rechecks are not-run. Use finite command timeouts, capped at the caller's remaining time if it has a deadline. Await clock/guard results before acting. When the caller's deadline expires, mark unfinished checks not-run. diff --git a/test/eng-finding-retry-budget.test.ts b/test/eng-finding-retry-budget.test.ts index f5d113b30..aebc87eb0 100644 --- a/test/eng-finding-retry-budget.test.ts +++ b/test/eng-finding-retry-budget.test.ts @@ -139,7 +139,7 @@ test('live periodic census fits the declared CI wall including setup', () => { test('registered allocation is deterministic and preserves every discovered file', () => { const files = collectPaidTestFiles(); - expect(files).toHaveLength(117); // + codex-e2e-multiblock-live and skill-e2e-design-model-smoke (v1.91.23.0) + expect(files).toHaveLength(117); // + codex-e2e-multiblock-live and skill-e2e-design-model-smoke (v1.91.24.0) expect(files).toContain('test/skill-e2e-ship-skip.test.ts'); const m = livePlan(files); expect(livePlan([...files].reverse())).toEqual(m); diff --git a/test/helpers/manual-judge-review-fixture.ts b/test/helpers/manual-judge-review-fixture.ts index 6eb622cec..90e7f3024 100644 --- a/test/helpers/manual-judge-review-fixture.ts +++ b/test/helpers/manual-judge-review-fixture.ts @@ -26,7 +26,7 @@ const LATER_PREAMBLE_EDITS: Array<[string, string]> = [ // The v1.91.19.0 generated-bash lint (INV-3) gave the shared Bun-install block a // ${TMPDIR:-/tmp} mktemp template; same line, different bytes. -// The v1.91.23.0 Bun floor (E1) pinned the install hint to the tested Bun. +// The v1.91.24.0 Bun floor (E1) pinned the install hint to the tested Bun. const LATER_WAVE_EDITS: Array<[string, string]> = [ ['tmpfile=$(mktemp "${TMPDIR:-/tmp}/bun-install.XXXXXX")', 'tmpfile=$(mktemp)'], ['BUN_VERSION="1.4.0"', 'BUN_VERSION="1.3.10"'], diff --git a/test/paid-retry-supervision.test.ts b/test/paid-retry-supervision.test.ts index bfac1f914..fdc9ef9ad 100644 --- a/test/paid-retry-supervision.test.ts +++ b/test/paid-retry-supervision.test.ts @@ -229,7 +229,7 @@ test('detached PR fallback and release commands cover their actual default worke )) / 1000 * 1.05)); } const detachedReleaseWall = Number(scripts['eval:bg:release'].match(/--timeout (\d+)/)?.[1]) * 1000; - // + codex-multiblock-live and design-model-smoke (periodic, v1.91.23.0): one more 2-worker batch. + // + codex-multiblock-live and design-model-smoke (periodic, v1.91.24.0): one more 2-worker batch. expect(releaseFloors).toEqual([22_355, 37_632]); expect(releaseFloors.reduce((total, floor) => total + floor, 0)).toBe(59_987); expect(detachedReleaseWall).toBe(116_700_000); diff --git a/test/qa-probe-gates.test.ts b/test/qa-probe-gates.test.ts index 12f94fb82..41e865e16 100644 --- a/test/qa-probe-gates.test.ts +++ b/test/qa-probe-gates.test.ts @@ -325,10 +325,10 @@ describe('judge-named QA workflow gaps (C2)', () => { } }); - test('/review and /ship: step 4c revalidation does not rerun smoke checks after smoke expiry', () => { + test('/review and /ship: smoke rechecks after smoke expiry are not-run, before step 4c revalidation', () => { for (const skillName of ['review', 'ship']) { const text = generateQAReview(ctx(skillName)); - const rule = text.indexOf('Post-expiry smoke rechecks are not-run, even in 4c.'); + const rule = text.indexOf('Post-expiry smoke rechecks are not-run.'); expect(rule).toBeGreaterThan(-1); expect(rule).toBeLessThan(text.indexOf('c. Re-review changed or uncertain coverage and repeat step 3 for affected checks.')); }