Python conformance workbench
This app runs the shared Workflow SDK e2e suite against the Python runtime. The
test driver and assertions remain in packages/core/e2e/e2e.test.ts; this
workbench supplies equivalent Python fixtures and exposes them through the same
manifest and workflow protocols as the JavaScript workbenches.
vercel-workflow is sourced from the main branch of
vercel-py. uv.lock records the exact
commit used by local development, CI, and Vercel builds, so updating upstream
does not change this workbench until the lockfile is refreshed.
Layout
workflows/99_e2e.pycontains the Python fixtures.e2e-conformance.jsondeclares which fixtures and tests Python supports. It is a ratchet: a declared capability that disappears fails the suite instead of silently becoming skipped.- The
99_e2emodule and its camelCase fixture functions intentionally match the TypeScript fixture path and exported names. app.pyadapts the SDK's public HTTP handlers to bare ASGI.pyproject.tomlselects the SDK source and the Vercel web/workflow entrypoints.vercel.jsonselects the platform Python builder and exposes the manifest.
Run locally
Install the locked Python environment and start the app:
cd workbench/python
uv sync --locked
WORKFLOW_PUBLIC_MANIFEST=1 pnpm dev
Then run the shared suite from the repository root:
DEPLOYMENT_URL="http://localhost:3000" APP_NAME="python" \
pnpm vitest run packages/core/e2e/e2e.test.ts
The app and TypeScript driver share the local World data directory, so the TypeScript CLI can inspect runs created by Python:
cd workbench/python
node ./node_modules/workflow/bin/run.js inspect --json runs
Update the Python SDK
Regenerate the lockfile to update the pinned vercel-py/main revision, then
rerun the suite:
cd workbench/python
rm uv.lock
uv lock
uv sync --locked
Remove uv.lock instead of using --upgrade-package due to a uv bug that can
switch transitive vercel-* dependencies from the vercel-py Git repository
to their PyPI releases during an incremental lock update.
Vercel deployment
The workbench-python-workflow Vercel project is rooted at this directory and
is included in the e2e-vercel-prod matrix.
vercel.json selects the Python builder, while pyproject.toml declares the
ASGI web entrypoint and workflow registry. .python-version selects the
deployed Python version. Preview deployments use VERCEL_WORKFLOW_SERVER_URL
to target the same workflow server as the test driver.