{"record":{"id":"4e66b52cf64fa3ec","repo":"mastra-ai/mastra","slug":"observability-storage-get-feedback-breakdown-not-i","errorCode":"OBSERVABILITY_STORAGE_GET_FEEDBACK_BREAKDOWN_NOT_IMPLEMENTED","errorMessage":"This storage provider does not support feedback breakdown","messagePattern":"This storage provider does not support feedback breakdown","errorType":"error_code","errorClass":"MastraError","httpStatus":null,"severity":"error","filePath":"packages/core/src/storage/domains/observability/base.ts","lineNumber":699,"sourceCode":"    throw new MastraError({\n      id: 'OBSERVABILITY_STORAGE_LIST_FEEDBACK_NOT_IMPLEMENTED',\n      domain: ErrorDomain.MASTRA_OBSERVABILITY,\n      category: ErrorCategory.SYSTEM,\n      text: 'This storage provider does not support listing feedback',\n    });\n  }\n\n  async getFeedbackAggregate(_args: GetFeedbackAggregateArgs): Promise<GetFeedbackAggregateResponse> {\n    throw new MastraError({\n      id: 'OBSERVABILITY_STORAGE_GET_FEEDBACK_AGGREGATE_NOT_IMPLEMENTED',\n      domain: ErrorDomain.MASTRA_OBSERVABILITY,\n      category: ErrorCategory.SYSTEM,\n      text: 'This storage provider does not support feedback aggregation',\n    });\n  }\n\n  async getFeedbackBreakdown(_args: GetFeedbackBreakdownArgs): Promise<GetFeedbackBreakdownResponse> {\n    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({","sourceCodeStart":681,"sourceCodeEnd":717,"githubUrl":"https://github.com/mastra-ai/mastra/blob/75dd419e613fe9c39f846ffc500716141b74fda6/packages/core/src/storage/domains/observability/base.ts#L681-L717","documentation":"Thrown by the base MastraObservabilityStorage class when a storage adapter does not override getFeedbackBreakdown(). Feedback breakdown aggregation (grouping feedback counts/values by attribute) is an optional capability; the abstract base marks it unimplemented by default. Hitting this means the active storage provider was never extended to implement feedback analytics.","triggerScenarios":"Calling observabilityStorage.getFeedbackBreakdown(args) on a provider that inherits the base class default (custom or minimal adapter, or a provider without feedback aggregation support).","commonSituations":"Using a custom/community storage adapter that implements only core trace persistence; upgrading Mastra and calling a new feedback-analytics API against a provider that has not added support; wiring the default base class directly instead of a concrete adapter like Postgres/Upstash that implements the method.","solutions":["Switch to a storage provider that implements getFeedbackBreakdown (e.g. one of the first-party DB adapters) and register it as your observability storage.","If you own the adapter, override getFeedbackBreakdown(args) and return a GetFeedbackBreakdownResponse computed from your feedback records.","Guard the call with a capability check or feature flag so the UI/API degrades gracefully when feedback analytics are unavailable.","Check for a Mastra version mismatch where the caller expects an adapter feature the installed adapter version lacks; upgrade the adapter package."],"exampleFix":"// before\nconst storage = new MyMinimalStorage();\nconst breakdown = await storage.getFeedbackBreakdown({ ... }); // throws\n\n// after\nconst storage = new PostgresStore({ connectionString }); // implements feedback methods\nconst breakdown = await storage.getFeedbackBreakdown({ ... });","handlingStrategy":"fallback","validationCode":"if (typeof (storage as any).getFeedbackBreakdown !== 'function' || storage.constructor === MastraObservabilityStorage) { /* unsupported */ }","typeGuard":"function supportsFeedbackBreakdown(s: unknown): s is MastraObservabilityStorage & { getFeedbackBreakdown(a: GetFeedbackBreakdownArgs): Promise<GetFeedbackBreakdownResponse> } {\n  return typeof (s as any)?.getFeedbackBreakdown === 'function' && !isBaseDefaultImpl(s, 'getFeedbackBreakdown');\n}","tryCatchPattern":"try {\n  breakdown = await storage.getFeedbackBreakdown(args);\n} catch (e) {\n  if ((e as MastraError).id === 'OBSERVABILITY_STORAGE_GET_FEEDBACK_BREAKDOWN_NOT_IMPLEMENTED') {\n    breakdown = emptyBreakdownFallback;\n  } else throw e;\n}","preventionTips":["Pick a first-party storage adapter that implements feedback analytics for observability workloads.","Document which storage capabilities each adapter supports in your platform docs.","Wrap optional analytics calls in a capability/feature-detection helper.","Pin and align @mastra/core and storage adapter versions."],"tags":["storage","observability","not-implemented","feedback"],"backgroundTag":"storage-provider-not-implemented","analyzedSha":"75dd419e613fe9c39f846ffc500716141b74fda6","analyzedAt":"2026-08-30T00:15:31.844Z","schemaVersion":2},"datasetVersion":"2026-08-30T03:17:51.788Z"}