pulumi/pulumi · error
unknown step status %v
Error message
unknown step status %v
What it means
Thrown by unmarshalStepStatus when a pulumirpc.ViewStep_Status enum value has no mapping to a local resource.Status (anything outside OK, PARTIAL_FAILURE, UNKNOWN). It means the status field of a view step message is unrecognized by this engine version.
Source
Thrown at pkg/resource/deploy/resource_status.go:511
return OpImportReplacement, nil
case pulumirpc.ViewStep_UNSPECIFIED:
fallthrough
default:
return "", fmt.Errorf("unknown step op %v", op)
}
}
// unmarshalStepStatus unmarshals a pulumirpc.ViewStep_Status into a resource.Status.
func (rs *resourceStatusServer) unmarshalStepStatus(s pulumirpc.ViewStep_Status) (resource.Status, error) {
switch s {
case pulumirpc.ViewStep_OK:
return resource.StatusOK, nil
case pulumirpc.ViewStep_PARTIAL_FAILURE:
return resource.StatusPartialFailure, nil
case pulumirpc.ViewStep_UNKNOWN:
return resource.StatusUnknown, nil
default:
return 0, fmt.Errorf("unknown step status %v", s)
}
}
View on GitHub (pinned to 793f7b2e16)
Solutions
- Upgrade the pulumi CLI to a version that knows the status constant
- Keep engine and CLI versions in sync
- Have message producers emit only documented status values (OK, PARTIAL_FAILURE, UNKNOWN)
- Regenerate pulumirpc bindings for custom tools
Example fix
// before
default: return 0, fmt.Errorf("unknown step status %v", s)
// after: add mapping for the new constant
case pulumirpc.ViewStep_NEW_STATUS: return resource.StatusNewStatus, nil Defensive patterns
Strategy: type-guard
Validate before calling
if s != pulumirpc.ViewStep_SUCCEEDED && s != pulumirpc.ViewStep_PARTIAL_FAILURE && s != pulumirpc.ViewStep_UNKNOWN {
return fmt.Errorf("status %v not mappable", s)
} Type guard
func knownStepStatus(s pulumirpc.ViewStep_Status) bool {
switch s {
case pulumirpc.ViewStep_SUCCEEDED, pulumirpc.ViewStep_PARTIAL_FAILURE, pulumirpc.ViewStep_UNKNOWN:
return true
}
return false
} Try / catch
if err != nil && strings.Contains(err.Error(), "unknown step status") {
return fmt.Errorf("unsupported status enum; upgrade CLI: %w", err)
} Prevention
- Emit only documented ViewStep_Status values
- Synchronize proto definitions between producer and consumer
- Upgrade CLI when introducing new status constants in custom pipelines
When it happens
Trigger: A newer proto adds a ViewStep status constant that an older CLI cannot map; a message carries an out-of-range or uninitialized status value.
Common situations: Mixed CLI/engine versions during upgrades; custom gRPC tooling sending unmapped status constants; stale generated bindings.
Related errors
- unknown step op %v
- unknown prompt type %d
- Unrecognized logging severity: %v
- invalid enforcement level %d
- load %q: %w
AI-assisted analysis of pulumi/pulumi@793f7b2e16 (2026-08-31).
Data as JSON: /api/errors/8721f97a703db55e.
Report an issue: GitHub.