diff --git a/packages/app/src/context/global-sync/child-store.ts b/packages/app/src/context/global-sync/child-store.ts index 3fe67e4fbe..29202110af 100644 --- a/packages/app/src/context/global-sync/child-store.ts +++ b/packages/app/src/context/global-sync/child-store.ts @@ -96,8 +96,15 @@ export function createChildStoreManager(input: { lifecycle.delete(directory) const dispose = disposers.get(directory) if (dispose) { - dispose() disposers.delete(directory) + // Defer the actual solid-js root disposal. When disposeDirectory runs + // from pinForOwner's onCleanup during a parent remount, calling + // dispose() here triggers a nested cleanNode cascade on the inner + // root while the outer cascade is mid-traversal, which corrupts + // solid-js's graph walk state and throws `Cannot read properties of + // null (reading '1')` at chunk-*.js:992. Running dispose on a + // microtask lets the outer cleanup finish first. + queueMicrotask(dispose) } delete children[directory] input.onDispose(directory)