- Required free-tests lane builds gate binaries and runs nine make-pdf E2E gates
- Ninety-five tests added for six zero-coverage surfaces
- Paid lane re-platforms CI onto the same sharded runner used locally with one planner manifest and sliced executors
- Paid CI report now fails closed when a slice's artifact never lands
- One hundred thirty-five touchfiles keys now name their own declaring test file
- Two expect(true) paid stubs converted to test.todo
- restrictDirectoryPermissions now warns and skips symlinked dirs on both platforms
- Judges resolve their model through lib/eval-model.ts
- Three CI eval jobs that ran zero tests and passed on every PR now execute actual test content
- Four paid test files that could never execute in any lane are now activated
- Required free-tests check no longer silently skips nine make-pdf gates on Linux
- Fifty-seven E2E files that ran in no scheduled lane are now included in test lanes
- Free suite now packs shards by recorded per-file durations instead of file counts for faster execution
- Five quarantined browse tests reactivated
- Five test files stopped assigning GSTACK_HOME at module scope
- Shared /tmp artifact paths in six PTY tests became per-test mkdtemps
- Seven 28-minute test timeouts inside 25-minute CI jobs trimmed to the physical ceiling
- Serial tree-mutating shard removed from free suite
- Two vestigial eval matrix rows that ran zero tests per PR deleted
From gstack
Green now means green: every test runs somewhere, provably. 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 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. The required free-tests lane builds the gate binaries and runs the nine make-pdf e2e gates. Deleted the two vestigial eval matrix rows that ran zero tests per PR. Activated the four paid test files whose names fell outside the paid globs. 135 touchfiles keys now name their own declaring test file. Five quarantined browse tests reactivated. The two expect(true) paid stubs are test.todo. Five test files stopped assigning GSTACK_HOME at module scope. Shared /tmp artifact paths in six PTY tests became per-test mkdtemps. restrictDirectoryPermissions warns and skips symlinked dirs on both platforms. Judges resolve their model through lib/eval-model.ts. Seven 28-minute test timeouts inside 25-minute CI jobs trimmed to the physical ceiling. Free suite: duration-aware LPT shard packing. TREE_MUTATING is empty: gen-skill-docs.ts gained a main() guard. Paid runner: full-stream spooling to per-shard log files. Paid CI re-platform: evals.yml gains a sliced lane. The four worst fixed sleeps became condition polls or stdin-EOF-bound child lifetimes. CI hygiene: least-privilege permissions on every workflow, one pinned Bun version everywhere, the image-tag triple bound by test. 95 tests for six zero-coverage surfaces. Policy and tripwire tests for paid-orphan tripwire, GSTACK_HOME module-scope tripwire, bun-version drift, image-tag binding.