docs: v1 stabilization batch#238
Conversation
Docs scope of the v1 stabilization plan (F54, F14, F53, F11, F55, F56, CLI, support matrix, skipped-test issue links). - server.md: delete non-existent `server.addr` / `server.port` sections and the stale `#port-required` anchor (F54); fix "Bun instance in Deno" copy-paste error. - handler.md: `request.runtime.node?.req.path` -> `.url` (F54). - options.md: `maxHeadersize` -> `maxHeaderSize`; document `hostname` HOST env default (F14); document `manual`, `middleware`, `plugins`, `serviceWorker`; add per-runtime support matrix (close(true) on Deno, trustProxy scope, Bun 128 MiB / loader-drop for maxRequestBodySize, manual on workers, Cloudflare env in SW syntax, no upgrade/WebSocket -> crossws); Deno 2.x range + explicit `srvx/bunny` import note; public subpaths table; per-runtime `@types` note (F56); note `srvx/static` is Node-API-only. - node.md: state `_request`/`_url` are supported API frozen at v1 (D7/F53); `toFetchHandler`/`fetchNodeHandler` stable, `srvx/tracing` experimental (D5/F11); add Semver policy section incl. ERR_BODY_TOO_LARGE-only code guarantee (F55). - cli: `usage.ts` env wording (default, not override), document `--hostname`, fetch `--host`/`--tls`, `--method` (+`--request` alias), exit-22 line; cli.md precedence, exit-code divergence from curl, and Deno `--import` drop. - types.ts: fix "server with listen" JSDoc typo + HOST default (F14). - Link skipped protocol tests to tracking issues (#235, #236, #237). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Warning Review limit reached
Next review available in: 51 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (9)
✨ Finishing Touches🧪 Generate unit tests (beta)
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. Comment |
commit: |
pi0x
left a comment
There was a problem hiding this comment.
Review: docs v1 stabilization batch (PR #238)
Verdict: Approve. Every technical claim in the new/changed prose was fact-checked against the actual source; I found no factually wrong statement that would mislead users. pnpm lint (oxlint + oxfmt) passes; the automd blocks in every file this PR touches regenerate to "no changes". Two low/informational notes below, neither blocking.
Spec checklist (all verified against code, not just the diff)
F54
server.addr/server.portsections deleted — confirmedServer(src/types.ts:230-293) exposes onlyurl, noaddr/portanywhere. ✅- Stale
/guide/options#port-requiredanchor removed. ✅ req.path→req.url—IncomingMessagehas.url, not.path(Express-ism). ✅- Bun-in-Deno copy-paste fixed (
server.deno.server). ✅ maxHeadersize→maxHeaderSize— Node's real option ismaxHeaderSize;nodeopts spread intoNodeHttp.ServerOptions(types.ts:196). ✅manual/middleware/plugins/serviceWorkerdocumented; all four options exist (types.ts:78,216,ServerOptions.middleware/plugins) and the examples are valid (server.options.middlewareis always an array pertypes.ts:247;ServerPlugin = (server) => voidpertypes.ts:47;serviceWorker: {url?, scope?}matchestypes.ts:216-227). ✅- Public subpaths table —
srvx/static,srvx/log,srvx/loader,srvx/cli,srvx/generic,srvx/service-workerall present inpackage.jsonexports, and the listed named exports match (loadServerEntryin loader.ts,main/cliFetchin cli.ts,serve/FastURL/FastResponsein generic.ts,login log.ts). ✅
F14 — hostname ← HOST (_utils.ts:15) and silent ← TEST (_utils.ts:34) accurately documented; types.ts:92 "server with listen" typo fixed. ✅
Support matrix — every cell is a correct claim:
close(true)ignored on Deno ✅ (F25 behavior)trustProxyscope: Node/AWS/Bun/Deno only — confirmed_trust-proxyis consumed only by those adapters; cloudflare/bunny/generic/service-worker have zero usage. ✅maxRequestBodySize: Bun forwards to native (128 MiB default)bun.ts:84-88; dropped in loader mode (loader early-returns atbun.ts:48-50before serve opts). ✅manualno-op on module workers ✅; Cloudflareenvmodule-syntax-only ✅ (F29); upgrade/WebSocket unsupported → crossws ✅ (locked decision, stated).
srvx/static Node-API-only — confirmed uses node:fs/node:zlib. ✅
Deno range — "Deno 2.x / CI 2.7.x"; CI pins 2.7.12 (.github/workflows/ci.yml:47). Explicit srvx/bunny import note ✅.
F53/D7 — _request/_url documented as supported, frozen at v1. ✅
F11/D5 + F55 — toFetchHandler/fetchNodeHandler stable, exported from srvx/node (node.ts:33-34); srvx/tracing experimental; new Semver-policy section; ERR_BODY_TOO_LARGE stated as the only guaranteed code. ✅
F56 — types packages all real (checked npm): @types/bun@1.3.14 ✅, bun-types@1.3.14 (valid alt) ✅, @types/deno@2.7.0 — real, maintained DefinitelyTyped package (created 2024, updated 2026-05, not deprecated) ✅, @cloudflare/workers-types ✅, @types/aws-lambda@8.10.162 ✅.
CLI — exit-22 (main.ts:52 res.ok ? 0 : 22) ✅; usage "default port/host" wording ✅; --hostname ✅; --method + --request curl alias (main.ts:140 values.method || values.request) ✅; fetch --host/--tls (fetch.ts:117) ✅; --import dropped on Deno (main.ts:92 isNode || isBun) ✅.
Issues — #235 (HTTP/2 response-stream-error skip, _tests.ts), #236 (absolute-path-in-request-line skip, _tests.ts), #237 (Deno/Bun HTTP/2 suite skip, node.test.ts) all exist, and each inline comment points at the correct skip with an accurate description. ✅
No collision with in-flight work: the ### onError section (5.options.md:161) and any ### gracefulShutdown/### error section are left untouched (#230's); the ### trustProxy hop-model text is untouched (#229's); 9.aws-lambda.md not edited. ✅
Findings
Low — gracefulShutdown row is beyond the planned matrix scope (docs/1.guide/5.options.md:343). The plan's support-matrix bullet doesn't list gracefulShutdown as a cell, and its per-option docs are #230's territory. The row is factually correct (gracefulShutdownPlugin runs only in node/bun/deno; _plugins.ts:17), so not misleading — just confirm with #230 that a matrix cell + #230's ### gracefulShutdown section won't read as duplicated/conflicting.
Low — same-file overlap risk with #229/#230. The new sections (Per-runtime Support, Public Subpaths, TypeScript Types) and the trustProxy matrix row live in 5.options.md, which #229 (trustProxy section) and #230 (error/gracefulShutdown sections) also edit. Content is orthogonal and the regions differ (new blocks appended at end vs. their mid-file section edits), so a textual merge conflict is unlikely — flagging for awareness only.
Info (not this PR's fault) — automd drift in docs/1.guide/1.index.md. Running automd reformats the examples table there (column alignment) under automd 0.4.3. It's pre-existing on main, unrelated to this PR, and pnpm lint does not run an automd check, so CI won't catch it either. No action needed here.
Nice work — this is exactly the kind of claim-by-claim accuracy the batch needed. The @types/deno recommendation in particular is correct (it's a live DT package), which was the easiest one to get wrong.
Docs scope of the v1 stabilization plan. Every technical claim was verified against the code. Does not touch
trustProxydocs (PR #229), the### error/gracefulShutdownrewrites (PR #230),@experimentalcode removals (PR #230), or9.aws-lambda.md(AWS agent, F23).T1 — docs promising APIs that don't exist
server.addrandserver.portsections from3.server.md(neither exists; onlyserver.url) plus the stale#port-requiredanchor.T2 — wrong / missing docs
2.handler.mdreq.path→req.url;3.server.md"underlying Bun server instance when running in Deno" → Deno;5.options.mdmaxHeadersize→maxHeaderSize.manual,middleware,plugins,serviceWorkerin5.options.md(lefterror/gracefulShutdownto feat: v1 api freeze #230).srvx/static,srvx/log,srvx/loader,srvx/cli,srvx/generic,srvx/service-worker.hostname ← HOSTandsilent ← TESTenv defaults; fixed thetypes.ts"server with listen" JSDoc typo.close(true)ignored on Deno,trustProxyadapter scope,maxRequestBodySize(Bun 128 MiB / dropped in loader mode — F57),manualno-op on module workers, Cloudflareenvonly in module syntax (F29), and noupgrade/WebSocket on any runtime → crossws (locked).srvx/staticis Node-API-only (node:fs/node:zlib) — noted in10.cli.mdand the subpaths table.srvx/bunnyimport (root resolves thedenocondition).T3
_request/_urldocumented as supported API frozen at v1 (underscore is legacy naming).toFetchHandler/fetchNodeHandlerdocumented stable;srvx/tracingdocumented experimental — plus a new Semver policy section (also states F55:ERR_BODY_TOO_LARGEis the only guaranteed errorcode).@typespackages (@types/bun,@types/deno,@cloudflare/workers-types,@types/aws-lambda) documented for full typing ofoptions.bun/runtime.cloudflare/etc.srvx fetchnon-2xx → exit 22 documented prominently (diverges from curl).usage.tsfixes: env wording "default" not "override", document--hostname, fetch--host/--tls,--method(+--requestalias), exit-22 line;10.cli.mdprecedence (flag > module > env > default) and Deno--importdrop.Verification
pnpm lint:fix(automd regenerated the CLI usage block),pnpm typecheck, and the common + CLI vitest suites all pass (914 passed / 32 pre-existing skips). Deno/Bun-only suites not run locally (no runtimes installed; CI covers them).🤖 Generated with Claude Code