Skip to content

Users/quenty/deploy improvements#730

Merged
Quenty merged 5 commits into
mainfrom
users/quenty/deploy-improvements
Jul 16, 2026
Merged

Users/quenty/deploy improvements#730
Quenty merged 5 commits into
mainfrom
users/quenty/deploy-improvements

Conversation

@Quenty

@Quenty Quenty commented Jul 16, 2026

Copy link
Copy Markdown
Owner

No description provided.

Quenty added 4 commits July 15, 2026 17:22
undici (global fetch) cannot send a streaming request body to the Open Cloud
place-versions endpoint — it throws "expected non-null body source" — so
byte-level upload progress was impossible and the retry loop compounded it by
re-sending an already-disturbed single-use stream ("body ... disturbed or
locked"), turning any single 429/5xx into a permanent upload failure.

Drive the upload through node-fetch (already a dependency), whose Node http
stack accepts a streaming body, with an explicit Content-Length so it isn't
chunked. The upload stays inside RateLimiter: fetchAsync gains an optional
fetchImpl and accepts an init factory so each retry attempt rebuilds a fresh,
un-disturbed stream. A counting Transform on the stream restores byte-level
progress.

Verified against the live endpoint on Node 24 (reaches a clean HTTP response
where undici threw at the transport layer).
Add docs/cli.md, a full reference for the nevermore CLI: every command
and flag (init, install, login, test, deploy, batch, tools), global
options, and a command tree, verified against live --help output. Index
it in _AI_INDEX.md.

Correct the deprecated hyphenated init-package/init-plugin examples to
the canonical init package/init plugin subcommand form in install.md and
the CLAUDE.md files. The hyphenated forms still work as hidden
back-compat aliases; the subcommand forms are canonical.
A large place upload occasionally trips an edge proxy that answers 400 with an
HTML body ("Your browser sent an invalid request") — transient framing noise,
not the API rejecting the payload. Previously any 400 fell straight through and
failed the deploy, while an identical retry (as with the ECONNRESET path)
would have succeeded.

Retry a 400 only when the response is not application/json, so genuine
structured Open Cloud 400s are still surfaced immediately and never masked;
also retry 408 Request Timeout. Reuses the existing jittered backoff.
Add the nevermore-cli-manifest package. Its NevermoreCLIManifestUtils.getGameMetadata()
returns the commit, branch, target, timestamp, place/universe IDs, and published flag of
the deployment that built the running place, plus a `deployed` boolean that is false in
Studio and undeployed builds.

nevermore deploy and nevermore batch deploy now inject that metadata between the rojo
build and the upload: a Lune transform finds the package's module in the built place by
name and writes the values as attributes, so the data rides on the package instance and
replicates to clients. Places without the package are left unchanged.

Place and universe IDs are written as strings because Lune serializes number attributes
as float32, which silently corrupts IDs above 2^24; the reader restores them with tonumber.
@github-actions

github-actions Bot commented Jul 16, 2026

Copy link
Copy Markdown

Deploy Results

ℹ️ No changed packages with deploy targets were discovered for this PR. · View logs

Test Results

Package Status Try it
@quenty/nevermoreclimanifest ✅ Passed (3/3) (501ms) Open | Play

1 tested, 1 passed, 0 failed in 6.7s · View logs

Stamp test builds with deploy metadata the same way a deploy does, so the
manifest package's spec asserts the values the CLI actually injected instead of
a synthetic fixture. runSingleTestAsync rewrites the built place in place (each
test build is a unique per-session file), gated to packages that ship or depend
on nevermore-cli-manifest so unrelated test builds skip the Lune pass.

The spec now reads getGameMetadata() off the running place and checks
deployed is true, the commit is a real SHA, the target is "test", and the
place/universe IDs are positive numbers.
@Quenty
Quenty merged commit f60bab5 into main Jul 16, 2026
11 checks passed
@Quenty

Quenty commented Jul 16, 2026

Copy link
Copy Markdown
Owner Author

🚀 PR was released in @quenty/nevermore-cli@4.36.0, @quenty/nevermoreclimanifest@1.1.0 🚀

@Quenty Quenty added the released This issue/pull request has been released. label Jul 16, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

released This issue/pull request has been released.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant