Skip to content

Pin the update health probe and refresh the desktop runtime - #795

Merged
Sev7eNup merged 1 commit into
mainfrom
fix/deploy-update-followups
Nov 4, 2026
Merged

Sev7eNup merged 1 commit into
mainfrom
fix/deploy-update-followups

Conversation

@Sev7eNup

@Sev7eNup Sev7eNup commented Nov 4, 2026

Copy link
Copy Markdown
Owner

Deployment follow-ups: the update health probe, the manual ZIP update, the failover drill and the desktop runtime.

Update health probe

Update-NodePilot.ps1 used to install a process-wide trust-all certificate policy for its readiness probe. It now goes through LocalServerHttp.ps1, like the server setup, pinned to Kestrel:Https:CertificateThumbprint from the installed appsettings.Production.json. Nothing new has to be passed, and the settings are read before the service is stopped.

If that file cannot be parsed, or HTTPS is enabled without a usable thumbprint, the update warns and checks that one request without the pin. It does not stop. The probe sends no credentials, so this only affects the health verdict. The unpinned path of the helper is limited to a plain GET without headers, so the setup token and first-login password can never go out unpinned. With Kestrel:Https:Enabled off, the probe uses plain HTTP.

Other changes

Tests run

  • deploy\Test-LocalServerHttp.ps1 (44), Test-DeploymentTemplates.ps1, Test-DesktopRuntimePayload.ps1 (18, new and registered in ci.yml), Test-FailoverFixtures.ps1, Test-FailoverRecovery.ps1, Test-ArtifactSecurity.ps1, Test-SwitcherConfig.ps1: passed
  • Test-SetupAdapter.ps1: 282 passed. The four occupied-port assertions fail on this machine on main too, and were skipped locally.
  • Api.Tests DesktopDeploymentSecurityTests|DocsSiteDeploymentTests: 13 passed
  • Desktop shell vitest: 126 passed, tsc --noEmit clean
  • A self-contained publish of the API, np and nodepilot-mcp with RuntimeFrameworkVersion=10.0.14 passes Assert-DesktopRuntimePayload. All checked binaries report 10.0.14, and a 10.0.15 floor rejects them. The full installer build and signing were not run.
  • Not run locally: the PowerShell 7 leg

Closes #622
Closes #624
Closes #787
Closes #773

🤖 Generated with Claude Code

- Update-NodePilot.ps1 probes through LocalServerHttp.ps1, pinned to
  the thumbprint in the installed Kestrel:Https section, instead of a
  process-wide trust-all policy. If that section cannot be read, it
  warns and sends the one GET without the pin; the unpinned path of
  the helper refuses anything but a plain GET.
- A manual ZIP update keeps the GUI setup's uninstaller and deploy\
  scripts, verified against the backup it just took (#622).
- Test-Failover.ps1 reads optional health fields safely, so a healthy
  leader without "reason" is recognised (#624).
- The desktop package bundles .NET 10.0.14 for the API, np and
  nodepilot-mcp, and the payload check covers all three (#787).
- @electron-internal/extract-zip 1.0.8 with the RUSTSEC fixes from
  1.0.6, taken over from Dependabot PR #764 (#773).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Sev7eNup
Sev7eNup merged commit 7a55733 into main Nov 4, 2026
17 checks passed
@Sev7eNup
Sev7eNup deleted the fix/deploy-update-followups branch November 4, 2026 22:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant