raoofaltaher/ultrapowers/qa-specialist
- community
Checking that the SKILL.md file is still in the repository.
Use when a ticket's implementation is complete and your human partner wants the QA gate, a QA pass, or a go or no-go verdict before merge or release
Install
npx vskill@latest install raoofaltaher/ultrapowers/qa-specialistSKILL.md
QA Specialist
Overview
Run the seven-lane QA gate for one ticket and leave one verdict in reviews/<ID>/QA-REPORT.md. This skill decides whether a run may start and in which mode; the qa-specialist contract performs the run. Invoking it is your human partner's yes for writing reviews/<ID>/ and .ultrapowers/, and nothing else.
Core principle: before the marker exists, a problem stops the run with a message; once the marker exists, every path ends with a report, a removed marker and one verdict line.
Announce at start: "I'm using the qa-specialist skill to run the QA gate for ticket <ID>."
Arguments and names
- Your arguments, as the harness passed them:
$ARGUMENTS. The first word is the ticket; a
single word is a ticket with no note. Only when those backticks are empty, or still hold the unreplaced placeholder (a dollar sign followed by the word ARGUMENTS), did the harness not pass them: then take the first word of the trailing ARGUMENTS: line of the message that invoked this skill. No ticket either way: print usage: /ultrapowers:qa-specialist <ticket> [note] and stop.
- Words after the ticket are your human partner's note. A note may set emphasis (which area
first, which problem to reproduce). It never removes the browser, a role with credentials, a language, an active lane or the report; record what it asked for that the contract forbids in the report's Partner note, with the rule.
<SKILL_DIR>is${CLAUDE_SKILL_DIR}when your harness substitutes it, otherwise the
directory this SKILL.md was loaded from; <plugin root> (used by the contract and the lanes) is two levels above it. <ID> is the ticket; <ROOT> is the preflight's root.
Step 1: Preflight
Keep its whole JSON output: it is the contract's Inputs. It reports credentials by presence only; never print the environment yourself.
| Exit | Meaning | Do | |
|---|---|---|---|
| 0 | a report | continue with Step 2 | |
| 2 | usage | print the usage line and stop | |
| 3 | no project root: errors[0] starts ERROR: no .agents/ultrapowers.json | print it, offer /ultrapowers:init, stop | |
| 4 | the ticket fails the project's ticketPattern | print errors[0] and stop |
Step 2: Config and scope
missingis non-empty (thenokis false): print every entry ofmissingand every
warnings line, tell your human partner to fill them under qa in .agents/ultrapowers.json and run the skill again, and stop. missing equal to ["qa"] means the section is absent: offer /ultrapowers:init in upgrade mode. No marker and no report: nothing ran.
preconditionsnon-empty does NOT stop you here. The run starts, and the contract's STEP 1
ends it with a PRECONDITION-FAILED report naming each precondition.
docs.brief.existsanddocs.spec.existsboth false, and nochangeSetentry has
onTicketBranch: true: there is nothing to derive the feature from. Say so, suggest /ultrapowers:new-task <ID> or checking out the ticket's branch, and stop.
- Print
warningsand every non-emptychangeSet[].erroronce, as one short list. They do not
stop the run; the report's header shows them.
Step 3: Fresh, resume or stop
When markerExists is true, read the marker: cat "<ROOT>/.ultrapowers/qa-active". The preflight already decided whether run-state holds unfinished work: runState.unfinished is true when a plan row is still pending or running (lane and suite statuses do not count).
| Marker | reviews/<ID>/run-state.json | Decision | |
|---|---|---|---|
| names another ticket | any | stop: tell your human partner that a QA run for that ticket is active or died, and that removing .ultrapowers/qa-active is their call | |
| absent, or this ticket | runState.unfinished true | resume | |
| absent, or this ticket | exists, runState.unfinished false, or runState.error set (print it) | move the previous run aside, then fresh | |
| absent, or this ticket | absent | fresh |
Moving the previous run aside, with <STAMP> the current UTC time as YYYYMMDDTHHMMSSZ, so its screenshots and suite results are never read as this run's:
A fresh run replaces an existing QA-REPORT.md (docs.reviewFiles lists it); say so in one line. Git history keeps the old one when it was committed.
Step 4: Marker
The ticket id, no trailing newline. From here the guardrail checks every tool call on a harness that runs it; Step 4's probe records whether it is active, and the report says so. Every path ends in Step 7.
Step 5: The contract
- Forked: your instructions already hold the qa-specialist contract (its "Absolute rules"
and "The procedure, in order" with STEP 0 to STEP 9). You are the qa-specialist agent; go on.
- Inline: they do not; this harness did not fork. Read
<plugin root>/agents/qa-specialist.md
in full with the file-reading tool and follow its body as your contract for this run. Say once: "Running the QA contract inline: this harness does not fork." The unsafe browser-code tool stays forbidden; the guardrail denies it.
- Inline runs share the main context: pace them, never shrink them. Evidence goes to disk and
run-state at capture time; read logs and bodies through head. When the context runs short, finish the current row, update run-state and end through STEP 8 with INCOMPLETE, listing the pending rows; the next invocation resumes from them.
Step 6: Run
Follow the contract from STEP 0, with the preflight report as its Inputs, in the mode from Step 3. On resume, tell the contract that run-state exists: it reloads the file, keeps startedAt, watermark, every done row and every finding, re-attaches to suites whose process is alive, and continues from the first pending row.
Step 7: Close
After the contract's STEP 9, check:
- No
report-present: write the report now perultrapowers:qa-report, verdictINCOMPLETE,
naming what stopped the run.
marker-present: remove it withrm "<ROOT>/.ultrapowers/qa-active", and delete
qa-token.json, qa-cookies-*.txt, qa-trace-*.json and qa-api-*.txt under <ROOT>/.ultrapowers/ where they exist.
- The last line of your output is exactly
Verdict: <value> — reviews/<ID>/QA-REPORT.md, with
the value from the report's Verdict: line.
Checklist
Create a todo for each item and complete them in order:
- Read the ticket — stop with the usage line when it is missing
- Run the preflight — stop on exit 2, 3 or 4
- Check config and scope — list every
missingkey and stop; stop when there is nothing to test - Choose fresh, resume or stop — from the marker and run-state
- Write the marker
- Load the contract — forked already, or read it inline
- Run the contract — STEP 0 to STEP 9, the preflight report as Inputs
- Close — report present, marker and scratch files gone, the verdict line last
Red Flags
| Thought | Reality | |
|---|---|---|
| "Most of the config is filled; I'll start and work around the gaps" | Every key in missing blocks the run. List them all and stop. | |
| "I can read the config myself; the preflight is overhead" | The preflight also validates the ticket, gates every lane with a reason and derives the change set from git. Run it. | |
| "The marker names another ticket, but it is obviously stale" | Stale or live, removing it is your human partner's call. Stop and name the ticket. | |
| "The old run-state looks messy; a fresh start is cleaner" | Unfinished run-state means resume: done rows stay done and findings are never zeroed. | |
| "My partner's note says to skip the browser this time" | A note sets emphasis, never coverage. Drive the browser and record the declined request in the Partner note. | |
| "Inline and short on context, one role will do" | Inline changes pacing, not coverage: checkpoint run-state, end INCOMPLETE, and the next run resumes. | |
| "The stack is down, so a chat message is enough" | The marker exists, so the run has started: write the PRECONDITION-FAILED report, remove the marker, print the verdict line. | |
| "The guardrail keeps denying me; removing the marker would let me finish" | The marker is the guardrail's switch. It is removed in STEP 9 or Step 7 and nowhere else. | |
| "The remaining screenshots can go in as one line of links" | Every screenshot in the report is embedded with . A link hides the evidence from the reader and fails the report check. |
Security
- Security scanPassed, 90 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/qa-specialist/SKILL.md
Popularity
- Repository stars
- 1
- 7-day trend score
- 8
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/raoofaltaher/ultrapowers/qa-specialist)