{"record":{"id":"5b3284574d147473","repo":"linshenkx/prompt-optimizer","slug":"prompt-asset-version-not-found-versionid","errorCode":null,"errorMessage":"Prompt asset version not found: ${versionId}","messagePattern":"Prompt asset version not found: (.+?)","errorType":"validation","errorClass":"FavoriteValidationError","httpStatus":null,"severity":"error","filePath":"packages/core/src/services/favorite/manager.ts","lineNumber":494,"sourceCode":"        const favoritesList = favorites || [];\n        const index = favoritesList.findIndex(f => f.id === id);\n        if (index === -1) {\n          throw new FavoriteNotFoundError(id);\n        }\n\n        const currentFavorite = favoritesList[index];\n        const metadata = currentFavorite.metadata && typeof currentFavorite.metadata === 'object'\n          ? { ...currentFavorite.metadata }\n          : {};\n        const promptAsset = isPromptAsset(metadata.promptAsset) ? metadata.promptAsset : null;\n        if (!promptAsset) {\n          throw new FavoriteValidationError('Prompt asset is not available for this favorite');\n        }\n\n        const now = Date.now();\n        const switched = switchPromptAssetCurrentVersion(promptAsset, versionId, now);\n        if (!switched) {\n          throw new FavoriteValidationError(`Prompt asset version not found: ${versionId}`);\n        }\n\n        const nextFavorite: FavoritePrompt = {\n          ...currentFavorite,\n          content: switched.content,\n          updatedAt: now,\n          metadata: {\n            ...metadata,\n            promptAsset: switched.promptAsset,\n          },\n        };\n        assertFavoriteFitsItemBudget(nextFavorite);\n\n        favoritesList[index] = nextFavorite;\n        assertFavoritesPayloadWithinBudget(favoritesList, {\n          warnOnSoftLimit: true,\n        });\n","sourceCodeStart":476,"sourceCodeEnd":512,"githubUrl":"https://github.com/linshenkx/prompt-optimizer/blob/3e677b1d9f7e0493c142c175560531e7ae786dce/packages/core/src/services/favorite/manager.ts#L476-L512","documentation":"FavoriteValidationError thrown when switchPromptAssetCurrentVersion returns falsy because versionId does not match any version in the favorite's prompt asset versions list. The id must exist and the asset must be present; only the version reference is wrong.","triggerScenarios":"Calling setFavoritePromptAssetCurrentVersion with a versionId that was deleted, belongs to another favorite's asset, or is a stale/garbled identifier.","commonSituations":"Version list refreshed after deletions while UI kept an old versionId; copy-paste of version ids between favorites.","solutions":["Re-read the favorite and offer only asset.versions[].id as selectable version ids","Remove deleted version ids from persisted UI state","Verify versionId format matches the generated version ids exactly"],"exampleFix":"// before\nawait manager.setFavoritePromptAssetCurrentVersion(id, pickedVersionId);\n// after\nconst fav = await manager.getFavorite(id);\nconst asset = fav.metadata?.promptAsset;\nif (isPromptAsset(asset) && asset.versions.some(v => v.id === pickedVersionId)) {\n  await manager.setFavoritePromptAssetCurrentVersion(id, pickedVersionId);\n}","handlingStrategy":"validation","validationCode":"const fav = await manager.getFavorite(id);\nconst asset = fav.metadata?.promptAsset;\nif (!isPromptAsset(asset) || !asset.versions.some(v => v.id === versionId)) return;","typeGuard":"function isValidVersionId(asset: PromptAsset, versionId: string): boolean {\n  return asset.versions.some(v => v.id === versionId);\n}","tryCatchPattern":"try { await manager.setFavoritePromptAssetCurrentVersion(id, versionId); }\ncatch (e) {\n  if (e instanceof FavoriteValidationError) { /* refresh version list */ }\n  else throw e;\n}","preventionTips":["Populate version pickers from asset.versions only","Purge cached version ids after any version deletion"],"tags":["prompt-asset","version","validation"],"backgroundTag":"entity-not-found","analyzedSha":"3e677b1d9f7e0493c142c175560531e7ae786dce","analyzedAt":"2026-08-27T21:29:16.709Z","schemaVersion":2},"datasetVersion":"2026-08-28T00:17:15.603Z"}