Repository navigation
chore: remove dead code, slop, over tests and comment noise before open source - #400
Merged
Merged
Conversation
Brooooooklyn
added this pull request to stack #401
October 11, 2026 10:22
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
Brooooooklyn
force-pushed
the
chore/oss-cleanup
branch
from
October 11, 2026 11:54
26f93c1 to
aee2c00
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 7064d8160f
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Brooooooklyn
force-pushed
the
chore/oss-cleanup
branch
from
October 12, 2026 06:22
d0af9ff to
772ed30
Compare
Brooooooklyn
removed this pull request from stack #401
October 12, 2026 08:38
- Route plain PlatformClient endpoints through one request, error and JSON helper - Drop runLogin, saveToken, ensureCloudflaredToken, the password prompt wrapper and unused type aliases - Remove unreachable trailing-slash, login-provider default and migration warning branches - Accept only the options object in the PlatformClient constructor and default openBrowser's launcher - Trim restating comments in the client, auth and GitHub OIDC modules Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- Remove error, echo and retry cases already pinned by the permission table or sibling tests - Share GitHub CLI fixtures and the browser-callback driver in test/helpers - Use vi.stubEnv instead of hand-written env save/restore - Trim history and restating comments, and review labels in test names Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- runPlatformLogin takes the origin directly and never reads the platform registry - remove the temp registry, saved connections and VOID_API_URL holder Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- move dist/worker dir resolution to a leaf module so the plugin no longer imports deploy.ts - keep only CLI-used re-exports in deploy.ts; tests import defining modules - drop unused manifest options (vars, webSockets, duplicate workerMain), the unreachable framework live throw, metadataFetch, log.success and the needed Set - pass streamDirectR2Deploy an options object and use getContentType directly - require the provision module in scrubWranglerAuthCredentials; drift check uses buildEnv - cut stale or repeated comments in deploy, package, transport and yarn-pnp Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- delete asset-hashing.test.ts; keep the BLAKE3 pin and v2 entry check in package.test.ts - package and assemble-manifest tests: drop repeats of collectRevalidate, SPA fallback and pages cases; share one makeBindings - deploy-auth: fold repeated OIDC, Cloudflare-target and Access-pair cases into one test each; drop duplicate PATH cases and long comments - drop duplicate cases in deploy-project-setup, deploy-events, deploy-static-only and deploy-platform - cut history comments in the git-metadata test Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- inline computeAssetHashes into collectAndHashAssets, its only caller - make computeMd5 private to package.ts Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- Cut long comments and measurement notes in the email runtime to short reasons - Share one timeout race and bounded JSON reader for send, receipt and inbound - Share env readers, base64 helpers, id maker and control-character scan - Drop duplicate address-length checks, unreachable recipient checks and dead try/catch - Remove the dev inbox plugin's unreachable in-process sink; reuse afterServerReady - Point the BINDING_MISSING hint and the from JSDoc at void.config.ts Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- Fold the scattered address-rule samples into one table per form and field - Drop tests that repeat proxy, mime or own-account cases the area already pins - Share one proxy send helper, route-table compiler and isolate reply runner - Cut fix-history, review-label and measurement notes to short reasons - Remove the 60 MB header child test that never reached the projection Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- Name which deploy target uses email.from versus the platform noreply sender - Restore the limit of the dev inbox capture cap for strings with no MIME footprint Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- scanRoutes now requires the resolved inventory; drop the async scan fallbacks - routingPlugin requires getApplicationAnalysis; drop the output option and unreachable branches - emit migration routes and trigger auth through one shared helper each - merge the worker entry, queue and fetch client templates into one each - keep one asset extension list, drop unused runtime seams and generated consts - rename error renderer locals and cut long or wrong comments Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- drop compile tests that only match generated queue and trigger auth text - merge c.redirect, c.rewrite and asset rewrite cases into it.each tables - share an empty scan, compile helper and fake dev server across tests - remove duplicate asset config, route type, export and filename tests - cut bug-history and stale comments from routing tests Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- gen: build model columns and validator types from one table per dialect - gen: drop an unreachable empty-journal guard and trim runMigration comments - github: parse connect, update, status and disconnect flags with one helper - github: drop step banners, shorten JSDoc, reuse PlatformApiError.code - headers: shorten routing JSDoc and name void.config.ts instead of void.json Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- gen: drop cases that other tests already assert, share one journal fixture and exit helper, and trim history comments - domain: check rollup diagnostics in the computeRollup table instead of separate render tests - github and gen args: fold repeated parser cases into it.each tables - headers: drop redirect cases covered by the merge-routing-rules tests and a lint case that cannot warn - logs: share one stdout stub across the rendering tests Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- Restore the args.branch short-circuit so connect --branch skips the git remote/rev-parse children - Assert the empty-entries journal error keeps the void db generate hint Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- share provision-intent, ownership-marker and R2 fingerprint checks between plan and management - pass one context to addNamedPlan and drop the dead proxy hostname branch - remove VOID_PLATFORM_TIMINGS phase output and unreachable uninstall/status checks - drop the runtime purge-client probe and file-local exports - share the config auth/plans flag parser and the plan diff preview Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- add manifest, marker and zone helpers to the platform plan tests - add an upgrade command helper to the platform upgrade tests - merge the overlapping default uninstall and R2 purge tests - drop discovery, args, plan and upgrade tests that other tests already cover Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- Refuse --subdomain in the parser; delete resolveEmailDomainTarget and the renewal retarget - Share one lost-answer reconcile helper between domain add and rotate-secret - Reuse probeMx, emailConfigInputs and resolveProjectBySlug instead of local copies - Write the email apply patch directly and keep addressesWithheld local - Cut design-review essays and dead design-doc citations in the email CLI modules Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- Fold the session-blocker cases into one table that pins the exact message and no extra reads - Drop CLI email tests whose assertions the preflight and apply tests already make - Reuse the ready-account fixtures instead of inline copies - Trim the --backend, --subdomain and --project matrices to one shared code path each - Remove parser assertions from help tests and bug-fix history comments Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- Give non-add uses of --subdomain the short 'applies to domain add only' message again; only domain add gets the zone apex refusal - Make the MX check comment say that a foreign MX stops domain add - Drop the unused null from existingSendEmail and existingVars Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- drop the never-passed disposeOverride from the auth runtime API - check the auth dialect and migration schema once in createVoidAuthRuntime - share mysql/pg migration runner adapters between the worker and local runners - drop unused createVoidAuth, option and type re-exports from dialect entries - drop unused persistRoot/databaseId defaults and the unread image endpoint Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- share the @cloudflare/vite-plugin mock and getHookHandler across unit tests - fold the default auth client into the client runtime table - move the applied-migrations sort test next to the other runner cases - drop sequential race tests, a repeated slug retry test and stale mocks - stop reading .void/md.d.ts; @void/md/pages resolves to the package types - point the terminal demos README at the current deploy modules Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- a project upgraded from an older release can still have .void/md.d.ts - keep listing it in .void/tsconfig.json so the generated file stays the same - restore the md.d.ts tests that cover that branch Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- include root test/*.ts and .github/scripts/*.ts in the void typecheck so vp run check covers them - fix schema compat runner concurrency at 2 and drop its unused range check - read process.env directly in the schema fixture script - run scripts with no exports directly instead of behind a main-module guard Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- The only caller always passes a non-empty environment name. - Drop the unreachable fallback and make the option required. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- Import provision helpers statically; deploy already loads that module - Share the config-override env and dotenv checks with operations - Drop the unused argv root, queue-name union helper and runner env option - Fix stale gate and bearer comments; fold duplicate plaintext-var tests - Pass typed operations in runner tests instead of parsed argv Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- Remove the sentence saying callers of the dotenv key scan avoid loading the provisioner - The deploy transport fence now imports the provisioner directly, so the note was false Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- one clean-exit check, atomic writer, error message and relative time helper - one drizzle-kit bin path, placeholder URL map and output rollback - one own-version reader; db reuses the mysql query adapter - use node:timers/promises where no test drives the sleep with fake timers Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- restore per-worker stage timings (VOID_PLATFORM_TIMINGS=1) in worker upload - restore lifecycle phase timings in platform management commands - restore the Wrangler wording of installer error messages - cover dispatch serving the new domain and old alias after activation Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- keep the inbound forward/reply over-length address message without a colon - keep the BINDING_MISSING send error naming void.json - parse --subdomain as before (missing value, repeat) and refuse it in domain add after login and project lookup - restore the dev send_email strip test with email.from unset - restore the operator email domain verb routing test Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- wrangler sync replaces a missing or unparseable config again instead of throwing - void.config.ts rewrite validates the existing generated file again - rename-migrations re-reads the journal before rewriting and rolls back if it is gone - migration handler error keeps the base build hint - init workspace membership uses the base glob matcher again - gen migration test checks the new snapshot comes from drizzle-kit Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- the custom migration test now fails if old snapshot tables leak into the new one Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- auth: cross-origin WebSocket upgrade through the middleware gets no user - ai: parallel uses PARALLEL_API_KEY as x-api-key with no Authorization - exports: pin types/import/require targets of the four client subpaths - log: bring back the NO_COLOR and warning/error color subprocess checks - vue, svelte: island imports from a page and its layout share one manifest Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The generated virtual:void-pages-client module in every adapter exported the router, and any importer can resolve that module. Put the export back as it was: - React: keep the router returned by startReactPages and export it. - Solid, Vue: export reactiveRouter as router. - Svelte: rebuild reactiveRouter from createRouterFacade with the tracked route URL and params it reads, and export it as router. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The management token page now requires an explicit access option. Pass access: false like the other default-plan cases and read the runtime permissions through the shared helper. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The cleanup removed or narrowed these tests as duplicates. Each one guarded a behavior that no remaining test checks: - cf-build-output: `.woff2` files in a Worker bundle become `data` modules. The `.bin` case uses the same table but cannot catch a missing font entry, which is the bug the test was added for. - email-inbound: parseEmail rejects an oversized message before it reads the stream. The test stream never closes, so a read before the size check makes the test time out. - action-result: the public action() returns page validation errors as a 422 action result. - env-prod-validation: a remote secret counts as present for a non-string schema (number) without running its validator. Each test fails when its source behavior is broken on purpose. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Problem: every path matcher built a RegExp from user pattern text. V8
cannot run a pattern of about 32K units or more ("Regular expression
too large"). Routing rules ran exec() outside the try, so a 40,000-unit
redirect source threw on every request that reached it (HTTP 500).
Header and ISR patterns of that size never matched, and the app Worker
skipped them with a warning. The regexes also backtrack: '/' + 20 '*' +
'x' against a 15-unit path took 9.1 s, '/:p0*/.../:p9*/x' against 83
units took 10.7 s, and '/:a*:a*:a*:a*x' (it passes the one-splat config
check) against a 3K path ran past 60 s.
Fix: parse each pattern once into tokens (literal text, one segment, a
run that stops at line terminators, the same run with at least one
unit), cached per matcher as before. Matching fills a table over (step,
position) from right to left. Captures then walk left to right and give
each wildcard the longest span that still lets the rest match, which is
the span JS backtracking returns. A call costs at most steps x (path
length - pattern minimum + 1), with no recursion. The cases above now
take 0.002 to 0.02 ms; the worst shape at a 16 KB path (5,000 adjacent
names) takes about 0.3 s. Common rules cost a few tenths of a
microsecond more per call.
compilePattern keeps its signature and cache identity, and still throws
a SyntaxError for a repeated name or a name that starts with a digit.
Its regex field is now a deprecated getter that builds the old RegExp
on first read. Void no longer reads it: routing rules, the app Worker
middleware and the build-time Cache-Control stamp call compilePattern
only to reject malformed patterns, then matchPattern or
matchPatternCaptures.
Behavior: same booleans, captures, key order, paramNames and throws as
before for every pattern the old code could run. The one intended
change: a pattern too large for V8 is now evaluated like any other
instead of throwing or never matching. Two small fixes come with the
parser: U+E000/U+E001 typed in a revalidate pattern are plain text
(they were wildcards), and a match without names returns a
null-prototype object like a match with names, so ':constructor' in a
destination stays as written. Malformed-pattern errors have shorter
text.
Test: pattern tests use the matchers instead of .regex. New cases cover
line terminators, greedy captures, digit-led names, null-prototype
results, the deprecated regex view, a 40,000-unit pattern, slow
backtracking shapes and private-use characters, plus an oversized
routing source that no longer fails the request. Fuzz against the old
module: 500K random pattern/path pairs per matcher and 1.5M capture
checks through forced block rebuilds, 0 mismatches.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
buildVoidManifest must keep the key order of the revalidate map it is given. Platform routing picks the first matching pattern, so a reorder (for example sorting the keys) would change which TTL a path gets. toEqual ignores key order, so compare Object.entries instead. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0123r5HnanmW2VUrZ7VWDufH
A void dev worker must reject a wrong x-void-dev-trigger value on /__void/scheduled and /__void/queue, not only a missing one. The queue resolver must pick the longest "-name" suffix whatever the queue list order. The generated dispatch test now lists order-emails before emails, so together with the wrapper test both orders are covered. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0123r5HnanmW2VUrZ7VWDufH
Recovery of an attempt that is still running without a fence must leave its status at 'running', so a later failure is still recorded as 'failed' with its real error instead of an endless in-progress answer. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0123r5HnanmW2VUrZ7VWDufH
GET /__void/restarting must send a protocol-relative return value (//evil.com) to / instead of off-site, and must keep the query string of a same-origin return path (/foo?x=1) that the toast sends. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0123r5HnanmW2VUrZ7VWDufH
Send a KV entry from an older cache policy through handleIsr. It must render live (MISS) instead of serving the entry as a shared HIT, so the L2 read keeps its entry validation end to end. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0123r5HnanmW2VUrZ7VWDufH
Pair the operation and keyring rows so both trigger handlers run in a real operation child with browser credentials. This guards that `void domain remove` of the last domain sends the OAuth bearer, while keeping the keyring false row and the same number of child runs. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0123r5HnanmW2VUrZ7VWDufH
Guards that extractScript in @void/md ignores a commented-out island import in a Markdown <script> and keeps the comment and the code around the real island import in the page's client code. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0123r5HnanmW2VUrZ7VWDufH
Guards that resolvePlatformCloudflareCredential() starts Cloudflare browser login when the session is interactive and no Wrangler session exists. Every platform command resolves credentials through this wrapper, and no other test reaches its login path. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0123r5HnanmW2VUrZ7VWDufH
Check that a provision rejected for an account mismatch leaves the config as it was: account_id stays pinned to the first account and its D1 id is kept, so a retry under another account cannot pass the pin. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0123r5HnanmW2VUrZ7VWDufH
Assert the proxy URL that remote KV get/put/list, R2 get/put/delete/list and D1 batch calls hit, so a renamed endpoint in the remote binding clients fails the unit tests instead of only failing against a live proxy in `void dev` remote mode. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0123r5HnanmW2VUrZ7VWDufH
Brooooooklyn
force-pushed
the
chore/oss-cleanup
branch
from
October 12, 2026 08:39
772ed30 to
411a962
Compare
Brooooooklyn
added a commit
that referenced
this pull request
Oct 12, 2026
## Problem The pre-open-source review of the SDK, framework and CLI packages confirmed 17 high-severity bugs. Each one breaks a documented command or a common setup: ``` database void db reset / seed / export on MySQL 8 · db reset after `void db connect` · TS seeds init pnpm build approvals lost · Windows paths with spaces deploy pinned-secret Cloudflare deploys · custom binding names on managed deploys runtime remote D1 sessions · MySQL migration breakpoints · MySQL auth migrations adapters React SSR errors hang · Solid remounts on every update · Svelte island CSS config BOM-prefixed wrangler.jsonc · Astro dev ignores src/middleware.ts for good ``` ## What this PR fixes One commit per bug. Each commit message has `Bug`, `Repro`, `Cause`, `Fix` and `Test` sections for review. The review found 17 bugs; this PR has 16 fixes. The Vite+ starter fix (pnpm pinned with no build policy) was dropped: `main` now installs Vite+ projects through `vp` and keeps the project's package manager (328c186), so the bug no longer occurs. | Area | What a user hits today | After this PR | | --- | --- | --- | | `void db reset` / `seed` | After `void db connect`, drops every table in the deployed PostgreSQL/MySQL database with no prompt | Asks first on a non-local host (`--yes` skips; localhost skips) | | `void db reset` (MySQL 8) | Drops nothing, still prints "Database reset" | Drops all tables | | `void db seed` (TS) | Crashes on `void gen model` barrels after the DB is already wiped | Loads extensionless imports | | `void db export` (MySQL 8) | `Table 'app.undefined' doesn't exist` | Exports every table; restore runs with FK checks off | | `void init` (pnpm) | Rewrites the user's `allowBuilds` / `onlyBuiltDependencies` | Merges into the user's list | | `void init` (Windows) | `node` spawned through a shell breaks on paths with spaces | Spawns `node` without a shell | | `void deploy --platform cloudflare` | Pinned-secret deploys reject `limits` / `placement` / `cache` | Uploads limits, smart placement and cache with the version | | Managed `void deploy` | Ignores custom D1/KV/R2 binding names | Sends them, as `docs/reference/config.md` says | | Astro dev | Leaves `src/middleware.ts` in `.gitignore` for good | Adds the line only while dev runs | | Remote mode (`remote: true`) | `void/db` and auth crash: no `withSession` | Remote D1 binding supports sessions | | MySQL migrations | Sends `--> statement-breakpoint` lines to MySQL | Splits on breakpoints | | MySQL auth migrations | Re-runs fail on MySQL 8 (uppercase info-schema keys) | Idempotent on MySQL 8 | | React Pages SSR | A page error hangs the request | Rejects → 500 page or dev overlay | | Solid Pages | Remounts page and layouts on every navigation and deferred update | Keeps layouts; GET navigation re-creates the page (same as Vue) | | Svelte islands | Production ships raw, unscoped `<style>` CSS (or the build fails) | Bundles the compiled CSS | | Root `wrangler.jsonc` with BOM | Read fails, file treated as missing | BOM is stripped, as Wrangler does | ## How each fix was made ``` verify reproduce on the #400 head (failing test or script) fix regression test first, then the smallest fix, one commit test independent tester: the test fails with the fix reverted, affected tests, typecheck review adversarial review of the commit → a verifier checks each claim → fix-up if needed ``` ## Decisions | Topic | Decision | | --- | --- | | Reset on a remote DB | `void db connect` still writes the URL to `.env`. Only reset/seed ask before they drop tables on a non-local host. | | Managed custom binding names | Projects that already set custom names get new resources under those names on the next deploy. The old `DB`/`KV`/`STORAGE` resources stay. | | Pinned-secret deploys | Targeted placement (`region`, `host`, `hostname`) still fails, now before any API request: Cloudflare's version endpoint can drop the target, and an `--atomic` upload is live at once. The error names the key and says what to do: remove `cloudflare.placement`, or set it to `{ mode: 'smart' }`. `logpush` and `tail_consumers` are accepted but not sent. No Cloudflare version upload applies them, with or without secrets (same as `observability`). With secrets, `--atomic` deploys and the first deploy after `void secret put` also keep the live values. Without secrets, those two paths apply them through `cf deploy`. | | React SSR errors | Errors before the shell is sent reject the render. Errors after the shell keep React's default client-render fallback. | | Solid navigation | Same as Vue: GET navigation re-creates the page; mutations, `router.refresh()` and `preserveState` keep it. | ## Known limits (not in this PR) - Astro: after a hard kill (SIGKILL, crash), or in apps that ran dev with an older Void, the `src/middleware.ts` line stays in `.gitignore` until you delete it by hand. - `void db seed`: the database is reset before the seed file loads, so a seed that fails to load leaves an empty database. Base has this too. - Remote D1 sessions: `withSession()` ignores constraints and bookmarks (#403). - Svelte islands: CSS of child components that render only on the server is still missing. - MySQL migrations: a failed multi-statement migration cannot resume. Base has this too. ## Rollout ``` main ── #399 (Cloudflare e2e fixes) ── #400 (cleanup) ── this PR (high-severity bugs) ``` Merge #399 and #400 first. ## Testing | Check | Result | | --- | --- | | `vp run build:all` + `node test/check-playground-build-artifacts.mjs` | pass | | `vp run check` | pass | | `vp run test --base <#400 head>` | pass (480 files, 10,261 tests) | | Windows CI (`test: windows`) | pass | | Regression tests | One per bug; each fails when its fix is reverted | 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_0123r5HnanmW2VUrZ7VWDufH --------- Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
Before open source, a review of the SDK, framework and CLI packages (
packages/*) found 737 cleanup issues of four kinds:This PR removes them. It does not fix bugs or change behavior. The real bugs from the same review go in separate PRs.
What this PR changes
Larger items:
Decisions
@void/edgematches header, revalidate and routing patterns with a small parser instead of a RegExp built from the pattern. Results stay the same for every pattern the old code could run. Patterns too large for V8 now match instead of failing, and catastrophic backtracking is gone.void.json, "Wrangler"). Wording changes need their own PRs.router.packages/*import fromplatform/.Rollout
Stacked on #399, because both PRs touch the same installer and deploy files. Merge #399 first.
Known limits
test(cli): pass explicit access ...). This matters only for bisect, because the PR is squash-merged..github/scripts/production-baseline.ts,.github/scripts/schema-compat-tests.ts(CI only) andpackages/platform/scripts/source-revision.mjs(build time, display only).Testing
vp run build:all+node test/check-playground-build-artifacts.mjsvp run check(31 typecheck tasks)vp lint,vp fmt --check .vp test run(full suite)vp run test --base <previous head>(latest restores)🤖 Generated with Claude Code
https://claude.ai/code/session_0123r5HnanmW2VUrZ7VWDufH