pulumi/pulumi · error

unrecognized signature '%v' in property map

Error message

unrecognized signature '%v' in property map

What it means

While decoding a serialized property value object map, the 'sig' (signature) field did not match any known signature constant (secret, resource reference, array, etc.), so the decoder cannot determine how to interpret the object. The offending signature value is included in the message.

Source

Thrown at pkg/resource/stack/deployment.go:1190

						return resource.PropertyValue{},
							fmt.Errorf("malformed byte string: unable to parse 'value' field: %w", err)
					}
					return resource.NewProperty(string(decoded)), nil
				case floatSignature:
					hex, ok := objmap["value"].(string)
					if !ok {
						return resource.PropertyValue{},
							errors.New("malformed float value: missing or non-string 'value' field")
					}
					bits, err := strconv.ParseUint(hex, 16, 64)
					if err != nil {
						return resource.PropertyValue{},
							fmt.Errorf("malformed float value: unable to parse 'value' field: %w", err)
					}
					floatVal := math.Float64frombits(bits)
					return resource.NewProperty(floatVal), nil
				default:
					return resource.PropertyValue{}, fmt.Errorf("unrecognized signature '%v' in property map", sig)
				}
			}

			// Otherwise, it's just a weakly typed object map.
			return resource.NewProperty(obj), nil
		case *apitype.SecretV1:
			return deserializeSecret(ctx, w, dec)
		default:
			contract.Failf("Unrecognized property type %T: %v", v, reflect.ValueOf(v))
		}
	}

	return resource.NewNullProperty(), nil
}

func secretPropertyValueFromPlaintext(plaintext string) (resource.PropertyValue, error) {
	var elem any
	if err := json.Unmarshal([]byte(plaintext), &elem); err != nil {

View on GitHub (pinned to 793f7b2e16)

Solutions

  1. Update the Pulumi CLI to the latest version and retry
  2. Identify the signature value from the message and compare against the constants in the repo (property signature codes)
  3. Restore state from a backup created by a compatible CLI version
Defensive patterns

Strategy: type-guard

Validate before calling

switch sig := sig; {
case sig == secretSignature, sig == resourceSignature, sig == secretOutputSignature:
    // known
default:
    return fmt.Errorf("unsupported sig %v — upgrade CLI", sig)
}

Type guard

func knownSignature(sig uint32) bool {
    switch sig {
    case secretSignature, resourceSignature, secretOutputSignature:
        return true
    }
    return false
}

Prevention

When it happens

Trigger: Deserializing a deployment/checkpoint whose property values contain a 'sig' number unknown to the current CLI — typically produced by a NEWER Pulumi version with additional signatures.

Common situations: Using an older Pulumi CLI against stack state or deployments written by a newer CLI; third-party tooling inventing signature values.

Related errors


AI-assisted analysis of pulumi/pulumi@793f7b2e16 (2026-08-31). Data as JSON: /api/errors/09624c2ae00073a4. Report an issue: GitHub.