Qa report publish
Fires when lead is about to publish the assembled QA report to a merge request after human approval.From its SKILL.md
npx -y skills add athal7/dotfiles --skill qa-report-publishAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 6 stars6 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its file declares
Copied from the file, not written here
The file declares its own license as MIT. That is the authorβs claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
6.5 KB, ~1.7k tokens by cl100k_base, as published. Nobody here has run it
Skill: qa-report-publish
Covers how lead hosts the report and registers the deployment status that surfaces a "View deployment" button in the request's timeline.
Invariant
- The QA agent is read-only with respect to the remote; it writes only local artifacts in its session dir.
- Lead is the sole remote writer, and only after explicit human approval.
- Remote deliverable: the hosted Markdown form (
qa-report.md) plus a deployment status on the request's head commit. - The HTML form is never pushed.
The report is QA evidence only (the per-AC verdict may be n/a when QA didn't
run). Static and blast-radius review is not part of this report β it happens
separately on the merge request and is addressed via the merge-request workflow.
Report forms
The report is produced in TWO forms, both written into the QA session dir, both organized by acceptance criterion, and both led by the same machine-readable verdict line:
π§ͺ QA β PASS β
/ FAIL β / n/a β single parseable verdict (n/a when QA didn't run)
The top-line QA verdict is FAIL if any acceptance criterion's QA failed, n/a if QA did not run, otherwise PASS.
The two forms differ in exactly one thing β how they show screenshots:
qa-report.html (local-only) | qa-report.md (hosted) | |
|---|---|---|
| Screenshots | embedded <img> + clickable running-app links | relative-ref  images |
| Lifecycle | auto-opened locally | hosted on the branch and linked from the request |
Everything else is identical: the verdict header, the per-AC QA sections, the
could-not-verify section, and the no-structured-AC fallback (a single
### Goal β <stated goal> section).
The hosted form β qa-report.md
## π§ͺ QA β PASS β
### AC1 β <criterion text>
- **QA:** PASS β
/ FAIL β / n/a β evidence  <details><summary>steps</summary>
β¦chronological trailβ¦
</details>
### AC2 β β¦
### Could not verify
- β¦
The local form β qa-report.html
Self-contained, auto-opened locally. This form embeds QA screenshots as images and links the captured running-app page URLs, organized by acceptance criterion.
Skeleton:
<html><head><meta charset="utf-8"><style>
body{font-family:system-ui,sans-serif;max-width:1100px;margin:2em auto;padding:0 1em;color:#1f2328}
h1{font-size:1.5em} h2{font-size:1.15em;border-bottom:1px solid #d0d7de;padding-bottom:.3em}
.summary{color:#57606a;margin:.25em 0 1.5em}
section.ac{margin:2em 0;border-top:2px solid #d0d7de;padding-top:1em}
.qa .shot{width:60%;border:1px solid #ccc;border-radius:4px;margin:.5em 0}
.qa a{color:#0969da;word-break:break-all} details>summary{cursor:pointer}
</style></head><body>
Layout:
- Header:
<h1>π§ͺ QA β PASS β </h1>. - Per AC:
<section class="ac">β<h2>AC1 β criterion</h2>β<div class="qa">(the PASS/FAIL line,<img class="shot">screenshots, the running-app links, and a<details><summary>steps</summary>chronological trail). - Tail: a
Could not verifysection. - Close with the body/html end tags and open the file locally.
Verdict
The verdict is read from qa-report.md by parsing the ## π§ͺ QA first line and used as the deployment status description (e.g. QA β PASS β
).
Publish procedure
-
Host the report. Push
qa-report.mdand its referenced screenshots to the hosting branch (qa-assetsby default) atpr-<n>/, overwritten wholesale per merge request (one report per request; deleted/renamed shots don't linger), through a throwaway worktree so the working tree and checked-out branch are never disturbed. The committed.mdrenders natively in the file view with its relative images resolving β no URL rewriting. -
Register the deployment. This write MUST be performed by lead directly via bash β never dispatched to the
githubsubagent or any other source-control MCP wrapping-subagent. The source-control MCP server has no Deployments API coverage (no create-deployment/create-deployment-status tool exists on its surface), and the wrapping-subagent is bash-denied by design β dispatching this write there sends it hunting for credentials it couldn't use even if it found them, and it gets stuck indefinitely. Use theghCLI directly, passing the JSON body via--input -and a heredoc β never-f/-Fflag syntax for therequired_contextsarray field (-f required_contexts[]=breaks on zsh glob expansion, not the API). Create the deployment on the merge request's head commit for environmentqa-report:gh api repos/<owner>/<repo>/deployments -X POST --input - << 'EOF' {"ref": "<head-sha>", "environment": "qa-report", "auto_merge": false, "required_contexts": []} EOFThen post a
successdeployment status with the hosted report's blob URL as theenvironment_urland the parsed verdict as thedescription(e.g.QA β PASS β):gh api repos/<owner>/<repo>/deployments/<id>/statuses -X POST --input - << 'EOF' {"state": "success", "environment": "qa-report", "environment_url": "<blob-url>", "description": "<verdict>"} EOFThis surfaces a "View deployment" button in the request's timeline and environments panel β no description editing required.
Re-review
On a re-review, lead REGENERATES both forms from the reconciled evidence and
re-opens the HTML form locally. Then refresh the deliverable: re-host the Markdown
form (overwritten wholesale, so the blob URL is unchanged), then post a new
success deployment status on the existing deployment with the updated
description field reflecting the new verdict β no new deployment object needed.
Post this status via direct bash as in the Publish procedure β never dispatch
this to the github subagent.
Approval gate
Before any remote write, show the plan β the files to be pushed to the hosting branch, and the deployment status to be registered β and wait for explicit human approval. Only then perform the push and register the deliverable. The analysis agents never write to the remote.
When a merge request is merged or closed, post a final inactive deployment
status on the existing deployment β via direct bash as above, never dispatched
to the github subagent β then delete its pr-<n>/ dir from the hosting
branch as cheap cleanup.
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.
Gives 0 of the 12 instructions most docs writing skills give in ~1.7k tokens
Counted across 1,637 of the 3,044 authors here whose files we hold, read 2026-08-07
- Announce the skill at startin 54 of 1637, across 26 files
- Convert legacy doc files before editingin 45 of 1637, across 7 files
- Predict questions readers might askin 42 of 1637, across 4 files
- Generate clarifying questions for initial contextin 42 of 1637, across 3 files
- Create document scaffold with placeholder textin 42 of 1637, across 3 files
- Brainstorm content options for each sectionin 42 of 1637, across 3 files
- Test the document with a fresh context-less instancein 42 of 1637, across 3 files
- Include exact file paths in every taskin 42 of 1637, across 15 files
- Ask interview questions one at a timein 42 of 1637, across 27 files
- Apply surgical edits during refinementin 41 of 1637, across 2 files
- Offer structured workflow or freeformin 40 of 1637, across 1 file
- Ask for document meta-contextin 40 of 1637, across 2 files
Said here and by no other author read
- Write only local artifacts during analysis
- Show the plan and wait for explicit human approval
- Push the markdown form and screenshots to the hosting branch
- Use a throwaway worktree to push files
- Create a deployment on the merge request head commit
- Post a success deployment status with the report URL
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.