chore(deps): bump @rslint/core to 0.8.2 and @types/node to 26.4.0 - #29
Merged
Conversation
The rest of the rstack line (@rsbuild/core 2.2.1, @rspack/core 2.2.1, @rstest/* 0.11.10, @rslib/core 0.23.2, react-server-dom-rspack 0.1.0, rsbuild-plugin-rsc 0.1.1, @rsbuild/plugin-react 2.1.0) is already at latest. @rslib/core 1.0.0 remains at rc.2, so that migration stays deferred. Includes a patch changeset since @rslint/core is a published dependency of agent-bundle.
🦋 Changeset detectedLatest commit: 0ccb1b9 The changes in this PR will be included in the next version bump. This PR includes changesets to release 1 package
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
commit: |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
5 tasks
ScriptedAlchemy
added a commit
that referenced
this pull request
Aug 29, 2026
…e script (#33) Post-merge review feedback on #31: - The example test imported a timing helper from another package's private test sources, so the user-facing example could no longer run or be copied independently of the repository layout. The example now keeps its own tests/support/time-scale.ts copy. - The lock exclusion tests asserted "contender has not settled" after fixed 40ms sleeps, which race the contender's 25ms retry loop: on a loaded runner a wrongly released lease can take longer than the sleep to be noticed, so the assertion passes without testing anything. The test support adapter now exposes onLockAttempt, and the tests order those assertions on observed lock refusals; after the cancellation they require a refusal from an attempt that provably started after it. Same-class flake fix (observed on the #29 merge run, Node 24: the capture script's 120s waitForFunction timed out after a fixture write): - capture-runtime-playground.mjs still rewrote watched fixture sources in place with writeFile, the truncate-then-append race #31 removed from the HMR e2e test. All watched-source writes and restores now stage a temp file in the fixture project's parent and rename it into place.
ScriptedAlchemy
added a commit
that referenced
this pull request
Aug 29, 2026
…ps in the Runtime App relay (#35) * fix(workbench): stop in-place writes to watched files in e2e suites An in-place writeFile to a file the dev compiler is watching is truncate-then-append: the watcher can compile off the truncation event, read incomplete content, and drop the append event inside the same mtime tick, so the final content never activates. PR #31 root-caused this for the runtime-playground HMR suite; this applies the same staged-rename pattern (temp file in the unwatched project parent, then rename) to the remaining e2e suites through a shared tests/support/watched-files.ts helper: overview.e2e (7 watched-write sites) and packed-release.e2e (4). mcp-app-real.e2e had no watched writes; its observed Verify flake (PR #29 CI attempt 2, teardown-ack poll timing out after 60s) was a different unrecoverable race: the runtime App bridge waited only a fixed 1s for the ui/resource-teardown acknowledgement before revoking the binding and destroying the frame, so an ack that missed the window on a contended two-core runner could never be delivered. The budget is now 10s (a healthy app acks in milliseconds; the budget only bounds a hung app), with a test seam so the bounded-teardown unit proof stays fast. * fix(workbench): deflake contended-runner races the staged-rename stress exposed Stressing the suites under taskset -c 0,1 (mirroring two-core CI) surfaced three more root causes beyond the in-place writes: - overview handoff test: the config-reconcile polls used raw 15s budgets while each reconcile recompiles the config plus three bundles (~4s apiece pinned), failing 4/4 under taskset; they now scale with timeScale like the rest of the file. - overview restart test: the registry-replay-gap fallback announcement was asserted with the default 5s budget although it renders only after the invalidation cleanup settles; now scaled, and toHaveText reports the actual reason when the wrong invalidation wins. - mcp-app-real third teardown: the test navigated away as soon as the third App frame's heading rendered, but the App SDK can acknowledge ui/resource-teardown only once its transport is connected. Teardown then raced initialization: relayed into a frame that cannot answer, the host's bounded grace elapsed, the frame was destroyed, and the ack became unobservable forever (2/3 pinned failures; same signature as the PR #29 Verify flake). The navigation now waits for the third frame's ui/initialize evidence, matching the existing destination gate. * fix(dev): stop dropping host messages relayed during the Runtime App handshake The runtime client-surface relay forwarded host-to-app traffic only in the 'initialized' lifecycle (plus the initialize response while 'initializing') and silently dropped everything else. A host request relayed into that handshake window — observed as ui/resource-teardown racing the App's ui/notifications/initialized on contended two-core runners — vanished: the host burned its bounded teardown grace waiting for an answer that could never arrive, destroyed the frame, and the acknowledgement evidence was lost forever (the PR #29 Verify flake signature; budget-independent, still failing 2/8 under taskset -c 0,1 even with a 30s grace). The relay now queues up to 32 validated host messages during the handshake and flushes them once the App reports initialized; the queue survives an HMR entry reload so a request sent to a retiring App instance is answered by its replacement. The teardown ack poll also carries enriched failure evidence now. Single-test stress under taskset -c 0,1: 8/8 after the fix. * test: pin the origin-checked host relay admission line in the proxy shell * test(workbench): scale every overview e2e wait budget with timeScale * test(workbench): reuse the shared watched-file helper in the HMR suite PR #31 landed replaceWatchedSource locally in the HMR e2e before the shared tests/support/watched-files.ts helper existed on this branch; import the shared copy instead of keeping two implementations. * chore: add a changeset for the runtime relay handshake queue fix * fix(workbench): deflake the restart preview-count assertion the pinned stress exposed waitFor(attached) on the runtime preview iframe can resolve against the outgoing binding's frame during a restart, which unmounts before its replacement mounts; the instant count() then reads a transient 0 on a contended two-core runner (1/5 pinned failures). toHaveCount(1) retries until exactly one preview iframe is attached and still fails duplicates.
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
Dependency freshness pass over the rstack toolchain. Nearly everything is already at latest; the only rstack package behind was
@rslint/core, plus a safe dev-only@types/nodeminor.@rslint/corepackages/agent-bundle), patch changeset added@types/node(dev)@rsbuild/core@rsbuild/plugin-react@rspack/core@rslib/corerc.2)@rstest/*(core, adapter-rslib, browser, browser-react, playwright, coverage-istanbul)react-server-dom-rspackrsbuild-plugin-rsc@rstackjs/load-config@changesets/cli(dev)Exact-pin style is preserved. The README pin documentation in
examples/rsc-agent-runtime/README.mdis unaffected (React/Rsbuild/RSC pins unchanged).Verification
All run in a clean worktree after the bumps:
pnpm build— passpnpm typecheck— passpnpm lint— pass (rslint 0.8.2: 0 errors/0 warnings across 618 files, so no new rule behavior)pnpm test:unit— pass, no failurespnpm --filter @agent-bundle/rsc-agent-runtime-demo build— passtests/rsc-hook.integration.test.ts(worker-spawn / chunk-splitting canary) — passNo rspack/rsbuild versions changed, so chunk layout was not at risk this round.