# `Linx.Cgroup.Reconcile.Report`
[🔗](https://github.com/oshlabs/linx/blob/v0.2.0/lib/linx/cgroup/reconcile/report.ex#L1)

The outcome of one `Linx.Cgroup.Reconcile.reconcile/4` pass.

cgroup limit writes are independent per interface file, so the pass is
**best-effort**: every op is attempted, and any that error land in `:failed`
rather than aborting the rest. (It shares the report shape of
`Linx.Sysctl.Reconcile.Report` and `Linx.Netlink.Rtnl.Reconcile.Report`; the
struct is uniform, the strategy is per subsystem — see the reconcile design
notes.)

Fields:

  * `:converged?` — `true` iff nothing was left undone: no ops were needed, or
    every op applied.
  * `:applied` — ops that succeeded this pass, in attempt order.
  * `:failed` — `{op, %Linx.Cgroup.Error{}}` pairs for ops that errored.
  * `:pending` — always `[]` for cgroup (best-effort attempts everything);
    the field exists for shape-parity with fail-fast subsystems.
  * `:last_applied` — the **updated** ownership map to thread into the next
    pass (see `Linx.Cgroup.Reconcile`). Carrying it here lets a loop do
    `{:ok, report} = reconcile(cg, desired, report.last_applied)` each tick.

## Inspect

    #Linx.Cgroup.Reconcile.Report<converged: 2 applied>
    #Linx.Cgroup.Reconcile.Report<1 applied, 1 failed>

# `t`

```elixir
@type t() :: %Linx.Cgroup.Reconcile.Report{
  applied: [Linx.Cgroup.Reconcile.op()],
  converged?: boolean(),
  failed: [{Linx.Cgroup.Reconcile.op(), Linx.Cgroup.Error.t()}],
  last_applied: Linx.Cgroup.Reconcile.last_applied(),
  pending: [Linx.Cgroup.Reconcile.op()]
}
```

---

*Consult [api-reference.md](api-reference.md) for complete listing*
