Skip to content

Missed yarn->pnpm replacements#2183

Merged
justin808 merged 2 commits intomasterfrom
alexeyr/missing-yarn-to-pnpm-changes
Dec 19, 2025
Merged

Missed yarn->pnpm replacements#2183
justin808 merged 2 commits intomasterfrom
alexeyr/missing-yarn-to-pnpm-changes

Conversation

@alexeyr-ci2
Copy link
Copy Markdown
Collaborator

@alexeyr-ci2 alexeyr-ci2 commented Dec 8, 2025

Summary

#2121 missed some changes in scripts and docs.

Pull Request checklist

  • Add/update test to cover these changes
  • Update documentation
  • Update CHANGELOG file

Summary by CodeRabbit

  • Chores
    • Migrated documentation and developer workflows from Yarn to PNPM across install, build, test, lint, publish, workspace, and CI guidance.
    • Updated examples, checklists, verification steps, and lockfile references to reflect PNPM or package-manager-agnostic instructions.
    • Removed a legacy optional preinstall orchestration step and aligned scripts and setup guidance with the PNPM workflow.

✏️ Tip: You can customize this high-level summary in your review settings.

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Dec 8, 2025

Walkthrough

Replaced Yarn commands and lockfile references with pnpm (and in many places added npm alternatives) across docs, CI/config, rake tasks, and scripts; removed one optional preinstall orchestration script. No public API or exported declarations changed.

Changes

Cohort / File(s) Summary
Agent & internal docs
.claude/agents/pr-testing-agent.md, .claude/agents/pr-testing-guide.md, .claude/docs/analysis/CI_FAILURES_2024-11-21.md, .claude/docs/analysis/CLAUDE_MD_UPDATES.md, .claude/docs/analysis/INDEX.md, .claude/docs/analysis/MIGRATION_QUICK_REFERENCE.md, .claude/docs/analysis/MONOREPO_MIGRATION_ANALYSIS.md, .claude/docs/analysis/claude-md-improvements.md, .claude/docs/analysis/github-issue-1765-update.md
Replaced yarn → pnpm in commands and lockfile refs; adjusted yalc command name (yalc.publishyalc:publish) and related examples.
Project-wide docs & policies
CLAUDE.md, CODING_AGENTS.md, SWITCHING_CI_CONFIGS.md, WARP.md, conductor.json, docs/MONOREPO_MERGER_PLAN.md
Switched CI/checklist/policy text to PNPM; replaced yarn.lock with pnpm-lock.yaml; updated lint/install/build script examples and conductor lint command.
Getting started & tutorials
docs/getting-started/*, docs/migrating/migrating-from-react-rails.md, docs/getting-started/installation-into-an-existing-rails-app.md, docs/getting-started/quick-start.md, docs/getting-started/tutorial.md
Made install/build instructions package-manager-agnostic and added pnpm/npm alternatives in examples.
Building-features docs
docs/building-features/* (hmr-and-hot-reloading..., i18n.md, rails-webpacker-react-integration-options.md, react-helmet.md, react-router.md, rspec-configuration.md, turbolinks.md)
Added pnpm (and npm) alternatives to installation/build examples; updated command syntax and examples.
Contributor & CI guidance
docs/contributor-info/linters.md, docs/contributor-info/releasing.md, .claude/docs/avoiding-ci-failure-cycles.md, .claude/docs/pr-splitting-strategy.md, managing-file-paths.md, master-health-monitoring.md
Replaced yarn commands with pnpm equivalents across lint/build/publish/test checklists and CI guidance.
Spec & dummy app READMEs
react_on_rails/spec/dummy/README.md, react_on_rails/spec/dummy/client/README.md, react_on_rails/spec/dummy/config/swc.config.js, react_on_rails/spec/dummy/e2e/README.md, react_on_rails_pro/spec/dummy/README.md, react_on_rails_pro/spec/dummy/config/initializers/react_on_rails.rb, react_on_rails_pro/spec/execjs-compatible-dummy/README.md
Converted setup/run instructions and error messages from yarn to pnpm; removed one "Creating Assets for Tests" section; minor formatting/text updates.
Rake tasks & scripts
react_on_rails_pro/rakelib/dummy_apps.rake, react_on_rails_pro/rakelib/lint.rake, react_on_rails_pro/rakelib/run_rspec.rake, packages/react-on-rails/scripts/symlink-node-package
Updated tasks/scripts to use pnpm; replaced yarn_install task with pnpm_install; symlink-node-package updated to use pnpm and added per-example yalc link loop.
CI detection & misc scripts
script/ci-changes-detector, analysis/monorepo/MONOREPO_MIGRATION_CHECKLIST.md, react_on_rails_pro/CONTRIBUTING.md, CODING_AGENTS.md
Updated CI/analysis patterns to detect pnpm-lock.yaml and adjusted examples/guides to pnpm.
Script removal
packages/react-on-rails-pro-node-renderer/script/preinstall.js
Removed optional preinstall orchestration script that attempted yarn linking and yalc steps.
Misc docs & READMEs
react_on_rails_pro/spec/dummy/README.md, react_on_rails_pro/spec/dummy/config/initializers/react_on_rails.rb, react_on_rails_pro/rakelib/*, react_on_rails/spec/dummy/*
Various doc cleanups to align wording and commands to pnpm; small formatting changes.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

  • Files/items to pay extra attention to:
    • packages/react-on-rails/scripts/symlink-node-package — added per-example yalc link loop and switched link commands.
    • react_on_rails_pro/rakelib/dummy_apps.rake — task dependency change (yarn_install → pnpm_install) and command string updates.
    • Deletion: packages/react-on-rails-pro-node-renderer/script/preinstall.js — confirm no expectations or callers remain.
    • script/ci-changes-detector / SWITCHING_CI_CONFIGS.md — lockfile detection updates impacting CI flows.

Possibly related PRs

Suggested reviewers

  • justin808
  • AbanoubGhadban
  • ihabadham

"I hopped through docs to change each yarn,
nibbling lockfiles till pnpm wears the crown,
Links relinked, preinstall trimmed neat,
Examples updated, scripts aligned to beat,
Now off I bound — the CI checks await!" 🐇✨

Pre-merge checks and finishing touches

✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'Missed yarn->pnpm replacements' accurately summarizes the main change: completing incomplete yarn-to-pnpm migration in scripts and documentation from a prior PR.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch alexeyr/missing-yarn-to-pnpm-changes

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 and usage tips.

@@ -1,31 +0,0 @@
#!/usr/bin/env node
Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

It was used as a preinstall script in package.json, but isn't anymore.

1. Update ALL path references in configuration files
2. Search codebase: `grep -r "old/path"`
3. Test scripts: `yarn run prepack`, `yarn run yalc.publish`
3. Test scripts: `yarn run prepack`, `yarn run yalc:publish`
Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

The other script name doesn't exist.

@claude
Copy link
Copy Markdown
Contributor

claude Bot commented Dec 8, 2025

Code Review: Missed yarn→pnpm replacements

Summary

This PR completes the migration from Yarn to pnpm (PR #2121) by updating remaining yarn references in scripts and documentation. The changes are consistent, thorough, and improve the completeness of the pnpm migration.

✅ Positive Findings

1. Comprehensive Coverage

  • 34 files updated across documentation, scripts, and analysis documents
  • Systematic replacement of yarnpnpm commands throughout the codebase
  • Covers critical areas: CI scripts, developer guides, testing documentation, and configuration guides

2. Correct Command Mappings

  • yarn installpnpm install or pnpm install -r (for recursive workspace installs) ✓
  • yarn run buildpnpm run build
  • yarn testpnpm test
  • yarn.lockpnpm-lock.yaml
  • yarn run yalc.publishpnpm run yalc:publish

3. Improved User Documentation
The update to docs/getting-started/installation-into-an-existing-rails-app.md is particularly good:

  • Now shows all three package manager options (npm, yarn, pnpm)
  • Clarifies the different --exact vs --save-exact flags
  • More inclusive for users with different preferences

4. Script Consistency
Critical developer scripts properly updated:

  • bin/ci-local - Local CI simulation
  • bin/ci-rerun-failures - Failure reproduction
  • bin/ci-switch-config - Environment switching
  • conductor-setup.sh - Initial setup

5. Appropriate File Deletion
The removal of packages/react-on-rails-pro-node-renderer/script/preinstall.js is correct:

  • File contained yarn-specific commands (yarn run link-source)
  • No reference in package.json scripts
  • Was likely a leftover from pre-pnpm workflow

🔍 Minor Observations

1. Lock File Patterns
In bin/ci-switch-config:

if [ -f pnpm-lock.yaml ]; then
  rm pnpm-lock.yaml
fi

This could be simplified to rm -f pnpm-lock.yaml (already using -rf for node_modules), but current approach is more explicit and equally correct.

2. Documentation Completeness
The changes correctly update:

  • ✅ Command examples
  • ✅ File path references
  • ✅ Installation instructions
  • ✅ CI/CD workflows
  • ✅ Troubleshooting guides

🎯 Code Quality Assessment

  • Consistency: ⭐⭐⭐⭐⭐ All replacements follow the same pattern
  • Completeness: ⭐⭐⭐⭐⭐ Covers documentation, scripts, and analysis docs
  • Correctness: ⭐⭐⭐⭐⭐ Command mappings are accurate
  • Risk Level: 🟢 Low - These are documentation and script updates with no functional code changes

✅ Best Practices Followed

According to CLAUDE.md requirements:

  • ✅ Documentation updates included
  • ✅ No formatting changes needed (text-only changes)
  • ✅ No trailing newline issues expected
  • ✅ Changes align with monorepo migration strategy
  • ✅ Follows project's "NEVER manually format" principle (text replacements only)

📋 Recommendations

Before Merge:

  1. ✅ No RuboCop needed (no Ruby code changes)
  2. ✅ No Prettier needed (markdown/shell script text changes)
  3. ⚠️ Consider testing one of the updated scripts to verify commands work:
    # Quick validation
    ./bin/ci-switch-config status
    # or
    ./conductor-setup.sh --help

Post-Merge:

  • Monitor CI to ensure all pnpm commands execute correctly
  • Watch for any user-reported issues with installation instructions

🎉 Conclusion

LGTM! This is a high-quality cleanup PR that completes the pnpm migration. The changes are:

  • Systematic and thorough
  • Low-risk (documentation and scripts only)
  • Well-aligned with the original migration (PR Migrate from Yarn Classic to pnpm #2121)
  • Important for developer experience and onboarding

The PR successfully addresses the technical debt left from the initial migration and ensures consistency across the entire codebase.

Security & Performance

  • ✅ No security concerns
  • ✅ No performance implications
  • ✅ No new dependencies introduced

Review completed using React on Rails project guidelines from CLAUDE.md

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Dec 8, 2025

size-limit report 📦

Path Size
react-on-rails/client bundled (gzip) 62.5 KB (0%)
react-on-rails/client bundled (gzip) (time) 62.5 KB (0%)
react-on-rails/client bundled (brotli) 53.66 KB (0%)
react-on-rails/client bundled (brotli) (time) 53.66 KB (0%)
react-on-rails-pro/client bundled (gzip) 63.45 KB (0%)
react-on-rails-pro/client bundled (gzip) (time) 63.45 KB (0%)
react-on-rails-pro/client bundled (brotli) 54.53 KB (0%)
react-on-rails-pro/client bundled (brotli) (time) 54.53 KB (0%)
registerServerComponent/client bundled (gzip) 127.35 KB (0%)
registerServerComponent/client bundled (gzip) (time) 127.35 KB (0%)
registerServerComponent/client bundled (brotli) 61.39 KB (0%)
registerServerComponent/client bundled (brotli) (time) 61.39 KB (0%)
wrapServerComponentRenderer/client bundled (gzip) 121.96 KB (0%)
wrapServerComponentRenderer/client bundled (gzip) (time) 121.96 KB (0%)
wrapServerComponentRenderer/client bundled (brotli) 56.66 KB (0%)
wrapServerComponentRenderer/client bundled (brotli) (time) 56.62 KB (-0.07% 🔽)

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 8

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (3)
.claude/agents/pr-testing-agent.md (1)

94-97: Incomplete yarn→pnpm migration throughout the document.

The "Automated (CI covers)" section (lines 79-82) correctly uses pnpm, but multiple other sections still use yarn:

  • Lines 94-97: "Before declaring 'fixed'" for JavaScript/TypeScript
  • Lines 122-145: "Build Configuration Changes" checklist
  • Lines 280, 283, 286, 289: "Playwright E2E Testing" section

Replace all yarn and yarn run commands with pnpm and pnpm run respectively throughout the file for consistency with the learnings that require exclusive use of pnpm for JavaScript package management.

CODING_AGENTS.md (1)

248-253: Add explicit install subcommand to pnpm for clarity

The current line uses bare pnpm, which does work but is less explicit. Align with the pattern in CLAUDE.md by adding the install subcommand:

-- Verify setup with `bundle && pnpm` when needed
+- Verify setup with `bundle && pnpm install` when needed
WARP.md (1)

13-22: Resolve PNPM-only policy vs remaining Yarn examples in WARP.md

These edits correctly move some workflows to PNPM and explicitly state “ONLY use PNPM – never use npm,” but the doc still contains prominent Yarn-based commands (e.g., initial setup bundle && yarn, testing yarn run test, linting yarn run lint, building yarn run build, and the Scenario 2 checklist).

To avoid conflicting guidance for contributors, update the remaining Yarn examples in this file to PNPM equivalents (or clearly mark them as legacy, if that’s the intent).

Also applies to: 45-59, 61-70, 199-216, 205-216, 308-310, 345-346

🧹 Nitpick comments (7)
docs/migrating/migrating-from-react-rails.md (1)

5-8: Wording tweak + optional npm example clarification

You can avoid the apostrophe and keep the sentence clear by dropping it:

-   2. Remove `react_ujs` from `package.json` and run your package manager's install command (e.g., `pnpm install`, `yarn install`, or `npm install`).
+   2. Remove `react_ujs` from `package.json` and run your package manager install command (e.g., `pnpm install` or `yarn install`).

Given the repo guidance to avoid npm commands for JavaScript package management, consider omitting the npm install example unless this guide is explicitly meant to cover non-repo workflows.

.claude/docs/analysis/INDEX.md (1)

161-165: yalc:publish rename is consistent; confirm intentional Yarn usage here

Switching the example to yarn run yalc:publish (with the colon) matches the new script name used elsewhere.

Given the repo is generally moving toward pnpm, double‑check whether this doc is meant to stay as a historical Yarn-based reference for the Surabaya branch or if you also want to mirror the pnpm workflow here (e.g., by mentioning both commands).

CODING_AGENTS.md (1)

28-35: Lockfile guidance is good; consider explicitly naming pnpm-lock

The new checklist item banning package-lock.json and yarn.lock is helpful. You might make it slightly clearer that pnpm-lock.yaml is the one allowed JS lockfile:

-- [ ] No `package-lock.json`, `yarn.lock` or other non-PNPM lock files (except `Gemfile.lock`)
+- [ ] No `package-lock.json`, `yarn.lock`, or other non-PNPM JS lock files
+      (only `pnpm-lock.yaml` and `Gemfile.lock` should be present)

Purely a clarity tweak; behavior is already correct. As per coding guidelines, pnpm is the canonical JS package manager here.

.claude/docs/analysis/MIGRATION_QUICK_REFERENCE.md (1)

115-120: yalc:publish command name is consistent; verify Yarn vs pnpm choice

Updating all checklist/example usages to yarn run yalc:publish (colon form) keeps this reference in sync with the script rename.

If this quick‑reference is meant to be used with the current pnpm-based workflows (not just the historical Yarn Surabaya branch), consider either:

  • switching these to pnpm equivalents, or
  • documenting both (pnpm run yalc:publish / yarn run yalc:publish) so users don’t default back to Yarn for new work.

If it’s intentionally a Yarn snapshot, no change needed—just confirm that’s the intent.

Also applies to: 158-163, 215-220

.claude/docs/analysis/github-issue-1765-update.md (1)

73-80: yalc:publish rename looks good; consider pnpm alignment

The validation and “Quick Wins” examples now correctly reference yarn run yalc:publish, matching the renamed script.

As with the other analysis docs, please confirm whether these should remain Yarn-focused (capturing the original state of Issue #1765) or be updated to show the current pnpm workflow alongside/before the Yarn command.

Also applies to: 215-220

.claude/agents/pr-testing-guide.md (1)

421-433: Pre‑merge checklist is now PNPM‑based; update Scenario 2 example for consistency

The updated checklist and JS/TS/build sections correctly use PNPM (pnpm run test, pnpm run type-check, pnpm run build, pnpm nps build.prepack, pnpm run yalc:publish, pnpm workspaces info, cd spec/dummy && pnpm test:e2e).

For consistency with this guidance and the project’s PNPM-only policy, consider updating the “Scenario 2: I updated package.json dependencies” example further down to use PNPM instead of Yarn (pnpm install --frozen-lockfile, pnpm run build, pnpm run yalc:publish, pnpm run test, etc.).

Also applies to: 447-460, 482-483

react_on_rails/spec/dummy/e2e/README.md (1)

8-16: PNPM-based Playwright commands look good

The E2E README consistently swaps Yarn for PNPM (pnpm playwright install --with-deps, pnpm test:e2e*, and the debug/report commands) with no remaining yarn/npm usage. If you prefer more explicit semantics, you could optionally use pnpm exec playwright install --with-deps, but the current form is fine as long as playwright is available via scripts/binaries.

Also applies to: 155-177, 181-183

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 3acff76 and 3763256.

📒 Files selected for processing (34)
  • .claude/agents/pr-testing-agent.md (1 hunks)
  • .claude/agents/pr-testing-guide.md (3 hunks)
  • .claude/docs/analysis/CI_FAILURES_2024-11-21.md (1 hunks)
  • .claude/docs/analysis/CLAUDE_MD_UPDATES.md (7 hunks)
  • .claude/docs/analysis/INDEX.md (1 hunks)
  • .claude/docs/analysis/MIGRATION_QUICK_REFERENCE.md (2 hunks)
  • .claude/docs/analysis/MONOREPO_MIGRATION_ANALYSIS.md (1 hunks)
  • .claude/docs/analysis/claude-md-improvements.md (2 hunks)
  • .claude/docs/analysis/github-issue-1765-update.md (2 hunks)
  • .claude/docs/managing-file-paths.md (3 hunks)
  • .claude/docs/master-health-monitoring.md (1 hunks)
  • CLAUDE.md (1 hunks)
  • CODING_AGENTS.md (2 hunks)
  • SWITCHING_CI_CONFIGS.md (4 hunks)
  • WARP.md (4 hunks)
  • analysis/monorepo/MONOREPO_MIGRATION_CHECKLIST.md (1 hunks)
  • bin/ci-local (6 hunks)
  • bin/ci-rerun-failures (3 hunks)
  • bin/ci-switch-config (2 hunks)
  • conductor-setup.sh (3 hunks)
  • docs/getting-started/installation-into-an-existing-rails-app.md (1 hunks)
  • docs/getting-started/quick-start.md (2 hunks)
  • docs/migrating/migrating-from-react-rails.md (1 hunks)
  • packages/react-on-rails-pro-node-renderer/script/preinstall.js (0 hunks)
  • react_on_rails/spec/dummy/Procfile.dev (1 hunks)
  • react_on_rails/spec/dummy/README.md (2 hunks)
  • react_on_rails/spec/dummy/client/README.md (2 hunks)
  • react_on_rails/spec/dummy/config/swc.config.js (1 hunks)
  • react_on_rails/spec/dummy/e2e/README.md (2 hunks)
  • react_on_rails_pro/spec/dummy/Procfile.static (1 hunks)
  • react_on_rails_pro/spec/dummy/README.md (2 hunks)
  • react_on_rails_pro/spec/dummy/config/initializers/react_on_rails.rb (1 hunks)
  • react_on_rails_pro/spec/dummy/lib/tasks/assets.rake (1 hunks)
  • script/ci-changes-detector (1 hunks)
💤 Files with no reviewable changes (1)
  • packages/react-on-rails-pro-node-renderer/script/preinstall.js
🧰 Additional context used
📓 Path-based instructions (2)
**/*

📄 CodeRabbit inference engine (CLAUDE.md)

ALWAYS ensure files end with a newline character before committing/pushing

Files:

  • script/ci-changes-detector
  • CODING_AGENTS.md
  • react_on_rails/spec/dummy/README.md
  • bin/ci-rerun-failures
  • SWITCHING_CI_CONFIGS.md
  • bin/ci-local
  • conductor-setup.sh
  • react_on_rails/spec/dummy/e2e/README.md
  • react_on_rails_pro/spec/dummy/lib/tasks/assets.rake
  • react_on_rails_pro/spec/dummy/config/initializers/react_on_rails.rb
  • CLAUDE.md
  • analysis/monorepo/MONOREPO_MIGRATION_CHECKLIST.md
  • react_on_rails/spec/dummy/client/README.md
  • docs/migrating/migrating-from-react-rails.md
  • WARP.md
  • react_on_rails_pro/spec/dummy/README.md
  • react_on_rails_pro/spec/dummy/Procfile.static
  • react_on_rails/spec/dummy/Procfile.dev
  • docs/getting-started/installation-into-an-existing-rails-app.md
  • react_on_rails/spec/dummy/config/swc.config.js
  • bin/ci-switch-config
  • docs/getting-started/quick-start.md
**/*.{rb,rake}

📄 CodeRabbit inference engine (CLAUDE.md)

ALWAYS run bundle exec rubocop and fix ALL violations before every commit/push

Files:

  • react_on_rails_pro/spec/dummy/lib/tasks/assets.rake
  • react_on_rails_pro/spec/dummy/config/initializers/react_on_rails.rb
🧠 Learnings (33)
📓 Common learnings
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-25T08:05:17.804Z
Learning: Applies to /CHANGELOG.md : Update `/CHANGELOG.md` for user-visible changes (features, bug fixes, breaking changes, deprecations, performance improvements) to the open-source React on Rails gem and npm package
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-25T08:05:17.804Z
Learning: Applies to /CHANGELOG*.md : Use changelog format: `[PR 1818](https://github.com/shakacode/react_on_rails/pull/1818) by [username](https://github.com/username)` (no hash in PR number)
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-25T08:05:17.804Z
Learning: NEVER use `npm` commands; only use equivalent `pnpm` commands for JavaScript package management
📚 Learning: 2025-11-25T08:05:17.804Z
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-25T08:05:17.804Z
Learning: Applies to /CHANGELOG.md : Update `/CHANGELOG.md` for user-visible changes (features, bug fixes, breaking changes, deprecations, performance improvements) to the open-source React on Rails gem and npm package

Applied to files:

  • script/ci-changes-detector
  • CODING_AGENTS.md
  • react_on_rails/spec/dummy/README.md
  • .claude/docs/analysis/CLAUDE_MD_UPDATES.md
  • SWITCHING_CI_CONFIGS.md
  • react_on_rails/spec/dummy/e2e/README.md
  • react_on_rails_pro/spec/dummy/lib/tasks/assets.rake
  • react_on_rails_pro/spec/dummy/config/initializers/react_on_rails.rb
  • react_on_rails/spec/dummy/client/README.md
  • docs/migrating/migrating-from-react-rails.md
  • WARP.md
  • react_on_rails_pro/spec/dummy/README.md
  • react_on_rails_pro/spec/dummy/Procfile.static
  • react_on_rails/spec/dummy/Procfile.dev
  • docs/getting-started/installation-into-an-existing-rails-app.md
  • react_on_rails/spec/dummy/config/swc.config.js
  • docs/getting-started/quick-start.md
  • .claude/agents/pr-testing-guide.md
📚 Learning: 2025-11-25T08:05:17.804Z
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-25T08:05:17.804Z
Learning: Exclude `/coverage`, `/tmp`, `/gen-examples`, `/packages/react-on-rails/lib`, `/node_modules`, `/spec/dummy/node_modules`, `/spec/dummy/tmp`, `/spec/dummy/app/assets/webpack`, `/spec/dummy/log`, `/spec/dummy/e2e/playwright-report`, `/spec/dummy/test-results` from IDE indexing

Applied to files:

  • script/ci-changes-detector
  • SWITCHING_CI_CONFIGS.md
  • .claude/docs/analysis/claude-md-improvements.md
  • react_on_rails_pro/spec/dummy/Procfile.static
📚 Learning: 2025-11-25T08:05:17.804Z
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-25T08:05:17.804Z
Learning: The `react_on_rails_pro/` directory has its own Prettier/ESLint configuration and must be linted separately

Applied to files:

  • script/ci-changes-detector
  • CODING_AGENTS.md
  • react_on_rails/spec/dummy/README.md
  • .claude/docs/analysis/CLAUDE_MD_UPDATES.md
  • .claude/docs/analysis/MIGRATION_QUICK_REFERENCE.md
  • SWITCHING_CI_CONFIGS.md
  • bin/ci-local
  • conductor-setup.sh
  • react_on_rails_pro/spec/dummy/lib/tasks/assets.rake
  • react_on_rails_pro/spec/dummy/config/initializers/react_on_rails.rb
  • .claude/docs/analysis/claude-md-improvements.md
  • react_on_rails/spec/dummy/client/README.md
  • docs/migrating/migrating-from-react-rails.md
  • WARP.md
  • react_on_rails_pro/spec/dummy/README.md
  • react_on_rails_pro/spec/dummy/Procfile.static
  • react_on_rails/spec/dummy/Procfile.dev
  • docs/getting-started/installation-into-an-existing-rails-app.md
  • docs/getting-started/quick-start.md
  • .claude/agents/pr-testing-guide.md
📚 Learning: 2025-02-12T16:38:06.537Z
Learnt from: Romex91
Repo: shakacode/react_on_rails PR: 1697
File: package-scripts.yml:28-28
Timestamp: 2025-02-12T16:38:06.537Z
Learning: The file `node_package/lib/ReactOnRails.full.js` is autogenerated during the build process and should not be present in the repository.

Applied to files:

  • script/ci-changes-detector
  • react_on_rails/spec/dummy/README.md
  • .claude/docs/analysis/CLAUDE_MD_UPDATES.md
  • .claude/docs/analysis/MIGRATION_QUICK_REFERENCE.md
  • SWITCHING_CI_CONFIGS.md
  • react_on_rails_pro/spec/dummy/lib/tasks/assets.rake
  • react_on_rails_pro/spec/dummy/config/initializers/react_on_rails.rb
  • .claude/docs/analysis/claude-md-improvements.md
  • react_on_rails/spec/dummy/client/README.md
  • docs/migrating/migrating-from-react-rails.md
  • react_on_rails_pro/spec/dummy/README.md
  • react_on_rails_pro/spec/dummy/Procfile.static
  • react_on_rails/spec/dummy/Procfile.dev
  • docs/getting-started/installation-into-an-existing-rails-app.md
  • react_on_rails/spec/dummy/config/swc.config.js
  • docs/getting-started/quick-start.md
  • .claude/agents/pr-testing-guide.md
📚 Learning: 2025-11-25T08:05:17.804Z
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-25T08:05:17.804Z
Learning: Applies to lib/react_on_rails/*.rb : Create RBS signature files for new Ruby files in `lib/react_on_rails/` by adding corresponding `.rbs` file in `sig/react_on_rails/`, adding to Steepfile, and validating before committing

Applied to files:

  • script/ci-changes-detector
  • SWITCHING_CI_CONFIGS.md
  • bin/ci-local
  • react_on_rails_pro/spec/dummy/lib/tasks/assets.rake
  • react_on_rails_pro/spec/dummy/config/initializers/react_on_rails.rb
  • docs/migrating/migrating-from-react-rails.md
  • react_on_rails_pro/spec/dummy/README.md
  • react_on_rails_pro/spec/dummy/Procfile.static
  • react_on_rails/spec/dummy/Procfile.dev
  • docs/getting-started/installation-into-an-existing-rails-app.md
  • docs/getting-started/quick-start.md
  • .claude/agents/pr-testing-guide.md
📚 Learning: 2025-04-26T21:55:55.874Z
Learnt from: alexeyr-ci2
Repo: shakacode/react_on_rails PR: 1732
File: spec/dummy/client/app-react16/startup/ReduxSharedStoreApp.client.jsx:40-44
Timestamp: 2025-04-26T21:55:55.874Z
Learning: In the react_on_rails project, files under `app-react16` directories are copied/moved to corresponding `/app` directories during the conversion process (removing the `-react16` suffix), which affects their relative import paths at runtime.

Applied to files:

  • script/ci-changes-detector
  • react_on_rails/spec/dummy/README.md
  • .claude/docs/analysis/CLAUDE_MD_UPDATES.md
  • SWITCHING_CI_CONFIGS.md
  • react_on_rails/spec/dummy/e2e/README.md
  • react_on_rails_pro/spec/dummy/lib/tasks/assets.rake
  • react_on_rails_pro/spec/dummy/config/initializers/react_on_rails.rb
  • react_on_rails/spec/dummy/client/README.md
  • docs/migrating/migrating-from-react-rails.md
  • react_on_rails_pro/spec/dummy/README.md
  • react_on_rails_pro/spec/dummy/Procfile.static
  • react_on_rails/spec/dummy/Procfile.dev
  • docs/getting-started/installation-into-an-existing-rails-app.md
  • react_on_rails/spec/dummy/config/swc.config.js
  • docs/getting-started/quick-start.md
  • .claude/agents/pr-testing-guide.md
📚 Learning: 2025-11-25T08:05:17.804Z
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-25T08:05:17.804Z
Learning: Applies to **/*.{rb,rake} : ALWAYS run `bundle exec rubocop` and fix ALL violations before every commit/push

Applied to files:

  • script/ci-changes-detector
  • CODING_AGENTS.md
  • bin/ci-rerun-failures
  • .claude/docs/analysis/CLAUDE_MD_UPDATES.md
  • bin/ci-local
  • conductor-setup.sh
  • react_on_rails/spec/dummy/client/README.md
  • WARP.md
  • .claude/agents/pr-testing-guide.md
📚 Learning: 2025-01-23T18:20:45.824Z
Learnt from: alexeyr-ci
Repo: shakacode/react_on_rails PR: 1687
File: spec/dummy/package.json:0-0
Timestamp: 2025-01-23T18:20:45.824Z
Learning: When adding or updating dependencies in spec/dummy/package.json, maintain version consistency with other package.json files in the codebase to avoid potential version conflicts.

Applied to files:

  • CODING_AGENTS.md
  • react_on_rails/spec/dummy/README.md
  • SWITCHING_CI_CONFIGS.md
  • bin/ci-local
  • conductor-setup.sh
  • react_on_rails/spec/dummy/e2e/README.md
  • react_on_rails_pro/spec/dummy/lib/tasks/assets.rake
  • react_on_rails/spec/dummy/client/README.md
  • docs/migrating/migrating-from-react-rails.md
  • WARP.md
  • react_on_rails_pro/spec/dummy/README.md
  • react_on_rails/spec/dummy/Procfile.dev
  • docs/getting-started/installation-into-an-existing-rails-app.md
  • react_on_rails/spec/dummy/config/swc.config.js
  • bin/ci-switch-config
  • docs/getting-started/quick-start.md
  • .claude/agents/pr-testing-guide.md
📚 Learning: 2025-11-25T08:05:17.804Z
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-25T08:05:17.804Z
Learning: Do NOT manually format code during conflict resolution; always use `rake autofix` or `pnpm run format` for automated formatting

Applied to files:

  • CODING_AGENTS.md
  • .claude/agents/pr-testing-agent.md
  • .claude/docs/analysis/CLAUDE_MD_UPDATES.md
  • SWITCHING_CI_CONFIGS.md
  • bin/ci-local
  • conductor-setup.sh
  • react_on_rails/spec/dummy/e2e/README.md
  • react_on_rails_pro/spec/dummy/lib/tasks/assets.rake
  • .claude/docs/managing-file-paths.md
  • .claude/docs/master-health-monitoring.md
  • .claude/docs/analysis/claude-md-improvements.md
  • react_on_rails/spec/dummy/client/README.md
  • WARP.md
  • react_on_rails_pro/spec/dummy/README.md
  • .claude/agents/pr-testing-guide.md
📚 Learning: 2025-11-25T08:05:17.804Z
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-25T08:05:17.804Z
Learning: ALWAYS let Prettier and RuboCop handle ALL formatting - never manually format

Applied to files:

  • CODING_AGENTS.md
  • bin/ci-local
  • conductor-setup.sh
  • .claude/docs/analysis/claude-md-improvements.md
  • WARP.md
  • .claude/agents/pr-testing-guide.md
📚 Learning: 2025-11-25T08:05:17.804Z
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-25T08:05:17.804Z
Learning: NEVER use `npm` commands; only use equivalent `pnpm` commands for JavaScript package management

Applied to files:

  • CODING_AGENTS.md
  • bin/ci-rerun-failures
  • SWITCHING_CI_CONFIGS.md
  • bin/ci-local
  • conductor-setup.sh
  • .claude/docs/managing-file-paths.md
  • react_on_rails/spec/dummy/client/README.md
  • WARP.md
  • bin/ci-switch-config
  • docs/getting-started/quick-start.md
  • .claude/agents/pr-testing-guide.md
📚 Learning: 2025-11-25T08:05:17.804Z
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-25T08:05:17.804Z
Learning: Applies to spec/dummy/e2e/playwright/**/*.spec.js : Use Rails helpers (`appFactories`, `appEval`) in Playwright tests instead of UI-based setup to leverage factory_bot and arbitrary Ruby code execution

Applied to files:

  • react_on_rails/spec/dummy/README.md
  • bin/ci-rerun-failures
  • bin/ci-local
  • react_on_rails/spec/dummy/e2e/README.md
  • react_on_rails_pro/spec/dummy/lib/tasks/assets.rake
  • react_on_rails_pro/spec/dummy/config/initializers/react_on_rails.rb
  • react_on_rails/spec/dummy/client/README.md
  • WARP.md
  • react_on_rails_pro/spec/dummy/README.md
  • react_on_rails_pro/spec/dummy/Procfile.static
  • react_on_rails/spec/dummy/Procfile.dev
  • .claude/agents/pr-testing-guide.md
📚 Learning: 2025-09-16T08:01:11.146Z
Learnt from: justin808
Repo: shakacode/react_on_rails PR: 1770
File: lib/generators/react_on_rails/templates/base/base/app/javascript/src/HelloWorld/ror_components/HelloWorld.client.jsx:2-2
Timestamp: 2025-09-16T08:01:11.146Z
Learning: React on Rails uses webpack CSS Modules configuration with namedExports: true, which requires the import syntax `import * as style from './file.module.css'` rather than the default export pattern. This configuration enables better tree shaking and bundle size optimization for CSS modules.

Applied to files:

  • react_on_rails/spec/dummy/README.md
  • SWITCHING_CI_CONFIGS.md
  • react_on_rails_pro/spec/dummy/lib/tasks/assets.rake
  • react_on_rails_pro/spec/dummy/config/initializers/react_on_rails.rb
  • react_on_rails/spec/dummy/client/README.md
  • docs/migrating/migrating-from-react-rails.md
  • react_on_rails_pro/spec/dummy/README.md
  • react_on_rails_pro/spec/dummy/Procfile.static
  • docs/getting-started/installation-into-an-existing-rails-app.md
  • react_on_rails/spec/dummy/config/swc.config.js
  • docs/getting-started/quick-start.md
📚 Learning: 2024-07-27T10:08:35.868Z
Learnt from: theforestvn88
Repo: shakacode/react_on_rails PR: 1620
File: spec/dummy/client/app/startup/HelloTurboStream.jsx:3-3
Timestamp: 2024-07-27T10:08:35.868Z
Learning: The `RailsContext` import in `spec/dummy/client/app/startup/HelloTurboStream.jsx` is used later in the project, as clarified by the user theforestvn88.

Applied to files:

  • react_on_rails/spec/dummy/README.md
  • react_on_rails/spec/dummy/client/README.md
  • react_on_rails_pro/spec/dummy/README.md
  • react_on_rails_pro/spec/dummy/Procfile.static
📚 Learning: 2025-11-25T08:05:17.804Z
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-25T08:05:17.804Z
Learning: Applies to spec/dummy/e2e/playwright/**/*.spec.js : Generate test data in Playwright tests using `appFactories` function with factory_bot syntax (e.g., `appFactories([['create', 'user', { name: 'Test User' }]])`) rather than manual database manipulation

Applied to files:

  • react_on_rails/spec/dummy/README.md
  • bin/ci-local
  • react_on_rails/spec/dummy/e2e/README.md
  • .claude/agents/pr-testing-guide.md
📚 Learning: 2025-11-25T08:05:17.804Z
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-25T08:05:17.804Z
Learning: Applies to spec/dummy/e2e/playwright/app_commands/**/*.rb : Add custom Playwright app commands in `e2e/playwright/app_commands/` directory as Ruby files using CypressOnRails SmartFactoryWrapper pattern

Applied to files:

  • bin/ci-rerun-failures
  • react_on_rails/spec/dummy/e2e/README.md
  • react_on_rails_pro/spec/dummy/config/initializers/react_on_rails.rb
  • .claude/agents/pr-testing-guide.md
📚 Learning: 2025-11-25T08:05:17.804Z
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-25T08:05:17.804Z
Learning: For infrastructure/config changes affecting directory structure, file paths, build configurations, or CI workflows, conduct comprehensive local testing before pushing (the '15-Minute Rule')

Applied to files:

  • .claude/docs/analysis/CLAUDE_MD_UPDATES.md
  • .claude/docs/analysis/MIGRATION_QUICK_REFERENCE.md
  • .claude/docs/analysis/CI_FAILURES_2024-11-21.md
  • bin/ci-local
  • .claude/docs/managing-file-paths.md
  • CLAUDE.md
  • .claude/docs/master-health-monitoring.md
  • .claude/docs/analysis/claude-md-improvements.md
  • WARP.md
  • .claude/agents/pr-testing-guide.md
📚 Learning: 2025-11-25T08:05:17.804Z
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-25T08:05:17.804Z
Learning: Resolve merge conflicts by: resolving logical conflicts first, verifying file paths with grep, testing affected scripts, auto-fixing formatting with `rake autofix`, and testing critical scripts if build configs changed

Applied to files:

  • .claude/docs/analysis/CLAUDE_MD_UPDATES.md
  • SWITCHING_CI_CONFIGS.md
  • .claude/docs/analysis/CI_FAILURES_2024-11-21.md
  • CLAUDE.md
  • .claude/docs/master-health-monitoring.md
  • .claude/docs/analysis/claude-md-improvements.md
  • react_on_rails/spec/dummy/client/README.md
  • WARP.md
  • .claude/agents/pr-testing-guide.md
📚 Learning: 2025-11-25T08:05:17.804Z
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-25T08:05:17.804Z
Learning: Applies to /CHANGELOG_PRO.md : Update `/CHANGELOG_PRO.md` for Pro-only features, fixes, and changes affecting Pro packages

Applied to files:

  • bin/ci-local
  • react_on_rails/spec/dummy/e2e/README.md
📚 Learning: 2025-10-23T17:22:01.074Z
Learnt from: AbanoubGhadban
Repo: shakacode/react_on_rails PR: 1875
File: lib/react_on_rails/utils.rb:112-124
Timestamp: 2025-10-23T17:22:01.074Z
Learning: In React on Rails, when Pro is installed but not licensed, the intended behavior is to raise an error on boot. The `react_on_rails_pro?` method validates licenses and should raise errors early (including during path resolution in methods like `server_bundle?`) to enforce licensing requirements rather than failing later with obscure errors.

Applied to files:

  • bin/ci-local
  • react_on_rails_pro/spec/dummy/config/initializers/react_on_rails.rb
📚 Learning: 2025-02-18T13:08:01.477Z
Learnt from: AbanoubGhadban
Repo: shakacode/react_on_rails PR: 1644
File: lib/react_on_rails/helper.rb:190-197
Timestamp: 2025-02-18T13:08:01.477Z
Learning: RSC support validation in React on Rails Pro is handled through a chain of validations:
1. Pro version check in `run_stream_inside_fiber`
2. RSC support check during pack generation via `ReactOnRailsPro.configuration.enable_rsc_support`
3. RSC support validation during component registration
This makes additional validation in the helper methods unnecessary.

Applied to files:

  • bin/ci-local
  • react_on_rails_pro/spec/dummy/config/initializers/react_on_rails.rb
📚 Learning: 2025-11-25T08:05:17.804Z
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-25T08:05:17.804Z
Learning: NEVER push without running full lint check first

Applied to files:

  • bin/ci-local
📚 Learning: 2025-11-25T08:05:17.804Z
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-25T08:05:17.804Z
Learning: Applies to spec/dummy/e2e/playwright/**/*.spec.js : In Playwright E2E tests, use `app('clean')` in `beforeEach` blocks to ensure clean database state between tests

Applied to files:

  • bin/ci-local
  • react_on_rails/spec/dummy/e2e/README.md
  • .claude/agents/pr-testing-guide.md
📚 Learning: 2025-09-15T21:24:48.207Z
Learnt from: AbanoubGhadban
Repo: shakacode/react_on_rails PR: 1781
File: node_package/src/ClientSideRenderer.ts:82-95
Timestamp: 2025-09-15T21:24:48.207Z
Learning: In React on Rails, the force_load feature includes both explicit `data-force-load="true"` usage and the ability to hydrate components during the page loading state (`document.readyState === 'loading'`). Both capabilities require a Pro license, so the condition `!railsContext.rorPro && (isComponentForceLoaded || document.readyState === 'loading')` correctly gates both scenarios.

Applied to files:

  • bin/ci-local
  • react_on_rails_pro/spec/dummy/README.md
  • docs/getting-started/installation-into-an-existing-rails-app.md
📚 Learning: 2025-09-29T14:45:42.687Z
Learnt from: AbanoubGhadban
Repo: shakacode/react_on_rails PR: 1833
File: lib/react_on_rails/dev/process_manager.rb:72-83
Timestamp: 2025-09-29T14:45:42.687Z
Learning: In Ruby bundler contexts, when bundler intercepts system commands for executables not in the Gemfile, both version checks (like `system("foreman", "--version")`) and execution commands (like `system("foreman", "start", ...)`) fail equally, both returning false. This means availability checks using version flags accurately reflect whether execution commands will work in the current bundler context.

Applied to files:

  • conductor-setup.sh
📚 Learning: 2025-11-25T08:05:17.804Z
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-25T08:05:17.804Z
Learning: Applies to /CHANGELOG*.md : Use changelog format: `[PR 1818](https://github.com/shakacode/react_on_rails/pull/1818) by [username](https://github.com/username)` (no hash in PR number)

Applied to files:

  • react_on_rails/spec/dummy/e2e/README.md
  • docs/migrating/migrating-from-react-rails.md
  • react_on_rails_pro/spec/dummy/README.md
📚 Learning: 2025-02-13T16:50:47.848Z
Learnt from: AbanoubGhadban
Repo: shakacode/react_on_rails PR: 1644
File: node_package/src/clientStartup.ts:18-21
Timestamp: 2025-02-13T16:50:47.848Z
Learning: In the react_on_rails module, the `reactOnRailsPageUnloaded` function in clientStartup.ts is intentionally kept private as it's only used internally as a callback for `onPageUnloaded`.

Applied to files:

  • react_on_rails_pro/spec/dummy/config/initializers/react_on_rails.rb
📚 Learning: 2025-11-25T08:05:17.804Z
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-25T08:05:17.804Z
Learning: Do NOT add changelog entries for linting, formatting, refactoring, tests, or documentation fixes

Applied to files:

  • WARP.md
📚 Learning: 2025-07-08T05:57:29.630Z
Learnt from: AbanoubGhadban
Repo: shakacode/react_on_rails PR: 1745
File: node_package/src/RSCRequestTracker.ts:8-14
Timestamp: 2025-07-08T05:57:29.630Z
Learning: The global `generateRSCPayload` function in React on Rails Pro (RORP) is provided by the framework during rendering requests, not implemented in application code. The `declare global` statements are used to document the expected interface that RORP will inject at runtime.

Applied to files:

  • docs/getting-started/installation-into-an-existing-rails-app.md
📚 Learning: 2025-02-13T16:50:26.861Z
Learnt from: AbanoubGhadban
Repo: shakacode/react_on_rails PR: 1644
File: node_package/src/turbolinksUtils.ts:34-36
Timestamp: 2025-02-13T16:50:26.861Z
Learning: In React on Rails, when checking for Turbolinks version 5 using `turbolinksVersion5()`, always ensure `Turbolinks` exists first by checking `turbolinksInstalled()` to prevent TypeError when accessing properties.

Applied to files:

  • docs/getting-started/installation-into-an-existing-rails-app.md
📚 Learning: 2024-12-12T13:07:09.929Z
Learnt from: alexeyr-ci
Repo: shakacode/react_on_rails PR: 1644
File: node_package/src/ReactOnRailsRSC.ts:87-87
Timestamp: 2024-12-12T13:07:09.929Z
Learning: When handling errors in 'node_package/src/ReactOnRailsRSC.ts', include the error stack in error messages in development and test environments to aid debugging.

Applied to files:

  • react_on_rails/spec/dummy/config/swc.config.js
📚 Learning: 2025-11-25T08:05:17.804Z
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-25T08:05:17.804Z
Learning: Applies to sig/react_on_rails/**/*.rbs : In RBS type signature files, define type signatures that correspond to Ruby files in `lib/react_on_rails/`

Applied to files:

  • docs/getting-started/quick-start.md
🪛 LanguageTool
docs/migrating/migrating-from-react-rails.md

[grammar] ~7-~7: An apostrophe ‘s’ denotes possession. Did you mean to use the plural form of the noun (no apostrophe)?
Context: ...e react_ujs from package.json and run your package manager's install command (e.g., `...

(NOUN_APOSTROPHE_S_VERB)

react_on_rails_pro/spec/dummy/README.md

[uncategorized] ~6-~6: Possible missing comma found.
Context: ...RUN doctoc TO UPDATE --> Table of Contents - [Webpack Configuration](#webpack-con...

(AI_HYDRA_LEO_MISSING_COMMA)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (9)
  • GitHub Check: examples (3.4, latest)
  • GitHub Check: build-dummy-app-webpack-test-bundles (3.4, 22, latest)
  • GitHub Check: rspec-package-tests (3.4, latest)
  • GitHub Check: build
  • GitHub Check: pro-lint-js-and-ruby
  • GitHub Check: build-dummy-app-webpack-test-bundles
  • GitHub Check: build-dummy-app-webpack-test-bundles
  • GitHub Check: check-bundle-size
  • GitHub Check: claude-review
🔇 Additional comments (18)
react_on_rails_pro/spec/dummy/README.md (1)

1-77: Excellent yarn→pnpm migration — ensure file ends with newline and update CHANGELOG.md.

The migration looks accurate: pnpm install -r correctly handles recursive workspace installation, and pnpm installs dependencies in the spec/dummy directory. The Running section improvements and Webpack Configuration clarifications are well-structured.

However, two action items remain:

  1. Missing trailing newline (line 77): Per coding guidelines, the file must end with a newline character.

  2. CHANGELOG.md update required (major): These documentation changes are user-visible (new installation flow, updated Running section). Based on learnings, update /CHANGELOG.md using the format: [PR 2183](https://github.com/shakacode/react_on_rails/pull/2183) by [username](https://github.com/username).

Apply this diff to add the trailing newline:

 ### Using loadable-components and no HMR

 ```sh
 overmind start -f Procfile.static

</blockquote></details>
<details>
<summary>react_on_rails/spec/dummy/Procfile.dev (1)</summary><blockquote>

`8-8`: **LGTM!**

The Procfile correctly updates the ReScript build command from yarn to pnpm, aligning with the project-wide migration to PNPM.



Based on learnings, PNPM should be used for all package management.

</blockquote></details>
<details>
<summary>react_on_rails/spec/dummy/config/swc.config.js (1)</summary><blockquote>

`7-7`: **LGTM!**

The error message correctly instructs users to use `pnpm add shakapacker` instead of `yarn add shakapacker`, aligning with the project's migration to PNPM as the primary package manager.



Based on learnings, PNPM should be used for all package management.

</blockquote></details>
<details>
<summary>react_on_rails_pro/spec/dummy/lib/tasks/assets.rake (1)</summary><blockquote>

`19-22`: **LGTM!**

The webpack asset compilation tasks correctly update from `yarn run` to `pnpm run` for both client and server builds, aligning with the project-wide migration to PNPM.



Based on learnings, PNPM should be used for all package management.

</blockquote></details>
<details>
<summary>.claude/agents/pr-testing-agent.md (1)</summary><blockquote>

`79-82`: **LGTM!**

The automated testing documentation correctly updates all CI commands from `yarn` to `pnpm`, aligning with the project-wide migration.



Based on learnings, PNPM should be used for all package management.

</blockquote></details>
<details>
<summary>react_on_rails_pro/spec/dummy/config/initializers/react_on_rails.rb (1)</summary><blockquote>

`56-60`: **Sample command correctly updated to pnpm**

The commented `build_test_command` now points to `pnpm run build:test`, which aligns with the rest of the pnpm migration. No functional impact; good to keep this example current.

</blockquote></details>
<details>
<summary>.claude/docs/master-health-monitoring.md (1)</summary><blockquote>

`70-75`: **Master health checks correctly updated to pnpm**

Switching the manual checks to:

- `pnpm run yalc:publish`
- `pnpm build && ls -la lib/`

is consistent with the pnpm migration and yalc:publish rename. Just make sure the `build` and `yalc:publish` scripts remain defined at the expected level in `package.json` so these examples stay accurate.

</blockquote></details>
<details>
<summary>CLAUDE.md (1)</summary><blockquote>

`385-390`: **Critical scripts block correctly switched to pnpm yalc:publish**

Updating the conflict‑resolution test snippet to:

```bash
pnpm run prepack          # Test prepack script
pnpm run yalc:publish     # Test yalc publish if package structure changed
rake run_rspec:gem        # Run relevant test suites

keeps this high‑risk path aligned with the pnpm migration and yalc:publish rename. A future cleanup pass might also update the earlier Yarn-based examples in this file for full consistency, but this specific change looks good.

script/ci-changes-detector (1)

97-97: LGTM: Lockfile reference correctly updated.

The change from yarn.lock to pnpm-lock.yaml properly aligns the CI change detector with the repository's migration to pnpm.

react_on_rails_pro/spec/dummy/Procfile.static (1)

5-8: LGTM: Procfile commands updated to pnpm.

Both process definitions correctly use pnpm run instead of yarn run, aligning with the repository-wide migration.

docs/getting-started/installation-into-an-existing-rails-app.md (1)

62-69: LGTM: Multi-manager approach appropriate for user-facing documentation.

The updated installation instructions now provide options for npm, yarn, and pnpm, giving users flexibility in their package manager choice. The clarified note about --save-exact behavior across different managers is helpful.

docs/getting-started/quick-start.md (1)

15-15: LGTM: Inclusive package manager guidance for users.

The prerequisites and build instructions now appropriately accommodate multiple package managers while leading with pnpm (the repository's standard). This provides flexibility for users while signaling the project's preference.

Also applies to: 210-212

react_on_rails/spec/dummy/README.md (1)

13-29: LGTM: Setup instructions correctly migrated to pnpm.

All installation and build commands properly use pnpm with the correct flags (-r for recursive workspace install). Path references to packages/react-on-rails are also accurate.

bin/ci-rerun-failures (1)

191-191: LGTM: CI script commands fully migrated to pnpm.

All yarn commands have been properly replaced with their pnpm equivalents in both the execution logic and help text, ensuring consistency across the CI tooling.

Also applies to: 197-197, 260-260, 292-292

react_on_rails/spec/dummy/client/README.md (1)

14-21: PNPM migration in dummy client README looks correct

All updated examples (lint, dependency updates, and add/dev-add) consistently use pnpm and avoid npm/yarn CLI usage; nothing further needed here.

Also applies to: 26-27, 30-34, 39-40, 55-59

conductor-setup.sh (1)

16-21: Conductor setup PNPM changes look consistent

Tool checks, dependency installation, build, type-check, and the documented test command all now use PNPM and drop Yarn/NPM usage, without altering the surrounding flow. This script looks good.

Also applies to: 57-64, 73-84

bin/ci-switch-config (1)

268-276: PNPM lockfile handling in ci-switch-config is consistent

Both the “minimum” and “latest” paths now correctly remove pnpm-lock.yaml (root and spec/dummy) and reinstall with pnpm install using the appropriate --no-frozen-lockfile / --frozen-lockfile flags. This aligns with the updated docs and removes Yarn-specific behavior cleanly.

Also applies to: 279-285, 409-417, 421-426

bin/ci-local (1)

154-176: Local CI script now consistently uses PNPM instead of Yarn

Dependency bootstrap, linting (ESLint/Prettier/TS), JS tests, dummy app setup, and React on Rails Pro lint/tests all correctly use PNPM now, while preserving the previous behavior of skipping Pro checks if Pro deps can’t be installed. This matches the project’s PNPM-only policy.

Also applies to: 168-176, 181-190, 208-211, 241-247, 251-258

Comment thread .claude/docs/analysis/CI_FAILURES_2024-11-21.md Outdated

```bash
yarn run yalc.publish
yarn run yalc:publish
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.

⚠️ Potential issue | 🟡 Minor

Package manager references should use pnpm, not yarn.

This documentation file updates the command name from yalc.publish to yalc:publish but continues to reference yarn run throughout. Given that this PR is completing the yarn→pnpm migration, all these command examples should use pnpm run instead to align with the project's standardized package manager.

Based on learnings, the repository requires using pnpm commands exclusively for JavaScript package management.

Also applies to: 106-106, 160-160, 202-202, 241-241, 262-262, 291-291

🤖 Prompt for AI Agents
In .claude/docs/analysis/CLAUDE_MD_UPDATES.md around line 70 (and also update
the other instances at lines 106, 160, 202, 241, 262, 291), the documentation
uses "yarn run" to invoke scripts; change those examples to "pnpm run" (e.g.,
replace "yarn run yalc:publish" with "pnpm run yalc:publish") so all command
examples consistently use pnpm for package management.

Comment thread .claude/docs/analysis/claude-md-improvements.md Outdated
Comment thread .claude/docs/analysis/claude-md-improvements.md Outdated
Comment thread .claude/docs/analysis/MONOREPO_MIGRATION_ANALYSIS.md Outdated
Comment thread .claude/docs/managing-file-paths.md Outdated
Comment thread analysis/monorepo/MONOREPO_MIGRATION_CHECKLIST.md Outdated
Comment thread SWITCHING_CI_CONFIGS.md
@claude
Copy link
Copy Markdown
Contributor

claude Bot commented Dec 8, 2025

Code Review - PR #2183: Missed yarn->pnpm replacements

✅ Overall Assessment

This PR successfully addresses the missed yarn→pnpm replacements from PR #2121. The changes are comprehensive, well-scoped, and all CI checks are passing. This is a documentation/configuration cleanup that improves consistency across the codebase.


🎯 Strengths

  1. Comprehensive coverage: The PR updates 34 files across documentation, scripts, and analysis documents
  2. Consistent patterns: All replacements follow the same pattern (yarn → pnpm) with appropriate flag updates
  3. CI validation: All 31 CI checks passing, including linting, tests, and integration tests
  4. No breaking changes: These are documentation/comment updates that don't affect runtime behavior
  5. Good scope: Focuses purely on the yarn→pnpm migration without scope creep

📋 Changes Reviewed

Documentation Updates (✅ Good)

  • Installation guides updated to mention npm/yarn/pnpm as alternatives
  • Development guides now use pnpm consistently
  • Quick start guide clarifies package manager flexibility
  • Migration guide updated appropriately

Script Updates (✅ Good)

  • bin/ci-local: Updated all yarn commands to pnpm
  • bin/ci-rerun-failures: Updated yarn commands
  • bin/ci-switch-config: Updated lock file references (yarn.lock → pnpm-lock.yaml)
  • conductor-setup.sh: Updated setup instructions

Configuration Updates (✅ Good)

  • Removed packages/react-on-rails-pro-node-renderer/script/preinstall.js (optional preinstall linking script - no longer needed)
  • Updated Procfile references
  • Updated lock file references in cleanup scripts

Analysis Documents (✅ Good)

  • All .claude/docs/ analysis files updated consistently
  • Historical references preserved but updated where commands are shown

🔍 Potential Issues Found

Minor: Remaining yarn references in docs/ directory

I found some remaining yarn references in the docs folder that may need attention:

# Check these files:
docs/JS_PRO_PACKAGE_SEPARATION_PLAN.md (multiple yarn references)
docs/api-reference/configuration.md:340 ("what yarn command is run")

Recommendation: These appear to be in historical/planning documents (JS_PRO_PACKAGE_SEPARATION_PLAN.md) which may be intentionally left as historical record. The one in configuration.md:340 should probably be updated to "what pnpm command is run" for consistency.

Minor: yarn binaries in dummy apps

The following yarn wrapper scripts remain (which is expected):

  • react_on_rails_pro/spec/dummy/bin/yarn
  • react_on_rails_pro/spec/execjs-compatible-dummy/bin/yarn

These are Rails bin stubs and may still be needed for compatibility. Worth verifying if these should stay or be removed/updated.


🧪 Testing Validation

CI Status: All checks passing ✅

  • Lint JS and Ruby: SUCCESS
  • Integration Tests: SUCCESS
  • RSpec tests: SUCCESS
  • Generator tests: SUCCESS
  • Pro package tests: SUCCESS

No additional testing needed since:

  1. These are documentation/comment changes
  2. All automated tests pass
  3. No runtime code affected

🎨 Code Quality

  • Style consistency: ✅ All changes follow project conventions
  • RuboCop compliance: ✅ No violations
  • Formatting: ✅ Prettier/ESLint passing
  • Breaking changes: ✅ None

📌 Recommendations

  1. Before merging: Consider reviewing the remaining yarn references in:

    • docs/api-reference/configuration.md:340
    • Decide if docs/JS_PRO_PACKAGE_SEPARATION_PLAN.md should be updated (historical document)
  2. Optional follow-up: Verify if the bin/yarn wrapper scripts in dummy apps are still needed

  3. Documentation note: The PR description correctly notes this completes the yarn→pnpm migration started in Migrate from Yarn Classic to pnpm #2121


✅ Approval Recommendation

APPROVED

This PR successfully completes the yarn→pnpm migration cleanup. The changes are thorough, consistent, and all tests pass. The minor issues noted above are optional and don't block merging.

Rationale:

  • All CI checks passing
  • Comprehensive and consistent changes
  • No runtime impact
  • Improves documentation consistency
  • Follows project coding standards

Great work on the thorough cleanup! 🎉

@claude
Copy link
Copy Markdown
Contributor

claude Bot commented Dec 9, 2025

Code Review - PR #2183: Missed yarn→pnpm replacements

Summary

Excellent cleanup work! This PR catches the remaining Yarn references that were missed in PR #2121's migration to pnpm. The changes are thorough and consistent across documentation, scripts, and configuration files.


✅ Strengths

  1. Comprehensive Coverage: You've systematically updated:

    • Documentation files (.claude/, analysis/, docs/*)
    • Build scripts (bin/ci-local, bin/ci-rerun-failures, bin/ci-switch-config)
    • Developer setup scripts (conductor-setup.sh)
    • README files across dummy apps
    • Lock file references throughout
  2. Consistency: All yarnpnpm replacements follow the same pattern:

    • yarn installpnpm install (or pnpm install -r for workspace recursive installs)
    • yarn run <script>pnpm run <script>
    • yarn.lockpnpm-lock.yaml
  3. Removed Dead Code: Deleting packages/react-on-rails-pro-node-renderer/script/preinstall.js is correct—this file hardcoded yarn commands that are no longer needed.

  4. Documentation Accuracy: Important clarifications like:

    • Updating WARP.md to say "ONLY use PNPM" instead of "Yarn Classic"
    • Adding multiple package manager options in user-facing docs (installation-into-an-existing-rails-app.md)

🔍 Observations & Suggestions

1. Minor Inconsistency in pnpm install Usage

Throughout the changes, I see both:

  • pnpm install (simple install)
  • pnpm install -r (recursive workspace install)

Question: Should some of the pnpm install commands in scripts like bin/ci-local and bin/ci-rerun-failures use pnpm install -r instead? For example:

# Line 167 in bin/ci-local
if ! (bundle install && pnpm install); then

Should this be pnpm install -r to ensure workspace dependencies are properly installed? This might not matter if pnpm handles it automatically, but worth clarifying for consistency.

2. Verification Needed: Does the Preinstall Deletion Break Anything?

The deleted packages/react-on-rails-pro-node-renderer/script/preinstall.js referenced a link-source script and used yalc.

Recommendation: Verify that:

  • Any preinstall hooks in package.json that referenced this script are also removed
  • The yalc workflow still works without this script
  • No other scripts depend on the link-source functionality

Could you confirm this has been tested with the yalc workflow mentioned in CLAUDE.md's testing requirements?

3. SWITCHING_CI_CONFIGS.md Paths Need Monorepo Update

In SWITCHING_CI_CONFIGS.md, there's this section:

# Clean everything and try again
rm -rf node_modules pnpm-lock.yaml react_on_rails/spec/dummy/node_modules react_on_rails/spec/dummy/pnpm-lock.yaml
pnpm install -r
cd react_on_rails/spec/dummy && pnpm install

Issue: The paths react_on_rails/spec/dummy/ suggest this was written for a monorepo structure where react_on_rails is a subdirectory. But based on the git status showing we're in /home/runner/work/react_on_rails/react_on_rails, it seems we're already at the root.

Should these paths be:

rm -rf node_modules pnpm-lock.yaml spec/dummy/node_modules spec/dummy/pnpm-lock.yaml
pnpm install -r
cd spec/dummy && pnpm install

4. Analysis Files: Historical vs Current

Many files in .claude/docs/analysis/ contain historical references to yarn run yalc.publish that you've updated to yarn run yalc:publish.

Minor note: Some of these are analysis documents describing past incidents (like CI_FAILURES_2024-11-21.md). While updating them for consistency is fine, consider whether historical analysis files should preserve the exact commands as they were at the time of the incident vs. being updated to current conventions.

Not a blocker—just a philosophical question about whether historical docs should be updated or preserved as-is.


🔒 Security Considerations

No security concerns. The changes are purely documentation and script updates with no code execution changes.


🧪 Test Coverage Recommendations

Per CLAUDE.md's critical requirements, before merging:

  1. MANDATORY: Test clean install

    rm -rf node_modules
    pnpm install --frozen-lockfile
  2. MANDATORY: Test build scripts

    pnpm run build
    pnpm run prepack
    pnpm run yalc:publish
  3. Test the updated scripts

    # Test bin/ci-local with updated pnpm commands
    bin/ci-local --fast
    
    # Test bin/ci-switch-config if you have the environment
    bin/ci-switch-config status
  4. Verify Pro package still works

    cd react_on_rails_pro
    pnpm install -r
    pnpm run nps test

🎯 Performance Considerations

No performance impact. These are documentation and script updates only.


📝 Changelog

Per CLAUDE.md:

Do NOT add entries for: linting, formatting, refactoring, tests, or documentation fixes

Correctly not updating CHANGELOG.md—this is purely documentation cleanup, not user-facing.


✅ Final Verdict

Approve with minor verification needed

This is excellent cleanup work that makes the codebase consistent with the pnpm migration. The changes are low-risk and improve developer experience by ensuring all documentation matches the actual tooling.

Before merging, please verify:

  1. That the preinstall script deletion doesn't break the Pro package workflow
  2. The path references in SWITCHING_CI_CONFIGS.md are correct for the current structure
  3. Run the mandatory build script tests listed above

Great attention to detail in catching all these references! 🎉

@claude
Copy link
Copy Markdown
Contributor

claude Bot commented Dec 9, 2025

Code Review - Missed yarn->pnpm replacements

Thank you for catching these missed replacements from PR #2121! I've reviewed the changes and found both strengths and areas for improvement.

✅ Strengths

  1. Comprehensive coverage - You've updated numerous files across documentation, scripts, and configuration
  2. Consistent pattern - The replacements follow a clear pattern (yarn → pnpm, yarn.lock → pnpm-lock.yaml)
  3. Good catches - Important files like bin/ci-local, bin/ci-rerun-failures, and bin/ci-switch-config were updated
  4. Deleted obsolete file - Removed packages/react-on-rails-pro-node-renderer/script/preinstall.js which was yarn-specific

⚠️ Issues Found

1. Incomplete yarn replacements in documentation

Several files still contain yarn commands that should be pnpm:

In .claude/docs/managing-file-paths.md:

  • Lines 17-21: Still uses yarn run prepack and yarn build
  • Lines 51-60: Still uses yarn build, yarn run prepack, and yarn install

In analysis files:

  • Multiple analysis docs still reference yarn run prepack
  • analysis/monorepo/MONOREPO_MIGRATION_CHECKLIST.md has mixed yarn/pnpm usage

The PR correctly changed yarn run yalc.publishyarn run yalc:publish (fixing the dot-to-colon typo), but left the yarn part unchanged in many places.

2. Inconsistent command patterns

Some files now show:

# Inconsistent - still using yarn
yarn run prepack
yarn run yalc:publish

Should be:

pnpm run prepack
pnpm run yalc:publish

3. Missing updates in CLAUDE.md merge conflict section

CLAUDE.md line 387 correctly updated to pnpm run yalc:publish, but line 385 still says pnpm run prepack while the context in line 17-21 of managing-file-paths.md still uses yarn.

🔍 Suggested Fixes

Run this command to find all remaining yarn references in docs:

# Find remaining yarn commands in documentation
grep -rn "yarn run\|yarn install\|yarn build\|yarn test\|yarn add" \
  --include="*.md" \
  --exclude-dir=node_modules \
  --exclude-dir=.git \
  . | grep -v "yarn.lock" | grep -v "or yarn" | grep -v "pnpm/yarn"

Then update these files:

  1. .claude/docs/managing-file-paths.md - Lines 17, 21, 51, 56-57, 60
  2. .claude/docs/analysis/CLAUDE_MD_UPDATES.md - Multiple instances
  3. .claude/docs/analysis/MIGRATION_QUICK_REFERENCE.md - Line 160
  4. .claude/docs/analysis/claude-md-improvements.md - Lines 47, 49, 113
  5. analysis/monorepo/MONOREPO_MIGRATION_CHECKLIST.md - Multiple instances

📋 Recommendations

  1. Complete the migration - Update all remaining yarn references to pnpm
  2. Keep flexible documentation - For user-facing docs (like installation-into-an-existing-rails-app.md), showing multiple package managers is good, but internal docs should be consistent
  3. Run linting - Ensure bundle exec rubocop passes
  4. No changelog needed - This is documentation-only, so skipping CHANGELOG is correct

🎯 Next Steps

  1. Search for and replace remaining yarn commands in the files listed above
  2. Run pnpm run format to ensure formatting is correct
  3. Test that the updated commands work: pnpm run prepack, pnpm run yalc:publish

Overall, this is a valuable cleanup PR! Just needs a bit more thoroughness to catch all the stragglers.


Test Coverage: N/A (documentation only)
Security Concerns: None
Performance Impact: None
Breaking Changes: None

@claude
Copy link
Copy Markdown
Contributor

claude Bot commented Dec 9, 2025

Code Review: Yarn to PNPM Migration Completeness

Thanks for catching these missed references! This PR is a valuable cleanup from PR #2121's yarn→pnpm migration. Here's my review:

Strengths

  1. Comprehensive coverage - The PR thoroughly addresses yarn references across:

    • Documentation (installation guides, READMEs)
    • Development scripts (bin/ci-local, bin/ci-rerun-failures, bin/ci-switch-config)
    • Configuration files (Procfiles, initializers)
    • Internal documentation (.claude/agents/, .claude/docs/)
  2. Correct command replacements:

    • yarn installpnpm install -r (with -r for recursive workspace installs)
    • yarn addpnpm add
    • yarn upgradepnpm update
    • yarn.lockpnpm-lock.yaml
  3. Proper workspace syntax maintained - Kept workspace:* protocol references intact

  4. Removed obsolete preinstall script - The deleted packages/react-on-rails-pro-node-renderer/script/preinstall.js was specific to yarn's optional dependency linking and is no longer needed with pnpm

📝 Observations & Suggestions

  1. Lock file references in CI detector (script/ci-changes-detector):

    • Changed yarn.lockpnpm-lock.yaml
    • Good catch on this automation script
  2. Documentation consistency:

    • docs/getting-started/installation-into-an-existing-rails-app.md now shows all three package managers (npm, yarn, pnpm) which is user-friendly ✅
    • Consider noting pnpm is the primary package manager for contributors in CONTRIBUTING.md if not already done
  3. Typo in one location:

    • Line in .claude/agents/pr-testing-agent.md: yarn start format.listDifferent should be pnpm start format.listDifferent (looks like this was fixed ✅)

🔍 Testing Recommendations

Before merging, please verify:

  1. Critical build scripts work:

    # Clean test
    rm -rf node_modules pnpm-lock.yaml
    pnpm install -r
    pnpm run build
    pnpm run yalc:publish
  2. CI scripts execute without errors:

    bin/ci-switch-config status
    bin/ci-rerun-failures --help
    bin/ci-local --help
  3. Documentation examples are accurate:

    • Spot-check a few README examples manually
    • Verify Procfile commands work

🎯 Quality Assessment

  • Code Quality: ✅ Excellent - consistent replacements throughout
  • Completeness: ✅ Very thorough search and replace
  • Documentation: ✅ Well-maintained across all doc types
  • Security: ✅ No concerns (removing unused preinstall script is good)
  • Performance: ✅ No impact (documentation/script changes only)
  • Test Coverage: ⚠️ No automated tests, but manual verification recommended (see above)

🚀 Recommendation

LGTM with manual testing. This is a solid cleanup PR. Once you've verified the critical build scripts work (especially after a clean install), this is ready to merge.

The removal of the preinstall script is correct - pnpm handles workspace dependencies natively and doesn't need the yarn-specific linking workaround.


Minor note: Consider running bundle exec rubocop to ensure any doc formatting is consistent (though these changes likely don't affect Ruby files).

@claude
Copy link
Copy Markdown
Contributor

claude Bot commented Dec 9, 2025

Code Review - PR #2183: Missed yarn->pnpm replacements

Summary

This PR completes the yarn-to-pnpm migration by updating remaining references in scripts, documentation, and configuration files. All CI checks are passing ✅


✅ Positive Aspects

  1. Thorough Migration Coverage

    • Correctly updates all documentation files (getting-started guides, README files, etc.)
    • Updates CI scripts (bin/ci-*, conductor-setup.sh)
    • Updates analysis/internal documentation in .claude/ directory
    • Updates Procfiles and task files
  2. Proper Lockfile Handling

    • Correctly changes yarn.lockpnpm-lock.yaml in scripts
    • Updates CI change detector to recognize pnpm-lock.yaml (critical for CI optimization)
  3. Script Consistency

    • yarn install --frozen-lockfilepnpm install --frozen-lockfile (correct)
    • yarn install --no-progresspnpm install --no-frozen-lockfile (appropriate for non-CI contexts)
    • Package manager detection in conductor-setup.sh updated correctly
  4. Documentation Improvements

    • Installation docs now mention all package managers (npm/yarn/pnpm) where appropriate
    • Uses correct flags: --save-exact (npm), --exact (yarn), --save-exact (pnpm)
  5. Cleanup of Obsolete Code

    • Removes packages/react-on-rails-pro-node-renderer/script/preinstall.js
    • This script had yarn-specific commands and is no longer referenced in package.json
    • Good cleanup!

🔍 Areas for Consideration

Minor: Package Manager Flexibility Documentation

In docs/getting-started/installation-into-an-existing-rails-app.md:

# Use your preferred package manager
npm install react-on-rails --save-exact
# or: yarn add react-on-rails --exact
# or: pnpm add react-on-rails --save-exact

Suggestion: While this is good for compatibility, consider adding a note about which package manager the project itself uses (pnpm), so users understand the canonical approach. Something like:

# This project uses pnpm, but you can use your preferred package manager:
pnpm add react-on-rails --save-exact
# or: npm install react-on-rails --save-exact
# or: yarn add react-on-rails --exact

Verification Needed: yalc Command Consistency

Throughout the codebase, I notice:

  • Some places use pnpm run yalc:publish (with colon)
  • The actual package.json script is "yalc:publish": "yalc publish"

This appears consistent and correct. ✅

Verification: Procfile.dev rescript command

In react_on_rails/spec/dummy/Procfile.dev:

-rescript: yarn build:rescript:dev
+rescript: pnpm build:rescript:dev

Question: Does the package.json contain a build:rescript:dev script? If this uses pnpm run, it should be fine. Just want to confirm this was tested.


🔒 Security Considerations

No security concerns identified

  • The deleted preinstall.js was correctly removed (no longer needed)
  • No credential exposure or security vulnerabilities introduced

🧪 Test Coverage

All CI checks passing:

  • Linting (JS and Ruby): SUCCESS
  • Integration tests: SUCCESS
  • Package tests: SUCCESS
  • Generator tests: SUCCESS
  • Pro package tests: SUCCESS

Recommendation: Given this changes build/CI scripts, it would be ideal to verify locally:

# Clean test as specified in CLAUDE.md
rm -rf node_modules pnpm-lock.yaml
pnpm install --frozen-lockfile
pnpm run build
pnpm run yalc:publish

# In conductor environment
./conductor-setup.sh

📊 Performance Considerations

Positive impact:

  • CI change detector now recognizes pnpm-lock.yaml, ensuring proper cache invalidation
  • No performance regressions expected

🎯 Best Practices Adherence

Checking against CLAUDE.md requirements:

  • ✅ Linting passing (no RuboCop violations)
  • ✅ Files end with newlines
  • ✅ Prettier/RuboCop handle formatting (no manual formatting)
  • ✅ Changes are consistent with migration from yarn to pnpm (PR Migrate from Yarn Classic to pnpm #2121)
  • ✅ Documentation updated appropriately
  • ⚠️ Changelog: Not required per CLAUDE.md (not user-visible, internal tooling)

📝 Overall Assessment

Recommendation: APPROVE ✅

This PR successfully completes the yarn-to-pnpm migration started in PR #2121. The changes are:

  1. Comprehensive - Covers scripts, docs, configs, and analysis files
  2. Correct - Proper pnpm syntax and flag usage throughout
  3. Safe - Removes obsolete code cleanly, no breaking changes
  4. Well-tested - All CI checks passing

Minor suggestions for improvement:

  1. Consider clarifying in user docs which package manager the project officially uses
  2. Confirm the rescript Procfile command was tested locally

The PR is ready to merge as-is, with suggestions being optional enhancements.


Great work on being thorough with the migration! 🎉

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment