package catalogue import ( "errors" "fmt" "sort" "strings" ) // Resolving is turning "these modules are assigned here" into "this is what the node runs". // // It refuses rather than guesses, everywhere. novox/hq ADR 0009: a requirement with several // answers is refused and named, because counting candidates has no surprising behaviour and a // solver that picks has to be understood before its answer can be trusted. // Node is what resolution needs to know about the machine. type Node struct { Name string Site string // Capabilities the machine actually has, as its profile reported them. Only the present ones // — a capability that was looked for and not found is the same as one nobody looked for, as // far as deciding what may run here goes. Capabilities map[string]bool // At is this machine's own name on the private network, empty if it is not on one. Needed to // tell whether it can reach the node answering its requirements at all. At string // PublicDomain is the domain this node composes its routed names under, empty if it has none // (novox/hq ADR 0066). A route contribution carries only a label — the subdomain — and the mesh // joins