From 5a7b45f1b96824cad3cb88552cb72a8aaddbd692 Mon Sep 17 00:00:00 2001 From: jwright Date: Mon, 17 Aug 2026 15:01:19 +1000 Subject: [PATCH] arc: reading key (standalone page), top-to-bottom legend lighting, end-to-end flow blueprint --- assets/dist/delivery-flow.svg | 113 ++++++++++++++++++++++++++++++++++ build.sh | 3 +- pilot/arc.tpl.html | 64 ++++++++++++++++--- pilot/assemble-arc.mjs | 4 +- pilot/assemble-arc.py | 5 +- pilot/manifest-supply.json | 2 +- 6 files changed, 177 insertions(+), 14 deletions(-) create mode 100644 assets/dist/delivery-flow.svg diff --git a/assets/dist/delivery-flow.svg b/assets/dist/delivery-flow.svg new file mode 100644 index 0000000..3cf459e --- /dev/null +++ b/assets/dist/delivery-flow.svg @@ -0,0 +1,113 @@ + + + + + + + + + + The delivery flow, end to end + four lanes, one workload - courses VI, VIII and VII, in the order the bytes travel + + + + THE WORKLOAD + + synced state + (C-VI) + rendered shape + (C-VIII) + digest-pinned + image (C-VII) + injected secret + (C-VI) + + + + CHANGE + + + a commit + + GitHub repo + + ArgoCD: render + diff + sync + + + + + + + pull + the cluster pulls - no CI credential can touch it; drift is put back, rollback is git revert + + + SHAPE + + + the chart + + values context + one file per cluster + + schema gate + required, or refuse + + rendered manifests + + + + + + + + into the sync + + + ARTEFACT + + + CI builds + once, only once + + ACR upstream + tag@sha256 minted + + zot mirror + the fleet pulls once + + node pulls + by digest + + + + + + + + promotion is a copy of the same digest - if the digest changed, it is a new candidate, not a promotion + + + SECRET + + + Azure Key Vault + holds the values + + ESO operator + exchanges + keeps synced + + Secret, in-cluster + never in git + + + + + + + git holds only the reference + + + this page shipped through this exact flow - the delivery arc is deployed by a delivery arc + diff --git a/build.sh b/build.sh index 0e65e8b..5df0a4f 100755 --- a/build.sh +++ b/build.sh @@ -13,7 +13,8 @@ cd -- "$here" for f in pilot/arc.tpl.html pilot/manifest-gitops.json pilot/manifest-supply.json \ pilot/manifest-helm.json gsap.min.js st.min.js \ assets/dist/course-VI-gitops.webp assets/dist/course-VII-supply-chain.webp \ - assets/dist/course-VIII-helm-press.webp assets/dist/appendix-dependency-ledger.webp; do + assets/dist/course-VIII-helm-press.webp assets/dist/appendix-dependency-ledger.webp \ + assets/dist/delivery-flow.svg; do [[ -f "$f" ]] || { printf 'missing source: %s\n' "$f" >&2; exit 1; } done diff --git a/pilot/arc.tpl.html b/pilot/arc.tpl.html index 2a67690..6eefc8e 100644 --- a/pilot/arc.tpl.html +++ b/pilot/arc.tpl.html @@ -6,6 +6,15 @@ + +
@@ -30,7 +39,7 @@

The loop you already know, one level up

-

Course II taught the reconciliation loop: desired versus actual, fix the difference, repeat. +

C-II taught the reconciliation loop: desired versus actual, fix the difference, repeat. ArgoCD is the same habit applied to delivery. An Application names a repo, a path and a revision - watch this branch of this repository - and the controller renders what it finds there, compares it against the live cluster, and syncs the difference. The deploy button is a @@ -44,7 +53,7 @@ it back, and what leaves git leaves the cluster. Rollback is git revert, which is why commit hygiene is an operational skill.

Field note. Fighting the reconciler over SSH is arm-wrestling a - machine that does not get tired - Course II's warning, now with a face. The fix is always + machine that does not get tired - C-II's warning, now with a face. The fix is always upstream, in git.

The one thing git never holds

Git holds everything except secrets - a secret in git is published, forever, to everyone who @@ -57,7 +66,7 @@

Delivery stops being an event and becomes a property: the cluster is always converging on what the repository says. "Who deployed this?" becomes "who merged this?" - and that question always has an answer.

-

Pre-reads: Course II · +

Pre-reads: C-II · Kubernetes concepts · git + pull requestsFurther: Argo CD · @@ -117,7 +126,7 @@

Names that can move are convenient exactly until they move. Address content by what it is, and the supply chain stops being a chain of trust and becomes a chain of arithmetic.

-

Pre-reads: Course I · +

Pre-reads: C-I · Kubernetes imagesFurther: zot · Azure Container Registry · @@ -164,7 +173,7 @@ one values file: names, addresses, sizes, flags. The context is deliberately values-only; the moment it carries its own manifests there are two owners for one object, and they will disagree. One value can feed many rendered artefacts - an address appearing in the app config, - the network attachment and two policies renders from one field, so the copies cannot diverge.

+ the network attachment and two policies renders from one field, so the copies cannot diverge - the lived version is BLOG in the key above.

The chart owns the shape. The context owns the numbers.

Make the template refuse

A template that renders whatever it is given just moves the failure downstream. The grown-up @@ -176,7 +185,7 @@

Fleet consistency is not a discipline problem, it is a construction problem. Divergence stops being something you police and becomes something the tooling cannot express.

-

Pre-reads: Course II · +

Pre-reads: C-II · Kubernetes objectsFurther: Helm docs · chart template guide · @@ -245,6 +254,27 @@

+
+
+

The whole arc · end to end

+

One flow, no gaps.

+

Every course above is one stretch of the same journey. Here is the full run, + drawn in the house blueprint style: the change lane, the shape lane, the artefact lane and + the secret lane, all converging on one running workload.

+
+
+ End-to-end delivery flow. Change lane: a commit lands in the GitHub repository, ArgoCD
+              renders and diffs it, and syncs the cluster - the cluster pulls, nothing pushes.
+              Shape lane: the Helm chart plus a per-cluster values context passes the schema gate
+              and renders the manifests ArgoCD applies. Artefact lane: CI builds once, pushes to
+              Azure Container Registry, the zot mirror caches it, and the node pulls by digest.
+              Secret lane: Azure Key Vault holds the values, the External Secrets operator syncs
+              them in - git only ever holds the reference. All four lanes converge on the running
+              workload. +
+
+