Skip to content

Keep deploy dependencies in the alchemy.new archive - #267

Merged
jonbeckman merged 2 commits into
masterfrom
cursor/fix-pruned-deploy-deps-4513
Nov 13, 2026
Merged

jonbeckman merged 2 commits into
masterfrom
cursor/fix-pruned-deploy-deps-4513

Conversation

@jonbeckman

Copy link
Copy Markdown
Collaborator

Summary

solzero/solstatus@4.1.2 fails on alchemy.new with Cannot find package '@alchemy.run/cloudflare' from packages/api/infra/index.ts. The registry runs the packed archive and does not install dependencies. The release job prunes devDependencies first.

@alchemy.run/cloudflare is imported by the API and app infrastructure at deploy time, and @vitejs/plugin-react is imported by packages/app/vite.config.ts when Cloudflare.Website.Vite runs vite.createBuilder(). Those three packages are now production dependencies. effect stays resolvable from the root package. Worker sources already import production dependencies.

The packer was also dropping two files the deploy loads after that prune:

  • @cloudflare/workerd-linux-64/bin/workerd, which Node resolves when the stack imports @alchemy.run/cloudflare. The duplicate under workerd/bin/workerd stays excluded.
  • @tanstack/react-start/dist/plugin/default-entry/*, which the deploy-time Vite build loads.

A patch Tegami note is in .tegami/2026-11-13-fix-registry-deploy-dependencies.md. This does not deploy or publish.

The dry-run archive is 120.6 MiB. That is under the 256 MiB cap and above the publisher's 80 MiB warning, because the resolved workerd binary stays.

Validation

Pre-fix, after nub install --frozen-lockfile, nub run build, and nub prune --prod:

  • API and app infra: Cannot find package '@alchemy.run/cloudflare'
  • vite.createBuilder(): Cannot find package '@vitejs/plugin-react'
  • Common infra still loaded, because it already depended on @alchemy.run/cloudflare

Post-fix, the same install, build, and prune, then a dry run of SolZeroAI/alchemy-new-publish-action with the release exclude list (nothing uploaded):

  • API, app, and common infra loaded, and so did packages/infra/src/alchemy.run.ts
  • vite.createBuilder().buildApp() succeeded with the Alchemy Cloudflare plugin and nodejs_compat
  • diffable-objects imports from the packed monitor worker

nub run typecheck, nub run lint, and nub run format passed. Clef, through the AI Gateway, kept 3 of 9 tests. nub exec e2e run --changed-since origin/master passed those 3. No new test file was added: a check that only polices package.json would not catch this, and the proof is the pruned archive itself.

Sanitized logs:

  • /opt/cursor/artifacts/prefix-pruned-failure.log
  • /opt/cursor/artifacts/fixed-prune-and-vite.log
  • /opt/cursor/artifacts/packed-archive-smoke.log
  • /opt/cursor/artifacts/e2e-list.log
  • /opt/cursor/artifacts/e2e-selected-run.log

Checklist

  • I added or updated tests for behavior changes, or explained why tests are not needed.
  • I updated documentation and config examples when behavior or configuration changed.
  • I added a .tegami/ release entry, or explained why this pull request uses release:none.
  • I ran nub run typecheck, nub run lint, nub run format, and nub run test.
  • I did not include credentials, private data, internal URLs, or organization-specific defaults.
  • I did not change production deploys, registry publish, or paid spend.
Open in Web Open in Cursor 

cursoragent and others added 2 commits November 13, 2026 17:36
alchemy.new runs the packed archive without installing packages. @alchemy.run/cloudflare and @vitejs/plugin-react are loaded at deploy time, so they stay in the production dependency set.

Co-authored-by: Jonathan Beckman <jonathantbeckman@gmail.com>
The stack resolves the Linux workerd binary when it loads, and the Vite build loads TanStack Start's default entries. Leave the duplicate workerd binary out.

Co-authored-by: Jonathan Beckman <jonathantbeckman@gmail.com>
@jonbeckman
jonbeckman enabled auto-merge (squash) November 13, 2026 17:48
@github-actions

Copy link
Copy Markdown
Contributor

🟢 e2e solstatus-core: 3 passed, 6 skipped, 6 left out by filters

1 agent step · 1 replayed from cache

Change 6 files changed since 71897e7
Filter decision kept 3 of 9 tests, left out 6 (1 call, 6.5k tokens)

6 tests left out by filters
Test Filter Reason
tests/api.e2e.ts (chromium) › app API › anonymous monitor and infra requests are rejected decision 7% likely affected
tests/api.e2e.ts (chromium) › app API › better-auth routes respond without a session decision 14% likely affected
tests/cli.e2e.ts (cli) › prints Effect 4 CLI help without an Effect 3 @effect/cli peer decision 16% likely affected
tests/dashboard.e2e.ts (chromium) › dashboard › sidebar exposes Monitors navigation decision 13% likely affected
tests/library.e2e.ts (cli) › createId prefixes endpoint monitor ids and keeps them distinct decision 5% likely affected
tests/library.e2e.ts (cli) › UpdateEndpointMonitor validates url and drops id decision 14% likely affected
All 9 tests in 3 files
Test Agent Time
⏭️ tests/api.e2e.ts (cli) · 3 skipped 0ms
⏭️ app API › anonymous monitor and infra requests are rejected (skipped: engine lacks required capabilities: browser)
⏭️ app API › better-auth routes respond without a session (skipped: engine lacks required capabilities: browser)
⏭️ app API › a signed-in caller can read infra metadata and reject a duplicate quoted URL (skipped: engine lacks required capabilities: browser)
⏭️ tests/dashboard.e2e.ts (cli) · 2 skipped 0ms
⏭️ dashboard › dashboard shows endpoint monitors heading and create action (skipped: engine lacks required capabilities: browser)
⏭️ dashboard › sidebar exposes Monitors navigation (skipped: engine lacks required capabilities: browser)
⏭️ tests/monitors.e2e.ts (cli) · 1 skipped 0ms
⏭️ endpoint monitors › create an endpoint monitor through the dashboard form (skipped: engine lacks required capabilities: browser)
🟢 tests/api.e2e.ts (chromium) · 1 passed 564ms
🟢 app API › a signed-in caller can read infra metadata and reject a duplicate quoted URL 564ms
🟢 tests/dashboard.e2e.ts (chromium) · 1 passed 1 step 2.4s
🟢 dashboard › dashboard shows endpoint monitors heading and create action 1 step 2.4s
🟢 tests/monitors.e2e.ts (chromium) · 1 passed 2.9s
🟢 endpoint monitors › create an endpoint monitor through the dashboard form 2.9s

Tested by e2e 0.23.0 · 21.4s · 2 targets (chromium, cli) · run artifacts

@github-actions

Copy link
Copy Markdown
Contributor

Tegami

This repository uses Tegami to manage releases. When your changes affect published packages, add a changelog file under .tegami/ before merging.

Create a changelog → · Changelog format

Release preview

Package Bump Version
solstatus patch 4.1.2 → 4.1.3

Changelogs in this PR

Changelog Title
2026-11-13-fix-registry-deploy-dependencies.md Keep deploy dependencies in the registry archive

Run nub run tegami locally to create a changelog interactively.

Managed by Tegami.

@jonbeckman
jonbeckman merged commit 04dad0e into master Nov 13, 2026
6 checks passed
@jonbeckman
jonbeckman deleted the cursor/fix-pruned-deploy-deps-4513 branch November 13, 2026 17:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants