Skip to content

Remove pre-monorepo node-renderer devDep baggage; consolidate test multipart builders - #4435

Merged
justin808 merged 2 commits into
mainfrom
jg/4407-node-renderer-devdep-cleanup
Jul 3, 2026
Merged

Remove pre-monorepo node-renderer devDep baggage; consolidate test multipart builders#4435
justin808 merged 2 commits into
mainfrom
jg/4407-node-renderer-devdep-cleanup

Conversation

@justin808

@justin808 justin808 commented Jul 2, 2026

Copy link
Copy Markdown
Member

Why

packages/react-on-rails-pro-node-renderer/package.json still carried devDependencies and a script that arrived verbatim with the pre-monorepo package import (#2069) and are dead in the workspace today. This removes them and consolidates the test suite's two overlapping multipart form builders down to one. All changes are dev-only — no runtime code paths change and published-artifact contents are unaffected.

Fixes #4407

What changed

  1. Removed unused jsdom devDep (^16.5.0). Nothing in src/ or tests/ imports jsdom (the only string matches are inside checked-in webpack fixture bundles under tests/fixtures/**, not imports). Jest runs with testEnvironment: "node", so jsdom is never loaded. Root jsdom (^22.1.0, used by root Jest's jsdom testEnvironment — jest.config.base.js) and the pro dummy's jsdom (^16.4.0) are untouched.
  2. Removed the broken "developing": "nps node-renderer.debug" script and the nps devDep that only served it. The package has no package-scripts.yml/.js and the root one has no node-renderer namespace, so nps node-renderer.debug could never resolve. nps stays where it is genuinely used (root, react_on_rails_pro, pro dummy — all have real start/nps scripts).
  3. Removed redundant @babel/eslint-parser devDep. Linting runs from the repo-root flat config (eslint.config.ts), and the root package.json already declares @babel/eslint-parser. The package's own babel.config.js uses presets only.
  4. Consolidated multipart builders onto form-data; removed the form-auto-content devDep.

Consolidation direction (note: this differs from the issue's suggestion)

The issue proposed consolidating onto form-auto-content. That is not viable: the node-renderer tests use two different transports, and only form-data supports both.

  • form-auto-content returns a static { payload, headers } object for the fastify.inject() transport (in-process). Used by healthEndpoints, uploadRaceCondition, worker tests.
  • form-data is used over raw http2 requests and relies on its streaming API — form.getBoundary(), form.pipe(request), form.on('end'), and lazy fs.createReadStream file parts — in httpRequestUtils.ts (shared helper for htmlStreaming, incrementalHtmlStreaming, concurrentHtmlStreaming), and directly in streamClientDisconnectAbort and streamErrorHang (the React 19.2 cacheSignal: settle RSC cache cleanup on render complete/abort (child of #3865) #3885 abort / stream-error-hang regression tests).

form-auto-content has no .pipe()/.getBoundary(), so it cannot serve the streaming tests. Crucially, form-auto-content is itself a ~40-line wrapper around form-data (its only extra transitive dep is form-data). So form-data is the correct single builder to standardize on, and the issue's own plan explicitly says "pick whichever the tests already lean on."

To keep the change behavior-preserving and small, this PR adds a tiny local tests/formAutoContent.ts helper that reproduces form-auto-content's exact public transform (array-value unfolding, { value, options } pass-through, multipart-vs-urlencoded branch, form.getHeaders()) on top of form-data. The ~18 formAutoContent({...}) call sites across the three inject-transport suites stay byte-identical apart from the import.

Per-removal verification

Dep/script Verification Result
jsdom grep -rn jsdom src tests → only fixture bundles; testEnvironment: node Unused → removed
nps + developing script only in this package.json; no package-scripts.yml; root has no node-renderer namespace Dead → removed
@babel/eslint-parser only in this package.json; root package.json + knip.ts already own it Redundant → removed
form-auto-content thin wrapper over form-data; replaced by local form-data-backed shim Consolidated → removed
form-data (kept) required by streaming raw-http2 tests + now the inject-transport shim Retained

Validation (real results)

Command Result
pnpm install --prefer-offline OK
pnpm --filter react-on-rails-pro-node-renderer run build exit 0
pnpm --filter react-on-rails-pro-node-renderer run type-check exit 0
pnpm run lint exit 0
pnpm start format.listDifferent (prettier --check) exit 0 — "All matched files use Prettier code style!"
pnpm run knip exit 0 (same as main)
pnpm exec knip --production exit 1 — pre-existing prop-types finding in react_on_rails/spec/dummy (identical on main; not my change)
consolidation suites + shim unit test: jest healthEndpoints uploadRaceCondition worker formAutoContent 76/76 passed (68 consolidation + 8 shim), exit 0
full package test 4 suites fail — see below

The 4 failing full-suite tests are a pre-existing fixture prerequisite, not this change

incrementalHtmlStreaming, concurrentHtmlStreaming, htmlStreaming, and serverRenderRSCReactComponent fail with ENOENT on react_on_rails_pro/spec/dummy/ssr-generated/server-bundle.js / rsc-bundle.js. That directory does not exist in a fresh worktree — it is produced by pnpm run build:test (a Rails/webpack precompile) that CI runs before this package's tests. This set is exactly the 4 SSR-bundle-fixture-dependent suites, and none of them import the changed code (three use httpRequestUtils.tsform-data, untouched; one has no multipart import). Every suite that actually exercises the consolidation passes.

Codex Decision Log

  • Ran codex review --base origin/main.
  • First pass: one P1 — the new tests/formAutoContent.ts was untracked, so a clean checkout would fail to resolve ./formAutoContent after removing form-auto-content. Resolution: staged and committed the helper (it is part of this PR). This was a "not-yet-committed" artifact of reviewing the tracked diff, not a design defect.
  • Re-review with the helper staged: no P-level findings; codex confirmed no-nps in the package .bin (nps binary correctly gone). Behavior-preserving.

Round 2 — bot review on the shim (commit 3ac0008e0)

Bot reviewers flagged two footguns in tests/formAutoContent.ts that this PR intentionally fixes (the shim is now the authoritative builder for these tests and is more correct than the original form-auto-content; no existing test relied on the old behavior):

  • coderabbit Major / greptile P2 — getValue falsy wrappers → fixed. getField(o, 'value') || o returned the whole { value, options } wrapper when the value was falsy (0, false, ''). Now detects the wrapper by presence of the value own-key (hasOwn(o, 'value') ? o.value : o), so falsy values round-trip. This matches the fix the claude reviewer independently recommended (explicit hasOwnProperty, not ||/??).
  • coderabbit Minor — urlencoded fallback → fixed. The no-file path stringified the raw json, so a { value, options } field with no file serialized as [object Object]. Field extraction is now computed once and shared, so the urlencoded path unwraps wrappers just like the multipart path.
  • New test: tests/formAutoContent.test.ts (8 cases) asserts falsy { value: 0 | false | '' } round-trips in both the urlencoded and multipart paths, and that a { value, options } field unwraps in the urlencoded fallback.
  • Outcome: CodeRabbit re-reviewed the fix commit and posted APPROVED; its earlier CHANGES_REQUESTED was on the superseded commit 6641579e3. All three review threads resolved; 0 unresolved threads on current head.

Lockfile evidence

  • Regenerated with pnpm install --lockfile-only. Net change: pnpm-lock.yaml, 21 deletions, 0 insertions.
  • Removed from the node-renderer importer stanza: jsdom@^16.5.0, nps@^5.9.12, @babel/eslint-parser@^7.27.0, form-auto-content@^3.2.1.
  • Package snapshots deleted: form-auto-content@3.2.1 (both the resolution entry and its dependency block) — nothing else in the monorepo used it. Its only extra transitive dependency was form-data@4.0.6, which we keep, so no capability is lost. fast-querystring was pulled only by form-auto-content but remains in the graph via other importers.
  • Snapshots intentionally retained: jsdom@16.7.0 (still required by react_on_rails_pro/spec/dummy ^16.4.0), nps@5.10.0 (root + react_on_rails_pro + pro dummy ^5.9.3), @babel/eslint-parser (root). Removing the node-renderer's redundant pins left no orphans.
  • Build-time / precompiled deps: the only removed package with a native-ish transitive footprint was jsdom@16, and its snapshot was not dropped (still needed by the pro dummy), so no source-build / platform-precompiled transitive set changed as a result of this PR. form-auto-content is pure JS with no native deps.
  • Sibling-lock comparison: the four affected specifiers were compared against the other workspace importers that declare them (root, react_on_rails_pro, pro dummy) — each removal was confirmed redundant only for the node-renderer, never for the packages that genuinely consume it.
  • Dependabot: the node-renderer package directory is covered by .github/dependabot.yml (npm ecosystem). This PR reduces its devDep surface by four entries; no version bumps, only removals.

Labels: ready-for-hosted-ci — dep + lockfile change trips the generator gate, which requires hosted CI to validate the regenerated pnpm-lock.yaml.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Bug Fixes

    • Improved reliability around request-form handling in the node renderer test suite, covering multipart uploads, buffers, streams, and URL-encoded data.
    • Updated related tests to use a shared local helper for consistent form payload generation.
  • Chores

    • Removed unused development packages and a development script from the node-renderer package.

@justin808 justin808 added the ready-for-hosted-ci Run optimized hosted GitHub CI for this PR label Jul 2, 2026
@coderabbitai

coderabbitai Bot commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Walkthrough

Adds a local formAutoContent test helper to react-on-rails-pro-node-renderer, replicating multipart/urlencoded payload construction previously provided by an external package. Updates four test files to import from this local module. Removes @babel/eslint-parser, form-auto-content, jsdom, nps dev dependencies and the developing npm script.

Changes

Local formAutoContent Helper and Dependency Cleanup

Layer / File(s) Summary
formAutoContent helper implementation
packages/react-on-rails-pro-node-renderer/tests/formAutoContent.ts
New default export builds { payload, headers } from JSON fields, unfolding arrays, appending to form-data for stream/Buffer values, and falling back to urlencoded via querystring.stringify.
Test import rewiring
packages/react-on-rails-pro-node-renderer/tests/healthEndpoints.test.ts, .../uploadRaceCondition.test.ts, .../worker.test.ts
Test files now import formAutoContent from the local ./formAutoContent module instead of the external form-auto-content package.
Dependency and script cleanup
packages/react-on-rails-pro-node-renderer/package.json
Removes @babel/eslint-parser, form-auto-content, jsdom, and nps from devDependencies, and removes the developing script.

Estimated code review effort: 2 (Simple) | ~15 minutes

Possibly related issues

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main change: removing obsolete node-renderer dev dependencies and consolidating multipart test helpers.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch jg/4407-node-renderer-devdep-cleanup

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@greptile-apps

greptile-apps Bot commented Jul 2, 2026

Copy link
Copy Markdown

Greptile Summary

This PR removes four dead or redundant devDependencies (jsdom, nps, @babel/eslint-parser, form-auto-content) from packages/react-on-rails-pro-node-renderer/package.json, deletes the broken developing script, and consolidates the test suite's two multipart form builders onto the single form-data dependency by introducing a local shim (tests/formAutoContent.ts) that faithfully reproduces form-auto-content's public API. All changes are dev-only — no runtime source or published artifact contents change.

  • Dep cleanup: four devDeps verified unused or redundant at the package level (covered by root or pro-dummy declarations); pnpm-lock.yaml updated with net −21 lines, no new snapshots.
  • Consolidation shim (tests/formAutoContent.ts): ~60-line helper built on form-data that reproduces array unfolding, { value, options } pass-through, and the multipart-vs-urlencoded branch decision; all 68/68 inject-transport test cases pass unchanged.

Confidence Score: 5/5

Safe to merge — all changes are confined to devDependencies and test helpers; no runtime code or published artifact is touched.

The dep removals are each individually verified as dead or redundant (PR description documents grep results and lockfile evidence), the new formAutoContent shim faithfully reproduces the original package's behavior for all test call-sites, and 68/68 inject-transport tests pass. The only notable nuance is the || in getValue which matches the original source and does not affect any current test case.

tests/formAutoContent.ts — the getValue || idiom is the one spot worth a second look if callers ever pass falsy-valued { value, options } entries.

Important Files Changed

Filename Overview
packages/react-on-rails-pro-node-renderer/tests/formAutoContent.ts New shim reproducing form-auto-content's public API on top of form-data; one subtle
packages/react-on-rails-pro-node-renderer/package.json Removes four dead/redundant devDeps (jsdom, nps, @babel/eslint-parser, form-auto-content) and the broken "developing" script; all verified unused or duplicated at root level
packages/react-on-rails-pro-node-renderer/tests/worker.test.ts Import updated from form-auto-content to ./formAutoContent; all call-sites unchanged; import moved to correct position after other helpers
pnpm-lock.yaml Removes the four node-renderer devDep specifiers and the form-auto-content@3.2.1 snapshot; retained snapshots for jsdom@16.7.0, nps@5.10.0, and @babel/eslint-parser confirm no orphans introduced

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A["Test calls formAutoContent(json)"]
    B["Build FormData\n(unfold arrays, append fields)"]
    C{"Any field is a\nStream or Buffer?"}
    D["Return multipart\n{ payload: FormData, headers: form.getHeaders() }"]
    E["Return urlencoded\n{ payload: Readable.from(stringify(json)), headers: content-type:urlencoded }"]
    F["fastify.inject()\n.payload(form.payload)\n.headers(form.headers)"]
    A --> B
    B --> C
    C -- yes --> D
    C -- no --> E
    D --> F
    E --> F
    style D fill:#d4edda
    style E fill:#d4edda
Loading
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
flowchart TD
    A["Test calls formAutoContent(json)"]
    B["Build FormData\n(unfold arrays, append fields)"]
    C{"Any field is a\nStream or Buffer?"}
    D["Return multipart\n{ payload: FormData, headers: form.getHeaders() }"]
    E["Return urlencoded\n{ payload: Readable.from(stringify(json)), headers: content-type:urlencoded }"]
    F["fastify.inject()\n.payload(form.payload)\n.headers(form.headers)"]
    A --> B
    B --> C
    C -- yes --> D
    C -- no --> E
    D --> F
    E --> F
    style D fill:#d4edda
    style E fill:#d4edda
Loading

Reviews (1): Last reviewed commit: "Remove pre-monorepo node-renderer devDep..." | Re-trigger Greptile

Comment thread packages/react-on-rails-pro-node-renderer/tests/formAutoContent.ts

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (1)
packages/react-on-rails-pro-node-renderer/tests/formAutoContent.ts (1)

79-79: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Type-unsafe as never casts on form.append.

Bypasses type checking entirely for the call arguments. Acceptable for a test helper mimicking a loosely-typed library, but worth a narrower type (e.g. string | Blob | Buffer | NodeJS.ReadableStream) if this helper grows.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/react-on-rails-pro-node-renderer/tests/formAutoContent.ts` at line
79, The form helper’s append call is using broad `as never` casts, which bypass
type safety in `formAutoContent` and should be narrowed instead. Update the
helper around `form.append` to use a more specific union type for the
value/options arguments, or encapsulate the library’s loose typing in a typed
helper so the call remains safe without casting everything to never.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@packages/react-on-rails-pro-node-renderer/tests/formAutoContent.ts`:
- Around line 50-52: The getValue helper is treating valid falsy extracted
values as missing because it uses a fallback on getField(o, 'value') || o.
Update getValue so it returns the extracted value whenever the value field
exists, even if it is 0, empty string, or false, and only falls back to the
wrapper object when the field is actually absent. Use the getValue and getField
helpers in formAutoContent.ts to locate and adjust this logic.
- Around line 91-102: The urlencoded fallback in formAutoContent does not unwrap
`{ value, options }` entries, so fields are serialized incorrectly when no file
is present. Update the fallback path to normalize the same way as the multipart
branch by extracting each field’s actual value via the existing `getValue()` /
`getOptions()` logic before calling `stringify`, and keep the behavior
consistent in `formAutoContent` for both payload types.

---

Nitpick comments:
In `@packages/react-on-rails-pro-node-renderer/tests/formAutoContent.ts`:
- Line 79: The form helper’s append call is using broad `as never` casts, which
bypass type safety in `formAutoContent` and should be narrowed instead. Update
the helper around `form.append` to use a more specific union type for the
value/options arguments, or encapsulate the library’s loose typing in a typed
helper so the call remains safe without casting everything to never.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 8a8e0b5c-591b-44bb-86a9-92f365beea9f

📥 Commits

Reviewing files that changed from the base of the PR and between d47c351 and 6641579.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (5)
  • packages/react-on-rails-pro-node-renderer/package.json
  • packages/react-on-rails-pro-node-renderer/tests/formAutoContent.ts
  • packages/react-on-rails-pro-node-renderer/tests/healthEndpoints.test.ts
  • packages/react-on-rails-pro-node-renderer/tests/uploadRaceCondition.test.ts
  • packages/react-on-rails-pro-node-renderer/tests/worker.test.ts
💤 Files with no reviewable changes (1)
  • packages/react-on-rails-pro-node-renderer/package.json

Comment thread packages/react-on-rails-pro-node-renderer/tests/formAutoContent.ts
Comment thread packages/react-on-rails-pro-node-renderer/tests/formAutoContent.ts
…ltipart builders

The react-on-rails-pro-node-renderer package.json carried devDependencies and a
script that arrived verbatim with the pre-monorepo package import (#2069) and are
dead in the workspace today. This removes them and consolidates the test suite's
two overlapping multipart form builders down to one.

Changes (all dev-only; no runtime/published-artifact impact):

- Remove unused jsdom devDep (^16.5.0). Nothing in src/ or tests/ imports jsdom;
  Jest runs with testEnvironment "node". Root jsdom (^22.1.0, used by root Jest's
  jsdom testEnvironment) and the pro dummy's jsdom (^16.4.0) are untouched.
- Remove the broken "developing": "nps node-renderer.debug" script and the nps
  devDep that only served it. The package has no package-scripts.yml and the root
  one has no node-renderer namespace, so the alias could never resolve. nps stays
  where it is genuinely used (root, react_on_rails_pro, pro dummy).
- Remove redundant @babel/eslint-parser devDep. Linting runs from the repo-root
  flat config, which already declares @babel/eslint-parser at root.
- Consolidate multipart builders onto form-data (the streaming-capable library)
  and remove the form-auto-content devDep. form-auto-content was itself a thin
  wrapper around form-data and only worked for the fastify.inject() transport;
  form-data is the only builder that also supports the raw-http2 streaming
  transport (form.pipe()/getBoundary()) used by the streaming regression tests.
  A small local tests/formAutoContent.ts helper reproduces form-auto-content's
  exact { payload, headers } transform on top of form-data, so the ~18
  formAutoContent({...}) call sites in healthEndpoints/uploadRaceCondition/worker
  tests stay byte-identical apart from the import.

pnpm-lock.yaml regenerated (pnpm install --lockfile-only): the node-renderer
importer stanza drops jsdom, nps, @babel/eslint-parser, and form-auto-content;
the form-auto-content package snapshot (whose only extra transitive dep was
form-data, which we keep) is fully removed. jsdom@16 and nps snapshots remain in
the graph because other importers still require them.

Validation: build, type-check, lint, prettier --check, and knip all green;
the three consolidation-affected suites pass 68/68. (The four SSR-bundle-fixture
suites that need react_on_rails_pro/spec/dummy/ssr-generated fail only for the
missing prebuilt bundle in a fresh worktree; none import the changed code.)

Fixes #4407

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Comment thread packages/react-on-rails-pro-node-renderer/tests/formAutoContent.ts Outdated
@claude

claude Bot commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

Review

This PR removes four dead/redundant devDependencies from packages/react-on-rails-pro-node-renderer/package.json (jsdom, nps + its developing script, @babel/eslint-parser) and consolidates the test suite's two multipart form builders onto form-data via a new local tests/formAutoContent.ts shim that reproduces form-auto-content's public API. All changes are dev/test-only; the PR's own verification table (build, type-check, lint, prettier, knip, and the three affected suites at 68/68) backs up the "behavior-preserving" claim, and the dependency-removal rationale checks out against a repo grep (each removed package really is unreferenced outside fixture bundles / redundant with root).

One finding, left as an inline comment on tests/formAutoContent.ts:51:

  • getValue() uses getField(o, 'value') || o, which falls through to returning the wrapper object itself (instead of the real value) whenever a field is passed as { value: <falsy>, options: {...} } (e.g. value: '', 0, false). None of the ~18 current call sites use that wrapped shape, so it's not triggered today — but the PR description calls out { value, options } pass-through as an intentionally-preserved feature of the shim, so it'd be good to either fix the falsy case (check hasOwnProperty explicitly rather than relying on truthiness) or drop that unused code path if it's not actually needed, since as written it's an untested and incorrect branch.

Everything else — the dependency removals, the lockfile diff, the import path swaps in the three test files — looks correct and low-risk.

Addresses bot review feedback on the new tests/formAutoContent.ts shim. Both
changes intentionally diverge from the original form-auto-content footguns; the
shim is now the authoritative builder for these tests and is more correct. No
existing test relied on the old behavior.

- getValue: detect a `{ value, options? }` wrapper by presence of the `value`
  key instead of truthiness (`getField(o, 'value') || o`). The old form returned
  the whole wrapper object for a falsy value (`0`, `false`, `''`); now the falsy
  value round-trips correctly. (coderabbit MAJOR / greptile P2)

- urlencoded fallback: unwrap `{ value, options }` fields via getValue in the
  no-file path too, mirroring the multipart path. Previously a wrapper field with
  no file serialized as "[object Object]". Field extraction is now computed once
  and shared by both paths for consistency. (coderabbit MINOR)

Adds tests/formAutoContent.test.ts (8 cases) asserting falsy `{ value: 0 }` /
`{ value: false }` / `{ value: '' }` round-trip in both the urlencoded and
multipart paths, and that a `{ value, options }` field unwraps in the urlencoded
fallback (no "[object Object]").

Validation: node-renderer consolidation suites (healthEndpoints,
uploadRaceCondition, worker) stay 68/68; the new shim suite passes 8/8 (76 total);
build, type-check, lint, prettier --check, and knip all green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@justin808
justin808 force-pushed the jg/4407-node-renderer-devdep-cleanup branch from 6641579 to 3ac0008 Compare July 2, 2026 20:03
@justin808
justin808 added this pull request to the merge queue Jul 2, 2026
@github-actions

github-actions Bot commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

size-limit report 📦

Path Size
react-on-rails/client bundled (gzip) 63.51 KB (0%)
react-on-rails/client bundled (gzip) (time) 63.51 KB (0%)
react-on-rails/client bundled (brotli) 54.51 KB (0%)
react-on-rails/client bundled (brotli) (time) 54.51 KB (0%)
react-on-rails-pro/client bundled (gzip) 64.54 KB (0%)
react-on-rails-pro/client bundled (gzip) (time) 64.54 KB (0%)
react-on-rails-pro/client bundled (brotli) 55.53 KB (0%)
react-on-rails-pro/client bundled (brotli) (time) 55.53 KB (0%)
registerServerComponent/client bundled (gzip) 75.89 KB (0%)
registerServerComponent/client bundled (gzip) (time) 75.89 KB (0%)
registerServerComponent/client bundled (brotli) 65.42 KB (0%)
registerServerComponent/client bundled (brotli) (time) 65.42 KB (0%)
wrapServerComponentRenderer/client bundled (gzip) 68.37 KB (0%)
wrapServerComponentRenderer/client bundled (gzip) (time) 68.37 KB (0%)
wrapServerComponentRenderer/client bundled (brotli) 58.76 KB (0%)
wrapServerComponentRenderer/client bundled (brotli) (time) 58.76 KB (0%)

Merged via the queue into main with commit 0ae9d1b Jul 3, 2026
53 checks passed
@justin808
justin808 deleted the jg/4407-node-renderer-devdep-cleanup branch July 3, 2026 02:02
justin808 added a commit that referenced this pull request Jul 3, 2026
…nsport

* origin/main:
  Remove pre-monorepo node-renderer devDep baggage; consolidate test multipart builders (#4435)
justin808 added a commit that referenced this pull request Jul 3, 2026
* origin/main:
  Remove pre-monorepo node-renderer devDep baggage; consolidate test multipart builders (#4435)
justin808 added a commit that referenced this pull request Jul 3, 2026
* origin/main:
  Remove pre-monorepo node-renderer devDep baggage; consolidate test multipart builders (#4435)
justin808 added a commit that referenced this pull request Jul 3, 2026
…derer-shutdown-restart

* origin/main:
  Remove pre-monorepo node-renderer devDep baggage; consolidate test multipart builders (#4435)
justin808 added a commit that referenced this pull request Jul 3, 2026
…370' into codex/batch-e-loadable-stats-retry-4371

* origin/codex/batch-e-rsc-parser-flush-4370:
  Add cached static RSC helper and diagnostics (#4386)
  Fix Pro tag revalidation retry after delete failures (#4375)
  Fix node renderer graceful shutdown restarts (#4400)
  Improve release-finish dry-run fetch handling (#4441)
  Flush RSC payloads before incomplete HTML tails (#4379)
  Handle sync RSC route failures as fetch errors (#4393)
  Delete never-wired RenderRequest/JsCodeBuilder/RenderingStrategy layer (#4414) (#4437)
  Delegate deprecated base/ shims to capabilities/ instead of cloning (#4413) (#4436)
  Remove pre-monorepo node-renderer devDep baggage; consolidate test multipart builders (#4435)
  Preserve streaming LoadError during dependency failures (#4388)
  Wire eslint-rules RuleTester suite into a runner, CI, and knip (#4409) (#4433)
  Handle fire-and-forget RSCRoute retry failures (#4378)
justin808 added a commit that referenced this pull request Jul 4, 2026
…w-boundary

* origin/main: (26 commits)
  [Pro] Extract async props settled chunk writer (#4448)
  Fix incorrect defer_generated_component_packs = false migration guidance (#4451)
  Fix Pro renderer transport memory and reuse (#4394)
  Fix Pro RSC loadable stats retry visibility (#4447)
  Unify Pro component cache fetch behavior (#4384)
  Replace chalk with picocolors in create-react-on-rails-app (#4411) (#4444)
  Fix Pro RSC stylesheet stats retry after read failures (#4401)
  [Pro] Reduce tag-index cache work during streaming (#4443)
  Warn on truncated Pro RSC parser streams (#4392)
  Report response-start send rejections (#4389)
  Add cached static RSC helper and diagnostics (#4386)
  Fix Pro tag revalidation retry after delete failures (#4375)
  Fix node renderer graceful shutdown restarts (#4400)
  Improve release-finish dry-run fetch handling (#4441)
  Flush RSC payloads before incomplete HTML tails (#4379)
  Handle sync RSC route failures as fetch errors (#4393)
  Delete never-wired RenderRequest/JsCodeBuilder/RenderingStrategy layer (#4414) (#4437)
  Delegate deprecated base/ shims to capabilities/ instead of cloning (#4413) (#4436)
  Remove pre-monorepo node-renderer devDep baggage; consolidate test multipart builders (#4435)
  Preserve streaming LoadError during dependency failures (#4388)
  ...

# Conflicts:
#	CHANGELOG.md
#	packages/react-on-rails-pro/src/RSCProvider.tsx
#	packages/react-on-rails-pro/src/RSCRoute.tsx
#	packages/react-on-rails-pro/tests/boundedCacheProvider.client.test.tsx
#	packages/react-on-rails-pro/tests/getReactServerComponent.client.test.ts
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ready-for-hosted-ci Run optimized hosted GitHub CI for this PR

Projects

None yet

1 participant