A light-weight and powerful meta-prompting, context engineering and spec-driven development system for Claude Code by TÂCHES.
chore(3686): add release-tarball lifecycle smoke to install-smoke workflow (#3692)
* chore(3686): add release-tarball lifecycle smoke to install-smoke workflow
Closes #3686.
Adds a non-interactive lifecycle smoke that runs against the installed
tarball (not the working tree). Catches the two recent release-time bug
classes that the working-tree test suite cannot see:
* #3684 — symbol mismatches between init.cjs imports and secrets.cjs
exports that landed in v1.42.3 (closed/fixed-pending-release).
* #3668 — bare `gsd-sdk` invocations in 75 of 78 workflow files with no
`command -v gsd-sdk … elif node "$GSD_TOOLS"` fallback (open).
Shape:
* `scripts/release-tarball-smoke.cjs` — pure CJS module exporting a
frozen `SMOKE` enum and a `runSmoke({ tarballPath, installPrefix,
expectedVersion, fixtureDir, lifecycleCommands })` function. CLI
`--json` mode prints `JSON.stringify(result)` and exits 0 iff
`result.code === SMOKE.OK`. Install is `--prefix <tmpdir>` so it
does not pollute global node_modules.
* `tests/release-tarball-smoke.test.cjs` — 6 tests covering happy
path, version mismatch, lifecycle command file resolution,
missing-command detection, sdk binary callability, and structural
workflow-body checks. Tests assert on the SMOKE enum directly; no
`assert.match` on rendered prose, no try/finally in test bodies,
no source-grep theater. Uses `before`/`after` to pack+install
once across the test file.
* `tests/release-tarball-smoke-workflow.test.cjs` — 7 structural
assertions on the parsed install-smoke.yml IR (workflow_call
trigger preserved, lifecycle step calls release-tarball-smoke.cjs
with --json, jq check enforces result.code === "ok", path filter
includes the new files, artifact-on-failure step present).
* `.github/workflows/install-smoke.yml` — extended (not duplicated).
New "Lifecycle smoke" step after the existing version check, on the
same matrix. Artifact upload on failure for debugging. Path filter
now triggers on changes to the new script + test.
Per CONTRIBUTING.md §"Prohibited: Raw Text Matching on Test Outputs"
this PR avoids the same anti-pattern that caused PR #3666 to be
reverted (PR #3688) — the script returns frozen enum codes, tests
assert on the enum, never on stdout strings.
Workflow-body checks in Cycle 3 are INFORMATIONAL (count returned,
not enforced) on this PR. After #3668's fix lands and the 75 missing
fallbacks are added, the lane can be tightened to enforce zero.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* fix(3686): harden release smoke workflow and query scanner
* fix(3686): move tarball-smoke test to install suite to fix Windows ETIMEDOUT + coverage OOM
Windows (Node 22/24/26, jobs 76565215694/76565215710/76565215812):
release-tarball-smoke.test.cjs had no suite marker so run-tests.cjs
classified it as 'unit', running it on Windows PR CI. The before() hook
calls execFileSync(npm.cmd install -g ...) with a 55 s timeout; on
Windows GHA runners this npm global install consistently hits ETIMEDOUT
(~62 s observed), causing all 3 Windows lanes to fail.
Coverage (job 76565215085):
c8 ran test:coverage:unit (unit suite only) with V8 coverage tracking
active across child processes. The tarball-smoke test's before() hook
spawned npm install subprocesses while c8 held V8 coverage descriptors
open, driving the Node heap to 4 GB+ and triggering an OOM abort during
report generation (exit code 134, all 5682 tests had already passed).
Fix: rename to tests/release-tarball-smoke.install.test.cjs so
run-tests.cjs routes it to the 'install' suite. The install suite is
already skipped on PR CI by design (test.yml lines 179-181: only runs on
main push). The dedicated install-smoke.yml workflow continues to exercise
this test on its own matrix. Also update the install-smoke.yml PR path
filter and the structural wiring test assertion to match the new filename.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* refactor(test): route tarball-smoke install test through tests/helpers.cjs
Replaces direct fs.mkdtempSync and execFileSync calls in tests/release-tarball-smoke.install.test.cjs with createTempDir() and a new runNpm() helper in tests/helpers.cjs. Cleanup is now automatic via the helper. Addresses CodeRabbit Major refactor at https://github.com/gsd-build/get-shit-done/pull/3692#discussion_r3260433892.
---------
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com> T
Tom Boucher committed
ef951098a61e800d8b15d218b864bf304733fc52
Parent: b01089c
Committed by GitHub <noreply@github.com>
on 5/18/2026, 5:05:02 PM