Commit 072bc53
## Why
Issue #4053: the recommended renderer readiness probe `curl
--http2-prior-knowledge -fsS http://localhost:3800/ready` breaks
container startup. The container never becomes ready; removing `-fsS`
"fixes" it (but then the probe always passes, defeating its purpose).
**Root cause (confirmed in `worker.ts`):** `-f`/`--fail` makes curl exit
non-zero on any HTTP status `>= 400`, and `/ready` returns `503
{"status":"waiting_for_bundle"}` during the cold-start window until the
answering worker compiles its first bundle. A `--fail` probe against
`/ready` with no warm-up path therefore deadlocks startup. This is
intended gating behavior — but the docs lacked an explicit per-endpoint
status-code contract and any Control Plane guidance, so the reporter hit
the deadlock without a clear answer.
Endpoint contract (from
[`worker.ts`](packages/react-on-rails-pro-node-renderer/src/worker.ts)):
- `/health` → always `200`
- `/info` → always `200`
- `/ready` → `200` once a bundle is compiled, else `503`
## What changed
Documentation only —
`docs/oss/building-features/node-renderer/health-checks.md`:
1. **Status-Code Contract** section with a per-endpoint table and a
callout explaining exactly why `curl -fsS .../ready` breaks startup, and
what to probe instead (`/health` or `/info` for an always-passes probe;
reserve `--fail` against `/ready` for setups with a warm-up path).
2. **Control Plane (CPLN)** section: CPLN exposes HTTP and Command
(exec) probes; the HTTP probe is HTTP/1.1 and cannot speak the
renderer's h2c listener, so use a Command probe with h2c-aware curl
against `/health` by default, switching to `/ready` only with a warm-up
path.
This addresses all three of the issue's requests: a probe command that
works, the `/ready`+`/info` status-code contract, and the CPLN-specific
probe options.
## Validation
- `npx prettier --check` passes on the changed file.
- Docs-only; no CHANGELOG entry per
`.claude/docs/changelog-guidelines.md` (docs fixes excluded).
Fixes #4053
🤖 Generated with [Claude Code](https://claude.com/claude-code)
<!-- CURSOR_SUMMARY -->
---
> [!NOTE]
> **Low Risk**
> Documentation-only changes with no runtime, security, or deployment
code modifications.
>
> **Overview**
> Documents why **`curl --fail` against `/ready`** can deadlock
container readiness during cold start, and how to probe safely.
>
> Adds a **Status-Code Contract** table for `/health`, `/info`, and
`/ready` (including when `503 waiting_for_bundle` is expected) plus
guidance to use **`/health` or `/info`** for probes that must pass once
the process is up, and **`/ready` with `--fail` only when a warm-up
path** compiles the first bundle.
>
> Adds a **Control Plane (CPLN)** section explaining that HTTP probes
cannot use the renderer’s **h2c** listener, with example **`exec`
Command probes** using h2c-aware `curl` against `/health` for readiness
and liveness. The same content is mirrored in **`llms-full.txt`**.
>
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
40ae833. 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
* **Documentation**
* Added a “Status-Code Contract” describing expected HTTP responses for
health endpoints, including when `/ready` may return `503` during cold
start
* Expanded guidance on `curl --fail`/`-f`/`-fsS`, warning against using
`/ready` as a failing readiness gate without a warm-up path
* Added Control Plane-specific probe instructions and example probe
shapes to match connectivity constraints
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
## Agent Merge Confidence (coordinator)
**Merged by Claude Code coordinator under explicit maintainer
(justin808) delegation** — "merge authorization if confident +
documented."
- **Confidence: HIGH.** Docs-only (`docs/oss/.../health-checks.md`) +
regenerated `llms-full.txt`.
- **Rebased** onto merged #4087 (Group B, generated `llms-full.txt`
serialization); `llms-full.txt` regenerated via `node
script/generate-llms-full.mjs` — regeneration produced zero diff and the
`--check` guard passes (auto-merge was correct).
- **Doc accuracy verified vs source:** `/health`→200, `/ready`→200/503
`waiting_for_bundle` confirmed against
`packages/react-on-rails-pro-node-renderer/src/worker.ts`; CPLN probe
schema confirmed against `react_on_rails_pro/.controlplane/rails.yml`.
- **Current-head review threads triaged against the actual file (not
merged blind):** the recurring CodeRabbit/claude/codex "missing
`timeoutSeconds`" and greptile "missing liveness probe" flags are
**stale/incorrect** — the CPLN snippet already contains `timeoutSeconds:
5` on both `readinessProbe` and `livenessProbe`. `startupProbe` omission
is intentional and safe (probes `/health`, always 200; cold start cannot
misfire). The `-sfS` and localhost-qualification notes are
advisory/misreads. No actionable must-fix remained.
- **CI:** `mergeStateStatus: CLEAN`, all checks pass/skip. **Merge
ledger** sole hard violation `unknown_review_decision` — overridden by
maintainer merge delegation. Changelog `not_user_visible`.
- **Cross-batch:** Batch-1 #4037 also touches `llms-full.txt` and must
rebase+regenerate after this merge.
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent 890841c commit 072bc53
2 files changed
Lines changed: 138 additions & 0 deletions
Lines changed: 69 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
20 | 20 | | |
21 | 21 | | |
22 | 22 | | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
23 | 41 | | |
24 | 42 | | |
25 | 43 | | |
| |||
220 | 238 | | |
221 | 239 | | |
222 | 240 | | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
| 252 | + | |
| 253 | + | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
| 275 | + | |
| 276 | + | |
| 277 | + | |
| 278 | + | |
| 279 | + | |
| 280 | + | |
| 281 | + | |
| 282 | + | |
| 283 | + | |
| 284 | + | |
| 285 | + | |
| 286 | + | |
| 287 | + | |
| 288 | + | |
| 289 | + | |
| 290 | + | |
| 291 | + | |
223 | 292 | | |
224 | 293 | | |
225 | 294 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
15258 | 15258 | | |
15259 | 15259 | | |
15260 | 15260 | | |
| 15261 | + | |
| 15262 | + | |
| 15263 | + | |
| 15264 | + | |
| 15265 | + | |
| 15266 | + | |
| 15267 | + | |
| 15268 | + | |
| 15269 | + | |
| 15270 | + | |
| 15271 | + | |
| 15272 | + | |
| 15273 | + | |
| 15274 | + | |
| 15275 | + | |
| 15276 | + | |
| 15277 | + | |
| 15278 | + | |
15261 | 15279 | | |
15262 | 15280 | | |
15263 | 15281 | | |
| |||
15458 | 15476 | | |
15459 | 15477 | | |
15460 | 15478 | | |
| 15479 | + | |
| 15480 | + | |
| 15481 | + | |
| 15482 | + | |
| 15483 | + | |
| 15484 | + | |
| 15485 | + | |
| 15486 | + | |
| 15487 | + | |
| 15488 | + | |
| 15489 | + | |
| 15490 | + | |
| 15491 | + | |
| 15492 | + | |
| 15493 | + | |
| 15494 | + | |
| 15495 | + | |
| 15496 | + | |
| 15497 | + | |
| 15498 | + | |
| 15499 | + | |
| 15500 | + | |
| 15501 | + | |
| 15502 | + | |
| 15503 | + | |
| 15504 | + | |
| 15505 | + | |
| 15506 | + | |
| 15507 | + | |
| 15508 | + | |
| 15509 | + | |
| 15510 | + | |
| 15511 | + | |
| 15512 | + | |
| 15513 | + | |
| 15514 | + | |
| 15515 | + | |
| 15516 | + | |
| 15517 | + | |
| 15518 | + | |
| 15519 | + | |
| 15520 | + | |
| 15521 | + | |
| 15522 | + | |
| 15523 | + | |
| 15524 | + | |
| 15525 | + | |
| 15526 | + | |
| 15527 | + | |
| 15528 | + | |
| 15529 | + | |
15461 | 15530 | | |
15462 | 15531 | | |
15463 | 15532 | | |
| |||
0 commit comments