Estate topology
Every node and every edge below is derived, not drawn. The graph is regenerated daily from four sources that are each maintained for some other reason — the metrics agent’s probe inventory, the configuration inventory, live database connections, and one declared file for a dependency no API can enumerate. Nothing is placed by hand, which is what makes it impossible for the map to drift without something else breaking first.
Estate topology — derived, never drawn
Snapshot taken — build-time, not liveLabels are pseudonyms by design. Node names, hostnames, dashboard links and service URLs are removed by the build's sanitiser, which then asserts its own output and fails the build on any survivor. Radius is degree — how many derived relationships a node participates in. Four independent derivation sources contributed this graph: alloy (62), ansible_inventory (15), postgresql (6), services_yml (8). The estate's internal copy of this map fails closed if any one of them dies or answers thinly, so a half-empty graph is never published in place of a complete one.
Why the labels are pseudonyms
Section titled “Why the labels are pseudonyms”The internal copy of this map names every service and host, and links each node to its dashboard, its documentation page and its hostname. That is the correct design for an operator and the wrong thing to publish: it is an enumeration of the estate’s attack surface, and information disclosure is the one genuine risk this site carries.
So the build strips names, hostnames, URLs and descriptions, replaces each label with a role word derived from the node’s own attributes, and then asserts its own output — any surviving estate identifier, internal domain or private address aborts the build. That assertion is proven to fire against a deliberately poisoned graph before it is trusted, in line with the gate testing rule every control here follows.
What survives is the part worth reading anyway: how many things there are, how they cluster by domain, which kinds of relationship exist between them, and that four independent derivations agree about all of it.
How to read it
Section titled “How to read it”- Radius is degree — how many derived relationships a node takes part in. The large nodes are the ones a lot of other things depend on.
- Colour is domain. Eight domains, held at one lightness so no category reads as more important than another.
- Thick-stroked nodes are hosts, the rest are services.
- Filtering by edge kind hides nodes that take no part in that kind of relationship, rather than leaving them floating unattached — an isolated node under a filter would read as this thing has no dependencies, which is the opposite of true.
What it does not show, and why that is the point
Section titled “What it does not show, and why that is the point”This is a build-time snapshot, stamped with the moment it was taken, and it is never presented as live. The site is a static bundle with no origin and no estate API — a deliberate posture decision, because a live panel would require publishing an interface into the estate, which is a larger change than any visualisation is worth.
The internal map has one further property this one inherits: it refuses to publish a confidently-wrong version of itself. If a derivation source dies the render aborts; if a source answers thinly, a calibrated per-source gate rejects the staged graph and the previous map stays live. A stale map announces its age. A half-empty one announces nothing at all — that story is the map that could not be trusted.