Skip to content

v1.60.2.0 fix: free-suite drift on dev machines (eval-list cwd, gemini regex, observability floor) - #2470

Merged
garrytan merged 5 commits into
mainfrom
garrytan/fix-free-suite-env-drift
Aug 7, 2026
Merged

v1.60.2.0 fix: free-suite drift on dev machines (eval-list cwd, gemini regex, observability floor)#2470
garrytan merged 5 commits into
mainfrom
garrytan/fix-free-suite-env-drift

Conversation

@garrytan

@garrytan garrytan commented Aug 7, 2026

Copy link
Copy Markdown
Owner

Full-suite health check found three free-suite tests failing on dev machines while CI stayed green. All three are test-side drift, fixed here with per-file green receipts; one deeper infrastructure finding is filed as a P1 TODO rather than rushed.

Fixes

  • test/eval-list-cli.test.tsgetProjectEvalDir() probes the cwd-relative .claude/skills/gstack/bin/gstack-slug; with cwd: ROOT on any machine with the dev self-symlink the probe succeeds and the CLI reads an empty project-scoped dir instead of the legacy store the test seeds. Now spawns from a neutral cwd with an absolute script path, so both slug probes fail deterministically (same behavior as CI). 2/2 pass.
  • test/benchmark-cli.test.ts — the Gemini NOT-READY message was reworded ("Export GEMINI_API_KEY ... personal OAuth free-tier is no longer supported"); the remediation-hint pattern only knew lowercase export. Pattern is now case-insensitive. 15/15 pass.
  • test/helpers/observability.test.ts — check 11's /* non-fatal */ marker floor of 6 went stale when the shell-free spawn (aa3bd6f0) removed the promptFile unlink and its marker. Floor is now 5 with the surviving sites named. The invariant itself holds at every remaining I/O site. 15/15 pass.

Filed, not rushed

P1 in TODOS.md: at least five browse test files force-exit the shared bun process (setTimeout(() => process.exit(0), 500)), which can exit 0 before bun prints its summary — masking real failures. That is exactly how these three failures hid behind green exit codes. Removing the exits without fixing the handle leaks they paper over would trade silent failure for suite hangs, so it gets its own focused pass (receipts and fix path in the TODO).

Verification

  • Each fixed file green individually (2/2, 15/15, 15/15).
  • Full free suite exit 0 with the only remaining (fail) line being a load flake (gstack-artifacts-init under a concurrent 15-way eval run; 16/16 standalone).
  • gen-skill-docs version-match test green after the 1.60.2.0 sync (VERSION + package.json + CHANGELOG, slot confirmed clean via gstack-next-version).

🤖 Generated with Claude Code

garrytan and others added 5 commits August 7, 2026 13:29
…n't dodge the fixture store

getProjectEvalDir() probes cwd-relative .claude/skills/gstack/bin/gstack-slug;
with cwd=ROOT on a dev machine the self-symlink makes it succeed, routing reads
to an empty project-scoped dir instead of the seeded legacy ~/.gstack-dev/evals.
Neutral cwd + absolute script path fails both probes deterministically — same
behavior as CI.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…i NOT-READY message

The message now leads with 'Export GEMINI_API_KEY...' (free-tier OAuth
deprecation); the old pattern only knew lowercase 'export'.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… removed promptFile unlink

aa3bd6f deleted the prompt temp file (and its /* non-fatal */ marker) when it
dropped shell interpolation. The invariant — every runner I/O path wrapped
non-fatally — still holds at the 5 remaining sites, now named in the comment.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Five browse test files setTimeout(() => process.exit(0), 500) inside the shared
bun process; the suite can exit 0 before the summary with real failures masked.
Receipts + fix path filed.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@trunk-io

trunk-io Bot commented Aug 7, 2026

Copy link
Copy Markdown

😎 This pull request was merged.

@github-actions

github-actions Bot commented Aug 7, 2026

Copy link
Copy Markdown

E2E Evals: ✅ PASS

0/0 tests passed | $0 total cost | 13 parallel runners

Suite Result Status Cost

13x ubicloud-standard-8 (Docker: pre-baked toolchain + deps) | wall clock ≈ slowest suite

@garrytan
garrytan merged commit 960c3a8 into main Aug 7, 2026
25 checks passed
garrytan added a commit that referenced this pull request Aug 7, 2026
Main's #2470 fixes the three free-suite dev-machine drift failures this
branch had independently diagnosed and receipted (eval-list dev-symlink cwd
escape, benchmark-cli case-brittle regex, observability floor). Union merge:
VERSION/package.json stay at this branch's 1.61.0.0 (> main's 1.60.2.0,
allocator-consistent); CHANGELOG keeps 1.61.0.0 on top of main's 1.60.2.0;
TODOS unions both waves' filings (incl. main's new P1 on force-exit-0
masking suite failures).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
garrytan added a commit that referenced this pull request Aug 7, 2026
Main's #2470 fixes the three free-suite dev-machine drift failures this
branch had independently diagnosed and receipted (eval-list dev-symlink cwd
escape, benchmark-cli case-brittle regex, observability floor). Union merge:
VERSION/package.json stay at this branch's 1.61.0.0 (> main's 1.60.2.0,
allocator-consistent); CHANGELOG keeps 1.61.0.0 on top of main's 1.60.2.0;
TODOS unions both waves' filings (incl. main's new P1 on force-exit-0
masking suite failures).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant