qa-engineer 0.9.1 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/COMPATIBILITY.md +50 -26
- package/README.md +40 -32
- package/package.json +12 -20
- package/packages/engine/bin/qa-engine.mjs +336 -0
- package/packages/engine/lib/analysis/branding.mjs +187 -0
- package/packages/engine/lib/analysis/context.mjs +294 -0
- package/packages/{installer/lib/core/schema-validate.mjs → engine/lib/analysis/contracts.mjs} +11 -4
- package/packages/engine/lib/analysis/diff-guard.mjs +425 -0
- package/packages/engine/lib/analysis/discovery.mjs +220 -0
- package/packages/engine/lib/analysis/evidence.mjs +116 -0
- package/packages/engine/lib/analysis/har.mjs +90 -0
- package/packages/engine/lib/analysis/junit.mjs +126 -0
- package/packages/engine/lib/analysis/redaction.mjs +127 -0
- package/packages/engine/lib/analysis/report-html.mjs +763 -0
- package/packages/engine/lib/analysis/taxonomy.mjs +109 -0
- package/packages/engine/lib/analysis/xml.mjs +153 -0
- package/packages/engine/lib/analysis/zip.mjs +107 -0
- package/packages/engine/lib/diagnostics/engine.mjs +165 -0
- package/packages/engine/lib/diagnostics/internal-contracts.mjs +50 -0
- package/packages/engine/lib/diagnostics/prioritization.mjs +99 -0
- package/packages/engine/lib/diagnostics/repair.mjs +73 -0
- package/packages/engine/lib/diagnostics/root-cause.mjs +92 -0
- package/packages/engine/lib/diagnostics/timeline.mjs +101 -0
- package/packages/engine/lib/frameworks/junit-frameworks.mjs +48 -0
- package/packages/engine/lib/frameworks/playwright.mjs +158 -0
- package/packages/engine/package.json +14 -0
- package/packages/installer/lib/agents/registry.mjs +46 -0
- package/packages/installer/lib/commands/doctor.mjs +7 -16
- package/packages/installer/lib/commands/install.mjs +59 -4
- package/packages/installer/lib/core/bundle.mjs +69 -92
- package/packages/installer/lib/core/config.mjs +1 -1
- package/packages/installer/lib/core/lockfile.mjs +1 -1
- package/packages/installer/lib/core/manifest.mjs +48 -54
- package/packages/installer/lib/core/validate-install.mjs +12 -19
- package/packages/installer/package.json +1 -1
- package/shared/tooling/qa-tool.mjs +125 -0
- package/skills/qa-api/SKILL.md +5 -5
- package/skills/qa-api/references/deterministic-tooling.md +34 -30
- package/skills/qa-api/references/evidence-and-reporting.md +29 -4
- package/skills/qa-api/scripts/qa-tool.mjs +126 -0
- package/skills/qa-audit/SKILL.md +5 -5
- package/skills/qa-audit/references/deterministic-tooling.md +34 -30
- package/skills/qa-audit/references/evidence-and-reporting.md +29 -4
- package/skills/qa-audit/scripts/qa-tool.mjs +126 -0
- package/skills/qa-debug/SKILL.md +6 -6
- package/skills/qa-debug/references/deterministic-tooling.md +34 -30
- package/skills/qa-debug/references/diagnostic-engine.md +3 -3
- package/skills/qa-debug/references/evidence-and-reporting.md +29 -4
- package/skills/qa-debug/scripts/qa-tool.mjs +126 -0
- package/skills/qa-explore/SKILL.md +22 -5
- package/skills/qa-explore/contracts/explore-result.schema.json +26 -2
- package/skills/qa-explore/references/deterministic-tooling.md +132 -0
- package/skills/qa-explore/references/evidence-and-reporting.md +29 -4
- package/skills/qa-explore/references/report-pipeline.md +89 -8
- package/skills/qa-explore/scripts/qa-tool.mjs +126 -0
- package/skills/qa-fix/SKILL.md +4 -4
- package/skills/qa-fix/references/deterministic-tooling.md +34 -30
- package/skills/qa-fix/references/diagnostic-engine.md +3 -3
- package/skills/qa-fix/references/evidence-and-reporting.md +29 -4
- package/skills/qa-fix/scripts/qa-tool.mjs +126 -0
- package/skills/qa-flaky/SKILL.md +4 -4
- package/skills/qa-flaky/references/deterministic-tooling.md +34 -30
- package/skills/qa-flaky/references/evidence-and-reporting.md +29 -4
- package/skills/qa-flaky/scripts/qa-tool.mjs +126 -0
- package/skills/qa-generate/references/evidence-and-reporting.md +29 -4
- package/skills/qa-init/SKILL.md +4 -4
- package/skills/qa-init/references/deterministic-tooling.md +34 -30
- package/skills/qa-init/references/evidence-and-reporting.md +29 -4
- package/skills/qa-init/scripts/qa-tool.mjs +126 -0
- package/skills/qa-report/SKILL.md +8 -7
- package/skills/qa-report/references/deterministic-tooling.md +34 -30
- package/skills/qa-report/references/diagnostic-engine.md +3 -3
- package/skills/qa-report/references/evidence-and-reporting.md +29 -4
- package/skills/qa-report/scripts/qa-tool.mjs +126 -0
- package/skills/qa-review/references/evidence-and-reporting.md +29 -4
- package/skills/qa-run/SKILL.md +6 -6
- package/skills/qa-run/references/deterministic-tooling.md +34 -30
- package/skills/qa-run/references/evidence-and-reporting.md +29 -4
- package/skills/qa-run/scripts/qa-tool.mjs +126 -0
- package/shared/analysis/lib/qa_analysis/__init__.py +0 -11
- package/shared/analysis/lib/qa_analysis/branding.py +0 -175
- package/shared/analysis/lib/qa_analysis/cli.py +0 -129
- package/shared/analysis/lib/qa_analysis/context.py +0 -233
- package/shared/analysis/lib/qa_analysis/contracts.py +0 -158
- package/shared/analysis/lib/qa_analysis/diff_guard.py +0 -327
- package/shared/analysis/lib/qa_analysis/discovery.py +0 -113
- package/shared/analysis/lib/qa_analysis/evidence.py +0 -128
- package/shared/analysis/lib/qa_analysis/har.py +0 -58
- package/shared/analysis/lib/qa_analysis/junit.py +0 -80
- package/shared/analysis/lib/qa_analysis/redaction.py +0 -99
- package/shared/analysis/lib/qa_analysis/taxonomy.py +0 -98
- package/shared/diagnostics/lib/qa_diagnostics/__init__.py +0 -13
- package/shared/diagnostics/lib/qa_diagnostics/cli.py +0 -124
- package/shared/diagnostics/lib/qa_diagnostics/engine.py +0 -143
- package/shared/diagnostics/lib/qa_diagnostics/internal_contracts.py +0 -75
- package/shared/diagnostics/lib/qa_diagnostics/prioritization.py +0 -101
- package/shared/diagnostics/lib/qa_diagnostics/repair.py +0 -72
- package/shared/diagnostics/lib/qa_diagnostics/root_cause.py +0 -89
- package/shared/diagnostics/lib/qa_diagnostics/timeline.py +0 -71
- package/shared/frameworks/cypress/lib/cypress_analysis.py +0 -27
- package/shared/frameworks/playwright/lib/playwright_analysis.py +0 -167
- package/shared/frameworks/selenium/lib/selenium_analysis.py +0 -28
- package/shared/frameworks/webdriverio/lib/webdriverio_analysis.py +0 -24
- package/shared/tooling/qa_tool.py +0 -127
- /package/{shared/analysis/lib/qa_analysis → packages/engine/lib/analysis}/branding.json +0 -0
- /package/{shared → packages/engine/lib}/analysis/schemas/context.schema.json +0 -0
- /package/{shared → packages/engine/lib}/diagnostics/schemas/internal/analysis-result.schema.json +0 -0
- /package/{shared → packages/engine/lib}/diagnostics/schemas/internal/diagnosis.schema.json +0 -0
- /package/{shared → packages/engine/lib}/diagnostics/schemas/internal/execution-result-min.schema.json +0 -0
package/COMPATIBILITY.md
CHANGED
|
@@ -6,7 +6,15 @@ This document records which AI coding agents the pack targets, how each one disc
|
|
|
6
6
|
|
|
7
7
|
## Release compatibility
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
| Pack version | Released | Discovery paths verified against agent docs | Live agent runs |
|
|
10
|
+
| --- | --- | --- | --- |
|
|
11
|
+
| 0.9.0, 0.9.1 | 2026-07-28 | Not systematically re-read for the release | Claude Code, Cursor (manual, by the maintainer) |
|
|
12
|
+
| 0.9.2 | 2026-07-28 | Yes — every host's own documentation, re-read on 2026-07-28 (sources in the matrix below) | **Do not use.** The tarball omitted the engine; every command failed on a missing module |
|
|
13
|
+
| 0.9.3 | 2026-07-28 | Yes, as 0.9.2 | Claude Code, Cursor (manual, by the maintainer) |
|
|
14
|
+
|
|
15
|
+
"Verified" in the third column means the discovery paths in the matrix below were read off each host's own documentation on that date and are asserted against the installer by `packages/installer/test/hosts.test.mjs`, which fails if the installer writes to a path that host does not document reading. It does **not** mean the pack was executed inside every host: that is the Tier 1 bar, and only Claude Code and Cursor have had a real run.
|
|
16
|
+
|
|
17
|
+
Documentation is re-read at each release. A test can pin the installer to a recorded claim; it cannot notice that a vendor moved a directory, so that check is a release step performed by a person.
|
|
10
18
|
|
|
11
19
|
## The standard this pack targets
|
|
12
20
|
|
|
@@ -14,23 +22,26 @@ Skills are authored against the open [Agent Skills specification](https://agents
|
|
|
14
22
|
|
|
15
23
|
## Target agent matrix
|
|
16
24
|
|
|
17
|
-
|
|
25
|
+
Each row's discovery paths were read off that host's own documentation on **2026-07-28** and are recorded in the installer's agent registry, where a test asserts the installer writes to one of them. The **bold** path is the one `qa install` targets.
|
|
26
|
+
|
|
27
|
+
| Agent | Paths this host reads (project) | Pack installs to | How you reach a skill | Source | Planned tier |
|
|
28
|
+
| --- | --- | --- | --- | --- | --- |
|
|
29
|
+
| Claude Code | `.claude/skills/` | **`.claude/skills/`** | `/qa-explore`, or describe the task | [docs](https://code.claude.com/docs/en/skills) | Tier 1 |
|
|
30
|
+
| OpenAI Codex CLI | `.agents/skills/` — at the working directory, its parent, and the repo root. There is **no** `.codex/skills/` | **`.agents/skills/`** | `$qa-explore`, or `/skills` to browse | [docs](https://developers.openai.com/codex/skills) | Tier 1 |
|
|
31
|
+
| OpenCode | `.agents/skills/`, `.opencode/skills/`, `.claude/skills/` | **`.agents/skills/`** | `/qa-explore` (generated command), or the agent's own `skill` tool | [docs](https://opencode.ai/docs/skills/) | Tier 1 |
|
|
32
|
+
| Cursor | `.agents/skills/`, `.cursor/skills/`, plus Claude and Codex directories | **`.agents/skills/`** | `/` in Agent chat, then pick the skill | [docs](https://cursor.com/docs/skills) | Tier 2 |
|
|
33
|
+
| Antigravity | `.agents/skills/` (default), `.agent/skills/` (legacy) | **`.agents/skills/`** | describe the task — skills auto-activate | [docs](https://antigravity.google/docs/skills) | Tier 2 |
|
|
34
|
+
| GitHub Copilot | `.agents/skills/`, `.github/skills/` | **`.agents/skills/`** | `/qa-explore` in Copilot Chat (generated prompt file) | [docs](https://docs.github.com/en/copilot) | Tier 2 |
|
|
35
|
+
| Gemini CLI | `.agents/skills/`, `.gemini/skills/` | **`.agents/skills/`** | `/qa-explore` (generated command) | [docs](https://google-gemini.github.io/gemini-cli/) | Tier 2 |
|
|
36
|
+
| Kimi (Agent Skills copy) / other spec-compliant hosts | `.agents/skills/` | **`.agents/skills/`** | product's own surface | [spec](https://agentskills.io/specification) | Tier 2 |
|
|
18
37
|
|
|
19
|
-
|
|
20
|
-
| --- | --- | --- | --- | --- |
|
|
21
|
-
| Claude Code | Yes (format originator) | `.claude/skills/` (project), plugins | `/skill-name`, auto-activation | Tier 1 |
|
|
22
|
-
| OpenAI Codex CLI | Yes | `.agents/skills/` | `$skill-name` mention, `/skills` menu, auto-activation | Tier 1 |
|
|
23
|
-
| OpenCode | Yes | `.agents/skills/`, `.opencode/skills/` | native `skill` tool (auto); slash via generated commands | Tier 1 |
|
|
24
|
-
| Cursor | Yes (2.4+) | `.agents/skills/`, `.cursor/skills/` | `/skill-name`, auto-activation | Tier 2 |
|
|
25
|
-
| GitHub Copilot | Yes (VS Code, JetBrains, CLI, cloud) | `.agents/skills/`, `.github/skills/` | `/skill-name` in VS Code; auto-activation elsewhere | Tier 2 |
|
|
26
|
-
| Gemini CLI | Yes | `.agents/skills/`, `.gemini/skills/` | auto-activation; slash via generated commands | Tier 2 |
|
|
27
|
-
| Antigravity | Yes | `.agents/skills/` | auto-activation; slash via workflows (*path unverified*) | Tier 2 |
|
|
28
|
-
| Kimi / other Agent Skills hosts | Yes (copy) | `.agents/skills/` (or product-specific path) | auto-activation / product slash | Tier 2 |
|
|
38
|
+
Three facts follow from that table and shape the design:
|
|
29
39
|
|
|
30
|
-
|
|
40
|
+
1. **One path serves seven of the eight hosts.** Everything except Claude Code reads `.agents/skills/`, so `qa install` writes the same canonical skill set there — copies, never conversions. Claude Code gets `.claude/skills/` as well, and a project where only Claude Code is detected still receives the shared path, so opening the same repository in Cursor or Codex tomorrow needs no reinstall.
|
|
41
|
+
2. **Auto-activation is the only channel every host shares.** Codex takes `$qa-explore`, Cursor matches on `/`, OpenCode's agent calls a `skill` tool. `qa install` prints the convention for the host it detected, because a user who types the wrong one has no way to tell a wrong keystroke from a failed install.
|
|
42
|
+
3. **Slash ergonomics on Gemini CLI, OpenCode, and Copilot need a thin generated wrapper.** Those wrappers are rendered from skill frontmatter alone (ADR-0002), capped at 15 lines, and carry no knowledge. Antigravity's workflow directory (`.agents/workflows/`) is *not* documented by Google, so those wrappers are generated only on explicit `--agent antigravity`; skills themselves work there without them.
|
|
31
43
|
|
|
32
|
-
|
|
33
|
-
2. Description-driven auto-activation is the only invocation channel available on all primary agents. Slash-command ergonomics on Gemini CLI, OpenCode, and Antigravity require thin generated wrappers from the installer (`qa install`).
|
|
44
|
+
**Antigravity detection is deliberately conservative.** Its skills live at `.agents/skills/`, which is also the path this installer creates for every host — so detecting Antigravity from `.agents/` would mean detecting it because the pack had run once before. An earlier release did exactly that and reported a host that was never there. Skills work in Antigravity either way; only the optional workflow wrappers need `--agent antigravity`.
|
|
34
45
|
|
|
35
46
|
## Support tiers
|
|
36
47
|
|
|
@@ -45,8 +56,14 @@ The tier column in the matrix above is the **planned** tier — the level each a
|
|
|
45
56
|
|
|
46
57
|
| Requirement | Status | Used for |
|
|
47
58
|
| --- | --- | --- |
|
|
48
|
-
|
|
|
49
|
-
|
|
59
|
+
| Node.js 18.17+ | The only requirement | Everything: `npx qa-engineer` and the CLI, and the deterministic engine the skills run (`packages/engine/`) |
|
|
60
|
+
|
|
61
|
+
**One runtime, no dependencies.** Until 0.9.2 the engine was Python, which meant a
|
|
62
|
+
second runtime users had to install for tooling they had installed with Node — and
|
|
63
|
+
when it was missing, skills fell back to model guesswork and said nothing.
|
|
64
|
+
[ADR-0012](docs/architecture/ADR-0012-node-engine.md) records why that changed and
|
|
65
|
+
how the migration was verified. The engine still takes no third-party dependencies:
|
|
66
|
+
the XML and ZIP readers it needs are written out rather than depended on.
|
|
50
67
|
|
|
51
68
|
## Operating systems
|
|
52
69
|
|
|
@@ -56,15 +73,22 @@ The tier column in the matrix above is the **planned** tier — the level each a
|
|
|
56
73
|
| macOS | Expected to work; not covered by CI |
|
|
57
74
|
| Windows | Expected to work; **not yet verified end to end** |
|
|
58
75
|
|
|
59
|
-
The installer uses Node's platform-independent path handling, and the skills
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
76
|
+
The installer uses Node's platform-independent path handling, and the skills invoke
|
|
77
|
+
the engine through a committed launcher (`scripts/qa-tool.mjs`) that needs no shell
|
|
78
|
+
features — the command shape is identical in bash, zsh, PowerShell, and cmd.exe,
|
|
79
|
+
with no platform difference at all.
|
|
80
|
+
|
|
81
|
+
The Windows row said "expected" for a specific reason that no longer applies: the
|
|
82
|
+
engine was Python, and `python3` is not on PATH on Windows by default, so every
|
|
83
|
+
deterministic call there failed and each skill quietly fell back to guesswork. The
|
|
84
|
+
engine is now the same Node that ran the install. The row still says "expected"
|
|
85
|
+
rather than "supported" because nobody has run the pack end to end on Windows —
|
|
86
|
+
that is an unverified claim, not a known gap.
|
|
87
|
+
|
|
88
|
+
Requirements are declared per skill via the specification's `compatibility`
|
|
89
|
+
frontmatter field, and the pack degrades gracefully: skills describe a manual
|
|
90
|
+
fallback whenever a runtime or optional integration (such as an MCP server) is
|
|
91
|
+
unavailable.
|
|
68
92
|
|
|
69
93
|
## Reporting compatibility problems
|
|
70
94
|
|
package/README.md
CHANGED
|
@@ -2,14 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
> Teach your AI coding assistant to work like a senior QA engineer — and stop it from telling you tests pass when they don't.
|
|
4
4
|
|
|
5
|
-
[](CHANGELOG.md)
|
|
6
6
|
[](docs/release/v0.9-release-checklist.md)
|
|
7
7
|
[](LICENSE)
|
|
8
|
-
[](#step-1--check-your-
|
|
9
|
-
[](#step-1--check-your-prerequisites)
|
|
8
|
+
[](#step-1--check-your-prerequisite)
|
|
10
9
|
[](https://agentskills.io)
|
|
11
10
|
[](https://github.com/abisheik88/qa-engineer/actions/workflows/ci.yml)
|
|
12
|
-
[](#how-this-is-verified)
|
|
13
12
|
|
|
14
13
|
**This page is everything you need.** Install, first run, every command, and what to do when something breaks — no other document required.
|
|
15
14
|
|
|
@@ -19,7 +18,7 @@
|
|
|
19
18
|
|
|
20
19
|
1. [What this is, in plain language](#what-this-is-in-plain-language)
|
|
21
20
|
2. [Is this for me?](#is-this-for-me)
|
|
22
|
-
3. [Step 1 — Check your prerequisites](#step-1--check-your-
|
|
21
|
+
3. [Step 1 — Check your prerequisites](#step-1--check-your-prerequisite)
|
|
23
22
|
4. [Step 2 — Install it](#step-2--install-it)
|
|
24
23
|
5. [Step 3 — Confirm it worked](#step-3--confirm-it-worked)
|
|
25
24
|
6. [Step 4 — Your first real task](#step-4--your-first-real-task)
|
|
@@ -67,21 +66,26 @@ You do not need to learn a new language, framework, or config file. You install
|
|
|
67
66
|
|
|
68
67
|
**Works best with Playwright** today. Selenium, Cypress, and WebdriverIO are detected and their results are understood, but running and generating tests live is currently Playwright-only. See [framework support](#framework-support).
|
|
69
68
|
|
|
70
|
-
## Step 1 — Check your
|
|
69
|
+
## Step 1 — Check your prerequisite
|
|
71
70
|
|
|
72
|
-
You need
|
|
71
|
+
You need one thing. Run this to check — copy and paste it exactly:
|
|
73
72
|
|
|
74
73
|
```bash
|
|
75
74
|
node --version
|
|
76
|
-
python3 --version
|
|
77
75
|
```
|
|
78
76
|
|
|
79
|
-
You want **Node 18.18 or newer
|
|
77
|
+
You want **Node 18.18 or newer**. If it prints a high enough version, skip ahead to
|
|
78
|
+
[Step 2](#step-2--install-it).
|
|
79
|
+
|
|
80
|
+
That is the whole list. There is nothing to `pip install`, no second language, and no
|
|
81
|
+
dependencies: the tools that read your test results are dependency-free JavaScript
|
|
82
|
+
that runs on the same Node you just checked.
|
|
80
83
|
|
|
81
84
|
<details>
|
|
82
85
|
<summary><b>"command not found" — how to install Node.js</b></summary>
|
|
83
86
|
|
|
84
|
-
Node.js gives you the `npx` command used to install this pack
|
|
87
|
+
Node.js gives you the `npx` command used to install this pack, and it runs the
|
|
88
|
+
analysis tools afterwards.
|
|
85
89
|
|
|
86
90
|
- **macOS** — `brew install node` (needs [Homebrew](https://brew.sh)), or download from [nodejs.org](https://nodejs.org).
|
|
87
91
|
- **Windows** — download the LTS installer from [nodejs.org](https://nodejs.org) and run it.
|
|
@@ -91,19 +95,6 @@ Then re-run `node --version`. Take the **LTS** version if offered a choice.
|
|
|
91
95
|
|
|
92
96
|
</details>
|
|
93
97
|
|
|
94
|
-
<details>
|
|
95
|
-
<summary><b>"command not found" — how to install Python</b></summary>
|
|
96
|
-
|
|
97
|
-
Python runs the analysis tools that read your test results. It uses only Python's built-in library — there is nothing extra to install, no `pip install` step.
|
|
98
|
-
|
|
99
|
-
- **macOS** — `brew install python3`, or download from [python.org](https://python.org).
|
|
100
|
-
- **Windows** — install from [python.org](https://python.org) and **tick "Add Python to PATH"** during setup. Then use `python --version` if `python3` is not found.
|
|
101
|
-
- **Linux** — `sudo apt install python3` (Debian/Ubuntu).
|
|
102
|
-
|
|
103
|
-
**Can you skip Python?** Yes, but you shouldn't. Without it the skills fall back to the AI reading files by eye, and they will mark their results *degraded* to tell you so. The whole point of this project is that the numbers come from tools, not guesses.
|
|
104
|
-
|
|
105
|
-
</details>
|
|
106
|
-
|
|
107
98
|
You also need **an AI coding assistant** open on your project — Claude Code, Cursor, GitHub Copilot, Codex CLI, OpenCode, Gemini CLI, Antigravity, or Kimi.
|
|
108
99
|
|
|
109
100
|
## Step 2 — Install it
|
|
@@ -165,7 +156,7 @@ Real output from a healthy install:
|
|
|
165
156
|
✓ [PASS] skills: 13 skill(s) installed
|
|
166
157
|
✓ [PASS] contracts: 12 contract schema(s) present
|
|
167
158
|
✓ [PASS] engine: deterministic engine bundled under .agents/skills/qa-init/scripts/lib
|
|
168
|
-
✓ [PASS]
|
|
159
|
+
✓ [PASS] engine-runs: bundled engine runs cleanly
|
|
169
160
|
✓ [PASS] node: Node v24.18.0
|
|
170
161
|
✓ self-test PASSED
|
|
171
162
|
```
|
|
@@ -256,9 +247,27 @@ qa-artifacts/
|
|
|
256
247
|
|
|
257
248
|
Most teams **do** commit `.agents/skills/` and `qa-lock.json`, so everyone on the team gets the same skills.
|
|
258
249
|
|
|
259
|
-
##
|
|
250
|
+
## How you type a command in your assistant
|
|
251
|
+
|
|
252
|
+
Type these in your AI assistant's **chat**, not the terminal. The keystroke differs
|
|
253
|
+
by assistant, and typing the wrong one looks exactly like a failed install — so
|
|
254
|
+
`qa install` prints the right one for whatever it detected. For reference:
|
|
260
255
|
|
|
261
|
-
|
|
256
|
+
| Assistant | How to reach a skill |
|
|
257
|
+
| --- | --- |
|
|
258
|
+
| Claude Code | `/qa-explore`, or just describe the task |
|
|
259
|
+
| Cursor | type `/` in Agent chat, then pick the skill from the list |
|
|
260
|
+
| OpenAI Codex CLI | `$qa-explore` — or `/skills` to browse them |
|
|
261
|
+
| OpenCode | `/qa-explore`, or describe the task and the agent loads the skill itself |
|
|
262
|
+
| Antigravity | describe the task; skills activate on their own |
|
|
263
|
+
| GitHub Copilot / Gemini CLI | `/qa-explore` |
|
|
264
|
+
|
|
265
|
+
Every one of them also activates a skill on its own when your request matches — you
|
|
266
|
+
never *have* to remember a command. "Find bugs on my login page at localhost:3000"
|
|
267
|
+
reaches `/qa-explore` in all of them. Full details and the source for each path:
|
|
268
|
+
[COMPATIBILITY.md](COMPATIBILITY.md).
|
|
269
|
+
|
|
270
|
+
## All twelve commands
|
|
262
271
|
|
|
263
272
|
| Command | What it does | Changes your files? |
|
|
264
273
|
| --- | --- | --- |
|
|
@@ -329,10 +338,9 @@ npx qa-engineer install --yes --force --project .
|
|
|
329
338
|
|
|
330
339
|
### A skill says the engine is missing, or results are "degraded"
|
|
331
340
|
|
|
332
|
-
The
|
|
341
|
+
The deterministic engine isn't reachable. Fix in this order:
|
|
333
342
|
|
|
334
343
|
```bash
|
|
335
|
-
python3 --version # is Python installed at all?
|
|
336
344
|
npx qa-engineer repair --project . # reinstall the bundled tools
|
|
337
345
|
npx qa-engineer doctor --project . # should now say "bundled engine runs cleanly"
|
|
338
346
|
```
|
|
@@ -391,7 +399,7 @@ The core idea in one line: **tools produce the facts, the AI explains them.**
|
|
|
391
399
|
│ raw output, exit code
|
|
392
400
|
▼
|
|
393
401
|
┌───────────────────────────────────┐
|
|
394
|
-
│ Bundled
|
|
402
|
+
│ Bundled Node engine │ count the results, classify the failure,
|
|
395
403
|
│ (installed inside the skill) │ redact secrets — no guessing
|
|
396
404
|
└───────────────────────────────────┘
|
|
397
405
|
│ facts
|
|
@@ -441,11 +449,11 @@ Everything below is reproducible from a clone with the command beside it.
|
|
|
441
449
|
|
|
442
450
|
| Evidence | Command |
|
|
443
451
|
| --- | --- |
|
|
444
|
-
|
|
|
445
|
-
|
|
|
452
|
+
| 82 engine tests: analysis, diagnostics, frameworks, seams | `node --test packages/engine/test/*.test.mjs` |
|
|
453
|
+
| The recorded corpus, proven against a second implementation | `node --test packages/engine/test/corpus.test.mjs` |
|
|
446
454
|
| 50 installer tests — including security and repeated-use stress | `npm test` |
|
|
447
455
|
| 21 evaluation cases, including deliberately dishonest outputs the scorer must reject | `npm run validate:evals` |
|
|
448
|
-
| 4 real AI-produced results, scored | `
|
|
456
|
+
| 4 real AI-produced results, scored | `node tests/evals/run-live.mjs --captures claude-opus-5` |
|
|
449
457
|
| 17 repository checks — including "documentation matches implementation" | `npm run validate:skills` … |
|
|
450
458
|
|
|
451
459
|
## Going deeper
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "qa-engineer",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.10.0",
|
|
4
4
|
"description": "A vendor-neutral Agent Skills pack that teaches AI coding agents to work like senior QA automation engineers.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -29,42 +29,34 @@
|
|
|
29
29
|
"packages/installer/schemas",
|
|
30
30
|
"packages/installer/package.json",
|
|
31
31
|
"packages/installer/README.md",
|
|
32
|
+
"packages/engine/lib",
|
|
33
|
+
"packages/engine/bin",
|
|
34
|
+
"packages/engine/package.json",
|
|
32
35
|
"skills",
|
|
33
|
-
"shared/analysis/lib/qa_analysis",
|
|
34
|
-
"shared/analysis/schemas",
|
|
35
|
-
"shared/diagnostics/lib/qa_diagnostics",
|
|
36
|
-
"shared/diagnostics/schemas",
|
|
37
|
-
"shared/tooling/qa_tool.py",
|
|
38
36
|
"shared/frameworks/registry.json",
|
|
39
37
|
"shared/frameworks/registry.schema.json",
|
|
40
38
|
"shared/frameworks/registry.mjs",
|
|
41
|
-
"shared/frameworks/playwright/lib/playwright_analysis.py",
|
|
42
|
-
"shared/frameworks/selenium/lib/selenium_analysis.py",
|
|
43
|
-
"shared/frameworks/cypress/lib/cypress_analysis.py",
|
|
44
|
-
"shared/frameworks/webdriverio/lib/webdriverio_analysis.py",
|
|
45
39
|
"COMPATIBILITY.md",
|
|
46
|
-
"!**/
|
|
47
|
-
"
|
|
48
|
-
"
|
|
40
|
+
"!**/tests",
|
|
41
|
+
"shared/tooling/qa-tool.mjs",
|
|
42
|
+
"!packages/engine/test"
|
|
49
43
|
],
|
|
50
44
|
"scripts": {
|
|
45
|
+
"eval:live": "node tests/evals/run-live.mjs --baseline tests/evals/baselines/reference.json",
|
|
46
|
+
"prepublishOnly": "npm run validate:release && npm run validate:doc-claims && npm run validate:docs-commands && npm test && npm run validate:evals",
|
|
51
47
|
"qa": "node packages/installer/bin/qa.mjs",
|
|
52
|
-
"eval:live": "python3 tests/evals/run_live.py --baseline tests/evals/baselines/reference.json",
|
|
53
|
-
"prepublishOnly": "npm run validate:release && npm run validate:doc-claims && npm run validate:docs-commands && npm test && npm run validate:python && npm run validate:evals",
|
|
54
48
|
"release:checksums": "node scripts/release/release-notes.mjs --checksums",
|
|
55
49
|
"release:notes": "node scripts/release/release-notes.mjs",
|
|
56
|
-
"test": "node --test packages/installer/test/*.test.mjs",
|
|
50
|
+
"test": "node --test packages/installer/test/*.test.mjs packages/engine/test/*.test.mjs",
|
|
57
51
|
"validate:architecture": "node scripts/check-architecture-fitness.mjs",
|
|
58
52
|
"validate:branding": "node scripts/check-branding.mjs",
|
|
59
|
-
"validate:bundle": "python3 scripts/bundle_python.py --check",
|
|
60
|
-
"validate:context": "cd shared/analysis/lib && python3 -m qa_analysis.cli context --path tests/fixtures/valid-context.md",
|
|
61
53
|
"validate:doc-claims": "node scripts/check-doc-claims.mjs",
|
|
62
54
|
"validate:docs-commands": "node scripts/check-docs-commands.mjs",
|
|
63
|
-
"validate:
|
|
55
|
+
"validate:engine": "node --test packages/engine/test/*.test.mjs",
|
|
56
|
+
"validate:evals": "node tests/evals/run-evals.mjs",
|
|
64
57
|
"validate:keywords": "node scripts/check-keywords.mjs",
|
|
65
58
|
"validate:knowledge": "node scripts/check-knowledge.mjs",
|
|
66
59
|
"validate:matrix": "node scripts/check-capability-matrix.mjs",
|
|
67
|
-
"validate:python": "python3 shared/analysis/lib/run_tests.py",
|
|
68
60
|
"validate:registry": "node scripts/check-framework-registry.mjs",
|
|
69
61
|
"validate:release": "node scripts/release/validate-release.mjs",
|
|
70
62
|
"validate:release-notes": "node scripts/release/release-notes.mjs --check",
|