release-overnight
Skill1.8k starsChanged 2 days agoApache-2.0View on GitHub
Prepare an alchemy release unattended overnight, in series — after one go-ahead, nuke the testing account, then walk every provider's live suite one at a time (Cloudflare → core unit → core integration → small providers → Fly → GCP → AWS), fixing each until its whole suite passes in one run AND the account census is clean, then run `pnpm test:examples`, and finish with one alchemy PR plus at most one distilled PR and one floci PR, all linked, that merge into a release passing every test. Use for "prepare the release overnight", "/release-overnight", "run the release suite in series while I sleep"; for the parallel, interactive version use prepare-release.
- Reads credentials
We split this skill into the rules it gives an agent
13 rules. About 0 are common, 2 are distinctive, and 11 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈2
Distinctive · estimate
This author's own choices. Worth a look.
11
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- could be automatic: a setting could enforce it
- Distinctive: line 24
Ask once, up front, in a single question.
- Very specific: line 32
Don't end the turn until §6 is done.
- Very specific: line 37
Start from the latest origin/main, on a fresh branch:
- Very specific: line 52
Don't merge main into the branch mid-run.
- Very specific: line 55
Keep the run's state in /tmp/release/STATE.md and update it after every event.
- Very specific: line 73
On every start, read
STATE.mdfirst: If it exists, resume at the first step that isn't done. - Very specific: line 97
Every new top-level directory under packages/integration-tests/test gets a step.
- Very specific: line 105
Clean slate: Run pnpm nuke --yes --profile testing and wait for it to finish.
- Very specific: line 116
Wait on it with t3_background_wait.
- Very specific: line 133
If the blocker is the account (billing, token permissions, a retired service), mark the step blocked with the exact error and move on.
- Very specific: line 139
Gate and push: Run pnpm exec tsrs -b and pnpm docs:check-jsdoc if any props changed.
- Very specific: line 180
After step 10 is done and no step is stale, git fetch origin main.
- Distinctive: line 207
After each upstream PR merges, the submodule has to be repointed at its main merge commit and the steps that commit invalidates have to be …
≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Release overnight
This thread runs the whole release unattended, one suite at a time. It owns every step: the clean slate, each run, the fixes, type-checking, the census and the PRs. It launches no subagents or threads, and it runs nothing in parallel with a live suite. Going slowly in series is the point. A live suite under load produces fake failures, and parallel fixers on one account leak into each other's census.
A provider is done when its whole suite passes in one run at the current
head and the census shows nothing new. The release is done when every
provider is done at the final head, pnpm test:examples passes, and the
account is clean. The user merges; you never do.
0. One question, then unattended
Ask once, up front, in a single question. Confirm three things: the scope
(default: everything in §2), that you'll nuke the testing account before each
step for the whole run, and any opt-in tags or paid add-ons to include
(default: none). Nuking is destructive, so get an explicit yes. After
that, never ask again. Take every decision yourself, record it in
STATE.md, and keep going. An answer you would have asked for goes in
the final report.
Don't end the turn until §6 is done. Ending the turn ends the night. Wait on
long runs with t3_background_wait, never with sleep or a polling loop.
1. Preflight and durable state
Start from the latest origin/main, on a fresh branch:
git status # must be clean; never git stash
git fetch origin main
git checkout -b release/overnight-$(date +%Y-%m-%d) origin/main
git log -1 --format='%H %s' origin/main # record as "Base" in STATE.md
git submodule update --init -- submodules/distilledThen run the rest of
prepare-release §0: pnpm install,
pinned bun/node in /tmp/release/env.sh, .env, aws sso login, and
pnpm exec tsrs -b.
Don't merge main into the branch mid-run. A moving base would make every
Passed at meaningless. §6 picks up whatever landed overnight.
Keep the run's state in /tmp/release/STATE.md and update it after every
event. Context will be compacted many times overnight, and this file is how
you resume:
# Release overnight 2026-10-31 — branch release/overnight-2026-10-31
Base: origin/main <sha> · Scope: all · opt-in: none · nuke authorized: yes
PRs: alchemy #— · distilled #— · floci #—
| # | Step | Command | Status | Passed at | Notes |
| - | ---- | ------- | ------ | --------- | ----- |
| 1 | Cloudflare | pnpm test:integration test/Cloudflare | done | a1b2c3d | |
| 2 | core unit | pnpm test | fixing (iter 2) | | Plan diff regression |
Gated: <test → typed tag + exact error>
Blocked (account, not code): <step → exact error>On every start, read STATE.md first. If it exists, resume at the first
step that isn't done. Don't restart the night.
2. The steps, in order
Cloudflare goes first. State and most other suites deploy through
packages/cloudflare, so getting it green first keeps its failures out of
every later step. After that, cheap and narrow first, so a broken shared
layer shows up in minutes, not after AWS. Paths are relative to
packages/integration-tests:
| # | Step | Paths | --concurrency |
| 1 | Cloudflare | test/Cloudflare | 16 |
| 2 | core unit | pnpm test (packages/alchemy) | default |
| 3 | core integration | test/*.test.ts test/Bundle test/Cli test/Local test/Runtime test/Util test/Website | 8 |
| 4 | building blocks | test/Docker test/Redis test/Kubernetes test/SQL test/Drizzle test/Domain test/Auth test/DNS test/ACME | 8 |
| 5 | Git, GitHub, Axiom, Stripe | one step each | 8 |
| 6 | Turso, Neon, Planetscale, Prisma | one step each | 8 |
| 7 | Hetzner, Railway, Fly | one step each | 8 |
| 8 | GCP | test/GCP | 16 |
| 9 | AWS | test/AWS | 32 |
| 10 | examples | pnpm test:examples --profile testing | — |
Every new top-level directory under packages/integration-tests/test gets a
step. If one is missing from this table, add it to steps 5–7 by size, and fix
this skill in the release PR. Never pass --concurrency unbounded or go
over 32. Never run a sequential monster file unfiltered in a fix iteration
(e.g. Fly/BlueGreen.test.ts). Its confirming run is the step's run.
3. One step
- Clean slate. Run
pnpm nuke --yes --profile testingand wait for it to finish. Then savepnpm nuke --dry-run --profile testingto/tmp/release/census-<step>-before.txt. What's left is residue (scripts/nuke.shexcludes). A holdout that survives two nukes is a stuck delete in that provider. Fix it in this step. - Run the step in the background, with the output written to a file:
Wait on it withsource /tmp/release/env.sh pnpm test:integration <paths> --profile testing --concurrency <n> \ > /tmp/release/<step>-run-<k>.out 2>&1t3_background_wait. Start triage as soon as failures stream in (grep -E "\] ✗ |failed to run|^Tests:"). A test running far past its timeout is a hang. Read its log under.alchemy/log/test/and fix the cause. - Census. Once the run has finished, save
pnpm nuke --dry-run --profile testingtocensus-<step>-after.txtand diff it against-before. Every new line is a leak, even from a green test. Leave leaks live while you fix them, since they're your evidence. - Fix, using the buckets and root-cause priority in
prepare-release §4:
provider bug > distilled patch > test fix. Never paper over a leak or an
untyped error in a test. Re-run only the failing files, with
-twhen a file is long, until each one passes. A failure that also fails onmainis still yours to fix. - Budget. Give a failure three fix iterations. If the blocker is
platform behavior (entitlement, slow async provisioning, beta API), gate it
on the typed tag with the exact error, keep an ungated probe, and move on.
If the blocker is the account (billing, token permissions, a retired
service), mark the step
blockedwith the exact error and move on. Never enable billing or edit shared tokens. - Confirm. Nuke, then run the whole step once more and take another
census. The step is
doneonly when that single run is green and the census diff is empty. Record the HEAD sha inPassed at. - Gate and push. Run
pnpm exec tsrs -bandpnpm docs:check-jsdocif any props changed. Commit one commit per fix, scoped (fix(aws/ec2): …), then push the alchemy branch and any distilled/floci branch (§5).
4. Keep earlier steps valid
A later fix can break an earlier step. The release needs every step to pass
at the final head, not just at the head where it once passed. After each
step, check what has changed since each done step passed:
git diff --name-only <passed-at>..HEADMark a step stale when that list touches packages/alchemy/,
packages/alchemy-test/, its own provider packages, a package its tests
deploy through (most suites deploy through packages/cloudflare for state),
or the distilled/floci pins. Before step 10, re-run every stale step (§3.1–6)
in order until none is left. When a fix only touches one provider's own
package, the other steps stay valid.
5. PRs, linked
There are at most three PRs: alchemy, distilled and floci. Open the alchemy PR as a draft at the first fix commit, and push after every step, so a crash at 4am loses nothing. Use prepare-release §9 for the standalone distilled/floci clones, titles and bodies. On top of that:
- alchemy's branch pins
submodules/distilled/submodules/flociat the current heads of their PR branches, and pushes a bump each time those branches move. - Link them both ways. Put
Requires alchemy-run/distilled#X(and floci) in the alchemy body, andRequired by alchemy-run/alchemy#Yin each upstream body. Write the merge order distilled → floci → alchemy into the alchemy body. link_pull_requestevery PR to this thread.- Mark the PRs ready (
gh pr ready) only at §6, once everything isdone.
6. Finish
After step 10 is done and no step is stale, git fetch origin main. If
main has moved past Base, merge it, resolve any conflicts, run
pnpm exec tsrs -b, and apply §4 to the merged changes. Re-run every step it
marks stale, and step 10 if any step re-ran. Repeat until a fetch finds
nothing new. The PR must be mergeable at a head that already contains the
latest main. Then nuke one last time and take a final census. It must show residue only. Then, and only then, end the
turn with the report:
### Release ready at <sha> after one overnight pass. I recommend merging, in this order:
1. distilled — <what it types> — https://github.com/alchemy-run/distilled/pull/X
2. floci — <what it fixes> — https://github.com/alchemy-run/floci/pull/Z
3. alchemy — <K> fixes, <G> gated tests — https://github.com/alchemy-run/alchemy/pull/Y
| Step | Tests | Result | Passed at |
| ---- | ----- | ------ | --------- |
| Cloudflare | 1577 | ✅ | a1b2c3d |
| AWS | 3361 | ✅ 3349 · 12 gated | f00ba47 |
| examples | 38 | ✅ | f00ba47 |
Gated: <test → typed tag + exact error>.
Blocked (account): <step → exact error>.
Decisions taken overnight: <ones you'd have asked about>.
Census: clean except <documented residue>.After each upstream PR merges, the submodule has to be repointed at its
main merge commit and the steps that commit invalidates have to be re-run.
Say so in the report rather than claiming the release is final. Say plainly
what didn't run (out-of-scope steps, opt-in tags, blocked steps). Don't report
CI status in place of these results.
Pitfalls
Everything in prepare-release's pitfalls applies here. In addition:
- The SSO session expires overnight. An AWS step failing in ~100ms at
setup means the token is gone. Run
aws sso loginagain. If that needs a human, mark the stepblockedand go on to the non-AWS steps, then come back to it. - Never overlap nuke with a run, and never start a step's run before its nuke has finished.
- Steps share one account. A leak from step 4 shows up in step 5's census unless step 4's confirming census was clean. Don't move on with a dirty census.
Trending
More talk lately.about the whole repository
Who's talking about alchemy-run/alchemy
- alchemy-run/floci“feat: 100% alchemy local AWS coverage”GitHub · Aug 25, 2026 · 3 reactions
- A Hacker News story“Infrastructure as TypeScript”Hacker News · Oct 7, 2025 · 2 points
- sinequix/enrailar“build(deps): bump alchemy from 2.0.0-beta.81 to 2.0.0-beta.84”GitHub · Oct 23, 2026 · 1 reactions
- alchemy-run/distilled“Default retry policy has no per-attempt timeout: 9 hanging 504s block a caller ~10 min”GitHub · Oct 20, 2026 · 1 reactions
- maelstrom-co/maelstrom“build(infra): upgrade alchemy to beta.83”GitHub · Oct 17, 2026 · 1 reactions
The biggest 5 of 45 mentions linking to the repository that our crawl found. Each line is their own headline.
See all 45
Talked about on GitHub, Hacker News and Bluesky (45 times).
On GitHub · 43
- Aug 25, 2026feat: 100% alchemy local AWS coverage — alchemy-run/flocisays it tested it3 reactions · 1 comment
- Oct 23, 2026build(deps): bump alchemy from 2.0.0-beta.81 to 2.0.0-beta.84 — sinequix/enrailar1 reaction · 7 comments
- Oct 20, 2026Default retry policy has no per-attempt timeout: 9 hanging 504s block a caller ~10 min — alchemy-run/distilled1 reaction · 1 comment
- Oct 17, 2026build(infra): upgrade alchemy to beta.83 — maelstrom-co/maelstrom1 reaction · 6 comments
- Jun 5, 2026Bump alchemy from 0.87.0 to 0.93.11 — martinthommesen/snow-mcp1 reaction · 1 comment
38 more on GitHub
- Feb 5, 2026feat(cloudflare): send email binding — alchemy-run/alchemy-async1 reaction · 4 comments
- Dec 15, 2025[10021] Uncaught Error: internal error; — alchemy-run/alchemy-async1 reaction · 7 comments
- Nov 23, 2025chore(deps): bump the minor-and-patch group across 1 directory with 12 updates — codesbyayush/no-name-yet1 reaction · 2 comments
- Oct 28, 2025fix(aws): export all aws resources and add aws/ec2 — alchemy-run/alchemy-async1 reaction · 2 comments
- Oct 29, 2026chore(deps): bump undici, wrangler and alchemy — dashayushman/namaste-ji-boilerplate0 reactions
- Oct 29, 2026chore(deps): bump the dependencies group across 1 directory with 39 updates — yielded-dev/agent0 reactions
- Oct 29, 2026ci: bump the dependencies group across 1 directory with 23 updates — yielded-dev/auth0 reactions
- Oct 29, 2026[Hyperdrive] Document what happens to an open transaction when the client request is aborted — cloudflare/cloudflare-docs0 reactions
- Oct 28, 2026Bump alchemy from 2.0.0-beta.79 to 2.0.0-beta.84 — marcosvrs/bellwatch0 reactions · 1 comment
- Oct 28, 2026fix(docs): repair moved Bun executable and Alchemy provider links — prisma/web0 reactions · 3 comments
- Oct 26, 2026separate package for aws s3 standalone client — alchemy-run/distilled0 reactions
- Oct 26, 2026chore: bump alchemy from 2.0.0-beta.83 to 2.0.0-beta.84 in the alchemy group across 1 directory — thomasfosterau/effect-auth0 reactions
- Oct 20, 2026cloudflare/r2: expose Local Uploads enable/disable — alchemy-run/distilled0 reactions · 1 comment
- Oct 19, 2026chore(repo): vendor latest Effect and Alchemy subtrees — systemfsoftware/are-the-types-wrong-effect0 reactions · 1 comment
- Oct 13, 2026chore(deps): bump alchemy from 2.0.0-beta.79 to 2.0.0-beta.81 — plannotator/artifact-server0 reactions
- Oct 10, 2026chore(deps-dev): bump the all-deps group across 1 directory with 6 updates — empotts/safety-car0 reactions · 1 comment
- Oct 9, 2026chore(deps): bump alchemy from 2.0.0-beta.79 to 2.0.0-beta.81 in the alchemy group — levinbaenninger/echo0 reactions · 1 comment
- Oct 8, 2026chore(deps-dev): bump alchemy from 2.0.0-beta.80 to 2.0.0-beta.81 — ImArtisann/repo-int0 reactions
- Sep 21, 2026整理現有 Durable Object git 伺服器的做法:資料怎麼存、支援哪些協定、遇過哪些限制 — yurenju/fugitive0 reactions · 1 comment
- Sep 1, 2026[EPIC] Effect v4 package architecture, Alchemy deployments, and runtime ecosystem — In-Time-Tec/generalist0 reactions · 2 comments
- Sep 1, 2026[P1] alchemy: add an Effect-native Generalist deployment integration — In-Time-Tec/generalist0 reactions · 2 comments
- Sep 1, 2026[P1] compatibility: publish and enforce one tested Effect v4 package cohort — In-Time-Tec/generalistsays it tested it0 reactions · 2 comments
- Aug 21, 2026Add Alchemy v2 Cloudflare deployment support — lloydrichards/stack-effect0 reactions · 1 comment
- Aug 4, 2026Requested SDKs — alchemy-run/distilled0 reactions
- Jul 21, 2026use alchemy's new gh environment resource — crosshatch/crosshatch0 reactions
- Jul 18, 2026Panic — FullStack-Flow/calorie-ai0 reactions
- Jun 27, 2026Segmentation fault at address 0x1800000011 — alchemy-run/alchemy-async0 reactions · 1 comment
- May 11, 2026chore(deps-dev): bump alchemy from 0.84.0 to 0.93.7 — acoyfellow/unsurf0 reactions
- May 1, 2026chore(deps): bump alchemy from 0.90.1 to 0.93.6 — ahargunyllib/realm0 reactions
- Apr 29, 2026chore(deps): bump alchemy from 0.91.2 to 0.93.6 — acoyfellow/lab0 reactions
- Apr 10, 2026Slow HMR updates for Vite and Cloudflare — AmanVarshney01/create-better-t-stack0 reactions · 2 comments
- Mar 29, 2026Alchemy commands can not be used with Vite+ — alchemy-run/alchemy-async0 reactions · 4 comments
- Feb 28, 2026chore(deps): bump the cloudflare group across 1 directory with 2 updates — StephenODea54/from-juice0 reactions
- Feb 11, 2026Tunnel wildcard ingress does not auto-create wildcard DNS CNAME (request support) — alchemy-run/alchemy-async0 reactions · 1 comment
- Dec 6, 2025Alchemy R2Bucket types vs `@cloudflare/workers-types` — alchemy-run/alchemy-async0 reactions · 2 comments
- Dec 2, 2025build(deps): bump alchemy from 0.78.0 to 0.79.0 — wyze/dev0 reactions
- Oct 26, 2025fix(cloudflare): convert maxWaitTimeMs to seconds in miniflare — brendadeeznuts1111/alchmenyrun0 reactions · 5 comments
- Oct 26, 2025chore(deps): prepare for Alchemy 0.77.0 upgrade — brendadeeznuts1111/alchmenyrun0 reactions · 2 comments
On Hacker News · 1
- Oct 7, 2025Infrastructure as TypeScript2 points
On Bluesky · 1
- Dec 4, 2025https://github.com/alchemy-run/alchemy/ — @tom-doerr.bsky.social1 likes and repost
Other versions1 project uses a version of this.
Word for word · 1
- alchemy-run/alchemy-effect★ 1.8k100% same
Edited · 0
None found.
Wrote their own version · 0
None found.
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository6 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- alchemy-providerSkill
- auditSkill
- prepare-releaseSkill
- pr-queueSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

