Skip to content

[vitest-plugin] Support Vitest 5 - #15500

Open
penalosa wants to merge 11 commits into
mainfrom
penalosa/vitest-5
Open

penalosa wants to merge 11 commits into
mainfrom
penalosa/vitest-5

Conversation

@penalosa

@penalosa penalosa commented Sep 3, 2026 •

Copy link
Copy Markdown
Contributor

Fixes #15618

Add Vitest 5 support to @cloudflare/vitest-plugin while retaining support for Vitest 4.1.11.

This is a major release because the plugin now requires Workerd's new module registry. If legacy_module_registry is configured, the plugin enables new_module_registry instead and uses the V2 module fallback protocol. This removes the legacy V1 fallback implementation and its Vitest-version-specific transforms.

Vitest 5 writes Istanbul coverage files from the runner. The plugin reuses the Vitest browser host-command path to forward coverage data through its loopback service to the Node host. The host now chooses the configured coverage directory; Worker requests cannot supply or override a host filesystem path. Repository tests are updated for the Vitest 5 APIs, and CI includes an exact Vitest 4.1.11 compatibility lane.


  • Tests
    • Tests included/updated
    • Automated tests not possible - manual testing has been completed as follows:
    • Additional testing not necessary because:
  • Public documentation
    • Cloudflare docs PR(s):
    • Documentation not necessary because: supported versions and the module-registry requirement are captured in the package peer dependency and changeset.

Validated with:

  • pnpm test:ci --filter @cloudflare/vitest-plugin (Vitest 5: 25 files passed, 91 tests passed, 1 skipped)
  • VITEST_VERSION=4.1.11 pnpm test:ci --filter @cloudflare/vitest-plugin (25 files passed, 91 tests passed, 1 skipped)
  • pnpm test:ci --filter @fixture/vitest-plugin-examples (61 files passed, 169 tests passed)
  • pnpm check --filter @cloudflare/vitest-plugin
  • pnpm prettify

Note

This is a contribution from an AI agent: Codex, GPT-5.


Devin Review

@changeset-bot

changeset-bot Bot commented Sep 3, 2026 •

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 160d3a4

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

This PR includes changesets to release 1 package
Name Type
@cloudflare/vitest-plugin Major

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

@workers-devprod
workers-devprod requested review from a team and NuroDev and removed request for a team September 3, 2026 22:47
@workers-devprod

workers-devprod commented Sep 3, 2026 •

Copy link
Copy Markdown
Contributor

Codeowners approval required for this PR:

  • @cloudflare/wrangler
Show detailed file reviewers
  • .changeset/tidy-spiders-test.md: [@cloudflare/wrangler]
  • .github/workflows/test-and-check.yml: [@cloudflare/wrangler]
  • fixtures/vitest-plugin-examples/package.json: [@cloudflare/wrangler]
  • packages/vitest-plugin/package.json: [@cloudflare/wrangler]
  • packages/vitest-plugin/src/pool/index.ts: [@cloudflare/wrangler]
  • packages/vitest-plugin/src/pool/loopback.ts: [@cloudflare/wrangler]
  • packages/vitest-plugin/src/pool/module-fallback.ts: [@cloudflare/wrangler]
  • packages/vitest-plugin/src/worker/index.ts: [@cloudflare/wrangler]
  • packages/vitest-plugin/src/worker/types-ambient.d.ts: [@cloudflare/wrangler]
  • packages/vitest-plugin/test/coverage.test.ts: [@cloudflare/wrangler]
  • packages/vitest-plugin/test/global-setup.ts: [@cloudflare/wrangler]
  • packages/vitest-plugin/test/module-fallback.test.ts: [@cloudflare/wrangler]
  • packages/vitest-plugin/test/validation.test.ts: [@cloudflare/wrangler]
  • packages/vitest-plugin/turbo.json: [@cloudflare/wrangler]
  • pnpm-lock.yaml: [@cloudflare/wrangler]
  • pnpm-workspace.yaml: [@cloudflare/wrangler]

devin-ai-integration[bot]

This comment was marked as resolved.

@pkg-pr-new

pkg-pr-new Bot commented Sep 4, 2026 •

Copy link
Copy Markdown
@cloudflare/autoconfig

npm i https://pkg.pr.new/@cloudflare/autoconfig@15500

@cloudflare/build-output-utils

npm i https://pkg.pr.new/@cloudflare/build-output-utils@15500

@cloudflare/codemods

npm i https://pkg.pr.new/@cloudflare/codemods@15500

@cloudflare/config

npm i https://pkg.pr.new/@cloudflare/config@15500

@cloudflare/containers-shared

npm i https://pkg.pr.new/@cloudflare/containers-shared@15500

create-cloudflare

npm i https://pkg.pr.new/create-cloudflare@15500

@cloudflare/deploy-helpers

npm i https://pkg.pr.new/@cloudflare/deploy-helpers@15500

@cloudflare/kv-asset-handler

npm i https://pkg.pr.new/@cloudflare/kv-asset-handler@15500

miniflare

npm i https://pkg.pr.new/miniflare@15500

@cloudflare/pages-functions

npm i https://pkg.pr.new/@cloudflare/pages-functions@15500

@cloudflare/pages-shared

npm i https://pkg.pr.new/@cloudflare/pages-shared@15500

@cloudflare/runtime-types

npm i https://pkg.pr.new/@cloudflare/runtime-types@15500

@cloudflare/unenv-preset

npm i https://pkg.pr.new/@cloudflare/unenv-preset@15500

@cloudflare/vite-plugin

npm i https://pkg.pr.new/@cloudflare/vite-plugin@15500

@cloudflare/vitest-plugin

npm i https://pkg.pr.new/@cloudflare/vitest-plugin@15500

@cloudflare/workers-auth

npm i https://pkg.pr.new/@cloudflare/workers-auth@15500

@cloudflare/workers-editor-shared

npm i https://pkg.pr.new/@cloudflare/workers-editor-shared@15500

@cloudflare/workers-utils

npm i https://pkg.pr.new/@cloudflare/workers-utils@15500

wrangler

npm i https://pkg.pr.new/wrangler@15500

commit: 160d3a4

Comment thread pnpm-workspace.yaml Outdated
Comment on lines +42 to +44
# TEMPORARY: Test compatibility with the newly released Vitest 5 packages.
- "vitest"
- "@vitest/*"

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should probably set a reminder to make a quick PR to remove these next week once the minimum age has passed, just so it's not left lingering forever.

Comment thread pnpm-workspace.yaml
Comment on lines +190 to +196
- name: Run Vitest 4 compatibility tests
if: steps.changes.outputs.everything_but_markdown == 'true' && matrix.suite == 'packages-and-tools' && matrix.os == 'ubuntu-latest'
run: pnpm test:ci --filter @cloudflare/vitest-plugin
env:
NODE_OPTIONS: "--max_old_space_size=8192"
VITEST_VERSION: "4.1.11"
CI_OS: ${{ matrix.description }}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm assuming we are just going to keep this around for as long as we support Vitest v4?

Comment thread fixtures/browser-run/test/index.spec.ts Outdated
} satisfies TestOptions;

describe.sequential("Local Browser", () => {
describe("Local Browser", { concurrent: false }, () => {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just to note down some of the reasons for the changes: Reason

}

await fs.mkdir(directory, { recursive: true });
const filePath = path.join(directory, `coverage-${crypto.randomUUID()}.json`);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just as a sanity check: Is this file name / folder structure following any convention, such as what Vitest already would generate on its own, or just what we think is a suitable file name / folder structure?

contents = withImportMetaUrl(contents, targetUrl);
// Vitest 5 includes `import.meta.url` in diagnostic prose. Rewriting it
// would insert an unescaped string literal into the surrounding string.
if (!/[/\\]vitest[/\\]dist[/\\]module-evaluator\.js$/.test(filePath)) {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is it worth moving this regex pattern to the top-level and adding some basic unit tests for it?

Comment on lines +13 to +16
for (const moduleRegistry of [
"legacy_module_registry",
"new_module_registry",
] as const) {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit pick: Any reason we couldn't use test.each here instead?

Comment on lines +66 to +72
"minimumReleaseAgeExclude:",
' - "@cloudflare/*"',
' - "miniflare"',
' - "wrangler"',
' - "workerd"',
' - "vitest"',
' - "@vitest/*"',

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is this just needed now?

devin-ai-integration[bot]

This comment was marked as resolved.

@garysassano

Copy link
Copy Markdown

Consumer validation from the current pkg.pr.new build at 7b89dc4:

  • Node.js 24.20.0 and Vitest 5.0.0
  • SELF.fetch through a configured Durable Object namespace, with the Durable Object publishing to a Queue: 1 file and 3 tests passed
  • A queue handler using the cloudflare:test env with an R2 binding (put, list, get, and delete): 1 file and 2 tests passed
  • TypeScript type checks and linting passed in both projects

I installed the preview with:

npm install --save-dev vitest@5.0.0 https://pkg.pr.new/@cloudflare/vitest-plugin@15500

No source, test, or Vitest configuration changes were needed beyond updating the dependencies. This covers the cloudflare:test SELF and env APIs plus Durable Objects, Queues, and R2. Thanks for adding the compatibility lane for Vitest 4 as well.

eve0415 added a commit to eve0415/website that referenced this pull request Sep 6, 2026
Routine dependency refresh, plus the config changes Vitest 5 needs.

## Dependencies

Vitest and `@vitest/coverage-istanbul` go to 5.0.0, wrangler to 4.129.0,
Playwright to 1.63.0, oxlint/oxfmt/oxc and the remaining devDependencies
to their current releases, and pnpm to 12.3.4. Node moves to 24.20.0 in
all three places that pin it — `devEngines.runtime`, `engines.node` and
`.node-version`.

`@cloudflare/vitest-plugin` is the exception: it runs from the preview
build of cloudflare/workers-sdk#15500 rather
than a published version. Published 1.1.4 corrupts Vitest 5's module
evaluator while rewriting `import.meta.url`, so under Vitest 5 no test
file starts at all. That preview declares its workspace siblings as
pkg.pr.new URLs, which pnpm rejects as exotic subdeps, so
`pnpm-workspace.yaml` pins `miniflare` and `wrangler` back to what
published 1.1.4 resolves. The overrides are scoped to the plugin —
unscoped, they also rewrote the peer range of the repo's own wrangler
and `@cloudflare/vite-plugin`, which would have silently pinned a later
wrangler bump back. Both the dependency and the overrides come out once
the fix ships in a release.

## Devcontainer

The image moves to `5.1.2-24-trixie` and the github-cli feature to
1.1.2. `onCreateCommand` is gone: `typescript-node` builds on
`javascript-node`, which uses `ghcr.io/devcontainers/features/node:2` at
`"version": "none"` — that setting skips only the nvm install, and the
feature still installs pnpm globally. The pinned `pnpm@11.21.0` was
therefore downgrading the image's own copy in place, which
`packageManager` then pulled forward again on the first invocation.

## Test config

Two behaviour changes in Vitest 5 reach `vitest.config.ts`:

- Inline projects now extend the root config by default, so the `SHARED`
spread each project carried is a duplicate of what they already inherit.
Removed; the options move to the root `test` block. `sequence` was
already at the root for the separate reason noted in the old comment,
and stays there.
- Glob-keyed coverage thresholds no longer inherit a top-level
`perFile`. With no global metric thresholds in this config, the outer
`perFile` reached nothing, so each glob entry now carries `perFile:
true` itself.

## Review

CI is the check that matters here — the lint, build, vitest and
Playwright steps all run against the preview plugin build for the first
time.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

https://claude.ai/code/session_01G9YZoAViKnPNMejgYADysN

---------

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
@workers-devprod

Copy link
Copy Markdown
Contributor

Codeowners approval required for this PR:

  • @cloudflare/wrangler
Show detailed file reviewers
  • .changeset/tidy-spiders-test.md: [@cloudflare/wrangler]
  • .github/workflows/test-and-check.yml: [@cloudflare/wrangler]
  • fixtures/vitest-plugin-examples/module-resolution/vitest.new-module-registry.config.ts: [@cloudflare/wrangler]
  • fixtures/vitest-plugin-examples/package.json: [@cloudflare/wrangler]
  • packages/vitest-plugin/package.json: [@cloudflare/wrangler]
  • packages/vitest-plugin/src/pool/index.ts: [@cloudflare/wrangler]
  • packages/vitest-plugin/src/pool/loopback.ts: [@cloudflare/wrangler]
  • packages/vitest-plugin/src/pool/module-fallback.ts: [@cloudflare/wrangler]
  • packages/vitest-plugin/src/worker/index.ts: [@cloudflare/wrangler]
  • packages/vitest-plugin/src/worker/types-ambient.d.ts: [@cloudflare/wrangler]
  • packages/vitest-plugin/test/coverage.test.ts: [@cloudflare/wrangler]
  • packages/vitest-plugin/test/global-setup.ts: [@cloudflare/wrangler]
  • packages/vitest-plugin/test/loopback.test.ts: [@cloudflare/wrangler]
  • packages/vitest-plugin/test/module-fallback.test.ts: [@cloudflare/wrangler]
  • packages/vitest-plugin/test/new-module-registry.test.ts: [@cloudflare/wrangler]
  • packages/vitest-plugin/test/validation.test.ts: [@cloudflare/wrangler]
  • packages/vitest-plugin/turbo.json: [@cloudflare/wrangler]
  • pnpm-lock.yaml: [@cloudflare/wrangler]
  • pnpm-workspace.yaml: [@cloudflare/wrangler]

@devin-ai-integration devin-ai-integration Bot left a comment •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note

Newer findings are available below. Devin Review posted a newer report on this PR, in addition to the findings presented here.

Devin Review found 1 new potential issue.

2 flags not posted on this PR by your GitHub settings — view them in Devin Review. (Configure)

Devin Review

Comment on lines +370 to 371
if (parsed === null || parsed.protocol !== "v2") {
return new Response("Invalid module fallback request", { status: 400 });

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔴 Auxiliary worker imports lose fallback

An auxiliary worker using the legacy registry receives 400 for every module fallback request. buildProjectWorkerOptions migrates only the runner's flags. Unbundled imports in auxiliary workers fail to load.

Prompt for agents
The module fallback handler now accepts only V2 requests, but buildProjectWorkerOptions changes only the runner worker to new_module_registry. Auxiliary workers are copied unchanged and commonly use older compatibility dates or legacy_module_registry, so they continue issuing V1 fallback requests to the shared unsafeModuleFallbackService and receive 400 responses. Update the worker-option construction so every worker using this fallback service uses the V2 registry, while preserving each auxiliary worker's other compatibility settings. Add an integration test with an auxiliary worker on an old compatibility date whose script requires fallback resolution.
Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

coldter added a commit to coldter/worker-template-2026 that referenced this pull request Sep 10, 2026
Bump React to 19.3, Hono to 4.13.7, Zod to 4.6.1, Better Auth to 1.7.3,
Biome to 2.5.12, Storybook to 10.6, Wrangler to 4.130, Vitest to 5.

Replace the deprecated @cloudflare/vitest-pool-workers with its renamed
successor @cloudflare/vitest-plugin and pin vitest to 4.1.11 in apps/server,
since the Workers test integration does not support vitest 5 yet
(cloudflare/workers-sdk#15500). Add the missing @vitest/coverage-v8 dev
dependency so test:coverage runs.
@marshallswain

Copy link
Copy Markdown

Consumer report: preview @cloudflare/vitest-plugin@3c81eea on a large Durable Object–heavy suite

Tested the preview build against a private monorepo's Workers API suite: 139 files / 1,308 tests, heavy on Durable Objects (SQLite), D1 and KV, with singleWorker: true. Setup: macOS on an M3 Max, Node 24.13.1, pnpm 10.

Correctness: works. No changes to vitest.config.ts were needed. Pass/fail results matched Vitest 4.1.8 exactly, and the only failure is a known bug in our own code. Nothing broke under the new module registry: CJS/WASM-heavy dependencies (@noble/post-quantum, Automerge) and Babel-transformed TC39 decorator sources all load.

Performance: slower for us. Each row is a single run:

Vitest Wall Module loading* Test time
Current plugin 1.x 4.1.8 269s 3,489s 344s
Preview 5.0.2 401s 5,086s 584s

*For v4, this is the Duration line's import. For v5, it's transform + import, because v5 splits the old import number into two. v5 figures came from a small custom reporter, since the Duration line now shows percentages.

Caveat: the preview also pulls in newer wrangler (4.142.0) and miniflare/workerd preview builds. We couldn't separate the Vitest change from the runtime change.

fsModuleCache: true fails every test file:

no such file or directory, readAll '<repo>/node_modules/.vitest-cache/<hash>'

The cache files exist on disk. It looks like the runner inside workerd tries to read host paths directly. vitest doctor reports transforms at 86–89% of tracked time, so this cache is the option that should help DO-heavy suites most, and it's the one that's blocked.

Install notes:

  • @vitest/runner has no 5.x release (latest is 4.1.11). A project that pins it alongside the plugin's old peer range fails to install until it's removed.
  • The preview installs as 1.3.0, with peer range vitest ^4.1.11 || ^5.0.0. The PR's changeset marks it as a major release, so the version number might surprise people.

Happy to rerun with a matching workerd version, or to test a build with module-cache support.

majeanson pushed a commit to majeanson/homeboi that referenced this pull request Sep 29, 2026
…u 29 décembre

Le balayage a été rouge trois lundis sans que personne le sache : un cron n'a pas de
pousseur à qui GitHub écrirait. `scheduled-red.yml` écoute les trois harnais planifiés,
ouvre (ou commente) une issue « Scheduled red: <nom> » sur un échec planifié, et la ferme
au prochain vert. `scripts/scheduled-red.test.mjs` tient la liste à jour — planté rouge
deux fois (un workflow retiré de la liste, un nom mal orthographié), vert restauré.

STATE : F37 « L'autre parent » GARDÉ (Marc), revue vers le 2026-12-29 ; Vitest 5 attend
cloudflare/workers-sdk#15500.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
zachthedev added a commit to zachthedev/uddns that referenced this pull request Sep 30, 2026
@cloudflare/vitest-plugin 1.x peers on @vitest/runner, which vitest 5
inlines and does not publish, so the workers pool fails to start and
the test row goes red on every OS. Renovate now keeps vitest and the
@vitest packages below 5.0.0 until the plugin's next major ships.

Refs: cloudflare/workers-sdk#15500
AdiRishi added a commit to AdiRishi/pakshi that referenced this pull request Oct 1, 2026
Adds the second of three kinds of tests: E2E tests run a Worker on the
Cloudflare Vitest plugin, with real D1, KV, R2, Durable Objects,
WebSockets, alarms and scheduled events. studio-api's cover setting up,
invitations and password resets, publishing, merging, rollback and the
reconcile job, approvals, live editing, previews, the agent route and
brand updates.

The plugin supports Vitest 4 only, so it is patched with the Vitest 5
support from cloudflare/workers-sdk#15500. infra lists a stand-in for
every Worker binding under Miniflare, checked against each Worker's env;
Email Service becomes a mailbox tests read, and Workers AI a stand-in that
refuses every call. ADR 0003 sets out the three kinds.
@DG02002

DG02002 commented Oct 1, 2026

Copy link
Copy Markdown

Any update guys?

@workers-devprod

Copy link
Copy Markdown
Contributor

Codeowners approval required for this PR:

  • @cloudflare/wrangler
Show detailed file reviewers
  • .changeset/tidy-spiders-test.md: [@cloudflare/wrangler]
  • .github/workflows/test-and-check.yml: [@cloudflare/wrangler]
  • fixtures/vitest-plugin-examples/module-resolution/vitest.new-module-registry.config.ts: [@cloudflare/wrangler]
  • fixtures/vitest-plugin-examples/package.json: [@cloudflare/wrangler]
  • packages/vitest-plugin/package.json: [@cloudflare/wrangler]
  • packages/vitest-plugin/src/pool/index.ts: [@cloudflare/wrangler]
  • packages/vitest-plugin/src/pool/loopback.ts: [@cloudflare/wrangler]
  • packages/vitest-plugin/src/pool/module-fallback.ts: [@cloudflare/wrangler]
  • packages/vitest-plugin/src/worker/index.ts: [@cloudflare/wrangler]
  • packages/vitest-plugin/src/worker/types-ambient.d.ts: [@cloudflare/wrangler]
  • packages/vitest-plugin/test/coverage.test.ts: [@cloudflare/wrangler]
  • packages/vitest-plugin/test/global-setup.ts: [@cloudflare/wrangler]
  • packages/vitest-plugin/test/loopback.test.ts: [@cloudflare/wrangler]
  • packages/vitest-plugin/test/module-fallback.test.ts: [@cloudflare/wrangler]
  • packages/vitest-plugin/test/new-module-registry.test.ts: [@cloudflare/wrangler]
  • packages/vitest-plugin/test/validation.test.ts: [@cloudflare/wrangler]
  • packages/vitest-plugin/turbo.json: [@cloudflare/wrangler]
  • pnpm-lock.yaml: [@cloudflare/wrangler]
  • pnpm-workspace.yaml: [@cloudflare/wrangler]

AdiRishi pushed a commit to AdiRishi/promptrc that referenced this pull request Oct 3, 2026
- packageManager pnpm@12.8.2 (12.9.0 is under a day old)
- minimumReleaseAge: 1440 in pnpm-workspace.yaml, with no exclusions
- @cloudflare/vitest-plugin 1.3.6 -> 1.3.5 so the whole tree satisfies the
  policy (drops the day-old wrangler 4.147.0); the Vitest 5 backport from
  cloudflare/workers-sdk#15500 is regenerated against 1.3.5
- lockfile rebuilt from scratch with pnpm 12

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014VtE1mgUmygPAPy6irvPEu
lcv-leo added a commit to LCV-Ideas-Software/admin-app that referenced this pull request Oct 3, 2026
Corrige os dois achados de revisão da atualização oficial de testes
TLS-RPT: o Wrangler de deploy passa a resolver sua árvore de 91
artefatos integralmente a partir do registry oficial, e `picomatch`
4.0.7 atende ao requisito original `^4.0.7` do Vitest 5.0.3.

A integração de testes usa a prévia oficial Cloudflare workers-sdk
[#15500](cloudflare/workers-sdk#15500), fixada
no commit `160d3a445597e650500253831000f3dffc624fa8`, conforme aprovação
do operador. Os overrides seguem o [mecanismo nativo do
npm](https://docs.npmjs.com/cli/v11/configuring-npm/package-json/#overrides):
a subárvore de testes conserva os artefatos de prévia e a de deploy
conserva nome, versão, URL e integridade dos 91 artefatos da base. Os
manifests originais publicados de 13 pacotes foram verificados por SRI;
as 24 relações afetadas pelos overrides satisfazem suas faixas originais
ou URLs exatas.

O lockfile foi regenerado pelo npm. Os dez gates locais obrigatórios
passaram, incluindo 1.031 testes, build, análise estática e os dry-runs
de deploy. Os avisos integrais e a cópia pública foram atualizados e
comparados por bytes. Nenhum peer foi forçado. A prévia não é uma
release estável do upstream; o uso histórico de stackback e as demais
obrigações de distribuição continuam delimitados na LCV-211.

Related to LCV-211
AdiRishi added a commit to AdiRishi/promptrc that referenced this pull request Oct 3, 2026
…orschemes, prompt kinds, latest toolchain (#23)

* chore: rebuild toolchain on TS 7, Oxc and Vitest 5

- Upgrade every dependency to its latest release (React 19.3, Vite 8.3,
  TanStack Start 1.168, Clerk 1.6, Tailwind 4.3, Wrangler 4.146)
- TypeScript 7 (native tsgo compiler) for typechecking
- Replace ESLint + Prettier with type-aware Oxlint (tsgolint) and Oxfmt,
  keeping import sorting and Tailwind class sorting
- Enable the React Compiler through the native oxc port in plugin-react 6
- Move from @cloudflare/vitest-pool-workers to its successor
  @cloudflare/vitest-plugin and patch in Vitest 5 support from
  cloudflare/workers-sdk#15500 (new module registry, weak_ref, node:process
  fallback, coverage loopback) so the workers pool runs on Vitest 5
- Drop unused deps (next-themes, web-vitals, TanStack devtools)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014VtE1mgUmygPAPy6irvPEu

* feat: add prompt kinds, pinning, notes, benchmark runs and template variables

The library now keeps four kinds of things, all still Prompts underneath:
prompts (with {{variable}} / {{variable | fallback}} blanks), fragments,
sequences (steps separated by an invisible <!-- step --> marker in the body)
and benchmarks (an expected result plus a run log of model + verdict).

- Additive D1 migration (kind, pinned, notes, runs_json) with defaults, so
  existing rows read back as plain, unpinned Prompts
- Validation treats the new fields as optional for old localStorage
  snapshots and in-flight clients, and rejects invalid values
- Selectors gain filters (kind, pinned, category, tag), sorts, facets,
  multi-term search with #tag prefixes, and stable catalog numbers
- Store and command executor gain quick capture, pin, run logging, and
  copying with filled-in variables or a single sequence step; the executor
  now resolves the active Prompt with the current filter and sort
- Starter Prompts now demonstrate every kind
- ~100 new tests covering templates, sequences, runs, copy, back-compat
  validation and D1 round-trips of legacy and new rows

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014VtE1mgUmygPAPy6irvPEu

* feat: rebuild the interface as a commonplace book

A ground-up visual rebuild. The terminal pastiche gives way to an editorial
'commonplace book': warm paper and darkroom-ink themes (light, dark, system),
Newsreader for reading, Geist for the interface, Geist Mono for catalog
numbers, and vermilion as the single editor's-red accent. Each kind of entry
is marked with a printer's sign: ¶ prompt, “ fragment, § sequence, ※ benchmark.

- Three-pane library: sidebar (kinds, collections, tags, sync, theme), a list
  with filters/sorts and catalog numbers, and a reader that adapts per kind
- {{variables}} render as inline fill-in blanks; copying uses what you typed,
  and values are remembered per entry on this device
- Sequences read as numbered folios with per-step copy and progress
- Benchmarks get a lab sheet: expected result, pass rate, verdict history,
  and an inline run logger
- Quick capture (c) as an index card, a command palette (⌘K) built on cmdk,
  and a printed keyboard reference (?)
- New editor with a kind picker, step editor, detected blanks and notes
- Responsive single-pane layout with a drawer on phones
- Redesigned share page (blanks work there too), auth pages, empty and
  loading states, toasts, brand mark, favicon and social card
- Native radio inputs for segmented controls; type-aware lint is clean
- Dev server fixes for the upgrade: externalise cloudflare:workers for the
  dependency optimiser, pin nitro to the last beta whose workerd dev runner
  works, and pin miniflare 4 for its env-runner

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014VtE1mgUmygPAPy6irvPEu

* docs: document the commonplace-book model, tooling and design

- README rewritten around the four kinds, with screenshots, keys, stack,
  architecture and an accurate note that D1 migrations must be applied
  before deploy (wrangler deploy does not run them)
- CONTEXT.md gains Kind, Fragment, Sequence, Step, Benchmark, Run,
  Verdict, Variable, Notes and Pin; the interface now says Category, as
  the glossary asks, instead of Collection
- ADR 0004: prompt kinds share one record; sequence steps live in the body
- AGENTS.md covers Oxlint/Oxfmt, TypeScript 7, the Vitest 5 patch, the
  React Compiler, the theme tokens and the nitro/miniflare pins
- VS Code recommends the Oxc extension and formats with Oxfmt

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014VtE1mgUmygPAPy6irvPEu

* chore: move to pnpm 12 with a one-day minimum release age

- packageManager pnpm@12.8.2 (12.9.0 is under a day old)
- minimumReleaseAge: 1440 in pnpm-workspace.yaml, with no exclusions
- @cloudflare/vitest-plugin 1.3.6 -> 1.3.5 so the whole tree satisfies the
  policy (drops the day-old wrangler 4.147.0); the Vitest 5 backport from
  cloudflare/workers-sdk#15500 is regenerated against 1.3.5
- lockfile rebuilt from scratch with pnpm 12

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014VtE1mgUmygPAPy6irvPEu

* fix: address review findings in the rebuild

- Capture is refused while a Prompt is being edited; previously the sidebar
  button could retarget the open draft and overwrite the captured entry
- Saving reveals the saved Prompt when the current filter or query would
  hide it, instead of opening a different entry
- Library hotkeys are inert while the first-sign-in dialog is open
- Public share links publish the Prompt but not its notes, benchmark runs,
  pin or usage count
- Server functions enforce size limits (title, body, notes, tags, batch
  size); local snapshots stay unbounded so oversized libraries still load
- The Mod key label is resolved after hydration (no mismatch on macOS)
- Kind changes are blocked while images are uploading
- The Deploy workflow applies D1 migrations before deploying the Worker

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014VtE1mgUmygPAPy6irvPEu

* Rebuild the interface as a terminal UI

The commonplace-book look gives way to a TUI in the browser: lazygit-style
panes with titles set into their borders, a tmux tab line, a vim status
line that shows the mode, and an echo line in place of toasts.

- `:` command line with ex commands (`:sequences`, `:cd`, `:new benchmark`,
  `:y2`, `:log <model> <verdict>`, `:rm!`, `:w`, `:q`, `:colorscheme` ...),
  tab completion and history; parsing is pure and unit-tested
- Telescope-style finder (Cmd/Ctrl+K) with a live preview, and a
  PROMPTRC(1) man page generated from the command definitions
- glow/bat viewer: rendered markdown, or `r` for line-numbered raw source
  with the same fill-in slots
- benchmark ledger as test-runner output; capture as a floating shell;
  editor with YAML-style frontmatter and an INSERT mode
- seven colorschemes (promptrc, daylight, phosphor, green-screen,
  tokyo-night, catppuccin, gruvbox), CRT scanlines and glow on the CRTs
- Recursive mono throughout plus a JetBrains Mono subset for box drawing
- `1` `2` `3` focus panes; `y` yanks; mobile gets one pane at a time
- terminal-styled sign-in, share page, first-sign-in prompt, Clerk theme
- new icon, favicon and social card; README, AGENTS.md and screenshots

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014VtE1mgUmygPAPy6irvPEu

* ci: fix PR preview deploys under pnpm 12

The preview job ran wrangler-action inside .output, where Wrangler isn't
installed, so the action ran `pnpm add wrangler@4`. pnpm 12 fails that
install over unapproved build scripts (esbuild, workerd), so no preview has
deployed since the pnpm upgrade.

Run from the repo root instead, like render-md: the action uses the
project's Wrangler, and the build's .wrangler/deploy/config.json redirects
it to .output/server/wrangler.json. The preview comment is now a single
comment per PR, updated on each push with the commit it was built from.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014VtE1mgUmygPAPy6irvPEu

* Make projects the primary axis, with stacking filters and a project picker

Categories are really projects: many of them, and the first thing you
reach for. Kinds are a short fixed list you narrow by once you're
somewhere. So the filter is no longer one-of-five; it is independent parts
that stack:

  { project, kind, pinned, tag }  →  ~/.promptrc/render-md/sequences

- The library tree lists projects (A–Z, per the recorded Project Order
  decision) and the current project's tags; kind and ★ toggles with counts
  for the current project sit above the list
- `:cd <project>` keeps the kind and goes straight to the only project the
  letters could mean ("rendr" → render-md); `:sequences` keeps the project;
  `:cd ~` goes back to everything; `:all`, `:tag`, `:kind` with no argument
  clear their part
- Project identity ignores case, spacing and punctuation, so "Render MD"
  and "render-md" are one project shown under its most common spelling
- New project picker in capture and the editor: suggestions as you type,
  "did you mean …?" for typos (⏎ takes the existing project), and a new
  project is an explicit choice. Saving or capturing files a different
  spelling under the existing project
- New entries start where you are: this project, kind and tag
- Filters saved by earlier builds are upgraded on load; no D1 change, the
  record field and column stay `category`
- CONTEXT.md now says Project; ADR 0005 records the decision

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014VtE1mgUmygPAPy6irvPEu

* ci: leave D1 migrations manual; Deploy only ships the Worker

Removes the "Apply D1 migrations" step added earlier in this branch, so
.github/workflows/deploy.yml is back to what main has. Migrations stay a
deliberate, by-hand step before merging the change that needs them.

The README and AGENTS.md now say so (main's README claimed migrations run
automatically on deploy, which was never true), and spell out that there
are no preview databases: previews bind production D1 and R2.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014VtE1mgUmygPAPy6irvPEu

---------

Co-authored-by: Claude <noreply@anthropic.com>
AdiRishi added a commit to AdiRishi/pakshi that referenced this pull request Oct 3, 2026
* Squashed '.repos/effect/' changes from 14a3f14009..67ba4e46a1

67ba4e46a1 Version Packages (#8577)
8b0eac6ac4 Update readme files (#8634)
2c552f220e Consolidate changesets and fix stability tags (#8633)
735b77b65c Add Effect variants to TestSchema (#8632)
f72790c618 Preserve schema references across contextual projections (#8630)
988c467afa Close server WebSockets according to handler exit (#8598)
5f9c9d17c1 Fix MutableHashMap key retention on equal-key cache refresh (#8625)
ef7d77f382 Make Schema.brand type-only (#8628)
29e0aa7dcc Fix lost failure during concurrent layer interruption (#8585)
0af6d0c8ce Fix encoded RPC interrupt fiberId type for JSON null (#8626)
32559614d9 Stabilize Bun bundle and docgen test timeouts (#8624)
3278821a64 Fix Queue batch taker wake loop on partial offers (#8619)
83429b4202 Fix Effect.race losers left running when the race ends during startup (#8607)
5a81a6f475 Keep newer Atom.family entries when a stale finalizer runs (#8601)
918808cf68 fix .vscode tsdk paths (#8621)
10d8524dc4 Fix Schema projection check preservation (#8617)
927e01e005 Fix branded union type code generation (#8614)
035e369b3a Inline checked sources of Schema JIT transformations (#8597)
aa1947284c Stop Schema unions resolving candidate parsers on every decode (#8555)
35ac25a80b Normalize partition result order across all modules (#8583)
df77fff939 Fix flat RPC client and AtomRpc inference for a union of tags (#8579)
b07406952b Clarify schema branding guidance in v3-to-v4 migration reference (#8590)
878353689f Fail in-flight RPC streams after missed socket pong (#8593)
5250ca63c6 Fix synchronous concurrent Atom.fn results (#8589)
68b639473f Guard workflow replies against stale concurrent resets (#8576)
ee6ffbfde3 Allow MSSQL queue suite more time to acquire its test layer (#8594)
d56bd280ef Wait for suspended workflow finalizer in cluster test (#8592)
cbfc7b4220 Fix Schema brand identifier typing (#8580)
e5f7d12af9 Retry failed cluster workflow run resets (#8575)
ad61db80ef Version Packages (rc) (#8336)
34cc78833d Fix AtomRegistry missed updates through stale nodes and leaked superseded builds (#8543)
e8df3d8e76 Treat infinite PubSub capacity as unbounded (#8540)
fb718d3192 HttpApi: per-slot ParseOptions annotations with ParseOptions fallback (#8572)
aa430d89c1 Fix batch queue takes hanging after termination (#8569)
4113bc78ee fix(sql-pg): Fail transactions that PostgreSQL rolls back at COMMIT (#8558)
ccade1492c Fix atom writes dropped by batch commit listeners (#8556)
b501557939 Report MCP tool failures without an empty message or an invalid-params code (#8552)
d26a913221 Keep RPC servers answering after a malformed client line (#8541)
702c34e2af Stop cluster runners without storage from leaking request ids (#8542)
24f7d32b38 Fix interrupted queue offers after end (#8568)
d68cbd6c8f Retire fatal sql-pg sessions before resuming queries (#8570)
4bb949e64f Authorize identities before unencrypted event-log session binding (#8534)
01e78c60f9 Clarify Semaphore.releaseAll with active permit holders (#8566)
fd9095fb49 Update repository dependencies (#8562)
6bf2eb76f0 Build FindMyWay params without new Function (#8535)
0cf7655d1f fix(openapi): Keep literals and patterns on `asText` bodies (#8551)
64093976e9 Optimize schema construction (#8536)
8d070c3ead Refactor OpenAPI schema representation pipeline (#8547)
8202a6ea41 fix(openapi): Correctly mark Schema's with defaults decoders defined as optional in OpenAPI docs (#8545)
3495bd8858 Preserve Effect.repeat result types with bounded options (#8533)
2a8f5c748d Clean up SQLite transactions after failed commits (#8529)
0786152777 Fix Bun SQLite file URI opening on Linux (#8532)
cf7cfd6144 Fix return-mode toolkit stream encoding error type (#8530)
1f760401be Fix Toolkit handle decoder service requirements (#8531)
9a5a383cc6 Fix ManagedRuntime disposal ordering (#8528)
e36c35c656 Fix JSDoc validation failures (#8524)
16623c7d30 Fix JSON Schema export of built-in checks (#8482)
d470d54495 fix(observability): read OTLP export response bodies (#8522)
0a29ca6840 Discard unclaimed sql-pg background connection failures (#8514)
ccd3440963 fix(http): make HttpRouter entrypoints own their router (#8477)
67ee3b87f0 fix(cluster): order PostgreSQL shard lease locks (#8502)
330b7475e2 Add Schedule.once (#8519)
e54211a57d Restore Error.stackTraceLimit when Cause.prettyErrors throws (#8503)
a9614ff13e Clarify Scope.close interruptibility in API docs (#8515)
af510e8197 Skip LayerMap preloading when idle TTL is zero (#8511)
ff554aeb9b Keep ManagedRuntime disposal uninterruptible (#8512)
4093507c66 Fix zero-TTL cache lookups evicting live entries (#8510)
25d9e47f01 Clarify MCP tool parameter schema errors (#8507)
5e9fd25cbd Report all MCP tool parameter validation errors (#8508)
372a45de59 Fix MCP pings before initialization (#8505)
254fcc1944 Fix CLI lexing of negative number values (#8504)
3788b63bd6 Fix effect/schema test path resolution on macOS (#8494)
19835f2b92 feat(effect): Added `Config.flatMap` (#8334)
18bb92a005 docs: clarify JSON Schema decoding with the canonical codec (#8492)
c2e810cc7a Compile a recursive Schema equivalence once instead of once per value level (#8429)
8d27554650 Stop Schema compilation re-analysing every sub-schema for each enclosing schema (#8451)
2575fcc12b Stop rebuilding the parser wrappers on every SchemaParser.asserts call (#8440)
2cf4e43f02 Add Schema.StringForLiteralAutocomplete (#8366)
c8a9f8543d Simplify Config absence handling (#8488)
99a1b078ff Keep persisted queue retry-delay assertion across SQL backends (#8486)
81a0b3aaae Support Vitest fixtures in Effect tests (#8425)
92e91511e3 fix(ai-anthropic): accept messages without usage.inference_geo (#8478)
a41a4414d3 refactor: add structuredContent policy dependent on protocol (#8468)
0f42b56447 Fix Anthropic gateway 4xx error mapping (#8479)
eb02cbb3f4 fix(reactivity): defer stale-while-revalidate reads (#8421)
6b84149622 Annotate Config.fail return type as Config<never> (#8475)
d6cc5d9870 fix(http): emit buffered multipart parts before pulling input (#8420)
926e8bf4c1 fix(sql-libsql): expose the active transaction service (#8419)
1a3eb9ea60 Fix workflow execution ID collisions from ambiguous hash inputs (#8455)
5521209a76 Stop compiled Schema structs retaining an unused parse traversal (#8435)
f4dd1aec1a Fix Queue takers and offers parking forever after a yield (#8412)
58eef0addc Fix anonymous layers breaking Vitest fixture tests in the same suite (#8422)
bd14b6431a Restrict Scope.closeUnsafe to Closeable scopes (#8474)
1fd49d4e37 Fix MutableList.takeN wedging a Queue so it stops delivering messages (#8448)
c85c8c3178 Fix MCP tool annotation titles in 2025 protocol adapters (#8465)
93f826af79 Stop the Effect run loop building a success Exit between continuations (#8437)
6f44ca0b98 Fix Stream.broadcast subscribers that never end (#8410)
0981d01df8 Fix Queue lost wakeup during taker registration (#8472)
37064fdfc8 Restrict Scope.close to Closeable scopes (#8473)
4f5f866896 Stop forked Scopes registering a finalizer just to leave their parent (#8457)
dd8990bb1b Stop TxPriorityQueue.offerAll re-sorting a queue that is already sorted (#8446)
c00c8ffd48 Fix Stream.forever and Stream.repeat slowing down and leaking per repetition (#8416)
b808b5d0c0 Stop Schema array and tuple decoding running a generator it never needs (#8441)
f05fe36f87 Stop MutableList keeping a slot for every element that ever passed through a list that never empties (#8447)
508c70be13 Honor deferred startup in fiber containers (#8469)
b442528ddf Stop a recursive Schema formatter holding one compiled body per level (#8436)
382992f168 Stop fibers holding memory they no longer need (#8443)
80d5adb167 Fix PubSub losing a message, or publishing one, when a waiter is interrupted (#8449)
c760e1e074 Stop the Schema struct and array traversal allocating a context per item (#8442)
3036241e1e Stop Schema unions rebuilding their candidate list on every decode (#8428)
43bbb257c2 Fix STM transactions that never wake when a TxRef is written (#8452)
83d7c95465 Keep the failure an `onExit` finalizer was cleaning up after when it throws (#8427)
0c6c2dec86 Stop Cause.squash allocating three arrays to read one reason (#8413)
7ef0ce6f42 Fix Context copying every service after eight lookups (#8454)
537cd82174 Stop Effect.gen and Effect.fn allocating on every yield and every call (#8453)
d2f3547561 Stop building a closure chain per Effect.match call (#8439)
0c0aa5ebb0 Stop Effect spans re-resolving the tracer from the context (#8433)
6332de29a8 Stop Stream.concat chains slowing down quadratically with their length (#8445)
0860c0c125 Stop Schema code generation re-proving emittability for every property (#8430)
97afa37ed0 Stop Graph traversals allocating per visit and per relaxation (#8415)
cdec5efd02 Fix DateTime rebuilding the formatter on every call for an aliased time zone (#8414)
ca422fdf49 Fix a scope skipping its remaining finalizers when one throws (#8418)
83b7b1fc91 Fix MutableList.prependAll of no values corrupting the list (#8450)
477394deb6 Stop Schema allocating on every rest-tuple equivalence or formatter call (#8434)
aa7de26631 Fix Stream.mapEffect with concurrency hanging when the function throws (#8411)
c831e82ea6 Document how FileSystem.File cursors differ from POSIX offsets (#8432)
34e09becb6 Fix Unicode semantics in JSON Schema imports (#8459)
35ecbb9864 Fix onExcessProperty "error" rejecting non-enumerable own properties (#8423)
0cbb45792b Store NetAddress IP addresses as numbers instead of Uint8Array (#8407)
32baabcf80 Migrate unstable JSDoc tags to stability annotations (#8406)
98792c3bf8 Fix rounded OpenRouter decision probabilities (#8405)
12f512d0fa feat(sql-clickhouse): support column selection in insertQuery (#8404)
cb85792196 fix(ai-openai): preserve web searches without actions (#8400)
321d74f0f1 Stabilize concurrent Bun docgen example tests (#8401)
21214728d2 Fix PartitionedSemaphore permit loss and competing take race (#8395)
b3032f01f2 Fix four interrupt-time resource leaks in Pool, RcRef, RcMap and ScopedRef (#8390)
cdeccc7e52 Fix Chunk equality being asymmetric on sparse chunks, and stop Chunk copying what it already holds (#8371)
f9179cba72 Fix internal frames leaking into user stack traces, and stop allocating a closure per Effect step (#8386)
db7b69efff Add isNonEmpty predicates to TxHashSet, TxPubSub and TxQueue (#8361)
5709ef6c03 Add guards for HttpBodyError, CookiesError, MultipartError and NdjsonError (#8362)
54ff4f2121 Keep scoped cache lookups alive while callers remain (#8396)
17810b478d Fix cleanup registration interruption gaps (#8397)
6bc0eeea42 Fix spans that never end when a traced region is interrupted as it starts (#8387)
35ef06c56d Fix Metric updates landing in the wrong series (#8380)
107dbecab1 Fix Layer.MemoMap hanging or leaking a shared layer when a requester is interrupted (#8385)
88b79d74f1 Build Mime lookup tables on first use (#8370)
321bae616d Fix hash composition collisions in owned folds (#8360)
dd014d946a Increase multipart parser smoke test timeout (#8392)
20276b3b48 Serialize NodeTerminal fixture tests (#8393)
1519fd7b21 support raw JSON Schema dynamic tool calls (#8363)
061b9611d4 Move Arbitrary to the top-level module (#8382)
59865d1494 runtimeperf-compare: apply the working-tree diff byte for byte (#8376)
f75468a135 Restore global defaults for native property testing (#8367)
4e4fa8b184 Rename Schema checks for grammatical consistency (#8378)
6ecd4b3809 Fix Effect.txRetry parking forever on a stale read set (#8372)
287273cf55 Add Schema code point length checks, closes #8178 (#8364)
62b2ea97fe Rename HTTP API module path (#8365)
24fa0ab30b Retry OpenAI websocket turns after previous_response_not_found (#8355)
8fca194749 Fix Number.remainder precision for large operands (#8359)
d426feb658 Split encoding formats into dedicated modules (#8356)
1b4461ec3a Move unstable Effect modules to top-level paths (#8354)
b409e3f8f4 Make awaitAllChildren interruptible (#8353)
1dbc4c382c feat(PubSub): add isPubSub type guard (#8345)
7b81a95de1 feat(TxChunk): add isTxChunk type guard (#8348)
a37fa2a1c3 Refresh PlatformError migration guidance (#8352)
5bf58f15f3 Reduce BigDecimal bundle size (#8347)
31c6c1c157 Tighten AI guidance for type tests and changesets (#8346)
b8d14d3eed fix(Formatter): include Error message in formatJson (#8150)
c79088d693 Add family-aware NetAddress type helpers (#8340)
325e0fb66a Add dual forms to selected APIs (#8339)
3af6bd0803 Add isPlatformError guard (#8337)
621a65093d Preserve streamed text and tool args for nullable delta.role and tool call id (#8333)

git-subtree-dir: .repos/effect
git-subtree-split: 67ba4e46a11ccda0b6761578bfd22c04ae00167d

* Upgrade dependencies, with Effect 4.0.0 and Alchemy beta.80

Effect 4.0.0 moves its unstable modules from effect/unstable/* to
effect/*, so every such import drops the segment. @effect/tsgo 0.47 adds
an unstable-api-usage lint that flags all of Pakshi's HTTP, RPC, SQL and
AI code; it is turned off, and the overrides comment now says why the
pin stays at a stable release.

Alchemy beta.80 includes the planner fix we backported from
alchemy-run/alchemy#1379, so the patch keeps only the local Worker
provider's Durable Object storage cleanup, regenerated for beta.80.
The vitest-plugin patch for Vitest 5 is regenerated for 1.3.5, since
cloudflare/workers-sdk#15500 is still unreleased and the 1.3.3 hunks no
longer apply under pnpm 12.8.

Alchemy beta.80 and the packages published with it are under a day old,
and pnpm 12 checks the lockfile against minimumReleaseAge, so they are
excluded by exact version until they age past it.

marked stays at 17: only its types are imported, and the lexer that runs
is @tiptap/markdown's marked 17.

* Tell the model the pattern every ID and path must match again

Effect 4.0.0 exports a Schema.isPattern check as JSON Schema `pattern`
only when its RegExp has the `u` flag, the flag JSON Schema's ECMA-262
dialect assumes. Without it, the agent's tools stopped describing page
IDs, block IDs, slugs and paths to the model. Every isPattern regex now
carries the flag.

* Pass Workers AI's stream chunks to the provider with their nulls

The OpenAI-compatible provider in Effect 4.0.0 accepts null for a
delta's role and a tool-call fragment's id, the last fields Workers AI
sends as null that its parser rejected. The replacer that dropped every
null goes; the usage rewriting stays.

* Encode SHA-256 digests as hex with Effect's Hex module

Content hashes and invitation token hashes each formatted the digest's
bytes by hand.

* Give studio-api's E2E journeys room beside the other suites

A journey takes 2 to 4 seconds alone, close to Vitest's 5-second
default, and ran past it while every package's tests ran at once.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Untriaged

Development

Successfully merging this pull request may close these issues.

[vitest-pool-workers] Support Vitest v5

7 participants