Skip to content

v0.3.182-alpha

Choose a tag to compare

@github-actions github-actions released this 15 Sep 02:08
· 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