v1.78.0.0 release metadata: VERSION, package.json translation, CHANGELOG wave entry, agents digest

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Garry Tan
2026-08-31 22:07:16 +00:00
co-authored by Claude Fable 5
parent 2298af78e5
commit 6b5ae64e79
4 changed files with 77 additions and 3 deletions
+74
View File
@@ -1,5 +1,79 @@
# Changelog
## [1.78.0.0] - 2026-08-31
**Both red weekly lanes are green again, 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 objective: the echoed `SESSION_KIND: spawned` status line or an explicit "you are a SPAWNED subagent" declaration in the dispatch prompt, never an inference. CI env vars and pasted-looking tasks are named as non-markers. 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 #2679: a failed `mktemp` in the vendored upgrade path used to `rm -rf` your install's backup after a failed swap. The swap now aborts loudly and restores the backup.
### The numbers that matter
Sources: OSV scanner v2.3.8 (the exact release CI pins) on a frozen clean install; weekly CI runs 33369295978 (OSV) and 33363624506 (periodic); local A/B repro of `test/skill-e2e-plan-ceo-finding-count.test.ts`; `bun run test` on this tree vs a v1.77.0.0 scratch worktree.
| Property | Before | After |
|---|---|---|
| OSV advisories on `./` recursive scan | 105 (24 packages, lane red 3 weeks) | 0, exit 0 (3 expiring reasoned ignores) |
| Suppression config | inert since v1.65 | loaded via explicit `--config`, wiring-tested |
| Periodic-lane review questions (5-finding plan) | reviewCount=0 (14/73 shards red) | full question flow on the same repro |
| Failed upgrade swap | deletes backup and install | restores backup, aborts loudly |
| Community PRs absorbed / issues closed | 40 open PRs, 17 of these issues open | 18 absorbed with credit, 17 issues closed |
| diagram-render offline bundle | 9.96 MB (duplicate mermaid 10 + 11) | 7.59 MB |
| Free-suite tests | 8,519 | 8,630 (+111; receipts red on v1.77) |
### What this means for you
Plan reviews ask their questions again, `browse stop` actually stops Chromium, secrets scanning can't be silently disabled by a failed `mktemp` or a slow gitleaks probe, and /gstack-upgrade cannot eat your install on a bad temp dir. If you filed one of the 17 closed issues or the 18 absorbed PRs: your fix shipped, with your name on it. Upgrade with /gstack-upgrade.
### Itemized changes
#### Fixed
- **AskUserQuestion spawned-trigger objectivity (periodic-lane regression).** The v1.76 rule's "(or your dispatch prompt marks this session as spawned)" allowed inference; plan-review E2Es collapsed to zero questions. Trigger is now the echoed STATUS line or an explicit dispatch declaration, with an absence-safe interactive fence that is quota-silent (it classifies the session and never changes how many questions a skill asks). Task-tool subagents keep the prose channel (they inherit the parent env, so the dispatch prompt is their only spawned signal); #2733's env-prefix channel is untouched, and the escape sentence in both AUQ hooks now says "declared, never inferred."
- **mktemp guards at all three skill-content sites (#2679).** redact-doc resolver, ship pr-body, and the vendored upgrade path abort loudly on mktemp failure; the upgrade swap restores the backup on a failed `mv` instead of deleting it; the GitLab MR path sends the scanned file's bytes instead of re-rendering an unscanned heredoc; `gstack-redact --from-file ""` errors instead of silently reading stdin.
- **OSV lane green (supersedes #2695).** Explicit `--config` (auto-discovered configs apply per-directory and never covered `lib/diagram-render/bun.lock`); `overrides` pin ip-address 10.3.1 (clears both nested nodes, including express-rate-limit's exact 10.1.0 pin that a top-level bump provably cannot reach — @anupamme's #2695 credited for the parallel diagnosis) and sharp 0.35.0 (smoke-tested); marked ^18.0.11; full in-range lockfile refresh; diagram-render bumped through its own build-script contract (mermaid 11.16.1, excalidraw 0.18.1, mermaid-to-excalidraw 1.1.2 → 2.2.2, which retires the entire duplicate mermaid-10 advisory chain); every ignore carries a reason, an upgrade trigger, and an `ignoreUntil` expiry, pinned by a new wiring test so the file can never go inert again.
- **A slow gbrain `--version` probe classifies as `timeout`, never `no-cli` (#2716).** A bun-shim install on a loaded box silently lost every brain-aware block because `no-cli` is the one status `--is-ok` does not forgive.
- **codex skill: unclosed consult-mode fence, `turn.failed` reported as a failure, portable exit-code capture (#2671, #2669).** Every fenced region after the unclosed fence rendered inverted; a stated turn failure read as a "possible disconnect" (consult mode had no completeness check at all); `${PIPESTATUS[0]}` is empty under zsh so hang detection never fired and clean runs printed spurious exit noise. A repo-wide CommonMark-faithful fence-pairing test now guards every generated doc, and the exit-capture form is executed under real bash and zsh in tests. Expect `codex_timeout` telemetry to start firing for zsh users — that's the counter working, not a regression.
- **Outside-voice fallback labeled honestly (#2735).** When Codex is unavailable the fallback reviewer is a same-family Claude subagent; the copy no longer sells it as "cross-model coverage" with "genuine independence."
- **skill_prefix works under a gbrain render (#2738).** gstack-relink now name-patches the render tree — the file the host actually serves.
- **Rendered section paths survive the atomic swap (#2692).** gen-skill-docs gained `--link-root`; the swap-in callers pass the final dir, so rendered skills no longer carry ~9 dead Read paths into a directory the swap just deleted.
- **Persistent timeline Stop hook opt-out (#2677).** `--no-team` stays one-shot; the new `timeline_stop_hook` config key (flags, env, full gstack-config surface) survives upgrades, and an explicit "no" removes a live registration.
- **browse: macOS headless GPU spin tamed + the lock-less headless Chromium is reaped on stop (#2709).** Darwin-gated flag set (reporter-validated, `GSTACK_DISABLE_GPU=off` escape) exposed as a pure, unit-testable function; the daemon records the launched child's pid + start time, and stop paths reap a survivor only after verifying both the recorded start time and a Chromium-looking cmdline, so a recycled PID is never killed.
- **gstack-wtree: a failed `touch` falls through to the HEAD seed (#2687 hardening).** The underlying same-size-rewrite race was fixed in v1.74; the reporter's repro now runs 20/20 clean, and the one silent path that could reopen it is closed.
#### Community PRs absorbed (authorship preserved on the branch commits)
- Codex preflight: a CLI that cannot execute reports `broken_install`, never `ready` — the wave completed autoplan's hand-maintained preflight chain and narrowed the install-signature grep to failed spawns. Contributed by @ukheni50 (#2745; fixes #2742).
- ship design-checklist path points at the installed gstack/review copy. Contributed by @Lockyer228 (#2717; fixes #2694).
- Feature markers live in GStack state, not project checkouts — the wave re-applied the CI seeding to the composite action and added an upgrade migration so nobody gets re-prompted. Contributed by @simonaltit (#2748; fixes #2728).
- memory-ingest: transcript pages no longer vanish to slug collisions (887 staged → 0 ingested) or a frontmatter-fence render bug. Contributed by @rayers (#2699; fixes #2724).
- browse js/eval returns the value of an async IIFE. Contributed by @loulanyue (#2747; fixes #2727).
- land-and-deploy checks fork branches in the head repository — the wave replaced the metadata command (gh leaves `nameWithOwner` empty) and made fork branches report-only. Contributed by @pttydou (#2725; fixes #2696).
- gstack-config rejects malformed `cross_project_learnings` at set. Contributed by @szsunyuan (#2676; fixes #2673).
- gbrain-sync's pinned-source test is hermetic under a live autopilot. Contributed by @szsunyuan (#2689; fixes #2685).
- redact: stale managed pre-push hooks refresh in place, so shipped wrapper fixes reach existing installs. Contributed by @schienbiz (#2731).
- redact: Groq, Tavily, and Notion API key patterns. Contributed by @schienbiz (#2730).
- redact: `.env.local` is not an internal hostname. Contributed by @davidani-davi (#2740).
- redact: git SSH remotes are not emails — the wave named the lookahead constant. Contributed by @alopes50 (#2734).
- gbrain ≥0.43 held-lock refusal classifies as engine-locked, not broken-config. Contributed by @pvanl (#2698).
- A slow gitleaks probe no longer permanently disables secret scanning. Contributed by @deniszjukow (#2715).
- open-gstack-browser pre-flight actually kills the stale daemon (the pid grep never matched pretty-printed JSON). Contributed by @deniszjukow (#2714).
- browse CLI honours CHROMIUM_PROFILE in profile-lock cleanup — the wave added the wiring tripwire. Contributed by @adam-badar (#2732).
- make-pdf's pdftotext probe reads poppler's stderr banner instead of reporting "unknown" everywhere. Contributed by @snymanpaul (#2690).
- bin writers no longer drop learnings and question events on paths with apostrophes; MSYS-form GSTACK_HOME works — the wave unified all four writers on the env-var import pattern. Contributed by @shreshth-designs (#2720).
#### For contributors
- Tests: 8,519 → 8,630 (+111 across the wave; every behavior fix carries a regression test proven red on a v1.77.0.0 scratch worktree via base-compatible reproducers — tests that merely fail to compile on the base don't count as receipts).
- New structural guards: generated-doc fence pairing (CommonMark state machine, not mod-2 counting), no bare `${PIPESTATUS[0]}` in codex sections (plus real bash+zsh execution), OSV config wiring (flag ↔ filename ↔ entry hygiene, `ignoreUntil` mandatory), gstack-redact CLI empty-path rejection, cli.ts profile-dir delegation.
- 19 carve skeleton ceilings re-pinned with measured values (+~440 bytes/skill for the AUQ fence); autoplan re-pinned again for the broken-install preflight arm.
- `gen-skill-docs --link-root` exists for render-into-tmp-then-swap callers; direct-render callers need no change.
- The absorbed test files gained spawn timeouts (v1.77 sync-spawn tripwire predates them).
## [1.77.0.0] - 2026-08-31
**Every PR stops paying for evals twice.**
+1 -1
View File
@@ -1 +1 @@
1.77.0.0
1.78.0.0
+1 -1
View File
@@ -1,4 +1,4 @@
# gstack digest v1.77.0.0 — regenerate/re-copy after upgrading gstack
# gstack digest v1.78.0.0 — regenerate/re-copy after upgrading gstack
Behavioral rules from gstack (https://github.com/garrytan/gstack), compressed
for agent hosts without a full skill install. The full skills add workflows,
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "gstack",
"version": "1.77.0",
"version": "1.78.0",
"description": "Garry's Stack — Claude Code skills + fast headless browser. One repo, one install, entire AI engineering workflow.",
"license": "MIT",
"type": "module",