{"record":{"id":"18ccb2014ce93f54","repo":"appsmithorg/appsmith","slug":"save-page-failed","errorCode":null,"errorMessage":"Save page failed","messagePattern":"Save page failed","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"app/client/src/sagas/BuildingBlockSagas/BuildingBlockAdditionSagas.ts","lineNumber":204,"sourceCode":"    const loadWorkspaceId: string = yield select(getCurrentWorkspaceId);\n    const existingCopiedWidgets: unknown = yield call(getCopiedWidgets);\n    const buildingBlockDragStartTimestamp: number = yield select(\n      getBuildingBlockDragStartTimestamp,\n    );\n\n    // start loading for dropping building blocks\n    yield put({\n      type: ReduxActionTypes.DRAGGING_BUILDING_BLOCK_TO_CANVAS_INIT,\n    });\n\n    // makes sure updateAndSaveLayout completes first for initial skeletonWidget addition\n    const saveResult: unknown = yield race({\n      success: take(ReduxActionTypes.SAVE_PAGE_SUCCESS),\n      failure: take(ReduxActionErrorTypes.SAVE_PAGE_ERROR),\n    });\n\n    if (typeof saveResult === \"object\" && \"failure\" in saveResult!) {\n      throw new Error(\"Save page failed\");\n    }\n\n    const response: ApiResponse<ImportBuildingBlockToApplicationResponse> =\n      yield call(addBuildingBlockActionsToApplication, dragDetails);\n    const isValid: boolean = yield validateResponse(response);\n\n    if (isValid) {\n      yield saveBuildingBlockWidgetsToStore(response);\n\n      // remove skeleton loader just before pasting the building block\n      yield put({\n        type: WidgetReduxActionTypes.WIDGET_SINGLE_DELETE,\n        payload: {\n          widgetId: skeletonLoaderId,\n          parentId: buildingBlockWidget.widgetId,\n          disallowUndo: true,\n          isShortcut: false,\n        },","sourceCodeStart":186,"sourceCodeEnd":222,"githubUrl":"https://github.com/appsmithorg/appsmith/blob/8cd9021c24cdbea1c3c12c966073708e83db60c2/app/client/src/sagas/BuildingBlockSagas/BuildingBlockAdditionSagas.ts#L186-L222","documentation":"Error thrown when SAVE_PAGE_ERROR wins the race against SAVE_PAGE_SUCCESS while adding a building block to the canvas. The skeleton widget was inserted, but the layout save that must precede pasting the building block failed, so the saga aborts before calling addBuildingBlockActionsToApplication.","triggerScenarios":"updateAndSaveLayout rejects server-side (validation error in the new skeleton, throttling, 5xx, network drop); concurrent save attempts collide; the page layout is too large and the server rejects it.","commonSituations":"Workspace offline briefly; large pages exceeding server limits; two editors dropping blocks at the same instant; backend deploy in progress.","solutions":["Retry the drag-and-drop after confirming the server is reachable.","Reduce the existing page size (remove unused widgets) if the save payload is rejected for size.","Check the debugger / network response for the SAVE_PAGE error reason.","Avoid concurrent building-block drops; one editor at a time on the page."],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":["Confirm the server is reachable before dropping building blocks.","Avoid two editors dropping blocks onto the same page simultaneously.","Keep page widget count reasonable so save payloads are not rejected."],"tags":["building-block","save-layout","race","network"],"backgroundTag":null,"analyzedSha":"8cd9021c24cdbea1c3c12c966073708e83db60c2","analyzedAt":"2026-08-12T22:14:19.293Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}