package configrefresh // Status is the overall classification of a refresh operation. type Status string const ( // StatusApplied means all detected changes are mutable and were (or would be) applied live. StatusApplied Status = "applied" // StatusRestartRequired means at least one change requires a process restart. StatusRestartRequired Status = "restart_required" // StatusRejected means the candidate config failed to load or validate. StatusRejected Status = "rejected" ) // NodeResult captures the config refresh outcome for one connected node. type NodeResult struct { NodeID string `json:"node_id"` Alias string `json:"alias,omitempty"` Status string `json:"status"` Error string `json:"error,omitempty"` RestartRequiredPaths []string `json:"restart_required_paths,omitempty"` } // RejectedResult builds a rejected Result with stable, non-nil change and // ops-report slices so the API/CLI JSON response is consistent across rejected // paths (invalid request, load/validate failure, apply failure). func RejectedResult(req Request, summary string) Result { return Result{ Status: StatusRejected, Mode: req.Mode, RequestID: req.RequestID, Summary: summary, Changes: []Change{}, ChangedNodes: []string{}, ChangedProviders: []string{}, ChangedModels: []string{}, RestartRequiredPaths: []string{}, NodeResults: []NodeResult{}, } } // Change describes one detected config diff and its classification. type Change struct { Path string `json:"path"` Class Status `json:"class"` Previous string `json:"previous,omitempty"` Next string `json:"next,omitempty"` } // Result is the response from a refresh evaluate or apply operation. type Result struct { Status Status `json:"status"` Mode Mode `json:"mode"` RequestID string `json:"request_id,omitempty"` Changes []Change `json:"changes"` Summary string `json:"summary"` // Derived ops-report fields let an operator confirm which node, provider, // and model items changed and which paths force a restart, without parsing // individual Change paths. They are stable, sorted, and always non-nil so // the API/CLI JSON response is consistent across runs. ChangedNodes []string `json:"changed_nodes"` ChangedProviders []string `json:"changed_providers"` ChangedModels []string `json:"changed_models"` RestartRequiredPaths []string `json:"restart_required_paths"` NodeResults []NodeResult `json:"node_results,omitempty"` }