9090 Commits

Author SHA1 Message Date
rcourtman cba3b3e857 Resume v6.2.0 release execution v6.2.0 helm-chart-6.2.0 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 f962fe83b1 fix(tests): stop alerts manager leak and settle frontend guardrails
Clears the red main streak that began at 63a0adf9a:
- newTestConfigHandlers never stopped its alerts.Manager, leaking a
  periodicSaveAlerts goroutine that logs through the global zerolog
  logger and races with the authorization-refusal contract test's
  logger swap under -race
- InfrastructureAgentDoctorPage used a raw select, tripping the
  settings native-select guardrail; converted to the shared labelled
  FormSelect primitive
- the metric-title residual pin still expected the removed -1 sentinel
  copy; aligned with the Off-control wording from 16179dd0a

Contract-Neutral: test-only CI red fix: stops alerts.Manager goroutine leak in api test helper, converts agent doctor raw select to the canonical FormSelect primitive the frontend-primitives contract already mandates, updates a stale test pin; no public contract delta
2026-08-09 11:00:51 +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 c94ed3906e fix(frontend): ignore stale agent versions in platform notices 2026-08-09 10:29:31 +01:00
rcourtman 37e3c81b03 test(alerts): prove stopped guests preserve posture incidents 2026-08-09 10:20:08 +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 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 2018aa8a9a fix(monitoring): retry unsupported HEAD probes with GET 2026-08-08 20:00:11 +01:00
rcourtman 8d5594caf8 test(release): bound Windows TLS fixture setup 2026-08-08 19:37:49 +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 v6.2.0-rc.10 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 7d95a707bc fix(commercial): land upgrade entry points on plan selection
Every in-product upgrade destination (gate CTAs, the business-estate card,
the public /pricing resolver for mapped features) routed to the bare billing
plan page, which renders plan comparison and selection only when the
intent=self_hosted_plan query parameter is present — so the surfaces asked
users to look at plans and then landed them on a page that showed none.
Route them all through the plan-selection href; checkout source attribution
composes with the intent param unchanged, and public /pricing arrivals stay
unsourced.

The Patrol page had the same dead end plus a context gap: plan-locked free
sessions saw only a lone "Plans & Billing" button with the mode selector
hidden, so the upsell never showed what upgrading unlocks. Render the four
Patrol modes with paid modes disabled and Pro-badged for plan-locked
sessions (the presentation already used for runtime-locked installs), keep
it fully suppressed when commercial surfaces are hidden, and relabel the
action "Unlock Patrol modes".
2026-08-08 12:51:42 +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 a9c6df057b test(ui): restore Settings architecture guardrails 2026-08-08 10:20:56 +01:00
rcourtman 33b3385c35 fix(ui): cover agent commands in the Public URL field copy
The Settings > System > Network field described the public URL as only
the address used in email alert links, but since 8e2858dac (refs #1692)
it is also the base URL advertised in copied agent install/update
commands. Rename the label to say both, describe both uses and the
reverse-proxy case, and suggest an https FQDN placeholder instead of a
LAN http address. Update the settings architecture copy pin to match.

Contract-Neutral: settings copy-only change: Public URL field label/description/placeholder wording; no payload, route, or contract surface change
2026-08-08 09:56:14 +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
rcourtman 8e2858dac0 fix(api): let live request origin outrank auto-detected public URL
Agent install and update commands advertised http://<LAN-IP>:7655 on
installs where the operator browses Pulse over an https FQDN, because
boot-time detection pre-fills config.PublicURL with an IP guess and
resolvePublicURL treated that guess as configuration. Track
auto-detected values (boot probe or first-request capture) separately:
explicit config from the env var or the settings UI still wins, but an
auto-detected guess now yields to the origin of the admin request that
is asking, so copied commands match how the instance is actually
reached.

Also stop boot detection from clobbering a settings-persisted public
URL on restart, which silently reverted the operator's saved value
whenever PULSE_PUBLIC_URL was unset.

Refs #1692

Contract-Neutral: behavioral fix to advertised-URL derivation: no API shape, field, or endpoint changes; PublicURLAutoDetected is internal (json:-)
2026-08-08 06:33:40 +01:00
rcourtman e597325a4a fix(pbs): stop re-fetching the node name every poll cycle
The PBS poller called GET /nodes once per cycle just to relearn the
node hostname, which is stable for the life of the connection. On
tokens that cannot read /nodes, PBS logged a 403 every ten seconds
forever. Cache the name on the client after the first success and
defer retries for 30 minutes after a permission denial so a widened
ACL still heals without a restart. Transient failures keep retrying
each cycle.

Refs #1691
2026-08-08 06:32:06 +01:00
rcourtman 79f3187d18 fix(ci): repair script smoke tests on main
Two failures landed this morning:

- test_gitleaks_ignore.py's historical-fingerprint resolution (added in
  d1fa7f38c) needs branch- and tag-reachable history, but the
  scripts-and-build job used a depth-1 checkout, so all 37 fingerprints
  failed to resolve in CI. Fetch full history like the gitleaks and
  changes jobs already do.

- d1f687c0e routed frontend-modern/package.json and package-lock.json to
  the new frontend-dependency-security path policy without updating the
  manifest expectations pinned in test-hot-dev-bg.sh. Pin the effective
  first-match policy per manifest instead of bare membership so the
  routing stays asserted and shadowed entries cannot fake coverage.

Contract-Neutral: CI-only fix: full-history checkout for gitleaks fingerprint resolution test and re-pin hot-dev manifest policy expectations to the registry routing d1f687c0e already established; no contract delta
2026-08-08 06:17:26 +01:00
rcourtman d45e597dbb fix(governance): block prerelease on credential containment 2026-08-08 05:55:12 +01:00
rcourtman 6fb9634423 chore(governance): release settings responsive claim 2026-08-08 05:27:11 +01:00
rcourtman 70162c0295 fix(settings): prevent responsive panel clipping 2026-08-08 05:27:08 +01:00
rcourtman e434466269 fix(security): verify SSH hosts during proxy cleanup 2026-08-08 05:18:55 +01:00
rcourtman 8e8edbf7de fix(governance): isolate release-control worktree roots 2026-08-08 05:12:07 +01:00
rcourtman 790a7d8ce1 chore(governance): release worktree helper claim 2026-08-08 04:08:44 +01:00