Deployment model · one service, end to end

Draft: not yet agreed. Nothing here is settled until you answer the open points.

Example: service tin on platform nitroso · Bun API + worker · Postgres + queue

One service, from repo to cluster

A team writes one repo. CI publishes one image and two charts at one version. Kargo moves a pointer; Argo CD draws the rest.

  • People write 4 places: the service repo, the platform repo (carbon), Infisical (for app-only secrets) and, for new landscapes or clusters only, fleet. DECIDED · OD D3
  • Two charts per service: the app chart goes to every cluster of a landscape; the primordial chart goes once to Primordial. DECIDED · OD D3 #5; R20
  • Nothing about the service is written into fleet by hand. Machines write its row files. DECIDED · OD D3; FLEET

Example: tin is a Bun API (api) plus a queue worker (worker) on platform nitroso. It has one Postgres database and one queue.

Read this first: diene has no Bun API template yet. The worker side comes from bun-consumer; the API side follows the decided app-chart list and the PoC. OPEN · T1

Tap a box. Its sources and its results light up.

On a phone: tap a box. Solid outline = where it goes; dashed outline = where it comes from.

Repos, then what CI and CD publish, then what runs in the clusters. Tap a box to see where it comes from and where it goes.Repos (people and machines write here)Published by CI/CDIn the clustersdiene templatesworkspace → bun-consumernix-registry toolsproblemgen · chart-checkspolicies stand-in3 rules (future VAP)nitroso.tinthe service reponitroso.carbonplatform.yaml · namespace · storefleetregistry · machinerysulfoxide chartsESO · Reloader · gateway…Infisicalproject nitroso · env per landscapeImagetin:1.4.3App charttin:1.4.3 (OCI)Primordial charttin-primordial:1.4.3Kargo Freightall three at 1.4.3Row pinfleet: nitroso/…/pichuArgo CDon PrimordialRecords on PrimordialDatabase · Problem · GrafanaT3 operatormakes DB + queue, writes secretsNeon + Upstashoutside, per landscapeError portal (erbium)builds the Problem pagesBase layerESO · Reloader · AlloyAdmission rules (VAP)cluster-wideDeploymentstin-api · tin-workerConfigMap tin-configconfig/<landscape> insideSecret tinvia ExternalSecretdb-init Jobbefore each rollout
Repos, then what CI and CD publish, then what runs in the clusters. Tap a box to see where it comes from and where it goes.Repos (people and machines write here)Published by CI/CDIn the clustersdiene templatesworkspace →bun-consumernix-registry toolsproblemgen ·chart-checkspolicies stand-in3 rules (future VAP)nitroso.tinthe service reponitroso.carbonplatform.yaml ·namespace · storefleetregistry · machinerysulfoxide chartsESO · Reloader ·gateway…Infisicalproject nitroso · envper landscapeImagetin:1.4.3App charttin:1.4.3 (OCI)Primordial charttin-primordial:1.4.3Kargo Freightall three at 1.4.3Row pinfleet: nitroso/…/pichuArgo CDon PrimordialRecords on PrimordialDatabase · Problem ·GrafanaT3 operatormakes DB + queue,writes secretsNeon + Upstashoutside, per landscapeError portal (erbium)builds the ProblempagesBase layerESO · Reloader · AlloyAdmission rules (VAP)cluster-wideDeploymentstin-api · tin-workerConfigMap tin-configconfig/<landscape>insideSecret tinvia ExternalSecretdb-init Jobbefore each rollout
  • template or tool
  • repo people write
  • secret store
  • published / pinned
  • deploy machinery
  • runs in a cluster
  • open / not built

Nothing picked. Try App chart or Deployment: api.

Repos

  • diene templates: The templates the repo is made from: nix root → workspace → shared → bun-base (+ observability) → bun-consumer.
  • nix-registry tools: Command-line tools the repo's dev shell loads: problemgen (Problem code + record), chart-checks (render checks), releaser (versions), later obs.
  • policies stand-in: A stand-in repo with the cluster rules: labels required, reload label required, live-reload inputs. Chart checks run against it.
  • nitroso.tin: Code, config, problem files, signal files and two charts: infra/root_chart (app) and infra/primordial_chart (records).
  • nitroso.carbon: The platform repo: platform.yaml (landscapes, promotion order) and charts for the platform namespace and secret store.
  • fleet: Landscapes and clusters (registry/, people) and the deploy rules: fleet-root and the compiler chart diene-platform (machinery/).
  • sulfoxide charts: Base-layer charts every cluster gets: cobalt (secret sync), chlorine (Reloader), platinum (gateway), sulfur + zinc (certificates), aluminium (Alloy), xenon (metrics-server).
  • Infisical: The secret store. One project per platform; one environment per landscape; folders like /database/main and /tin.

Published and pinned

  • Image: One container image. api and worker are two commands of the same image.
  • App chart: The packed infra/root_chart, with config/ copied in at build time.
  • Primordial chart: The packed infra/primordial_chart: dependency records, Problem record, Grafana alerts and dashboards.
  • Kargo Freight: Kargo's Warehouse watches the registry and makes Freight only when image + both charts exist at the same version.
  • Row pin: One file per service per landscape with pin: {primordial, chart, image}. Kargo pushes the version into it.

In the clusters

  • Argo CD: Reads the row, renders both charts with Helm, applies them: primordial chart → Primordial, app chart → every cluster of the landscape.
  • Records on Primordial: The primordial chart's objects: Database tin, KeyValue tin (the queue), Problem tin.api.pichu.v1, Grafana alerts and dashboards.
  • T3 operator: Reads Database and KeyValue, makes the Neon database and the Upstash store, and writes the passwords into Infisical.
  • Neon + Upstash: The real database and queue store, outside Kubernetes. One per landscape.
  • Error portal (erbium): Watches every Problem record, builds one Cloudflare Worker site, and serves a page per problem type.
  • Base layer: What every cluster runs before any service: secret sync, Reloader, gateway, cert-manager, Alloy collectors, metrics-server.
  • Admission rules (VAP): The same rules as the stand-in, enforced inside the cluster: 4 labels, reload label, live-reload inputs.
  • Deployments: Two Deployments from the app chart, each pod labelled durian.cloud/reload: restart (or live). Plus Service + HTTPRoute for the api.
  • ConfigMap tin-config: The app's config files, from inside the app chart. Includes errorPortal.url.
  • Secret tin: Made by ESO from the app chart's ExternalSecret, reading Infisical through the platform store.
  • db-init Job: Runs the schema migrations and seed before the pods update (Helm pre-upgrade + Argo PreSync).

The words, once

  • Landscape = one environment with its own data. Example: pichu (dev), pikachu (staging), raichu (prod Singapore), ampharos (prod US). DECIDED · ENV §1
  • Cluster = one Kubernetes cluster of a landscape, named landscape + mark. Example: pichu-opal (PoC name). DECIDED · ARCH §2 PAPERS SILENT · real names
  • Primordial = the control cluster. It runs Argo CD, Kargo, Infisical and the operators. No app pods run there. DECIDED · ENV §1.3
  • Platform = a product team's space. Example: nitroso. Its home repo is nitroso.carbon. DECIDED · carbon
  • Fleet = the one repo that lists landscapes and clusters, holds the deploy rules, and holds the row files. DECIDED · OD D2, D3
  • Row file = one small file per service per landscape that says which version runs there. Kargo writes it. DECIDED · FLEET
  • Kargo = moves a version from landscape to landscape. Freight = one release Kargo found (image + 2 charts). DECIDED · OD D3
  • Argo CD = makes clusters match git; it renders our Helm charts. DECIDED · OD D53, D54
  • T3 = our own operator (the dependency operator). It makes databases and writes their passwords. DECIDED · dependency-operator
  • Sulfoxide = the base layer on every cluster: secret sync, Reloader, gateway, certificates, Alloy. DECIDED · OD D49

The tags

  • DECIDED = written in a design paper or an owner ruling.
  • BUILT = a real file on a branch of ProtoDurian/diene.all (or the real primordial repo).
  • PoC TESTED = ran in the whole-system PoC (a hand-built test, not template output).
  • OPEN = the owner has to pick, or nobody wrote it down.
  • CONTRADICTION = two sources say different things.
  • PAPERS SILENT = the papers say nothing.

All pages