The shape they share is the interesting part: a media library is a fact about the machine that several modules mount, so each declares exactly the paths it touches, with one owner and mode across all of them. The host reconciles a directory rather than creating it, so the second module ensuring a path the first already ensured is maintenance, not a fight — and ADR 0030 keeps a shared path alive when one of its sharers is unassigned, because it holds what the mesh did not put there. Plex runs on the machine's own network like home-assistant, and for the same reason: discovery is the point. The other three publish, so the mesh chooses their machine ports. All pinned by real digests, resolved on this workstation today. The catalogue stands at 22, of which the arrangement being replaced ran 95 — but its number counts workstation ricing and one-machine tooling beside services, and only the services convert to manifests like these.
examples
Things that run, kept here because a contract is easier to read as working code than as prose.
Nothing here is part of the control plane. The control plane decides and never touches a machine (README); everything in this directory runs on a machine and touches it. These are reference implementations of contracts the control plane defines, and a real one ships with the module that ships the software it configures.
postgres-provisioner |
the last step of a credential: reads what the mesh delivered and makes PostgreSQL accept it |
Running the provisioner
--watch reconciles now and again whenever what the mesh delivered changes. That is what lets it
be a module: an ordinary long-running service the host supervises, rather than something that has
to be invoked after every declaration by a timer or a unit wired to a file.
It polls rather than watching the filesystem, because the host writes atomically — the file is replaced, so a watch on the path stops seeing anything after the first replacement. A watcher that silently stops working is worse than a poll.
Credentials are compared by digest and never by content. This runs for as long as the machine is up, and a secret does not belong in a long-lived variable when a hash answers the same question.