v0.3.182-alpha
·
394 commits
to main
since this release
Everything here was found by reading what a running node actually reports,
rather than from a bug report — and it turned out to be one kind of problem
repeated. Nothing was computing a wrong answer. Eight different places were
telling you something untrue about what your computer was doing: counts that
included computers that could not help, a list of recent activity that was
almost entirely other computers introducing themselves, a number that read zero
while the thing it counts was happening, and Cancel reported as a failure. Also
a security update to the library nodes use to talk to each other.
Security
- Updated the TLS library used by the peer-to-peer QUIC transport (rustls
0.23.43 → 0.23.45, RUSTSEC-2026-0285, rated medium). The flaw let certain TLS
1.3 handshake messages be accepted at the wrong stage of a handshake. It is a
patch-level dependency update with no configuration or protocol change, and
nodes do not need to update together.
Fixed
- A model card counted computers that could never send you the file. Two
computers can have the same model under the same name and yet have different
copies of it — different people package the same model, and the pieces do not
interchange. SwarmLLM has known that for a while and quietly leaves those
computers out when deciding where to fetch a part from. The model card did not:
it counted them. So a card could say three other computers had a copy when only
one of them could actually share it. That number is not decoration — it picks
the sentence telling you whether the model keeps working if a computer goes
offline, it writes the "on N other computers" line, and it decides whether a
model is listed at all. Measured on a real node: 36 of 97 parts were counted
wrongly, and the same part could read 1 or 4 depending on whether the page had
just loaded or just updated. - And it now says why. Rather than the number quietly being smaller, the card
tells you how many other computers have a different version of the model, in
all 21 languages. A count that shrinks without explanation is worse than one
that is too high. - Your activity list shows what happened, not other computers introducing
themselves. The list holds the last 100 things, and on a normal node 102 of
114 of them were other computers announcing which parts they hold — so the
list, the view you get when you open the dashboard, and the report you paste
when asking for help all contained almost nothing you had done. Losing a
computer and getting it back made it announce everything again, one entry per
model, a dozen or more at a time. It is now one entry per computer, and only
when it tells us something new. - A computer keeping parts the swarm disagrees about now says so. When a
part disagrees with the version the swarm reports, and that claim has nothing
backing it, SwarmLLM keeps its own copy and carries on serving it — deleting on
an unproven claim is how a last copy gets lost. It is meant to be counted so
the report you paste can show it. Three places make that decision and only two
were counting; the missing one is the one a computer that got its parts from
other computers actually reaches. A node was observed logging "keeping our
bytes" twice while its own report said everything matched. - A computer that stays connected no longer keeps re-introducing itself.
"Computer connected: …" was added to your activity list every time the network
layer re-checked a computer it was already talking to, which it does
constantly — three identical entries in a row for one computer was an ordinary
sight. It is now added once, when the computer actually arrives. The detailed
log was already doing this correctly, twice, in the same function. - Opening the dashboard no longer announces "Claude Code CLI detected" every
time. Asking the node for that status added an entry to your activity list
and popped up a notification — on every read, and three parts of the page ask
for it. Three requests took the list from one entry to four. Nothing is lost:
the panel that asked was already showing you the answer. - A moment's connection trouble no longer empties the dashboard. When a
request to your own node failed — an expired key, a restart, a blip — the page
stored the empty answer as though it were true, and a dozen parts of the
dashboard read from that store: the status strip at the top, the swarm view,
the map, the model names. They all went to "0 peers, no models" at once. The
page now keeps the last thing it actually knew until it hears otherwise. - Cancelling a download no longer reports it as a failure. If the cancel
landed while a part was actually transferring — which is most of the time —
you got a red "Part 1 download failed" notice, the download was recorded as
failed, and an error was written to the node's log. Pressing Cancel is not a
failure. It is now recorded as cancelled, which is what the code already did
correctly when the cancel happened to land between parts instead of during
one. Cleanup was already correct and is unchanged: nothing half-downloaded is
left behind. - "1 part", not "1 parts" — in four messages you can see on screen.
Full commit list: v0.3.181-alpha...v0.3.182-alpha