The two residue notes from the superseded #98, promoted from a PR comment so they can be decided rather than lost.
cluster-up / cluster-down as Ops. behold reads ops/ and puts a Run button on each entry — fountain-apply already has one. The cluster's own lifecycle is the missing pair: a cluster-up Op wrapping k3dUp against the built dist/k3d-local.yaml, a cluster-down wrapping k3dDown. The justfile recipes stay the terminal path (#97's design holds — the recipe switches context explicitly under the guard); the Ops are the same actions with a handle something other than a terminal can pull. One consideration carried over from the #98 attempt: k3dUp given only an opaque configFile writes a dedicated kubeconfig on the reuse path (it cannot see the config's kubeconfig options), so an Op here should state updateDefaultKubeconfig/switchCurrentContext as args explicitly to keep create and reuse consistent — or deliberately keep both off and report the dedicated path, which matches this repo's guard philosophy better.
cluster-down's - tolerance is dead weight. k3d cluster delete is a no-op success when the cluster is already gone, so the recipe's leading - (ignore failure) can go — a real failure there is currently being swallowed.
The two residue notes from the superseded #98, promoted from a PR comment so they can be decided rather than lost.
cluster-up / cluster-down as Ops. behold reads
ops/and puts a Run button on each entry —fountain-applyalready has one. The cluster's own lifecycle is the missing pair: acluster-upOp wrappingk3dUpagainst the builtdist/k3d-local.yaml, acluster-downwrappingk3dDown. The justfile recipes stay the terminal path (#97's design holds — the recipe switches context explicitly under the guard); the Ops are the same actions with a handle something other than a terminal can pull. One consideration carried over from the #98 attempt:k3dUpgiven only an opaqueconfigFilewrites a dedicated kubeconfig on the reuse path (it cannot see the config's kubeconfig options), so an Op here should stateupdateDefaultKubeconfig/switchCurrentContextas args explicitly to keep create and reuse consistent — or deliberately keep both off and report the dedicated path, which matches this repo's guard philosophy better.cluster-down's-tolerance is dead weight.k3d cluster deleteis a no-op success when the cluster is already gone, so the recipe's leading-(ignore failure) can go — a real failure there is currently being swallowed.