Skip to content

PointSav Documentation

The engineering library for the PointSav platform — operating systems and services for regulated businesses that own their data, their AI, and their record-keeping outright. Where the monorepo holds the code, this wiki holds the reasoning: architecture, services, security, and the governance commitments that bind future development.

Pair a new device

Prerequisites

  • A device running os-console that has not yet been paired — Machine-Based Authorization is inactive on it (see Machine-based authorization)
  • A WireGuard keypair present on that device; the client submits its public key as part of the join request
  • Network reachability from the device to your pairing server, port 9205 by default
  • An administrator who can reach the same pairing server and run os-network-admin
  • A node identifier in <username>@<tenant> form for the device

Purpose

Register an unpaired device with service-ppn-pairing so an administrator can approve it onto the WireGuard mesh — about five minutes of active work across two people, plus an unbounded wait between approval and actual network reachability.

Procedure

On the device being paired

  1. Start os-console on the unpaired device. The pairing screen opens automatically at startup and holds the entire screen until the device is paired; there is no menu path or F-key that reaches it.

  2. Read the eight-character pairing code from the screen. It is displayed as XXXX-XXXX and drawn from the Crockford base32 charset 0123456789ABCDEFGHJKMNPQRSTVWXYZ — I, L, O, and U are absent, so a code read aloud carries no O/0 or I/1 ambiguity to resolve.

  3. Optional: scan the QR block beside the code instead of transcribing it. The QR encodes PAIR:<code> with the dash stripped, rendered as a pixel image on terminals supporting the Kitty or Sixel graphics protocols, or as a Unicode half-block image otherwise.

  4. Hand the code to your administrator within 600 seconds. The code expires ten minutes after issue, and the client must submit a fresh join request after that.

  5. Leave the device on the pairing screen. The client polls its status every two seconds and will not move off the screen until that poll returns approved, denied, or expired.

On the administrator's workstation

  1. Start os-network-admin. It polls the pending-request list every five seconds and prints each request with its code, node ID, bottom (target substrate), and arch.

  2. Match the printed code against the code read off the device screen. This comparison is the only identity check in the flow — the endpoints themselves perform none.

    Warning: the approve and deny endpoints carry no access-control check of their own. Anyone who can reach the pairing server's port and holds a valid code can approve or deny a request. Network access to port 9205 is the entire security boundary for this mechanism; place and firewall the pairing server on that basis.

  3. Approve the request with the curl command os-network-admin prints next to it:

    curl -s -X POST http://<pairing-server>:9205/v1/node-join/approve \
      -H 'Content-Type: application/json' \
      -d '{"code":"XXXX-XXXX"}'
    

    To reject the request instead, post the same body shape to /v1/node-join/deny.

  4. Wait for mesh admission to run separately. Approval appends one record — node ID, WireGuard public key, bottom, arch, and an approval timestamp — to a file on the pairing server. It does not put the device on the network. A background process polls the fleet controller every 30 seconds and runs the WireGuard command that admits the peer only once the approved node has also appeared in the compute fleet.

Expected outcome

The device's pairing screen transitions to an Approved state, the request no longer appears in the pending list, and the approval record is on disk on the pairing server. Approved and reachable are two different states: the device becomes reachable on the mesh only after the 30-second admission poller has seen it in the fleet and run WireGuard.

Verification

On the device: the screen moves to Approved within roughly two seconds of approval, on the next status poll.

On the administrator's side, confirm the request has left the queue:

curl -s http://<pairing-server>:9205/v1/node-join/pending

An approved request is absent from that response. Neither check proves network reachability — that is a later, separate state produced by the admission poller described in step 9.

Note: the bottom field in the join request is derived from the device's architecture, not chosen — aarch64 maps to seL4, x86_64 maps to netbsd-compat. There is also no access tier, role, or permission level anywhere in this flow. Network admission is the only thing this mechanism grants.

Rollback

Before approval: post the code to /v1/node-join/deny, or do nothing and let the 600-second expiry close the request.

After approval: no built-in un-pairing command exists today. Removing a paired device means contacting your administrator to remove the WireGuard peer manually on the mesh side — there is no revoke endpoint and no console action that undoes an approval.

Next steps

Cite this record: /wiki/pair-a-new-device — revision f99f9774, last updated 6 August 2026.

Important Information

Corporate structure. PointSav Digital Systems ("PointSav") is currently a trade name of Woodfine Capital Projects Inc. ("Woodfine"), planned to become a wholly-owned Woodfine subsidiary upon incorporation. PointSav does not itself offer, sell, or solicit any security. Any securities offering associated with Woodfine's real-property direct-hold solutions is made exclusively by Woodfine, and only by means of the applicable Private Placement Memorandum.

No investment advice. This wiki's content is provided for engineering, operational, research, and development purposes. Nothing on this wiki constitutes investment advice or a solicitation to invest in any Woodfine partnership or direct-hold solution.

Intellectual property. The PointSav name, trade name, wordmark, and marks, together with all current and future PointSav- and Totebox-branded products, services, and offerings — and the software, source code, documentation, design system, and all related materials — are proprietary to Woodfine and its affiliates, except for components identified as open source. No rights are granted except as expressly set out in a written license or agreement. The full trademark notice appears in the footer of every page on this site.

Open source components. Portions of the platform are made available under permissive open-source licenses identified in the accompanying repository. Use of those components is governed by their respective license terms.

No warranty; informational use. Content on this wiki is provided for general informational purposes only and does not constitute a representation, warranty, or commitment with respect to product functionality, availability, pricing, or roadmap. Some articles describe planned or intended features, capabilities, and milestones — language such as "planned," "intended," "targeted," "may," and "expected" marks this forward-looking content, which is subject to change and does not constitute a commitment regarding future performance.

Confidentiality. Where an article describes an operational or deployment detail that is not intended for public disclosure, that article is not published on this wiki. Content here is general-purpose engineering documentation, not customer-specific configuration.

Jurisdiction. Woodfine Capital Projects Inc. is organized in British Columbia, Canada. References to the Sovereign Data Foundation on this wiki describe a planned or intended initiative only, not a current equity holder or active governance body.

Changes to this notice. PointSav may update this notice from time to time; the version posted on this page governs.

Not a filing system. This wiki is not a securities filing system, an electronic disclosure repository, or a substitute for SEDAR+ or any other regulatory filing system. Formal securities filings are made through the applicable regulatory filing system, not through this wiki.

Full disclaimer. This notice supplements, and does not replace, the full Disclaimers article. In the event of any conflict, the full Disclaimers article governs.

Read the full disclaimer →