gstack

Developer ToolsAI extracted

gstack release notes.

Latest 1.84.1.0 · by gstackWebsiteRSS

Release activity

Release activity — 44 releases across 27 days since Jun 7, 2026. Each cell is one day; darker means more releases that day. Nothing is recorded before Jun 7, 2026. Older weeks are hidden at this screen width.
JunJulAugSep
Sunday3 releases on Jun 7, 20261 release on Jun 14, 20261 release on Jun 21, 2026No releases on Jun 28, 2026No releases on Jul 5, 2026No releases on Jul 12, 2026No releases on Jul 19, 2026No releases on Jul 26, 2026No releases on Aug 2, 2026No releases on Aug 9, 20263 releases on Aug 16, 2026No releases on Aug 23, 2026No releases on Aug 30, 20261 release on Sep 6, 2026No releases on Sep 13, 2026
Monday2 releases on Jun 8, 2026No releases on Jun 15, 2026No releases on Jun 22, 2026No releases on Jun 29, 2026No releases on Jul 6, 2026No releases on Jul 13, 2026No releases on Jul 20, 2026No releases on Jul 27, 2026No releases on Aug 3, 2026No releases on Aug 10, 2026No releases on Aug 17, 2026No releases on Aug 24, 20263 releases on Aug 31, 2026No releases on Sep 7, 2026No releases on Sep 14, 2026
Tuesday2 releases on Jun 9, 2026No releases on Jun 16, 2026No releases on Jun 23, 2026No releases on Jun 30, 2026No releases on Jul 7, 2026No releases on Jul 14, 2026No releases on Jul 21, 2026No releases on Jul 28, 2026No releases on Aug 4, 2026No releases on Aug 11, 20263 releases on Aug 18, 2026No releases on Aug 25, 20261 release on Sep 1, 2026No releases on Sep 8, 2026No releases on Sep 15, 2026
Wednesday1 release on Jun 10, 2026No releases on Jun 17, 2026No releases on Jun 24, 2026No releases on Jul 1, 2026No releases on Jul 8, 2026No releases on Jul 15, 2026No releases on Jul 22, 2026No releases on Jul 29, 2026No releases on Aug 5, 20261 release on Aug 12, 2026No releases on Aug 19, 20261 release on Aug 26, 2026No releases on Sep 2, 20263 releases on Sep 9, 2026
ThursdayNo releases on Jun 11, 20262 releases on Jun 18, 2026No releases on Jun 25, 2026No releases on Jul 2, 20262 releases on Jul 9, 2026No releases on Jul 16, 2026No releases on Jul 23, 2026No releases on Jul 30, 2026No releases on Aug 6, 20261 release on Aug 13, 20262 releases on Aug 20, 20261 release on Aug 27, 2026No releases on Sep 3, 2026No releases on Sep 10, 2026
Friday1 release on Jun 12, 2026No releases on Jun 19, 2026No releases on Jun 26, 2026No releases on Jul 3, 2026No releases on Jul 10, 2026No releases on Jul 17, 2026No releases on Jul 24, 2026No releases on Jul 31, 20261 release on Aug 7, 20262 releases on Aug 14, 2026No releases on Aug 21, 20261 release on Aug 28, 20261 release on Sep 4, 2026No releases on Sep 11, 2026
SaturdayNo releases on Jun 13, 2026No releases on Jun 20, 2026No releases on Jun 27, 2026No releases on Jul 4, 2026No releases on Jul 11, 2026No releases on Jul 18, 2026No releases on Jul 25, 2026No releases on Aug 1, 2026No releases on Aug 8, 20261 release on Aug 15, 20261 release on Aug 22, 20262 releases on Aug 29, 2026No releases on Sep 5, 2026No releases on Sep 12, 2026

44 releases since Jun 7, 2026, busiest day 3

Changelog

1.84.0.0

Added 11
  • Design skills now include 61 deterministic anti-pattern checks
  • Design detector can download and run impeccable engine binary from ~/.impeccable with checksum verification
  • /design-review command scans rendered pages with DOM analysis and redaction checking
  • /design-html, /review, and /ship commands run impeccable engine first and report findings as FINDING-NNN rows with file:line references
  • /design-consultation command writes DESIGN.md spec in open format with tokens in front matter, eight canonical sections, and Motion and Decisions Log
  • Design detector prompts user once to download impeccable engine binary on first run, with option to decline without further nagging
Changed 3
  • DESIGN.md is now written in the open format used by impeccable and Google Stitch
  • AI-slop list now lives in one typed catalog instead of four separate copies
  • DESIGN.md conversion from existing files happens only once when user explicitly requests it

From gstack

gstack's design skills now start with 61 deterministic anti-pattern checks, in your voice, then spend their judgment where a detector cannot. DESIGN.md is written in the open format that impeccable and Google Stitch read, and the AI-slop list lives in one typed catalog instead of four drifting copies. If you have impeccable installed, /design-review, /design-html, /review, and /ship run its engine first and hand you its findings as FINDING-NNN [rule-id] rows with file:line and a handoff before the LLM pass reads a page. gstack never runs impeccable's installer or launcher. The first time a design skill finds no engine it asks once: download the 16 MB engine binary from impeccable's own GitHub release into ~/.impeccable, checked against a checksum gstack pins and recorded in your egress ledger first, or not. Say no and nothing changes and nothing nags; gstack-config set design_detector off silences every trace. The probe only reads files, the engine runs only from under your home directory, and a checked-out repository can never make gstack execute one of its own files. On a live URL, /design-review scans the rendered page: the DOM is dumped with linked stylesheets inlined and scripts, input values, handlers, and query strings stripped, redaction-checked, kept owner-only, and the engine reads that, so Rule 4 holds on a deployed site. /design-consultation writes the open DESIGN.md spec (tokens in front matter, eight canonical sections, your Motion and Decisions Log kept). An existing file is converted only when you say so, once, and the answer is recorded in the file.

View originalPermalink
How 1.84.0.0 went

1.83.0.0

Added 5
  • Register Memorable workflow memory hook through gstack with `gstack-memorable enable` command
  • Record consent key `memorable_recall` for Memorable integration, listed and revocable via `gstack-egress grants`
  • Write egress receipt before every prompt handed to Memorable vendor binary
  • Show Memorable integration status with `gstack-memorable status` displaying vendor CLI, gate, registrant identity, receipt counts and recent errors
  • Disable Memorable integration with `gstack-memorable disable` command that verifies consent and registration
Changed 5
  • Refuse to hand over prompts carrying live-shaped credentials to Memorable
  • Skip repositories whose trust policy is `deny` or `read-only` for Memorable integration
  • Run Memorable vendor binary in allowlisted environment inside process group with 4.5 second budget
  • Wrap Memorable recall responses in trust envelope so recalled text cannot block prompts or speak as gstack
  • Skip prompt hand-off to Memorable if egress receipt cannot be written
Removed 1
  • Windows support for Memorable integration until process groups are available
Security 1
  • Claude Code integration with Memorable is consent-gated with secret scanning and egress receipting

From gstack

Memorable's workflow memory plugs into Claude Code through gstack, behind a consent key you control. Every prompt it sees is receipted, secret-scanned and enveloped. The switch is off until you flip it. Memorable (memorable.sh) is a third-party CLI that remembers how you did a task and recalls it the next time you ask for something similar. Its own installer registers a Claude Code hook directly. This release lets you register that hook through gstack instead, with gstack-memorable enable, and nothing changes until you run it. When you do, gstack records its own consent key (memorable_recall, listed by gstack-egress grants with its revoke command), writes an egress receipt before every prompt it hands to the vendor binary and skips the hand-off if the receipt cannot be written, refuses to hand over a prompt carrying a live-shaped credential, skips repositories whose trust policy is deny or read-only, runs the binary in an allowlisted environment inside its own process group under a 4.5 second budget, and wraps whatever comes back in the trust envelope so recalled text can never block a prompt or speak as gstack. gstack-memorable status shows the vendor CLI, the gate, who registered the hook (by identity, so it stays correct after Claude Code rewrites settings.json), receipt counts and recent errors. disable turns it off and verifies both the consent and the registration before it says so. Claude Code only; Windows is refused for now because there are no process groups to contain the vendor.

View originalPermalink
How 1.83.0.0 went

1.84.1.0

Changed 18
  • Codex reviews, consultations, and evals now default to GPT-6 Astra instead of previous default, configurable via GSTACK_CODEX_MODEL environment variable or explicit model in request
  • Claude outside voices and eval capture/judging now default to Fable 5.1 instead of previous default, configurable via GSTACK_CLAUDE_MODEL environment variable
  • Native Codex reviews now honor the selected model even when the CLI has a separate review-model pin
  • Claude judges parse text after thinking blocks
  • Arm judgments omit the temperature setting that Fable does not support
  • Frontier judges have enough output budget for thinking and JSON
Fixed 1
  • Failed vendored upgrades restore their backup instead of deleting it

From gstack

Codex reviews, consultations, and evals now default to GPT-6 Astra. Choose another model with GSTACK_CODEX_MODEL or an explicit model in your request; the readiness probe checks that same selection. Claude outside voices and eval capture/judging now default to Fable 5.1. Outside voices accept GSTACK_CLAUDE_MODEL; evals retain their explicit and environment model overrides. Warmup and distillation keep their cheaper defaults. Native Codex reviews honor the selected model even when the CLI has a separate review-model pin. Claude judges parse text after thinking blocks, and arm judgments omit the temperature setting Fable does not support. Frontier judges have enough output budget for thinking and JSON. Workflow evals read generated sections in execution order, without duplicated content. Ship and plan reviews keep approval gates with the parent agent, preserve readiness checks, and use project-native test commands. QA scoring and monitoring rules are explicit; Aside drive options wait for a successful readiness probe. Benchmark timing uses the navigation entry's actual fields. Deploy setup collects missing configuration, and failed vendored upgrades restore their backup instead of deleting it. Retro reports distinguish verified merges from PR references, use the session date for snapshots, and define report ordering. The quality eval includes compare-mode instructions instead of cutting them off. Documentation review runs before publication so approved fixes reach the PR. Changelog protection, unavailable-review handling, and raw/enveloped PR-body handling are consistent across the workflow.

View originalPermalink
How 1.84.1.0 went

1.81.0.0

Changed 7
  • Aside is now the primary browser driver for all browsing skills, PDF and diagram rendering, and web research, with gstack's headless browser as automatic fallback
  • The /qa, /qa-only, /design-review, /scrape, /benchmark, /canary, /browse, /devex-review, /land-and-deploy post-deploy check, and /design-consultation competitor research now run inside the Aside AI browser on macOS 15+
  • Authentication inside Aside eliminates the need for cookie export, browser handoff, or CAPTCHA handling as skills re-run steps in the user's existing signed-in sessions
  • PDF rendering, diagram rendering, design-html viewport screenshots, and office-hours sketches now use Aside as the primary renderer
  • Web research skills now query Aside's read-only agent in the user's real browser instead of reaching for the WebSearch tool
  • Renderer output indicates which browser engine was used and falls back to WebSearch tool then in-distribution knowledge when Aside is unavailable
  • Linux and Windows users continue using the bundled Chromium browser with no changes to existing behavior

From gstack

Aside is the browser gstack drives first. Every browsing skill, the PDF and diagram renderer, and web research go through it. gstack's own headless browser stays as the automatic fallback, so nothing stops working without Aside. Since v1.72 Aside was the recommended driver for third-party sites. This release makes it the first driver everywhere. /qa, /qa-only, /design-review, /scrape, /benchmark, /canary, /browse, /devex-review, /land-and-deploy's post-deploy check, and /design-consultation's competitor research now run inside the Aside AI browser (macOS 15+, aside.com), in the sessions you are already signed in to. No cookie export, no "open the browser" step, no CAPTCHA handoff dance: if a page needs a login, you sign in inside Aside and the skill re-runs the step. /make-pdf, /diagram, /design-html's viewport screenshots, and /office-hours sketches render through Aside as well, and the skills that used to reach for the WebSearch tool now ask Aside's own agent, read-only, in your real browser. When Aside is not there, nothing breaks. Every browsing skill carries a fallback section that translates its Aside steps onto gstack's own headless Chromium ($B), step for step: same evidence lines, same report, same consent rules, with cookie import or a handoff for authenticated pages. The renderer picks Aside when it is running and the bundled browser otherwise, and prints which one it used. Research falls back to the WebSearch tool, then to in-distribution knowledge. Linux and Windows users keep the bundled browser exactly as before; the Third-Party Web Actions contract keeps gstack's visible browser as its fallback driver.

View originalPermalink
How 1.81.0.0 went

1.80.0.0

Added 2
  • Add GSTACK_PLAYWRIGHT_INSTALL_TIMEOUT environment variable to set a deadline for Chromium installation
  • Add GSTACK_SKIP_PLAYWRIGHT environment variable to skip Chromium installation entirely
Changed 3
  • Customized generated files are backed up to ~/.gstack/backups/skills/ before gstack links over them
  • Directories are only removed when nothing of yours is inside
  • The /freeze hook now fails closed on any unexpected death instead of exiting with no decision
Fixed 3
  • Setup no longer aborts when Chromium installation fails or hangs; instead it completes with reason codes indicating which skills need a browser
  • The /freeze deny hook now reads the same state directory that /freeze writes to when GSTACK_HOME is set
  • gstack never deletes or overwrites skill entries unless they are symlinks into gstack, carry the .gstack-owned marker, or are real files gstack generated

From gstack

Setup finishes even when Chromium cannot be installed. gstack never deletes or overwrites a skill it did not create. Three defects that a downstream fork kept tripping over are fixed at the source. ./setup used to abort at the Playwright step on any box where the Chromium download failed or hung (offline, proxied, AppArmor-restricted), and because that step ran before skills were registered, those users ended with zero skills. The /freeze deny hook read a different state directory than /freeze wrote whenever GSTACK_HOME was set, so the boundary silently allowed everything. And both ./setup and gstack-relink would replace or delete any skill entry that happened to share a name with a gstack skill, including a skill you wrote yourself. Now the Chromium install is best-effort and bounded. It runs under a 600 second deadline you can change with GSTACK_PLAYWRIGHT_INSTALL_TIMEOUT, skip outright with GSTACK_SKIP_PLAYWRIGHT=1, and every failure becomes a reason code in the final summary that names the skills that need a browser. Skills always register. Both PreToolUse hooks resolve the same state root the writers use, and freeze fails closed on any unexpected death instead of exiting with no decision. Ownership is proven, never assumed from a name: an entry is only touched when it is a symlink into gstack, carries the .gstack-owned marker gstack writes for directories it creates, or is a real file gstack generated. Even then a generated file you have since customized is moved to ~/.gstack/backups/skills/ / before gstack links over it, and a directory is only removed whole when nothing of yours is inside.

View originalPermalink
How 1.80.0.0 went

1.79.0.0

Added 2
  • Every synchronous dispatch site in the skill tree now carries an explicit flag with test-pinning per file to catch future recurrences in CI
  • Doc-sync dispatch now includes real failure handling with polling for about 10 minutes, task cancellation, commit reconciliation against pre-dispatch HEAD, and PR shipping without the Documentation section if the subagent is backgrounded
Changed 1
  • The doc-sync subagent is scope-guarded to docs only and never changes VERSION, never merges the base branch, skips the Codex doc review, and reports a rejected push as pushed:false
Fixed 2
  • /ship can no longer be stranded by a backgrounded subagent
  • Four /ship steps (7, 8, 10, 18) that hand work to a subagent now explicitly pass run_in_background: false

From gstack

/ship can no longer be stranded by a backgrounded subagent. The bug class that came back twice is pinned everywhere it lives. Claude Code v2.1.198 made Agent-tool subagents launch in the background by default. Four /ship steps (7, 8, 10, 18) hand work to a subagent and parse its final line as JSON, and none of them passed run_in_background: false, so a ship run could park forever on Step 18 waiting for doc-sync output that was never coming. This is the third time this class has bitten. Every synchronous dispatch site in the skill tree now carries the explicit flag, and the flag is test-pinned per file so a fourth recurrence fails CI the moment it lands. The doc-sync dispatch also got real failure handling. If the dispatch gets backgrounded anyway, the parent polls for about 10 minutes, stops the runaway task, reconciles any commit the subagent made against the pre-dispatch HEAD, and ships the PR without the Documentation section instead of hanging. The subagent itself is scope-guarded to docs only: it never changes VERSION, never merges the base branch, skips the Codex doc review (the parent owns review passes), and reports a rejected push as pushed:false for the parent to reconcile.

View originalPermalink
How 1.79.0.0 went

1.78.0.0

Changed 2
  • Diagram-render bundle size reduced from 9.96 MB to 7.59 MB by removing duplicate mermaid
  • Eighteen community PRs absorbed with authorship preserved, twelve including wave amendments that finish gaps or fix defects found in review
Fixed 5
  • Plan reviews now ask their questions again after the spawned-session rule was incorrectly triggering auto-decide on scripted-looking prompts
  • The spawned-session trigger is now machine-verifiable using only the preamble's echoed SESSION_KIND status line, preventing text from dispatch prompts, files, or pages from flipping a session to auto-choose
  • OSV lane suppression file is now properly discovered and applied, with explicit global config passed to the workflow
  • OSV lane cleared 102 advisories through in-range bumps and overrides that reach nested exact pins, leaving 3 advisories with documented reasons and ignoreUntil expiries
  • Vendored upgrade path no longer deletes the install backup after a failed swap; the swap now aborts loudly and restores the backup

From gstack

Plan reviews ask their questions again, the OSV lane is green from 105 advisories, and 18 community fixes land with credit. The upgrade path can no longer delete your install. The fix wave. The weekly periodic eval lane broke at v1.76: the spawned-session rule let the model infer "nobody is reading this" from any scripted-looking prompt and silently auto-decide every review question, so plan reviews stopped asking. reviewCount collapsed to 0 across four skills. The trigger is now machine-verifiable and nothing else: the preamble's own echoed SESSION_KIND: spawned status line. No text from a dispatch prompt, file, or page can flip a session to auto-choose; a spawned subagent that missed the env marker is still caught at failure time by the AUQ hooks' spawned escape. The reproduced failure went from 0 review questions to a full question flow on the same harness. The weekly OSV lane had been red for three weeks with 105 advisories, and its suppression file had been silently inert since v1.65 (wrong filename for auto-discovery, and per-directory configs never covered the nested lockfile anyway). The workflow now passes an explicit global --config, a dependency pass cleared 102 advisories through in-range bumps and overrides that actually reach nested exact pins, and the 3 survivors carry reasons plus ignoreUntil expiries. The diagram-render bundle lost its duplicate mermaid on the way: 9.96 MB to 7.59 MB. Eighteen community PRs are absorbed with authorship preserved, twelve of them with wave amendments that finish a gap or fix a defect found in review. Nine more confirmed bugs are fixed directly, led by a failed mktemp in the vendored upgrade path that used to rm -rf your install's backup after a failed swap. The swap now aborts loudly and restores the backup.

View originalPermalink
How 1.78.0.0 went

1.76.0.0

Added 4
  • GSTACK_SESSION_KIND=spawned environment variable to mark subagents as spawned
  • decisions array in the doc-sync contract to report auto-chosen gate decisions
  • Proactive spawned rule to handle gates in spawned sessions
  • Gate-tier E2E test coverage
Changed 3
  • bin/gstack-skill-start to support spawned session classification
  • AUQ hooks to auto-choose recommended options for gates in spawned sessions
  • Ship Step 18 dispatch prompt
Fixed 1
  • Conductor-hosted /ship runs no longer lose their Documentation section when document-release subagent encounters interactive gates

From gstack

Ship's doc-sync now survives Conductor. Spawned subagents finally know they're spawned. Every Conductor-hosted /ship used to lose its PR ## Documentation section the moment the document-release subagent hit an interactive gate: the subagent inherited the parent's environment, classified itself as a session a human was watching, rendered a decision brief nobody could answer, and stopped. The JSON contract broke, every time a gate fired (#2733). This release makes the spawned classification reachable: /ship marks its subagent with GSTACK_SESSION_KIND=spawned, and the whole stack (preamble, AskUserQuestion rules, both AUQ hooks) now resolves gates by auto-choosing the recommended option instead of writing prose to nobody. Destructive options are never auto-chosen, on any surface: the conservative choice wins and gets recorded. Auto-chosen decisions come back in a decisions array the parent prints to your console, so nothing is decided invisibly. Added: GSTACK_SESSION_KIND=spawned, decisions in the doc-sync contract, Proactive spawned rule, Gate-tier E2E. Changed: bin/gstack-skill-start, AUQ hooks, Ship Step 18 dispatch prompt. Fixed: #2733 - Conductor-hosted /ship runs no longer lose their Documentation section. For contributors: New test files and measurements.

View originalPermalink
How 1.76.0.0 went

1.77.0.0

Added 1
  • Add ratcheted tripwire that fails on timeout-less spawn arrivals
Changed 4
  • Measure and eliminate flakes at the root with fenced detection
  • Overhaul test infrastructure by removing legacy 17-row eval matrix that ran serialized ahead of the sliced lane
  • Derive gate census from the runner itself so new gate tests are in the census the moment their file lands
  • Record every retried pass in a per-project ledger uploaded from CI on green runs
Fixed 2
  • Stop paying for evals twice on every PR
  • Eliminate hung child processes under blocking spawnSync by removing timeout-less sync-spawn calls across 146 files

From gstack

Every PR stops paying for evals twice. Flakes are now measured, killed at the root, and fenced. The test infrastructure got its overhaul, wave 1. The legacy 17-row eval matrix that ran serialized AHEAD of the sliced lane on every PR is deleted: one paid lane, its gate census derived from the runner itself, so a new gate test is in the census the moment its file lands. No hand-enumerated rows to drift, and the drift already tried, a new matrix row landed on main mid-branch and the merge resolved to the derived census that covers it by construction. The flake war moved from anecdotes to instruments. Every retried pass is now recorded where it cannot hide, the free lane retries a failing file once, loudly, and appends every flaky pass to a per-project ledger uploaded from CI on green runs. And the wedge class that hit main, a hung child under a blocking spawnSync that no in-process timeout can interrupt, is extinct: 499 timeout-less sync-spawn sites across 146 files swept to zero, with a ratcheted tripwire that failed its first real offender the day a timeout-less spawn arrived from a merge.

View originalPermalink
How 1.77.0.0 went

1.75.0.0

Added 6
  • Simplification specialist lens for /review that flags unrequested structure including hand-rolled stdlib, one-implementation abstractions, dead flexibility, and dependencies duplicating platform features
  • Reuse ladder guidance for tier-2+ skills that prioritizes reusing code from repo, stdlib, native platform, installed dependencies before building new
  • Bounded closer for completion reports to stop touring every edit
  • Decision-ledger entry and gstack-shortcut marker for accepted shortcuts, harvested into debt ledger by /retro
  • 1.8KB rules digest for agent hosts without full install such as Zed, Amp, and Cursor side projects
  • /autoplan now runs Eng review last so the required shipping gate reviews the final amended plan
Changed 3
  • AskUserQuestion preamble section
  • Terse-mode label
  • /review checklist
Fixed 6
  • Version bumps no longer strand the agents digest
  • The free-suite flaky retry
  • Version allocation
  • Browse temp paths
  • Setup's instruction-tier pointer
  • /retro's shortcut harvest

From gstack

Your review now hunts over-built code, not just broken code. And every skill's advice starts with "reuse before you build." This release imports the best of ponytail, the code-minimalism ruleset, without importing its build-less posture. /review gains an eighth lens: a simplification specialist that flags unrequested structure (hand-rolled stdlib, one-implementation abstractions, dead flexibility, dependencies duplicating platform features) in a closed five-tag vocabulary. It is advisory only. It cannot dent your quality score, its fixes are never auto-applied, and on a lean diff it tells you something no reviewer ever says: "lean already — nothing to cut." Every tier-2+ skill also gains the reuse ladder (stop at the first rung that holds: this repo, stdlib, native platform, an installed dependency... then build the complete version of what remains) and a bounded closer, so completion reports stop touring every edit. Accepted shortcuts now leave a durable trail: a decision-ledger entry plus a gstack-shortcut(dec- ) marker in code, harvested into a debt ledger by /retro. Agent hosts without a full install (Zed, Amp, Cursor side projects) get a 1.8KB rules digest to copy into their own rules file. And /autoplan now runs the Eng review last, always, so the required shipping gate reviews the final amended plan instead of a stale one. Added: Simplification review specialist, Reuse ladder, Bounded closer, Shortcut debt ledger, Instruction-only host tier, With/without-skill arm benchmark, /autoplan runs Eng last. Changed: AskUserQuestion preamble section, Terse-mode label, /review checklist. Fixed: Version bumps no longer strand the agents digest, The free-suite flaky retry, Version allocation, Browse temp paths, Setup's instruction-tier pointer, /retro's shortcut harvest. For contributors: New benchmarks and test improvements.

View originalPermalink
How 1.75.0.0 went
1.74.0.0

Green now means green: every test runs somewhere, provably

Changed 4
  • Free suite now packs shards by recorded per-file durations instead of file counts
  • Generator now includes a main() guard and renders every host into out-dirs so the suite never writes the live tree
  • Paid lane re-platforms CI onto the same sharded runner used locally with one planner manifest and sliced executors
  • Report now fails closed when a slice's artifact never lands
Fixed 4
  • Fixed three CI eval jobs that ran zero tests and passed on every PR
  • Fixed four paid test files that could never execute in any lane
  • Fixed required free-tests check that silently skipped nine make-pdf gates on Linux
  • Fixed about 57 E2E files that ran in no scheduled lane
Removed 1
  • Removed serial tree-mutating shard from the suite

From gstack

The suites got faster by deleting lies, not by skipping work. This release is a full audit and overhaul of gstack's own test and CI system. The audit found the safety net lying in specific ways: three CI eval jobs ran zero tests and passed on every PR, four paid test files could never execute in any lane, the required free-tests check silently skipped nine make-pdf gates on Linux for their entire life, and about 57 E2E files ran in no scheduled lane at all. All of it is fixed, and each fixed class now has a tripwire so it cannot quietly return. Speed came from structure. The free suite packs shards by recorded per-file durations instead of file counts, and the serial tree-mutating shard is gone entirely: the generator gained a main() guard and renders every host into out-dirs, so the suite never writes the live tree. The paid lane re-platforms CI onto the same sharded runner you use locally, with one planner manifest, sliced executors, and a report that fails closed when a slice's artifact never lands.

View originalPermalink
How 1.74.0.0 went

1.72.0.0

Added 4
  • Aside is now the recommended driver for third-party website interactions, with approval requested for each task by name and site
  • gstack checks for the Aside AI browser when a workflow requires API key registration, vendor account creation, or webhook setup
  • On Mac, gstack provides a one-time download pointer to aside.com for macOS 15+ when Aside is not installed
  • gstack offers to use real logged-in sessions through Aside without cookie export or re-authentication
Changed 2
  • Permission code now refuses shared, sticky, symlinked, or foreign-owned directories and warns instead of failing silently
  • Permission check and chmod operation are now pinned to a single inode to prevent symlink attacks
Fixed 1
  • Fixed a hardening bug where the browse daemon's owner-only chmod could land on /tmp itself when a state file was configured there on hosts with CAP_FOWNER capability, potentially locking machine access checks for all users

From gstack

Aside is the recommended driver, consent asked every single time. When a workflow hits a third-party website moment, registering an API key, creating a vendor account, wiring a webhook, gstack now checks for the Aside AI browser and offers to drive it: your real logged-in sessions, no cookie export, no re-auth. You approve each drive per task, by name and by site. Passwords, payment, CAPTCHAs, and identity stay yours; Apple credential creation is never a drive target in any skill. No Aside installed? On a Mac you get one download pointer (aside.com, macOS 15+), once, and gstack's own visible browser remains the fallback everywhere. gstack never runs an installer for you, and a detected binary is never treated as consent. This release also fixes a real hardening bug: on hosts where the process holds CAP_FOWNER (Docker as root, CI sandboxes), the browse daemon's owner-only chmod could land on /tmp itself when a state file was configured there, locking the whole machine's access(2) checks out for everyone. The permission code now refuses shared, sticky, symlinked, or foreign-owned directories, warns instead of going silent, and pins the check and the chmod to one inode.

View originalPermalink
How 1.72.0.0 went

1.71.0.0

Added 2
  • Section carve optimization to eleven additional skills, expanding carved roster from 9 to 20 skills total
  • SKILL_START_PROTO handshake emitted by runtime scripts with per-run session ID and random suffix
Changed 4
  • Reduce prompt cost for every skill invocation by approximately half while maintaining identical behavior as verified by A/B evaluations
  • Move shared preamble bash into two runtime scripts bin/gstack-skill-start and bin/gstack-skill-end that emit STATUS lines
  • Emit one-time onboarding text only when its gate fires, as session-bound GSTACK_INSTRUCTION blocks instead of in every render
  • Deepen office-hours skill carve to load heavy reference bodies on demand at the step that needs them instead of preloading

From gstack

Every skill invocation just got half the prompt bill. Same behavior, measured by A/B evals, locked by CI ceilings. Every gstack skill pays a fixed prompt cost before doing any work. This release cuts that cost across all 62 skills and pins the wins so they can't creep back. The shared preamble's bash moved into two runtime scripts (bin/gstack-skill-start, bin/gstack-skill-end) that echo the same STATUS lines the prose always interpreted. One-time onboarding text now appears only when its gate actually fires, emitted as session-bound instruction blocks instead of riding along in every render. Eleven more skills got the section carve and office-hours' existing carve went deeper, taking the carved roster from 9 to 20: heavy reference bodies load on demand at the step that needs them, never before. bin/gstack-skill-start / bin/gstack-skill-end: the preamble and telemetry runtime, replacing ~18KB of inline bash per tier-2+ skill. Emits a SKILL_START_PROTO: 1 handshake, STATUS lines, and gated one-time onboarding as GSTACK_INSTRUCTION blocks bound to a per-run session ID with a random suffix.

View originalPermalink
How 1.71.0.0 went
1.70.1.0

Ship names its documentation subagent at every decision point.

Added 3
  • Add tests that fail if the /document-release handoff goes quiet
  • Add carve-guard anchors pinning each /document-release touchpoint independently
  • Add gate-tier E2E test proving a live agent fires the /document-release dispatch before creating the PR
Changed 1
  • Frame /document-release as a subagent so an agent dispatches the isolated worker instead of running a weaker inline copy
Fixed 1
  • Restore visibility of /document-release dispatch in /ship workflow by naming it consistently at the section index, STOP pointer, Step 17 handoff line, and doc-sync invariant

From gstack

The handoff is now pinned by tests that fail loud if it ever goes quiet. /ship has dispatched /document-release as Step 18 since v0.18.2.0, but the v1.54.0.0 carve moved that step into an on-demand section and the always-loaded skeleton stopped saying "document-release" at any decision point (one mention survived, buried in the re-run checklist). The wiring was intact. The visibility was gone, and nothing tested the handoff. This release restores the visibility and locks it in: the section index, the STOP pointer, the Step 17 handoff line, and a new hoisted doc-sync invariant all name "the /document-release subagent" (subagent-framed on purpose, so an agent dispatches the isolated worker instead of running a weaker inline copy). A free tripwire pins the wording, carve-guard anchors pin each touchpoint independently, and a new gate-tier E2E proves a live agent actually fires the dispatch before creating the PR. /ship's Claude-host skeleton names "the /document-release subagent" at all three Step 18 decision points (manifest trigger rendering into the section index and STOP pointer, the Step 17 handoff line, and a hoisted doc-sync invariant beside the PR-title invariant). The invariant states the contract plainly: the dispatch itself is never skipped; only a failed subagent is non-blocking.

View originalPermalink
How 1.70.1.0 went

1.69.0.0

Fixed 6
  • gstack-evidence now correctly handles environments where bun auto-loads .env files into child processes
  • gbrain wireup's first sync no longer silently repoints a user's primary knowledge source
  • setup --host slate now properly reports when installation fails instead of exiting with success
  • land-and-deploy's merge recovery now fully executes the --delete-branch operation it promises
  • unattributed deny ingest policy now correctly applies to the pages it names
  • Skill-dir cleanup now properly finds orphaned files

From gstack

Or the wrong thing — now do what they say, or say loudly that they couldn't. Every fix in this wave closes the same failure shape. gstack-evidence — the tool other tools believe — certified runs whose environment differed from CI's, because bun auto-loaded the repo's .env files into every child it spawned. The gbrain wireup's first sync targeted the brain's default source, which could silently repoint a user's primary knowledge source at the gstack worktree while the just-registered source got zero pages — and still print a success line. ./setup --host slate exited 0 having installed nothing. land-and-deploy's merge recovery re-established everything except the --delete-branch half it had promised, and said nothing. A _unattributed → deny ingest policy never applied to exactly the pages it names. Skill-dir cleanup structurally could not find orphans. And a false-green test fixture meant the gbrain missing case could never fail on any machine with a real gbrain installed.

View originalPermalink
How 1.69.0.0 went

1.68.3.0

Changed 1
  • Root is now a reserved client name
Fixed 3
  • Revoke now frees the agent's tabs
  • POST /pair no longer leaves the agent's original full-access session alive after pairing with restrictions
  • Revocation now releases tab ownership so re-paired agents do not inherit the previous agent's authenticated tabs
Security 1
  • Prevent --client root from minting a scoped token that skips scope, domain, rate, and tab checks

From gstack

Revoke frees the agent's tabs, and root is a reserved client name. Tightening a paired agent is supposed to be one re-pair away. It wasn't. POST /pair minted a fresh setup key but never touched the agent's live session, so pair-agent --client codex --restrict read against an agent that had already connected (or whose new 5-minute key simply expired unexchanged) left the original full-access session, eval included, alive for up to 24 hours. Revocation also never released tab ownership, so an agent re-paired under the same name inherited the previous one's authenticated tabs. And because root is the sentinel the scope, domain, rate, and tab checks use for the omnipotent caller, --client root minted a scoped token that skipped all of them.

View originalPermalink
How 1.68.3.0 went

1.68.2.0

Changed 1
  • CLI properly forwards tunnel revoke to the daemon instead of treating it as an unknown command
Fixed 4
  • tunnel revoke command now works as documented and properly revokes remote agents
  • revokeToken now deletes all tokens matching an agent's name instead of only the first one
  • spent setup keys are no longer prioritized in deletion, preventing leftover unspent keys from creating new sessions for revoked agents
  • DELETE /token/ now correctly returns an error status when the token cannot be deleted instead of returning 200 for failed revocations

From gstack

The documented kill switch is real: tunnel revoke deletes, then proves it. Revoking a remote agent was broken twice over. revokeToken deleted only the first token matching the agent's name, and the spent setup key kept for connection retries always sat first in line. So DELETE /token/ returned 200 while the live session kept working, a leftover unspent setup key could mint a brand-new session for a revoked agent (inside the key's 5-minute validity), and a second DELETE returned 200 again. Meanwhile the documented way out, $B tunnel revoke, did not exist: the CLI forwarded it to the daemon as an unknown command. The pairing docs also promised a read+write sandbox three releases after pairing deliberately switched to full page access.

View originalPermalink
How 1.68.2.0 went

1.68.1.0

Added 1
  • Add gstack-settings-hook prune-stale --repoint command to remove dead entries, fix stale ones, restore stripped tags, and collapse duplicates
Changed 2
  • Hook registration now uses only canonical paths pointing to ~/.claude/skills/gstack install
  • Hook ownership is now decided by a fixed identity table in bin/gstack-settings-hook
Fixed 4
  • Prevent ephemeral workspace paths from being baked into global settings
  • Resolve PostToolUse:AskUserQuestion hook errors caused by deleted workspaces or git worktrees
  • Fix Conductor auto-opt-in overriding the flag that prevents baking in physical paths
  • Prevent hook dedupe tag stripping from creating duplicate stale entries

From gstack

No ephemeral path can ever be baked in again. If you work in Conductor workspaces or git worktrees, you have probably seen it: PostToolUse:AskUserQuestion hook error ... No such file or directory spraying on every question, pointing at a workspace you deleted last week. The cause was a three-part failure. Setup baked the running tree's physical path into your global ~/.claude/settings.json, the Conductor auto-opt-in overrode the exact flag bin/dev-setup passes to prevent that, and the dedupe tag gstack relied on gets stripped by Claude Code itself, so every new workspace appended a fresh dead entry instead of replacing the old one. All three are fixed at the root. Hook registration is now canonical-only: commands point at the stable ~/.claude/skills/gstack install or are not registered at all. Ownership is decided by a fixed identity table in bin/gstack-settings-hook, per hook item, so it survives tag-stripping and can never claim a hook you wrote yourself. And every ./setup run now heals first: gstack-settings-hook prune-stale --repoint removes dead gstack entries, re-points stale ones, restores stripped tags, and collapses duplicates, printing one line only when it changed something.

View originalPermalink
How 1.68.1.0 went

1.68.0.0

Added 1
  • Add ten-case parity suite for verifying correct project store filing
Changed 1
  • Session-update lock now records the process that holds it, heartbeats while working, and expires on hard TTL
Fixed 2
  • Eliminate enqueue/drain race condition by moving brain-sync queue to per-record spool directory
  • Fix stray ~/.git directory silently misfiling decisions and learnings into wrong project store with self-healing cache

From gstack

The next tracker wave: 16 verified fixes in, 90 stale PRs and 21 issues out. Six community contributors credited, one queue race killed for good. This release lands the full next-wave queue: six community PRs ported with authorship intact, ten fixes of our own, and the six adversarial-review residuals the last wave deferred. The headline internals: the brain-sync queue moved to a per-record spool directory, so the enqueue/drain race class is structurally gone, not narrowed. The session-update lock records the process that actually holds it, heartbeats while it works, and expires on a hard TTL, so concurrent updaters can no longer trample a live install. And a live bug caught during this wave's own review, a stray ~/.git directory silently misfiling decisions and learnings into the wrong project store, is fixed with a self-healing cache and a ten-case parity suite.

View originalPermalink
How 1.68.0.0 went

1.67.2.0

Added 12
  • ./setup --host codex reads the top-level model from ${CODEX_HOME:-~/.codex}/config.toml and renders the matching profile
  • gpt-5.6-sol model profile created with explicit task boundary, report-only adjacent work, bounded investigation, and terminate on verified completion
  • Codex model detection at setup via scripts/resolve-codex-generation-model.ts reads config.toml, validates against model allowlist, and falls back to generic GPT profile with warning
  • ./setup --host codex --model parameter for per-run model override
  • Per-host generation defaults via HostConfig.defaultModel validated at generation time
  • Periodic scope-termination E2E test installs the FULL generated investigate skill, plants a one-line bug beside decoy security and migration TODOs, and asserts fix lands inside boundary within 30 tool calls
Changed 3
  • Codex renders the GPT profile when no --model passed; every other host keeps claude
  • Kiro installs render the claude profile before copying skills, then restore resolved Codex profile
  • Setup resolves the Codex generation model on every run so any install path preserves a Sol user's rendered profile
Fixed 4
  • Codex skills path now honors $CODEX_HOME
  • Hermetic Codex E2E runner copies auth.json only; operator plugins, MCP servers, rules, and skills no longer leak
  • Kiro never ships GPT-family behavioral text and live ~/.codex symlinks stay correct
  • Sol E2E snapshots the exact prior .agents render and restores it in beforeAll

From gstack

./setup --host codex reads the top-level model from ${CODEX_HOME:-~/.codex}/config.toml and renders the matching profile. gpt-5.6-sol model profile created with explicit task boundary, report-only adjacent work, bounded investigation, terminate on verified completion. Codex model detection at setup via scripts/resolve-codex-generation-model.ts reads config.toml, validates against model allowlist, treats config values as data, falls back to generic GPT profile with warning. ./setup --host codex --model overrides for that run. Per-host generation defaults: HostConfig.defaultModel validated at generation time. Codex renders the GPT profile when no --model passed; every other host keeps claude. Periodic scope-termination E2E installs the FULL generated investigate skill, plants a one-line bug beside decoy security and migration TODOs, asserts fix lands inside boundary within 30 tool calls, decoys stay byte-identical, regression oracle survives unweakened, nothing gets committed. Sol-specific Completeness Principle and first-run intro copy added. Generated upgrade skills reinstall their own host: ./setup --host codex in Codex renders, --host kiro in Kiro copies. Kiro installs render the claude profile before copying skills, then restore resolved Codex profile. Kiro never ships GPT-family behavioral text and live ~/.codex symlinks stay correct. The Codex skills path honors $CODEX_HOME. Hermetic Codex E2E runner copies auth.json only; operator plugins, MCP servers, rules, skills no longer leak. Per-run model, TOML config overrides, and --ignore-user-config supported. Setup resolves the Codex generation model on every run so any install path preserves a Sol user's rendered profile. Codex install summary prints the active profile and its source. New free-tier coverage for every resolver branch including hostile-config shapes, overlay content pins, explicit --model override through real generation CLI, real-file periodic-tier classification. Static pins in test/setup-codex-model.test.ts hold load-bearing setup properties. Sol E2E snapshots the exact prior .agents render and restores it in beforeAll.

View originalPermalink
How 1.67.2.0 went

1.67.1.0

Added 1
  • New regression guards pin each security property against silent revert
Fixed 2
  • Browser server Node spawn shim regains its exited promise, eager stdout/stderr drain, and 16MB output cap
  • Correct child-process handling restored on Windows Node fallback
Security 10
  • Conducted explicit security sweep over all external-contributor code merged since mid-June and hardened six confirmed findings with regression tests
  • Pre-push secret scanner now catches all-caps database passwords and blocks DSN with all-caps password at HIGH gate with exit code 3
  • Persisted browser sessions stay out of git and browse state directory carries self-contained .gitignore written unconditionally when created
  • Persisted session-state.json cookies and browse-network.log / browse-audit.jsonl request headers cannot be committed
  • App Store Connect key is scoped to the one app being shipped and exit report documents how to revoke it
  • App Store Connect upload key minted during Apple release scoped to target app with allAppsVisible:false

From gstack

gstack ran an explicit security sweep over all external-contributor code merged since mid-June. No backdoor, no exfiltration path, no live secret leak. Six real findings confirmed and hardened with regression tests. The pre-push secret scanner now catches all-caps database passwords. DSN with an all-caps password at pre-push now blocks at HIGH gate (exit 3). The USER:PASSWORD documentation convention still suppresses, pinned in both directions. Persisted browser sessions stay out of git whether or not repo has a .gitignore. The browse state directory carries a self-contained .gitignore written unconditionally when created. Persisted session-state.json cookies and browse-network.log / browse-audit.jsonl request headers can never be committed. The App Store Connect key is scoped to the one app you are shipping. The exit report tells you it exists and how to revoke it. The App Store Connect upload key minted during Apple release scoped to target app with allAppsVisible:false. The iOS test bridge's Release compile-out is pinned by a free-tier static tripwire. Any regression to a platform-only gate, reordered guard, or dropped define fails CI. The browser server's Node spawn shim regains its exited promise, eager stdout/stderr drain, and 16MB output cap. Correct child-process handling restored on Windows Node fallback. Bearer-token comparison is constant-time. Loopback bearer-token comparison in browse server is constant-time. gstack-egress verify documents that ledger truncation and deletion are out of scope for forensic-observability threat model. New regression guards pin each security property against silent revert. Static tripwire for constant-time validateAuth, table-driven suppression test, unconditional-write test for state-dir ignore, static tripwire for iOS Release compile-out, restored Bun.spawn contract tests.

View originalPermalink
How 1.67.1.0 went
1.66.1.0

Every claim gstack makes now binds to the content it was made on

Added 5
  • Add bin/gstack-wtree for working-tree content fingerprint
  • Add bin/gstack-evidence verification-evidence ledger that wraps commands transparently and grades evidence as FRESH/STALE/MISSING per label
  • Add lib/tracker-guard.ts and bin/gstack-issue-guard for trust envelope on tracker text
  • Add /careful HIGH tier and additive-only project warn patterns
  • Add CI wiring scanner that fails the suite on raw tracker-text reads outside the guard
Changed 5
  • Review records now stamp commit_full/tree/dirty/wtree authoritatively with working-tree content fingerprints
  • A review of identical content grades CURRENT through rebases, amends, and squashes
  • /ship Step 5 test lanes now run wrapped with per-lane labels and per-run logs
  • /land-and-deploy checks the ledger first and cites fresh evidence
  • /document-release PR/MR body updates use a two-artifact flow with a banner tripwire
Fixed 5
  • /freeze: deny JSON silently no-oped on quote/newline paths
  • /freeze: internal spaces in the boundary path were stripped
  • /freeze: symlink final components weren't resolved
  • /freeze: JSON extractor truncated at escaped quotes and failed open
  • /freeze: missing helper file passed edits through instead of blocking

From gstack

Reviews and test results used to be prose claims: review is recent meant a commit-count guess that a rebase could crash. Both now carry a working-tree content fingerprint. A review of identical content grades CURRENT through rebases, amends, and squashes. A test run recorded by the new bin/gstack-evidence ledger stays citable at /ship's verification gate only while the content is byte-identical, the command hash matches, and nothing edited the tree mid-run.

Added: bin/gstack-wtree — working-tree content fingerprint. bin/gstack-evidence — verification-evidence ledger: run wraps any command transparently; check grades FRESH/STALE/MISSING per label. lib/tracker-guard.ts + bin/gstack-issue-guard — trust envelope for tracker text. /careful HIGH tier and additive-only project warn patterns. CI wiring scanner failing the suite on raw tracker-text reads outside the guard.

Changed: Review records stamp commit_full/tree/dirty/wtree authoritatively. /ship Step 5 test lanes run wrapped with per-lane labels and per-run logs. /land-and-deploy checks the ledger first and cites fresh evidence. /document-release PR/MR body updates use a two-artifact flow with a banner tripwire.

Fixed: /freeze: five boundary defects — deny JSON silently no-oped on quote/newline paths, internal spaces in the boundary path were stripped, symlink final components weren't resolved, the JSON extractor truncated at escaped quotes and failed open, and a missing helper file passed edits through instead of blocking.

View originalPermalink
How 1.66.1.0 went

1.67.0.0

Changed 3
  • The retry only ever publishes commits it authored itself
  • Gate evals improved from 41/43 to 43/43 with both reds root-caused
  • Brain-sync queue is only rewritten by subtracting exact records staged against a live re-read so record enqueued mid-drain survives to next boundary
Fixed 5
  • Browse now classifies a macOS XProtect kill at Chromium launch and heals itself by clearing the quarantine flag and reinstalling the pinned browser revision
  • Fresh installs link every runtime asset a skill references so /review works on clean machines the first time
  • Brain-sync queue is drained with a classified disposition and privacy-held records are retained and labeled
  • A failed push keeps its commit and re-delivers it on the next run
  • Detector push with interleaved user commit is now refused to protect author boundary

From gstack

Browse now classifies a macOS XProtect kill at Chromium launch and heals itself. It clears the quarantine flag, reinstalls the pinned browser revision from the right install root, and retries, all bounded and logged. Fresh installs link every runtime asset a skill references so /review and friends work on clean machine the first time. Brain-sync's queue is drained with a classified disposition. Privacy-held records are retained and labeled. A failed push keeps its commit and re-delivers it on the next run. The retry only ever publishes commits it authored itself. Twenty-five community PRs landed with credit. Roughly thirty-five issues close on merge. Browse launch on macOS with XProtect kill now classified and self-healed automatically instead of requiring manual reinstall. Skill runtime assets on fresh install include every referenced asset so /review works day one. Brain-sync queue at push failure retained and re-delivered with no data loss. Detector push with interleaved user commit refused to protect author boundary. Gate evals from 41/43 to 43/43 with both reds root-caused. Free suite runs approximately 7,000 tests, 90-100 seconds, green at HEAD. Brain-sync queue only rewritten by subtracting exact records staged against a live re-read so record enqueued mid-drain survives to next boundary.

View originalPermalink
How 1.67.0.0 went

1.66.0.0

Changed 1
  • test command now runs as up to six concurrent shard processes, reducing execution time from 454 seconds to approximately 90 to 100 seconds

From gstack

bun run test used to take 454 seconds. It now runs as up to six concurrent shard processes and finishes in about 90 to 100 seconds, under a strict output contract.

View originalPermalink
How 1.66.0.0 went
1.65.0.0

/autoplan, /codex on macOS, and memory ingest work again

Added 2
  • Eight missing aliases make skills discoverable without explicit docs
  • Three new team-share gates for project-first security let an admin turn the share on and off
Changed 4
  • Browser re-pair and session revocation use the standard token API instead of a phantom endpoint
  • Terminal agent refactored to propagate and name errors instead of silently swallowing them
  • Terminal agent refactored to use bounded memory
  • Terminal agent architecture can now be tested without running Playwright
Fixed 7
  • /autoplan work again on macOS
  • /codex work again on macOS
  • memory ingest work again
  • /autoplan's task aggregation now emits real tasks
  • /codex creates its temporary workspace under CODEX_HOME instead of silently failing
  • /memory-ingest's second-pass classifiers run without hanging the agent
  • Consent gates now mean what they say

From gstack

/autoplan, /codex on macOS, and memory ingest work again. And every consent gate now means what it says. This is the second and final wave of the GStack 2 fork port. Wave one took the audit infrastructure; this wave takes the fixes and the features. Three skills that failed silently on every run now work. /autoplan's task aggregation emits real tasks. /codex creates its temporary workspace under CODEX_HOME instead of silently failing. /memory-ingest's second-pass classifiers run without hanging the agent. Eight missing aliases make skills discoverable without explicit docs. Browser re-pair and session revocation use the standard token API instead of a phantom endpoint. Three new team-share gates (project-first security in 50 glyphs) let an admin turn the share on and off. Terminal agent refactored to match the daemon's quality bar: errors are propagated and named, not silently swallowed; memory use is bounded; and the architecture can be tested without running Playwright.

View originalPermalink
How 1.65.0.0 went
1.64.0.0

Ninety fixes in one wave

Added 4
  • Enforcement guards /freeze, /careful, and team-init required mode now block requests
  • /careful asks on IFS/base64 obfuscation and fails closed on unreadable input
  • Pre-push scanning implements --no-ext-diff/--no-textconv flags
  • pair-agent walks through ngrok auth in user terminal
Changed 7
  • /careful now parses tool payload with real JSON parser and handles quoted arguments
  • Specialist review agents run with run_in_background: false
  • Pre-push scanning improved with line-aligned chunked scans and real push-base resolution
  • Pre-push scanning uses byte-exact stdin for chained hooks
  • Pre-push scanning uses hunk-aware header parsing and fail-closed ref parsing
  • diff upgraded to 9.0.0
  • design/test/ joins free suite and sharded runner
Fixed 6
  • Investigate scope lock resolves check-freeze via $HOME
  • Injection-denylist and phone-pattern false positives calibrated
  • All delayed process.exit teardown bombs removed with static no-suicide tripwire
  • Orphaned sidebar chat-queue suites removed
  • Fork PRs skip eval jobs deterministically
  • memory-ingest imports gitignored staging and reconciles counts
Security 2
  • Extension denies token/port reads to content scripts and foreign extensions
  • OpenAI key file written 0600-at-create

From gstack

Enforcement guards /freeze, /careful, and team-init required mode now actually block. /careful parses tool payload with real JSON parser, handles quoted arguments, asks on IFS/base64 obfuscation, fails closed on unreadable input. Investigate scope lock resolves check-freeze via $HOME. Specialist review agents run with run_in_background: false. Pre-push scanning improved with line-aligned chunked scans, real push-base resolution, byte-exact stdin for chained hooks, --no-ext-diff/--no-textconv, hunk-aware header parsing, fail-closed ref parsing. pair-agent walks through ngrok auth in user terminal. Extension denies token/port reads to content scripts and foreign extensions. diff upgraded to 9.0.0. OpenAI key file written 0600-at-create. Injection-denylist and phone-pattern false positives calibrated. All delayed process.exit teardown bombs removed with static no-suicide tripwire. design/test/ joins free suite and sharded runner. Orphaned sidebar chat-queue suites removed. Fork PRs skip eval jobs deterministically. memory-ingest imports gitignored staging and reconciles counts. lib/ ships beside bin/ on every host install. Native AskUserQuestion answers parse correctly with (Recommended) suffix support. Autoplan task aggregator returns real tasks. Auto-upgrade pulls with --autostash over locally-patched installs. gstack-slug resolves project root by marker walk-up and canonicalizes slash branches. Design image generation fixed with honest timeout reporting. Windows icacls grants by SID. windowsHide forwarded through every spawn shim. All plan-tune hooks spawn bins through shared Windows-aware helper. mktemp templates keep X-run trailing for /codex on macOS. codex review receives explicit diff args with timeouts. Review mode runs sandboxed read-only. Artifacts Sync and telemetry-finalize un-deadened in 49 skills. update_check:false silences preamble prose. Codex hosts read AGENTS.md. setup --help prints help. Model overlays for current Claude generation. Plus ~20 more small fixes for deploy-config, artifacts-init, keychain auth, catalog description, tracked-file tests, update-check, Ubuntu detection, CRLF generation, telemetry errors, server-lock diagnostics, shell-quoted paths, benchmark validation.

View originalPermalink
How 1.64.0.0 went

1.63.0.0

Added 5
  • Hash-chained egress receipts for every off-machine send with gstack-egress list/verify/grants commands
  • gstack-context-bill for offline token bill-of-materials for skills trees
  • Sharded paid-gate runner with one process per test file and wall-clock timeout with group-SIGKILL
  • Hermetic PTY test children can register shipped skills
  • Discovery-surface cost gated with ratchet protocol
Changed 5
  • Browser /health endpoint no longer carries root auth token
  • Token bootstrap moved to pinned-origin POST /extension-token
  • Eval harness auto-comparison fixed to compare against latest completed same-tier run instead of in-progress accumulator
  • Shared modules replace duplicated logic across skill-census helpers
  • External-service E2E tests declared periodic-tier
Fixed 1
  • PTY test runner parses reflowed AskUserQuestion prompts and strips DEC cursor-visibility residue

From gstack

Hash-chained egress receipts for every off-machine send with gstack-egress list/verify/grants commands. gstack-context-bill for offline token bill-of-materials for skills trees. Sharded paid-gate runner with one process per test file and wall-clock timeout with group-SIGKILL. Browser /health endpoint no longer carries root auth token. Token bootstrap moved to pinned-origin POST /extension-token. Hermetic PTY test children can register shipped skills. Discovery-surface cost gated with ratchet protocol. Eval harness auto-comparison fixed to compare against latest completed same-tier run instead of in-progress accumulator. Shared modules replace duplicated logic across skill-census helpers. External-service E2E tests declared periodic-tier. PTY test runner parses reflowed AskUserQuestion prompts and strips DEC cursor-visibility residue. New follow-ups filed for egress ledger rotation and launch-nonce token bootstrap.

View originalPermalink
How 1.63.0.0 went

1.62.0.0

Added 4
  • Plan-mode auto-select in scope gate for plan-eng-review and plan-design-review with one-line announcement
  • Render-shape PTY detectors for scope gate question and auto-select announcement
  • Tier-alignment invariant test ensures self-gated paid test files match declared tier
  • PlanSkillObservation.outcome includes wrote_findings_before_asking
Changed 7
  • Exceptions drift-guard for identical gate templates
  • Plan-mode preamble wording clarified
  • Finding-floor harness no longer counts scope-gate render toward question floor
  • Skeleton/ratio ceilings ratcheted with attribution comments
  • Four stochastic plan-mode/finding-floor smokes now run via periodic tier
  • CI eval containers register plan-eng-review and plan-design-review as discoverable skills
  • /autoplan section skip list includes scope gate
Fixed 1
  • /ship credential pre-push guard installs correctly from git worktrees

From gstack

Plan-mode auto-select in scope gate for plan-eng-review and plan-design-review with one-line announcement. Render-shape PTY detectors for scope gate question and auto-select announcement. Tier-alignment invariant test ensures self-gated paid test files match declared tier. Exceptions drift-guard for identical gate templates. /autoplan section skip list includes scope gate. Plan-mode preamble wording clarified. Finding-floor harness no longer counts scope-gate render toward question floor. Four stochastic plan-mode/finding-floor smokes now run via periodic tier. CI eval containers register plan-eng-review and plan-design-review as discoverable skills. /ship credential pre-push guard installs correctly from git worktrees. PlanSkillObservation.outcome includes wrote_findings_before_asking. Skeleton/ratio ceilings ratcheted with attribution comments.

View originalPermalink
How 1.62.0.0 went

1.60.2.0

Changed 2
  • benchmark-cli remediation-hint check made case-insensitive
  • session-runner observability floor adjusted to expect 5 wrapped I/O sites
Fixed 1
  • eval-list-cli test now spawns from neutral directory so slug detection cannot route reads away from fixture store

From gstack

eval-list-cli test now spawns from neutral directory so slug detection cannot route reads away from fixture store. benchmark-cli remediation-hint check made case-insensitive. session-runner observability floor adjusted to expect 5 wrapped I/O sites. P1 filed for browse test files force-exiting shared bun process masking failures.

View originalPermalink
How 1.60.2.0 went

1.60.1.0

Changed 5
  • autoplan dual-voice eval now registers skills at project level matching real slash-command resolution on Claude Code 2.x
  • Transcript filter reads raw stream-json shapes for tool_use detection
  • Hang protection accepts Phase 1 review dispatch as progress evidence
  • Budget raised to 10 min / 40 turns
  • Session-runner cancels stdout reader on spawn timeout and races stderr drain against child exit plus 5s grace window

From gstack

/autoplan dual-voice eval now registers skills at project level matching real slash-command resolution on Claude Code 2.x. Transcript filter reads raw stream-json shapes for tool_use detection. Hang protection accepts Phase 1 review dispatch as progress evidence. Budget raised to 10 min / 40 turns. Session-runner cancels stdout reader on spawn timeout and races stderr drain against child exit plus 5s grace window. Regression-locked by session-runner-timeout test.

View originalPermalink
How 1.60.1.0 went

1.61.0.0

Changed 3
  • Context-restore loading sibling worktree checkpoint improved
  • Sync-gbrain drift re-register on gbrain 0.42+ with --confirm-destructive
  • Credential net plurals and runtime wiring for one-way-door detection
Fixed 5
  • AskUserQuestion fixed for Claude Code 2.1.89+ with pass-through exit 0 and empty stdout or additionalContext-only output
  • Safe-exception shortlist improvements for /careful chained-rm bypass
  • Developer-profile double counting fixed
  • Design CLI silent NaN flags fixed with loud contract
  • Thin-client brains misclassified as broken now have new thin-client engine state

From gstack

AskUserQuestion fixed for Claude Code 2.1.89+ with pass-through exit 0 and empty stdout or additionalContext-only output. /careful chained-rm bypass fixed with safe-exception shortlist improvements. /context-restore loading sibling worktree checkpoint improved. /sync-gbrain drift re-register on gbrain 0.42+ with --confirm-destructive. Developer-profile double counting fixed. Credential net plurals and runtime wiring for one-way-door detection. design CLI silent NaN flags fixed with loud contract. Thin-client brains misclassified as broken now have new thin-client engine state. Closed issues #1965, #1950, #1964 already fixed with receipts. 72 new test cases across 9 files verified failing before fix and passing after. Four community PRs absorbed with authorship preserved.

View originalPermalink
How 1.61.0.0 went

1.58.5.0

Added 6
  • First-run project scaffold classifies repo into buckets using local git and file markers
  • Returning-session loop tip nudges plan→review→ship workflow once
  • Setup first-move nudge prints intent-routed starting point
  • office-hours handoff offers to launch next review via Skill tool
  • Activation telemetry event types onboarding, first_task_scaffold_shown, handoff, route accepted by ingest
  • New unit coverage for detection buckets and eval-safe enum contract
Changed 3
  • Top-level gstack skill is now pure router sending browse/QA work to /browse
  • Browse-content test assertions repointed to browse/SKILL.md
  • Parity/carve-guard size caps bumped 1-2KB per skill

From gstack

First-run project scaffold classifies repo into buckets using local git and file markers. Returning-session loop tip nudges plan→review→ship once. Setup first-move nudge prints intent-routed starting point. office-hours handoff offers to launch next review via Skill tool. Top-level gstack skill is now pure router sending browse/QA work to /browse. Activation telemetry event types onboarding, first_task_scaffold_shown, handoff, route accepted by ingest. New unit coverage for detection buckets and eval-safe enum contract. Browse-content test assertions repointed to browse/SKILL.md. Parity/carve-guard size caps bumped 1-2KB per skill.

View originalPermalink
How 1.58.5.0 went

1.58.4.0

Added 3
  • Redaction engine gained six credential patterns for GitLab, HuggingFace, npm, DigitalOcean, Bearer, and GCP service accounts
  • /plan-eng-review and /plan-design-review confirm what to review before grinding full audit
  • Collapsed-form prose-AUQ detector with 95 unit tests
Changed 8
  • gbrain no longer force-enables GBRAIN_PREPARE on transaction-mode poolers
  • Slow-but-healthy probe now classifies as timeout and lets sync proceed
  • Telemetry error_message passes through redaction engine
  • Plan-mode test gate detects rendered AskUserQuestion in collapsed form
  • Pre-push guard fails closed on git error and catches six more credential types
  • ios-qa E2E isolated under concurrent testing
  • PTY model pinned to EVALS_MODEL or claude-sonnet-4-6
  • Stochastic ask-first smokes reclassified periodic
Fixed 4
  • Security and community dashboards stop reporting fake zero on backend error
  • Windows git-bash bins resolve imports correctly
  • Haiku state-judge stops coin-flipping on leftover spinner
  • PTY plan-mode smokes timeout on questions fixed

From gstack

gbrain no longer force-enables GBRAIN_PREPARE on transaction-mode poolers. Slow-but-healthy probe now classifies as timeout and lets sync proceed. Redaction engine gained six credential patterns for GitLab, HuggingFace, npm, DigitalOcean, Bearer, and GCP service accounts. Telemetry error_message passes through redaction engine. Security and community dashboards stop reporting fake zero on backend error. Windows git-bash bins resolve imports correctly. Plan-mode test gate detects rendered AskUserQuestion in collapsed form. Haiku state-judge stops coin-flipping on leftover spinner. /plan-eng-review and /plan-design-review confirm what to review before grinding full audit. Pre-push guard fails closed on git error and catches six more credential types. PTY plan-mode smokes timeout on questions fixed. ios-qa E2E isolated under concurrent testing. Collapsed-form prose-AUQ detector with 95 unit tests. PTY model pinned to EVALS_MODEL or claude-sonnet-4-6. Stochastic ask-first smokes reclassified periodic.

View originalPermalink
How 1.58.4.0 went

1.58.3.0

Added 5
  • GSTACK_STEALTH=extended mode layers on top of Layer C for additional stealth
  • buildGStackLaunchArgs now emits per-install cmdline switches for gbrowser Pack 1 C++ patches
  • Real-Chromium runtime coverage for webdriver, chrome.* shape, Notification/Permissions, toString depth-3, and per-install hardware
  • GSTACK_CDP_STEALTH=on opt-in flag enables --gstack-suppress-prepare-stack-trace
  • STEALTH_LAUNCH_ARGS constant shared with --disable-blink-features=AutomationControlled
Changed 4
  • Layer C stealth masking now always-on to hide webdriver, window.chrome.* shape, Notification.permission, and Function.prototype.toString proxy surviving depth-3 check
  • Per-install hardwareConcurrency and deviceMemory are now stealth-masked
  • Selenium, Phantom, Nightmare, and Playwright globals are now swept during stealth application
  • Stealth applies on every context-creation path including launch, launchHeaded, handoff, and recreateContext
Fixed 1
  • cdc_/__webdriver cleanup and Permissions notifications shim applied in applyStealth

From gstack

Always-on Layer C stealth masks webdriver, window.chrome.* shape, Notification.permission, per-install hardwareConcurrency/deviceMemory, Function.prototype.toString proxy surviving depth-3 check. Selenium/Phantom/Nightmare/Playwright globals swept. GSTACK_STEALTH=extended layers on top of Layer C. Stealth applies on every context-creation path launch, launchHeaded, handoff, recreateContext. buildGStackLaunchArgs emits per-install cmdline switches for gbrowser Pack 1 C++ patches. Real-Chromium runtime coverage for webdriver, chrome.* shape, Notification/Permissions, toString depth-3, per-install hardware, extended-mode blend with 80 stealth tests. cdc_/__webdriver cleanup and Permissions notifications shim in applyStealth. --gstack-suppress-prepare-stack-trace opt-in via GSTACK_CDP_STEALTH=on. --disable-blink-features=AutomationControlled from shared STEALTH_LAUNCH_ARGS constant.

View originalPermalink
How 1.58.3.0 went

1.58.1.0

Added 9
  • Spawned agent runners get allowlist-scrubbed environment, fresh seeded CLAUDE_CONFIG_DIR, temp GSTACK_HOME, and --strict-mcp-config
  • Hermetic-env.ts allowlist builder with pure promotedEnv() shared with lib/conductor-env-shim.ts
  • Sync-memoized singleton temp dir and seeded .claude.json for non-interactive first run
  • Pid-aware garbage collection of crashed runs
  • Hermetic-canary and hermetic-sentinel gate-tier isolation canaries
  • Static wiring tripwire for all five runners
Changed 3
  • Conductor prose AskUserQuestion renders as prose brief with reply-with-a-letter enforcement
  • All five E2E runners spawn children through hermeticChildEnv()
  • LLM-judge re-appends body-carved sections/*.md after marker slice
Fixed 1
  • ios-qa daemon uses unique pidfiles fixing already_running collisions

From gstack

Spawned agent runners get allowlist-scrubbed environment, fresh seeded CLAUDE_CONFIG_DIR, temp GSTACK_HOME, and --strict-mcp-config. Hermetic-env.ts allowlist builder with pure promotedEnv() shared with lib/conductor-env-shim.ts. Sync-memoized singleton temp dir and seeded .claude.json for non-interactive first run. Pid-aware GC of crashed runs. Hermetic-canary and hermetic-sentinel gate-tier isolation canaries. Static wiring tripwire for all five runners. gstack-detach with SIGTERM-proof, caffeinate-wrapped eval runs with machine-wide lock and per-run logs. Conductor prose AskUserQuestion renders as prose brief with reply-with-a-letter enforcement. All five E2E runners spawn children through hermeticChildEnv(). EVALS_HERMETIC=0 restores legacy env. LLM-judge re-appends body-carved sections/*.md after marker slice. ios-qa daemon uses unique pidfiles fixing already_running collisions. CLAUDE.md documents hermetic-by-default local evals.

View originalPermalink
How 1.58.1.0 went

1.58.0.0

Added 5
  • Mermaid and excalidraw fences render as vector diagrams in PDF and HTML output
  • /diagram skill generates mermaid source, editable .excalidraw file, and SVG+PNG from English description
  • Three output formats from one markdown with --to pdf|html|docx
  • --strict flag makes missing, remote, out-of-tree, or oversized images fail CI
  • Per-image directives for width and page orientation
Changed 10
  • Broken fence prints diagnostic block with parse error
  • Local image paths inline automatically and never truncate
  • Phone photos downscale to print resolution
  • Wide small-text diagrams get own vertically centered landscape page
  • HTML is self-contained with zero network references
  • Type is bigger with 12pt body and 56pt cover titles

From gstack

Mermaid and excalidraw fences render as vector diagrams in PDF and HTML output. Broken fence prints diagnostic block with parse error. /diagram skill generates mermaid source, editable .excalidraw file, and SVG+PNG from English description. Local image paths inline automatically and never truncate. Phone photos downscale to print resolution. Wide small-text diagrams get own vertically centered landscape page. Three output formats from one markdown: --to pdf|html|docx. HTML is self-contained with zero network references. Type is bigger with 12pt body, 56pt cover titles. TOC links jump correctly. --strict makes missing, remote, out-of-tree, or oversized images fail CI. Vendored offline bundle with mermaid 11.12.2 and excalidraw 0.18.0. Per-image directives for width and page orientation. Conservative auto-landscape for wide and diagram-like images. docs/howto-diagrams-and-formats.md walkthrough. Relative image paths render correctly in PDFs.

View originalPermalink
How 1.58.0.0 went

1.57.10.0

Added 6
  • Codex reviews master switch across /review, /ship, /document-release, all plan reviews, and /autoplan
  • Document-release Codex doc audit that reviews touched docs against release diff
  • Doc audit checks for stale claims, undocumented new surface, and over/under-sold CHANGELOG entries
  • codexPreflight shared helper as one self-contained bash block
  • Plan-review outside voice with automatic run and Claude subagent fallback
  • Static guards added with rationale comments
Changed 8
  • Codex reviews default enabled
  • Invalid values on set rejected and existing value preserved on typo
  • Doc audit is informational with explicit apply-fixes decision and never auto-edits docs
  • codexPreflight checks install and auth separately and emits canonical mode: ready, not_installed, not_authed, or disabled
  • Adversarial review detects auth not just install with distinct guidance for not installed vs not authenticated
  • /autoplan honors codex_reviews=disabled
  • Plan reviews must not carry opt-in question and must render default-on voice
  • /document-release must carry doc review
Fixed 4
  • Typo cannot flip paid Codex calls
  • 3 gstack-config test fixes
  • get and list print documented defaults
  • Size-budget guards widened

From gstack

codex_reviews master switch across /review, /ship, /document-release, all plan reviews, /autoplan Default enabled Invalid values on set rejected Existing value preserved on typo Typo cannot flip paid Codex calls Document-release Codex doc audit new Doc audit reviews touched docs against release diff Checks for stale claims Checks for undocumented new surface Checks for over/under-sold CHANGELOG entries Informational with explicit apply-fixes decision Never auto-edits docs codexPreflight shared helper One self-contained bash block Reads switch and sources probe Checks install and auth separately Emits canonical mode: ready, not_installed, not_authed, or disabled Plan-review outside voice default-on Want an outside voice question removed Automatic run with Claude subagent fallback Cross-model tension presented never auto-applied Adversarial review detects auth not just install Distinct guidance for not installed vs not authenticated 200-line threshold unchanged /autoplan honors codex_reviews=disabled Switch truly global 3 gstack-config test fixes get and list print documented defaults Size-budget guards widened Each with rationale comment Static guards added Plan reviews must not carry opt-in question Plan reviews must render default-on voice /document-release must carry doc review Codex host strips all of it

View originalPermalink
How 1.57.10.0 went
1.57.9.0

Your gstack checkout stays clean when gbrain is installed.

Added 3
  • gen-skill-docs command now accepts --out-dir flag to render brain-aware variant into a specified directory
  • gstack-gbrain-detect --is-ok command added
  • gstack-config gbrain-refresh command added
Changed 1
  • bin/dev-setup now renders the brain-aware variant into .claude/gstack-rendered and repoints the workspace's skill symlinks at it
Fixed 1
  • Brain-aware skill blocks now render to an untracked spot instead of being written directly into tracked source files

From gstack

Brain-aware skill blocks render to an untracked spot, never into tracked source. Before this, finishing a Conductor or dev-workspace setup with gbrain installed rewrote 16 planning and review SKILL.md files in place, adding 326 lines of brain-aware blocks straight into tracked source. Your working tree came back dirty, one stray git add away from committing a token regression for everyone who does not run gbrain. Now gen-skill-docs --out-dir renders the brain-aware variant into an untracked per-workspace directory, and bin/dev-setup repoints the workspace's skill symlinks at it. Added: gen-skill-docs --out-dir. gstack-gbrain-detect --is-ok. gstack-config gbrain-refresh. Changed: bin/dev-setup renders the brain-aware variant into .claude/gstack-rendered.

View originalPermalink
How 1.57.9.0 went
1.57.8.0

`browse` is now the one Chromium on the box, for offline rendering too.

Added 3
  • js and eval commands support --out flag to write render results straight to disk
  • Add --raw flag to write literal string output instead of decoding base64 data URLs
  • Offline render mode documentation
Changed 1
  • --out is now a per-invocation WRITE capability

From gstack

js/eval --out writes a render straight to disk, so skills stop bundling their own puppeteer. You can now turn your own local HTML or JSON into a PNG (or any bytes) on disk through the same headless browse Chromium you already run, with no second browser install. js " " --out out.png and eval script.js --out out.png write the evaluate result to a file instead of returning it. When the result is a base64 data URL (the shape Excalidraw exports, og-image generators, and card renderers hand back), --out decodes it to raw bytes for you; pass --raw to write the literal string. Added: js / eval --out render-to-file. --raw flag. Offline render mode docs. Changed: --out is a per-invocation WRITE capability.

View originalPermalink
How 1.57.8.0 went
1.57.4.0

The completeness principle is now Boil the Ocean, matching the post it came from.

Changed 1
  • Rename the "Boil the Lake" principle to "Boil the Ocean" across ETHOS file, all generated skills, and the developer-profile dial

From gstack

One name across the ETHOS file, every skill, and the developer-profile dial. The principle that tells gstack to do the complete thing was called "Boil the Lake" in ETHOS.md and in every generated skill, with the ocean cast as the anti-pattern. The developer-profile system and the completeness intro link already used "boil the ocean" as the good, ship-the-whole-thing pole. This renames the principle to Boil the Ocean everywhere and reframes the metaphor: the ocean is the complete destination, and lakes are the boilable units you ship on the way there.

View originalPermalink
How 1.57.4.0 went
1.57.7.0

Every plan review now ends by telling you, in one line, whether anything is still unresolved.

Added 1
  • Mandatory unresolved-decisions status in the GSTACK REVIEW REPORT as a blocking approval gate that displays either open decisions with their impact or NO UNRESOLVED DECISIONS before approval

From gstack

The GSTACK REVIEW REPORT closes with the open decisions, or "NO UNRESOLVED DECISIONS" in plain sight, before you approve. When a plan-review skill (/plan-ceo-review, /plan-eng-review, /plan-design-review, /plan-devex-review, and /codex) finishes and hands you the plan to approve, its report now ends with a mandatory unresolved-decisions verdict. If decisions are still open, it lists each one and what breaks if you ship it deferred. If nothing is open, it prints the exact line NO UNRESOLVED DECISIONS. Added: Mandatory unresolved-decisions status in the GSTACK REVIEW REPORT. Blocking approval gate.

View originalPermalink
How 1.57.7.0 went
1.57.6.0

Eight community-filed bugs fixed in one wave, four of them security guards that were quietly failing open.

Fixed 5
  • Redaction gate now catches modern OpenAI keys with sk-proj-, sk-svcacct-, and sk-admin- prefixes
  • Redaction size cap no longer fails open on a bad flag
  • Cross-project learnings trust gate no longer leaks untrusted rows between projects
  • Destructive-action classifier now correctly flags password rotation patterns
  • /ship adversarial review no longer chokes on security tests

From gstack

Your redaction gate now catches modern OpenAI keys, and /ship's adversarial review stops choking on your own security tests. This is a fix wave. The throughline: guards that reported success while doing nothing. The secret-redaction gate that every /spec, /ship, /cso, and /document-* run passes through was blind to modern sk-proj-/sk-svcacct-/sk-admin- OpenAI keys and silently dropped its size cap on a bad flag. The cross-project learnings trust gate was an allowlist on paper and a denylist in code, so untrusted rows leaked between projects. The destructive-action classifier waved through "rotate the database password." Each one looked like it was protecting you. None of them were. All four now fail closed, with tests that pin the exact case that used to slip by. Fixed: Redaction misses modern OpenAI keys. Redaction size cap fails open on a bad flag. Cross-project learnings trust gate leaked. Destructive-action classifier missed rotate password pattern.

View originalPermalink
How 1.57.6.0 went
1.57.3.0

Every PR `/ship` opens gets the version stamped into its title, fork and agent PRs included.

Changed 4
  • The rule is now in the always-loaded part of the skill with a guard to keep it there
  • The /ship command stamps vX.Y.Z.W onto the title of every PR or MR it creates or updates
  • The rule now lives in the always-loaded core of the ship skill instead of an on-demand section so the agent applies it regardless of which section is opened
  • CI workflow now rewrites PR titles to match VERSION on every PR that bumps the version, including fork and agent PRs

From gstack

The rule rides in the always-loaded part of the skill now, and a guard keeps it there. /ship stamps vX.Y.Z.W onto the title of every PR or MR it creates or updates, so the version is the first thing you read in the PR list. That rule now lives in the always-loaded core of the ship skill instead of an on-demand section, so the agent applies it whether or not it opened the section that spells out the full procedure. A CI workflow backs this up: it rewrites a title to match VERSION on every PR that bumps the version, and it now reaches fork and agent PRs too.

View originalPermalink
How 1.57.3.0 went
1.57.5.0

Your agent now keeps its decisions, not just its code.

Added 7
  • Cross-session decision memory with an event-sourced store at ~/.gstack/projects//decisions.jsonl
  • gstack-decision-log command to capture durable decisions, reverse them with --supersede, expunge secrets with --redact, or rewrite the log to its active set with --compact
  • gstack-decision-search command to read active decisions filtered by branch/issue scope, with options for --recent N, --scope, --query, --all, and --json
  • Session-start resurfacing that shows scope-relevant active decisions at the top of a session
  • Skill capture for /plan-ceo-review, /plan-eng-review, /spec, and /ship commands to record structured decisions automatically
  • Cross-session decision memory section in CLAUDE.md
  • /sync-gbrain call-graph build with --dream option
Changed 2
  • Decision text that resurfaces into agent context is datamarked so stored text cannot masquerade as instructions
  • /sync-gbrain pin guidance is now accurate for current gbrain
Fixed 1
  • /sync-gbrain no longer wedges forever on a crashed autopilot daemon's stale lock

From gstack

The durable calls you make, and the "why" behind them, are captured, curated, and resurfaced across sessions, with no daemon to run. Added: Cross-session decision memory. An event-sourced (decide/supersede/redact) store at ~/.gstack/projects/ /decisions.jsonl. gstack-decision-log — capture a durable decision, reverse one (--supersede ), expunge an accidental secret (--redact ), or rewrite the log to its active set (--compact). gstack-decision-search — read active decisions, scope-filtered to the current branch/issue, with --recent N, --scope, --query, --all, --json. Session-start resurfacing. Context Recovery shows the scope-relevant active decisions at the top of a session. Skill capture. /plan-ceo-review, /plan-eng-review, /spec, and /ship record their structured decisions automatically. A ## Cross-session decision memory section in CLAUDE.md. /sync-gbrain call-graph build (--dream). Changed: Decision text that resurfaces into agent context is datamarked so stored text can never masquerade as instructions. /sync-gbrain pin guidance is accurate for current gbrain. Fixed: /sync-gbrain no longer wedges forever on a crashed autopilot daemon's stale lock.

View originalPermalink
How 1.57.5.0 went
View all

Discussion