Commit Graph

3716 Commits

Author SHA1 Message Date
rcourtman dfcfe3fbd1 Fix tenant-scoped service discovery execution 2026-08-10 19:53:08 +01:00
rcourtman b2dd6abfd8 Document reporter test image validation path 2026-08-10 15:32:52 +01:00
rcourtman 44a3f19454 Fix large Proxmox cluster poll exhaustion 2026-08-10 14:39:01 +01:00
rcourtman 04d6c43f20 Stop stamping Patrol attention rows with evidence-timing noise
Every attention row on every install (and all 38 rows on the public demo)
carried a warning 'Evidence incomplete; timing unavailable' / 'Evidence
timing unavailable' metadata line. Unknown freshness just means the evidence
source publishes no validity window - only availability-poller evidence does
- so it is not an operator-facing warning, and the 'timing unavailable' claim
was false with per-envelope observation times rendered beside it.

- Presentation: the scan row now surfaces an evidence phrase only for states
  worth a glance (unavailable, incomplete, stale, or window-backed current);
  complete evidence with unknown freshness stays quiet on the row and shows
  a muted 'Evidence recorded' badge in the detail, mirroring the existing
  unavailable-protection row rule.
- Alerts bridge: provider incidents without a backing availability check now
  carry a first-class complete/confirmed envelope derived from the observed
  incident payload instead of falling to the legacy partial shim, and each
  sync merges the cycle's freshly observed envelopes into the active alert so
  raise-time evidence does not age out while the condition is still observed.

Verified live on a scratch mock instance at 1280px and 744px: all 44+ mock
attention rows now project complete evidence and render without the noise
line; detail shows 'Evidence recorded' with per-observation timestamps.
2026-08-10 09:47:06 +01:00
rcourtman f3bfc7c72a Keep offline agents removable after restart 2026-08-10 09:34:42 +01:00
rcourtman bcb172c127 Authorize unsigned Windows artifacts for v6.2.1 2026-08-10 08:24:09 +01:00
rcourtman 5112ae3ea4 Document update-check age in v6.2.1 2026-08-10 08:01:26 +01:00
rcourtman 49b40911a4 Show the age of the last update check on the updates panel
The Up to date verdict on the Pulse server updates panel can come from the
frontend's 24h localStorage cache, but it rendered with no timestamp, so a
day-old verdict read as a live comparison. A user on rc.9 read Up to date
minutes after v6.2.0 published and concluded the updater was broken.

The status cell now carries the age of the check the verdict came from
(Checked 3 hours ago, or Not checked yet when this browser has never
checked). Copy stays in the updatesPresentation owner, the store exposes
lastCheckedAt for the verdict actually displayed, and the line is hidden
for source builds, where checks are disabled.

Refs #1601
2026-08-10 06:40:21 +01:00
rcourtman 5a865820a6 Prepare v6.2.1 emergency patch release 2026-08-10 00:54:43 +01:00
rcourtman 2dc035060b Clarify Pro commercial context contract 2026-08-10 00:41:25 +01:00
rcourtman 766253ed04 feat(commercial): treat the compiled Pro edition as commercial context
The Plans & Billing navigation entry is suppressed for sessions without
commercial context, which hid the only activation-form entry point from
exactly the customers who need it: a fresh Pro install has no license yet,
so hideUpgrade stayed true until the key the customer could not find a
place to paste was pasted. The compiled Pro binary is only distributed
through the paid broker flow, so a Pro-edition session is commercial
context by construction — edition.IsPro() now sets commercialContext in
securityStatusPresentationPolicy.

Ordinary free self-hosted sessions run the community binary and keep the
opt-in default (the edition marker keys off the compiled binary, never
license state). Demo mode and white-label keep full suppression via
hideCommercial, which wins over edition-derived context. Complements
1b9bc9482 (setup-completion activation pointer); together a fresh Pro
install gets both the first-run pointer and a permanently visible
Plans & Billing entry. api-contracts, storage-recovery, and
agent-lifecycle contracts record the policy delta.
2026-08-10 00:32:14 +01:00
rcourtman 1b9bc9482e feat(setup): point unlicensed Pro installs at license activation
A fresh Pro install has no way to discover where its activation key goes:
the Plans & Billing nav entry is navigation-suppressed until a license or
subscription exists (hideWhenUpgradeHidden), which hides the only panel
holding the activation form exactly while the install is unlicensed. A Pro
customer hit this after the broker download flow and emailed support.

The setup completion panel now probes /api/license/runtime-capabilities
and /api/license/status with the setup token and, only when the compiled
Pro build reports no valid license, renders an Activate Pulse Pro card
linking straight to /settings/pulse-intelligence/billing/plan (direct
routes stay reachable by design). Community builds, licensed installs,
and failed probes all keep the card hidden, so the self-hosted opt-in
commercial posture is untouched. The pro-unlicensed preview scenario
keeps browser proof deterministic; strings are localized in EN/DE/ES;
agent-lifecycle, frontend-primitives, and security-privacy contracts
record the new handoff and catalog boundaries.
2026-08-10 00:02:45 +01:00
rcourtman a7849c9ef0 Fix strict subscription tool schemas
Refs #1697
2026-08-09 21:00:07 +01:00
rcourtman 837ce57106 Fix agent download preflight redirects (#1696) 2026-08-09 20:57:52 +01:00
rcourtman 6c150973b4 Fix Agent Doctor credential recovery 2026-08-09 20:47:11 +01:00
rcourtman cd63e0848a Record v6.2.0 release completion 2026-08-09 20:06:42 +01:00
rcourtman 83273de91c Fix post-activation demo convergence 2026-08-09 19:54:14 +01:00
rcourtman cba3b3e857 Resume v6.2.0 release execution 2026-08-09 16:54:18 +01:00
rcourtman 1213b6d918 Stabilize remaining API performance proofs 2026-08-09 16:52:19 +01:00
rcourtman 53d9d00d8d Claim v6.2.0 release execution 2026-08-09 16:14:40 +01:00
rcourtman fe14b195d0 Stabilize API performance release proofs 2026-08-09 16:12:19 +01:00
rcourtman be18f99d24 fix(rbac): make SSO user access manageable 2026-08-09 13:36:07 +01:00
rcourtman 70f7ca9f6f fix(pbs): skip superuser-only node lookup for tokens 2026-08-09 12:25:07 +01:00
rcourtman 2a95ae35c3 Record v6.2.0 rehearsal stop condition 2026-08-09 12:11:07 +01:00
rcourtman e2a2e7d4d2 Record v6.2.0 Windows signing exception 2026-08-09 11:05:20 +01:00
rcourtman e9904157e7 Prepare v6.2.0 stable release 2026-08-09 10:43:19 +01:00
rcourtman b9811cdf53 fix(settings): prevent credential autofill in provider controls 2026-08-09 10:31:03 +01:00
rcourtman c33ed56f1f fix(alerts): preserve backup posture for offline guests (#1693) 2026-08-09 10:08:40 +01:00
rcourtman 16179dd0a5 Improve 6.2 usability across core workflows 2026-08-09 01:16:15 +01:00
rcourtman 63a0adf9ac Repair rejected agent credentials safely 2026-08-09 00:51:38 +01:00
rcourtman 4e1d2f6d5d fix(telemetry): scale adoption reporting 2026-08-09 00:35:40 +01:00
Richard Courtman 1b804cf206 fix(release): wait for convergence metadata 2026-08-08 22:18:39 +01:00
Richard Courtman e245aa11e2 fix(release): add activation-only recovery 2026-08-08 22:10:49 +01:00
Richard Courtman 894e0eb213 chore(release): prepare v6.2.0-rc.11 2026-08-08 20:26:15 +01:00
rcourtman fe5dfd11ec docs(monitoring): define HTTP probe fallback contract 2026-08-08 20:03:19 +01:00
rcourtman 52fbcfd341 fix(release): allow draft asset smoke access 2026-08-08 18:57:11 +01:00
rcourtman 76e07be290 chore(security): complete Cloudflare token replacement 2026-08-08 17:50:04 +01:00
rcourtman 71aa9b3ffc chore(security): reopen Cloudflare replacement rotation 2026-08-08 17:37:43 +01:00
rcourtman 81ccca17a5 Prepare v6.2.0-rc.10 release 2026-08-08 17:34:07 +01:00
rcourtman afe0f900e5 chore(security): record credential containment closure 2026-08-08 17:26:21 +01:00
rcourtman 5ff0855882 revert(commercial): restore self-hosted opt-in posture 2026-08-08 16:48:19 +01:00
rcourtman e391d631d1 fix(api): validate hosted magic-link URL before token mint 2026-08-08 12:07:40 +01:00
rcourtman 9c23e10858 fix(api): validate hosted diagnostics URL before token mint 2026-08-08 11:34:49 +01:00
rcourtman f7ca17bbc1 chore(governance): release hosted installer-origin claim 2026-08-08 10:56:31 +01:00
rcourtman 2030d71fd9 fix(api): fail closed for hosted installer origins 2026-08-08 10:56:19 +01:00
rcourtman 679f00b25c chore(governance): release installer-origin claim 2026-08-08 10:36:13 +01:00
rcourtman 9ac11eeb54 fix(api): harden PVE and PBS installer origins
Route config-owned install commands and setup-script artifacts through the canonical trusted request-origin resolver. Preserve configured URL precedence and add endpoint-level adversarial coverage for token-bearing commands.
2026-08-08 10:35:52 +01:00
rcourtman 76f433c2f8 chore(governance): release request-origin security claim 2026-08-08 09:50:26 +01:00
rcourtman 860f639f3b fix(api): validate request-derived command origins 2026-08-08 09:42:21 +01:00
rcourtman 8ff64e0dee Fix PBS node identity retry classification 2026-08-08 09:39:02 +01:00