Files
HIPs/HIPs/hip-0409-kms-crd.md
zeekay ad5a010f79 Three words for what a proposal is, and a generator that refuses
The same fact lived in nine hand-kept places and they disagreed about 58
proposals. This makes the file the only authority and everything else a
projection of it.

ONE VOCABULARY, in vocabulary.json, read by the lint, the generator and the
doc site. Three words, each answering "can I rely on this?" and nothing else:

    Draft    nothing implements it yet, or its own text says the work is ahead
    Final    the thing it specifies exists in the code
    Living   governance and process: amended in place, never finished

Eight spellings folded in. `Active` was the one doing real damage: on four Meta
and Process HIPs it meant living, on 48 others it meant shipped, and one word
doing two jobs is why nothing agreed. `Review` and `Last Call` described a
queue rather than a document, and a proposal under review is still one you
cannot build against.

STATUS IS EARNED, not declared. Every Standards Track proposal was checked
against the estate: 235 have their implementation, and eight do not and say so.
HIP-0095 carries a twelve-week plan ending at "mainnet launch" and has no code.
HIP-0525 specifies an all-machine meeting while apps/meet refuses a machine a
seat. HIP-0078 names a prover at a "planned location" that does not exist.
HIP-0114 is the cog.* procedure set, and that procedure set returns nothing.
HIP-0003, HIP-0102, HIP-0305 and HIP-0901 likewise: looked, found nothing.

SIXTEEN TOMBSTONES DELETED rather than statused. A dead document kept alive in
the index is one concept wearing two names. Each successor exists and carries
the text, and the 90 references that pointed at a tombstone now point at it --
whole markdown links at once, so link text cannot outlive its target. Three of
the sixteen were pure compatibility: HIP-0028 specified a migration off a
Bitnami chart, HIP-0029 dual-engine MySQL, HIP-0030 a schema-deprecation
policy. We ship no backwards compatibility, so we do not specify it.

Nine links were already broken and had been since the corpus was renumbered:
short-form ./hip-5.md paths that never existed. Two named the wrong proposal --
one cited "HIP-1: Hanzo Multimodal Models" where multimodal is HIP-0003.

THE GENERATOR REFUSES more often than it writes, because a short table looks
exactly as authoritative as a complete one. Rows must equal files; a shrinking
index must say by how much; a section whose input is missing is an error, not
an omission; nothing is written until all of it validates. Its self-test breaks
the corpus eleven ways and requires each to refuse AND leave README byte-
identical -- a guard that reports after half-writing has protected nothing.
The lint's second implementation of the same comparison is gone.

The site rendered 52 proposals with a fallback grey badge and counted them
toward none of its three stat tiles, because docs/lib/source.ts declared a
status union by hand: it admitted a `Stagnant` no file has ever carried and
omitted the one 52 files did. Five components each kept their own copy of the
colours. All six now read vocabulary.json.
2026-08-28 18:05:41 -07:00

1.6 KiB

hip, title, author, type, category, status, created
hip title author type category status created
0409 KMS CRD Hanzo Platform Team Standards Track Operator Final 2026-05-19

HIP-0409: KMS CRD

Abstract

The KMS CRD is the facade Kind for the Hanzo secrets manager (hanzoai/kms). It is a Service facade with a thicker reconciler: it also produces KMSSecret cross-references and Universal-Auth credentials. See HIP-027 for the KMS design.

Specification

Group + version

hanzo.ai/v1, plural kmsapps, shortname kms.

Spec fields

Same shape as Service (HIP-400). Conventionally:

  • image.repository: ghcr.io/hanzoai/kms
  • ports: containerPort: 8080 (HTTP), containerPort: 9000 (metrics)
  • mounts kms-postgres secret for backing DB
  • mounts kms-encryption-key secret for at-rest encryption

Example CR

apiVersion: hanzo.ai/v1
kind: KMS
metadata:
  name: kms
  namespace: hanzo
spec:
  image:
    repository: ghcr.io/hanzoai/kms
    tag: v2.4.1
  replicas: 2
  ports:
    - name: http
      containerPort: 8080
      servicePort: 80
  envFrom:
    - secretRef:
        name: kms-secrets
  readinessProbe:
    path: /api/status
    port: 8080

Generated K8s resources

Deployment, Service. KMS itself exposes a CRD (KMSSecret) that any other Service can reference via spec.kmsSecrets.

Operator reconciler

~/work/hanzo/operator/src/controllers/service.rs (via KMS facade).

  • HIP-0027 (KMS standard)
  • All services depend on KMS for secret resolution.

Status

Implemented in hanzoai/operator v0.3.0+. CR kms active in cluster.