# gstack changelog > gstack release notes. - Vendor: gstack - Category: Developer Tools - Official site: https://github.com/garrytan/gstack - Tracked by: What's New (https://whatsnew.fyi/product/gstack) - Harvested from: AI extracted - Entries below: 25 (newest first) What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. Reuse: the summaries, labels and curation here are © What's New. Quote freely with attribution and a link back; wholesale republication of the corpus is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'. ## Releases ### 1.91.24.0 — PR evals stop throwing away work, and a red weekly census means something again. - Date: 2026-10-05 - Version: 1.91.24.0 - Original notes: https://raw.githubusercontent.com/garrytan/gstack/main/CHANGELOG.md - Permalink: https://whatsnew.fyi/product/gstack/releases/1.91.24.0 - **changed** — Free suite performance improved and flake visibility added - **fixed** — Broken commands removed from free suite - **changed** — Paid PR lane keeps cancelled run's finished results for the next push - **changed** — Paid PR lane waits briefly when pushes come in quick succession - **changed** — Paid PR lane runs only the gate cases a change can affect once the change avoids a shared input - **changed** — Paid lane shard ceiling sized per runner prevents stuck shards from holding a runner for four hours - **fixed** — Stuck shards end as honest TIMEOUT or not_run instead of holding a runner indefinitely - **changed** — Weekly census can no longer be cancelled by a branch dispatch - **added** — New weekly test-health report shows which free tests are getting flaky or slow - **changed** — PR evals keep finished work - **added** — Recover-receipts job restores passes and failures of up to five cancelled runs of the same PR - **added** — 90-second debounce skips a run that a newer push has already superseded - **added** — evals-no-debounce label turns off debounce and evals-fresh label turns reuse off - **changed** — Duration seeds, free-only workflows, free tests and free fixtures no longer force the full gate - **changed** — Other files map to the paid cases that actually consume them derived from imports, bin names, template placeholders and build outputs - **added** — bun run eval:bg:pr and friends dispatch CI when HEAD is clean and pushed, otherwise run locally with a cap sized to the planned work - **added** — bun run scripts/eval-bg.ts status reads EXIT status from gstack-detach - **added** — bun run test:health reports PR-lane fallback rate, reuse, cancelled slice-minutes, flaky free tests and unseeded free tests - **changed** — EVAL_POLICY is v2 with pass-rate history reset only when case's own files or declared HARNESS_VERSION change - **changed** — Paid slices pack 7 minutes of work instead of 9 so more runners start at once The free suite is faster, its flakes are visible, and broken commands are gone. This release is a test, eval and CI audit wave. It touches no skill behavior. The paid PR lane keeps a cancelled run's finished results for the next push, waits briefly when pushes come in quick succession, and runs only the gate cases a change can affect once the change avoids a shared input. Every paid lane has a ceiling sized per runner, so a stuck shard ends as an honest TIMEOUT or not_run instead of holding a runner for four hours. The weekly census can no longer be cancelled by a branch dispatch, and a new weekly test-health report says which free tests are getting flaky or slow. PR evals keep finished work. A recover-receipts job restores the passes and failures of up to five cancelled runs of the same PR, checks where each came from, and hands them to the planner, so a re-push re-runs only what changed. A 90-second debounce skips a run that a newer push has already superseded; the evals-no-debounce label turns it off and evals-fresh turns reuse off. PR selection narrows where it can. Duration seeds, free-only workflows, free tests and free fixtures (listed in test/helpers/free-fixtures-data.ts) no longer force the full gate. Other files map to the paid cases that actually consume them, derived from imports, bin names, template placeholders and build outputs (scripts/pr-dependencies.ts); deleted files are placed the same way. Shared inputs (package.json, the CI image, setup, the preamble resolvers, the eval policy) still run the full gate. The job summary names every fallback file and its fix. bun run eval:bg:pr and friends dispatch CI when your HEAD is clean and pushed, and otherwise run locally with a cap sized to the planned work. Both paths end with ### gstack-detach EXIT= ###; bun run scripts/eval-bg.ts status reads it. Weekly test health. bun run test:health (and .github/workflows/test-health.yml, Mondays) reports PR-lane fallback rate, reuse, cancelled slice-minutes, flaky free tests over 5% of main runs, and unseeded free tests. Its tracking issue opens only from main. Branch census dispatches run the periodic lane only. Add -f include_gate_census=true for the gate census too, or dispatch evals.yml with -f evals_all=true for gate cases alone. The OSV scan opens a tracking issue when it fails on main, and a free test fails 14 days before any ignoreUntil suppression expires. EVAL_POLICY is v2. A case's pass-rate history resets only when its own files or the declared HARNESS_VERSION change, weeks for quarantine expiry count main runs only, and branch census trials count toward a case's history only when its files match a series main has run. Readers ignore records from a newer policy version and say how many they skipped. Shared-harness edits record a decision with bun run scripts/bump-harness-version.ts --bump|--non-behavioral. The 15 carve-section-loading- test files are one case-sharded file with a case id per skill (--case carve-section-loading-review); GSTACK_CARVE_SKILL is gone. skill-e2e-qa-workflow runs case by case. Paid slices pack 7 minutes of work (was 9), so more runners start at once. eval:select defaults to the PR profile. /cso docs say contained runtime and scanner runs are not available yet: no runtime profile is qualified and the scanner catalog is empty. ### 1.91.22.0 - Date: 2026-10-05 - Version: 1.91.22.0 - Original notes: https://raw.githubusercontent.com/garrytan/gstack/main/CHANGELOG.md - Permalink: https://whatsnew.fyi/product/gstack/releases/1.91.22.0 - **added** — Pin one attested base image per scanner (gitleaks, OSV-Scanner, Semgrep, zizmor, Trivy, Schemathesis) and SBOM generator for linux/amd64 and linux/arm64 in lib/cso/scanner-images/build-inputs.json - **added** — Dispatch cso-scanner-images.yml on main to build, qualify and propose the scanner catalog - **fixed** — OSV and Trivy reports now survive redaction by replacing advisory links and version numbers in place instead of discarding the whole report - **fixed** — Schemathesis scans now finish by budgeting 75% of the scanner deadline and accepting a max_time stop once every selected operation ran - **fixed** — Scanner qualification test fixture now lives where the executor mounts sources and declares a real dependency, allowing OSV and Trivy to exercise their offline databases lib/cso/scanner-images/build-inputs.json now pins one attested base image per scanner (gitleaks, OSV-Scanner, Semgrep, zizmor, Trivy, Schemathesis) for linux/amd64 and linux/arm64, plus the SBOM generator. None of the upstream images publish GitHub artifact attestations, so the bases come from garrytan/gstack-cso-scanner-bases release bases-2026.10.04.3: each re-publishes a pinned upstream digest with the offline Semgrep rules or OSV/Trivy databases added, and its workflow signs SLSA provenance and an SPDX SBOM. Every identity, statement-set digest and asset hash was re-verified independently before the state changed to reviewed. Dispatching cso-scanner-images.yml on main now builds, qualifies and proposes the scanner catalog; until that catalog merges, scans still report not assessed. OSV and Trivy reports survive redaction. Advisory links such as ntap-20210312-0006 read as phone numbers and four-part versions read as IP addresses, which used to discard the whole report. Scanner output now has each located span replaced in place; output is still withheld when a span cannot be located or crosses stdout and stderr. Schemathesis scans finish. Schemathesis 4.26+ fuzzes until --max-time is spent; the adapter now budgets 75% of the scanner deadline and accepts a max_time stop once every selected operation ran. The scanner qualification test runs. Its fixture now lives where the executor mounts sources and declares a real dependency, so OSV and Trivy exercise their offline databases. ### 1.91.27.0 — The first protected-main runtime staging run can finish, and a qualified scanner catalog can ship. - Date: 2026-10-05 - Version: 1.91.27.0 - Original notes: https://raw.githubusercontent.com/garrytan/gstack/main/CHANGELOG.md - Permalink: https://whatsnew.fyi/product/gstack/releases/1.91.27.0 - **changed** — Runtime and scanner release workflows now sign a package-level SPDX 2.3 document instead of the full document to fit within attestation limits - **changed** — Package-level SPDX documents drop file entries and file relationships, reducing size from 20 MB to approximately 0.8 MB for Rails - **changed** — SPDX document validation now rejects any document whose relationships name unknown elements - **fixed** — Scanner catalog revisions and Actions run URLs are now schema-bound helper metadata to prevent redaction failures during gstack-cso scans - **changed** — Persisted scanner outcomes now record the catalog revision and each profile's workflow run URL - **changed** — Staged-image test now runs version probes in the verifier container instead of the network anchor to avoid Node worker thread process limits - **fixed** — Scanner promotion job validation now passes regardless of whether the shipped catalog is empty or populated Rails SBOMs fit the attestation limit. BuildKit's Rails SBOM lists about 19,600 files (20 MB), past actions/attest's 16 MiB cap. The runtime and scanner release workflows now sign a package-level SPDX 2.3 document (scripts/cso-sbom-packages.jq: packages and package relationships kept, file entries and file relationships dropped, about 0.8 MB for Rails) and reject any document whose relationships name unknown elements. A qualified scanner catalog no longer breaks every scan. Persisted scanner outcomes record the catalog revision (cso-scanners- - ) and each profile's workflow run URL. The 11-digit Actions run id read as a phone number to the redactor, so every gstack-cso scan against a real catalog failed with REDACTION_FAILED. Catalog revisions and exact Actions run URLs are now schema-bound helper metadata; the same digits anywhere else are still redacted. Three tests that assumed the shipped catalog is empty now hold for either state, so the scanner promotion job's own validation passes. The staged-image test probes tools in a real role container. It ran npm --version and the other version probes inside the group's network anchor, which is limited to 8 processes; Node's worker threads exceed that and abort (exit 134). The probes now run in the verifier container that the same test already starts. Production code never executes in the anchor. ### 1.91.25.0 - Date: 2026-10-05 - Version: 1.91.25.0 - Original notes: https://raw.githubusercontent.com/garrytan/gstack/main/CHANGELOG.md - Permalink: https://whatsnew.fyi/product/gstack/releases/1.91.25.0 - **added** — Private corpora can now be scored through the public scorer with defineEvalCorpus in scripts/cso-eval.ts - **added** — Per-cell linux/amd64 and linux/arm64 platforms supported with one producer installation and provider identity per platform - **added** — Evaluation-only helper builds via bun run build:cso -- --evaluation-candidate --output that report evaluationOnly: true and are refused by setup, promotion and normal builds - **added** — Ingress now checks the staging run itself through cso-runtime-qualification.yml with verified provenance and protected-main workflow_dispatch requirements - **added** — Dispatch summary job shows the approver claimed images and optional evaluationRef before approval - **added** — Native gate evidence derives from JUnit executed-and-passed counts in scripts/cso-native-evidence.ts - **added** — Multi-payload security proofs support 1–8 assertions judged in one before/after pair - **added** — Requalification triggers that record helper ABI, isolation policy hash, image preparation digest and build-inputs revision - **changed** — Release profile changed to v3 with one repetition maintaining byte-identical full profile matrix - **changed** — Catalog promotion PRs now get their required checks with both promote jobs dispatching free-tests.yml on the new branch - **changed** — Producer cells are now opaque with input and receipt using only opaque cell id, mapping back to case and variant by evaluator - **fixed** — Skipped Docker tests no longer incorrectly read as passing in native gate evidence - **fixed** — PostgreSQL rows now list only the checks they need instead of unnecessary entries Private corpora score through the public scorer. scripts/cso-eval.ts accepts an injected corpus with the public layout (defineEvalCorpus), per-cell linux/amd64/linux/arm64 platforms with one producer installation and provider identity per platform, a release profile (v3, one repetition) and a hash-bound external v2 baseline. The full profile matrix is byte-identical to before. Evaluation-only helper builds. bun run build:cso -- --evaluation-candidate --output builds a helper unit from a cso-eval- candidate catalog outside the checkout. It reports evaluationOnly: true; setup, promotion and normal builds refuse it. The ingress checks the staging run itself. cso-runtime-qualification.yml resolves the staging run from verified provenance and requires a successful protected-main workflow_dispatch run whose ten qualify-native jobs all passed. A dispatch summary job shows the approver the claimed images and an optional evaluationRef before approval. Native gate evidence comes from test results. Booleans are derived from JUnit executed-and-passed counts (scripts/cso-native-evidence.ts); skipped Docker tests no longer read as passing, and PostgreSQL rows list only the checks they need. Catalog promotion PRs get their required checks. Both promote jobs dispatch free-tests.yml on the new branch. Multi-payload security proofs. A verification request's security may hold 1–8 assertions judged in one before/after pair; a single assertion hashes exactly as before. Producer cells are opaque. A producer's input and receipt name only an opaque cell id; the evaluator maps it back to the case and variant, so an agent with root on its cell cannot learn which answer it is graded against. Requalification triggers. Qualified catalogs record the helper ABI, isolation policy hash, image preparation digest and build-inputs revision; a free test fails when the committed catalog no longer matches the code. ### 1.91.15.0 — Skills read cleanly on Opus 5.5: stale facts fixed, shouting turned down, and the tests that locked the shouting in now check behavior. - Date: 2026-10-03 - Version: 1.91.15.0 - Original notes: https://raw.githubusercontent.com/garrytan/gstack/main/CHANGELOG.md - Permalink: https://whatsnew.fyi/product/gstack/releases/1.91.15.0 - **changed** — Transcript syncing now requires consent, with /sync-gbrain and gbrain sync skipping Claude Code and Codex session transcripts until transcript_ingest_mode is set to recent (last 90 days), all, or off - **changed** — Older stored answers such as letters and incremental responses are asked again - **changed** — Staged transcript pages are held on disk until transcript consent is provided - **changed** — Setting proactive=false now disables all suggestions including prompts to run commands - **changed** — Model overlays for Opus 5.5, Sonnet 5.5 and other point releases now use the generic Claude overlay instead of version-specific overlays - **changed** — Version-specific overlays for Opus 4.7, Opus 4.8 and Sonnet 5 apply only to those exact models with bare ID, dated snapshot or -latest - **changed** — open-gstack-browser now asks before replacing a live browser instead of killing it and leaves it running when nobody can answer - **removed** — setup-gbrain no longer writes its own CLAUDE.md search block, with /sync-gbrain as the sole writer Transcripts need your consent. /sync-gbrain and the gbrain sync skip Claude Code and Codex session transcripts until transcript_ingest_mode is recent (last 90 days) or all. If you never chose, the sync prints one line saying how. Other memory keeps syncing. Choose with /sync-gbrain or gstack-config set transcript_ingest_mode recent|all|off. Older stored answers (letters, incremental) get asked again. Staged transcript pages wait on disk until you consent. proactive=false means no suggestions at all, including want me to run /X?. gstack-config set proactive true restores them. Model overlays: Opus 5.5, Sonnet 5.5 and other point releases use the generic Claude overlay. The Opus 4.7, Opus 4.8 and Sonnet 5 overlays apply only to those exact models (bare ID, dated snapshot or -latest). --model forces one. open-gstack-browser asks before replacing a live browser instead of killing it, and leaves it running when nobody can answer. setup-gbrain no longer writes its own CLAUDE.md search block; /sync-gbrain is the one writer. ### 1.91.16.0 - Date: 2026-10-03 - Version: 1.91.16.0 - Original notes: https://raw.githubusercontent.com/garrytan/gstack/main/CHANGELOG.md - Permalink: https://whatsnew.fyi/product/gstack/releases/1.91.16.0 - **added** — Add --status flag to print one row per install with host, tier, scope, source, and version - **added** — Add --host copilot to install GitHub Copilot CLI integration to ~/.copilot/skills - **added** — Add gstack-config set disabled_skills to turn off skills with typo correction and upgrade persistence - **added** — Add gstack-context-recovery for worktree-isolated session context recovery - **changed** — Setup and /gstack-upgrade now end with status rows and indicate which host failed and how to retry - **changed** — Change --host codex to no longer touch Claude's hooks - **changed** — Change bare ./setup to install for Claude Code instead of requiring --host auto for detection - **changed** — Upgrades now refresh every registered host in its own process, preserving previous working installs on failure - **changed** — Setup now rejects unknown options before writing anything and suggests the correct option - **changed** — Prevent second checkout from silently repointing the global Claude link; use --host --global on purpose - **changed** — Codex now uses model selection order: named model for request, GSTACK_CODEX_MODEL, Codex config.toml, then gpt-6-astra - **changed** — gstack now prints CODEX_MODEL and source before any paid call and stops with repair message on invalid choice - **changed** — Outside voices now state their own timeout at most 10 minutes instead of being cut off at 2 or 5 minutes - **changed** — Installs in renamed folders, project-vendored copies, CLAUDE_CONFIG_DIR, and CODEX_HOME get their own rendered skills pointing at the right root - **changed** — Paths with spaces now get a space-free alias - **fixed** — Fix /cso report to show not assessed with what ran, what's missing, why, and next step when nothing was assessed - **fixed** — Fix Windows and macOS to reclaim leases whose process ID now belongs to an unrelated process - **fixed** — Fix unreadable lease left by older gstack no longer blocks start - **fixed** — Fix make-pdf --toc to print real page numbers and survive empty headings and reused ids - **fixed** — Fix make-pdf --toc to exit with code 3 instead of printing empty cells when numbers cannot be verified - **fixed** — Fix design images to work after OpenAI retires gpt-image-1 by using gpt-5.5 with image generation pinned to gpt-image-2 See every install. ./setup --status prints one row per install: host, tier, scope, source, version. Setup and /gstack-upgrade end with the same rows and say which host failed and how to retry. Nothing is written by --status. Upgrades refresh every registered host, each in its own process. A failed host keeps its previous working install. --host codex no longer touches Claude's hooks, and a second checkout no longer silently repoints the global Claude link (use --global on purpose). Setup rejects unknown options before writing anything and suggests the right one. Bare ./setup installs for Claude Code; use --host auto to detect every agent. Host tiers. Every host declares a support tier: Claude is full; Codex, Kiro, Factory, OpenCode, Cursor and the new GitHub Copilot CLI host are experimental; Slate, OpenClaw, Hermes and GBrain are instruction-only. On hosts without hooks, /careful, /freeze and /guard say advisory, not blocked. GitHub Copilot CLI: ./setup --host copilot installs to ~/.copilot/skills (experimental). Turn off skills you don't use: gstack-config set disabled_skills make-pdf,pair-agent. Typos get the closest name, "" re-enables everything, and the setting survives upgrades. Worktree-isolated sessions start skills. The start command is one literal line, context recovery moved into gstack-context-recovery, and skill blocks no longer eval gstack helpers. Installs in renamed folders, project-vendored copies, CLAUDE_CONFIG_DIR and CODEX_HOME get their own rendered skills that point at the right root; paths with spaces get a space-free alias. Codex uses your model. Order: a model named for the request, GSTACK_CODEX_MODEL, your Codex config.toml (review_model first for native review), then gpt-6-astra. gstack prints CODEX_MODEL: … (source: …) before any paid call and stops with a repair message when the choice is invalid. Outside voices state their own timeout (at most 10 minutes) and are no longer cut off at 2 or 5 minutes. /cso tells the truth. A report where nothing was assessed reads not assessed with what ran, what's missing, why and the next step. On Windows and macOS a lease whose process ID now belongs to an unrelated process is reclaimed; one unreadable lease left by an older gstack no longer blocks start. make-pdf --toc prints real page numbers and its links survive empty headings and reused ids. If the numbers can't be verified, it exits 3 instead of printing empty cells. Design images keep working after OpenAI retires gpt-image-1 on Oct 23. The design binary uses gpt-5.5 with image generation pinned to gpt-image-2; GSTACK_DESIGN_MODEL overrides it, and bun run design/scripts/live-model-check.ts checks a key against the defaults. ### 1.91.19.0 — A check that did not run now says so, and memory stops losing transcripts. - Date: 2026-10-03 - Version: 1.91.19.0 - Original notes: https://raw.githubusercontent.com/garrytan/gstack/main/CHANGELOG.md - Permalink: https://whatsnew.fyi/product/gstack/releases/1.91.19.0 - **fixed** — Memory ingest now marks a transcript saved only after gbrain confirms it landed - **fixed** — Learnings that could not be written now report the failure instead of silently losing data - **fixed** — Codex review with sandbox that could not start now prints unavailable with reason and fix command - **fixed** — Retired Codex model now prints unavailable with reason and fix command - **fixed** — Design binary killed at launch now prints unavailable with reason and fix command - **fixed** — Learnings search with no Bun now prints unavailable with reason and fix command - **added** — New docs/troubleshooting.md section for each unavailable message - **changed** — Outside reviews go through one classifier that reads the text, stderr and exit status - **fixed** — Codex reviews that could not run print Codex outside review unavailable with the fix - **changed** — /ship and /review show missing Codex coverage instead of passing when review could not run - **fixed** — Memory ingest checks that each page landed before marking it saved and retries skipped pages - **added** — Memory ingest sets aside and names one page that keeps breaking a batch - **added** — Bounded catch-up per /sync-gbrain re-imports transcripts older versions lost with gstack-memory-ingest --reconcile --dry-run preview option - **changed** — Transcripts import into a private gbrain source per repository - **changed** — Setup installs real copies of gstack router which Codex requires - **changed** — Codex, Factory, OpenCode, Cursor, Copilot and Kiro find gstack router honoring CODEX_HOME and exported GSTACK_ROOT - **added** — ./setup --status reports whether each install's router is a real file and its section links resolve - **fixed** — Pushes no longer blocked by false positives from diagram coordinates, session = requests.Session(), CLAUDE.local.md, four-part version numbers and postgres:postgres@localhost - **fixed** — Windows /freeze, /guard and /investigate no longer deny every edit - **fixed** — Windows generators no longer crash with EEXIST - **fixed** — /ship in a repo without a VERSION file now ships without a version change instead of stopping Codex and the other non-Claude hosts find gstack in every step of every skill. This release closes the severe bugs left in the tracker. Two promises lead. First, nothing is silently lost: memory ingest marks a transcript saved only after gbrain confirms it landed, and learnings that could not be written say so. Second, no false all-clear: a Codex review whose sandbox could not start, a retired Codex model, a design binary killed at launch, and a learnings search with no Bun all used to read as ready, pass or no results. Each now prints not run or unavailable with the reason and the fix command, and every one of those messages has a section in the new docs/troubleshooting.md. Gates tell the truth. Outside reviews go through one classifier that reads the text, stderr and exit status. Codex reviews that could not run print Codex outside review unavailable: with the fix, and /ship and /review show them as missing coverage, never as passed. Memory keeps what you gave it. Memory ingest checks that each page landed before marking it saved, retries pages gbrain skipped, and sets aside (and names) one page that keeps breaking a batch. After upgrading, a bounded catch-up per /sync-gbrain re-imports transcripts older versions lost (gstack-memory-ingest --reconcile --dry-run previews it). Transcripts import into a private gbrain source per repository. Codex, Factory, OpenCode, Cursor, Copilot and Kiro see the gstack router (setup installs real copies, which Codex requires), get the design and make-pdf binaries, and every skill block finds gstack on its own, honoring CODEX_HOME and an exported GSTACK_ROOT. ./setup --status says whether each install's router is a real file and its section links resolve. Pushes stop being blocked by false positives: diagram coordinates, session = requests.Session(), CLAUDE.local.md, four-part version numbers and postgres:postgres@localhost. Real secrets still block. Windows: /freeze, /guard and /investigate stop denying every edit, the generators no longer crash with EEXIST, the node-server bundle builds, and the /cso helper builds with the current Windows SDK. /ship in a repo without a VERSION file ships without a version change instead of stopping. ### 1.91.18.0 — Transcript consent can cover only new sessions or only chosen repos, and Claude Code users can opt into a model-tuned skill overlay. - Date: 2026-10-03 - Version: 1.91.18.0 - Original notes: https://raw.githubusercontent.com/garrytan/gstack/main/CHANGELOG.md - Permalink: https://whatsnew.fyi/product/gstack/releases/1.91.18.0 - **added** — Add gstack-config unset command for unsetting configuration values - **added** — Add ./setup --claude-model flag to render and persist tuned skill overlays for different Claude models - **added** — Add gstack-design-doc-find helper to find design docs under custom state roots - **added** — Add readable variable names (PROBE_DIR, DEADLINE_FILE, DEADLINE_TOOL, EVIDENCE_TOOL) to /qa and /qa-only probe loops - **changed** — Make gbrain transcript gate ingest only new sessions started after consent, stored as new@ - **changed** — Make gstack-config set transcript_repos limit ingest to specified repositories - **changed** — Make every config write acquire a lock - **changed** — Refactor /design-shotgun to generate variants with a single $D variants --briefs-file call instead of one subagent per variant - **changed** — Update /design-shotgun to publish all images with gstack-design-claim to prevent earlier rounds from being overwritten - **changed** — Update /plan-eng-review, /plan-ceo-review, /plan-devex-review and /autoplan to find design docs through $GSTACK_STATE_ROOT - **fixed** — Fix pair-agent instruction block divider - **fixed** — Improve Codex filesystem boundary declaration at normal volume to maintain exclusion of ~/.claude/, ~/.agents/, .claude/skills/ and agents/ directories Narrower transcript consent. The gbrain transcript gate offers new sessions only, stored as new@ , which ingests only sessions that started after you answered. gstack-config set transcript_repos limits ingest to the repos you name. Turning ingest off keeps pages already staged, and only a narrower choice purges them. gstack-config unset is new, and every config write now takes a lock. Opt-in Claude overlay. ./setup --claude-model renders the model's tuned skill overlay (opus-4-7, opus-4-8, sonnet-5, fable-5) and keeps it across upgrades and gbrain-refresh. ./setup --claude-model claude returns to the generic overlay, and ./setup --status shows which one is active. Design docs follow your state root. /plan-eng-review, /plan-ceo-review, /plan-devex-review and /autoplan find /office-hours design docs under $GSTACK_STATE_ROOT through the new gstack-design-doc-find helper, so custom state roots no longer miss them. /design-shotgun generates its variants with one $D variants --briefs-file call instead of one subagent per variant, then publishes every image with gstack-design-claim, so earlier rounds are never overwritten. /qa and /qa-only probe loops use readable names (PROBE_DIR, DEADLINE_FILE, DEADLINE_TOOL, EVIDENCE_TOOL) and a short how one probe works summary. The commands and machine-read markers are unchanged. Codex outside voice states its filesystem boundary at normal volume. A 10-trial eval showed Codex still keeps out of ~/.claude/, ~/.agents/, .claude/skills/ and agents/. The pair-agent instruction block's divider is fixed. ### 1.91.17.0 - Date: 2026-10-03 - Version: 1.91.17.0 - Original notes: https://raw.githubusercontent.com/garrytan/gstack/main/CHANGELOG.md - Permalink: https://whatsnew.fyi/product/gstack/releases/1.91.17.0 - **added** — Remaining Work carries provenance with markers indicating how each item's outcome was determined: (path run), (path read), (path assumed) for commands and (target state checked), (code read), (path assumed) for writes - **added** — Checkpoints saved before this release show a banner under Verify first to indicate items without markers - **added** — Image name variants are tracked with suffixes (-2, -3, etc.) when a taken image name already exists, with stderr noting the real path and JSON reporting it - **added** — Recovery copies of image bytes are saved to a private temp directory location when API returns the image but local write fails - **added** — Every image command prints JSON output with requested, saved, selected, failures, and recovered fields, with exit codes 0 for ready result, 2 for nothing saved, and 3 for partial saves - **added** — Boards show only the current round and Skills report how many requested images were saved, writing paths to board-images.json - **added** — Approved image paths can be recorded in approved.json to open the exact approved image in a later session - **changed** — Scripts should read output paths from JSON using the outputPath field instead of assuming file names Remaining Work carries provenance. Every item starts with Open. and ends with how the saving session knows it: (path run) with the outcome, (path read) or (path assumed) for commands, flags, config values and files; (target state checked), (code read) or (path assumed) for writes. For example: 1. Open. Run the migration check with SWITCH_B=1 against staging. (path assumed) 2. Open. Run bun test test/billing.test.ts. (path run) exit 0 /context-restore keeps the saved order but shows item 2 under **Next steps** and item 1 under **Verify first**, and continue starts by verifying item 1 read-only instead of jumping to item 2. Checkpoints saved before this release have no markers, so their command, path and write items land under Verify first, with a one-line banner saying so. Nothing paid is lost. A taken image name gets -2, -3 and so on (variant-A-2.png); stderr says note: exists; saved to (existing file kept) and the JSON reports the real path. Every --retry attempt is its own saved image. If saving fails after the API returned the image, the bytes go to a private recovery copy in your temp directory and the message says where; a local write failure never buys a second image. Every image command prints JSON, even on failure: requested, saved, selected, failures, recovered. Exit 0 means the result is ready, 2 means nothing was saved, 3 means the run stopped after saving some images. Boards show this round only. Skills tell you how many of the requested images were saved, write the round's printed paths to board-images.json, build the board with $D compare --images-file, archive an old feedback.json first, and record approved_path in approved.json, so a later session opens exactly the image you approved. Old letter-only approvals still work. If you script $D, read paths from the JSON instead of assuming the file name: out=$($D generate --brief pricing page --output designs/pricing.png); rc=$? img=$(printf '%s' "$out" | jq -r .outputPath) [ "$rc" -eq 0 ] && $D check --image "$img" --brief "pricing page" variants prints its list in .paths; compare takes it losslessly with --images-file paths.json. Windows console flashes (#1784) were confirmed fixed on main (v1.91.15.0) by @kaiwulff on a real Windows 11 desktop; this release ships no code for them. ### 1.91.13.0 — /autoplan runs again for anyone with a SessionStart hook, and /land-and-deploy never merges over red CI. - Date: 2026-10-02 - Version: 1.91.13.0 - Original notes: https://raw.githubusercontent.com/garrytan/gstack/main/CHANGELOG.md - Permalink: https://whatsnew.fyi/product/gstack/releases/1.91.13.0 - **changed** — /autoplan now works in sessions with SessionStart hooks, after /compact, /clear and a forked resume, and on Windows - **changed** — /autoplan provides a named reason and troubleshooting instructions when it blocks - **changed** — /autoplan warns instead of locking out when a future Claude Code journal shape is unrecognized but healthy - **changed** — /land-and-deploy now waits for all checks on the exact commit it merges, not only required ones, including gh pr merge --auto - **changed** — /land-and-deploy requires explicit approval for a red or pending optional check, or a commit with no CI at all - **added** — Nested-group remotes (GitLab subgroups, Azure DevOps, Bitbucket Server) now get their own projects/ bucket - **changed** — /context-restore only treats the current project's checkpoints as latest - **changed** — never-ask preferences now auto-decide questions you tuned to never-ask through /plan-tune /autoplan: works in sessions with SessionStart hooks, after /compact, /clear and a forked resume, and on Windows. When it does block, the message names the reason and how to run the reviews by hand (docs/autoplan-guard-troubleshooting.md). If a future Claude Code journal shape is unrecognized but healthy, /autoplan warns phase publication was NOT verified for this session and continues instead of locking you out. /land-and-deploy is stricter. It now waits for all checks on the exact commit it merges, not only required ones, and that includes gh pr merge --auto. A red or pending optional check, or a commit with no CI at all, needs your explicit approval for that commit. The verdict comes from bin/gstack-ci-gate (--help documents it). Nested-group remotes (GitLab subgroups, Azure DevOps, Bitbucket Server) now get their own projects/ - / bucket. GitHub buckets do not move. The old shared bucket is left in place; gstack-slug --adopt-legacy lists it and copies only the files you confirm. /context-restore only treats this project's checkpoints as latest. never-ask preferences now fire (#2901). Questions you tuned to never-ask through /plan-tune will start auto-deciding. One-way questions, including the new land-and-deploy CI approvals, never auto-decide. ### 1.91.12.0 — Weekly evals finish in minutes, not hours, and a red now means something. - Date: 2026-10-01 - Version: 1.91.12.0 - Original notes: https://raw.githubusercontent.com/garrytan/gstack/main/CHANGELOG.md - Permalink: https://whatsnew.fyi/product/gstack/releases/1.91.12.0 - **fixed** — Fixed two crash bugs - **fixed** — Improved weekly paid eval test run performance from 2 hours 45 minutes to 9-minute budget with tests running on separate machines - **changed** — Removed automatic retries from test execution - **changed** — Tests that grade a live model's choice now run three trials at once and pass on two instead of single-trial execution - **changed** — Promise validation now fails on any single bad trial instead of allowing individual failures - **fixed** — gstack connect --supervise now restarts a crashed browser - **fixed** — Compiled /cso installs can witness runtime-tested assertions again - **changed** — Added required typecheck job in CI to prevent crash bugs Two real crash bugs fixed, and product code typechecks clean in CI. The weekly paid eval run took 2 hours 45 minutes on Sept 28, almost all of it one timed-out test retried. It now runs every test on its own machine within a 9-minute budget, and a single long case runs one case per process. Automatic retries are gone. Tests that grade a live model's choice run three trials at once and pass on two; promises users rely on (asks before deciding, leaves git alone, no writes in plan mode) fail on any single bad trial. $B connect --supervise finally restarts a crashed browser, compiled /cso installs can witness runtime-tested assertions again, and a required typecheck job keeps that class of bug out. ### 1.91.8.0 - Date: 2026-09-29 - Version: 1.91.8.0 - Original notes: https://raw.githubusercontent.com/garrytan/gstack/main/CHANGELOG.md - Permalink: https://whatsnew.fyi/product/gstack/releases/1.91.8.0 - **removed** — Remove test files skill-e2e-autoplan-chain, skill-e2e-plan-ceo-finding-count, skill-e2e-plan-eng-finding-count, skill-e2e-plan-design-finding-count, and skill-e2e-plan-devex-finding-count - **removed** — Remove test files skill-llm-eval-spec, skill-e2e-spec-execute, gemini-e2e, skill-e2e-ship-idempotency, skill-e2e-conductor-prose, codex-e2e-plan-format, skill-e2e-brain-privacy-gate, skill-e2e-opus-47, and two duplicate overlay wrappers - **changed** — Replace faked product tests with real product integration for design serve() server, terminal-agent /internal/grant and /internal/revoke bearer auth, /health liveness, and brain-sync consent before egress - **changed** — Fold per-incident replay files verbatim into twelve detector owner tests - **changed** — Derive paid touchfiles through test/touchfiles.test.ts to verify each case's key covers its eval's static helper and fixture imports - **changed** — Update paid planner to skip files for tier lanes when all registered E2E ids belong to the other tier - **changed** — Update seven paid evals to capture with default model from resolveEvalModel instead of pinned claude-opus-4-7 or claude-sonnet-4-6 - **changed** — Move memory-pipeline, ios-qa, ios-qa-swift-build, and plan-tune-cathedral to free suite as they make no model calls The test suite is smaller and every remaining test maps to a product contract: 227 fewer test files, about 90,000 fewer lines of tests, helpers and fixtures, and the weekly paid lane drops the five evals that were red eight runs straight. Removed: The never-green finding-count cluster: `skill-e2e-autoplan-chain` and `skill-e2e-plan-{ceo,eng,design,devex}-finding-count`. Paid files that asserted nothing or could not pass: `skill-llm-eval-spec`, `skill-e2e-spec-execute`, `gemini-e2e`, `skill-e2e-ship-idempotency`, `skill-e2e-conductor-prose`, `codex-e2e-plan-format`, `skill-e2e-brain-privacy-gate`, `skill-e2e-opus-47` and two duplicate overlay wrappers. Changed: Tests that faked the product now drive it: the design `serve()` server, terminal-agent `/internal/grant` and `/internal/revoke` bearer auth, `/health` liveness, and brain-sync consent before egress. Per-incident replay files are folded verbatim into twelve detector owner tests. Paid touchfiles are derived: `test/touchfiles.test.ts` checks that each case's key covers its eval's static helper/fixture imports and the fixture paths it names. The paid planner skips a file for a tier lane when every E2E id it registers belongs to the other tier. Seven paid evals that pinned `claude-opus-4-7` or `claude-sonnet-4-6` now capture with the default model from `resolveEvalModel`. memory-pipeline, ios-qa, ios-qa-swift-build and plan-tune-cathedral make no model calls and now run in the free suite. ### 1.91.9.0 - Date: 2026-09-29 - Version: 1.91.9.0 - Original notes: https://raw.githubusercontent.com/garrytan/gstack/main/CHANGELOG.md - Permalink: https://whatsnew.fyi/product/gstack/releases/1.91.9.0 - **added** — Add /test-audit command to find low-value, implementation-coupled and duplicate tests and the test-only exports they keep alive - **added** — Add docs/test-value-bar.md explaining the authoring gate, value and retirement cards, weak paths, coverage numbers, base control, overrides and degraded-mode messages - **added** — Add optional CLAUDE.md keys: Generation cap (default 5), Base control (auto or off), Base control budget in seconds (default 90) and Star rating (auto or off) - **changed** — /ship Step 7 extends existing tests before writing new ones and writes at most 5 tests per generation pass instead of 20 - **changed** — /ship regression tests must fail at HEAD before the repair and pass at the base branch in a temporary worktree (Node/Bun), within 90 seconds per test and 3 minutes per run - **changed** — PR body adds Test value line showing K tests written, R rejected by the authoring gate, E existing tests extended, W paths weakly covered - **changed** — /plan-eng-review and /plan-ceo-review state one rule: every behavior tested, no test without a regression it would catch - **changed** — /review's testing specialist reports source-grep tests, test-only exports and other low-value tests in the diff as INFORMATIONAL findings with caller-search evidence - **changed** — /qa and /qa-only apply the bar's last two questions before writing or proposing a regression test and record its value card Every gstack workflow that proposes, writes, reviews or ships tests now applies one test value bar: a test earns its place by protecting behavior a real regression would break, and test count is not a goal. `/ship`'s coverage gate counts only tests that clear that bar, and the new `/test-audit` sweeps existing tests for ones that cost more than they protect. `/ship`'s coverage number can drop for unchanged code, because a path covered only by a smoke test (★) no longer counts. Added: `/test-audit [path ...] [--since ] [--max-candidates N]` finds low-value, implementation-coupled and duplicate tests and the test-only exports they keep alive. `docs/test-value-bar.md` explains the authoring gate, value and retirement cards, weak paths, the value-weighted (X) and any-test (Y) coverage numbers, base control, the overrides and every degraded-mode message. Optional CLAUDE.md `## Test Coverage` keys: `Generation cap:` (default 5), `Base control:` (`auto` or `off`), `Base control budget:` (seconds, default 90) and `Star rating:` (`auto` or `off`). Changed: `/ship` Step 7 extends existing tests before writing new ones and writes at most 5 tests per generation pass (was 20). `/ship` regression tests must fail at HEAD before the repair and pass at the base branch in a temporary worktree (Node/Bun), within 90 seconds per test and 3 minutes per run. The PR body adds `Test value: K tests written, R rejected by the authoring gate, E existing tests extended, W paths weakly covered`. `/plan-eng-review` and `/plan-ceo-review` state one rule: every behavior tested, no test without a regression it would catch. `/review`'s testing specialist reports source-grep tests, test-only exports and other low-value tests in the diff as INFORMATIONAL findings with caller-search evidence. `/qa` and `/qa-only` apply the bar's last two questions before writing or proposing a regression test and record its value card. ### 1.91.5.0 - Date: 2026-09-28 - Version: 1.91.5.0 - Original notes: https://raw.githubusercontent.com/garrytan/gstack/main/CHANGELOG.md - Permalink: https://whatsnew.fyi/product/gstack/releases/1.91.5.0 - **added** — Add `bun run test:ubicloud [test:free args]` to run the complete free suite on an ephemeral Ubicloud VM - **added** — Add `bun run test:ubicloud --record-durations` to refresh `scripts/free-test-durations.json` - **added** — Add `scripts/ubicloud/ubi-runner.sh` to run any command on a Ubicloud VM - **changed** — On Linux, `bun run test` now starts one shard per available CPU, up to 16; macOS and Windows keep the limit of six - **changed** — Re-record the duration seed with browser, display, and CSO tests actually running, and split the slowest test file into four files - **changed** — Full-suite and CI planning runs now name any test file missing from the duration seed - **changed** — Windows CI lane now gets the same single serial retry for attributed failures as the required Linux lane - **changed** — A new push to a pull request now cancels the previous commit's paid eval run - **changed** — LLM-judge skill quality evals require a clarity score of 3 instead of 4 - **changed** — Terminal-agent startup race waits up to 8 seconds for a cold agent start on heavily loaded machines - **changed** — Invalid Retry-After cases accept timer delays below the next 4-second backoff step on heavily loaded machines The free suite now finishes in about half the time on a 16-core Linux machine, `bun run test:ubicloud` runs it on a fresh 16-vCPU Ubicloud VM from any dev box, container, or cloud sandbox, and re-pushing a PR no longer waits behind the previous commit's eval run. Added: `bun run test:ubicloud [test:free args]` runs the complete free suite on an ephemeral Ubicloud VM. `bun run test:ubicloud --record-durations` refreshes `scripts/free-test-durations.json`. `scripts/ubicloud/ubi-runner.sh` runs any command on a Ubicloud VM. Changed: On Linux, `bun run test` now starts one shard per available CPU, up to 16; macOS and Windows keep the limit of six. The duration seed is re-recorded with browser, display, and CSO tests actually running, and the slowest test file is split into four files. Full-suite and CI planning runs name any test file missing from the duration seed. The Windows CI lane gets the same single serial retry for attributed failures as the required Linux lane. A new push to a pull request now cancels the previous commit's paid eval run. LLM-judge skill quality evals require a clarity score of 3 instead of 4. Two timing-sensitive tests allow for a heavily loaded machine: the terminal-agent startup race waits up to 8 seconds for a cold agent start, and the invalid Retry-After cases accept timer delays below the next 4-second backoff step. ### 1.91.4.0 - Date: 2026-09-28 - Version: 1.91.4.0 - Original notes: https://raw.githubusercontent.com/garrytan/gstack/main/CHANGELOG.md - Permalink: https://whatsnew.fyi/product/gstack/releases/1.91.4.0 - **added** — Added cookie-import-browser opera and opera-gx (also operagx and Opera GX) on Windows - **fixed** — Windows v10 cookies from current Chromium databases decrypted with 32 bytes of hash in front of the value, so imports could report success while the site stayed signed out; the SHA-256(host_key) prefix is now removed when present - **changed** — App-Bound Encryption rows in a browser without native extraction keep their receipt (counts and reasons) and name the recovery as $B handoff, sign in, $B resume - **changed** — Missing browsers, missing profiles and ambiguous profile selection now say what was checked and what to run next - **fixed** — A relative APPDATA no longer redirects the Opera root - **changed** — BROWSER.md has a Windows Opera walkthrough and tables for receipt failure reasons and import error codes Windows users can copy signed-in cookies from Opera and Opera GX into gstack's browser. On Windows, where Chrome, Edge and Brave increasingly store App-Bound Encryption cookies that gstack cannot decrypt, Opera and Opera GX still use DPAPI-protected cookies, so they may be the browsers where import keeps working. Added: `cookie-import-browser opera` and `opera-gx` (also `operagx` and "Opera GX") on Windows. Fixed: Windows v10 cookies from current Chromium databases decrypted with 32 bytes of hash in front of the value, so imports could report success while the site stayed signed out. The SHA-256(host_key) prefix is now removed when present. App-Bound Encryption rows in a browser without native extraction keep their receipt (counts and reasons) and name the recovery: `$B handoff`, sign in, `$B resume`. Missing browsers, missing profiles and ambiguous profile selection now say what was checked and what to run next. A relative `APPDATA` no longer redirects the Opera root. Changed: BROWSER.md has a Windows Opera walkthrough and tables for receipt failure reasons and import error codes. A Windows CI test decrypts a host-bound Opera cookie with real DPAPI through the Node server runtime. ### 1.91.6.0 - Date: 2026-09-28 - Version: 1.91.6.0 - Original notes: https://raw.githubusercontent.com/garrytan/gstack/main/CHANGELOG.md - Permalink: https://whatsnew.fyi/product/gstack/releases/1.91.6.0 - **changed** — PR eval slices are now balanced by how long each eval actually takes, reducing the time of the slowest slice from carrying most of the run - **changed** — The paid eval planner re-packs slices using recorded per-file wall times from real CI runs in scripts/paid-test-durations.json - **added** — bun run scripts/test-paid-shards.ts --report --write-durations merges a report's executed single-file shard times into the seed PR eval slices are balanced by how long each eval actually takes, so the slowest slice no longer carries most of the run. Changed: The paid eval planner re-packs slices using recorded per-file wall times from real CI runs (`scripts/paid-test-durations.json`). Estimated from the recorded times with two workers per slice, the heaviest slice for a typical PR run drops from about 15 minutes to 12 (the length of the single longest eval), and for the full gate census from about 17 minutes to 13. `bun run scripts/test-paid-shards.ts --report --write-durations` merges a report's executed single-file shard times into the seed. ### 1.91.7.0 - Date: 2026-09-28 - Version: 1.91.7.0 - Original notes: https://raw.githubusercontent.com/garrytan/gstack/main/CHANGELOG.md - Permalink: https://whatsnew.fyi/product/gstack/releases/1.91.7.0 - **added** — Functional QA checks native outputs and durable effects, including invalid inputs, authorization, cancellation, retries, duplicate delivery, concurrency and recovery - **added** — Exploratory QA turns observations into targeted probes and proposed regression tests - **added** — QA can test APIs, CLIs, jobs, workers and webhooks with the project's own tools, without starting a browser - **changed** — /qa and /qa-only load instructions for the selected surface on each supported host - **changed** — Functional and report-only runs never bootstrap a framework or inherit browser setup permission - **changed** — /review and /ship run bounded exploration even on small non-browser diffs without a plan or server - **changed** — Review collects checklist, specialist, QA and adversarial findings before one parent-owned fix phase - **changed** — Every ship consumes a completed documentation audit before final checks and publication QA can test APIs, CLIs, jobs, workers and webhooks with the project's own tools, without starting a browser. Review and ship now run bounded exploratory checks, and every ship audits relevant documentation before final verification and publication. Added: Functional QA checks native outputs and durable effects, including invalid inputs, authorization, cancellation, retries, duplicate delivery, concurrency and recovery. Exploratory QA turns observations into targeted probes and proposed regression tests. Changed: `/qa` and `/qa-only` load instructions for the selected surface on each supported host. Functional and report-only runs never bootstrap a framework or inherit browser setup permission. `/review` and `/ship` run bounded exploration even on small non-browser diffs without a plan or server. Review collects checklist, specialist, QA and adversarial findings before one parent-owned fix phase. Every ship consumes a completed documentation audit before final checks and publication. ### 1.91.1.0 - Date: 2026-09-25 - Version: 1.91.1.0 - Original notes: https://raw.githubusercontent.com/garrytan/gstack/main/CHANGELOG.md - Permalink: https://whatsnew.fyi/product/gstack/releases/1.91.1.0 - **fixed** — Find Impeccable installed through the Claude Code plugin marketplace, including a trusted custom CLAUDE_CONFIG_DIR - **fixed** — Select plugin versions deterministically with strict semver ordering and support for hash-named versions - **fixed** — Use the same strict ordering for the standalone engine cache, retaining its semver-only policy and precedence - **fixed** — Preserve repository and symlink execution boundaries, sanitize discovery diagnostics, and quote or suppress launcher hints when a filename cannot be represented safely - **fixed** — Compare canonical HOME paths at the trust boundary, so home-directory aliases and dotfiles repositories do not hide user-installed engines or admit private home files as scan targets - **added** — Plugin discovery, handoff, malformed-version and adversarial-path regressions, plus Windows-safe discovery cases selected by the native Windows test lane Fixed: Find Impeccable installed through the Claude Code plugin marketplace, including a trusted custom `CLAUDE_CONFIG_DIR`. Select plugin versions deterministically with strict semver ordering and support for hash-named versions. Use the same strict ordering for the standalone engine cache, retaining its semver-only policy and precedence. Preserve repository and symlink execution boundaries, sanitize discovery diagnostics, and quote or suppress launcher hints when a filename cannot be represented safely. Compare canonical HOME paths at the trust boundary, so home-directory aliases and dotfiles repositories do not hide user-installed engines or admit private home files as scan targets. Add plugin discovery, handoff, malformed-version and adversarial-path regressions, plus Windows-safe discovery cases selected by the native Windows test lane. ### 1.91.2.0 - Date: 2026-09-25 - Version: 1.91.2.0 - Original notes: https://raw.githubusercontent.com/garrytan/gstack/main/CHANGELOG.md - Permalink: https://whatsnew.fyi/product/gstack/releases/1.91.2.0 - **added** — /sync-gbrain can check whether the current worktree's pages are readable without writing a probe page or deleting guidance when the answer is uncertain - **fixed** — Readiness now matches the registered source to this worktree before checking its page count, then reads a page from that same source - **changed** — The Windows readiness fixture invokes the same Bun-backed gbrain command through a .cmd shim and preserves the inherited PATH spelling and separator - **fixed** — Importing terminal-agent helpers no longer boots the CLI or installs global process handlers - **changed** — The developer-experience question-floor check recognizes a grounded target choice by its structure rather than one phrasing - **changed** — Engineering review follows its preparation and complexity-gate paths in order, keeps each decision and required report write verifiable - **changed** — The PR evaluation plan includes source-scoped readiness coverage and the resulting judge and supervision budgets without reducing individual test timeouts, retries, or concurrency `/sync-gbrain` can check whether the current worktree's pages are readable without writing a probe page or deleting guidance when the answer is uncertain. Fixed: Readiness now matches the registered source to this worktree before checking its page count, then reads a page from that same source. The Windows readiness fixture invokes the same Bun-backed `gbrain` command through a `.cmd` shim and preserves the inherited PATH spelling and separator. Importing terminal-agent helpers no longer boots the CLI or installs global process handlers. The developer-experience question-floor check recognizes a grounded target choice by its structure rather than one phrasing. Engineering review follows its preparation and complexity-gate paths in order, keeps each decision and required report write verifiable. Changed: The PR evaluation plan includes source-scoped readiness coverage and the resulting judge and supervision budgets without reducing individual test timeouts, retries, or concurrency. ### 1.89.1.0 - Date: 2026-09-24 - Version: 1.89.1.0 - Original notes: https://raw.githubusercontent.com/garrytan/gstack/main/CHANGELOG.md - Permalink: https://whatsnew.fyi/product/gstack/releases/1.89.1.0 - **removed** — Continuous checkpoint commits; skills no longer ask users to enable automatic WIP: commits or instruct agents to create them - **removed** — /ship no longer exports checkpoint context or rewrites WIP history - **fixed** — Native DevEx evaluation replies; the test driver recognizes the editor hint shown when Claude Code focuses a custom answer - **fixed** — Shared-code review evaluation replies; the no-change driver can use an explicit preservation description to interpret a shorthand label - **fixed** — Windows timeout test readiness; the process-cleanup regression waits for a live descendant before firing its registered deadline - **changed** — Design consultation workflow; font and design rules now precede proposal drafting and independent input - **changed** — Shipping and engineering-review gates; missing dispatched reviewers now have an explicit stop/resume path - **changed** — Engineering review separates scope assessment, selector answers and remedy decisions, with ordered preparation and recovery Removed: Continuous checkpoint commits. Skills no longer ask users to enable automatic `WIP:` commits or instruct agents to create them. Checkpoint-specific shipping cleanup. `/ship` no longer exports checkpoint context or rewrites WIP history. Fixed: Native DevEx evaluation replies. The test driver recognizes the editor hint shown when Claude Code focuses a custom answer. Shared-code review evaluation replies. The no-change driver can use an explicit preservation description to interpret a shorthand label. Windows timeout test readiness. The process-cleanup regression waits for a live descendant before firing its registered deadline. Design consultation workflow. Font and design rules now precede proposal drafting and independent input. Shipping and engineering-review gates. Missing dispatched reviewers now have an explicit stop/resume path. Engineering review separates scope assessment, selector answers and remedy decisions, with ordered preparation and recovery. ### 1.90.0.0 - Date: 2026-09-24 - Version: 1.90.0.0 - Original notes: https://raw.githubusercontent.com/garrytan/gstack/main/CHANGELOG.md - Permalink: https://whatsnew.fyi/product/gstack/releases/1.90.0.0 - **changed** — Cookie imports now keep the chosen browser, profile, and destination explicit and show partial failures - **added** — macOS Dia discovery and profile selection using the existing Chromium cookie reader - **added** — Optional sign-in verification against an exact visible identity assertion on the selected destination with separate copied and verified results - **added** — Explicit current-origin storage recovery with opt-in reset that clears the origin's localStorage and only the target tab's sessionStorage - **fixed** — Prefer renamed profiles from Local State and distinguish duplicate names - **fixed** — Require profile selection rather than guessing among plausible accounts - **changed** — Register picker imports with the browser's imported-domain security guard and reject cross-origin picker mutations - **changed** — Bind asynchronous operations to their original destination - **fixed** — Show complete, partial, zero, and failed imports accurately - **changed** — Bound credential subprocess output and cleanup with retry only for transient database reads - **fixed** — Prevent automatic replay of cookie-import mutations - **changed** — Picker handoff codes last five minutes and remain single-use - **changed** — Native Windows extraction uses a sandboxed owned-process pipe-only path with bounded cleanup and no TCP fallback Cookie imports now keep the chosen browser, profile, and destination explicit, show partial failures, and distinguish copying cookies from proving that you are signed in. Added: macOS Dia discovery and profile selection, using the existing Chromium cookie reader. Optional sign-in verification against an exact, visible identity assertion on the selected destination, with separate copied and verified results. Explicit current-origin storage recovery. Storage is preserved by default; an opted-in reset clears that origin's localStorage and only the target tab's sessionStorage. Fixed: Prefer renamed profiles from Local State, distinguish duplicate names, and require selection rather than guessing among plausible accounts. Register picker imports with the browser's imported-domain security guard, reject cross-origin picker mutations, and bind asynchronous operations to their original destination. Show complete, partial, zero, and failed imports accurately. Bound credential subprocess output and cleanup, retry only transient database reads, and prevent automatic replay of cookie-import mutations. Changed: Picker handoff codes last five minutes and remain single-use. Native Windows extraction uses a sandboxed, owned-process, pipe-only path with bounded cleanup and no TCP fallback. ### 1.89.0.0 - Date: 2026-09-24 - Version: 1.89.0.0 - Original notes: https://raw.githubusercontent.com/garrytan/gstack/main/CHANGELOG.md - Permalink: https://whatsnew.fyi/product/gstack/releases/1.89.0.0 - **added** — Add `/deslop-shared-libs` command to find places where sharing code could remove duplication and prevent repeated fixes - **added** — Add recommendations for useful shared-code extractions that report authored callers, prefer existing helpers, account for tests and integration, and explain reliability gains and risks - **changed** — Implement PR overlap checks that distinguish code changes from comment activity and check relevant older open PRs within a bounded scan - **changed** — Charge repeated page requests against the limit in PR overlap checks - **changed** — Report inaccessible history or truncated coverage in PR overlap checks - **changed** — Align engineering plans and code reviews to share one extraction rubric - **changed** — Extend `/plan-eng-review` to evaluate proposed callers with labeled assumptions - **changed** — Extend `/review` to check actual changed code and related callers for small diffs and Codex installations without Review Army - **changed** — Require approval for extraction advice and ensure it survives review persistence with its source evidence - **changed** — Prevent extraction advice from suppressing real defects - **changed** — Retain decision brief headings and closing tradeoff in native question tools with pros-and-cons heading and final summary Find shared code worth keeping. Get the evidence before you extract it. `/deslop-shared-libs` finds places where sharing code could remove duplication and prevent repeated fixes. Added: `/deslop-shared-libs` recommends useful shared-code extractions. Reports link authored callers, prefer existing helpers, account for tests and integration, and explain reliability gains and risks. Recent work includes PR overlap checks. The audit distinguishes code changes from comment activity, checks relevant older open PRs within a bounded scan, charges repeated page requests against the limit, and reports inaccessible history or truncated coverage. Changed: Engineering plans and code reviews share one extraction rubric. `/plan-eng-review` can evaluate proposed callers with labeled assumptions. `/review` checks actual changed code and related callers even for small diffs and Codex installations without Review Army. Extraction advice stays separate from defects. Advice requires approval, survives review persistence with its source evidence, and cannot suppress a real defect. Decision briefs retain their headings and closing tradeoff in native question tools. The question carries its pros-and-cons heading and final summary; options retain their own benefits and drawbacks. ### 1.90.2.0 - Date: 2026-09-24 - Version: 1.90.2.0 - Original notes: https://raw.githubusercontent.com/garrytan/gstack/main/CHANGELOG.md - Permalink: https://whatsnew.fyi/product/gstack/releases/1.90.2.0 - **changed** — Local free-test workers follow available CPU affinity, with a minimum of one and the existing maximum of six - **changed** — Deployment reports distinguish deployment status, production health, staging verification and completed rollback - **fixed** — Browser-consent checks distinguish a promised new consent question from an immediate drive offer - **changed** — Review fixtures accept explicit no-change answers and coverage-reporting statements without authorizing source edits or index-flag changes - **fixed** — Merge fallback requires authoritative confirmation that neither an auto-merge request nor a queue entry exists - **fixed** — Rollback distinguishes true merge commits, squash merges and rebase ranges - **changed** — Synthetic terminals signal readiness; publication tests advance a scoped clock through the original polling sequence; watchdog scenarios share compilation but retain isolated executables and state Spend less time waiting for tests. Merge with clearer safeguards. The local test runner uses available CPUs and removes repeated setup without removing test scenarios. Independent question checks run concurrently rather than waiting for one another. `/land-and-deploy` ties your approval to the selected PR, head and destination branch, checks server state before a merge fallback, and keeps missing deployment evidence visible. Changed: Local free-test workers follow available CPU affinity, with a minimum of one and the existing maximum of six. Deployment reports distinguish deployment status, production health, staging verification and completed rollback. Fixed: Browser-consent checks distinguish a promised new consent question from an immediate drive offer. Review fixtures accept explicit no-change answers and coverage-reporting statements without authorizing source edits or index-flag changes. Merge fallback requires authoritative confirmation that neither an auto-merge request nor a queue entry exists. Rollback distinguishes true merge commits, squash merges and rebase ranges. Synthetic terminals signal readiness; publication tests advance a scoped clock through the original polling sequence; watchdog scenarios share compilation but retain isolated executables and state. ### 1.88.1.0 - Date: 2026-09-22 - Version: 1.88.1.0 - Original notes: https://raw.githubusercontent.com/garrytan/gstack/main/CHANGELOG.md - Permalink: https://whatsnew.fyi/product/gstack/releases/1.88.1.0 - **fixed** — Credential masking uses original spans mapped from normalized matches, so anchored assignments, repeated values, Unicode and entity input redact the flagged value without masking a later neighbor - **fixed** — Pre-push scans bind their ranges to the destination's name and effective URL, including separate push URLs - **fixed** — Hermetic evaluation children reject credential-shaped variables admitted through broad CI prefixes while preserving CI metadata, named provider authentication and explicit runner overrides - **fixed** — Browser agents belong to the persistent daemon and an exact process generation, with replacement requiring confirmed exit and failed startup retaining uncertain children - **fixed** — CSO lease recovery preserves 64-bit filesystem identities and nanosecond timestamps instead of rounding them - **fixed** — Settings mutations, backups and rollback resolve the selected symlink target and share its canonical lock - **fixed** — Artifact reinitialization updates managed allowlist entries while retaining the user suffix byte-for-byte, including comments and a missing final newline - **changed** — Required native macOS checks cover agent lifecycle, concurrent shutdown and linked settings - **changed** — Native Windows CSO suite exercises repeated commands and exact high-ID lease recovery on NTFS Credential masking follows the exact detected source, and pre-push scans follow the actual destination. Browser agents and CSO operations retain precise ownership, while settings updates and artifact reinitialization preserve user-owned data. Fixed: Credential masking uses original spans mapped from normalized matches, so anchored assignments, repeated values, Unicode and entity input redact the flagged value without masking a later neighbor. Pre-push scans bind their ranges to the destination's name and effective URL, including separate push URLs. Hermetic evaluation children reject credential-shaped variables admitted through broad CI prefixes, while preserving CI metadata, named provider authentication and explicit runner overrides. Browser agents belong to the persistent daemon and an exact process generation. Replacement requires confirmed exit, failed startup retains uncertain children. CSO lease recovery preserves 64-bit filesystem identities and nanosecond timestamps instead of rounding them. Settings mutations, backups and rollback resolve the selected symlink target and share its canonical lock. Artifact reinitialization updates managed allowlist entries while retaining the user suffix byte-for-byte, including comments and a missing final newline. Changed: Required native macOS checks cover agent lifecycle, concurrent shutdown and linked settings. The native Windows CSO suite exercises repeated commands and exact high-ID lease recovery on NTFS. ### 1.87.6.0 - Date: 2026-09-18 - Version: 1.87.6.0 - Original notes: https://raw.githubusercontent.com/garrytan/gstack/main/CHANGELOG.md - Permalink: https://whatsnew.fyi/product/gstack/releases/1.87.6.0 - **changed** — Review gates now retain proof and keep decisions, report checks, and publication checks in order when permissions, stale choices, or host metadata writes fail - **changed** — Coverage audits for /review, /ship, and plan reviews read concrete source and test files before drawing diagrams, so gaps are tied to code paths instead of diff and config noise - **changed** — Generation now validates every host and expected artifact, and Codex evaluation records retain failed execution and assertions - **changed** — Plan reviews carry approved decisions through scope changes and save complete reports before declaring completion - **changed** — CEO and engineering reviews save and verify each question before asking it - **changed** — Autoplan reads and verifies the current plan, then publishes the parent phase report before advancing - **fixed** — PR evaluation plans keep a small changed-behavior profile and selected quality judges, while weekly and manual runs retain fresh broad coverage - **changed** — Free tests use a refreshed timing inventory and balanced isolated CI runners - **added** — /test-audit provides an explicit partial feedback run - **changed** — /plan-ceo-review and /plan-eng-review preserve scoped decisions, required save/read-back checks, and report publication before declaring completion or advancing to the next section - **changed** — Coverage audits read source and test files in a dedicated step before mapping [OK] and [GAP] rows, while keeping framework and config context separate - **changed** — /plan-eng-review clarifies setup gates, targeted audit timing, report ordering, and Outside Voice output surfaces without losing saved-question verification - **fixed** — The plan-count timeout fixture closes stdin without forcing process exit before diagnostics can be captured - **changed** — Ship host golden files and parity size guards match the generated Codex, Factory, and plan-review outputs - **changed** — Skill generation awaits every artifact across all hosts - **changed** — Paid test supervision allows each file to finish its existing cases and configured retries - **added** — gstack-decision-log --help explains the accepted payload and safe shell quoting without creating state - **changed** — Plan reviews preserve the selected mode and prior approvals, compare each option against independent changes, and verify complete reports before recording completion - **changed** — Design skills save mockups, previews, and approved designs under the configured state directory, and later steps discover them there - **changed** — /autoplan loads each review's complete instructions, waits for asynchronous reviewers, and sends the current amended plan to spec reviewers Review gates keep their proof. Coverage audits read the code first. Plan reviews now keep decisions, report checks, and publication checks in order when permissions, stale choices, or host metadata writes fail. Coverage audits for `/review`, `/ship`, and plan reviews read concrete source and test files before drawing their diagrams, so gaps are tied to code paths instead of diff and config noise. Generation now validates every host and expected artifact, and Codex evaluation records retain failed execution and assertions. Plan reviews carry approved decisions through scope changes and save complete reports before declaring completion. CEO and engineering reviews save and verify each question before asking it; Autoplan reads and verifies the current plan, then publishes the parent phase report before advancing. Fixed: PR evaluation plans keep a small changed-behavior profile and selected quality judges, while weekly and manual runs retain fresh broad coverage. Free tests use a refreshed timing inventory and balanced isolated CI runners. `/test-audit` provides an explicit partial feedback run; the complete suite remains required. `/plan-ceo-review` and `/plan-eng-review` preserve scoped decisions, required save/read-back checks, and report publication before declaring completion or advancing to the next section. Coverage audits read source and test files in a dedicated step before mapping `[OK]` and `[GAP]` rows, while keeping framework and config context separate. `/plan-eng-review` clarifies setup gates, targeted audit timing, report ordering, and Outside Voice output surfaces without losing saved-question verification. The plan-count timeout fixture closes stdin without forcing process exit before diagnostics can be captured. Ship host golden files and parity size guards match the generated Codex, Factory, and plan-review outputs. Skill generation awaits every artifact across all hosts. Paid test supervision allows each file to finish its existing cases and configured retries. `gstack-decision-log --help` explains the accepted payload and safe shell quoting without creating state. Plan reviews preserve the selected mode and prior approvals, compare each option against independent changes, and verify complete reports before recording completion. Design skills save mockups, previews, and approved designs under the configured state directory, and later steps discover them there. `/autoplan` loads each review's complete instructions, waits for asynchronous reviewers, and sends the current amended plan to spec reviewers. `/office-hours` preserves structured review evidence through completion, keeps supported handoff content when replacing review sections, and develops distinct builder ideas. Terminal sessions drain output before reporting completion. Browser shutdown cleans up only the configured server instance. CSO public reports redact repository roots regardless of their path, while private snapshots retain the identity needed for verification. Changed: CEO, engineering and Autoplan instructions fit their existing prompt-size limits while retaining approval, saved-question verification and report-publication requirements. Review fixtures provide the application context and independent contracts their assertions require, declare supported editing and feedback interfaces, and verify existing rollback behavior. Contributor instructions require focused reproductions and adjacent checks before paid evaluations, independent scheduling, launcher preflight with executed-case counts, reuse of passing checks with unchanged inputs, and one full free-suite acceptance run after the code is frozen.