chore(deps): upgrade safe dependencies and stabilize flaky CI tests - #79
Merged
Conversation
CI was red on main from a timeout in ralph-watchdog-script.test.ts, and nine Dependabot PRs were open. CI fix. The watchdog tests budget up to 31s of internal waiting (8s lock + 15s exit + 8s release) but inherited vitest's global 10s testTimeout, so vitest killed each test long before its own guards could run. They passed only when everything happened fast and timed out under CI load. Both files that race real subprocesses now declare an explicit per-test timeout above their internal budget, matching what the other process-spawning suites here already do. Dependency upgrades, all verified by the full suite (5135 passing): - actions/setup-node v6 -> v7, actions/cache v5 -> v6 (#69, #60) - @types/node 25 -> 26 (#75) - jsdom 29 -> 30, @testing-library/jest-dom 6 -> 7 (#74, #73) Hono removal instead of the bump (#72). hono and @hono/node-server were declared by the dashboard but imported only from server/index.js, a compiled artifact from February that had been superseded by server/index.ts and left checked in. The stale .js/.d.ts/.map files are deleted and both Hono packages dropped, which also settles CLAUDE.md Rule 10. Hono remains present transitively via @modelcontextprotocol/sdk; nothing in tx uses it. release.yml only triggers on plain semver tags now. 'v*' also matched scratch tags, which started the full four-target binary matrix and failed noisily when such a tag was removed. Deferred, with evidence, rather than merged: - Effect 3.19 -> 3.22 (#70) regresses worker orchestration badly. test/integration/run-worker.test.ts: 10/10 in 11.4s on 3.19.16, versus 9/10 with a hang in 215.6s on 3.22.1. Reproduced in isolation and bisected by reverting only the Effect versions. - fumadocs-mdx 14 -> 15 (#71) cascades: it needs fumadocs-core >=16.7, whose stylesheet emits an -inset-s-4 utility that Tailwind rejects even at 4.3.3, so the docs build fails regardless of the Next version. - typescript 5.9 -> 7.0 (#66) is the native port and warrants its own pass.
This was referenced Aug 14, 2026
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.
Closes #75, closes #74, closes #73, closes #72, closes #69, closes #60
CI fix
ralph-watchdog-script.test.tswas failing on main. Not flake in the usual sense — an incoherent timeout budget. The tests budget up to 31s of internal waiting (8s lock wait + 15s exit wait + 8s release wait) but inherited vitest's globaltestTimeout: 10000. Vitest killed each test long before its own guards could fire, so they passed only when everything happened fast and timed out under CI load.Both files that race real subprocesses now declare an explicit per-test timeout above their internal budget. This matches what the other process-spawning suites here (
api-sync-http,doc-cli,ralph-context-bundle-e2e) already do — the watchdog file was the outlier.ralph-script.test.tshad the same latent gap (8.3s of waits against a 10s budget) and is fixed too.Upgrades merged
actions/setup-nodev6→v7,actions/cachev5→v6@types/node25→26jsdom29→30@testing-library/jest-dom6→7Verified by the full suite: 5135 passing, 0 failures, plus clean typecheck, lint, and build of all five packages.
#72 resolved by removal, not bump
honoand@hono/node-serverwere declared by the dashboard but imported only fromapps/dashboard/server/index.js— a compiled artifact dated February 2026, superseded byserver/index.ts(which usesnode:http) and left checked in along with its.d.tsand.mapfiles. Nothing referenced it;bun run serverruns the.ts.Deleted the four stale artifacts and dropped both Hono packages. This also settles CLAUDE.md Rule 10 ("Hono framework is NOT allowed"). Hono remains present transitively via
@modelcontextprotocol/sdk; no tx code uses it.release.yml trigger tightened
v*matched scratch tags, which started the full four-target binary matrix and failed noisily when such a tag was deleted. Now restricted to plain semver, which is what every real release here has used.Deferred, with evidence
#70 — Effect 3.19 → 3.22: regresses worker orchestration. Bisected by reverting only the Effect versions:
test/integration/run-worker.test.tsReproduced in isolation. A ~19x slowdown and a hang in
orchestrator.start({ workerPoolSize: 5 })is not something to merge on a routine bump; it likely deserves an upstream report.#71 — fumadocs-mdx 14 → 15: dependency cascade. Requires
fumadocs-core >=16.7, whose stylesheet emits an-inset-s-4utility that Tailwind rejects even at 4.3.3. Docs build fails on Next 16.1.6 and 16.3.1 alike. Not a version gap I could close from here.Worth noting separately:
fumadocs-uiis declared as^16.5.0, so a freshbun installfloats it to 16.14.x and breaks the docs build today, independent of this PR. The committed lockfile is currently what keeps it working. That's a latent trap worth pinning.#66 — TypeScript 5.9 → 7.0. The native port; a major with real behavioural surface across
tsc -bproject references and the Effect-heavy types here. Deserves its own focused pass, not a drive-by merge.