internal/contributor-info/rc-testing-plan.md
Use one public react_on_rails tracking issue per final release target to decide whether the
current release candidate is ready to become the final release. The tracker records every RC
shipped to the hard-gate apps, the smoke evidence from those apps, any discovered regressions,
and the fresh final-version bump PRs after the final release ships.
This plan is contributor-only release process documentation. It lives in
internal/contributor-info/ rather than public docs because it coordinates private release
validation, private app evidence, and maintainer-only go/no-go decisions.
The final release is blocked until every hard gate has passing smoke evidence, green required CI, and no untriaged suspected RC regression.
| Gate | Why It Blocks | Minimum Evidence |
|---|---|---|
react_on_rails generator/install smoke | Replaces the archived manual RSC generator demo with direct generator validation. | Generator specs pass, package build passes, and install smoke from local gems completes or has a filed blocker. |
shakacode/hichee | Private production-like app signal. | High-level public tracker note that install/build/smoke/CI passed, with tester and date. Do not paste private logs, URLs, screenshots, or app details. |
shakacode/react-on-rails-demo-flagship | Flagship Pro + RSC/streaming happy path. | RC bump PR, dependency install, app build/smoke, and CI status. Do not paste private Pro source, install logs, URLs, screenshots, or app details. |
shakacode/react-on-rails-demo-marketplace-rsc | Public Marketplace RSC example. | RC bump PR, dependency install, app build/smoke, and CI status. |
shakacode/react-on-rails-demo-hacker-news-rsc | Public Hacker News RSC example. | RC bump PR, dependency install, app build/smoke, and CI status. |
shakacode/react-on-rails-demo-gumroad-rsc | Public Gumroad RSC example. | RC bump PR, dependency install, app build/smoke, and CI status. |
shakacode/react-webpack-rails-tutorial | Public legacy tutorial reference. | RC bump PR, dependency install, primary tutorial route smoke, and CI status. |
shakacode/react-on-rails-starter-tanstack | Public TanStack Pro + RSC starter example. | RC bump PR, dependency install, starter build/smoke, and CI status. |
Shelved repos are documented so they are remembered, but they do not block the final release and do not require an RC bump unless someone explicitly chooses to work on them.
| Repo | Status | Return-To-Gate Rule |
|---|---|---|
shakacode/react-on-rails-demo-ssr-hmr | Shelved because it is very outdated. Follow-up: shakacode/react-on-rails-demo-ssr-hmr#77. | Modernize setup, dependencies, CI, and SSR/HMR smoke commands; then decide whether to promote it back to hard gate. |
shakacode/react-on-rails-example-migration | Shelved; value for the current final gate is uncertain. | Promote only if migration examples become a stated final-release gate. |
shakacode/react-on-rails-example-open-flights | Shelved; useful reference, but not a current blocker. | Promote only after it has durable smoke coverage and maintainers want migration references to block final. |
shakacode/react-on-rails-demo-v16-bundle-splitting | Shelved; inherited from an older RC spec, not part of the current public-example gate. | Promote only if it becomes a current major example again. |
shakacode/react_on_rails-demo-octochangelog-on-rails-pro | Non-gating for the current plan; useful Pro/RSC signal but not part of the approved public-example hard gate. | Promote only if maintainers want this Pro demo to block final releases again. |
shakacode/react-on-rails-rsc-demo | Retired and archived; it mainly represented a manual generator run. | Do not promote. Validate this surface through react_on_rails generator/install smoke instead. |
Create one tracking issue per final release target, not one issue per RC.
Recommended title:
Release gate: react_on_rails X.Y.Z
The issue stays open from the first RC through final-version bump completion. If there are multiple RCs for the same final release, add a new RC section inside the same issue.
The tracking issue is the single source of truth for:
.github/ISSUE_TEMPLATE/rc-release-tracking.yml.release-verification-runbook.md (upgrade dry-run,
debut-feature abuse pass, stress/soak, changelog and artifact audits) and post each lane
report to the tracking issue.For each hard-gate app PR:
For the react_on_rails generator/install gate:
# Generator specs run in the react_on_rails/ gem bundle (its Gemfile provides Rails).
# Running them from the workspace root fails with `cannot load such file -- rails`,
# because the root workspace bundle does not include Rails.
(cd react_on_rails && bundle exec rspec spec/react_on_rails/generators)
pnpm run build
CREATE_ROR_SMOKE_SCOPE=oss packages/create-react-on-rails-app/scripts/smoke-test-local-gems.sh
If a command fails for an environmental reason, record the failure and file or link a follow-up issue. Do not silently mark the gate as passed.
AI review checks, including Claude, CodeRabbit, Cursor Bugbot, and similar tools, are advisory unless they report a real actionable bug.
Use this rule:
A hard gate can be waived only when the failure is proven unrelated to the RC or final package. The tracker comment must include:
Do not self-certify ambiguous RSC, build, or generator failures. If the failure could plausibly be caused by the RC, treat it as a release blocker until another maintainer agrees it is unrelated.
shakacode/hichee is a private hard gate, and some hard gates consume private Pro source. The
tracker is public. The public tracker may name the repo and record high-level status, but it must
not expose private app or private Pro source details.
Allowed public evidence:
Not allowed in the public tracker:
After the final react_on_rails release ships:
The clean default is two PRs per hard-gate app:
Paste this into each hard-gate app PR body and fill it in as evidence arrives.
## RC Test Report
Tracking issue: shakacode/react_on_rails#<issue-number>
### Versions
- react_on_rails gem:
- react-on-rails npm:
- react_on_rails_pro gem, if used:
- react-on-rails-pro npm, if used:
- shakapacker gem/npm, if changed:
- cpflow, if changed:
### Automated Checks
- [ ] Dependency install passes:
- [ ] Lockfile update is intentional:
- [ ] App build or asset compile passes:
- [ ] Required CI is green:
- [ ] Advisory AI review checks recorded:
### Smoke Evidence
- [ ] Primary route loads:
- [ ] Server-rendered output is present where expected:
- [ ] RSC or client interaction works for this repo's headline feature:
- [ ] Browser console has no new red errors:
- [ ] Any known unrelated failures are linked:
### Result
- [ ] Passed and linked in the release-gate tracker
- [ ] Blocked by suspected RC regression, issue:
- [ ] Waived as unrelated to RC, tracker comment:
Use .github/ISSUE_TEMPLATE/rc-release-tracking.yml to create the release-gate issue. The issue
form intentionally asks for:
The plan is intentionally manual-first. Automation should fill in evidence, not own release policy.
Future automation can:
Automation must not: