The broken invariantThe store linked to the existing
node_modules must equal the store selected for the current profile mutation.Capture three identities.
Read the currently linked from path in the first error.
Read the now wants to use path and effective pnpm config.
Choose one explicit location owned by the profile operator.
Recover without changing the graph.
store-dir.Prefer a DSH-owned or explicitly operator-owned location.pnpm install --frozen-lockfileMove links without selecting new dependency versions.Profile-level .npmrcApply this in the exact profile directory reported by DSH.
store-dir=/absolute/path/to/stable/dsh-pnpm-storeRepeat evidence proves stability.
- Profile store path equals the explicit location.
- Frozen relink exits zero with no resolution drift.
- The DSH-owned update exits zero.
- Manifest, lockfile, and bundle diffs are bounded.
--dump-configand isolated boot succeed.- A second no-op mutation selects the same store.
Do not merge neighboring failures.
ADDING_TO_ROOTTarget ambiguityOpen workspace-root guidenonzero + files remainPartial transactionOpen reconciliation guidemissing dist/Build artifact gapOpen artifact guideLoading pluginsClient boot failureOpen Web recoveryPrimary evidence.
Keep the complete recovery runbook.
The canonical guide includes evidence capture, hard-link boundaries, unsafe shortcuts, runtime repair gates, and an incident template.
Read and star on GitHub