Skip to content

WolfStack v25.6.4

Choose a tag to compare

@github-actions github-actions released this 29 Jul 16:33

v25.6.4: a toast full of docker output can be closed again, and WolfNet peers that answer are not labelled Offline

Two user reports, both about the UI contradicting what the system is doing.

klas: a failed docker compose pull put up a panel that could not be closed —
"there is no x". There was an x; it was unreachable. composeAction passes the
whole docker output to showToast with duration 0 (never auto-dismiss), and the
toast had no height cap and centred its dismiss button. Measured in a browser:
a 4597px toast in an 855px viewport, dismiss button at y=2309 — 1454px below
the fold, hit-testing to nothing. The page had to be reloaded to clear it.

• the message now carries the max-height (min(60vh, 392px)) and scrolls. The
cap has to live there, not on .toast: .toast is a ROW flex container, so
its max-height does not constrain a child sized on the cross axis — capping
only the toast left a 4569px message spilling over the page.
• align-items: flex-start pins the x to the top whatever the message length
• pre-wrap so multi-line command output is readable rather than collapsed
into one paragraph; overflow-wrap for the image digests such output is
full of
• the x is a real with an aria-label — it was a , i.e.
mouse-only, so a never-dismissing error toast was a dead end for keyboard
users even when the x was on screen. Escape now dismisses too.
• the toast stack is bounded so several of them cannot march off-screen

Also: every entry in the toast icon table was an empty string, so the || info
fallback gave EVERY toast the info icon — a failed pull was flagged with the
same glyph as a routine notice.

sabur7: after a cluster upgrade, WolfNet peers show as offline while the mesh
demonstrably works. The daemon-side cause is fixed in WolfNet 0.5.34, but the
UI made it worse by throwing away its own evidence: it computed
connected: live ? live.connected : cp.connected, discarding the backend's
reachability probe whenever daemon data existed. On wolfstack-2 the probe
succeeded — the peer answered over the tunnel — and the UI still said Offline.

The probe is now kept alongside the daemon's view as a fourth state,
"Reachable", with a tooltip explaining that the service has not recorded
inbound traffic from that peer yet. The Connected count includes those, so the
card cannot read "0 connected" on a mesh that is passing traffic.

Verified in a real browser against the actual showToast extracted from app.js:
13 assertions covering geometry, hit-testing, scrolling, containment, click and
Escape dismissal, and ARIA — plus the same assertions re-run against the old
geometry to confirm they fail there, so they genuinely discriminate.

Co-Authored-By: CodeWolf paul@wolf.uk.com
Co-Authored-By: Wolf Software Systems Ltd paul@wolf.uk.com


Verifying this release

Each binary is signed via cosign keyless OIDC (no key distribution — signing identity is the GitHub Actions workflow itself, anchored to the Sigstore Fulcio CA and the Rekor transparency log) and ships with a SLSA build provenance attestation.

Verify the cosign signature:

cosign verify-blob \
  --bundle wolfstack-x86_64.cosign.bundle \
  --certificate-identity-regexp 'https://github.com/wolfsoftwaresystemsltd/WolfStack/\.github/workflows/release\.yml@.*' \
  --certificate-oidc-issuer 'https://token.actions.githubusercontent.com' \
  wolfstack-x86_64

Verify the build provenance:

gh attestation verify wolfstack-x86_64 --repo wolfsoftwaresystemsltd/WolfStack

Verify the SHA-256 checksum:

sha256sum -c SHA256SUMS

Artifacts

  • wolfstack-x86_64 / wolfstack-aarch64 / wolfstack-armv7 — static musl binaries (Linux x86_64, ARM64 / Raspberry Pi 4+, and 32-bit ARM).
  • wolfstack-<arch>.cosign.bundle — cosign signature bundle (cert + signature + Rekor entry).
  • SHA256SUMS — checksums for both binaries.

For per-version history see CHANGELOG.md.