siyuan-note/siyuan · error · Error

boot progress request returned HTTP " + response.status

Error message

boot progress request returned HTTP " + response.status

What it means

While waiting up to 5 minutes for a remote kernel to finish booting, the loop polls /api/system/bootProgress. If a poll response is not ok, the error is thrown (inside the try, so it may be retried by the surrounding loop depending on its structure). It indicates the remote kernel's HTTP endpoint failed during the boot-wait window.

Source

Thrown at app/electron/main.js:2668

    }
    writeLog("got remote kernel version [" + versionData.data + "]");
    if (versionStatus === "mismatch") {
        const remoteVersion = escapeHTML(versionData.data);
        showErrorWindow("远程内核版本不匹配", "Remote kernel version mismatch",
            "<div>客户端版本 " + appVer + " 与远程内核版本 " + remoteVersion + " 不一致。</div>" +
            "<div>Client version " + appVer + " does not match remote kernel version " + remoteVersion + ".</div>");
        bootWindow.destroy();
        return;
    }

    const bootShowStart = Date.now();
    let booted = false;
    while (Date.now() - bootShowStart <= 300000) {
        try {
            const response = await fetchWithTimeout(target.origin + "/api/system/bootProgress");
            if (!response.ok) {
                await response.body?.cancel();
                throw new Error("boot progress request returned HTTP " + response.status);
            }
            const progressData = await response.json();
            if (progressData?.data?.progress >= 100) {
                booted = true;
                break;
            }
        } catch (error) {
            writeLog("get remote boot progress failed: " + error.message);
        }
        await sleep(500);
    }
    if (!booted) {
        showErrorWindow("连接远程内核超时", "Remote kernel connection timed out",
            "<div>等待远程内核完成启动超时。</div><div>Timed out waiting for the remote kernel to finish booting.</div>");
        bootWindow.destroy();
        return;
    }

View on GitHub (pinned to 8641553a1f)

Solutions

  1. Wait for the remote kernel to fully start and retry the connection
  2. Check the remote kernel's logs/server console for startup errors if the failure persists
  3. Configure the reverse proxy to tolerate the boot window (longer upstream timeouts, retry on 503)
  4. Verify the target origin is still correct and the kernel port did not change
Defensive patterns

Strategy: retry

Try / catch

// The boot-wait loop already retries within the try; wrap the outer call:
try {
  await waitForRemoteKernelBoot(target);
} catch (e) {
  if (String(e.message).startsWith("boot progress request returned HTTP")) {
    // check remote kernel logs / proxy health before reconnecting
  }
}

Prevention

When it happens

Trigger: fetchWithTimeout(target.origin + "/api/system/bootProgress") returns response.ok === false during the 300-second boot-wait loop — e.g. the kernel restarts mid-boot, a proxy returns 502/503, or the kernel returns 4xx/5xx after boot progress started.

Common situations: Remote kernel is still starting and its reverse proxy returns 503 until upstream is up; kernel crashed during startup; proxy timeouts or rate limiting kicking in during the wait; the remote host rebooted mid-connection.

Understand the failure class

Background: "API error: {status}" and "HTTP 401/403/404/429/5xx" errors: non-2xx HTTP responses explained — this error's family across 27 libraries.

Related errors


AI-assisted analysis of siyuan-note/siyuan@8641553a1f (2026-09-11). Data as JSON: /api/errors/2f537efbed39ec3a. Report an issue: GitHub.