# 0048. Kokumi is an option of `ichor init`'s Argo CD hand-off, designed now and built later

Status: Accepted (implemented 2026-10-27); superseded in part by ADR 0090 (`ichor images list --kokumi` removed) and in part by ADR 0099 · Date: 2026-10-26 · Design section: GitOps and Argo CD

Decided: `ichor init --argocd --kokumi` prepares the OCI repo-creds Secret, installs neither Kokumi nor Argo CD, and leaves the repository skeleton (including the Cilium Application) unchanged; `ichor images list --kokumi` names Kokumi 0.17.0's images

## Context

A user asked for Kokumi to be usable with Ichor, specifically "as an option
when installing Argo CD", not as an `ichor gitops export` target, a PR-mode
destination or a third kind of tracking detection.

Verified from Kokumi's own docs (kokumi.dev, github.com/kokumi-dev/kokumi,
read 2026-10-26): an OCI-first delivery operator, Apache-2.0, "currently
experimental". Renders become immutable content-addressed OCI artifacts
(Preparations); a Serving creates or updates an Argo CD `Application` in the
`argocd` namespace with `spec.source.repoURL` set to the Preparation's OCI
artifact and `targetRevision` to its digest. It requires Argo CD >= 3.3
installed first and Kubernetes >= 1.26. It installs by `kubectl apply -f`
of a release `install.yaml`. Argo CD needs a repo-creds Secret
(`argocd.argoproj.io/secret-type: repo-creds`, `type: oci`, `url:
oci://kokumi-registry.kokumi.svc.cluster.local:5000`,
`insecureOCIForceHttp: "true"` because the bundled registry serves plain
HTTP). Kokumi's Applications have no resources-finalizer.

## Decision

Design only (architecture.md, "Kokumi as the delivery layer in front of
Argo CD"):

- `init` offers Kokumi as a choice of the Argo CD hand-off. It prepares the
  repo-creds Secret from the CLI (never into Git) and installs neither Argo
  CD nor Kokumi, consistent with ADR 0019: fetching and trusting a
  third-party release during a privileged bootstrap is not `init`'s call.
- Ichor's tracking detection, Flux handling and `argocd-cm` reading are
  unchanged.
- Flag name (`--delivery kokumi` is a placeholder) is left to implementation.

## Why the first cut left implementation out

Reconciling the design against the code turned up gaps that matter more than
a new option, and they should be filled first so Kokumi is not built on top
of them. Adding a delivery layer before those are closed would widen the
surface that has to be re-verified.

## Unknowns (what to check before building)

- (Partly answered, ADR 0055: in Kokumi's source at commit 4126144 the
  Application is hard-coded with prune, selfHeal and `ServerSideApply=true`,
  has no `ignoreDifferences`, and edits to it are reverted. No sync-wave or
  other options are passed. Still to confirm on a test cluster.)
- Whether Kokumi's Application can be given a `ref`/path or only a bare
  artifact, and whether its Applications can carry Ichor's sync-wave and
  sync options. Check: Kokumi's Serving CRD reference and a generated
  Application on a test cluster.
- How the root Application (source: a repository) coexists with
  Kokumi-created Applications, and which Ichor CRs would be delivered as
  Products/Orders. Check: Kokumi's Product/Order schema and
  "Producing Base Artifacts" guide. Not in the pages read.
- Air gap: the images Kokumi itself and its scanner need, and how to mirror
  its artifacts. Check: Kokumi's Container Images (operator guide) and
  Registries guides; the pages read only listed these topics.
- The Argo CD version range: Kokumi says >= 3.3; ADR 0019 verified shapes
  against v3.5.x. Likely compatible, not tested.
- Kokumi's project status is "experimental"; its API is `v1alpha1`.

## Consequences

- Without `--kokumi`, `init --argocd` behaves as ADR 0019 describes.
- `ichor images list --kokumi` prints Kokumi's images (see Implementation); it needed a section only if Kokumi's
  images are shown to be mirrorable through the existing path.

## Implementation (2026-10-27)

Accepted and built, in the narrow form the Decision above describes.

- Source confirmed: github.com/kokumi-dev/kokumi, release 0.17.0 (2026-10-11,
  latest at the time), one asset `install.yaml` (sha256
  `345223726800ca3f08f633c76c91a38265bc0c131551b24dc49c69ee0cd7b840`). Its CRDs
  are in `delivery.kokumi.dev` (Approval, Kitchen, Menu, Order, Pantry,
  Preparation, Recipe, Serving); everything runs in namespace `kokumi`. The
  pinned version lives in `internal/cli/kokumi.go` (`kokumiVersion`).
- Flag: `ichor init --argocd --kokumi` (`--kokumi` without `--argocd` is
  refused before anything happens). The old `--delivery kokumi` placeholder was
  not used: this is a boolean refinement of `--argocd`, not a choice among
  delivery kinds.
- What it does: creates the Secret `kokumi-registry-repo-creds` in
  `--argocd-namespace` (`argocd.argoproj.io/secret-type: repo-creds`, `type:
  oci`, `url: oci://kokumi-registry.kokumi.svc.cluster.local:5000`,
  `insecureOCIForceHttp: "true"`; the service name and port 5000 were checked
  in 0.17.0's install.yaml). Soft-fail like the repository Secret. It prints
  that Kokumi was not installed.
- What it does not do: the repository skeleton is byte-identical with and
  without `--kokumi` (tested). Ichor writes no Kokumi CRs (Kitchen, Menu, Order,
  Serving...) and moves none of its own CRs behind Kokumi. This is the
  conservative answer to the root-Application coexistence unknown: the root
  Application keeps delivering everything Ichor generates.
- Cilium: the Cilium Application stays a plain Argo CD Application in the
  repository (`apps/cni/application.yaml`, delivered by the root Application),
  so it keeps `ignoreDifferences` and `ServerSideApply=true` (ADR 0055). Kokumi
  never delivers Cilium, which removes the open question rather than answering
  the `argocd-cm` route. A user who delivers other things through Kokumi is
  unaffected.
- Air gap: Kokumi 0.17.0's install.yaml runs two images, listed by `ichor images
  list --kokumi` under `kokumiImages` with their upstream registries (not
  rewritten by `--image-registry`): `ghcr.io/kokumi-dev/kokumi:0.17.0` (operator
  and server) and `docker.io/library/registry:3.1.2@sha256:ddf75434...`. Images
  referenced in Orders/Recipes at runtime are the user's and not listed.
- `gitops export` and `gitops handoff` are unchanged: Kokumi-created
  Applications are ordinary Argo CD Applications and tracking detection is
  untouched.

Deferred: delivering any Ichor CR through Kokumi; the Argo CD >= 3.3 check and
Kubernetes >= 1.26 check; testing against a real cluster (not done, no cluster
was touched); a TLS or authenticated Kokumi registry (the Secret assumes the
bundled plain-HTTP one); tracking Kokumi upgrades past 0.17.0 (v1alpha1,
experimental).
