Versions in this module Expand all Collapse all v0 v0.1.0 Jun 18, 2026 Changes in this version + const DefaultPruneThreshold + const OpCreate + const OpDelete + const OpNoop + const OpUpdate + func CheckSafety(plan *Plan, liveCount int, desiredCount int, pruneThreshold float64) error + func EntityName(c Change) string + func FormatPlan(w io.Writer, plan *Plan) + func PlanToJSON(plan *Plan) ([]byte, error) + func SavePlan(plan *Plan, path string) error + type Applier struct + BulkDelete func(ctx context.Context, catalogID string, externalIDs []string) error + BulkUpsert func(ctx context.Context, catalogID string, ents []catalog.DesiredEntity) error + func (a *Applier) Apply(ctx context.Context, plan *Plan) error + type Change struct + After *catalog.DesiredEntity + Before *catalog.LiveEntity + ExternalID string + FieldDiffs map[string][2]string + Op string + type Counts struct + Create int + Delete int + Noop int + Update int + func (c Counts) IsNoop() bool + type JSONChange struct + ExternalID string + FieldDiffs map[string][2]string + Name string + Op string + type JSONOutput struct + Catalog string + CatalogID string + Changes []JSONChange + Counts Counts + type Plan struct + Catalog string + CatalogID string + Changes []Change + Counts Counts + func Diff(catalogName string, catalogID string, live []catalog.LiveEntity, ...) *Plan + func LoadPlan(path string) (*Plan, error) + type StaleChange struct + ExternalID string + Reason string + func ValidatePlanFreshness(plan *Plan, live []catalog.LiveEntity) []StaleChange