Skip to content

Update CHANGELOG for 16.4.0.rc.10#2608

Merged
justin808 merged 20 commits intomasterfrom
jg/changelog-16.4.0.rc.10
Mar 16, 2026
Merged

Update CHANGELOG for 16.4.0.rc.10#2608
justin808 merged 20 commits intomasterfrom
jg/changelog-16.4.0.rc.10

Conversation

@justin808
Copy link
Copy Markdown
Member

@justin808 justin808 commented Mar 15, 2026

Summary

  • Add PR Fix #2549: clean stale webpack config on --rspack install #2597 (clean stale webpack config on --rspack install) to changelog under #### Fixed
  • Stamp 16.4.0.rc.10 version header with today's date
  • Improve /update-changelog skill: auto-commit/push/PR after stamping, ask for confirmation on ambiguous version bumps

Test plan

  • Verify CHANGELOG.md formatting and version links are correct
  • Verify /update-changelog skill reads correctly for future invocations

🤖 Generated with Claude Code


Note

Low Risk
Documentation-only updates to the changelog and the Claude /update-changelog command instructions; no runtime code paths changed.

Overview
Stamps a new ### [16.4.0.rc.10] - 2026-03-14 section in CHANGELOG.md, folding in the --rspack stale config/webpack/ cleanup fix and updating the compare links.

Updates the /update-changelog command docs to (1) require explicit user confirmation when the suggested bump type is ambiguous and (2) switch release/rc/beta mode guidance from manual “commit/push” steps to automatically creating a branch, committing, pushing, and opening a PR after stamping.

Written by Cursor Bugbot for commit 596cc76. Configure here.

Summary by CodeRabbit

  • Bug Fixes

    • Ruby 3.4 heredoc compatibility, pnpm workspace setup guard, SSR error serialization, CSS module SSR behavior, stale webpack cleanup, and private path handling on fresh installs.
  • New Features

    • Explicit version stamping for changelogs (supports .rc/.beta), clearer prerelease/RC/Beta flows, automated changelog PR creation, and consolidation of duplicate changelog headings.
  • Tests

    • Added/updated tests to verify changelog consolidation and ordering.
  • Chores

    • Improved bump confirmation messaging and expanded workflow documentation.

Add PR #2597 (clean stale webpack config on --rspack install) to changelog
and stamp 16.4.0.rc.10 version header.

Also update the /update-changelog skill to:
- Auto-commit, push, and open a PR after stamping a version
- Ask for user confirmation on ambiguous version bumps

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

coderabbitai Bot commented Mar 15, 2026

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

Adds explicit-version support to /update-changelog (accepts semver with optional .rc.N/.beta.N), requires user confirmation when a suggested bump is ambiguous, automates branch/commit/push/PR for release/rc/beta modes, consolidates changelog blocks when collapsing prerelease sections, and adds CHANGELOG entry 16.4.0.rc.10.

Changes

Cohort / File(s) Summary
Changelog command
/.claude/commands/update-changelog.md
Adds explicit-version argument handling (semver with optional .rc.N/.beta.N), documents explicit-version stamping and verification, updates messaging for ambiguous bump suggestions requiring confirmation, and documents automated branch/commit/push/PR flow for release/rc/beta modes.
Rake task / consolidation
react_on_rails/rakelib/update_changelog.rake
Introduces consolidate_changelog_blocks(blocks) and refactors collapse_prerelease_sections to gather Unreleased + prerelease blocks, merge blocks with identical headings while preserving ordering, strip the "Changes since the last non-beta release." marker, and render consolidated Unreleased content.
Tests
react_on_rails/spec/react_on_rails/update_changelog_rake_helpers_spec.rb
Updates test descriptions and expectations to assert heading consolidation; adds cases for nested #### Pro/##### ... ordering, multi-section consolidation, and stripping the marker text.
Changelog
CHANGELOG.md
Adds 16.4.0.rc.10 under Unreleased with multiple Fixed items, removes the previous 16.4.0.rc.9 entry, and updates anchors/section ordering to reflect rc.10.
Docs / Misc
/.claude/*, react_on_rails/*
Minor header/wording and formatting adjustments across documentation and manifest files to reflect explicit-version flow and auto-PR behavior.

Sequence Diagram(s)

sequenceDiagram
  participant User
  participant LocalRepo as Repo
  participant Rake
  participant GitRemote as Remote
  participant GitHub as PR

  User->>Repo: run /update-changelog [explicit-version?]
  alt explicit version provided
    Repo->>Rake: invoke with explicit version (stamp header from provided version)
    Rake-->>Repo: generate changelog diff, verify stamped header and links
  else mode-based or auto
    Repo->>Rake: invoke auto-compute mode
    Rake-->>Repo: compute suggested bump (may be ambiguous)
    Repo->>User: prompt to confirm or override bump (requires justification if ambiguous)
  end
  Repo->>Repo: update CHANGELOG and render consolidated Unreleased (merge identical headings)
  alt release/rc/beta mode (or mode stamping)
    Repo->>Repo: create branch, commit changelog + related files
    Repo->>GitRemote: push branch
    GitRemote->>GitHub: open PR with changelog diff
    GitHub-->>User: PR created (reminder: post-merge release steps)
  end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

Poem

🐰 I hopped through headers, stitched each line,
I stamped rc.10 and made it shine,
I nudged the branch, then gave a cheer,
A little PR appeared — hooray, my dear!
Carrots, tests, and changelog rhyme.

🚥 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 and concisely summarizes the main change: updating the changelog for version 16.4.0.rc.10. It is clear, specific, and directly reflects the primary purpose of the changeset.
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 unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch jg/changelog-16.4.0.rc.10
📝 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.

@greptile-apps
Copy link
Copy Markdown

greptile-apps Bot commented Mar 15, 2026

Greptile Summary

This PR stamps the 16.4.0.rc.10 version header in the CHANGELOG, adds the PR #2597 entry (clean stale webpack config on --rspack install) under #### Fixed, collapses the prior rc.9 section into rc.10 per prerelease conventions, and updates the version comparison links at the bottom of the file. The /update-changelog skill is also improved to auto-commit/push/PR after stamping and to ask for confirmation on ambiguous version bumps.

  • Issue: Missing #### Pro heading — The second #### Pro section (which scoped the ##### Fixed Pro entries like streaming deadlock fixes, HTTPX error handling, etc.) was removed in this diff. These Pro-specific entries now appear as open-source entries, inconsistent with the changelog's own documentation that "Pro-specific changes appear under #### Pro sections."
  • The /update-changelog skill improvements are well-structured and the automation of commit/push/PR creation is a useful workflow enhancement.

Confidence Score: 3/5

  • Documentation-only PR that is safe to merge after restoring the missing #### Pro heading
  • Score of 3 reflects a structural issue in the CHANGELOG: the #### Pro heading was accidentally removed, causing Pro-specific entries to lose their categorization. The skill file changes are clean. No code changes are involved.
  • CHANGELOG.md — missing #### Pro heading before ##### Fixed on line 74

Important Files Changed

Filename Overview
CHANGELOG.md Stamps 16.4.0.rc.10 header, adds PR #2597 entry, and collapses rc.9 section per prerelease convention. However, the #### Pro heading was accidentally removed, causing Pro-specific ##### Fixed entries to lose their Pro attribution.
.claude/commands/update-changelog.md Improves skill instructions: step 5 now explains ambiguous version bumps, and step 5 in finalize now auto-commits/pushes/opens a PR instead of just reminding the user. Clear and well-structured changes.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A["Run /update-changelog rc"] --> B["Analyze commits & PRs since last tag"]
    B --> C["Add new entries under Unreleased"]
    C --> D["Collapse prior rc.9 section into rc.10"]
    D --> E["Stamp 16.4.0.rc.10 header with date"]
    E --> F["Update version comparison links"]
    F --> G["Auto-commit, push, open PR"]
    G --> H["User merges PR & runs rake release"]
Loading

Last reviewed commit: 596cc76

Comment thread CHANGELOG.md Outdated
@claude
Copy link
Copy Markdown
Contributor

claude Bot commented Mar 15, 2026

Review: CHANGELOG + /update-changelog skill update

Documentation-only PR, no runtime impact. A few structural issues worth addressing before merging.

🔴 CHANGELOG structure: rc.9 section removed

The ### [16.4.0.rc.9] - 2026-03-12 header was deleted, which merges all rc.9 items directly into rc.10. As a result there is no way to tell which items were shipped in rc.9 vs. the new rc.10. The typical pattern for RC changelogs is to keep each version's items under its own dated header and only add the net-new work under the new version.

The intent was likely to stamp rc.10 on top of the existing [Unreleased] block, but the rc.9 header should have been preserved to separate the two versions.

🔴 Orphaned ##### Fixed section

By removing the #### Pro sub-heading (line 74 in the merged file), the ##### Fixed block that follows now has no #### Pro parent. In the rendered changelog it appears as a level-5 heading directly beneath a level-4 #### Fixed section — breaking the established #### Pro > ##### <type> hierarchy this file uses throughout.

🟡 Duplicate #### Fixed headings under rc.10

After the merge the rc.10 section contains two #### Fixed headings (lines 30 and 42). The second one was inherited from rc.9. These should either be consolidated, or (preferably) the rc.9 section header should be restored to keep the content separate.

🟡 Hardcoded personal branch prefix in skill instructions

.claude/commands/update-changelog.md now instructs Claude to create branches like `jg/changelog-16.4.0.rc.10` — the jg/ prefix is personal and would be wrong for any other contributor running the skill. A generic prefix (e.g. changelog/) or a dynamic one derived from the git user would be more appropriate.

✅ Positives

Comment thread CHANGELOG.md Outdated
Comment thread CHANGELOG.md Outdated
Comment thread .claude/commands/update-changelog.md Outdated
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: 1

Caution

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

⚠️ Outside diff range comments (1)
CHANGELOG.md (1)

30-44: ⚠️ Potential issue | 🟠 Major

Consolidate duplicate #### Fixed sections.

The release entry for 16.4.0.rc.10 has two separate #### Fixed sections (line 30 and line 42). According to changelog conventions, each section heading should appear only once per release. All bug fix entries should be consolidated under a single #### Fixed heading.

📋 Proposed fix to consolidate Fixed sections

Move the entry from the second #### Fixed section (line 44) up to the first #### Fixed section:

 #### Fixed
 
 - **Ruby 3.4 compatibility for heredocs**: Replaced legacy `strip_heredoc` usage with native squiggly heredocs (`<<~`) and removed redundant chaining where indentation is already normalized by Ruby. [PR 2599](https://github.com/shakacode/react_on_rails/pull/2599) by [justin808](https://github.com/justin808).
 - **Fix install generator load path for `ReactOnRails::GitUtils`**: Added an explicit `require "react_on_rails/git_utils"` so generator execution does not rely on broader app boot side effects for this constant to be available. [PR 2599](https://github.com/shakacode/react_on_rails/pull/2599) by [justin808](https://github.com/justin808).
 - **`server_render_js` now handles non-Error throws safely**: Defensive error serialization now supports thrown primitives and `null` values without raising secondary `TypeError` exceptions while building SSR error payloads. [PR 2599](https://github.com/shakacode/react_on_rails/pull/2599) by [justin808](https://github.com/justin808).
 - **Clean stale webpack config on `--rspack` install**: Running `rails g react_on_rails:install --rspack` now removes leftover `config/webpack/` files when switching from webpack to rspack, preventing Shakapacker deprecation warnings. Only known stock/generated webpack configs are removed; custom files are preserved with a warning. [PR 2597](https://github.com/shakacode/react_on_rails/pull/2597) by [justin808](https://github.com/justin808). Fixes [Issue 2549](https://github.com/shakacode/react_on_rails/issues/2549).
+- **Fixed `bin/setup` failing on pnpm workspace member directories**: `bin/setup` now checks for the presence of `pnpm-lock.yaml` before running `pnpm install --frozen-lockfile`, preventing failures in workspace member directories (e.g., `spec/dummy`) where dependencies are managed by the workspace root. [PR 2477](https://github.com/shakacode/react_on_rails/pull/2477) by [justin808](https://github.com/justin808).
 
 #### Improved
 
 - **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
-
-- **Fixed `bin/setup` failing on pnpm workspace member directories**: `bin/setup` now checks for the presence of `pnpm-lock.yaml` before running `pnpm install --frozen-lockfile`, preventing failures in workspace member directories (e.g., `spec/dummy`) where dependencies are managed by the workspace root. [PR 2477](https://github.com/shakacode/react_on_rails/pull/2477) by [justin808](https://github.com/justin808).
-
 #### Changed
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@CHANGELOG.md` around lines 30 - 44, The CHANGELOG for release 16.4.0.rc.10
has two separate "#### Fixed" headings; consolidate them by moving the "Fixed
`bin/setup` failing on pnpm workspace member directories" bullet into the first
"#### Fixed" section (which already contains the Ruby heredoc, GitUtils require,
server_render_js, and Clean stale webpack config bullets) and remove the
duplicate second "#### Fixed" heading so there is a single "#### Fixed" heading
for that release.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@CHANGELOG.md`:
- Line 28: The release header for version "16.4.0.rc.10" in CHANGELOG.md
currently shows "2026-03-14" but should match the PR's intended stamp date;
update the date in the version header line "### [16.4.0.rc.10] - 2026-03-14" to
the correct date (e.g., "2026-03-15") so the header matches the PR description
and creation date.

---

Outside diff comments:
In `@CHANGELOG.md`:
- Around line 30-44: The CHANGELOG for release 16.4.0.rc.10 has two separate
"#### Fixed" headings; consolidate them by moving the "Fixed `bin/setup` failing
on pnpm workspace member directories" bullet into the first "#### Fixed" section
(which already contains the Ruby heredoc, GitUtils require, server_render_js,
and Clean stale webpack config bullets) and remove the duplicate second "####
Fixed" heading so there is a single "#### Fixed" heading for that release.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

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

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 1cf746e3-3a38-401a-9fc3-a31d0bf3fa68

📥 Commits

Reviewing files that changed from the base of the PR and between 46ea7f9 and 596cc76.

📒 Files selected for processing (2)
  • .claude/commands/update-changelog.md
  • CHANGELOG.md

Comment thread CHANGELOG.md Outdated
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: 596cc76ef0

ℹ️ 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
e.g., `/update-changelog 16.5.0.rc.10` stamps that exact version
instead of auto-computing. Infers the mode (rc/beta/release) from
the version string.

Co-Authored-By: Claude Opus 4.6 <[email protected]>
Comment thread CHANGELOG.md
justin808 and others added 2 commits March 14, 2026 19:33
The rake task's RC collapsing logic removed the #### Pro header
while keeping its ##### sub-headings, leaving orphaned h5 entries.

Co-Authored-By: Claude Opus 4.6 <[email protected]>
Merged the second #### Fixed section (bin/setup pnpm entry from rc.9)
into the first, so each heading appears only once per release.

Co-Authored-By: Claude Opus 4.6 <[email protected]>
Comment thread CHANGELOG.md
Comment thread .claude/commands/update-changelog.md Outdated
Comment thread .claude/commands/update-changelog.md Outdated
@claude
Copy link
Copy Markdown
Contributor

claude Bot commented Mar 15, 2026

Review Summary

Overall: Documentation-only PR, low risk. The CHANGELOG update and skill improvements are straightforward, but there are three issues worth addressing before merge.

Issues Found

1. Duplicate #### Fixed sections in CHANGELOG.md (bug)
When collapsing 16.4.0.rc.9 into 16.4.0.rc.10, the section header was removed but its content wasn't reorganized. The result is two #### Fixed headings inside the same [16.4.0.rc.10] release block — the PR 2477 fix entry ends up stranded in a second Fixed section after #### Improved. That entry should be merged into the first Fixed block. (Inline comment on line 42.)

2. Hardcoded personal branch prefix in skill docs
The new auto-commit step uses jg/changelog-... as the example branch name. This will confuse or mislead anyone who isn't Justin Gordon. Suggest using a generic prefix like update/changelog-.... (Inline comment on line 328.)

3. Explicit-version flow is roundabout
When the user passes an explicit version string, the instructions still tell Claude to run the rake task (which auto-computes) and then manually fix the result if it differs. Since the whole point of passing an explicit version is to skip auto-computation, the cleaner path is to insert the header and update the diff links directly. (Inline comment on line 308.)

Comment thread .claude/commands/update-changelog.md Outdated
Comment thread .claude/commands/update-changelog.md Outdated
@claude
Copy link
Copy Markdown
Contributor

claude Bot commented Mar 15, 2026

Review Notes

Overall this is a clean documentation-only PR with two minor issues worth addressing.

CHANGELOG.md

The RC-collapse approach (merging rc.9 entries into rc.10 and pointing the diff link from v16.3.0) is consistent with the documented skill behaviour — no issues there.

One pre-existing structural artifact surfaced during the collapse: line 54 contains floating prose (Changes since the last non-beta release.) that sits between the #### Pro sub-section and the next #### Added heading. This wasn't introduced by this PR, but it's worth cleaning up in a follow-on since it breaks the visual hierarchy of the rc.10 section.

.claude/commands/update-changelog.md

Two issues called out inline:

  1. Explicit version flow still runs the auto-compute rake task (lines 302–308) — runs the task then patches the result if it differs, which is the opposite of what "explicit version" implies. Suggested skipping the rake task and writing the header/links directly.

  2. Hardcoded jg/ branch prefix (line 328) — will mislead any contributor other than Justin. Suggested changelog/ as a neutral convention.

Neither blocker; the CHANGELOG content itself looks correct.

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: 1

🧹 Nitpick comments (1)
.claude/commands/update-changelog.md (1)

327-329: Use the repo branch naming convention in the example.

The example branch jg/changelog-16.4.0.rc.10 does not follow the documented type/descriptive-name convention. Prefer something like chore/changelog-16.4.0.rc.10 (or docs/... if that’s the repo’s chosen type taxonomy). Based on learnings: Use branch naming convention type/descriptive-name (e.g., fix/ssr-hydration-mismatch).

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.claude/commands/update-changelog.md around lines 327 - 329, Update the
example branch name to follow the repo branch naming convention
`type/descriptive-name`; replace `jg/changelog-16.4.0.rc.10` with a name like
`chore/changelog-16.4.0.rc.10` (or `docs/changelog-16.4.0.rc.10` if docs is
preferred) in the step that says "Create a feature branch (e.g., ...)" so the
example demonstrates the documented `type/descriptive-name` pattern.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.claude/commands/update-changelog.md:
- Around line 295-309: Update the explicit-version docs to call the existing
rake task with the user-provided version string instead of inferring a mode;
replace the instruction that runs bundle exec rake
"update_changelog[rc|beta|release]" with a command that passes the explicit
version (e.g., bundle exec rake "update_changelog[16.5.0.rc.10]") and change the
verification step to confirm the stamped header and diff links match the
requested version; reference the rake task name update_changelog and its
mode_or_tag parameter when editing the text.

---

Nitpick comments:
In @.claude/commands/update-changelog.md:
- Around line 327-329: Update the example branch name to follow the repo branch
naming convention `type/descriptive-name`; replace `jg/changelog-16.4.0.rc.10`
with a name like `chore/changelog-16.4.0.rc.10` (or
`docs/changelog-16.4.0.rc.10` if docs is preferred) in the step that says
"Create a feature branch (e.g., ...)" so the example demonstrates the documented
`type/descriptive-name` pattern.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

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

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: a916274a-ebd5-45cc-9a58-5905fe463704

📥 Commits

Reviewing files that changed from the base of the PR and between 596cc76 and c5fb009.

📒 Files selected for processing (2)
  • .claude/commands/update-changelog.md
  • CHANGELOG.md
🚧 Files skipped from review as they are similar to previous changes (1)
  • CHANGELOG.md

Comment thread .claude/commands/update-changelog.md
Comment thread .claude/commands/update-changelog.md
Comment thread .claude/commands/update-changelog.md Outdated
@claude
Copy link
Copy Markdown
Contributor

claude Bot commented Mar 15, 2026

Review of PR 2608 — Update CHANGELOG for 16.4.0.rc.10

Overall this is a clean documentation-only PR. Two minor issues in the skill doc and one structural issue in CHANGELOG.md worth addressing before merge.

CHANGELOG.md — duplicate Fixed sections within rc.10

The 16.4.0.rc.10 block currently has two separate #### Fixed headings (lines 30 and 42 of the post-merge file):

  • Line 30: Fixed block with Ruby 3.4, install generator, server_render_js, rspack entries
  • Line 37: Improved block
  • Line 42: A second Fixed block with the bin/setup / pnpm entry (PR 2477)
  • Line 46: Changed block

Having Fixed -> Improved -> Fixed within one version block is non-standard and will confuse readers scanning the changelog. The bin/setup entry should be merged up into the first Fixed block. Since that entry was reorganized as part of this PR's move away from rc.9, this is the right time to fold it in.

update-changelog.md — two nits (inline comments already filed)

  1. Explicit-version path is fragile (line 308): Running bundle exec rake update_changelog[rc] and then manually patching the header if the auto-computed version differs from the requested one is error-prone. The diff links at the bottom of CHANGELOG.md are easy to get wrong in a manual fixup. Consider passing the explicit version directly to the rake task, or skipping rake altogether and doing a targeted string substitution for explicit versions.

  2. Hardcoded branch name prefix (line 334): The example jg/changelog-16.4.0.rc.10 uses Justin's initials. When any other contributor or an unattended Claude run uses this command, it will produce branches with the wrong prefix. Use a generic template like changelog/16.4.0.rc.10 instead.

The rake task's collapse_prerelease_sections used .uniq on flat blocks,
which deduplicated header-only blocks like "#### Pro" and left duplicate
"#### Fixed" sections when the same heading appeared in both Unreleased
and the collapsed RC section.

Replace .uniq + simple append with consolidate_changelog_blocks, which
merges blocks sharing the same heading while preserving structural
parent headers. Also strips the "Changes since the last non-beta
release." marker text during consolidation.

Co-Authored-By: Claude Opus 4.6 <[email protected]>
Comment thread .claude/commands/update-changelog.md Outdated
Comment thread react_on_rails/rakelib/update_changelog.rake
Comment thread react_on_rails/rakelib/update_changelog.rake
@claude
Copy link
Copy Markdown
Contributor

claude Bot commented Mar 15, 2026

Review Summary

Overall this is a clean, low-risk PR — changelog stamping + tooling improvements. Three issues worth addressing:

Bug: stray marker text in CHANGELOG.md (line ~54)

Changes since the last non-beta release. still appears inside the [16.4.0.rc.10] section body. This is an internal processing marker that consolidate_changelog_blocks strips during a full prerelease collapse, but it was already present in the rc.9 section body and was carried forward when rc.9 was renamed/stamped as rc.10. It should be manually removed before merge — it will appear verbatim in the published changelog.

#### Added section sits outside #### Pro hierarchy

Immediately after the stray marker, there is an #### Added block (lines ~56–62) that contains Pro-specific features. Structurally these entries should either be under ##### Added inside #### Pro, or the #### Pro block should follow the top-level #### Added. The current layout makes the Pro entries look like OSS-level additions.

Inline comments posted

  • .claude/commands/update-changelog.md line 328 — hardcoded jg/ branch prefix should be generic.
  • update_changelog.rake line 274 — merged content separator (\n vs \n\n) for duplicate headings.
  • update_changelog.rake line 300 — note on the subtle merge-order change (Unreleased blocks now prepended rather than appended).

@claude
Copy link
Copy Markdown
Contributor

claude Bot commented Mar 15, 2026

Review: CHANGELOG restructuring for 16.4.0.rc.10

Overall this is a clean and well-organized consolidation — collapsing rc.9 into rc.10, converting #### Pro sub-sections to inline **[Pro]** tags, and adding PR 2597. The formatting is consistent and the context note added to 16.2.0 is a useful historical signpost.

Three issues found:

Comment thread CHANGELOG.md
[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/v16.3.0...16.4.0.rc.9
[unreleased]: https://github.com/shakacode/react_on_rails/compare/16.4.0.rc.10...master
[16.4.0.rc.10]: https://github.com/shakacode/react_on_rails/compare/v16.3.0...16.4.0.rc.10
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 compare base here is v16.3.0, but 16.4.0 stable was already released on 2026-03-10. This RC sits on top of that stable release, so the base should be v16.4.0. With the current URL, the GitHub diff view will include the entire 16.4.0 release history, duplicating it.

Suggested change
[16.4.0.rc.10]: https://github.com/shakacode/react_on_rails/compare/v16.3.0...16.4.0.rc.10
[16.4.0.rc.10]: https://github.com/shakacode/react_on_rails/compare/v16.4.0...16.4.0.rc.10

Comment thread CHANGELOG.md
[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/v16.3.0...16.4.0.rc.9
[unreleased]: https://github.com/shakacode/react_on_rails/compare/16.4.0.rc.10...master
[16.4.0.rc.10]: https://github.com/shakacode/react_on_rails/compare/v16.3.0...16.4.0.rc.10
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 16.4.0 stable release is present in the changelog body but has no corresponding compare link entry — the links jump from [16.4.0.rc.10] straight to [16.3.0]. A [16.4.0] link should be added here:

Suggested change
[16.4.0.rc.10]: https://github.com/shakacode/react_on_rails/compare/v16.3.0...16.4.0.rc.10
[16.4.0.rc.10]: https://github.com/shakacode/react_on_rails/compare/v16.4.0...16.4.0.rc.10
[16.4.0]: https://github.com/shakacode/react_on_rails/compare/v16.3.0...v16.4.0

Comment thread CHANGELOG.md Outdated
- **[Pro]** **TanStack Router SSR integration**: Added `createTanStackRouterRenderFunction` and `serverRenderTanStackAppAsync` via `react-on-rails-pro/tanstack-router` for TanStack Router SSR with the Pro Node Renderer. Uses TanStack Router's public `router.load()` API for reliable async SSR. Requires `rendering_returns_promises = true` in Pro config. [PR 2516](https://github.com/shakacode/react_on_rails/pull/2516) by [justin808](https://github.com/justin808).
- **`create-react-on-rails-app --rsc` flow**: Added `--rsc` support to `npx create-react-on-rails-app` so a single command can scaffold an RSC-ready app. The CLI now installs `react_on_rails_pro`, passes `--rsc` to `react_on_rails:install`, and points users to `/hello_server` after setup. [PR 2430](https://github.com/shakacode/react_on_rails/pull/2430) by [justin808](https://github.com/justin808).
- **Environment-variable-driven ports in Procfile templates**: Procfile templates now use `${PORT:-3000}` and `${SHAKAPACKER_DEV_SERVER_PORT:-3035}` instead of hardcoded ports, enabling multiple worktrees to run `bin/dev` concurrently without port conflicts. Includes a `PortSelector` that auto-detects free ports when defaults are occupied, plus a generated `.env.example` documenting manual overrides. [PR 2539](https://github.com/shakacode/react_on_rails/pull/2539) by [ihabadham](https://github.com/ihabadham).
- **CSP nonce support for RSC streaming and console replay scripts**: Added `cspNonce` to `rails_context` and threaded nonce values through Pro RSC streaming paths (server-side HTML stream injection and client-side console replay script insertion), with nonce sanitization. [PR 2418](https://github.com/shakacode/react_on_rails/pull/2418) by [justin808](https://github.com/justin808).
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 entry describes Pro-specific functionality ("threaded nonce values through Pro RSC streaming paths"). The immediately related entry at line 50 (CSP nonce for immediate hydration scripts, PR 2398) correctly carries **[Pro]**. This one should too.

Suggested change
- **CSP nonce support for RSC streaming and console replay scripts**: Added `cspNonce` to `rails_context` and threaded nonce values through Pro RSC streaming paths (server-side HTML stream injection and client-side console replay script insertion), with nonce sanitization. [PR 2418](https://github.com/shakacode/react_on_rails/pull/2418) by [justin808](https://github.com/justin808).
- **[Pro]** **CSP nonce support for RSC streaming and console replay scripts**: Added `cspNonce` to `rails_context` and threaded nonce values through Pro RSC streaming paths (server-side HTML stream injection and client-side console replay script insertion), with nonce sanitization. [PR 2418](https://github.com/shakacode/react_on_rails/pull/2418) by [justin808](https://github.com/justin808).

Prevent destructive git operations (force-push, reset --hard) that
can destroy prior work on branches. Recommend worktrees or new
branches for isolated testing instead.

Co-Authored-By: Claude Opus 4.6 <[email protected]>
@justin808 justin808 force-pushed the jg/changelog-16.4.0.rc.10 branch from 53c6e2d to 5e3f581 Compare March 16, 2026 00:03
….rc.10

* origin/master:
  Fix #2600: show incomplete install message after shakapacker failure (#2613)
  Add Pro vs OSS feature comparison table to README and docs (#2623)
  Normalize Pro Gemfile.lock platforms (#2624)
Comment thread CHANGELOG.md
- **[Pro]** **Fixed RSC stream tee backpressure deadlock for large payloads**. Replaced `pipe()`-based stream teeing with manual `on('data')` + `push()` forwarding to prevent deadlocks when RSC payloads exceed the 32KB default highWaterMark buffer, which caused the stream to hang indefinitely. [PR 2444](https://github.com/shakacode/react_on_rails/pull/2444) by [AbanoubGhadban](https://github.com/AbanoubGhadban).

##### Added
#### Improved
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 16.4.0.rc.9 section has a duplicate #### Improved heading. PR 2439 and PR 2571 both appear here and at lines 40-41 (the earlier #### Improved block), so they're listed twice in the same version section.

Similarly, #### Changed appears twice in 16.4.0.rc.9 — once above #### Fixed (PR 2482) and again below it (PR 2590). Those two entries should be under a single #### Changed heading.

The consolidate_changelog_blocks helper in the rake task deduplicates these during RC collapses, but the 16.4.0.rc.9 section is already stamped so it won't be collapsed again. The duplicates need to be fixed manually here:

  • Remove lines 84-88 (the second #### Improved block) and append the unique entry (PR 2354) to the first #### Improved block at line 38.
  • Merge the second #### Changed entry (PR 2590) into the first #### Changed block at line 43.

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: 5e3f581eea

ℹ️ 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".

entries << current_entry if current_entry
current_entry = nil
pending_subheading << line
elsif line.match?(/\A\s*- /)
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 Keep nested bullet lines attached during PR deduplication

This parser treats any indented - line as a new entry, so nested bullets are split away from their parent item before PR-based deduplication runs. In a collapsed prerelease where the same PR appears twice with sub-bullets, deduplication drops one parent bullet but keeps both detached nested lines, which leaves duplicated/orphaned details in the final changelog text. Limiting new-entry detection to top-level bullets avoids corrupting multi-line entries.

Useful? React with 👍 / 👎.

@claude
Copy link
Copy Markdown
Contributor

claude Bot commented Mar 16, 2026

Review Notes

CHANGELOG.md — duplicate entries in 16.4.0.rc.9

The 16.4.0.rc.9 section has two #### Improved headings and two #### Changed headings:

  • #### Improved appears twice: PR 2439 and PR 2571 are listed under the first occurrence (around lines 40-41) and again under the second (around lines 86-87). PR 2354 ("Smarter duplicate registration warnings") is only in the second block and should be the sole new entry there.
  • #### Changed appears twice: PR 2482 is under the first heading, PR 2590 under the second. They should be consolidated under one heading.

The consolidate_changelog_blocks helper introduced in this PR would catch these on a future RC collapse, but 16.4.0.rc.9 is already a stamped section so it won't be collapsed again. These duplicates need a manual fix before tagging a stable release.


update_changelog.rake — two non-critical observations (not in the diff, FYI only)

  1. Silent failure in update_changelog_links (around line 505): The function returns nil if it cannot find the [unreleased] compare link, but the call-site ignores the return value. A missing or malformed [unreleased] link causes the task to write the changelog without updating version diff links, with no warning. A simple warn on nil return would improve debuggability.

  2. Hardcoded master branch (around lines 216 and 421): Both cleanup_collapsed_prerelease_links and update_changelog_links match ...master literally. Consistent with the existing CHANGELOG.md links, but a shared constant would make a future main migration a one-line change.


consolidate_changelog_blocks and deduplicate_block_entries — looks good

The new consolidation and deduplication logic is well-structured and thoroughly tested. The handling of #### Pro header-only blocks, emoji normalization in heading keys, and the pending-subheading accumulator for sub-sections are all correct and well-covered by the new specs.

The rake task was computing rc.11 instead of rc.10 because it used
changelog headers (which are drafts) in addition to git tags (which
represent shipped versions) to determine the next prerelease index.
Since rc.10 was never tagged/released, only the rc.9 tag should count.

Two fixes to update_changelog.rake:
- compute_auto_version now uses only git tags for the next RC index
- deduplicate_block_entries now deduplicates by full entry text instead
  of PR number, preserving distinct entries from the same PR

Also adds PR 2613 (incomplete install message) and collapses rc.9+rc.10
into rc.10 in the CHANGELOG.

Co-Authored-By: Claude Opus 4.6 <[email protected]>
# rubocop:enable Metrics/AbcSize

def compute_auto_version(changelog, mode, monorepo_root, changelog_for_bump: changelog)
def compute_auto_version(changelog_for_bump, mode, monorepo_root)
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.

Bug: existing spec tests will now fail with ArgumentError.

This PR simplifies the signature from:

def compute_auto_version(changelog, mode, monorepo_root, changelog_for_bump: changelog)

to the current 3-positional-arg form. However, two pre-existing spec tests in update_changelog_rake_helpers_spec.rb still call with the old signature:

# spec line ~451
version = compute_auto_version(changelog, "release", repo_dir, changelog_for_bump: prepared_changelog)
# spec line ~473
version = compute_auto_version(changelog, "rc", repo_dir, changelog_for_bump: prepared_changelog)

These calls will raise ArgumentError: wrong number of arguments (given 4, expected 3) with the new signature. The spec tests need to be updated to pass prepared_changelog as the first positional argument:

version = compute_auto_version(prepared_changelog, "release", repo_dir)
version = compute_auto_version(prepared_changelog, "rc", repo_dir)

Note the semantic difference: the old code used changelog (original) as position-1 and prepared_changelog as the keyword, while the new code expects prepared_changelog as position-1. The tests should also drop the assertion expect(prepared_changelog).not_to include("### [16.4.0.rc.1]") from the release test since that checks prepare_changelog_for_auto_version behavior, not compute_auto_version.

@claude
Copy link
Copy Markdown
Contributor

claude Bot commented Mar 16, 2026

Review posted inline. See discussion_r2937677113 for the main finding (spec ArgumentError). Summary: 3 issues found: (1) Critical - existing compute_auto_version spec tests use the old 4-arg signature that was removed in this PR and will raise ArgumentError; (2) Dead code - prerelease_indices_from_changelog is defined but no longer called; (3) Silent failure - update_changelog_links returns nil silently when compare links pattern not found.

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: 6289bf754c

ℹ️ 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".

# rubocop:enable Metrics/AbcSize

def compute_auto_version(changelog, mode, monorepo_root, changelog_for_bump: changelog)
def compute_auto_version(changelog_for_bump, mode, monorepo_root)
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Keep compute_auto_version call signature compatible

Changing compute_auto_version to accept only three positional arguments breaks existing callers that still pass the prior keyword form (changelog_for_bump:), which now raises ArgumentError: wrong number of arguments (given 4, expected 3). In this repo, react_on_rails/spec/react_on_rails/update_changelog_rake_helpers_spec.rb still uses the old call shape (lines 451 and 473), so the helper spec suite will fail until the call contract is made backward-compatible or all callers are updated together.

Useful? React with 👍 / 👎.

Keep compute_auto_version backward compatible for keyword callers and ensure nested bullet lines stay attached to their parent entries when deduplicating changelog blocks. Update helper specs to reflect tag-driven prerelease indexing and add regression coverage for nested bullets.
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: 2c60556dc4

ℹ️ 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 on lines +279 to +281
heading_key = normalize_heading_key(heading_match[1])

if heading_indices.key?(heading_key)
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 Include parent context when deduplicating heading blocks

consolidate_changelog_blocks keys duplicates only by the heading text/level, so ##### Fixed blocks from different parent sections are merged even when they belong under separate #### headers. In a collapsed prerelease where Unreleased already has #### Pro + ##### Added, and another section has #### Pro + ##### Fixed plus an intervening #### Fixed, this logic emits ##### Fixed after #### Fixed (orphaned from #### Pro), which misclassifies Pro notes and corrupts changelog structure.

Useful? React with 👍 / 👎.

@justin808 justin808 merged commit 97f4625 into master Mar 16, 2026
35 of 36 checks passed
@justin808 justin808 deleted the jg/changelog-16.4.0.rc.10 branch March 16, 2026 01:21
# Append this block's content (lines after heading) to existing block
idx = heading_indices[heading_key]
content_after_heading = cleaned.lines.drop(1).join.gsub(/\A\n+/, "").rstrip
consolidated[idx] = "#{consolidated[idx].rstrip}\n#{content_after_heading}" unless content_after_heading.empty?
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.

Minor observation: the rstrip call here means a block that ends with a blank line will lose that trailing blank. That's typically harmless for changelog text, but worth noting in case the formatting of some blocks depends on trailing whitespace. The unless content_after_heading.empty? guard is correct — it prevents appending empty strings to header-only blocks like #### Pro.

# Only use git tags to determine the next prerelease index.
# Changelog headers are drafts that may not have been released yet —
# git tags are the authoritative source of shipped versions.
indices = prerelease_indices_from_tags(monorepo_root, base_version, mode)
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 removal of prerelease_indices_from_changelog from the index computation is the right call — changelog headers are drafts, git tags are authoritative.

One side effect: prerelease_indices_from_changelog (defined at line 126) is now dead code. No callers remain after this change. It should be removed to avoid confusing future readers into thinking changelog headers are still consulted for RC index computation.

def compute_auto_version(changelog, mode, monorepo_root, changelog_for_bump: nil)
# Keep backward compatibility with older callers that pass changelog_for_bump
# as a keyword while allowing the new 3-argument call shape.
changelog_for_bump ||= changelog
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 backward-compatibility shim (changelog_for_bump ||= changelog) keeping the old keyword-arg call shape is necessary for the compute_auto_version test that passes changelog_for_bump: explicitly. That said, changelog_for_bump is only needed because the rake task prepares a different changelog for bump-type inference (with prerelease sections collapsed) vs the one passed to the version computation. If the rake task path (line ~476-478) always passes the prepared changelog as changelog, the two arguments collapse into one. Worth considering for a future cleanup if the call sites stabilize.

# Deduplicate by full entry text (keep first occurrence).
# This preserves distinct entries that share the same PR number.
seen_texts = {}
unique_entries = entries.select do |entry|
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.

Deduplication keyed on entry.strip (full text equality) is intentional — the comment above correctly explains it preserves distinct entries that share a PR number. One edge case worth being aware of: if the same fix is described with slightly different wording across two RC sections (human-edited), it won't be deduplicated. That's probably the desired behavior, but it means the deduplication is purely mechanical and doesn't catch semantic duplicates. The existing tests cover the identity-equality cases well.

@claude
Copy link
Copy Markdown
Contributor

claude Bot commented Mar 16, 2026

Review: PR #2608 — Update CHANGELOG for 16.4.0.rc.10

Overall this is well-executed. The changelog entries are complete and correctly formatted, the #### Pro section refactoring is consistent across AGENTS.md / CLAUDE.md / changelog-guidelines.md, and the rake file additions are well-tested (the spec covers heading consolidation, deduplication, Pro sub-section ordering, and emoji-variant normalization).

Main finding: dead code in update_changelog.rake

prerelease_indices_from_changelog (line 126) is now dead code. It was removed from compute_auto_version by this PR (see inline comment on line 412) and has no remaining callers. Leaving it in place creates confusion — readers may wonder if changelog headers are still consulted for RC index computation. The function should be deleted.

Pre-existing issues (out of scope for this PR, but worth tracking)

Two pre-existing patterns in the rake file that could trip up future contributors:

  1. rescue SystemExit in parse_release_tag_to_version (line 45-46): normalize_version_string calls abort to signal invalid input, and parse_release_tag_to_version rescues the resulting SystemExit to return nil. Using exception-for-control-flow via abort/SystemExit is surprising and makes the nil-return path easy to miss. A simple refactor would extract a valid_version_string? predicate and have the tag parser call that directly.

  2. Hardcoded master branch in update_changelog_links and cleanup_collapsed_prerelease_links: the compare-link pattern and replacement both hardcode ...master. This is consistent with the current CHANGELOG.md content, so no immediate breakage, but worth abstracting into a constant if branch naming ever changes.

Minor positives

  • The explicit-version mode doc and the corresponding rake task path are nicely symmetric.
  • Auto-commit/push/PR in Step 5 is a good workflow improvement; the failure fallback note is appropriately defensive.
  • The test for fetch_git_tags! using a real bare git repo (rather than mocking Open3) is the right call — it validates the actual shell commands.

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
## Summary

- **Add PR #2597** (clean stale webpack config on `--rspack` install) to
changelog under `#### Fixed`
- **Stamp `16.4.0.rc.10`** version header with today's date
- **Improve `/update-changelog` skill**: auto-commit/push/PR after
stamping, ask for confirmation on ambiguous version bumps

## Test plan

- [ ] Verify CHANGELOG.md formatting and version links are correct
- [ ] Verify `/update-changelog` skill reads correctly for future
invocations

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

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Low Risk**
> Documentation-only updates to the changelog and the Claude
`/update-changelog` command instructions; no runtime code paths changed.
> 
> **Overview**
> Stamps a new `### [16.4.0.rc.10] - 2026-03-14` section in
`CHANGELOG.md`, folding in the `--rspack` stale `config/webpack/`
cleanup fix and updating the compare links.
> 
> Updates the `/update-changelog` command docs to (1) require explicit
user confirmation when the suggested bump type is ambiguous and (2)
switch release/rc/beta mode guidance from manual “commit/push” steps to
**automatically creating a branch, committing, pushing, and opening a
PR** after stamping.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
596cc76. 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

* **Bug Fixes**
* Ruby 3.4 heredoc compatibility, pnpm workspace setup guard, SSR error
serialization, CSS module SSR behavior, stale webpack cleanup, and
private path handling on fresh installs.

* **New Features**
* Explicit version stamping for changelogs (supports .rc/.beta), clearer
prerelease/RC/Beta flows, automated changelog PR creation, and
consolidation of duplicate changelog headings.

* **Tests**
  * Added/updated tests to verify changelog consolidation and ordering.

* **Chores**
* Improved bump confirmation messaging and expanded workflow
documentation.
<!-- 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
## Summary

- **Add PR #2597** (clean stale webpack config on `--rspack` install) to
changelog under `#### Fixed`
- **Stamp `16.4.0.rc.10`** version header with today's date
- **Improve `/update-changelog` skill**: auto-commit/push/PR after
stamping, ask for confirmation on ambiguous version bumps

## Test plan

- [ ] Verify CHANGELOG.md formatting and version links are correct
- [ ] Verify `/update-changelog` skill reads correctly for future
invocations

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

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Low Risk**
> Documentation-only updates to the changelog and the Claude
`/update-changelog` command instructions; no runtime code paths changed.
> 
> **Overview**
> Stamps a new `### [16.4.0.rc.10] - 2026-03-14` section in
`CHANGELOG.md`, folding in the `--rspack` stale `config/webpack/`
cleanup fix and updating the compare links.
> 
> Updates the `/update-changelog` command docs to (1) require explicit
user confirmation when the suggested bump type is ambiguous and (2)
switch release/rc/beta mode guidance from manual “commit/push” steps to
**automatically creating a branch, committing, pushing, and opening a
PR** after stamping.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
596cc76. 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

* **Bug Fixes**
* Ruby 3.4 heredoc compatibility, pnpm workspace setup guard, SSR error
serialization, CSS module SSR behavior, stale webpack cleanup, and
private path handling on fresh installs.

* **New Features**
* Explicit version stamping for changelogs (supports .rc/.beta), clearer
prerelease/RC/Beta flows, automated changelog PR creation, and
consolidation of duplicate changelog headings.

* **Tests**
  * Added/updated tests to verify changelog consolidation and ordering.

* **Chores**
* Improved bump confirmation messaging and expanded workflow
documentation.
<!-- 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