Install Helmsly

Helmsly

Local use needs no account.

Current version0.2.242verified 2026-09-09 07:43 UTC
ChannelPrimary
  1. Install
  2. Open the hub
  3. Pair later for remote access. Local use never needs pairing.

Every platform is on this page.

Windows

winget install Slobal.Helmsly

Select and copy the command above, then run it in a terminal.

Installernot published yet
SHA-256not published yet

The Windows installer is unsigned until company registration completes. Windows may warn before it runs.

macOS

Disk imagenot published yet
SHA-256not published yet

Notarisation follows company registration.

Linux

AppImagenot published yet
AppImage SHA-256not published yet
debnot published yet
deb SHA-256not published yet

Release notes

Round 146, what a member sees is named truthfully. Three findings from the estate audit's register item PO-018, all observed live as a signed-in non-admin member of the slobal workspace. SLB-V-008. The portal and My Account printed SKU codes at customers. The workspace portal's licence row read "L13 active" for the workspace's administrator and "L12 active" for a member of the same workspace; My Account's Licence row read "L12", with the plan word repeated on a second row underneath it. Decision G1 of round 140 says a customer never sees a code, and relay/lib/pricing.mjs has held the one code-to-word table since round 139. Both portals, the personal portal, My Account's overview, personal-info, licence and dormant sections and its order ledger now state the plan word and the state; the code rides `data-code` on the row, which is a machine field and is the allowance the parity test already makes for `value="L02"` on the signup selects. The duplicate Plan row went with the change. relay/pricing-parity.test.mjs's code hunt now covers globalHomePage, tenantHomeOnApex, individualHomePage and accountPage in every licence state their inputs can produce, and asserts the plan word arrived where the code left. SLB-V-009. My Account's navigation entry, section heading and summary tile carried the American spelling of organisation, and one line of the buy wall read `license seat` and `Admin Center` while the line above it in the same function read "Admin Centre". The UK English gate scans CHANGED lines, and nobody had changed those four lines since before the law existed, so no run ever read them. scripts/text-gates.mjs gains a `surfaces` verb that renders every surface fixture through relay/scripts/surface-fixtures.mjs and scans the visible text of each page whole, however old the line behind it is. It runs in ci.yml beside the existing text-gates step. HLM-V-001. A seated member of a workspace who followed the Helmsly door on slobal.com arrived at their workspace's instance and met the hub's own sign-in form, asking for a password they have never had and cannot set; the workspace's administrator, on the same install, arrived signed in. The relay was not at fault: the door reads the seat and sends both to the same place. The refusal was the ADR-074 profile binding. A workspace runs one instance and its members reach it through the tunnel, all served from one Windows login, so the first member to sign in claimed the per-profile record by email and every seated member after them threw `foreign_identity` inside establishSession - caught in serve.ts, logged, and fallen through unauthenticated, which is what put the password form in front of them. The rule is not weakened; it is asked about the right thing. A workspace install binds the WORKSPACE, so every member of it binds one key; a personal install still binds the person; a second Windows login still gets its own record and its own pairing. An install whose record still names the first member adopts its workspace rather than refusing everybody, which is the state every install signed in to before this build is in. And whatever refusal does survive, a relay-authenticated member is never shown the raw hub sign-in form again: the refusal travels on /api/auth/me and the shell states it. One thing found while checking that this round's widened hunt would run: it would not have. ci.yml's relay step, relay/package.json's test script and the assertion in licence.test.mjs that exists to keep those two honest each enumerated the relay's suites by name, so a file could go missing from two lists as long as it was also missing from the third. Round 140's pricing-parity.test.mjs was in the package script alone and had never run on CI. The lists are collapsed: ci.yml runs npm test, and the check is against the directory, which cannot fall behind. Full notes: CHANGELOG.md [0.2.242].