{"record":{"id":"e4cc976224bd23c4","repo":"pulumi/pulumi","slug":"unrecognized-signature-v-in-property-map-for-q","errorCode":null,"errorMessage":"unrecognized signature '%v' in property map for %q","messagePattern":"unrecognized signature '(.+?)' in property map for %q","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/resource/plugin/rpc.go","lineNumber":635,"sourceCode":"\t\t\t\tdependencies = make([]resource.URN, len(dependenciesProp.ArrayValue()))\n\t\t\t\tfor i, dep := range dependenciesProp.ArrayValue() {\n\t\t\t\t\tif !dep.IsString() {\n\t\t\t\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\t\t\t\"malformed output value for %q: element in dependencies not a string\", key)\n\t\t\t\t\t}\n\t\t\t\t\tdependencies[i] = resource.URN(dep.StringValue())\n\t\t\t\t}\n\t\t\t}\n\n\t\t\toutput := resource.NewProperty(resource.Output{\n\t\t\t\tElement:      value,\n\t\t\t\tKnown:        known,\n\t\t\t\tSecret:       secret,\n\t\t\t\tDependencies: dependencies,\n\t\t\t})\n\t\t\treturn &output, nil\n\t\tdefault:\n\t\t\treturn nil, fmt.Errorf(\"unrecognized signature '%v' in property map for %q\", sig, key)\n\t\t}\n\n\tdefault:\n\t\tcontract.Failf(\"Unrecognized structpb value kind in RPC[%s] for %q: %v\", opts.Label, key, reflect.TypeOf(v.Kind))\n\t\treturn nil, nil\n\t}\n}\n\nfunc unmarshalUnknownPropertyValue(s string, opts MarshalOptions) (resource.PropertyValue, bool) {\n\tvar elem resource.PropertyValue\n\tvar unknown bool\n\tswitch s {\n\tcase UnknownBoolValue:\n\t\telem, unknown = resource.NewProperty(false), true\n\tcase UnknownNumberValue:\n\t\telem, unknown = resource.NewProperty(0.0), true\n\tcase UnknownStringValue:\n\t\telem, unknown = resource.NewProperty(\"\"), true","sourceCodeStart":617,"sourceCodeEnd":653,"githubUrl":"https://github.com/pulumi/pulumi/blob/793f7b2e160db4321fb7fb6b0607461e01cb251e/pkg/resource/plugin/rpc.go#L617-L653","documentation":"A structpb struct value in an RPC property map carried a 4-char special signature field that the engine does not recognize (not asset, archive, secret, byte string, resource reference, or output value signatures). The engine therefore cannot interpret the value and rejects the property map. This typically indicates protocol/version mismatch or data corruption between plugin and engine.","triggerScenarios":"A plugin sends a value with a signature constant from a newer/older protocol revision than the CLI supports, or a garbled/corrupted sig field, hitting the default case of the signature switch in UnmarshalPropertyValue.","commonSituations":"Newer provider plugin with an older Pulumi CLI (or vice versa); custom plugins inventing their own signature constants; corrupted checkpoint state files.","solutions":["Upgrade the Pulumi CLI to the latest version so it recognizes signatures emitted by current plugins.","Downgrade or upgrade the specific provider plugin (pulumi plugin rm; pulumi plugin install <name> <version>) to one compatible with your CLI.","If you authored the plugin, use only signature constants defined in the pulumi/sdk resource package.","Reproduce with PULUMI_DEBUG_GRPC and log opts.Label plus the sig value to identify the sender."],"exampleFix":"// before (custom plugin)\nsig := \"my01\"\n// after\nsig := resource.AssetSig // use a signature defined in pulumi/sdk","handlingStrategy":"try-catch","validationCode":"// Go, plugin-side: assert only known signature constants are used\nknown := map[string]bool{\n    asset.Sig: true, archive.Sig: true, resource.SecretSig: true,\n    resource.ResourceReferenceSig: true, resource.OutputValueSig: true,\n}\nif sig, ok := obj[\"sig\"].(string); ok && !known[sig] {\n    return fmt.Errorf(\"unsupported signature %q; upgrade the pulumi CLI\", sig)\n}","typeGuard":"func hasKnownSig(obj map[string]*structpb.Value) bool {\n    v, ok := obj[\"4d798a86\"]\n    if !ok {\n        return true\n    }\n    s := v.GetStringValue()\n    switch s {\n    case asset.Sig, archive.Sig, resource.SecretSig,\n        resource.ByteStringSig, resource.ResourceReferenceSig, resource.OutputValueSig:\n        return true\n    }\n    return false\n}","tryCatchPattern":"// Node: surface actionable guidance when the engine rejects a signature\ntry {\n    await deploymentResult;\n} catch (err) {\n    if (/unrecognized signature/.test(String(err))) {\n        console.error(\"CLI/plugin protocol mismatch: run `pulumi plugin rm --all` then reinstall, and upgrade the pulumi CLI.\");\n    }\n    throw err;\n}","preventionTips":["Upgrade the pulumi CLI whenever plugins report unrecognized signatures.","Only use signature constants exported from pulumi/sdk; never invent new ones.","Pin plugin versions per stack and reinstall after CLI upgrades.","Enable PULUMI_DEBUG_GRPC when debugging protocol mismatches."],"tags":["grpc","rpc","serialization","version-compatibility"],"backgroundTag":"unrecognized-signature-protocol-mismatch","analyzedSha":"793f7b2e160db4321fb7fb6b0607461e01cb251e","analyzedAt":"2026-08-31T09:36:43.099Z","schemaVersion":2},"datasetVersion":"2026-08-31T14:17:45.589Z"}