One machine's unanswerable requirement does not remove it from the mesh

The pass that answers *what does this node offer* takes a failed resolution to
mean it learned nothing about that node. So refusing an unanswerable
requirement there made the machine disappear — and every other machine was then
told, wrongly, that the two of them shared no private network.

A wrong answer about a machine nobody asked about, caused by a fault on a
third. The lab found it: one module needing a licence that had not been added
yet made two unrelated machines look disconnected.

The second pass still refuses it, where the question is actually being asked.
This commit is contained in:
2026-08-31 03:06:33 +02:00
parent 005b928d36
commit faf5ecd70f
2 changed files with 51 additions and 0 deletions
+14
View File
@@ -324,6 +324,20 @@ func Resolve(catalogue map[string]Manifest, assigned []string, node Node, world
reported[want] = true
continue
}
if world.Unchecked {
// The first pass, which exists only to answer *what does this node offer*.
//
// **Refusing here makes the machine vanish** rather than reporting a problem: the
// caller takes a failed resolution to mean it learned nothing about this node, so
// one unanswerable requirement on one machine removes that machine from the
// private network as far as every OTHER machine is concerned — and they are then
// told, wrongly, that the two of them share no network.
//
// That is a wrong answer about a machine nobody asked about, caused by a fault on
// a third. The second pass refuses it properly, where the question is being asked.
reported[want] = true
continue
}
reported[want] = true
problems = append(problems, fmt.Sprintf(
"nothing provides %q, wanted by %s", want, because[want]))