{"record":{"id":"dc3337580740ddab","repo":"mastra-ai/mastra","slug":"observability-storage-get-feedback-percentiles-not","errorCode":"OBSERVABILITY_STORAGE_GET_FEEDBACK_PERCENTILES_NOT_IMPLEMENTED","errorMessage":"This storage provider does not support feedback percentiles","messagePattern":"This storage provider does not support feedback percentiles","errorType":"error_code","errorClass":"MastraError","httpStatus":null,"severity":"error","filePath":"packages/core/src/storage/domains/observability/base.ts","lineNumber":717,"sourceCode":"    throw new MastraError({\n      id: 'OBSERVABILITY_STORAGE_GET_FEEDBACK_BREAKDOWN_NOT_IMPLEMENTED',\n      domain: ErrorDomain.MASTRA_OBSERVABILITY,\n      category: ErrorCategory.SYSTEM,\n      text: 'This storage provider does not support feedback breakdown',\n    });\n  }\n\n  async getFeedbackTimeSeries(_args: GetFeedbackTimeSeriesArgs): Promise<GetFeedbackTimeSeriesResponse> {\n    throw new MastraError({\n      id: 'OBSERVABILITY_STORAGE_GET_FEEDBACK_TIME_SERIES_NOT_IMPLEMENTED',\n      domain: ErrorDomain.MASTRA_OBSERVABILITY,\n      category: ErrorCategory.SYSTEM,\n      text: 'This storage provider does not support feedback time series',\n    });\n  }\n\n  async getFeedbackPercentiles(_args: GetFeedbackPercentilesArgs): Promise<GetFeedbackPercentilesResponse> {\n    throw new MastraError({\n      id: 'OBSERVABILITY_STORAGE_GET_FEEDBACK_PERCENTILES_NOT_IMPLEMENTED',\n      domain: ErrorDomain.MASTRA_OBSERVABILITY,\n      category: ErrorCategory.SYSTEM,\n      text: 'This storage provider does not support feedback percentiles',\n    });\n  }\n}\n","sourceCodeStart":699,"sourceCodeEnd":725,"githubUrl":"https://github.com/mastra-ai/mastra/blob/75dd419e613fe9c39f846ffc500716141b74fda6/packages/core/src/storage/domains/observability/base.ts#L699-L725","documentation":"Thrown by the base MastraObservabilityStorage class when getFeedbackPercentiles() is called on a provider that has not implemented it. Percentile computation over feedback scores is an optional aggregation; the base class throws this error to signal the capability is missing rather than return incorrect data.","triggerScenarios":"Calling observabilityStorage.getFeedbackPercentiles(args) on an adapter that inherits the base default implementation.","commonSituations":"Requesting p50/p95/p99 feedback stats in a dashboard backed by a minimal or custom storage adapter; calling new analytics APIs on an older adapter version.","solutions":["Switch to a storage adapter that implements getFeedbackPercentiles.","Override getFeedbackPercentiles in your adapter to compute percentiles over stored feedback values and return GetFeedbackPercentilesResponse.","Add a capability check or try/catch fallback that hides percentile widgets when unsupported.","Update the adapter to the latest version to confirm whether support was added upstream."],"exampleFix":"// before\nconst p = await customStorage.getFeedbackPercentiles({ metric: 'score' }); // throws\n\n// after\nconst storage = new PostgresStore({ connectionString }); // implements percentiles\nconst p = await storage.getFeedbackPercentiles({ metric: 'score' });","handlingStrategy":"fallback","validationCode":"if (typeof (storage as any).getFeedbackPercentiles !== 'function') { /* unsupported */ }","typeGuard":"function supportsFeedbackPercentiles(s: unknown): s is MastraObservabilityStorage & { getFeedbackPercentiles(a: GetFeedbackPercentilesArgs): Promise<GetFeedbackPercentilesResponse> } {\n  return typeof (s as any)?.getFeedbackPercentiles === 'function';\n}","tryCatchPattern":"try {\n  percentiles = await storage.getFeedbackPercentiles(args);\n} catch (e) {\n  if ((e as MastraError).id === 'OBSERVABILITY_STORAGE_GET_FEEDBACK_PERCENTILES_NOT_IMPLEMENTED') {\n    percentiles = null; // hide percentile UI\n  } else throw e;\n}","preventionTips":["Confirm percentile support in the adapter's docs/tests before exposing percentile metrics.","Centralize optional analytics calls behind a service that degrades gracefully.","Version-check the adapter against core requirements at startup.","Prefer DB-backed adapters for analytics-heavy use cases."],"tags":["storage","observability","not-implemented","feedback","percentiles"],"backgroundTag":"storage-provider-not-implemented","analyzedSha":"75dd419e613fe9c39f846ffc500716141b74fda6","analyzedAt":"2026-08-30T00:15:31.844Z","schemaVersion":2},"datasetVersion":"2026-08-30T08:17:16.595Z"}