{"record":{"id":"38cbb3ab1e60159d","repo":"hashicorp/terraform","slug":"not-implemented","errorCode":null,"errorMessage":"not implemented","messagePattern":"not implemented","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/plugin/grpc_provider.go","lineNumber":1451,"sourceCode":"\t\t\tbreak\n\t\t}\n\n\t\tresults = append(results, cty.ObjectVal(obj))\n\t}\n\n\t// The provider result of a list resource is always a list, but\n\t// we will wrap that list in an object with a single attribute \"data\",\n\t// so that we can differentiate between a list resource instance (list.aws_instance.test[index])\n\t// and the elements of the result of a list resource instance (list.aws_instance.test.data[index])\n\tresp.Result = cty.ObjectVal(map[string]cty.Value{\n\t\t\"data\":   cty.TupleVal(results),\n\t\t\"config\": config,\n\t})\n\treturn resp\n}\n\nfunc (p *GRPCProvider) ValidateStateStoreConfig(r providers.ValidateStateStoreConfigRequest) providers.ValidateStateStoreConfigResponse {\n\tpanic(\"not implemented\")\n}\n\nfunc (p *GRPCProvider) ConfigureStateStore(r providers.ConfigureStateStoreRequest) providers.ConfigureStateStoreResponse {\n\tpanic(\"not implemented\")\n}\n\nfunc (p *GRPCProvider) ReadStateBytes(r providers.ReadStateBytesRequest) providers.ReadStateBytesResponse {\n\tpanic(\"not implemented\")\n}\n\nfunc (p *GRPCProvider) WriteStateBytes(r providers.WriteStateBytesRequest) providers.WriteStateBytesResponse {\n\tpanic(\"not implemented\")\n}\n\nfunc (p *GRPCProvider) LockState(r providers.LockStateRequest) providers.LockStateResponse {\n\tpanic(\"not implemented\")\n}\n","sourceCodeStart":1433,"sourceCodeEnd":1469,"githubUrl":"https://github.com/hashicorp/terraform/blob/c9def3e214014c1188faabfc4a5bde5095139765/internal/plugin/grpc_provider.go#L1433-L1469","documentation":"Panics in GRPCProvider.ValidateStateStoreConfig (grpc_provider.go:1451) and its sibling stubs (ConfigureStateStore, ReadStateBytes, WriteStateBytes, LockState, UnlockState, GetStates). These providers.Interface methods for the state-store abstraction are unimplemented stubs that panic 'not implemented'.","triggerScenarios":"Calling any state-store provider method on this GRPCProvider — i.e. exercising the state-store feature path against a provider/plugin that has not implemented it.","commonSituations":"Using a Terraform build that routes to the state-store interface while the bundled provider plugin is a legacy shim lacking the implementation; enabling experimental state-store features.","solutions":["Avoid the state-store code path until the provider implements these methods.","Upgrade to a build/provider version that implements the state-store methods.","Disable the experimental state-store feature flag."],"exampleFix":null,"handlingStrategy":"type-guard","validationCode":"// feature-detect before calling state-store methods on a GRPCProvider\nfunc stateStoreImplemented(p providers.Interface) bool {\n    // call into a typed interface guard or a version/capability check;\n    // avoid invoking the panicking stubs directly.\n    _, ok := p.(providers.StateStoreCapable)\n    return ok\n}","typeGuard":"// optional capability interface providers can implement to advertise support\ntype StateStoreCapable interface { StateStoreSupported() bool }","tryCatchPattern":"defer func() {\n    if r := recover(); r != nil {\n        if err, ok := r.(error); ok && err.Error() == \"not implemented\" {\n            // fall back to the standard state backend path\n        } else { panic(r) }\n    }\n}()","preventionTips":["Do not exercise the state-store code path against providers that only ship the stub.","Upgrade to a build/provider that implements the methods.","Gate experimental state-store features behind capability checks."],"tags":["terraform","plugin","grpc-provider","state-store","not-implemented"],"analyzedSha":"c9def3e214014c1188faabfc4a5bde5095139765","analyzedAt":"2026-08-07T15:39:49.278Z","schemaVersion":2},"datasetVersion":"2026-08-07T21:17:07.882Z"}