The controlling evidenceThe build ends without build: recorded … client artifact(s) and without .dsh-build/client-build-environment.json.

Prove the root build ran.

Capture

Node, pnpm, commit, complete output, and the real exit status.

Record

Require the client build record, not a green shell prompt.

Artifacts

Check the named host and client exports are non-empty.

Boot

Only then test the selected Web profile.

Why the failure arrives late.

Root scriptmain() is skipped

The module completes normally when the direct-entry guard is undefined.

Build graphlib + Web never run

No generated host types, client bundles, or digest record exist.

Loadermany imports reject

An aggregate reports the missing outputs only during profile boot.

Never manufacture placeholder artifacts.

Generated typert.host.js and client.js exports carry runtime contracts. Copying them across commits only hides the build failure and breaks provenance.

Recover at the entrypoint.

Prefer a supported Node 22.19.x environment and rebuild from the lockfile. If evaluating the reported patch, preserve the native import.meta.main check and add a normalized direct-script-path fallback; importing the module must remain side-effect free.

pnpm install --frozen-lockfile
pnpm run build
test -s .dsh-build/client-build-environment.json
pnpm dsh --profile web --help

Primary evidence.

Keep the complete recovery path.

The canonical guide includes signature routing, shell-specific evidence capture, safe recovery choices, neighboring failures, twelve regression gates, and an incident bundle.

Read the complete guide