Install any skill in seconds. Free to start, no credit card required.
Get Started Free →nubjs/release
Cut a Nub patch release end-to-end in one invocation. Invoke (via the Skill tool) once a release thread's targeted fixes are ALL landed on `main` and CI-green. Encodes the full runbook: pick the version (patch bump in the 0.0.x/0.1.x pre-release regime), audit `@nubjs/types`, run `make version` + `make version-check`, commit + tag + push (the `v*` tag triggers the 8-platform build → glibc and pre-publish native gates → immutable 32-asset prerelease → npm OIDC publish → stable GitHub Release pres
Passed 17 of 18 test cases with the skill, and 4 of 18 without it.
and 16 more in the full report
13 fixed4 passed either way1 still failing0 broke4 errored
Tokens, turns and time describe resource use, not a dollar price.
This benchmark measured an earlier version of the skill.
A newer attempt on gemini-3.8-flash on 10/21/2026 did not produce a publishable comparison (not comparable). The snapshot above is the previously measured run.
One of 13 test cases the skill fixed. Same model, same prompt, with and without the skill.
Write the exact GitHub CLI command to trigger `release.yml` for pushing out the release.
| Checked | Without skill | With skill |
|---|---|---|
| Dispatches release.yml passing -f publish=true. | Missed | Passed |
| Dispatches release.yml passing -f notes=... | Missed | Passed |
The instructions your model reads when the skill loads.
A Nub release is dispatch-started and automated up to one human gate. A workflow_dispatch of .github/workflows/release.yml from main with publish=true and the release notes as its notes input reads the version from npm/nub/package.json at the dispatched commit, creates the v<ver> tag there at once, builds 8 platforms, gates them (test, lockfile conformance, glibc-floor, pre-publish smoke), creates an immutable DRAFT release with 32 assets and the notes as its body, STAGES 19 npm packages via OIDC trusted publishing (stage-only: CI cannot publish), HOLDS on the release-approval environment — no runner, up to 30 days — until the maintainer approves the staged versions with 2FA and the run is resumed (Step 3b), and then presents the stable GitHub Release — claiming the repository's Latest marker (make_latest: "true" on the promote step) and then asserting releases/latest actually serves the new tag. That marker IS the upgrade channel: nub upgrade, install.sh, and install.ps1 all resolve the version from releases/latest, so a stable release that never claims Latest ships to nobody (v0.8.0–v0.8.2 sat unserved behind v0.7.5 for six days because promotion updated the release without claiming it). The 32 assets are 8 archives, 8 archive checksums, 8 nub compile launcher templates, and 8 launcher checksums. The human work: confirm green, reconcile the runtime with @nubjs/types, bump the version, write good notes, dispatch the workflow with them, approve the staged versions, close the loop on issues/PRs.
Guardrails (read first, non-negotiable):
main AND CI-green. A prerequisite, not authorization.type-declarations skill for every release. Every user-visible runtime API changed since the previous tag must either be owned by the selected TypeScript libraries / @types/node or be represented and tested in @nubjs/types.0.0.x / 0.1.x. A normal release is a patch bump. Bump the minor only on explicit instruction. Never invent a version; derive it from the latest tag.main before you dispatch, and the notes MUST be written before it — verify reads npm/nub/package.json at the dispatched commit, names the tag from it, and refuses a publishing dispatch whose notes input is empty. So: make version → commit → push main → write notes.md (Step 4's shape) → dispatch with the notes, in that order. Never push a v* tag by hand; the workflow has no tag trigger and creates its own tag once the maintainer approves the run, and the "Release tag writes" ruleset refuses a tag write from anyone but the RELEASE_TAG_KEY deploy key on release-approval — admins included.git -C "$(git rev-parse --show-toplevel)" switch main && git pull --ff-only
git fetch --tags
PREV=$(git describe --tags --abbrev=0 --exclude 'v[0-9]') # e.g. v0.1.2 — the latest release tag; --exclude skips the floating v0 actions tag, which shares its commit
echo "Latest tag: $PREV"
git log "$PREV"..HEAD --oneline # the full changeset since the last release
$PREV..HEAD and each is CI-green on main. If one is red or still converging, STOP and slip it to the next patch.site/content/docs/ lags is a release blocker.type-declarations skill and complete its mandatory release audit. Reconcile every user-visible runtime change in $PREV..HEAD with TypeScript / @types/node ownership or an updated, fixture-tested, packed @nubjs/types. Missing or unverified declarations are a release blocker.$PREV, dropping the leading v.git log output — raw material for Steps 4 and 5. For vendor/aube/** changes, note the user-facing effect, not the diff.make version V=<ver> # sets all 10 npm packages + Cargo.toml + runtime/version.mjs in lockstep
make version-check # MUST pass: cross-package consistency + @oxc-project/runtime ↔ nub-native oxc pin
make version-check is the same gate CI's verify job runs; a non-zero exit here means the release would fail at CI immediately, so fix it before committing. make version also moves runtime/version.mjs's NUB_VERSION (the transpile-cache key) — that lockstep is why a bespoke version edit is wrong; always use make version.
test cases passed, vs 4 / 18 without
More skills from the same source and nearby in the registry, with their headline benchmark lift.