Measured
On dig-node 0.138.0 — the newest build that exists — a node with zero peers prints:
"a per-peer list needs a newer node"
Found on a fresh box during the #923 acceptance run (dig_ecosystem#923), where zero peers was the correct
and expected state at that moment.
Why it clears the bar
The message is false, and it is false in a way that sends the user somewhere useless. The real state is
"this node has no peers". The message says "your node is too old" — so a person acting on it goes
looking for an upgrade that does not exist and cannot help.
This is the honest-surface class: a shipped surface asserting something untrue about the system's own
state. It is not a money or custody lie, so it did not stop the acceptance run — but it is user-visible on
first run, which is exactly when a new user has zero peers and is least able to tell that the advice is
wrong.
Likely shape
A capability/version negotiation returning "unsupported" for a response that is legitimately empty, so
the empty case and the unsupported case share one branch. Worth checking whether the two are distinguishable
at all at the call site — if they are not, the fix is to make them so rather than to reword the string.
Fix
Distinguish no peers from the node cannot answer. An empty peer list should say so plainly. Keep a
genuine version-gap message only where a version gap is actually detected.
Reproduce
Any node with no peers — easiest on a fresh install with the relay unreachable, which is how it was found.
Measured
On dig-node 0.138.0 — the newest build that exists — a node with zero peers prints:
Found on a fresh box during the #923 acceptance run (dig_ecosystem#923), where zero peers was the correct
and expected state at that moment.
Why it clears the bar
The message is false, and it is false in a way that sends the user somewhere useless. The real state is
"this node has no peers". The message says "your node is too old" — so a person acting on it goes
looking for an upgrade that does not exist and cannot help.
This is the honest-surface class: a shipped surface asserting something untrue about the system's own
state. It is not a money or custody lie, so it did not stop the acceptance run — but it is user-visible on
first run, which is exactly when a new user has zero peers and is least able to tell that the advice is
wrong.
Likely shape
A capability/version negotiation returning "unsupported" for a response that is legitimately empty, so
the empty case and the unsupported case share one branch. Worth checking whether the two are distinguishable
at all at the call site — if they are not, the fix is to make them so rather than to reword the string.
Fix
Distinguish no peers from the node cannot answer. An empty peer list should say so plainly. Keep a
genuine version-gap message only where a version gap is actually detected.
Reproduce
Any node with no peers — easiest on a fresh install with the relay unreachable, which is how it was found.