You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The published post blog/get-server-actions-caching.md lists SSR seeding as one of the
things a GET server action buys. Under the heading # What a GET buys (L37), the
paragraph at L47 reads:
It reads the SSR seed first. If the same action ran during server render, its result
was serialized into the page, so the component's first client call resolves from the
seed with no network at all.
Seeding is not a GET feature. packages/server/src/action-seed.js facades every 'use server' module and wraps each exported function regardless of method, and packages/server/src/actions.js:318 says so directly ("Every verb reads the SSR seed
(#472) first ... a read with no method is a default POST"). A reader of the post
comes away thinking a read must be declared GET to avoid a hydration round-trip, which
is the opposite of the truth and would push someone toward method = 'GET' on an action
that should not be cacheable at all.
The same stale framing existed in root AGENTS.md and in the api scaffold template's list-users.server.ts comment. Both were corrected in #1151 / PR #1152, along with the
new gallery card that teaches the config exports. The docs site
(website/app/docs/server-actions/page.ts:205) and the skill reference
(.agents/skills/webjs/references/data-and-actions.md:142) were already verb-agnostic
and correct. The blog is the last surface carrying the wrong version.
Design / approach
Move the seeding paragraph out of the GET enumeration. Two options, either is fine:
Relocate it to its own short passage that states seeding applies to any action
invoked during an SSR render, whatever its verb. This keeps the useful information
in a post where it fits.
Cut it from the post entirely. The post's subject is the verb declaration and HTTP
caching, and seeding is a separate mechanism with its own coverage on the docs site.
Option 1 is the better read, since a person landing on this post from a search for
action caching benefits from knowing the seed exists. Keep the correction to the framing
only. Nothing else in the section is wrong.
Implementation notes (for the implementing agent)
Where to edit: blog/get-server-actions-caching.md, the paragraph at L47 under the # What a GET buys heading (L37). The front-matter description (L5) does NOT
mention seeding, so it needs no change.
Invoke the webjs-blog-write skill before touching the prose. It carries the house
voice and the hard prose rules for this surface (no em-dashes, no internal PR or issue
numbers in the published text, no process tells), which a straight technical edit will
otherwise violate.
Verify the replacement claim against the source rather than restating it from memory: packages/server/src/action-seed.js (the facade that wraps every export) and packages/server/src/actions.js around L318 (the comment stating every verb reads the
seed). One genuine constraint worth keeping if the paragraph stays: a STREAMED result
is never seeded, and the seed is consume-once and fail-open.
The website renders the post from this markdown, so no separate page needs editing.
Confirm the post still renders by booting website and hitting the post URL.
Problem
The published post
blog/get-server-actions-caching.mdlists SSR seeding as one of thethings a GET server action buys. Under the heading
# What a GET buys(L37), theparagraph at L47 reads:
Seeding is not a GET feature.
packages/server/src/action-seed.jsfacades every'use server'module and wraps each exported function regardless ofmethod, andpackages/server/src/actions.js:318says so directly ("Every verb reads the SSR seed(#472) first ... a read with no
methodis a default POST"). A reader of the postcomes away thinking a read must be declared GET to avoid a hydration round-trip, which
is the opposite of the truth and would push someone toward
method = 'GET'on an actionthat should not be cacheable at all.
The same stale framing existed in root
AGENTS.mdand in the api scaffold template'slist-users.server.tscomment. Both were corrected in #1151 / PR #1152, along with thenew gallery card that teaches the config exports. The docs site
(
website/app/docs/server-actions/page.ts:205) and the skill reference(
.agents/skills/webjs/references/data-and-actions.md:142) were already verb-agnosticand correct. The blog is the last surface carrying the wrong version.
Design / approach
Move the seeding paragraph out of the GET enumeration. Two options, either is fine:
invoked during an SSR render, whatever its verb. This keeps the useful information
in a post where it fits.
caching, and seeding is a separate mechanism with its own coverage on the docs site.
Option 1 is the better read, since a person landing on this post from a search for
action caching benefits from knowing the seed exists. Keep the correction to the framing
only. Nothing else in the section is wrong.
Implementation notes (for the implementing agent)
blog/get-server-actions-caching.md, the paragraph at L47 under the# What a GET buysheading (L37). The front-matterdescription(L5) does NOTmention seeding, so it needs no change.
webjs-blog-writeskill before touching the prose. It carries the housevoice and the hard prose rules for this surface (no em-dashes, no internal PR or issue
numbers in the published text, no process tells), which a straight technical edit will
otherwise violate.
packages/server/src/action-seed.js(the facade that wraps every export) andpackages/server/src/actions.jsaround L318 (the comment stating every verb reads theseed). One genuine constraint worth keeping if the paragraph stays: a STREAMED result
is never seeded, and the seed is consume-once and fail-open.
Confirm the post still renders by booting
websiteand hitting the post URL.reference are already correct as of PR feat: teach HTTP verbs and GET caching on the gallery server-actions card #1152, so this must not "fix" them again.
Acceptance criteria
during an SSR render