diff --git a/CHANGELOG.md b/CHANGELOG.md index b3cdea4f6..d10f18284 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## [1.99.3.0] - 2026-11-13 + +- **/ship's documentation audit no longer refuses Next.js and SvelteKit route files.** When the Step 14.5 docs audit listed a reviewed or updated file whose path has square brackets, such as `app/api/items/[id]/route.ts`, `[...slug]` or `[[...opt]]`, the result check read the brackets as a glob, refused the result with `DOCS_RESULT_INVALID` on both attempts, and stopped an unattended /ship at Blocked recovery even though the audit found nothing wrong (#4313). A listed path that holds `*`, `?`, `[` or `]` now counts as a file when that exact file exists from the repository root, so file-routed projects ship normally. A pattern such as `docs/*.md` or `docs/[ab].md`, or a bracketed path that names no file, is still refused as a glob. + +- **The transcript-scope brain-sync tests no longer time out on a bare local `bun test` (2026-11-12 daily flaky pass, GST-2555).** Each of the file's four cases spawns `gstack-brain-sync`, `gstack-config` and git several times, and the two push-retry cases take 3.4 to 5.6 seconds on a 4-core machine with nothing else running. Under bun's 5-second default they timed out in 3 of 8 runs there, while CI and the pregate runner already allow 30 seconds per test. The file now sets that same 30-second default, so a local focused run agrees with CI (12 of 12 cases passed in three bare runs). No assertion, threshold, trial count or retry changed. + +- **A change that only edits tests now gets one reviewer in /ship.** A pull request whose diff touched only test files (for example, a test switched to a scripted clock) made `gstack-review-plan` print a plan with zero readers, so the only review was the author's own core checklist read, and /ship carried on as if the change had been reviewed. Review policy (R51) gives tests one reviewer and one round. Now a tests-only diff plans one batched reader on the Testing checklist (`DISPATCH: specialist batched effort=medium checklists=testing`), which leaves any docs in the diff out of what it reads, and a clean pass or below-floor fixes still end the loop after that one round. A change that only touches registered generated outputs gets one batched reader on the code checklists too. A docs-only diff still plans no reader, and the plans for code, gate-class and security changes are unchanged. + ## [1.99.2.0] - 2026-11-12 - **Browser skills and question preferences work again from Codex, Cursor and the other non-Claude hosts' gstack folders.** Setup gives each of those hosts its own gstack folder (`~/.codex/skills/gstack` and the like) with no `package.json` or `node_modules`, and records the gstack checkout it came from in `.source-path`. `gstack-browser-ensure`, which every browser skill runs first, looked for Playwright only in that folder, so it reported `BROWSER_UNAVAILABLE playwright is not installed` even when the checkout had it. It now uses the checkout's dependencies, but only when the folder has no `package.json` of its own and `.source-path` is a regular file naming an absolute path whose real directory holds gstack's own `package.json` and `bin/gstack-browser-ensure`, neither one a link. An empty, stale, relative or linked pointer, or a directory that isn't gstack, is ignored as before, and `--check` still never writes. Setup also now puts `scripts/one-way-doors.ts` and `scripts/psychographic-signals.ts` in those folders. The question-preference helper loads them at run time, so its `--check` and `--signal-keys` stopped with `Cannot find module './scripts/one-way-doors.ts'`. Thanks to @SatriaSuriaAriffin, who found and reported both (#4290). diff --git a/VERSION b/VERSION index 10a69fe68..10ad7801b 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.99.2.0 +1.99.3.0 diff --git a/agents-digest/gstack-AGENTS.md b/agents-digest/gstack-AGENTS.md index fb015840a..c061cc9cb 100644 --- a/agents-digest/gstack-AGENTS.md +++ b/agents-digest/gstack-AGENTS.md @@ -1,4 +1,4 @@ -# gstack digest v1.99.2.0 — regenerate/re-copy after upgrading gstack +# gstack digest v1.99.3.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/changelog.d/docs-audit-accepts-bracketed-route-paths.md b/changelog.d/docs-audit-accepts-bracketed-route-paths.md deleted file mode 100644 index 65223ffce..000000000 --- a/changelog.d/docs-audit-accepts-bracketed-route-paths.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -important: blocker ---- -- **/ship's documentation audit no longer refuses Next.js and SvelteKit route files.** When the Step 14.5 docs audit listed a reviewed or updated file whose path has square brackets, such as `app/api/items/[id]/route.ts`, `[...slug]` or `[[...opt]]`, the result check read the brackets as a glob, refused the result with `DOCS_RESULT_INVALID` on both attempts, and stopped an unattended /ship at Blocked recovery even though the audit found nothing wrong (#4313). A listed path that holds `*`, `?`, `[` or `]` now counts as a file when that exact file exists from the repository root, so file-routed projects ship normally. A pattern such as `docs/*.md` or `docs/[ab].md`, or a bracketed path that names no file, is still refused as a glob. diff --git a/changelog.d/fix-flaky-checks-2026-11-12.md b/changelog.d/fix-flaky-checks-2026-11-12.md deleted file mode 100644 index 29c4c5050..000000000 --- a/changelog.d/fix-flaky-checks-2026-11-12.md +++ /dev/null @@ -1 +0,0 @@ -- **The transcript-scope brain-sync tests no longer time out on a bare local `bun test` (2026-11-12 daily flaky pass, GST-2555).** Each of the file's four cases spawns `gstack-brain-sync`, `gstack-config` and git several times, and the two push-retry cases take 3.4 to 5.6 seconds on a 4-core machine with nothing else running. Under bun's 5-second default they timed out in 3 of 8 runs there, while CI and the pregate runner already allow 30 seconds per test. The file now sets that same 30-second default, so a local focused run agrees with CI (12 of 12 cases passed in three bare runs). No assertion, threshold, trial count or retry changed. diff --git a/changelog.d/tests-only-diffs-get-one-reviewer.md b/changelog.d/tests-only-diffs-get-one-reviewer.md deleted file mode 100644 index a7ef396e9..000000000 --- a/changelog.d/tests-only-diffs-get-one-reviewer.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -important: regression ---- -- **A change that only edits tests now gets one reviewer in /ship.** A pull request whose diff touched only test files (for example, a test switched to a scripted clock) made `gstack-review-plan` print a plan with zero readers, so the only review was the author's own core checklist read, and /ship carried on as if the change had been reviewed. Review policy (R51) gives tests one reviewer and one round. Now a tests-only diff plans one batched reader on the Testing checklist (`DISPATCH: specialist batched effort=medium checklists=testing`), which leaves any docs in the diff out of what it reads, and a clean pass or below-floor fixes still end the loop after that one round. A change that only touches registered generated outputs gets one batched reader on the code checklists too. A docs-only diff still plans no reader, and the plans for code, gate-class and security changes are unchanged. diff --git a/package.json b/package.json index 9774d9b73..6e05740d9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gstack", - "version": "1.99.2", + "version": "1.99.3", "description": "Garry's Stack — Claude Code skills + fast headless browser. One repo, one install, entire AI engineering workflow.", "license": "MIT", "type": "module",