{"record":{"id":"d4d612c0a19990de","repo":"linshenkx/prompt-optimizer","slug":"failed-to-delete-favorite-prompt-asset-version","errorCode":null,"errorMessage":"Failed to delete favorite prompt asset version: ${errorMessage}","messagePattern":"Failed to delete favorite prompt asset version: (.+?)","errorType":"exception","errorClass":"FavoriteStorageError","httpStatus":null,"severity":"error","filePath":"packages/core/src/services/favorite/manager.ts","lineNumber":582,"sourceCode":"          },\n        };\n        assertFavoriteFitsItemBudget(nextFavorite);\n\n        favoritesList[index] = nextFavorite;\n        assertFavoritesPayloadWithinBudget(favoritesList, {\n          warnOnSoftLimit: true,\n        });\n\n        return favoritesList;\n      });\n\n      await this.updateStats();\n    } catch (error) {\n      if (error instanceof FavoriteError) {\n        throw error;\n      }\n      const errorMessage = error instanceof Error ? error.message : String(error);\n      throw new FavoriteStorageError(`Failed to delete favorite prompt asset version: ${errorMessage}`);\n    }\n  }\n\n  async deleteFavorite(id: string): Promise<void> {\n    await this.ensureInitialized();\n\n    try {\n      await this.storageProvider.updateData(this.STORAGE_KEYS.FAVORITES, (favorites: FavoritePrompt[] | null) => {\n        const favoritesList = favorites || [];\n        const index = favoritesList.findIndex(f => f.id === id);\n        if (index === -1) {\n          throw new FavoriteNotFoundError(id);\n        }\n\n        return favoritesList.filter(f => f.id !== id);\n      });\n\n      await this.updateStats();","sourceCodeStart":564,"sourceCodeEnd":600,"githubUrl":"https://github.com/linshenkx/prompt-optimizer/blob/3e677b1d9f7e0493c142c175560531e7ae786dce/packages/core/src/services/favorite/manager.ts#L564-L600","documentation":"Wrapped FavoriteStorageError thrown when an unexpected (non-FavoriteError) exception escapes deleteFavoritePromptAssetVersion — typically a storage failure in the underlying storageProvider (read/parse/write of favorites data). Known domain errors like FavoriteNotFoundError/FavoriteValidationError are rethrown untouched; everything else is wrapped with the original message for context.","triggerScenarios":"storageProvider.updateData or getFavorite throwing a low-level error during the delete flow: corrupted JSON in storage, quota exceeded, backend/network failure of a remote storage provider, or a serialization bug in the prompt asset metadata.","commonSituations":"localStorage quota exceeded in browsers with large prompt assets; remote sync storage offline; corrupted persisted JSON after a partial write or version migration; storage disabled in privacy modes.","solutions":["Inspect error.message / inner cause to identify the underlying storage failure","Clear or repair the corrupted favorites entry in storage (re-export/import a known-good copy)","Reduce stored payload size (prune old versions/favorites) if quota is the issue","If using a custom storageProvider, verify its updateData contract and error behavior"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":"const isFavoriteStorageError = (e: unknown): e is FavoriteStorageError => e instanceof FavoriteStorageError;","tryCatchPattern":"try { await manager.deleteFavoritePromptAssetVersion(id, vId); } catch (e) { if (e instanceof FavoriteStorageError) { /* inspect e.message for underlying storage cause; possibly retry */ } else throw e; }","preventionTips":["Keep stored favorites payload small (prune old versions)","Verify storage availability before mutating","Back up/export favorites before bulk operations"],"tags":["favorites","storage","persistence","data-corruption"],"backgroundTag":"storage-write-failed","analyzedSha":"3e677b1d9f7e0493c142c175560531e7ae786dce","analyzedAt":"2026-08-27T21:29:16.709Z","schemaVersion":2},"datasetVersion":"2026-08-28T00:17:15.603Z"}