What’s New

gstack 1.58.1.0

1.58.1.0

Local evals stop lying. Spawned `claude` test children run in a sealed clean room,

Added
  • Hermetic E2E environment with allowlist-scrubbed environment, fresh seeded CLAUDE_CONFIG_DIR, temp GSTACK_HOME, and --strict-mcp-config for spawned agents
  • Two gate-tier isolation canaries
  • Static wiring tripwire
  • gstack-detach wrapper for eval runs with SIGTERM-proof idle-sleep-proof behavior, machine-wide lock for concurrent worktree serialization, run-scoped logs, and EXIT= sentinel
  • eval:bg scripts
  • Conductor prose AskUserQuestion rendering with labeled questions, per-option completeness scores, and letter-based reply enforcement
Changed
  • All five E2E runners spawn children through hermeticChildEnv()
  • hermetic-env.ts is now a global touchfile
Fixed
  • Workflow LLM-judge now re-appends body-carved sections/*.md
  • ios-qa daemon scenarios use unique pidfiles

and in Conductor every decision is a plain-text brief you answer with a letter. Two things shipped here. First, the local E2E harness is now hermetic by default: every spawned agent gets an allowlist-scrubbed environment, a fresh seeded CLAUDE_CONFIG_DIR, a temp GSTACK_HOME, and --strict-mcp-config. Before this, a dev machine leaked the operator's ~/.claude config, MCP servers (gbrain, Conductor), skills, ~/.gstack decision logs, and CONDUCTOR_*/CLAUDECODE env into every child, so local eval results disagreed with CI for reasons that had nothing to do with the code under test. Now local signal matches CI. Set EVALS_HERMETIC=0 to debug against real operator state. Second, in a Conductor session gstack no longer fights Conductor's flaky AskUserQuestion tool. It detects the session and renders every decision as a prose brief, a labeled question with a recommendation, per-option completeness scores, and "reply with a letter," enforced by a PreToolUse hook that denies the tool and redirects to prose. Destructive confirmations demand an explicit typed answer. Agents that launch long eval runs get gstack-detach: a SIGTERM-proof, idle-sleep-proof wrapper with a machine-wide lock so concurrent worktrees serialize instead of saturating the model API, run-scoped logs, and a guaranteed EXIT= sentinel so a poller never mistakes silence for success. Added: Hermetic E2E environment. Added: Two gate-tier isolation canaries. Added: Static wiring tripwire. Added: gstack-detach + eval:bg scripts. Added: Conductor prose AskUserQuestion. Changed: All five E2E runners spawn children through hermeticChildEnv(). hermetic-env.ts is a global touchfile. Fixed: The workflow LLM-judge now re-appends body-carved sections/*.md. Fixed: ios-qa daemon scenarios use unique pidfiles.

View original