Repository navigation
[astro] Stop Astro warning about the generated workflow manifest - #5183
Conversation
Write the Astro manifest as _manifest.json so Astro's router skips it, and mark the custom-world dynamic import with @vite-ignore. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
🦋 Changeset detectedLatest commit: baf2544 The changes in this PR will be included in the next version bump. This PR includes changesets to release 17 packages
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 |
📊 Workflow Benchmarkscommit Backend:
📈 STSO distribution vs main (inline / queue-hop histograms)1020 steps (inline) Cumulative STSO time: main 119106ms → this run 110388ms (Δ -8718ms, -7%) ℹ️ Metric definitions & methodologyThe collapsed STSO distribution section above buckets every step gap, split inline (same warm process — pure framework overhead) vs queue-hop (fresh process — dispatch, reinit, replay). Best/P75/P90/P99 deltas compare against the most recent benchmark run on Metrics — TTFS: time to first step body (in-deployment start() → first step body) · Fan-out TTFS: fan-out time to first step (in-deployment start() → first of the parallel step bodies to complete) · Fan-out TTLS: fan-out time to last step (in-deployment start() → last of the parallel step bodies to complete, i.e. when the Promise.all resolves) · STSO: step-to-step overhead (gap between consecutive step bodies) · WO: workflow overhead (whole-run time outside step bodies, in-deployment anchored) Scenarios — step: one trivial no-op step, no stream; no hooks, so the run stays in turbo mode (in-process fast path) · stream: one streaming step; no hooks, so the run stays in turbo mode (in-process fast path) · hook + stream: registers a hook before one step, which exits turbo mode (dispatch path) · 1020 steps: 1020 trivial sequential steps; STSO is measured between consecutive steps in the given step ranges, and WO is the whole-run overhead outside step bodies · Promise.all(100 steps): 100 trivial no-op steps started together in a single Promise.all; Fan-out TTFS is the first of them to complete and Fan-out TTLS the last, both from the in-deployment clientStart, so their gap is the spread the runtime adds across the fan-out 🔴 marks a percentile over its target (within target is left unmarked). Targets (p75/p90/p99, ms) — TTFS 200/300/600 All timestamps are deployment-side; runs are triggered in-deployment, so the CI runner and api.vercel.com sit outside every measured window. TTFS = Cold starts stay in the numbers (real bursty-workload latency, inflates P75+); Best is the warm floor. |
🧪 E2E Test Results❌ Some tests failed ❌ Failed E2E Tests💻 Local Development (1 failed)nextjs-webpack-stable-node (1 failed):
|
| Passed | Failed | Skipped | Total | |
|---|---|---|---|---|
| ✅ ▲ Vercel Production | 4008 | 0 | 1392 | 5400 |
| ❌ 💻 Local Development | 5248 | 1 | 551 | 5800 |
| ✅ 📦 Local Production | 5249 | 0 | 551 | 5800 |
| ✅ 🐘 Local Postgres | 5249 | 0 | 551 | 5800 |
| ✅ 🪟 Windows | 388 | 0 | 12 | 400 |
| ✅ 🌐 Cross-language Conformance | 68 | 0 | 107 | 175 |
| ✅ dynamic-runs | 0 | 0 | 0 | 0 |
| ✅ local-postgres-spec9 | 38 | 0 | 312 | 350 |
| ✅ vercel-http-transport | 903 | 0 | 297 | 1200 |
| ✅ vercel-multi-region | 27 | 0 | 0 | 27 |
| ✅ vercel-spec9 | 344 | 0 | 56 | 400 |
| ✅ vercel-ws-transport | 611 | 0 | 189 | 800 |
| Total | 22133 | 1 | 4018 | 26152 |
Details by Category
✅ ▲ Vercel Production
| App | Passed | Failed | Skipped |
|---|---|---|---|
| ✅ astro-node | 146 | 0 | 54 |
| ✅ astro-quickjs | 146 | 0 | 54 |
| ✅ example-node | 146 | 0 | 54 |
| ✅ example-quickjs | 146 | 0 | 54 |
| ✅ express-node | 146 | 0 | 54 |
| ✅ express-quickjs | 146 | 0 | 54 |
| ✅ fastify-node | 146 | 0 | 54 |
| ✅ fastify-quickjs | 146 | 0 | 54 |
| ✅ hono-node | 146 | 0 | 54 |
| ✅ hono-quickjs | 146 | 0 | 54 |
| ✅ nest-node | 146 | 0 | 54 |
| ✅ nest-quickjs | 146 | 0 | 54 |
| ✅ nextjs-turbopack-node | 173 | 0 | 27 |
| ✅ nextjs-turbopack-quickjs | 173 | 0 | 27 |
| ✅ nextjs-webpack-node | 173 | 0 | 27 |
| ✅ nextjs-webpack-quickjs | 173 | 0 | 27 |
| ✅ nitro-node | 146 | 0 | 54 |
| ✅ nitro-quickjs | 146 | 0 | 54 |
| ✅ nuxt-node | 146 | 0 | 54 |
| ✅ nuxt-quickjs | 146 | 0 | 54 |
| ✅ python-node | 66 | 0 | 134 |
| ✅ sveltekit-node | 165 | 0 | 35 |
| ✅ sveltekit-quickjs | 165 | 0 | 35 |
| ✅ tanstack-start-node | 146 | 0 | 54 |
| ✅ tanstack-start-quickjs | 146 | 0 | 54 |
| ✅ vite-node | 146 | 0 | 54 |
| ✅ vite-quickjs | 146 | 0 | 54 |
❌ 💻 Local Development
| App | Passed | Failed | Skipped |
|---|---|---|---|
| ✅ astro-stable-node | 171 | 0 | 29 |
| ✅ astro-stable-quickjs | 171 | 0 | 29 |
| ✅ express-stable-node | 171 | 0 | 29 |
| ✅ express-stable-quickjs | 171 | 0 | 29 |
| ✅ fastify-stable-node | 171 | 0 | 29 |
| ✅ fastify-stable-quickjs | 171 | 0 | 29 |
| ✅ hono-stable-node | 171 | 0 | 29 |
| ✅ hono-stable-quickjs | 171 | 0 | 29 |
| ✅ nest-stable-node | 171 | 0 | 29 |
| ✅ nest-stable-quickjs | 171 | 0 | 29 |
| ✅ nextjs-turbopack-canary-node | 199 | 0 | 1 |
| ✅ nextjs-turbopack-canary-quickjs | 199 | 0 | 1 |
| ✅ nextjs-turbopack-quickjs-snapshot | 199 | 0 | 1 |
| ✅ nextjs-turbopack-stable-node | 199 | 0 | 1 |
| ✅ nextjs-turbopack-stable-quickjs | 199 | 0 | 1 |
| ✅ nextjs-webpack-canary-node | 199 | 0 | 1 |
| ✅ nextjs-webpack-canary-quickjs | 199 | 0 | 1 |
| ❌ nextjs-webpack-stable-node | 198 | 1 | 1 |
| ✅ nextjs-webpack-stable-quickjs | 199 | 0 | 1 |
| ✅ nitro-stable-node | 171 | 0 | 29 |
| ✅ nitro-stable-quickjs | 171 | 0 | 29 |
| ✅ nuxt-stable-node | 171 | 0 | 29 |
| ✅ nuxt-stable-quickjs | 171 | 0 | 29 |
| ✅ sveltekit-stable-node | 190 | 0 | 10 |
| ✅ sveltekit-stable-quickjs | 190 | 0 | 10 |
| ✅ tanstack-start-node | 171 | 0 | 29 |
| ✅ tanstack-start-quickjs | 171 | 0 | 29 |
| ✅ vite-stable-node | 171 | 0 | 29 |
| ✅ vite-stable-quickjs | 171 | 0 | 29 |
✅ 📦 Local Production
| App | Passed | Failed | Skipped |
|---|---|---|---|
| ✅ astro-stable-node | 171 | 0 | 29 |
| ✅ astro-stable-quickjs | 171 | 0 | 29 |
| ✅ express-stable-node | 171 | 0 | 29 |
| ✅ express-stable-quickjs | 171 | 0 | 29 |
| ✅ fastify-stable-node | 171 | 0 | 29 |
| ✅ fastify-stable-quickjs | 171 | 0 | 29 |
| ✅ hono-stable-node | 171 | 0 | 29 |
| ✅ hono-stable-quickjs | 171 | 0 | 29 |
| ✅ nest-stable-node | 171 | 0 | 29 |
| ✅ nest-stable-quickjs | 171 | 0 | 29 |
| ✅ nextjs-turbopack-canary-node | 199 | 0 | 1 |
| ✅ nextjs-turbopack-canary-quickjs | 199 | 0 | 1 |
| ✅ nextjs-turbopack-quickjs-snapshot | 199 | 0 | 1 |
| ✅ nextjs-turbopack-stable-node | 199 | 0 | 1 |
| ✅ nextjs-turbopack-stable-quickjs | 199 | 0 | 1 |
| ✅ nextjs-webpack-canary-node | 199 | 0 | 1 |
| ✅ nextjs-webpack-canary-quickjs | 199 | 0 | 1 |
| ✅ nextjs-webpack-stable-node | 199 | 0 | 1 |
| ✅ nextjs-webpack-stable-quickjs | 199 | 0 | 1 |
| ✅ nitro-stable-node | 171 | 0 | 29 |
| ✅ nitro-stable-quickjs | 171 | 0 | 29 |
| ✅ nuxt-stable-node | 171 | 0 | 29 |
| ✅ nuxt-stable-quickjs | 171 | 0 | 29 |
| ✅ sveltekit-stable-node | 190 | 0 | 10 |
| ✅ sveltekit-stable-quickjs | 190 | 0 | 10 |
| ✅ tanstack-start-node | 171 | 0 | 29 |
| ✅ tanstack-start-quickjs | 171 | 0 | 29 |
| ✅ vite-stable-node | 171 | 0 | 29 |
| ✅ vite-stable-quickjs | 171 | 0 | 29 |
✅ 🐘 Local Postgres
| App | Passed | Failed | Skipped |
|---|---|---|---|
| ✅ astro-stable-node | 171 | 0 | 29 |
| ✅ astro-stable-quickjs | 171 | 0 | 29 |
| ✅ express-stable-node | 171 | 0 | 29 |
| ✅ express-stable-quickjs | 171 | 0 | 29 |
| ✅ fastify-stable-node | 171 | 0 | 29 |
| ✅ fastify-stable-quickjs | 171 | 0 | 29 |
| ✅ hono-stable-node | 171 | 0 | 29 |
| ✅ hono-stable-quickjs | 171 | 0 | 29 |
| ✅ nest-stable-node | 171 | 0 | 29 |
| ✅ nest-stable-quickjs | 171 | 0 | 29 |
| ✅ nextjs-turbopack-canary-node | 199 | 0 | 1 |
| ✅ nextjs-turbopack-canary-quickjs | 199 | 0 | 1 |
| ✅ nextjs-turbopack-quickjs-snapshot | 199 | 0 | 1 |
| ✅ nextjs-turbopack-stable-node | 199 | 0 | 1 |
| ✅ nextjs-turbopack-stable-quickjs | 199 | 0 | 1 |
| ✅ nextjs-webpack-canary-node | 199 | 0 | 1 |
| ✅ nextjs-webpack-canary-quickjs | 199 | 0 | 1 |
| ✅ nextjs-webpack-stable-node | 199 | 0 | 1 |
| ✅ nextjs-webpack-stable-quickjs | 199 | 0 | 1 |
| ✅ nitro-stable-node | 171 | 0 | 29 |
| ✅ nitro-stable-quickjs | 171 | 0 | 29 |
| ✅ nuxt-stable-node | 171 | 0 | 29 |
| ✅ nuxt-stable-quickjs | 171 | 0 | 29 |
| ✅ sveltekit-stable-node | 190 | 0 | 10 |
| ✅ sveltekit-stable-quickjs | 190 | 0 | 10 |
| ✅ tanstack-start-node | 171 | 0 | 29 |
| ✅ tanstack-start-quickjs | 171 | 0 | 29 |
| ✅ vite-stable-node | 171 | 0 | 29 |
| ✅ vite-stable-quickjs | 171 | 0 | 29 |
✅ 🪟 Windows
| App | Passed | Failed | Skipped |
|---|---|---|---|
| ✅ nextjs-turbopack-node | 194 | 0 | 6 |
| ✅ nextjs-turbopack-quickjs | 194 | 0 | 6 |
✅ 🌐 Cross-language Conformance
| App | Passed | Failed | Skipped |
|---|---|---|---|
| ✅ python | 68 | 0 | 107 |
✅ dynamic-runs
| App | Passed | Failed | Skipped |
|---|---|---|---|
| ✅ astro-vercel | 0 | 0 | 0 |
| ✅ example-vercel | 0 | 0 | 0 |
| ✅ express-vercel | 0 | 0 | 0 |
| ✅ fastify-vercel | 0 | 0 | 0 |
| ✅ hono-vercel | 0 | 0 | 0 |
| ✅ nest-vercel | 0 | 0 | 0 |
| ✅ nextjs-turbopack-vercel | 0 | 0 | 0 |
| ✅ nextjs-webpack-vercel | 0 | 0 | 0 |
| ✅ nitro-vercel | 0 | 0 | 0 |
| ✅ nuxt-vercel | 0 | 0 | 0 |
| ✅ sveltekit-vercel | 0 | 0 | 0 |
| ✅ tanstack-start-vercel | 0 | 0 | 0 |
| ✅ vite-vercel | 0 | 0 | 0 |
✅ local-postgres-spec9
| App | Passed | Failed | Skipped |
|---|---|---|---|
| ✅ nextjs-turbopack-stable-node | 19 | 0 | 156 |
| ✅ nextjs-turbopack-stable-quickjs | 19 | 0 | 156 |
✅ vercel-http-transport
| App | Passed | Failed | Skipped |
|---|---|---|---|
| ✅ example | 146 | 0 | 54 |
| ✅ express | 146 | 0 | 54 |
| ✅ hono | 146 | 0 | 54 |
| ✅ nextjs-turbopack | 173 | 0 | 27 |
| ✅ nitro | 146 | 0 | 54 |
| ✅ vite | 146 | 0 | 54 |
✅ vercel-multi-region
| App | Passed | Failed | Skipped |
|---|---|---|---|
| ✅ nextjs-turbopack | 27 | 0 | 0 |
✅ vercel-spec9
| App | Passed | Failed | Skipped |
|---|---|---|---|
| ✅ nextjs-turbopack-node | 172 | 0 | 28 |
| ✅ nextjs-turbopack-quickjs | 172 | 0 | 28 |
✅ vercel-ws-transport
| App | Passed | Failed | Skipped |
|---|---|---|---|
| ✅ example | 146 | 0 | 54 |
| ✅ express | 146 | 0 | 54 |
| ✅ nextjs-turbopack | 173 | 0 | 27 |
| ✅ vite | 146 | 0 | 54 |
pranaygp
left a comment
There was a problem hiding this comment.
LGTM. Renaming the on-disk Astro manifest to _manifest.json follows the same _ convention as the debug files and __step_registrations.js. The leftover-manifest.json cleanup only targets the old file, not the manifest.json.js public route. The only consumer of the on-disk path is the e2e manifest check, which this PR updates; the CLI and web discovery paths never looked under src/pages. createManifest's new manifestFileName defaults to the old name, so other builders don't change, and /* @vite-ignore */ is only a comment. base-builder-logging.test.ts passes locally. CI was still running when I approved, with no failures so far.
Sim WorldSimulated world deterministic testing for races. Traces 🟢 world-sim scenario book — 0 fail of 45 total
Full trace: |
About these numbersSizes are gzip; parentheses show the change against
|
|
No backport to This change only silences build/dev warnings from Astro 5 and Vite. Nothing in the generated workflow output is broken, so it is log-noise cleanup rather than a stability fix. To get there it renames the on-disk Astro manifest to To override, re-run the Backport to stable workflow manually via |
### Description Docs follow-ups for user-facing changes merged on Nov 2 that shipped without docs on these pages: - **CLI and Web UI**, **Vercel World**: `--project` (ID or slug) and `--team` take precedence over the `.vercel` link, and in a monorepo the CLI uses the nearest `.vercel/project.json` (#5182). - **`createWebhook`**: outside Vercel, `url` uses `PORT`, then the detected server port (#5184). - **Sequential and parallel cookbook**: says `Promise.race` behaves as in plain JavaScript. #5187 is being reverted, so it isn't documented here. #5100 is a bug fix that makes `Promise.race` behave as users expect, so it needs no docs beyond the cookbook wording. #5183, #5189, #5190 and #4909 don't change anything users do. ### Docs Preview - [CLI and Web UI: `--project`](https://workflow-docs-git-workflow-docs-cleanup-tue-3-nov.vercel.sh/docs/configuration/cli-and-web-ui#--project) - [Vercel World: Observability](https://workflow-docs-git-workflow-docs-cleanup-tue-3-nov.vercel.sh/worlds/vercel#observability) - [createWebhook](https://workflow-docs-git-workflow-docs-cleanup-tue-3-nov.vercel.sh/docs/api-reference/workflow/create-webhook) - [Sequential and parallel: How it works](https://workflow-docs-git-workflow-docs-cleanup-tue-3-nov.vercel.sh/cookbook/common-patterns/sequential-and-parallel#how-it-works) ### PR Checklist - Required to merge - [x] 🔒 DCO sign-off included on every commit 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: vercel[bot] <35613825+vercel[bot]@users.noreply.github.com> Co-authored-by: Pranay Prakash <1797812+pranaygp@users.noreply.github.com>
On Astro 5, every build and dev route scan printed:
@workflow/astrowrites the workflow manifest next to the generated routes insrc/pages/.well-known/workflow/v1/. Astro 5 warns about any non-route file in the pages dir unless its name starts with_. Astro 6+ only warns for.tsx/.jsx/.vue/.svelte, which is whyworkbench/astro(Astro 7) never showed it. This is not a regression: the file has been there since the manifest was introduced, so 5.0.x warns on Astro 5 too.Changes:
@workflow/astro: write the manifest as_manifest.json, the same_convention the generated debug files and__step_registrations.jsalready use. Delete a leftovermanifest.jsonfrom earlier builds. TheWORKFLOW_PUBLIC_MANIFEST=1route (manifest.json.js, served at/.well-known/workflow/v1/manifest.json) is unchanged.@workflow/builders:createManifesttakes an optionalmanifestFileName(defaultmanifest.json).@workflow/core: add/* @vite-ignore */to the custom-worldimport(), which silences Vite's "dynamic import cannot be analyzed" warning for__step_registrations.jsin Vite-based dev servers.Consumers of the on-disk file: only the
manifest.test.tse2e check reads the Astro path (updated). The CLI and web UI manifest discovery never looked undersrc/pages, so nothing there changes.Verification:
@astrojs/vercel:astro buildprinted the warning before and does not after. Inastro dev, neither warning appears and a workflow run completes.workbench/astro(WORKFLOW_PUBLIC_MANIFEST=1): build,manifest.test.ts, and a subset ofe2e.test.tsagainst the prod server pass. The public manifest route still serves the JSON.🤖 Generated with Claude Code