package models import ( "encoding/json" "fmt" ) // ParseSnapshotStages parses a version snapshot into a slice of // WorkflowStage. It handles both the wrapped format // {"stages": [...], "workflow": {...}} and the legacy flat array [...]. func ParseSnapshotStages(raw json.RawMessage) ([]WorkflowStage, error) { // Try wrapped format first var wrapped struct { Stages []WorkflowStage `json:"stages"` } if err := json.Unmarshal(raw, &wrapped); err == nil && len(wrapped.Stages) > 0 { return wrapped.Stages, nil } // Fallback to flat array var stages []WorkflowStage if err := json.Unmarshal(raw, &stages); err != nil { return nil, fmt.Errorf("corrupt version snapshot: %w", err) } return stages, nil }