Ship · provider boundaries
Deployment
Presolve deploys a compiler-issued publication, not a directory of unrelated files. Provider adapters consume immutable route, artifact, and capability inventories and may not rediscover application meaning.
Choose a target
Cloudflare Workers Static Assets
Deploy routes whose publication requires no server loader or server action execution.
Cloudflare guide →NODENode application host
Serve compiled static routes and execute canonical route loaders and Form-bound server actions.
Node guide →Release workflow
- Validate sourceRun the project-local
pnpm checkand resolve the first compiler diagnostic. - Publish onceRun
pnpm build; do not mix files from separate builds. - Inspect the auditConfirm
production-audit.jsonreports schema 1 andpassed. - Prepare the adapterGenerate the provider-specific projection without upload and inspect its exact route classifications.
- Deploy the inventoryUpload the complete validated projection, then smoke-test the public origin.
Static eligibility
A route is static only when its exact compiler-issued route loader plan and server action plan both contain zero entries for that route. An adapter cannot decide this from a filename, source import, or generated HTML.
staticThe route can be served entirely from the matching published files.nodeThe compiler recorded a canonical loader or server action; the schema-v3 Node host executes its exact plan.Production smoke test
Canonical URLs / stays /; internal artifact paths never appear in redirects.
Immutable CSS and runtime Returning browsers receive HTML that names the matching content-addressed files.
Assets Favicons, public files, imported media, and route documents return correct status and content type.
Behavior Exercise cold load, interaction, navigation, and compatible resume on target browsers.
Node executes only canonical Resource-field loaders and canonical Form-bound actions whose package exports, codecs, request facts, and registry digests are compiler-proven. Legacy handoffs and arbitrary server functions remain non-executable.