@yasserkhanorg/impact-gate 2.1.6 → 2.1.7
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/README.md +55 -13
- package/dist/agent/config.d.ts.map +1 -1
- package/dist/agent/config.js +3 -0
- package/dist/cli/parse_args.d.ts.map +1 -1
- package/dist/cli/parse_args.js +3 -2
- package/dist/cli/usage.js +2 -2
- package/dist/esm/agent/config.js +3 -0
- package/dist/esm/cli/parse_args.js +3 -2
- package/dist/esm/cli/usage.js +2 -2
- package/dist/esm/qa-agent/cli.js +4 -4
- package/dist/qa-agent/cli.js +4 -4
- package/package.json +6 -6
- package/skills/qa/SKILL.md +14 -7
package/README.md
CHANGED
|
@@ -1,11 +1,19 @@
|
|
|
1
|
-
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="./docs-site/public/impact-gate-readme-banner.png" alt="Impact Gate" width="720" />
|
|
3
|
+
</p>
|
|
2
4
|
|
|
3
|
-
|
|
5
|
+
# Impact Gate
|
|
6
|
+
|
|
7
|
+
`@yasserkhanorg/impact-gate`
|
|
8
|
+
|
|
9
|
+
Diff-aware E2E impact analysis, release-ready test planning, coverage gating, and hallucination-resistant AI generation for Playwright/Cypress teams. Optional AI features can suggest, generate, and heal tests once your project has a route-families.json manifest.
|
|
4
10
|
|
|
5
11
|
[](https://www.npmjs.com/package/@yasserkhanorg/impact-gate)
|
|
6
12
|
[](LICENSE)
|
|
7
13
|
[](https://github.com/yasserfaraazkhan/impact-gate)
|
|
8
14
|
|
|
15
|
+
[Docs](https://yasserfaraazkhan.github.io/impact-gate/)
|
|
16
|
+
|
|
9
17
|
## What It Does
|
|
10
18
|
|
|
11
19
|
`impact-gate` is built first for one painful CI job: given a git diff, tell us which E2E surface changed, whether the current suite already covers it, and what still needs testing before we merge or ship.
|
|
@@ -25,6 +33,9 @@ Product priorities:
|
|
|
25
33
|
|
|
26
34
|
The clearest path today is a Playwright or Cypress repository with a maintained `route-families.json` manifest. That is the path this package is optimized to make unusually clear and useful.
|
|
27
35
|
|
|
36
|
+
AI-specific note:
|
|
37
|
+
- Generated tests are grounded against the discovered local API surface and verified before they are trusted. The package is designed to reduce hallucinated page-object methods, fabricated helpers, and low-evidence test generation.
|
|
38
|
+
|
|
28
39
|
Transition note:
|
|
29
40
|
- The package and primary CLI are being renamed to `impact-gate`.
|
|
30
41
|
- Legacy CLI aliases (`e2e-ai-agents`, `e2e-qa-agent`, `e2e-agents-mcp`) still work during migration.
|
|
@@ -45,7 +56,7 @@ Transition note:
|
|
|
45
56
|
- The clearest, most stable workflow is still **Playwright/Cypress impact analysis and gating**.
|
|
46
57
|
- AI generation and healing work best **after** the project has a good `route-families.json` manifest.
|
|
47
58
|
- Advanced features are improving, but they are **not** the best entry point if you only want dependable CI coverage decisions.
|
|
48
|
-
- The
|
|
59
|
+
- The strict profile is the most opinionated path in the codebase. Most teams should start with the core CI workflow above and only opt into stricter heuristics once their mappings are mature.
|
|
49
60
|
|
|
50
61
|
## Free Tier
|
|
51
62
|
|
|
@@ -113,6 +124,18 @@ Notes:
|
|
|
113
124
|
- `gate` expects a threshold in the range `0-100` and exits `1` when the threshold is missed.
|
|
114
125
|
- Add the Optional AI Workflow only after your `route-families.json` manifest is useful enough to trust.
|
|
115
126
|
|
|
127
|
+
## Dogfood Proof
|
|
128
|
+
|
|
129
|
+
The current repo includes a full dogfood run at [dogfood/2026-03-28/README.md](dogfood/2026-03-28/README.md).
|
|
130
|
+
|
|
131
|
+
- [Playwright example](examples/playwright-react/README.md): synthetic auth change -> `impact`, `plan`, and `gate` all behaved as expected
|
|
132
|
+
- [Cypress example](examples/cypress-nextjs/README.md): synthetic dashboard change -> parity proof for the same deterministic flow
|
|
133
|
+
- [Self dogfood](dogfood/2026-03-28/README.md#phase-2-impact-gate-on-itself): heuristic fallback grouped changes truthfully, but still read too optimistically for a package-style repo
|
|
134
|
+
|
|
135
|
+
Takeaway:
|
|
136
|
+
- the strongest product path is still an app-shaped Playwright/Cypress repo with a maintained manifest
|
|
137
|
+
- zero-config / heuristic fallback is useful for orientation, but it should not be treated as equally trustworthy for release decisions
|
|
138
|
+
|
|
116
139
|
## Setup and Calibration
|
|
117
140
|
|
|
118
141
|
These commands help the core CI workflow become accurate and project-aware.
|
|
@@ -154,6 +177,20 @@ npx impact-gate finalize-generated-tests --path /path/to/project --create-pr
|
|
|
154
177
|
|
|
155
178
|
`plan` and `suggest` are aliases. `analyze` is the convenience wrapper when you want the full path in one invocation.
|
|
156
179
|
|
|
180
|
+
### How Hallucinations Are Tackled
|
|
181
|
+
|
|
182
|
+
The AI path is intentionally constrained instead of trusting raw LLM output.
|
|
183
|
+
|
|
184
|
+
- **Deterministic first**: impact analysis, coverage planning, and release-diff planning work without an LLM. The AI layer comes after the diff and coverage evidence are already established.
|
|
185
|
+
- **Local API surface grounding**: generation prompts are built from discovered page objects, helpers, method signatures, and inherited methods from your own repository.
|
|
186
|
+
- **Prompt-level constraints**: the generator is explicitly told to use only known methods and to fall back to raw Playwright selectors when a method is not available.
|
|
187
|
+
- **Prompt sanitization**: flow names, evidence, and user-action strings are sanitized before being injected into prompts.
|
|
188
|
+
- **Hallucination detection gate**: generated code is scanned for method calls that do not exist in the discovered API surface. Suspicious specs are blocked by default instead of being written into the main specs directory.
|
|
189
|
+
- **Needs-review quarantine**: blocked specs are written to `generated-needs-review/` so teams can inspect them manually rather than accidentally trusting them in CI.
|
|
190
|
+
- **Verification after generation**: written specs go through compile checks and smoke-run verification. Failing specs are moved out of the trusted path.
|
|
191
|
+
|
|
192
|
+
This is why the strongest product story is still: deterministic diff -> test plan -> optional AI assistance with guardrails.
|
|
193
|
+
|
|
157
194
|
## Advanced / Experimental
|
|
158
195
|
|
|
159
196
|
These features are real, but they are not the clearest place to start if your goal is simple CI coverage decisions.
|
|
@@ -329,7 +366,7 @@ Create `impact-gate.config.json` in your project (auto-discovered):
|
|
|
329
366
|
```json
|
|
330
367
|
{
|
|
331
368
|
"path": ".",
|
|
332
|
-
"profile": "
|
|
369
|
+
"profile": "strict",
|
|
333
370
|
"testsRoot": ".",
|
|
334
371
|
"mode": "impact",
|
|
335
372
|
"framework": "auto",
|
|
@@ -359,14 +396,14 @@ Profiles are not the same thing as frameworks. They control analysis strictness
|
|
|
359
396
|
| Profile | Description |
|
|
360
397
|
|---------|-------------|
|
|
361
398
|
| `default` | Standard analysis behavior for most repositories |
|
|
362
|
-
| `
|
|
399
|
+
| `strict` | Stricter handling of heuristic-only mappings and more opinionated analysis defaults |
|
|
363
400
|
|
|
364
401
|
Framework detection is separate. The CLI can auto-detect Playwright, Cypress, pytest, supertest, and Selenium usage from the project structure and dependencies.
|
|
365
402
|
|
|
366
403
|
### Key options
|
|
367
404
|
|
|
368
405
|
- **`testsRoot`** — path to tests when they live outside the app root
|
|
369
|
-
- **`profile`** — `default` or `
|
|
406
|
+
- **`profile`** — `default` or `strict`
|
|
370
407
|
- **`impact.dependencyGraph`** — static reverse dependency graph for transitive impact
|
|
371
408
|
- **`impact.traceability`** — file-to-test mapping from CI execution data
|
|
372
409
|
- **`impact.aiFlow`** — LLM-powered flow mapping through the configured provider
|
|
@@ -492,22 +529,27 @@ All written under `<testsRoot>/.e2e-ai-agents/`.
|
|
|
492
529
|
|
|
493
530
|
## Advanced / Experimental: Autonomous QA Agent (`impact-gate-qa`)
|
|
494
531
|
|
|
495
|
-
An autonomous QA engineer that
|
|
532
|
+
An autonomous QA engineer that can take a diff or a feature prompt, open a real browser, navigate changed features, hunt edge cases, generate follow-up specs, heal failures, and produce a findings report. Built on top of `agent-browser` and the Anthropic tool-use API.
|
|
533
|
+
|
|
534
|
+
If you want the full product story and the natural-language front door, start
|
|
535
|
+
with the [Autonomous Browser QA guide](https://yasserfaraazkhan.github.io/impact-gate/guides/browser-qa/)
|
|
536
|
+
and the [QA Skill Guide](https://yasserfaraazkhan.github.io/impact-gate/guides/qa-skill/)
|
|
537
|
+
for Codex and Claude examples using `/qa`.
|
|
496
538
|
|
|
497
539
|
### Quick Start
|
|
498
540
|
|
|
499
541
|
```bash
|
|
500
542
|
# PR mode — test features changed since origin/main
|
|
501
|
-
npx impact-gate-qa pr --since origin/main --base-url http://localhost:
|
|
543
|
+
npx impact-gate-qa pr --since origin/main --base-url http://localhost:3000
|
|
502
544
|
|
|
503
545
|
# Hunt mode — deep-test a specific area
|
|
504
|
-
npx impact-gate-qa hunt "
|
|
546
|
+
npx impact-gate-qa hunt "settings panel" --base-url http://localhost:3000
|
|
505
547
|
|
|
506
548
|
# Release mode — systematic exploration of all critical flows
|
|
507
|
-
npx impact-gate-qa release --base-url http://localhost:
|
|
549
|
+
npx impact-gate-qa release --base-url http://localhost:3000 --time 30
|
|
508
550
|
|
|
509
551
|
# Fix mode — verify healed specs
|
|
510
|
-
npx impact-gate-qa fix --base-url http://localhost:
|
|
552
|
+
npx impact-gate-qa fix --base-url http://localhost:3000
|
|
511
553
|
```
|
|
512
554
|
|
|
513
555
|
### Architecture
|
|
@@ -520,7 +562,7 @@ npx impact-gate-qa fix --base-url http://localhost:8065
|
|
|
520
562
|
|
|
521
563
|
| Flag | Default | Description |
|
|
522
564
|
|------|---------|-------------|
|
|
523
|
-
| `--base-url` |
|
|
565
|
+
| `--base-url` | Required | Application URL |
|
|
524
566
|
| `--time` | `15` | Time limit in minutes |
|
|
525
567
|
| `--budget` | `2.00` | Max LLM spend in USD |
|
|
526
568
|
| `--phase` | `all` | Run only `1`, `2`, or `3` |
|
|
@@ -532,7 +574,7 @@ Requires `agent-browser` CLI (`npm install -g agent-browser`) and `ANTHROPIC_API
|
|
|
532
574
|
|
|
533
575
|
## Production Usage
|
|
534
576
|
|
|
535
|
-
The strongest production story today is a repo that maintains a good `route-families.json` manifest and uses the deterministic `impact -> plan -> gate` loop in CI.
|
|
577
|
+
The strongest production story today is a repo that maintains a good `route-families.json` manifest, feeds traceability data back into the plan, and uses the deterministic `impact -> plan -> gate` loop in CI. That evidence-first workflow is the path to trust before layering in optional generation, healing, or autonomous QA.
|
|
536
578
|
|
|
537
579
|
## License
|
|
538
580
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/agent/config.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/agent/config.ts"],"names":[],"mappings":"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"}
|
package/dist/agent/config.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse_args.d.ts","sourceRoot":"","sources":["../../src/cli/parse_args.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAU,UAAU,EAAC,MAAM,YAAY,CAAC;AAEpD,eAAO,MAAM,iBAAiB,UAK7B,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAmBlF;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,SAAS,CAmBtE;
|
|
1
|
+
{"version":3,"file":"parse_args.d.ts","sourceRoot":"","sources":["../../src/cli/parse_args.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAU,UAAU,EAAC,MAAM,YAAY,CAAC;AAEpD,eAAO,MAAM,iBAAiB,UAK7B,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAmBlF;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,SAAS,CAmBtE;AA8JD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAyFpD"}
|
package/dist/cli/parse_args.js
CHANGED
|
@@ -82,6 +82,7 @@ const FLAGS = {
|
|
|
82
82
|
'--verbose': { key: 'verbose', type: 'boolean', aliases: ['-v'] },
|
|
83
83
|
'--json': { key: 'jsonOutput', type: 'boolean' },
|
|
84
84
|
'--mattermost': { key: 'profile', type: 'boolean', transform: () => 'mattermost' },
|
|
85
|
+
'--strict': { key: 'profile', type: 'boolean', transform: () => 'mattermost' },
|
|
85
86
|
// -- string flags --
|
|
86
87
|
'--config': { key: 'configPath', type: 'string' },
|
|
87
88
|
'--path': { key: 'path', type: 'string' },
|
|
@@ -131,7 +132,7 @@ const FLAGS = {
|
|
|
131
132
|
'--pipeline-mcp-timeout-ms': { key: 'pipelineMcpTimeoutMs', type: 'number-raw' },
|
|
132
133
|
'--pipeline-mcp-retries': { key: 'pipelineMcpRetries', type: 'number-raw' },
|
|
133
134
|
// -- enum flags --
|
|
134
|
-
'--profile': { key: 'profile', type: 'enum', enumValues: ['default', 'mattermost'] },
|
|
135
|
+
'--profile': { key: 'profile', type: 'enum', enumValues: ['default', 'strict', 'mattermost'], transform: (v) => v === 'strict' ? 'mattermost' : v },
|
|
135
136
|
'--pipeline-browser': { key: 'pipelineBrowser', type: 'enum', enumValues: ['chrome', 'chromium', 'firefox', 'webkit'] },
|
|
136
137
|
'--policy-enforcement-mode': { key: 'policyEnforcementMode', type: 'enum', enumValues: ['advisory', 'warn', 'block'] },
|
|
137
138
|
// -- csv flags --
|
|
@@ -244,7 +245,7 @@ function parseArgs(argv) {
|
|
|
244
245
|
case 'enum':
|
|
245
246
|
if (next) {
|
|
246
247
|
if (def.enumValues.includes(next)) {
|
|
247
|
-
setField(parsed, def.key, next);
|
|
248
|
+
setField(parsed, def.key, def.transform ? def.transform(next) : next);
|
|
248
249
|
}
|
|
249
250
|
i += 1;
|
|
250
251
|
}
|
package/dist/cli/usage.js
CHANGED
|
@@ -37,8 +37,8 @@ function printUsage() {
|
|
|
37
37
|
'Options:',
|
|
38
38
|
' --config <path> Path to impact-gate.config.json (auto-discovered if present)',
|
|
39
39
|
' --path <project-root> Path to the project root (scans both frontend and backend)',
|
|
40
|
-
' --profile <name> default |
|
|
41
|
-
' --
|
|
40
|
+
' --profile <name> default | strict',
|
|
41
|
+
' --strict Shortcut for --profile strict',
|
|
42
42
|
' --tests-root <path> Path to tests root (optional)',
|
|
43
43
|
' --framework <name> auto | playwright | cypress | pytest | supertest | selenium',
|
|
44
44
|
' --patterns <globs> Comma-separated test patterns',
|
package/dist/esm/agent/config.js
CHANGED
|
@@ -76,6 +76,7 @@ const FLAGS = {
|
|
|
76
76
|
'--verbose': { key: 'verbose', type: 'boolean', aliases: ['-v'] },
|
|
77
77
|
'--json': { key: 'jsonOutput', type: 'boolean' },
|
|
78
78
|
'--mattermost': { key: 'profile', type: 'boolean', transform: () => 'mattermost' },
|
|
79
|
+
'--strict': { key: 'profile', type: 'boolean', transform: () => 'mattermost' },
|
|
79
80
|
// -- string flags --
|
|
80
81
|
'--config': { key: 'configPath', type: 'string' },
|
|
81
82
|
'--path': { key: 'path', type: 'string' },
|
|
@@ -125,7 +126,7 @@ const FLAGS = {
|
|
|
125
126
|
'--pipeline-mcp-timeout-ms': { key: 'pipelineMcpTimeoutMs', type: 'number-raw' },
|
|
126
127
|
'--pipeline-mcp-retries': { key: 'pipelineMcpRetries', type: 'number-raw' },
|
|
127
128
|
// -- enum flags --
|
|
128
|
-
'--profile': { key: 'profile', type: 'enum', enumValues: ['default', 'mattermost'] },
|
|
129
|
+
'--profile': { key: 'profile', type: 'enum', enumValues: ['default', 'strict', 'mattermost'], transform: (v) => v === 'strict' ? 'mattermost' : v },
|
|
129
130
|
'--pipeline-browser': { key: 'pipelineBrowser', type: 'enum', enumValues: ['chrome', 'chromium', 'firefox', 'webkit'] },
|
|
130
131
|
'--policy-enforcement-mode': { key: 'policyEnforcementMode', type: 'enum', enumValues: ['advisory', 'warn', 'block'] },
|
|
131
132
|
// -- csv flags --
|
|
@@ -238,7 +239,7 @@ export function parseArgs(argv) {
|
|
|
238
239
|
case 'enum':
|
|
239
240
|
if (next) {
|
|
240
241
|
if (def.enumValues.includes(next)) {
|
|
241
|
-
setField(parsed, def.key, next);
|
|
242
|
+
setField(parsed, def.key, def.transform ? def.transform(next) : next);
|
|
242
243
|
}
|
|
243
244
|
i += 1;
|
|
244
245
|
}
|
package/dist/esm/cli/usage.js
CHANGED
|
@@ -34,8 +34,8 @@ export function printUsage() {
|
|
|
34
34
|
'Options:',
|
|
35
35
|
' --config <path> Path to impact-gate.config.json (auto-discovered if present)',
|
|
36
36
|
' --path <project-root> Path to the project root (scans both frontend and backend)',
|
|
37
|
-
' --profile <name> default |
|
|
38
|
-
' --
|
|
37
|
+
' --profile <name> default | strict',
|
|
38
|
+
' --strict Shortcut for --profile strict',
|
|
39
39
|
' --tests-root <path> Path to tests root (optional)',
|
|
40
40
|
' --framework <name> auto | playwright | cypress | pytest | supertest | selenium',
|
|
41
41
|
' --patterns <globs> Comma-separated test patterns',
|
package/dist/esm/qa-agent/cli.js
CHANGED
|
@@ -35,10 +35,10 @@ Options:
|
|
|
35
35
|
--help Show this help
|
|
36
36
|
|
|
37
37
|
Examples:
|
|
38
|
-
impact-gate-qa pr --since origin/main --base-url http://localhost:
|
|
39
|
-
impact-gate-qa hunt "
|
|
40
|
-
impact-gate-qa release --base-url http://localhost:
|
|
41
|
-
impact-gate-qa fix --base-url http://localhost:
|
|
38
|
+
impact-gate-qa pr --since origin/main --base-url http://localhost:3000
|
|
39
|
+
impact-gate-qa hunt "settings panel" --base-url http://localhost:3000
|
|
40
|
+
impact-gate-qa release --base-url http://localhost:3000 --time 30
|
|
41
|
+
impact-gate-qa fix --base-url http://localhost:3000
|
|
42
42
|
`);
|
|
43
43
|
}
|
|
44
44
|
function parseCliArgs(argv) {
|
package/dist/qa-agent/cli.js
CHANGED
|
@@ -37,10 +37,10 @@ Options:
|
|
|
37
37
|
--help Show this help
|
|
38
38
|
|
|
39
39
|
Examples:
|
|
40
|
-
impact-gate-qa pr --since origin/main --base-url http://localhost:
|
|
41
|
-
impact-gate-qa hunt "
|
|
42
|
-
impact-gate-qa release --base-url http://localhost:
|
|
43
|
-
impact-gate-qa fix --base-url http://localhost:
|
|
40
|
+
impact-gate-qa pr --since origin/main --base-url http://localhost:3000
|
|
41
|
+
impact-gate-qa hunt "settings panel" --base-url http://localhost:3000
|
|
42
|
+
impact-gate-qa release --base-url http://localhost:3000 --time 30
|
|
43
|
+
impact-gate-qa fix --base-url http://localhost:3000
|
|
44
44
|
`);
|
|
45
45
|
}
|
|
46
46
|
function parseCliArgs(argv) {
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yasserkhanorg/impact-gate",
|
|
3
|
-
"version": "2.1.
|
|
4
|
-
"description": "Diff-aware E2E impact analysis, release-ready test planning,
|
|
3
|
+
"version": "2.1.7",
|
|
4
|
+
"description": "Diff-aware E2E impact analysis, release-ready test planning, coverage gating, and hallucination-resistant AI generation for Playwright/Cypress teams.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/esm/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
@@ -62,7 +62,8 @@
|
|
|
62
62
|
"glob": "^11.0.0",
|
|
63
63
|
"marked": "^15.0.6",
|
|
64
64
|
"minimatch": "^10.2.4",
|
|
65
|
-
"openai": "^4.73.0"
|
|
65
|
+
"openai": "^4.73.0",
|
|
66
|
+
"typescript": "^5.6.0"
|
|
66
67
|
},
|
|
67
68
|
"peerDependencies": {
|
|
68
69
|
"agent-browser": ">=0.18.0"
|
|
@@ -73,8 +74,7 @@
|
|
|
73
74
|
}
|
|
74
75
|
},
|
|
75
76
|
"devDependencies": {
|
|
76
|
-
"@types/node": "^22.0.0"
|
|
77
|
-
"typescript": "^5.6.0"
|
|
77
|
+
"@types/node": "^22.0.0"
|
|
78
78
|
},
|
|
79
79
|
"repository": {
|
|
80
80
|
"type": "git",
|
|
@@ -117,7 +117,7 @@
|
|
|
117
117
|
"node": ">=20.0.0"
|
|
118
118
|
},
|
|
119
119
|
"author": "Yasser Khan",
|
|
120
|
-
"homepage": "https://github.
|
|
120
|
+
"homepage": "https://yasserfaraazkhan.github.io/impact-gate/",
|
|
121
121
|
"bugs": {
|
|
122
122
|
"url": "https://github.com/yasserfaraazkhan/impact-gate/issues"
|
|
123
123
|
},
|
package/skills/qa/SKILL.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: qa
|
|
3
3
|
description: |
|
|
4
|
-
Systematically QA test
|
|
4
|
+
Systematically QA test a running web application and fix bugs found.
|
|
5
5
|
Runs autonomous browser exploration, computes health scores, fixes bugs with
|
|
6
6
|
atomic commits, and produces structured reports with before/after evidence.
|
|
7
7
|
Use when asked to "qa", "QA", "test this", "find bugs", "test and fix",
|
|
@@ -23,16 +23,23 @@ to systematically test the application, find bugs, fix them, and produce a repor
|
|
|
23
23
|
## Step 1: Determine parameters
|
|
24
24
|
|
|
25
25
|
Parse the user's request for:
|
|
26
|
-
- **URL**: The base URL to test
|
|
26
|
+
- **URL**: The base URL to test. Prefer the app URL the user provided or the
|
|
27
|
+
currently running local/staging app URL you can discover. If no app URL is
|
|
28
|
+
available, ask for it instead of assuming a hard-coded local port.
|
|
27
29
|
- **Mode**: `pr` (feature branch, default), `hunt` (specific area), `release` (full regression), `fix` (verify healed tests)
|
|
28
30
|
- **Fix tier**: `quick` (critical+high), `standard` (default, +medium), `exhaustive` (+low)
|
|
29
31
|
- **Regression**: Whether to compare against a previous baseline
|
|
30
32
|
|
|
31
33
|
Auto-detect mode:
|
|
32
|
-
- On a feature branch with
|
|
34
|
+
- On a feature branch with an app URL → `pr` mode
|
|
33
35
|
- User mentions a specific area (e.g., "test channel settings") → `hunt` mode
|
|
34
36
|
- User says "release", "regression", "full test" → `release` mode
|
|
35
37
|
|
|
38
|
+
Accept any reachable application URL, for example:
|
|
39
|
+
- `http://localhost:3000`
|
|
40
|
+
- `http://127.0.0.1:5173`
|
|
41
|
+
- `https://staging.example.com`
|
|
42
|
+
|
|
36
43
|
## Step 2: Check prerequisites
|
|
37
44
|
|
|
38
45
|
```bash
|
|
@@ -64,16 +71,16 @@ npx impact-gate-qa <mode> \
|
|
|
64
71
|
Examples:
|
|
65
72
|
```bash
|
|
66
73
|
# Default: test current branch changes
|
|
67
|
-
npx impact-gate-qa pr --base-url
|
|
74
|
+
npx impact-gate-qa pr --base-url <app-url>
|
|
68
75
|
|
|
69
76
|
# Hunt mode for a specific area
|
|
70
|
-
npx impact-gate-qa hunt "
|
|
77
|
+
npx impact-gate-qa hunt "account settings" --base-url <app-url>
|
|
71
78
|
|
|
72
79
|
# Release readiness with regression comparison
|
|
73
|
-
npx impact-gate-qa release --base-url
|
|
80
|
+
npx impact-gate-qa release --base-url <app-url> --regression --time 30
|
|
74
81
|
|
|
75
82
|
# Quick smoke test, no fixes
|
|
76
|
-
npx impact-gate-qa pr --base-url
|
|
83
|
+
npx impact-gate-qa pr --base-url <app-url> --fix-tier quick --no-fix
|
|
77
84
|
```
|
|
78
85
|
|
|
79
86
|
## Step 4: Read and display the report
|