web-release
Skill115 starsChanged 2 months agoMITView on GitHub
Release a web frontend (Vercel, Cloudflare Pages / Workers static assets, S3/CDN, Netlify) so that production serves exactly the build that was tested, and rolling back is one named command. Covers clean-tree builds, immutable preview deployments, E2E on the preview URL, promote by alias or route switch, build-id proof, cache purge, source maps, and rollback by re-aliasing the previous deployment. Use for any frontend ship step ("выкати фронт", "промоутни в прод", "откати сайт", "почему на проде старая версия"). Loaded by release-manager.
- Installs packages
In this repository39 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- aesthetic-instrumentSkill
- anti-patternsSkill
- anydesignSkill
- archetype-review-baseSkill
- artifact-retentionSkill
- brainstormingSkill
- build-speedSkill
- codex-hostSkill
- committed-aestheticSkill
- cost-modelSkill
- crystallizeSkill
- decision-evalSkill
- deploy-landedSkill
- discoverySkill
- done-blockedSkill
- great_ctoSkill
- lifecycle-messagingSkill
- migration-ready-schemaSkill
- mobile-releaseSkill
- observability-baselineSkill
- opportunity-solution-treeSkill
- outcome-roadmapSkill
- pm-planningSkill
- pre-mortemSkill
- product-economicsSkill
- prose-styleSkill
- quant-validationSkill
- reference-lockSkill
- secrets-rotationSkill
- signing-preflightSkill
- skeptical-triageSkill
- stack-baselineSkill
- test-strategySkill
- ui-ux-pro-maxSkill
- vertical-onboardingSkill
- verticalsSkill
- well-architectedSkill
The file
We split this skill into the rules it gives an agent
3 rules. About 0 are common, 0 are distinctive, and 3 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈0
Distinctive · estimate
This author's own choices. Worth a look.
3
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 29
Use the lockfile (npm ci, pnpm i --frozen-lockfile), never a fresh resolve.
- Very specific: line 54
Never vercel --prod from a working tree as "the promote": that is a new build nobody tested.
- Very specific: line 76
After the release: keep the live deployment and the previous one.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 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
web-release — production serves the build you tested, and the previous one is one command away
A frontend release fails quietly: the command exits 0, the CDN keeps the old bundle, a
_headers file is ignored, or the build picked up an uncommitted file. The rule is the
same as for any artifact: build once, test that build, promote that build.
1. Build from what CI checked
git status --porcelainempty andHEAD= the commit whose CI is green (all checks, browser E2E included). The bundler packs the directory, not HEAD: another session's uncommitted edit would ship.- Inject the commit into the bundle so it can be read back:
NEXT_PUBLIC_BUILD_SHA,VITE_BUILD_SHA, or a generatedpublic/version.json{ "sha": "<40 hex>", "builtAt": … }. - Use the lockfile (
npm ci,pnpm i --frozen-lockfile), never a fresh resolve.
2. Preview first, always
| Host | Preview | Its immutable id |
| Vercel | vercel deploy (no --prod) or the git preview | deployment URL / dpl_… id |
| Cloudflare Pages | wrangler pages deploy <dir> --branch <non-prod> | deployment id + <hash>.<project>.pages.dev |
| Workers static assets | wrangler versions upload | version id (not yet deployed) |
| S3 + CDN | upload to a versioned prefix releases/<sha>/ | the prefix |
Then e2e-test-engineer runs the Playwright golden paths against that preview URL.
A local next start or a rebuild is a different artifact and is not evidence.
3. Promote — after gate:release
Promotion makes the tested deployment the production one. It does not rebuild.
| Host | Promote | Rollback (record it before promoting) |
| Vercel | vercel promote <deployment-url> (or alias assign) | vercel promote <previous-deployment-url> / vercel rollback |
| Cloudflare Pages | promote the deployment to production in the project (or deploy the same dir with --branch <production branch>) | rollback to the previous production deployment id |
| Workers | wrangler versions deploy <version-id>@100% | wrangler versions deploy <previous-id>@100% / wrangler rollback |
| S3 + CDN | switch the origin path / index.html pointer to releases/<sha>/ | point back to releases/<previous-sha>/ |
- Never
vercel --prodfrom a working tree as "the promote": that is a new build nobody tested. - Gradual rollout where the host supports it (Vercel rolling releases, Workers percentage deploy): start small, decide on a named signal (error rate, Web Vitals for this deployment), then 100 %.
- The production domain and its DNS are infra-provisioner's. Missing domain → stop, route there.
4. Prove it landed
- The production URL's
/version.json(or the build-sha meta tag) returns the promoted sha. Read it from outside the CDN edge cache — a cache-busting query — and read theage/cf-cache-status/x-vercel-cacheresponse header. - HTML is served fresh (
cache-control: no-cacheor short max-age); hashed assets are immutable. A long max-age onindex.htmlkeeps users on the old build for its full life. - Purge only what changed (tags / paths), not the whole zone, and only when the host does not version automatically.
- Core journeys on production (Playwright smoke, logged in where the product needs it).
- Source maps: uploaded to the error tracker for this sha, not served publicly unless the project chose that.
5. Keep one rollback, clean the rest
Hosts keep deployments; your machine keeps dist/, .next/, .vercel/output, out/.
After the release: keep the live deployment and the previous one; delete local build
output of older releases by exact path (artifact-retention).
Report
WEB-RELEASE <project> @ <sha>
ci : PASS — all checks green on <sha> (run <id>)
preview : PASS — <deployment url / id>
e2e : PASS — playwright 9/9 on the preview URL
promote : PASS — after gate:release (<gate id>)
landed : PASS — /version.json = <sha>, cache MISS→HIT
rollback : vercel promote <previous deployment url>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.

