chore: pin deps, collapse CI to one job, deactivate dependabot, fix node-pty on macOS#19
Merged
Merged
Conversation
node-pty 1.1.0's published tarball ships
prebuilds/darwin-{arm64,x64}/spawn-helper without the executable bit
(0o644). The first time the test pty harness called pty.spawn() on
macOS, posix_spawnp from the native binding refused the helper and
returned "posix_spawnp failed". Linux dodged this because no Linux
prebuild ships; node-gyp recompiled the helper on install and the
compiler emits an executable. Windows uses winpty/conpty.
The postinstall hook chmods the helpers to 0o755. Idempotent and
defensive: missing prebuilds are skipped, chmod failures are
swallowed so postinstall can never fail an install. End users do
not call pty.spawn anywhere in clio's runtime; this only affects
test harness usage on macOS, but shipping it as a real postinstall
keeps `npm install` and `npm ci` honest on every platform.
Early-stage heavy dev does not need a 3-job split, a separate cross-platform workflow with auto-issue creation, or a dependabot that opens a PR every time someone pushes a patch upstream. Drop: - .github/workflows/ci-cross-platform.yml (macOS post-merge + nightly) - .github/dependabot.yml (the whole config; revisit when the surface is stable enough to want passive update PRs) Reshape ci.yml to one job that runs typecheck + lint + test + build + e2e on Ubuntu / Node 24. Same coverage as before, single check, no theater. Branch-protection contexts collapse to just "ci" to match.
Caret ranges meant npm pulled fresh patches on every install and dependabot proposed PRs for the same. With dependabot deactivated and the project under heavy iteration, we want reproducible installs: two contributors running `npm ci` two months apart get identical trees. All three pi-mono packages aligned at 0.70.2 (the user-merged bump in #18 left @mariozechner/pi-agent-core ahead of pi-ai and pi-tui). Full local CI clean against the matched 0.70.2 set.
b8d2092 to
2d35fb7
Compare
bashTool spawns `/bin/bash -lc`. On a cold CI runner /etc/profile takes long enough to read that the SIGTERM from a 250ms abort can land before the inline `trap "" TERM` is installed, killing the shell at the default disposition. The test then sees ~250ms total elapsed and fails the >=5000ms assertion even though the production escalation path is fine. Move the abort to 1500ms (well past the slowest profile read we see) and assert the >=4500ms grace window relative to the abort instead of the test start. Same coverage, no flake.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Single PR. Three concerns, one merge:
^drift.npm cireproduces an identical tree. All three@mariozechner/pi-*packages aligned at 0.70.2 (the manual merge of build(deps): bump @mariozechner/pi-agent-core from 0.69.0 to 0.70.2 #18 left them mismatched).lint + typecheck + test + build + e2eon Ubuntu / Node 24. Matrix and cross-platform-tracking deleted; revisit when there's a reason.Files
scripts/fix-node-pty-permissions.mjspackage.json(postinstall hook + pinned deps)package-lock.json.github/workflows/ci.yml(single job).github/branch-protection-main.json(require singlecicheck).github/workflows/ci-cross-platform.yml.github/dependabot.ymlWhy the spawn-helper fix
node-pty1.1.0 shipsprebuilds/darwin-{arm64,x64}/spawn-helperfrom its npm tarball with0o644permissions. On macOS the firstpty.spawn()returnsposix_spawnp failedbecause the kernel refuses to exec a non-executable file. Linux dodged it (no Linux prebuild ships, node-gyp recompiles). Hidden until the harness-index flake stopped aborting tests early.The postinstall script chmods the helpers to
0o755. Idempotent and defensive.Verification
npm run ciclean on Node 24 locally: 587 unit/integration tests, 40 e2e tests, full build, 0 audit advisories.