fix: thread builder offline runtime race + getDoc method name

Two bugs:
- subscribeOffline() bailed if runtime wasn't initialized yet (race with
  shell.ts init). Now waits for runtime to appear, then awaits init().
- getDoc() called runtime.getDoc() which doesn't exist — method is
  runtime.get(). Caused "e.getDoc is not a function" crash in listThreads.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Jeff Emmett 2026-03-05 17:06:47 -08:00
parent 3f19fd9c8e
commit 1335c38d48
1 changed files with 19 additions and 5 deletions

View File

@ -90,8 +90,22 @@ export class FolkThreadBuilder extends HTMLElement {
} }
private async subscribeOffline() { private async subscribeOffline() {
const runtime = (window as any).__rspaceOfflineRuntime; // Wait for the runtime to be available and initialized
if (!runtime?.isInitialized) return; let runtime = (window as any).__rspaceOfflineRuntime;
// The runtime may not be created yet if shell.ts hasn't run init()
if (!runtime) {
// Wait briefly for shell.ts to create it
await new Promise(r => setTimeout(r, 200));
runtime = (window as any).__rspaceOfflineRuntime;
}
if (!runtime) return;
// Wait for init() to complete if still in progress
if (!runtime.isInitialized && runtime.init) {
try { await runtime.init(); } catch { /* init may have been called already */ }
}
if (!runtime.isInitialized) return;
try { try {
const docId = socialsDocId(this._space) as DocumentId; const docId = socialsDocId(this._space) as DocumentId;
@ -108,8 +122,8 @@ export class FolkThreadBuilder extends HTMLElement {
this._thread = updated.threads[this._threadId]; this._thread = updated.threads[this._threadId];
} }
}); });
} catch { } catch (e: any) {
// Working without offline runtime console.warn('[thread-builder] Offline subscribe failed:', e.message);
} }
} }
@ -160,7 +174,7 @@ export class FolkThreadBuilder extends HTMLElement {
const runtime = this.getRuntime(); const runtime = this.getRuntime();
if (!runtime?.isInitialized) return undefined; if (!runtime?.isInitialized) return undefined;
const docId = socialsDocId(this._space) as DocumentId; const docId = socialsDocId(this._space) as DocumentId;
return runtime.getDoc(docId); return runtime.get(docId);
} }
private listThreads(): ThreadData[] { private listThreads(): ThreadData[] {