Skip to content

Fix release script: update spec/dummy lockfile before release-it#957

Merged
justin808 merged 2 commits intomainfrom
jg/fix-release-script-dummy-lockfiles
Mar 8, 2026
Merged

Fix release script: update spec/dummy lockfile before release-it#957
justin808 merged 2 commits intomainfrom
jg/fix-release-script-dummy-lockfiles

Conversation

@justin808
Copy link
Copy Markdown
Member

@justin808 justin808 commented Mar 8, 2026

Summary

  • Fixes CI failure on main caused by stale spec/dummy/Gemfile.lock (still referenced 9.6.0.rc.3 instead of 9.6.0)
  • Fixes the root cause in the release script: moves spec/dummy bundle install to run before release-it, so the lockfile update is included in the release commit via release-it's git add .

What was happening

The release flow was:

  1. gem bump → bumps version.rb
  2. bundle install → updates root Gemfile.lock
  3. release-it → stages all changes, commits, tags, pushes
  4. bundle install in spec/dummy → updates lockfile (too late — already pushed)
  5. Commit + push lockfile changes (follow-up commit that never materialized)

What this fixes

Moves step 4 to between steps 2 and 3, so release-it's git add . picks up the spec/dummy lockfile change in the same release commit. No more follow-up commit needed.

Test plan

  • Verify CI passes on this PR (the spec/dummy/Gemfile.lock update fixes the immediate bundler frozen mode error)
  • On next release, verify spec/dummy/Gemfile.lock is included in the release commit

🤖 Generated with Claude Code


Note

Medium Risk
Touches the automated release flow (ordering of versioning/commit steps), which could affect how release commits are created and published if the sequence is wrong, though the change is small and localized.

Overview
Moves the spec/dummy bundle install step to run before release-it in rakelib/release.rake, ensuring dummy lockfile changes are picked up by release-it’s release commit and removing the post-release lockfile commit/push logic.

Updates spec/dummy/Gemfile.lock to reference shakapacker 9.6.0 instead of the prior 9.6.0.rc.3.

Written by Cursor Bugbot for commit 43194a9. Configure here.

Summary by CodeRabbit

Release Notes

  • Documentation

    • Updated release process documentation to reflect improved lockfile management procedures.
  • Chores

    • Optimized release automation to ensure all dependency lockfiles are properly synchronized during the release cycle.

The release script updated spec/dummy/Gemfile.lock AFTER release-it
had already committed and pushed, causing the lockfile to be stale
on main. This broke CI because bundler's frozen mode detected
the gemspec version mismatch.

Move spec/dummy bundle install to before release-it so the lockfile
change is included in the release commit via release-it's git add.

Also updates spec/dummy/Gemfile.lock from 9.6.0.rc.3 to 9.6.0 to
fix the current CI failure on main.

Co-Authored-By: Claude Opus 4.6 <[email protected]>
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Mar 8, 2026

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: b41f8b63-038f-458b-9253-fb64ab4e96bc

📥 Commits

Reviewing files that changed from the base of the PR and between d67309a and 1b12d82.

⛔ Files ignored due to path filters (1)
  • spec/dummy/Gemfile.lock is excluded by !**/*.lock
📒 Files selected for processing (2)
  • docs/releasing.md
  • rakelib/release.rake

Walkthrough

The release process was reorganized to update lockfiles earlier in the workflow. Documentation and the Rake task were modified to run yarn and npm installs as a pre-release step in the spec/dummy directory, removing subsequent commit and push logic that previously handled detected lockfile changes.

Changes

Cohort / File(s) Summary
Release Process Reorganization
docs/releasing.md, rakelib/release.rake
Modified lockfile update flow to occur pre-release by running bundle install, yarn install, and npm install in spec/dummy, and removed post-release commit/push logic that previously detected and handled lockfile changes.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes

Poem

🐰 Whiskers twitching with delight,
Lockfiles sync both left and right,
Before the release, not after the fact,
Our Yarn and npm now perfectly packed! 🧵

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch jg/fix-release-script-dummy-lockfiles

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.

@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps Bot commented Mar 8, 2026

Greptile Summary

This PR fixes a CI failure caused by a stale spec/dummy/Gemfile.lock (referencing 9.6.0.rc.3 instead of 9.6.0) and corrects the root cause in the release script by moving the spec/dummy bundle install to run before release-it, so the lockfile update is captured in the release commit via release-it's git add ..

  • Moves bundle install for spec/dummy to before the release-it invocation, ensuring the Gemfile.lock is part of the release commit rather than a stale follow-up
  • Removes the old post-release block that attempted (and failed) to detect and commit changed lockfiles after the release had already been pushed
  • Updates spec/dummy/Gemfile.lock from shakapacker 9.6.0.rc.39.6.0 to fix the immediate bundler frozen-mode error
  • The npm install step for spec/dummy that previously ran post-release has been removed entirely — worth confirming this is intentional given that yarn.lock / package-lock.json are no longer updated during the release flow

Confidence Score: 4/5

  • Safe to merge — the fix is logically correct and the immediate CI failure is resolved; one minor open question around the dropped npm lockfile update.
  • The core change is straightforward and well-reasoned: running bundle install in spec/dummy before release-it ensures the Gemfile.lock is included in the release commit. The removal of the post-release npm lockfile update and follow-up commit logic simplifies the script and eliminates the race condition. The only uncertainty is whether the npm lockfiles (yarn.lock, package-lock.json) in spec/dummy need to be kept current during release — the old code attempted to do this, and the new code silently drops it.
  • rakelib/release.rake — confirm the intentional removal of npm install for spec/dummy

Important Files Changed

Filename Overview
rakelib/release.rake Moves bundle install for spec/dummy to before release-it so the Gemfile.lock is included in the release commit. Also removes the post-release npm lockfile update and follow-up commit logic. The core fix is correct; the omission of npm install is worth confirming as intentional.
spec/dummy/Gemfile.lock Bumps the shakapacker version reference from 9.6.0.rc.3 to 9.6.0, resolving the stale lockfile that was causing the bundler frozen-mode CI failure.

Sequence Diagram

sequenceDiagram
    participant R as release.rake
    participant Root as Root Directory
    participant Dummy as spec/dummy
    participant RI as release-it
    participant RG as RubyGems

    Note over R: perform_release()

    R->>Root: gem bump --no-commit
    R->>Root: bundle install (updates root Gemfile.lock)
    Note over Dummy: ✅ Moved here (was after release-it)
    R->>Dummy: bundle install (updates spec/dummy/Gemfile.lock)
    R->>RI: release-it (git add . → commits ALL changes incl. lockfiles, tags, pushes, npm publish)
    R->>RG: gem release

    Note over R: ❌ Removed: post-release bundle/npm install + follow-up commit
Loading

Last reviewed commit: 43194a9

Comment thread rakelib/release.rake
# Update spec/dummy lockfiles BEFORE release-it so they are included in the release commit.
# release-it does `git add .` which picks up all working tree changes.
spec_dummy_dir = File.join(release_root, "spec", "dummy")
Shakapacker::Utils::Misc.sh_in_dir(spec_dummy_dir, "bundle install")
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.

npm install removed with no replacement

The old post-release block ran npm install in spec/dummy (to keep package-lock.json / yarn.lock in sync) before committing the lockfiles. The new code only runs bundle install — the npm lockfile step is gone entirely.

spec/dummy/package.json uses "shakapacker": "file:.yalc/shakapacker", so a plain npm install wouldn't wire up the freshly-released npm package anyway. But if the intent is to keep yarn.lock or package-lock.json current (e.g. for transitive dependency bumps between releases), those files will silently drift.

If the npm lockfiles are intentionally no longer managed during release, a comment explaining that would make the rationale clear. If they still need updating, a yarn install / npm install call should be added here alongside the bundle install, with the same placement before release-it.

@claude
Copy link
Copy Markdown
Contributor

claude Bot commented Mar 8, 2026

Review: The fix is well-reasoned. Moving spec/dummy bundle install before release-it is the correct approach — it ensures the lockfile update is picked up by release-it's git add . and included in the release commit. Removes the post-release follow-up commit logic which was a workaround rather than a fix. Three notes: (1) npm install for spec/dummy is dropped entirely — since spec/dummy uses a yalc local link for shakapacker rather than a versioned npm reference, this is likely fine, but worth confirming the yarn.lock and package-lock.json in spec/dummy no longer need to be updated during releases. (2) The fix relies on release-it's default git add . behavior; no .release-it.json was found so defaults apply, but worth verifying git.addUntrackedFiles is not overridden. (3) The new bundle install runs unconditionally during dry runs too — consistent with root bundle install behavior, low concern.

Comment thread rakelib/release.rake
# Update spec/dummy lockfiles BEFORE release-it so they are included in the release commit.
# release-it does `git add .` which picks up all working tree changes.
spec_dummy_dir = File.join(release_root, "spec", "dummy")
Shakapacker::Utils::Misc.sh_in_dir(spec_dummy_dir, "bundle install")
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.

The old code also ran npm install in spec/dummy (updating yarn.lock / package-lock.json) — that step is dropped here. Since spec/dummy/package.json references shakapacker via "file:.yalc/shakapacker" rather than a semver range, the npm lockfiles don't pin the shakapacker version, so this is likely safe to omit. Just worth confirming intentionally.

@justin808 justin808 merged commit 7ef71ac into main Mar 8, 2026
5 of 6 checks passed
@justin808 justin808 deleted the jg/fix-release-script-dummy-lockfiles branch March 8, 2026 06:12
@claude
Copy link
Copy Markdown
Contributor

claude Bot commented Mar 8, 2026

Releasing Shakapacker

This guide is for Shakapacker maintainers who need to publish a new release.

Prerequisites

  1. Install required tools:

    bundle install              # Installs gem-release
    yarn global add release-it  # Installs release-it for npm publishing
    gh --version                # Required for automatic GitHub release creation
  2. Ensure you have publishing access:

  3. Enable 2FA on both platforms:

    • npm: 2FA is required for publishing
    • RubyGems: 2FA is required for publishing
  4. Authenticate GitHub CLI:

    • Run gh auth login and ensure your account/token has write access to this repository
    • Required for automatic GitHub release creation after publishing

Release Process

1. Update the Changelog

Always update CHANGELOG.md before running the release task. The release task reads the version from CHANGELOG.md and automatically creates a GitHub release from the changelog section.

  1. Ensure all desired changes are merged to main branch
  2. Run /update-changelog release (or rc or beta for prereleases) to:
    • Find merged PRs missing from the changelog
    • Add changelog entries under the appropriate category headings
    • Auto-compute the next version based on changes (breaking → major, features → minor, fixes → patch)
    • Stamp the version header (e.g., ## [v9.6.0] - March 7, 2026)
  3. Review the changelog entries and verify the computed version
  4. Commit and push CHANGELOG.md

If you forget this step, the release task will print a warning and the GitHub release will need to be created manually afterward using sync_github_release.

2. Run the Release Task

The simplest way to release is with no arguments — the task reads the version from CHANGELOG.md:

# Recommended: reads version from CHANGELOG.md (requires step 1)
bundle exec rake create_release

# For a specific version (overrides CHANGELOG.md detection)
bundle exec rake "create_release[9.1.0]"

# For a beta release (note: use period, not dash)
bundle exec rake "create_release[9.2.0.beta.1]"  # Creates npm package 9.2.0-beta.1

# For a release candidate
bundle exec rake "create_release[9.6.0.rc.0]"

# Dry run to test without publishing
bundle exec rake "create_release[9.1.0,true]"

# Override version policy checks (monotonic + changelog/bump consistency)
RELEASE_VERSION_POLICY_OVERRIDE=true bundle exec rake "create_release[9.1.0]"
bundle exec rake "create_release[9.1.0,false,true]"

When called with no arguments, create_release:

  1. Reads the first versioned header from CHANGELOG.md (e.g., ## [v9.6.0])
  2. Compares it to the current gem version
  3. If the changelog version is newer, prompts for confirmation and uses it
  4. If no new version is found, falls back to a patch bump

Dry runs use a temporary git worktree so version bumps and installs do not modify your current checkout.

create_release validates release-version policy before publishing:

  • Target version must be greater than the latest tagged release.
  • If the versioned target changelog section exists (## [vX.Y.Z...]; not UNRELEASED), it maps to expected bump type:
    • Breaking changes => major bump
    • Added/New Features/Features/Enhancements => minor bump
    • Fixed/Fixes/Bug Fixes/Security/Improved/Deprecated => patch bump
    • Other headings => no inferred bump level (consistency check is skipped)

Use override only when needed:

  • RELEASE_VERSION_POLICY_OVERRIDE=true
  • Or task arg override (create_release[..., ..., true])

3. What the Release Task Does

The create_release task automatically:

  1. Validates release prerequisites:
    • Verifies npm authentication
    • Warns if CHANGELOG.md section is missing for the target version
  2. Pulls latest changes from the repository
  3. Bumps version numbers in:
    • lib/shakapacker/version.rb (Ruby gem version)
    • package.json (npm package version - converted from Ruby format)
  4. Publishes to npm:
    • Prompts for npm OTP (2FA code)
    • Creates git tag
    • Pushes to GitHub
  5. Publishes to RubyGems:
    • Prompts for RubyGems OTP (2FA code)
  6. Updates spec/dummy lockfiles:
    • Runs bundle install to update Gemfile.lock
    • Runs yarn install to refresh the Yarn-managed dummy app lockfile
    • Runs npm install to keep package-lock.json in sync for npm compatibility/testing
  7. Commits and pushes lockfile changes automatically
  8. Creates GitHub release from CHANGELOG.md (if the matching section exists)

4. Version Format

Important: Use Ruby gem version format (no dashes):

  • ✅ Correct: 9.1.0, 9.2.0.beta.1, 9.0.0.rc.2
  • ❌ Wrong: 9.1.0-beta.1, 9.0.0-rc.2

The task automatically converts Ruby gem format to npm semver format:

  • Ruby: 9.2.0.beta.1 → npm: 9.2.0-beta.1
  • Ruby: 9.0.0.rc.2 → npm: 9.0.0-rc.2

CHANGELOG.md headers use npm semver format (with dashes):

  • ## [v9.6.0-rc.1] — correct (matches git tag format)
  • ## [v9.6.0.rc.1] — wrong (RubyGems format, will not be found by release tasks)

Examples:

# Regular release
bundle exec rake "create_release[9.1.0]"  # Gem: 9.1.0, npm: 9.1.0

# Beta release
bundle exec rake "create_release[9.2.0.beta.1]"  # Gem: 9.2.0.beta.1, npm: 9.2.0-beta.1

# Release candidate
bundle exec rake "create_release[10.0.0.rc.1]"  # Gem: 10.0.0.rc.1, npm: 10.0.0-rc.1

# Prerelease: use /update-changelog rc first, then create_release reads it
bundle exec rake create_release  # reads v10.0.0-rc.0 from CHANGELOG.md

5. During the Release

  1. When prompted for npm OTP, enter your 2FA code from your authenticator app
  2. Accept defaults for release-it options
  3. When prompted for RubyGems OTP, enter your 2FA code
  4. If using create_release with no version, confirm the version detected from CHANGELOG.md (or the computed patch version)
  5. The script will automatically commit and push lockfile updates
  6. The script will automatically create a GitHub release (if CHANGELOG.md section exists)

6. After Release

  1. Verify the release on:

  2. Check that the lockfile commit was pushed:

    git log --oneline -5
    # Should see "Update spec/dummy lockfiles after release"
  3. Announce the release (if appropriate):

    • Post in relevant Slack/Discord channels
    • Tweet about major releases
    • Update documentation if needed

Syncing GitHub Releases Manually

If the automatic GitHub release creation was skipped (e.g., CHANGELOG.md section was missing during release), you can create it manually after updating the changelog:

  1. Update CHANGELOG.md with the published version section
    • For prerelease entries, use npm semver header format with dashes, for example ## [v9.6.0-rc.1]
  2. Commit and push CHANGELOG.md
  3. Run:
# Stable
bundle exec rake "sync_github_release[9.6.0]"

# Prerelease
bundle exec rake "sync_github_release[9.6.0.rc.1]"

sync_github_release reads release notes from the matching CHANGELOG.md section and creates/updates the GitHub release for the corresponding tag.

Troubleshooting

Uncommitted Changes After Release

If you see uncommitted changes to lockfiles after a release, this means:

  1. The release was successful but the lockfile commit step may have failed
  2. Solution: Manually commit these files:
    git add spec/dummy/Gemfile.lock spec/dummy/package-lock.json spec/dummy/yarn.lock
    git commit -m 'Update spec/dummy lockfiles after release'
    git push

Failed npm or RubyGems Publish

If publishing fails partway through:

  1. Check which step failed (npm or RubyGems)
  2. If npm failed: Fix the issue and manually run npm publish
  3. If RubyGems failed: Fix the issue and manually run gem release
  4. Then manually update and commit spec/dummy lockfiles

GitHub Release Sync Fails

If package publishing succeeds but GitHub release creation fails:

  1. Fix GitHub auth (gh auth login) or permissions

  2. Ensure CHANGELOG.md has matching header ## [vX.Y.Z...] (npm format for prereleases)

  3. Rerun only:

    bundle exec rake "sync_github_release[<gem_version>]"

Wrong Version Format

If you accidentally use npm format (with dashes):

  1. The gem will be created with an invalid version
  2. Solution: Don't push the changes, reset your branch:
    git reset --hard HEAD
  3. Re-run with correct Ruby gem format

Manual Release Steps

If you need to release manually (not recommended):

  1. Bump version:

    gem bump --version 9.1.0
    bundle install
  2. Publish to npm:

    release-it 9.1.0 --npm.publish
  3. Publish to RubyGems:

    gem release
  4. Update lockfiles:

    cd spec/dummy
    bundle install
    npm install
    cd ../..
    git add spec/dummy/Gemfile.lock spec/dummy/package-lock.json spec/dummy/yarn.lock
    git commit -m 'Update spec/dummy lockfiles after release'
    git push

Questions?

If you encounter issues not covered here, please:

  1. Check the CONTRIBUTING.md guide
  2. Ask in the maintainers channel
  3. Update this documentation for future releases

@claude
Copy link
Copy Markdown
Contributor

claude Bot commented Mar 8, 2026

Review

The fix correctly identifies and addresses the root cause: spec/dummy lockfile updates were happening after release-it had already committed and pushed, so they ended up as orphaned changes. Moving them before release-it is the right approach.

Two issues worth addressing:

1. docs/releasing.md is now inaccurate

The documentation still describes the old flow. Step 6 places lockfile updates after RubyGems publish, but in the updated code they now happen before release-it (before npm publish, tagging, and git push). Step 7 says 'Commits and pushes lockfile changes automatically' but that entire code path was deleted -- the lockfiles are now committed as part of the release-it release commit, not in a separate follow-up commit. Leaving step 7 in the docs will confuse the next person reading the release process.

2. Progress logging removed without replacement

The old code wrapped the spec/dummy install step with ZZZZ... banner separators, making it easy to spot in release logs. The new code runs the three install commands silently inline. A brief puts before them (e.g. 'Updating spec/dummy lockfiles...') would help maintainers follow along during a real release.

Comment thread docs/releasing.md
- Runs `npm install` to update `package-lock.json` (yarn.lock may also be updated for multi-package-manager compatibility testing)
- Runs `yarn install` to refresh the Yarn-managed dummy app lockfile
- Runs `npm install` to keep `package-lock.json` in sync for npm compatibility/testing
7. **Commits and pushes lockfile changes** automatically
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.

This step no longer exists — the code that committed and pushed lockfile changes separately was removed in this PR. The lockfiles are now included in the release-it release commit via its git add .. This line should be removed (and step 8 renumbered to 7) to avoid misleading future maintainers.

Comment thread docs/releasing.md
@@ -108,7 +108,8 @@ The `create_release` task automatically:
- Prompts for RubyGems OTP (2FA code)
6. **Updates spec/dummy lockfiles:**
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.

The ordering here is wrong after this fix. In the updated code, spec/dummy lockfile updates now happen before release-it runs (i.e., before step 4 "Publishes to npm"), not after RubyGems publish. This step should be moved up in the list to reflect the new sequence.

Comment thread rakelib/release.rake
Comment on lines +484 to +486
Shakapacker::Utils::Misc.sh_in_dir(spec_dummy_dir, "bundle install")
Shakapacker::Utils::Misc.sh_in_dir(spec_dummy_dir, "yarn install")
Shakapacker::Utils::Misc.sh_in_dir(spec_dummy_dir, "npm install")
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.

The old code had a ZZZZ... banner and "Updating spec/dummy dependencies" message before these steps, which made them easy to identify in release logs. Consider adding a puts here so maintainers can follow progress during a real release:

Suggested change
Shakapacker::Utils::Misc.sh_in_dir(spec_dummy_dir, "bundle install")
Shakapacker::Utils::Misc.sh_in_dir(spec_dummy_dir, "yarn install")
Shakapacker::Utils::Misc.sh_in_dir(spec_dummy_dir, "npm install")
puts "Updating spec/dummy lockfiles (will be included in the release commit)..."
Shakapacker::Utils::Misc.sh_in_dir(spec_dummy_dir, "bundle install")
Shakapacker::Utils::Misc.sh_in_dir(spec_dummy_dir, "yarn install")
Shakapacker::Utils::Misc.sh_in_dir(spec_dummy_dir, "npm install")

justin808 added a commit that referenced this pull request Mar 8, 2026
## Summary

- **Fixes CI failure on main** caused by stale `spec/dummy/Gemfile.lock`
(still referenced `9.6.0.rc.3` instead of `9.6.0`)
- **Fixes the root cause in the release script**: moves `spec/dummy`
`bundle install` to run **before** `release-it`, so the lockfile update
is included in the release commit via `release-it`'s `git add .`

### What was happening

The release flow was:
1. `gem bump` → bumps `version.rb`
2. `bundle install` → updates root `Gemfile.lock`
3. `release-it` → stages all changes, commits, tags, **pushes**
4. `bundle install` in `spec/dummy` → updates lockfile (too late —
already pushed)
5. Commit + push lockfile changes (follow-up commit that never
materialized)

### What this fixes

Moves step 4 to between steps 2 and 3, so `release-it`'s `git add .`
picks up the spec/dummy lockfile change in the same release commit. No
more follow-up commit needed.

## Test plan

- [ ] Verify CI passes on this PR (the `spec/dummy/Gemfile.lock` update
fixes the immediate bundler frozen mode error)
- [ ] On next release, verify `spec/dummy/Gemfile.lock` is included in
the release commit

🤖 Generated with [Claude Code](https://claude.com/claude-code)

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Medium Risk**
> Touches the automated release flow (ordering of versioning/commit
steps), which could affect how release commits are created and published
if the sequence is wrong, though the change is small and localized.
> 
> **Overview**
> Moves the `spec/dummy` `bundle install` step to run **before**
`release-it` in `rakelib/release.rake`, ensuring dummy lockfile changes
are picked up by `release-it`’s release commit and removing the
post-release lockfile commit/push logic.
> 
> Updates `spec/dummy/Gemfile.lock` to reference `shakapacker 9.6.0`
instead of the prior `9.6.0.rc.3`.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
43194a9. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

---------

Co-authored-by: Claude Opus 4.6 <[email protected]>
justin808 added a commit that referenced this pull request Mar 8, 2026
## Summary

- Added [Unreleased] changelog entries for two merged PRs missing from
CHANGELOG.md:
- **PR #963**: Fixed `Env#current` crashing when Rails is not loaded
(bug fix by @ihabadham)
  - **PR #900**: Added Node package API documentation (by @justin808)
- Skipped non-user-visible PRs: #958, #957, #959

## Test plan

- [x] `yarn lint` passes
- [x] Changelog formatting matches existing conventions

🤖 Generated with [Claude Code](https://claude.com/claude-code)

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Low Risk**
> Documentation-only change confined to `CHANGELOG.md`, with no runtime
or build behavior impact.
> 
> **Overview**
> Updates `CHANGELOG.md` under **[Unreleased]** to document two
previously-merged changes: a fix preventing `Env#current` from crashing
when Rails isn’t loaded, and new documentation for the Node package
JavaScript API (`docs/node_package_api.md`).
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
81bf2b8. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

---------

Co-authored-by: Claude Opus 4.6 <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant