release-qa
Skill32 starsChanged 17 days agoMITView on GitHub
QA an epic before release on the local environment. Check the environment without changing it, run the browser e2e suite and sort every failure, do exploratory testing in a real browser, file reproduced bugs in the tracker, and give a release call. Use when the user asks for release QA, a bug-hunting pass, or "is this epic ready to release".
6 other projects use a version of this.
Adopted by
Most recently taken up by
- beekeeper-studio/beekeeper-studiotheir own version, first seen Nov 1, 2026
- alfredoperez/speckit-companiontheir own version, first seen Oct 19, 2026
- AishwaryShrivastav/vibe-testingtheir own version, first seen Oct 17, 2026
- apmantza/pi-lenstheir own version, first seen Oct 8, 2026
- Harry-kp/vortixtheir own version, first seen Oct 8, 2026
- SUDARSHANCHAUDHARI/QACrafttheir own version, first seen Jul 21, 2026
Other versions6 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 6
- beekeeper-studio/beekeeper-studio★ 24ksame name
- Harry-kp/vortix★ 757same name
- apmantza/pi-lens★ 521same name
- alfredoperez/speckit-companion★ 104same name
- AishwaryShrivastav/vibe-testing★ 18same name
- SUDARSHANCHAUDHARI/QACraft★ 2same name
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 repository22 other files it gives its agents.
- automate-testsSkill
- automate-xray-testsSkill
- bug-bashSkill
- build-epicSkill
- close-out-epicSkill
- create-xray-testSkill
- cross-repo-handoffSkill
- live-verified-bddSkill
- pair-runbookSkill
- release-notesSkill
- retroSkill
- review-epicSkill
- roost-configSkill
- run-bugSkill
- run-sliceSkill
- setupSkill
- shape-epicSkill
- slice-handoffSkill
- stacked-prsSkill
- triage-ticketSkill
- verify-slice-testsSkill
- write-runbookSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
15 rules. 0 are common, 8 are distinctive, and 7 are very specific to this project.
0
Common
Most of the 6 edited versions we read keep these.
8
Distinctive
This author's own choices. Worth a look.
7
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 12
No app to QA in a browser?: When the config has no stack, or no repo with e2e (a plugin or a library, say), steps 1 to 3 don't apply.
- Very specific: line 15
The epic's tests,: run the way the tests adapter says (for tests.kind: evals, every case linked to the epic's stories), and sorted as step …
- Distinctive: line 22
Ask in one message for anything missing:
- Distinctive: line 24
The epic key: Read its description first, especially any flow or behaviour table: that's the intended behaviour.
- Very specific: line 34
Make sure the stack has the data the epic's flows need.
- Very specific: line 35
Read the flag state with stack.flag_state.
- Very specific: line 36
Check required test secrets are present in the e2e repo's e2e.secrets_file without printing them.
- Very specific: line 42
Run e2e.run_all, with the environment variables the flag state needs.
- Distinctive: line 44
Put every failed scenario in one bucket before doing anything else:
- Very specific: line 55
Use the Playwright browser tools against the app services in stack.services.
- Distinctive: line 61
Before filing, search for duplicates: the epic's existing bugs and a text search on the symptom.
- Distinctive: line 68
Only file what you've reproduced by hand at least once.
- Distinctive: line 71
The covering test isn't marked automated yet: add the bug's scenario to it (the tests adapter's "Update a test's scenarios", saving the …
- Distinctive: line 72
The covering test is already marked automated: don't add to it, which would make that false.
- Distinctive: line 73
No test covers it: create one, the same way.
“Common” is measured: kept by at least 6 in 10 of the 6 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Release QA
You are QA for one epic. Find out whether "ready for release" is true, and file what isn't. Don't fix anything: no edits to app or test code, no status changes on existing tickets.
First, load the team config with roost-config. You run in the session of the repo that holds the e2e suite (the one with e2e in repos).
No app to QA in a browser? When the config has no stack, or no repo with e2e (a plugin or a library, say), steps 1 to 3 don't apply. You run in the lead repo's session (planning.lead_repo) instead, and QA is:
- Every repo's own checks on the epic's newest code (its newest branches or open PRs, merged or not; the same commits for all three checks), as each repo's
testssays (for this plugin, for example,claude plugin validate --strict .and its scripts' checks). - The epic's tests, run the way the tests adapter says (for
tests.kind: evals, every case linked to the epic's stories), and sorted as step 2 sorts failures. - Each story's acceptance criteria, checked against what that same code actually does, one row per criterion with its evidence.
Then file bugs (step 4), report (step 5) and put the report on the epic (step 6) as usual. Here a reproduction isn't a browser session: it's the command or test run that shows the failure, with its output (for an eval case, the failing grader and its verdict), and a signed-out check doesn't apply. A bug's regression test is a test in the team's form, created as the tests adapter's "Create a test" says (for eval cases, a drafted case on the bug).
Inputs
Ask in one message for anything missing:
- The epic key. Read its description first, especially any flow or behaviour table: that's the intended behaviour.
- What's out of scope: tests that target another environment, slices not built yet, and known gaps that aren't bugs.
- Feature flags this run expects, and their required values.
- The label for bugs found in this run (for example
signup-qa).
1. Check the environment
Everything runs locally, on the services in stack.services. Don't touch staging or production.
- Confirm every service answers. If one doesn't, start it as
stack.howsays (neverstack.never), and start any other resource the epic needs (stack.extra_resources). - Make sure the stack has the data the epic's flows need. If it doesn't, put it there with
stack.test_data, against the local stack only, and record what you loaded. - Read the flag state with
stack.flag_state. If it isn't what this run needs, stop and say so. - Check required test secrets are present in the e2e repo's
e2e.secrets_filewithout printing them. - Record the branch and short SHA of every repo in
repos. Don't switch branches. - Throughout the run, if the config has
stack.telemetry, read the stack's own errors: fromstack.owner_repo,stack.telemetry.logsandstack.telemetry.traces(stack.telemetry.note). A repeating error nobody triggered on purpose is a finding, even when no test failed.
2. Run the e2e suite and sort every failure
Run e2e.run_all, with the environment variables the flag state needs. Scenarios gated off by flag tags (for example stack.flag_tags) skipping is expected.
Put every failed scenario in one bucket before doing anything else:
- Product bug: the app does the wrong thing. Reproduce it by hand in the browser; file it if it reproduces.
- Test bug: the app is right and the test is wrong (stale selector, timing, old expectation). Don't file; report it with the fix you'd suggest.
- Environment problem: something local is missing (a service, credentials, data). Missing data you can load with
stack.test_dataisn't a reason to stop: load it and re-run. Don't file; report it. - Flaky: re-run that scenario alone up to twice (
e2e.run_tagswith"@<tag>"). If it passes, report it as flaky with the failure output.
A failure in an unrelated suite can still be this epic's regression if it happens at a step the epic changed (sign-in, for example). Check where it fails.
3. Explore
Use the Playwright browser tools against the app services in stack.services. Create throwaway accounts with the suite's email pattern (qa.test_account_email), never a real account.
Write charters from the epic's flows, highest release risk first: the new-user path, wrong-identity and error paths, deep links and old URLs, password and session flows, invitations, roles, and logout. Always include general hygiene on every screen the epic touches: console errors, failed network calls, redirect loops, layout at phone width, keyboard-only use, and error messages a normal person could understand. Go off-charter when something looks odd.
4. File bugs
Before filing, search for duplicates: the epic's existing bugs and a text search on the symptom. If one exists, comment with the new evidence instead. If a closed bug is back, file a new one linked as "relates to" and call it a regression.
Each bug:
- In the tracker's project, type Bug, parent the epic, the run's label, plus
qa.security_labelif it touches who's signed in, sessions, account takeover, or data leaking between users or tenants. Components set, whentracker.components_required. - Summary: what the user experiences, in plain words, not the internal cause.
- Description: what happened and what should have (cite the epic's flow table or story); numbered steps from a signed-out browser with exact URLs; environment (flags, branches, SHAs); evidence (screenshot, console errors, the failing request's method, path and status, with tokens and cookies removed); found by (scenario name, or "exploratory: charter N"); severity (blocks release / fix before release / can wait) with one sentence why.
Only file what you've reproduced by hand at least once.
Give every behaviour bug a test that would catch it, so the fix has something to automate and the bug can't quietly come back. Skip purely visual nits.
- The covering test isn't marked automated yet: add the bug's scenario to it (the tests adapter's "Update a test's scenarios", saving the current scenarios first).
- The covering test is already marked automated: don't add to it, which would make that false. Create a new test for the bug's scenario ("Create a test"), linked to the story, unmarked until it's automated.
- No test covers it: create one, the same way.
Link each test to its bug ("relates to"), and say in the bug which test it is. Whoever fixes the bug automates that test as part of the fix.
Problems with the test setup itself (for example "the e2e suite doesn't start") go in one parent task with a subtask per problem, when the user asks for them filed.
5. Report
Anything the user must do goes first, in its own block headed 🙋 Your turn: one line per action, saying exactly what and where. Leave the block out when there's nothing; never write "nothing needed". Don't hand the user anything you can do yourself (attaching files to the tracker, retitling a PR, checking a setting through a connected tool); only sign-ins, vcs.signing_blocker and decisions are theirs. Then start with the call: "Not ready: 2 release blockers (PROJ-X, PROJ-Y)." or "Ready, with 3 fix-soon bugs." Then:
- Environment: flags, branches and SHAs.
- e2e: passed, failed and skipped counts, with each failure in its bucket.
- Exploratory: charters covered, and anything odd that wasn't a bug.
- Tickets filed or commented on: key, summary, severity.
Report test results plainly: a test passed or it didn't.
6. Put the report on the epic
Post the same report as a comment on the epic, so the release decision sits next to the epic rather than in a chat. Start the comment with the date, the environment and the call. Don't change the epic's status or any story's status; that's the user's decision.
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.

