Two correctionsThe visible flag is one loader path, not necessarily the root cause. The shared runProfile() fallback also means the blast radius is wider than Web.

It is a profile-lifecycle failure, not a Web-only failure.

Webshared HMR offfallback mounts
Headlessshared HMR offfallback mounts before bounded exit
Customno HMR servicefallback mounts
Module reloadHMR activecan fail earlier

Start with the install topology.

Sourcepnpm dsh web

Check Git SHA, Node, the repository pin, and the pnpm binary actually used.

Publishednpx @deepseek-ai/dsh web

Check the resolved package version and install cache.

Globalpnpm add -g

Treat the virtual-store dependency layout as separate evidence.

Follow the capability chain.

runProfileshared post-boot lifecycle
Loaderdiscover internal ESM loader
Native helperresolve + load platform bridge
HMRthrow when capability is absent

Run a four-step source A/B.

  1. VersionsCompare packageManager, corepack pnpm, and shell pnpm.
  2. Fresh cloneInstall with the pinned manager in a disposable sibling checkout.
  3. Helper probeResolve from vendor/loader, not the repository root.
  4. Flag probeUse direct node --expose-internals … once; never make it permanent.

One diagnostic command, one boundary.

node --expose-internals --import tsx/esm apps/cli/src/bin.ts web

If this changes the result, the loader-internal discovery chain is implicated. It does not prove the flag is a supported deployment fix.

No permanent NODE_OPTIONS

The supported Node line may reject the flag there, and the loader reads process.execArgv.

No launcher rewrite first

Keep the repository contract intact while you locate the failed dependency path.

No destructive reinstall first

Preserve the failing checkout and compare it with a clean sibling.

Do not classify headless as safe because its shared HMR row is disabled. That absence is the condition that triggers the same watch-only fallback while the root remains active.

Primary evidence.

Keep the complete startup worksheet.

The canonical guide includes source, npx, global-install routing, exact probes, recovery choices, unsafe workarounds, and a minimal report.

Read and star on GitHub