Skip to content

fix: update CHANGELOG for 16.4.0.rc.9 and fix orphaned prerelease link cleanup#2596

Merged
justin808 merged 3 commits intomasterfrom
jg/update-changelog-unreleased
Mar 13, 2026
Merged

fix: update CHANGELOG for 16.4.0.rc.9 and fix orphaned prerelease link cleanup#2596
justin808 merged 3 commits intomasterfrom
jg/update-changelog-unreleased

Conversation

@justin808
Copy link
Copy Markdown
Member

@justin808 justin808 commented Mar 13, 2026

Summary

Changes

  1. CHANGELOG.md: New entries + rc.9 stamp + removed orphaned [16.4.0.rc.8] link
  2. update_changelog.rake: Added cleanup_collapsed_prerelease_links function, called from prepare_changelog_for_auto_version
  3. update_changelog_rake_helpers_spec.rb: 3 new tests covering link cleanup (multi-prerelease chain, single prerelease, no prereleases)

Skipped PRs (not user-visible)

Test plan

  • All 13 rake helper tests pass (3 new)
  • CI passes
  • After merge, run rake release to publish 16.4.0.rc.9

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Bug Fixes

    • Fixed bin/setup failing in pnpm workspace member directories.
  • New Features

    • Added host configuration option for the Node Renderer Fastify worker.
  • Improvements / Changed

    • Automatic installation of react_on_rails_pro enabled for --rsc/--pro flags.
    • Clarified Pro-installation signaling related to immediate hydration warnings.
    • Updated changelog to include RC9 entries and ensure Unreleased links point to the correct base.
  • Documentation

    • Added startup warning and remediation guidance for unsafe compression middleware callbacks.
  • Tests

    • Added tests covering changelog prerelease-link cleanup behavior.

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Mar 13, 2026

Walkthrough

Adds release notes for 16.4.0.rc.9 to CHANGELOG.md and introduces logic to collapse prerelease compare links when preparing the changelog, plus tests verifying cleanup behavior for orphaned prerelease links.

Changes

Cohort / File(s) Summary
Changelog Update
CHANGELOG.md
Added Unreleased → 16.4.0.rc.9 entries (auto-install improvements for --rsc/--pro, pnpm workspace fix in bin/setup, startup guard for unsafe compression middleware callbacks, Node Renderer Fastify host binding, and related link updates).
Changelog tooling
react_on_rails/rakelib/update_changelog.rake
Added cleanup_collapsed_prerelease_links(changelog, base_version) and wired it into prepare_changelog_for_auto_version to remove orphaned prerelease compare links and rewire [Unreleased] to the last stable base.
Tests
react_on_rails/spec/react_on_rails/update_changelog_rake_helpers_spec.rb
Added specs covering removal of prerelease compare links, rewiring [Unreleased] to a stable version, single-prerelease handling, and no-op behavior when no prerelease links exist.

Sequence Diagram(s)

(omitted)

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

Poem

🐰 I hopped through changelogs, tidy and bright,
RC.9 bounces in, polished and light.
Links untangled, old RCs swept away,
Setup and hosts now behave and play,
A carrot for tests — hooray!

🚥 Pre-merge checks | ✅ 3
✅ 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 accurately describes the two main changes: updating the CHANGELOG for release 16.4.0.rc.9 and fixing orphaned prerelease link cleanup in the changelog processing logic.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
  • 📝 Generate docstrings (stacked PR)
  • 📝 Generate docstrings (commit on current branch)
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch jg/update-changelog-unreleased
📝 Coding Plan
  • Generate coding plan for human review comments

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.

Comment thread CHANGELOG.md

### [16.4.0.rc.8] - 2026-03-10

Changes since the last non-beta release.
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 sentence was the introductory text for the removed ### [16.4.0.rc.8] section header, but now it's orphaned mid-way through the [16.4.0.rc.9] section — between the #### Pro > ##### Added block (lines 43-48) and the #### Added block below. It should be removed (or, if the intent is to document the cumulative scope of rc.9, reworded and placed right after the ### [16.4.0.rc.9] heading).

Comment thread CHANGELOG.md

#### Pro

##### Added
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 ##### Added (h5) is missing its parent #### Pro (h4) heading. The diff removed the #### Pro heading that preceded it (it was the start of rc.8's Pro subsection), but left the ##### Added behind. Without the parent heading, these Pro-specific entries (CSP nonce, license verification task) are structurally detached from the #### Pro scope.

Suggested fix: add #### Pro above this line.

Suggested change
##### Added
#### Pro
##### Added

@greptile-apps
Copy link
Copy Markdown

greptile-apps Bot commented Mar 13, 2026

Greptile Summary

This PR stamps the 16.4.0.rc.9 version header, collapses rc.8 into it, and adds three missing changelog entries for PRs #2439 (auto-install Pro gem), #2477 (bin/setup on pnpm workspaces), and #2554 (startup warning for unsafe compression middleware). The link table at the bottom is also correctly updated. However, collapsing rc.8 into rc.9 leaves two structural formatting issues in the resulting changelog:

  • The Changes since the last non-beta release. intro sentence (originally the rc.8 section opener) is now stranded mid-section at line 50, between the new Pro additions and the formerly-rc.8 #### Added block.
  • Removing the second #### Pro heading (before the formerly-rc.8 Pro-specific ##### Added/Changed/Improved/Fixed subsections) leaves those blocks without a Pro parent heading, making them appear visually nested under the #### Fixed section above them.

Confidence Score: 4/5

  • Safe to merge — documentation-only change with minor structural formatting issues that do not affect functionality.
  • This is a docs-only PR (CHANGELOG.md). The new version entries and link refs are correct. The two formatting issues (orphaned prose and missing #### Pro heading) are cosmetic but worth fixing before the release tag is cut, since the changelog is user-facing release documentation.
  • CHANGELOG.md — review the two structural formatting regressions introduced by collapsing rc.8 into rc.9.

Important Files Changed

Filename Overview
CHANGELOG.md Stamps 16.4.0.rc.9, collapses rc.8 into it, and adds 3 missing entries (PRs 2439, 2477, 2554); two formatting issues introduced: a misplaced rc.8 intro sentence now floating mid-section (line 50), and an orphaned block of Pro-specific ##### subsections whose parent #### Pro heading was removed (line 112).

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A["### [Unreleased]"] --> B["### [16.4.0.rc.9] - 2026-03-12"]
    B --> C["#### Improved\n(PR 2439 ✨ new, PR 2571)"]
    B --> D["#### Fixed\n(PR 2477 ✨ new)"]
    B --> E["#### Changed\n(PR 2590)"]
    B --> F["#### Pro\n##### Added\n(PR 2554 ✨ new, PR 2585)"]
    F --> G["⚠️ 'Changes since the last non-beta release.'\n(misplaced rc.8 intro)"]
    G --> H["#### Added (from rc.8)\n(PRs 2570, 2516, 2430, 2539, 2418)"]
    H --> I["#### Fixed (from rc.8)\n(PRs 2489, 2411, 2536, 2513)"]
    I --> J["#### Pro ##### Fixed (from rc.8)\n(PRs 2562, 2532, 2407, 2531, 2535...)"]
    J --> K["#### Improved / #### Fixed (from rc.8)"]
    K --> L["⚠️ ##### Added (ORPHANED — no parent #### Pro)\n(PRs 2398, 2385)"]
    L --> M["##### Changed / ##### Improved / ##### Fixed\n(PRs 2454, 2403, 2562, 2416...)"]
    N["### [16.4.0.rc.8] — REMOVED ✂️"] -.-> B
Loading

Last reviewed commit: 02943f8

Comment thread CHANGELOG.md

### [16.4.0.rc.8] - 2026-03-10

Changes since the last non-beta release.
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Misplaced intro sentence from rc.8

The line Changes since the last non-beta release. was originally positioned immediately after the ### [16.4.0.rc.8] - 2026-03-10 heading, serving as an intro paragraph for that release block. After collapsing rc.8 into rc.9, this sentence is now stranded inside the #### Pro > ##### Added subsection, floating between the new Pro items (PR 2554, PR 2585) and the formerly-rc.8 #### Added section. It reads as orphaned prose mid-section and no longer adds meaning.

Consider either removing this line entirely, or if you want to document that rc.9 encompasses all changes since the last stable release, move it to immediately after the ### [16.4.0.rc.9] heading:

Suggested change
Changes since the last non-beta release.

(remove this line)


<sub>Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!</sub>

Comment thread CHANGELOG.md

#### Pro

##### Added
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Orphaned Pro subsections after #### Pro removal

The diff removes the #### Pro heading that previously appeared before this ##### Added section (along with the subsequent ##### Changed, ##### Improved, and ##### Fixed at lines 117, 121, and 125). Those sections contain clearly Pro-specific entries — CSP nonce for immediate hydration (PR 2398), license verification rake task (PR 2385), breaking legacy key-file license removal (PR 2454), etc. — but now they have no parent #### Pro heading.

Without that heading, these #####-level subsections appear visually nested under the preceding #### Fixed section (ending at line 110), making it ambiguous whether those Pro entries are OSS fixed items or a separate Pro block. The #### Pro heading at line 43 only covers the new ##### Added items (PR 2554, PR 2585) introduced in rc.9; the formerly-rc.8 Pro subsections at line 112+ are a separate block that needs its own #### Pro heading restored.

Consider adding back the #### Pro heading before line 112:

Suggested change
##### Added
#### Pro
##### Added

Comment thread CHANGELOG.md
- **Auto-install `react_on_rails_pro` gem for `--rsc`/`--pro` generator flags**: Running `rails g react_on_rails:install --rsc` or `--pro` now automatically installs the `react_on_rails_pro` gem via `bundle add` instead of only printing an error, matching how Shakapacker is handled in the same generator. [PR 2439](https://github.com/shakacode/react_on_rails/pull/2439) by [justin808](https://github.com/justin808).
- **create-react-on-rails-app validation and test coverage**: Tightened app name validation (must start with a letter), added Rails 7.0+ prerequisite validation, and expanded validator/setup test coverage (including `validateAll` success path). [PR 2571](https://github.com/shakacode/react_on_rails/pull/2571) by [justin808](https://github.com/justin808).

#### Fixed
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.

Because rc.8 is being collapsed into rc.9, the resulting section ends up with duplicate subsection headings:

  • #### Improved appears at line 30 and again at line 89 (from rc.8)
  • #### Fixed appears here at line 35, and again at line 60, and again at line 93 (both from rc.8)

Changelog parsers and human readers expect each subsection to appear once per version. The fix would be to merge the rc.8 #### Fixed entries (lines 62–65) up into this block, and similarly consolidate #### Improved/#### Added.

@claude
Copy link
Copy Markdown
Contributor

claude Bot commented Mar 13, 2026

Review: CHANGELOG structure issues from collapsing rc.8 into rc.9

The new entries (PRs 2439, 2477, 2554) are well-written and accurate. The version stamp and compare links look correct. However, collapsing 16.4.0.rc.8 into 16.4.0.rc.9 by simply removing the rc.8 section header introduces three structural problems:

1. Orphaned introductory text (line 50)
The sentence 'Changes since the last non-beta release.' was the description under the removed ### [16.4.0.rc.8] heading. It now floats mid-section between two Pro subsections. It should be deleted, or moved to just after the ### [16.4.0.rc.9] heading if the cumulative-scope framing is desired.

2. Broken heading hierarchy at line 112
The diff removes the #### Pro heading that preceded the ##### Added block from rc.8's Pro subsection. That h5 heading is now structurally orphaned—no parent #### Pro in scope. A '#### Pro' line needs to be restored above line 112.

3. Duplicate subsection headings within [16.4.0.rc.9]
After the merge the single version block contains:

  • Improved twice (line 30 and line 89)

  • Fixed three times (line 35, line 60, line 93)

Standard changelog practice expects each category once per version. Fix: merge the rc.8 #### Fixed bullets (CSS modules/rspack, private_output_path, --pretend dry-run) into the new #### Fixed at line 35, and fold rc.8's #### Improved bullet into the new #### Improved at line 30.

None of these affect runtime behaviour, but they make the changelog harder to read and can trip up automation that parses it.

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 02943f8a77

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread CHANGELOG.md Outdated

[unreleased]: https://github.com/shakacode/react_on_rails/compare/16.4.0.rc.8...master
[unreleased]: https://github.com/shakacode/react_on_rails/compare/16.4.0.rc.9...master
[16.4.0.rc.9]: https://github.com/shakacode/react_on_rails/compare/16.4.0.rc.8...16.4.0.rc.9
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Point rc.9 compare link at full collapsed prerelease range

This commit collapses the previous prerelease content into the new 16.4.0.rc.9 section (the section now includes Changes since the last non-beta release.), but the footer link for [16.4.0.rc.9] only compares 16.4.0.rc.8...16.4.0.rc.9; that makes the version link inconsistent with the section content and hides most commits documented in the section when users click through. Update the link target to match the full collapsed range (or keep rc.8 as its own section).

Useful? React with 👍 / 👎.

…tions

The rake task's collapse_prerelease_sections removed section headers but
left behind orphaned compare links at the bottom of CHANGELOG.md.
Added cleanup_collapsed_prerelease_links to remove these links and update
[unreleased] to compare from the last stable version.

Fixes the current CHANGELOG.md which had a stale [16.4.0.rc.8] link.

Co-Authored-By: Claude Opus 4.6 <[email protected]>
@justin808 justin808 changed the title docs: update CHANGELOG for 16.4.0.rc.9 fix: update CHANGELOG for 16.4.0.rc.9 and fix orphaned prerelease link cleanup Mar 13, 2026
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.

🧹 Nitpick comments (1)
react_on_rails/rakelib/update_changelog.rake (1)

203-223: Consider edge case: prerelease links exist but none point to a stable version.

If all prerelease compare links only reference other prereleases (e.g., rc.2 → rc.1 → rc.0 → rc.-1), stable_from will remain nil. The [unreleased] link won't be updated, but prerelease links will still be removed at line 222, potentially leaving [unreleased] pointing to a deleted reference.

This may be acceptable if the release workflow guarantees at least one prerelease always links back to a stable version. If so, consider adding a brief comment documenting this assumption.

💡 Optional: Add a comment documenting the assumption
 # After collapsing prerelease sections, remove their orphaned compare links
 # and update [unreleased] to compare from the last stable version.
+# Assumes at least one prerelease link references a stable version as its "from" point.
 def cleanup_collapsed_prerelease_links(changelog, base_version)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@react_on_rails/rakelib/update_changelog.rake` around lines 203 - 223, The
function cleanup_collapsed_prerelease_links can remove prerelease compare link
lines even when none of those prereleases point back to a stable version
(stable_from remains nil), which can leave the [unreleased] reference dangling;
update the function cleanup_collapsed_prerelease_links to guard against this by
returning the original changelog early when stable_from is nil (i.e., do not
strip prerelease links if we couldn't find a stable_from), and add a short
comment documenting the assumption/intent (mention stable_from and the
[unreleased] replacement) so future maintainers understand why we skip removal
when no stable link is found.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@react_on_rails/rakelib/update_changelog.rake`:
- Around line 203-223: The function cleanup_collapsed_prerelease_links can
remove prerelease compare link lines even when none of those prereleases point
back to a stable version (stable_from remains nil), which can leave the
[unreleased] reference dangling; update the function
cleanup_collapsed_prerelease_links to guard against this by returning the
original changelog early when stable_from is nil (i.e., do not strip prerelease
links if we couldn't find a stable_from), and add a short comment documenting
the assumption/intent (mention stable_from and the [unreleased] replacement) so
future maintainers understand why we skip removal when no stable link is found.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: e38c2970-e2a0-4fd3-9927-38a1b766edf7

📥 Commits

Reviewing files that changed from the base of the PR and between 02943f8 and f32a0fe.

📒 Files selected for processing (3)
  • CHANGELOG.md
  • react_on_rails/rakelib/update_changelog.rake
  • react_on_rails/spec/react_on_rails/update_changelog_rake_helpers_spec.rb
🚧 Files skipped from review as they are similar to previous changes (1)
  • CHANGELOG.md

@justin808 justin808 merged commit 15f6cfc into master Mar 13, 2026
31 checks passed
@justin808 justin808 deleted the jg/update-changelog-unreleased branch March 13, 2026 09:29
@claude
Copy link
Copy Markdown
Contributor

claude Bot commented Mar 13, 2026

Review: fix/changelog-16.4.0.rc.9 - The bug fix and new cleanup_collapsed_prerelease_links function are logically correct and unit tests cover the primary scenarios. Issues: 1) stable_from interpolated into String-sub replacement string at update_changelog.rake line 217 - Ruby treats backslash sequences as back-references, block form is safer. 2) Hardcoded master branch in pattern - silent failure if branch renamed. 3) Integration tests for prepare_changelog_for_auto_version lack compare-link footers so cleanup step is not exercised end-to-end. CHANGELOG: 'Changes since the last non-beta release.' at line 50 is orphaned mid-section after removing the rc.8 header; should be removed or repositioned. Pre-existing: PRs 2489, 2411, 2536 duplicated at lines 62-64 and 95-97, carried over from rc.8. Overall: logic is correct, above are improvements not blockers.

# Update [unreleased] link to compare from the stable version instead of the old prerelease
changelog = changelog.sub(
/^(\[unreleased\]:\s*#{compare_prefix})\S+(\.\.\.master)/i,
"\\1#{stable_from}\\2"
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.

Unsafe replacement string interpolation

stable_from is interpolated directly into a String#sub replacement string. Ruby treats \1, \2, and \\ as special sequences in replacement strings — if stable_from ever contained a backslash followed by a digit (e.g., from a malformed CHANGELOG), the substitution would produce silently wrong output.

Version strings like v16.3.0 are safe in practice, but the block form is more defensive:

Suggested change
"\\1#{stable_from}\\2"
"#{Regexp.last_match(1)}#{stable_from}#{Regexp.last_match(2)}"

if stable_from
# Update [unreleased] link to compare from the stable version instead of the old prerelease
changelog = changelog.sub(
/^(\[unreleased\]:\s*#{compare_prefix})\S+(\.\.\.master)/i,
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.

Hardcoded master branch

\.\.\.master is consistent with the rest of this file, but if the default branch is ever renamed (or this code is reused in a repo with a different default branch), [unreleased] will silently not be updated while orphaned prerelease links are still removed — leaving the changelog in a broken state.

At minimum a comment noting the assumption would help. Alternatively, extract the branch name as a constant or parameter:

Suggested change
/^(\[unreleased\]:\s*#{compare_prefix})\S+(\.\.\.master)/i,
/^(\[unreleased\]:\s*#{compare_prefix})\S+(\.\.\.(?:master|main))/i,

result = cleanup_collapsed_prerelease_links(changelog, "16.4.0")

expect(result).to eq(changelog)
end
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.

Missing integration test for the link-cleanup step in prepare_changelog_for_auto_version

The compute_auto_version / prepare_changelog_for_auto_version integration tests above (lines 202-244) use fixture changelogs without compare-link footers. The new cleanup_collapsed_prerelease_links call in prepare_changelog_for_auto_version therefore runs but has no real effect — it is only exercised by these isolated unit tests.

Consider adding a test (here or in the integration section) where the fixture changelog includes compare links, verifying that after prepare_changelog_for_auto_version the prerelease links are removed and [unreleased] is updated to the stable version.

@coderabbitai coderabbitai Bot mentioned this pull request Mar 15, 2026
2 tasks
justin808 added a commit to shakacode/shakapacker that referenced this pull request Mar 16, 2026
## Summary

Syncs recent improvements from shakacode/react_on_rails (PRs
[#2596](shakacode/react_on_rails#2596),
[#2608](shakacode/react_on_rails#2608),
[#2628](shakacode/react_on_rails#2628)) into the
`/update-changelog` command.

**Changes to `.claude/commands/update-changelog.md`:**

- **Explicit version argument**: `/update-changelog 9.7.0.rc.10` now
stamps the exact version provided, skipping auto-computation
- **Git-tags-only RC index**: RC/beta index computation now uses only
git tags, not changelog headers (headers are drafts, tags are shipped
versions)
- **Ambiguous bump explanation**: Version confirmation step now explains
reasoning when bump type is ambiguous and asks user to confirm/override
- **Tag reconciliation step**: New Step 2 catches missing version
sections by comparing git tags against changelog headers (the #1 source
of errors when skipped)
- **Auto-commit/push/PR**: When stamping versions
(`release`/`rc`/`beta`/explicit), automatically creates branch, commits,
pushes, and opens PR
- **Heading consolidation**: Prerelease collapse now consolidates
duplicate category headings (e.g., two `### Fixed` become one)
- **Orphaned link cleanup**: Prerelease collapse removes leftover
compare links for collapsed prerelease sections
- **v prefix clarity**: Explicit note that compare links must use `v`
prefix to match git tags
- **Header placement rule**: New version header must go immediately
after `## [Unreleased]`

**No changes to `rakelib/release.rake` or `docs/releasing.md`** —
react_on_rails had no changes to those files in the last 3 days.

## Test plan

- [ ] Run `/update-changelog` and verify the new tag reconciliation step
(Step 2) runs before adding entries
- [ ] Run `/update-changelog rc` and verify RC index is computed from
git tags only
- [ ] Run `/update-changelog 9.7.0` and verify explicit version stamps
correctly
- [ ] Run `/update-changelog release` and verify it auto-commits,
pushes, and opens PR

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

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Low Risk**
> Low risk because this PR only updates the
`.claude/commands/update-changelog.md` documentation/workflow guidance
and does not change runtime code paths.
> 
> **Overview**
> Updates the `/update-changelog` command guide to support *explicit
version stamping* and to clarify that RC/beta increments must be derived
**only from git tags** (not draft changelog headers), with improved user
confirmation when version bump type is ambiguous.
> 
> Reworks the process steps to add an upfront **tag-vs-changelog
reconciliation** phase for missing release sections, clarifies
compare-link `v`-prefix requirements and header placement, and expands
prerelease-collapsing rules (merge duplicate category headings, remove
orphaned diff links). When stamping versions
(`release`/`rc`/`beta`/explicit), the guide now instructs auto-creating
a branch, committing, pushing, and opening a PR.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
b116cc2. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **Documentation**
* Added explicit-version option and validation requiring it to be newer
than existing tags.
* Updated 5-step workflow with a reconciliation step that creates/moves
version sections and consolidates prereleases.
* Enforced v-prefix for bottom compare links and expanded
formatting/verification guidance, plus CRITICAL insertion position note.
* **New Features**
* Shows computed version with confirmation prompt, explains ambiguous
bumps, and summarizes actions taken.
  * Optional auto-commit/PR creation limited to CHANGELOG.md.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

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

Syncs recent improvements from shakacode/react_on_rails (PRs
[#2596](shakacode/react_on_rails#2596),
[#2608](shakacode/react_on_rails#2608),
[#2628](shakacode/react_on_rails#2628)) into the
`/update-changelog` command.

**Changes to `.claude/commands/update-changelog.md`:**

- **Explicit version argument**: `/update-changelog 9.7.0.rc.10` now
stamps the exact version provided, skipping auto-computation
- **Git-tags-only RC index**: RC/beta index computation now uses only
git tags, not changelog headers (headers are drafts, tags are shipped
versions)
- **Ambiguous bump explanation**: Version confirmation step now explains
reasoning when bump type is ambiguous and asks user to confirm/override
- **Tag reconciliation step**: New Step 2 catches missing version
sections by comparing git tags against changelog headers (the #1 source
of errors when skipped)
- **Auto-commit/push/PR**: When stamping versions
(`release`/`rc`/`beta`/explicit), automatically creates branch, commits,
pushes, and opens PR
- **Heading consolidation**: Prerelease collapse now consolidates
duplicate category headings (e.g., two `### Fixed` become one)
- **Orphaned link cleanup**: Prerelease collapse removes leftover
compare links for collapsed prerelease sections
- **v prefix clarity**: Explicit note that compare links must use `v`
prefix to match git tags
- **Header placement rule**: New version header must go immediately
after `## [Unreleased]`

**No changes to `rakelib/release.rake` or `docs/releasing.md`** —
react_on_rails had no changes to those files in the last 3 days.

## Test plan

- [ ] Run `/update-changelog` and verify the new tag reconciliation step
(Step 2) runs before adding entries
- [ ] Run `/update-changelog rc` and verify RC index is computed from
git tags only
- [ ] Run `/update-changelog 9.7.0` and verify explicit version stamps
correctly
- [ ] Run `/update-changelog release` and verify it auto-commits,
pushes, and opens PR

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

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Low Risk**
> Low risk because this PR only updates the
`.claude/commands/update-changelog.md` documentation/workflow guidance
and does not change runtime code paths.
> 
> **Overview**
> Updates the `/update-changelog` command guide to support *explicit
version stamping* and to clarify that RC/beta increments must be derived
**only from git tags** (not draft changelog headers), with improved user
confirmation when version bump type is ambiguous.
> 
> Reworks the process steps to add an upfront **tag-vs-changelog
reconciliation** phase for missing release sections, clarifies
compare-link `v`-prefix requirements and header placement, and expands
prerelease-collapsing rules (merge duplicate category headings, remove
orphaned diff links). When stamping versions
(`release`/`rc`/`beta`/explicit), the guide now instructs auto-creating
a branch, committing, pushing, and opening a PR.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
b116cc2. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **Documentation**
* Added explicit-version option and validation requiring it to be newer
than existing tags.
* Updated 5-step workflow with a reconciliation step that creates/moves
version sections and consolidates prereleases.
* Enforced v-prefix for bottom compare links and expanded
formatting/verification guidance, plus CRITICAL insertion position note.
* **New Features**
* Shows computed version with confirmation prompt, explains ambiguous
bumps, and summarizes actions taken.
  * Optional auto-commit/PR creation limited to CHANGELOG.md.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Claude Opus 4.6 <[email protected]>
justin808 added a commit that referenced this pull request Mar 30, 2026
…k cleanup (#2596)

## Summary
- Added missing changelog entries for PRs #2439, #2477, #2554
- Stamped version header for 16.4.0.rc.9 (collapsed rc.8 into rc.9)
- **Fixed rake task bug**: `collapse_prerelease_sections` removed
section headers but left behind orphaned compare links at the bottom of
CHANGELOG.md. Added `cleanup_collapsed_prerelease_links` to remove these
links and update `[unreleased]` to compare from the last stable version.

## Changes
1. **CHANGELOG.md**: New entries + rc.9 stamp + removed orphaned
`[16.4.0.rc.8]` link
2. **update_changelog.rake**: Added `cleanup_collapsed_prerelease_links`
function, called from `prepare_changelog_for_auto_version`
3. **update_changelog_rake_helpers_spec.rb**: 3 new tests covering link
cleanup (multi-prerelease chain, single prerelease, no prereleases)

## Skipped PRs (not user-visible)
- #2593 — test only (lock instrumentation)
- #2591 — test only (Jest clearMocks)
- #2588 — internal refactoring (Thor shell output)
- #2584 — docs restructuring
- #2587 — internal tooling (release script)
- #2589 — docs fix (JWT claim name)
- #2586 — docs/CI (dead link removal)

## Test plan
- [x] All 13 rake helper tests pass (3 new)
- [ ] CI passes
- [ ] After merge, run `rake release` to publish 16.4.0.rc.9

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

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Bug Fixes**
  * Fixed bin/setup failing in pnpm workspace member directories.

* **New Features**
* Added host configuration option for the Node Renderer Fastify worker.

* **Improvements / Changed**
* Automatic installation of react_on_rails_pro enabled for --rsc/--pro
flags.
* Clarified Pro-installation signaling related to immediate hydration
warnings.
* Updated changelog to include RC9 entries and ensure Unreleased links
point to the correct base.

* **Documentation**
* Added startup warning and remediation guidance for unsafe compression
middleware callbacks.

* **Tests**
  * Added tests covering changelog prerelease-link cleanup behavior.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Claude Opus 4.6 <[email protected]>
justin808 added a commit that referenced this pull request Apr 6, 2026
…k cleanup (#2596)

## Summary
- Added missing changelog entries for PRs #2439, #2477, #2554
- Stamped version header for 16.4.0.rc.9 (collapsed rc.8 into rc.9)
- **Fixed rake task bug**: `collapse_prerelease_sections` removed
section headers but left behind orphaned compare links at the bottom of
CHANGELOG.md. Added `cleanup_collapsed_prerelease_links` to remove these
links and update `[unreleased]` to compare from the last stable version.

## Changes
1. **CHANGELOG.md**: New entries + rc.9 stamp + removed orphaned
`[16.4.0.rc.8]` link
2. **update_changelog.rake**: Added `cleanup_collapsed_prerelease_links`
function, called from `prepare_changelog_for_auto_version`
3. **update_changelog_rake_helpers_spec.rb**: 3 new tests covering link
cleanup (multi-prerelease chain, single prerelease, no prereleases)

## Skipped PRs (not user-visible)
- #2593 — test only (lock instrumentation)
- #2591 — test only (Jest clearMocks)
- #2588 — internal refactoring (Thor shell output)
- #2584 — docs restructuring
- #2587 — internal tooling (release script)
- #2589 — docs fix (JWT claim name)
- #2586 — docs/CI (dead link removal)

## Test plan
- [x] All 13 rake helper tests pass (3 new)
- [ ] CI passes
- [ ] After merge, run `rake release` to publish 16.4.0.rc.9

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

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Bug Fixes**
  * Fixed bin/setup failing in pnpm workspace member directories.

* **New Features**
* Added host configuration option for the Node Renderer Fastify worker.

* **Improvements / Changed**
* Automatic installation of react_on_rails_pro enabled for --rsc/--pro
flags.
* Clarified Pro-installation signaling related to immediate hydration
warnings.
* Updated changelog to include RC9 entries and ensure Unreleased links
point to the correct base.

* **Documentation**
* Added startup warning and remediation guidance for unsafe compression
middleware callbacks.

* **Tests**
  * Added tests covering changelog prerelease-link cleanup behavior.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

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