langflow-ai/langflow · error · Error

reload-in-progress

reload-in-progress

Error message

reload-in-progress: ${inProgress.message}

What it means

404 from the PATCH settings endpoint: the Folder lookup with selectinload(Folder.flows) filtered on (id == project_id, user_id == current_user.id) returned nothing. As with the SSE route, ownership scoping makes 'not yours' identical to 'not found'.

Source

Thrown at src/frontend/src/controllers/API/queries/extensions/use-reload-bundle.ts:71

    const url = `${getURL("EXTENSIONS")}/${payload.extensionId}/bundles/${payload.bundleName}/reload`;
    try {
      const res = await api.post<ReloadBundleResponse>(url);
      return res.data;
    } catch (error: unknown) {
      const detail = (error as { response?: { data?: { detail?: unknown } } })
        ?.response?.data?.detail;
      const status = (error as { response?: { status?: number } })?.response
        ?.status;

      // Surface 409 reload-in-progress with a stable, parseable shape so
      // the caller can branch on the code without inspecting status codes.
      if (
        detail &&
        typeof detail === "object" &&
        (detail as ReloadInProgressDetail).code === "reload-in-progress"
      ) {
        const inProgress = detail as ReloadInProgressDetail;
        throw new Error(`reload-in-progress: ${inProgress.message}`);
      }

      // 422 carries the full ReloadResult in detail.result so structural
      // failures keep the same body shape as a 200 -- the caller's
      // onSuccess handler renders the typed errors inline via the
      // existing ok=false branch.
      if (status === 422 && detail && typeof detail === "object") {
        const result = (detail as { result?: ReloadBundleResponse }).result;
        if (result && typeof result === "object") {
          return result;
        }
      }

      throw new Error(
        extractApiErrorMessage(
          error as Parameters<typeof extractApiErrorMessage>[0],
          "Failed to reload bundle",
        ),

View on GitHub (pinned to 976ec789d2)

Solutions

  1. Reload the projects list in the UI and PATCH the current project id.
  2. Verify ownership of the folder in the DB (select * from folder where id = ...).
  3. Close stale tabs/clients after deleting or moving a project.
Defensive patterns

Strategy: validation

Validate before calling

if str(project_id) not in {str(p.id) for p in await client.list_projects()}:
    raise LookupError("project id is stale; reload the projects page before PATCHing")

Try / catch

try:
    await client.patch(settings_url, json=payload)
except httpx.HTTPStatusError as e:
    if e.response.status_code == 404:
        await reload_project_state()  # refresh ids, then re-apply the PATCH

Prevention

When it happens

Trigger: PATCH project MCP settings for a deleted project, a project id belonging to another user, or a stale id in the browser tab after the project was re-created.

Common situations: Two browser tabs / stale SPA state PATCHing a project that was deleted elsewhere; exporting a flow with project-scoped MCP settings and importing it into a different instance where the folder id does not exist.

Related errors


AI-assisted analysis of langflow-ai/langflow@976ec789d2 (2026-08-14). Data as JSON: /api/errors/13c1b49a067a5d40. Report an issue: GitHub.