Skip to content

WolfStack v25.6.1

Choose a tag to compare

@github-actions github-actions released this 29 Jul 09:57

v25.6.1: the browser Back button navigates WolfStack instead of leaving it

Reported by klasSponsor. Clicking Back anywhere in the admin UI left
WolfStack entirely rather than returning to the previous view.

selectView() switched pages by toggling display and setting
currentPage — it never touched location.hash or history. So in-app
navigation created no history entries at all, and Back could only go
back to whatever preceded WolfStack in the tab.

The odd part: a hashchange route handler has existed all along and
works correctly, and if (location.hash) selectView(...) runs at load,
so deep links already worked. Nothing ever WROTE the hash, so for
ordinary navigation the handler never fired and the routing was
effectively dead code. This connects the two ends that were already
there.

selectView now pushes a history entry when the page changes. pushState
rather than assigning location.hash, because pushState does not fire
hashchange and so cannot re-enter selectView. It sits after the
unsaved-changes guard deliberately: a navigation that guard refuses
must not move the address bar.

The route handler is bound to popstate as well as hashchange. Which of
the two fires for a fragment-only history traversal is not worth
depending on — pushState entries surface as popstate, a hand-edited
address bar as hashchange, and some traversals raise both — so it
listens for either and returns early when the page is already current,
making a double fire a no-op.

Scope: top-level views only. Per-node views (selectServerView) remain
unrouted, as do the few places that set currentPage directly
(component detail, cluster storage) — Back from those returns to the
last top-level view rather than the node view, which is still an
improvement on leaving the app.

Untested at runtime: not exercised in a browser. The change is small
and the parse check passes, but the actual Back behaviour has not been
clicked through.

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.