Repository navigation
Pin the update health probe and refresh the desktop runtime - #795
Merged
Merged
Conversation
- 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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Deployment follow-ups: the update health probe, the manual ZIP update, the failover drill and the desktop runtime.
Update health probe
Update-NodePilot.ps1used to install a process-wide trust-all certificate policy for its readiness probe. It now goes throughLocalServerHttp.ps1, like the server setup, pinned toKestrel:Https:CertificateThumbprintfrom the installedappsettings.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:Enabledoff, the probe uses plain HTTP.Other changes
unins*files anddeploy\back from the backup it just took. It checks them against the hashes recorded with that backup, and a failed restore rolls the update back. "Apps & features" can still uninstall. Its displayed version stays the old one until the next GUI setup run.Test-Failover.ps1readsnodeId,leaseEpochandreasonthroughPSObject.Properties, so a healthy HTTP 200 withoutreasonno longer aborts the drill.npandnodepilot-mcp.Assert-DesktopRuntimePayload.ps1now also checks the two client stages (-BaseRuntimeOnly). It rejects older framework declarations and older binaries, including a lone old Kestrel orhostfxr.dllin an otherwise current stage. The desktop docs say that existing installations get the runtime only through the new package.@electron-internal/extract-zip1.0.8, which includes the RUSTSEC-2026-0367/0368/0369 fixes from 1.0.6, and@types/node26.6.6, both taken over from Dependabot PR Bump the npm-minor-patch group across 1 directory with 2 updates #764. The exact pin and the contract test move to 1.0.8. The lockfile changes come from that PR unchanged. The licence changes from BSD-2-Clause to MIT.Tests run
deploy\Test-LocalServerHttp.ps1(44),Test-DeploymentTemplates.ps1,Test-DesktopRuntimePayload.ps1(18, new and registered inci.yml),Test-FailoverFixtures.ps1,Test-FailoverRecovery.ps1,Test-ArtifactSecurity.ps1,Test-SwitcherConfig.ps1: passedTest-SetupAdapter.ps1: 282 passed. The four occupied-port assertions fail on this machine on main too, and were skipped locally.DesktopDeploymentSecurityTests|DocsSiteDeploymentTests: 13 passedtsc --noEmitcleannpandnodepilot-mcpwithRuntimeFrameworkVersion=10.0.14passesAssert-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.Closes #622
Closes #624
Closes #787
Closes #773
🤖 Generated with Claude Code