Commit 33c0ccc
authored
[codex] Add ShakaPerf RSC FOUC release gate (#3617)
## Summary
Adds a ShakaPerf-backed release gate for the React Server Components
FOUC regression case. The gate boots the Pro dummy app in GitHub
Actions, runs the node renderer and Rails server, then checks the RSC
page with ShakaPerf visual-regression tests.
The ShakaPerf test asserts two things that are intended to catch the
flash-of-unstyled-content class of regression directly:
- the RSC stylesheet link is present before hydration when client JS is
blocked
- the first visible RSC CSS probe is already styled, including the
expected computed background color
The workflow uploads ShakaPerf reports and server logs as artifacts for
release-gate debugging.
## Validation
- `pnpm install --frozen-lockfile`
- `pnpm exec shaka-perf --version`
- `pnpm exec prettier --check package.json pnpm-lock.yaml
.github/workflows/shakaperf-release-gates.yml
test/shakaperf/rsc-fouc/README.md
test/shakaperf/rsc-fouc/abtests.config.ts
test/shakaperf/rsc-fouc/ab-tests/rsc-fouc-release-gate.abtest.ts`
- `actionlint .github/workflows/shakaperf-release-gates.yml`
- ShakaPerf positive fixture run: both FOUC checks passed and generated
report artifacts
- ShakaPerf negative fixture run: intentionally delayed the RSC
stylesheet; ShakaPerf failed on missing first-paint stylesheet and
unstyled first-visible probe
- Autoreview: clean after fixes
- Pre-commit hooks: markdown links, trailing newlines, Prettier, ESLint
- Pre-push hooks: branch lint, markdown links
## Notes
I verified the ShakaPerf config and failure mode locally with fixtures.
The full Pro dummy app release workflow still needs to run in GitHub
Actions with `REACT_ON_RAILS_PRO_LICENSE` available.
<!-- CURSOR_SUMMARY -->
---
> [!NOTE]
> **Medium Risk**
> The release path can block tagging and npm/gem publish if the new gate
fails; the workflow depends on Pro license secrets and a full dummy-app
stack, but it does not change runtime library code shipped to apps.
>
> **Overview**
> Adds a **manual ShakaPerf release gate** for React Server Components
flash-of-unstyled-content on the Pro dummy route
`/rsc_posts_page_over_http`. A new workflow boots the Pro dummy app
(node renderer + Rails), runs `shaka-perf compare` with absolute visreg
assertions (RSC stylesheet before hydration with JS blocked,
first-visible probe styled), and uploads reports and server logs.
>
> **Tooling:** pins `shaka-perf` / `shaka-shared` at the repo root (pnpm
`onlyBuiltDependencies`), ignores `compare-results/`, and extends
**Knip** so the workflow and `test/shakaperf/**` count as used. The
**release rake** path dispatches this workflow after the version-bump
push and waits for success before tagging and publishing (overridable
via `RELEASE_CI_STATUS_OVERRIDE`).
>
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
2465a15. Bugbot is set up for automated
code reviews on this repo. Configure
[here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
* **Tests**
* Added automated visual/regression release-gate tests and config to
detect CSS FOUC in React Server Components, including two experiment
checks.
* **Chores**
* Added a manual/tag-triggered release-gate workflow that runs
comparisons, collects reports/logs, and uploads artifacts.
* Integrated the gate into the release flow and updated tooling and
dev-dependency allowlists; ignored compare-results output.
* **Documentation**
* Added README documenting the new ShakaPerf gate and local
run/reporting instructions.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->1 parent 00202ba commit 33c0ccc
10 files changed
Lines changed: 3748 additions & 203 deletions
File tree
- .github/workflows
- rakelib
- react_on_rails/spec/react_on_rails
- test/shakaperf/rsc-fouc
- ab-tests
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
77 | 77 | | |
78 | 78 | | |
79 | 79 | | |
| 80 | + | |
80 | 81 | | |
81 | 82 | | |
82 | 83 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
5 | 5 | | |
6 | 6 | | |
7 | 7 | | |
8 | | - | |
9 | | - | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
10 | 16 | | |
11 | 17 | | |
12 | 18 | | |
| |||
49 | 55 | | |
50 | 56 | | |
51 | 57 | | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
52 | 61 | | |
53 | 62 | | |
54 | 63 | | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
55 | 71 | | |
56 | 72 | | |
57 | 73 | | |
58 | 74 | | |
59 | 75 | | |
60 | 76 | | |
| 77 | + | |
61 | 78 | | |
62 | 79 | | |
63 | 80 | | |
| |||
127 | 144 | | |
128 | 145 | | |
129 | 146 | | |
| 147 | + | |
| 148 | + | |
130 | 149 | | |
131 | 150 | | |
132 | 151 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
71 | 71 | | |
72 | 72 | | |
73 | 73 | | |
| 74 | + | |
| 75 | + | |
74 | 76 | | |
75 | 77 | | |
76 | 78 | | |
| |||
160 | 162 | | |
161 | 163 | | |
162 | 164 | | |
| 165 | + | |
| 166 | + | |
163 | 167 | | |
164 | 168 | | |
165 | 169 | | |
166 | 170 | | |
167 | 171 | | |
| 172 | + | |
168 | 173 | | |
169 | 174 | | |
170 | 175 | | |
| |||
0 commit comments