Skip to content

Backport #3908: [docs] Document Postgres World auth/security limitations explicitly - #4318

Merged
VaguelySerious merged 1 commit into
stablefrom
backport/pr-3908-to-stable
Oct 2, 2026
Merged

VaguelySerious merged 1 commit into
stablefrom
backport/pr-3908-to-stable

Conversation

@github-actions

Copy link
Copy Markdown
Contributor

Automated backport of #3908 to stable (backport job run).

AI recommendation: Docs-only correction of a misleading and security-relevant claim: stable still ships the same unauthenticated Postgres World queue handler while calling it "production-ready" in packages/world-postgres/README.md, worlds-manifest.json, and its Postgres World docs page (verified present on origin/stable). Documenting the missing authentication and unencrypted data-at-rest fixes something that is wrong about behavior already on stable, rather than describing a new capability. Note the docs site paths differ on stable (docs/content/docs/deploying/world/postgres-world.mdx and .../local-world.mdx, docs/content/docs/deploying/building-a-world.mdx instead of docs/content/worlds/{v4,v5}/), so the docs hunks and internal links will need remapping during the cherry-pick.

Merge conflicts were resolved by AI (opencode with anthropic/claude-opus-5). Please review the conflict resolution carefully before merging.

…3908)

* [docs] Document Postgres World auth/security limitations explicitly

The Postgres World was described as "production-ready" in the docs, the
worlds manifest, and the building-a-world guide, while its README mentioned
"reference implementation" only in passing and neither said anything about
authentication. It inherits its queue HTTP handler from world-local, which
validates the x-vqs-* header shape, the queue-name prefix, and the payload
schema — never the caller — so any client that can reach
POST /.well-known/workflow/v1/flow can forge or replay workflow and step
invocations.

Make the reference-implementation framing and the bring-your-own-auth
expectation explicit instead:

- Add a Security section to the package README, HOW_IT_WORKS, and both the
  v4 and v5 Postgres World docs pages: what is unauthenticated, how to gate
  it at the network edge, why framework middleware is the wrong layer, and
  that the World never presents a credential of its own.
- Note that the World does not implement getEncryptionKeyForRun(), so data
  is stored unencrypted, and that self-hosted @workflow/web has no auth.
- Drop "production-ready" from the docs pages, the worlds manifest, and the
  building-a-world reference callout, and add "no built-in authentication"
  and "no encryption" to the Limitations list.
- Stop the Local World pages from pointing at the Postgres World for
  production without mentioning that it shares the same unauthenticated
  handler, and warn about self-hosted World security in the Deploying guide
  and the v5 Worlds configuration reference.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

Co-Authored-By: Pranay Prakash <1797812+pranaygp@users.noreply.github.com>

* [docs] Address review feedback on Postgres World security docs

- Revert the additions to deploying.mdx (v4 + v5) and the v5 Worlds
  configuration reference: those pages stay a short link section and general
  configuration, with the security detail living on the Postgres World pages.
- Apply the suggested wording for building-a-world, local.mdx, the Postgres
  frontmatter description, the Security intro (now also recommending
  encryption), the "does not currently implement" limitation, and the worlds
  manifest description.
- Condense "What is unauthenticated" into "Protect the queue route": the flow
  route is publicly reachable by default and must be protected, plus the two
  exceptions (webhook token, manifest 404).
- README: add the clone-and-adapt recommendation to the notice, note that a
  derived World can opt into encryption by implementing
  getEncryptionKeyForRun(), and drop the redundant Queue Behavior bullet.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

Co-Authored-By: Pranay Prakash <1797812+pranaygp@users.noreply.github.com>

* [docs] Restore the closing Callout tag in the v5 building-a-world callout

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* [docs] Link the Next.js setup guide without the accordion fragment

The `configure-proxy-handler` id lives on a JSX heading inside a collapsed
accordion, so next-validate-link cannot see it and the anchor would not reveal
the content anyway.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* [docs] Scope the Postgres World ingress guidance to the flow route

Blocking all of `/.well-known/workflow/` breaks `createWebhook()`, whose
`webhook/:token` route is a sibling under the same prefix and is meant to be
reachable by the caller. Also note that WORKFLOW_PUBLIC_MANIFEST is read at
build time, and attribute payload validation to the runtime rather than the
queue handler, which only checks the header shape and queue-name prefix.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: vercel[bot] <35613825+vercel[bot]@users.noreply.github.com>
Co-authored-by: Pranay Prakash <1797812+pranaygp@users.noreply.github.com>
Co-authored-by: Peter Wielander <peter.wielander@vercel.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Signed-off-by: Pranay Prakash <pranay.gp@gmail.com>
@changeset-bot

changeset-bot Bot commented Sep 23, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 5cef510

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
@workflow/world-postgres Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@vercel

vercel Bot commented Sep 23, 2026 •

Copy link
Copy Markdown
Contributor

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
example-nextjs-workflow-turbopack Ready Ready Preview, v0 Sep 23, 2026 5:28pm UTC
example-nextjs-workflow-webpack Ready Ready Preview, v0 Sep 23, 2026 5:28pm UTC
example-workflow Ready Ready Preview, v0 Sep 23, 2026 5:28pm UTC
workbench-astro-workflow Ready Ready Preview, v0 Sep 23, 2026 5:28pm UTC
workbench-express-workflow Ready Ready Preview, v0 Sep 23, 2026 5:28pm UTC
workbench-fastify-workflow Ready Ready Preview, v0 Sep 23, 2026 5:28pm UTC
workbench-hono-workflow Ready Ready Preview, v0 Sep 23, 2026 5:28pm UTC
workbench-nestjs-workflow Ready Ready Preview, v0 Sep 23, 2026 5:28pm UTC
workbench-nitro-workflow Ready Ready Preview, v0 Sep 23, 2026 5:28pm UTC
workbench-nuxt-workflow Ready Ready Preview, v0 Sep 23, 2026 5:28pm UTC
workbench-python-workflow Error Error v0 Sep 23, 2026 5:28pm UTC
workbench-sveltekit-workflow Ready Ready Preview, v0 Sep 23, 2026 5:28pm UTC
workbench-tanstack-start-workflow Ready Ready Preview, v0 Sep 23, 2026 5:28pm UTC
workbench-vite-workflow Ready Ready Preview, v0 Sep 23, 2026 5:28pm UTC
workflow-docs Ready Ready Preview, v0 Sep 23, 2026 5:28pm UTC
workflow-swc-playground Ready Ready Preview, v0 Sep 23, 2026 5:28pm UTC
workflow-tarballs Ready Ready Preview, v0 Sep 23, 2026 5:28pm UTC
workflow-web Ready Ready Preview, v0 Sep 23, 2026 5:28pm UTC

@VaguelySerious
VaguelySerious merged commit 5637f10 into stable Oct 2, 2026
25 of 26 checks passed
@VaguelySerious
VaguelySerious deleted the backport/pr-3908-to-stable branch October 2, 2026 18:12

This branch had an error being deployed

1 failed and 17 active deployments
Preview – workflow-swc-playground — 5cef510b Deployed Sep 23, 2026 by vercel[bot]
Preview – example-nextjs-workflow-webpack — 5cef510b Deployed Sep 23, 2026 by vercel[bot]
Preview – workbench-tanstack-start-workflow — 5cef510b Deployed Sep 23, 2026 by vercel[bot]
Preview – example-workflow — 5cef510b Deployed Sep 23, 2026 by vercel[bot]
Preview – workbench-sveltekit-workflow — 5cef510b Deployed Sep 23, 2026 by vercel[bot]
Preview – workbench-astro-workflow — 5cef510b Deployed Sep 23, 2026 by vercel[bot]
Preview – workbench-nuxt-workflow — 5cef510b Deployed Sep 23, 2026 by vercel[bot]
Preview – workflow-docs — 5cef510b Deployed Sep 23, 2026 by vercel[bot]
Preview – workbench-vite-workflow — 5cef510b Deployed Sep 23, 2026 by vercel[bot]
Preview – workbench-express-workflow — 5cef510b Deployed Sep 23, 2026 by vercel[bot]
Preview – workbench-nitro-workflow — 5cef510b Deployed Sep 23, 2026 by vercel[bot]
Preview – workflow-tarballs — 5cef510b Deployed Sep 23, 2026 by vercel[bot]
Preview – workbench-fastify-workflow — 5cef510b Deployed Sep 23, 2026 by vercel[bot]
Preview – workbench-hono-workflow — 5cef510b Deployed Sep 23, 2026 by vercel[bot]
Preview – workbench-nestjs-workflow — 5cef510b Deployed Sep 23, 2026 by vercel[bot]
Preview – workflow-web — 5cef510b Deployed Sep 23, 2026 by vercel[bot]
Preview – example-nextjs-workflow-turbopack — 5cef510b Deployed Sep 23, 2026 by vercel[bot]
Preview – workbench-python-workflow — 5cef510b Deployed Sep 23, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant