Repository navigation
A stopped release gives its lock back, Windows builds open no port, and server add works from Windows - #9
Merged
Conversation
A new roadmap section lists what is planned for the CLI and not built: two defects to fix first, machine-readable output, and more than one instance of an app, the largest piece of work ahead, with its design under v2. The fourth sequencing principle names the user the server target brought.
…en no port A closed terminal (SIGHUP), kill and a cancelled CI job (SIGTERM) ended deploy and rollback where they stood, leaving the server's deploy lock for a person to remove. They now abort the same signal Ctrl+C does, from before the release starts, so the release is given back. A remote build from Windows reached the server's Docker through an unauthenticated loopback port, open to any local process and to a web page by DNS rebinding. It now goes through a named pipe, with each connection carried by its own ssh running docker system dial-stdio under the pinned host key. The warning the old forward printed, and the field that carried it, are removed. Both are recorded as not yet run against a real server.
Deploying with
|
| Status | Name | Latest Commit | Preview URL | Updated (UTC) |
|---|---|---|---|---|
| ✅ Deployment successful! View logs |
nextship | 7d9ead4 | Commit Preview URL Branch Preview URL |
Oct 09 2026, 05:30 PM |
ssh-keyscan as Windows ships it cannot scan a current server, so server add could not start there. When the scan fails the host key is read by letting ssh record it, with no way to authenticate offered. Found and verified on a Droplet from Windows 11, where a remote build ran through the named pipe for the first time. A terminal closed on a deployment waiting on its health check left the lock with 1.1.2 and released it with this change.
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.
Two defects in the server target, and the roadmap section that says where the CLI goes next.
Fixed
Closing the terminal part way through a deployment left the app locked.
deployandrollbackhandled Ctrl+C by giving the release back: the new container removed and the server's deploy lock released. A closed terminal (SIGHUP),killand a cancelled CI job (SIGTERM) ended the process where it stood, and the lock stayed until someone removed it by hand.interrupt.ts: oneuntilStoppedboth commands use. SIGINT, SIGHUP, SIGTERM, and SIGBREAK on Windows, abort the signal the release already watches.A remote build from Windows opened the server's Docker on a local port. Windows' OpenSSH cannot forward to a Unix socket, so the build used
127.0.0.1:<port>with nothing authenticating it. For the length of a build any local process could drive the server's Docker, which is root on the server, and so could a web page in a browser by rebinding a name to 127.0.0.1.docker-bridge.ts: nextship listens on a named pipe with a random name, and each connection the Docker client opens is carried by its ownssh ... docker system dial-stdio, under the pinned host key. No port is opened on either machine, and a browser cannot open a named pipe.ImageBuilder.warning, which nothing else set.server addcould not start from Windows. Found by the live run below. Thessh-keyscanWindows ships cannot scan a current server:choose_kex: unsupported KEX method sntrup761x25519-sha512@openssh.comagainst Ubuntu 24.04. When the scan fails, the host key is now read by lettingsshrecord it, in one connection that offers no way to authenticate. It goes through the same printed fingerprint and--yes.Docs
docs/roadmap.mdgains "Where the CLI goes next": machine-readable output, and more than one instance of an app. The fourth sequencing principle names the user the server target brought.docs/design.md§9.3,docs/vm.md, the README, the site's server page and the CHANGELOG describe the fixes and record the live runs.How it was verified
pnpm typecheckandpnpm testpass: 336 CLI tests, 0 failures.s-2vcpu-4gb, Ubuntu 24.04,blr1), 2026-10-09:server add --yesin 61 s, a firstdeploy --yesin 127 s and a second in 73 s. The image was on the server (411 MB) and not on the Windows machine, no port warning was printed, streaming passed three runs of three (first byte 113 to 209 ms). The fingerprintserver addprinted matched the server's own. This is the first time--build remotehas run from Windows.Not yet verified
Conflicts to expect
This and pull requests 7 and 8 all add to the CHANGELOG's Unreleased section, and 7 also changes
deploy.ts,vm-target.tsandtarget.ts. Whichever merges second needs a rebase.🤖 Generated with Claude Code