Pulse/pkg
rcourtman 185c6ac80b Let a provider-hosted platform buy and renew its own licence
A provider could stand the MSP bundle up and evaluate it without asking
anyone, but paying still meant emailing its public key to Pulse and
copying a licence file onto the host by hand. With the licence server's
self-serve purchase path (pulse-pro license-server/provider_msp_purchase),
the control plane can do the whole thing itself.

The control plane now signs a challenge with its lease signing key to
fetch the licence its subscription entitles, validates it exactly as
startup does, requires it to bind this platform's key, and keeps it in
the data directory, because the host licence is a read-only secret
mount. Startup prefers that renewed licence while it validates, so a
paying provider keeps starting after the self-issued evaluation on the
host expires. A changed licence restarts the control plane through the
existing graceful shutdown, since the plan version is read at load by
every workspace-limit, backup and status path; client workspaces keep
running. Preflight, proof, recovery and backup accept either signed
source.

The portal gains owner and admin routes for plan state, checkout, the
Stripe billing portal and an immediate licence refresh, and the plan list
comes from the licence server so it shows only what can be bought, at
Stripe's price. Adds the msp_solo plan: 3 client workspaces, the first
paid step above the 2-workspace evaluation.
2026-09-23 23:30:34 +01:00
..
agents fix(agents): preserve explicit disk includes at ingestion 2026-09-09 11:35:51 +01:00
aicontracts Preserve canonical Patrol planning and outcome continuity 2026-09-07 17:24:25 +01:00
audit Harden audit signatures against boundary forgery 2026-08-12 05:05:11 +01:00
auth fix(auth): synchronise local admin permissions during setup 2026-09-10 06:52:38 +01:00
cloudauth fix(hosted): preserve direct handoff membership continuity 2026-03-26 23:40:02 +00:00
db fix(ai): preserve diagnostic evidence and proposal boundaries 2026-09-06 01:54:28 +01:00
discovery Bound discovery probe response bodies 2026-09-01 10:37:26 +01:00
diskinventory fix(unifiedresources): merge PVE and agent rows for the same RAID array volume 2026-08-28 06:20:10 +01:00
edition Block in-app self-update on the Pro binary to prevent silent downgrade 2026-07-08 10:02:04 +01:00
extensions Fix audit storage migration and viewer races 2026-07-24 10:33:57 +01:00
fsfilters fix(alerts): stabilize noisy lifecycle signals 2026-08-29 17:32:17 +01:00
licensing Let a provider-hosted platform buy and renew its own licence 2026-09-23 23:30:34 +01:00
metrics fix(metrics): survive startup write lock and bound allocations 2026-09-19 20:18:01 +01:00
pbs fix(pbs): reject incomplete alerting measurements 2026-09-05 18:04:21 +01:00
pmg Bound Proxmox API success responses 2026-08-31 21:20:30 +01:00
proxmox test(proxmox): verify pending update credential routing 2026-09-08 22:33:55 +01:00
pulsecli Enforce server-owned action approval authority 2026-07-11 19:49:17 +01:00
reporting fix(patrol): preserve refusals and expose measured summary evidence 2026-09-05 22:29:48 +01:00
securityutil Block IPv6 transition addresses in SSRF guards (GHSA-8f8r-p75h-jwq5) 2026-07-31 17:57:26 +01:00
server test(server): serialize the remaining startup watchdog log reads 2026-09-21 09:41:00 +01:00
tlsutil feat(monitoring): alert on certificate validity 2026-08-06 09:47:03 +01:00