arc: z-order in the slice engine + gitops collapse tune (shard and cluster nests)

This commit is contained in:
2026-08-17 14:28:45 +10:00
parent 7a82fca26e
commit c0b9359e27
5 changed files with 22 additions and 4 deletions
+1
View File
@@ -365,6 +365,7 @@ body:not(.fx) .bench{display:none}
d.className = "slab"; d.className = "slab";
d.style.backgroundImage = "url(" + u.flat.src + ")"; d.style.backgroundImage = "url(" + u.flat.src + ")";
d.style.clipPath = "polygon(" + p.points.map(q => q[0] + "% " + q[1] + "%").join(",") + ")"; d.style.clipPath = "polygon(" + p.points.map(q => q[0] + "% " + q[1] + "%").join(",") + ")";
if (p.z) d.style.zIndex = String(p.z);
u.scene.appendChild(d); u.scene.appendChild(d);
return d; return d;
}); });
+10 -4
View File
@@ -6,6 +6,7 @@
"name": "repo", "name": "repo",
"title": "The repository", "title": "The repository",
"blurb": "Desired state lives here. The deploy button is a git commit; the audit log is git log.", "blurb": "Desired state lives here. The deploy button is a git commit; the audit log is git log.",
"z": 3,
"points": [ "points": [
[ [
13.7, 13.7,
@@ -147,6 +148,7 @@
"name": "engine", "name": "engine",
"title": "ArgoCD", "title": "ArgoCD",
"blurb": "Watches repo + path + revision, compares desired against actual, and syncs the difference.", "blurb": "Watches repo + path + revision, compares desired against actual, and syncs the difference.",
"z": 5,
"points": [ "points": [
[ [
48.29, 48.29,
@@ -288,6 +290,7 @@
"name": "sheets", "name": "sheets",
"title": "Rendered manifests", "title": "Rendered manifests",
"blurb": "What the repo's charts and manifests render to - build artefacts nobody hand-edits.", "blurb": "What the repo's charts and manifests render to - build artefacts nobody hand-edits.",
"z": 2,
"points": [ "points": [
[ [
39.57, 39.57,
@@ -397,6 +400,7 @@
"name": "cluster", "name": "cluster",
"title": "The cluster", "title": "The cluster",
"blurb": "Actual state. It pulls its own future - no CI system holds a credential that can touch it.", "blurb": "Actual state. It pulls its own future - no CI system holds a credential that can touch it.",
"z": 1,
"points": [ "points": [
[ [
52.8, 52.8,
@@ -535,13 +539,14 @@
73.22 73.22
] ]
], ],
"dx": -20.96, "dx": -16.01,
"dy": -19.23 "dy": -14.69
}, },
{ {
"name": "shard", "name": "shard",
"title": "Drift", "title": "Drift",
"blurb": "A hand-edited live object. selfHeal puts it back; what leaves git leaves the cluster.", "blurb": "A hand-edited live object. selfHeal puts it back; what leaves git leaves the cluster.",
"z": 4,
"points": [ "points": [
[ [
80.04, 80.04,
@@ -660,13 +665,14 @@
94.73 94.73
] ]
], ],
"dx": -27.99, "dx": -13.61,
"dy": -32.13 "dy": -15.62
}, },
{ {
"name": "vault", "name": "vault",
"title": "The vault", "title": "The vault",
"blurb": "Azure Key Vault in the worked example. Git carries the reference; the vault carries the value. Never absorbed into the pipeline.", "blurb": "Azure Key Vault in the worked example. Git carries the reference; the vault carries the value. Never absorbed into the pipeline.",
"z": 6,
"points": [ "points": [
[ [
56.07, 56.07,
+4
View File
@@ -6,6 +6,7 @@
"name": "press", "name": "press",
"title": "The chart", "title": "The chart",
"blurb": "A function with holes - the template owns every structural decision, and renders whatever fills it.", "blurb": "A function with holes - the template owns every structural decision, and renders whatever fills it.",
"z": 0,
"points": [ "points": [
[ [
28.09, 28.09,
@@ -155,6 +156,7 @@
"name": "contexts", "name": "contexts",
"title": "Values contexts", "title": "Values contexts",
"blurb": "One small file per cluster - names, addresses, sizes. The cluster's whole voice, values only.", "blurb": "One small file per cluster - names, addresses, sizes. The cluster's whole voice, values only.",
"z": 0,
"points": [ "points": [
[ [
24.11, 24.11,
@@ -280,6 +282,7 @@
"name": "renders", "name": "renders",
"title": "The renders", "title": "The renders",
"blurb": "Same framework, different numbers - one function, many clusters. Review the render, not just the template.", "blurb": "Same framework, different numbers - one function, many clusters. Review the render, not just the template.",
"z": 0,
"points": [ "points": [
[ [
54.4, 54.4,
@@ -373,6 +376,7 @@
"name": "gate", "name": "gate",
"title": "The schema gate", "title": "The schema gate",
"blurb": "values.schema.json + required: a context missing a value fails at render time, in the pipeline.", "blurb": "values.schema.json + required: a context missing a value fails at render time, in the pipeline.",
"z": 0,
"points": [ "points": [
[ [
52.58, 52.58,
+6
View File
@@ -6,6 +6,7 @@
"name": "image", "name": "image",
"title": "The image", "title": "The image",
"blurb": "Course I's layers, shipped as one unit - the thing whose name we must say precisely.", "blurb": "Course I's layers, shipped as one unit - the thing whose name we must say precisely.",
"z": 0,
"points": [ "points": [
[ [
8.03, 8.03,
@@ -107,6 +108,7 @@
"name": "registry", "name": "registry",
"title": "Upstream registry", "title": "Upstream registry",
"blurb": "The managed registry CI pushes to - Azure Container Registry in the worked example.", "blurb": "The managed registry CI pushes to - Azure Container Registry in the worked example.",
"z": 0,
"points": [ "points": [
[ [
31.21, 31.21,
@@ -216,6 +218,7 @@
"name": "mirror", "name": "mirror",
"title": "The mirror", "title": "The mirror",
"blurb": "zot, a pull-through cache: the fleet asks it, it asks upstream once, everything after is local.", "blurb": "zot, a pull-through cache: the fleet asks it, it asks upstream once, everything after is local.",
"z": 0,
"points": [ "points": [
[ [
48.51, 48.51,
@@ -305,6 +308,7 @@
"name": "core", "name": "core",
"title": "The node", "title": "The node",
"blurb": "Pulls local. Boot, reschedule and recovery all lean on the mirror being there.", "blurb": "Pulls local. Boot, reschedule and recovery all lean on the mirror being there.",
"z": 0,
"points": [ "points": [
[ [
75.83, 75.83,
@@ -430,6 +434,7 @@
"name": "tag", "name": "tag",
"title": "The tag", "title": "The tag",
"blurb": "A promise - a mutable pointer anyone with push rights can move, and nothing records that it moved.", "blurb": "A promise - a mutable pointer anyone with push rights can move, and nothing records that it moved.",
"z": 0,
"points": [ "points": [
[ [
26.2, 26.2,
@@ -539,6 +544,7 @@
"name": "digest", "name": "digest",
"title": "The digest", "title": "The digest",
"blurb": "A fact - sha256 of the content. Same bytes, same digest, forever. The digest does the pulling.", "blurb": "A fact - sha256 of the content. Same bytes, same digest, forever. The digest does the pulling.",
"z": 0,
"points": [ "points": [
[ [
49.82, 49.82,
+1
View File
@@ -74,6 +74,7 @@ def emit(name, tag, spec):
poly = poly[::k] poly = poly[::k]
parts.append(dict( parts.append(dict(
name=part["name"], title=part["title"], blurb=part["blurb"], name=part["name"], title=part["title"], blurb=part["blurb"],
z=part.get("z", 0),
points=[[round(float(x) / W * 100, 2), round(float(y) / h * 100, 2)] for x, y in poly], points=[[round(float(x) / W * 100, 2), round(float(y) / h * 100, 2)] for x, y in poly],
cx=round(float(np.mean(xs)) / W * 100, 2), cy=round(float(np.mean(ys)) / h * 100, 2))) cx=round(float(np.mean(xs)) / W * 100, 2), cy=round(float(np.mean(ys)) / h * 100, 2)))
ax, ay = next((p["cx"], p["cy"]) for p in parts if p["name"] == spec["anchor"]) ax, ay = next((p["cx"], p["cy"]) for p in parts if p["name"] == spec["anchor"])