From 51d02da6b6a75e6bde939ce57c8e99342c1743eb Mon Sep 17 00:00:00 2001 From: Alex-Wengg Date: Mon, 24 Aug 2026 15:41:20 -0400 Subject: [PATCH] feat(music): mirror progress stages to console for tethered debugging MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit iPhone OOM kills leave an empty inspector console because progress only rendered to the DOM; every stage now also logs '[ace] — <detail>' so the last console line before WebKit's 'Webpage Crashed' identifies the killing phase. --- src/music.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/music.ts b/src/music.ts index 13fc1ce..f09bcb8 100644 --- a/src/music.ts +++ b/src/music.ts @@ -134,6 +134,10 @@ let disposal: const CRASH_BREADCRUMB_KEY = "ace-step-progress-breadcrumb"; function recordBreadcrumb(title: string, detail: string): void { + // Mirror to the console so a tethered Web Inspector (iPhone debugging) + // streams the stages — the last line before "Webpage Crashed" is the + // memory-kill diagnosis. + console.info(`[ace] ${title}${detail ? ` — ${detail}` : ""}`); try { localStorage.setItem(CRASH_BREADCRUMB_KEY, JSON.stringify({ title, detail, at: Date.now(), open: true })); } catch { @@ -160,6 +164,7 @@ function reportCrashBreadcrumb(): void { if (record.open !== true || typeof record.title !== "string") return; localStorage.removeItem(CRASH_BREADCRUMB_KEY); const when = typeof record.at === "number" ? new Date(record.at).toLocaleTimeString() : "?"; + console.warn(`[ace] previous attempt ended unexpectedly during: ${record.title} — ${record.detail ?? ""}`); supportWarning.textContent = `The previous attempt ended unexpectedly during: ${record.title}` + `${record.detail ? ` — ${record.detail}` : ""} (${when}). ` +