@yasserkhanorg/impact-gate 2.1.5 → 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 +77 -16
- 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,14 +1,31 @@
|
|
|
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
|
-
`impact-gate` is built first for one painful CI job: given a git diff, tell us which E2E surface changed
|
|
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.
|
|
20
|
+
|
|
21
|
+
That same workflow works for:
|
|
22
|
+
|
|
23
|
+
- pull requests against `main`
|
|
24
|
+
- release branches against the previous release tag
|
|
25
|
+
- hotfixes against the last shipped version
|
|
26
|
+
- any "what changed between these refs?" release-readiness check
|
|
27
|
+
|
|
28
|
+
Product priorities:
|
|
12
29
|
|
|
13
30
|
- **Primary**: diff-aware E2E impact analysis and coverage gating
|
|
14
31
|
- **Secondary**: optional AI features can suggest, generate, and heal tests once your project has a route-families.json manifest
|
|
@@ -16,6 +33,9 @@ Diff-aware E2E impact analysis and coverage gating for Playwright/Cypress teams.
|
|
|
16
33
|
|
|
17
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.
|
|
18
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
|
+
|
|
19
39
|
Transition note:
|
|
20
40
|
- The package and primary CLI are being renamed to `impact-gate`.
|
|
21
41
|
- Legacy CLI aliases (`e2e-ai-agents`, `e2e-qa-agent`, `e2e-agents-mcp`) still work during migration.
|
|
@@ -26,7 +46,7 @@ Transition note:
|
|
|
26
46
|
|
|
27
47
|
| Level | Commands | What They Are For |
|
|
28
48
|
|------|----------|-------------------|
|
|
29
|
-
| Core CI Workflow | `impact`, `plan`, `gate` | Decide what changed, what is covered, and whether a PR should pass |
|
|
49
|
+
| Core CI Workflow | `impact`, `plan`, `gate` | Decide what changed, what is covered, and whether a PR should pass or a release is ready |
|
|
30
50
|
| Optional AI Workflow | `generate`, `heal`, `analyze`, `finalize-generated-tests` | Suggest, create, or repair tests after impact analysis |
|
|
31
51
|
| Setup and Calibration | `train`, `bootstrap`, `traceability-*`, `feedback`, `cost-report`, `llm-health` | Build the manifest, feed execution data back in, and inspect cost/provider health |
|
|
32
52
|
| Advanced / Experimental | `crew`, MCP mode, plugins, `impact-gate-qa` | Deeper orchestration and browser-driven workflows beyond the core CI loop |
|
|
@@ -36,7 +56,7 @@ Transition note:
|
|
|
36
56
|
- The clearest, most stable workflow is still **Playwright/Cypress impact analysis and gating**.
|
|
37
57
|
- AI generation and healing work best **after** the project has a good `route-families.json` manifest.
|
|
38
58
|
- Advanced features are improving, but they are **not** the best entry point if you only want dependable CI coverage decisions.
|
|
39
|
-
- 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.
|
|
40
60
|
|
|
41
61
|
## Free Tier
|
|
42
62
|
|
|
@@ -77,7 +97,7 @@ npx impact-gate --help
|
|
|
77
97
|
Then run the core CI workflow:
|
|
78
98
|
|
|
79
99
|
```bash
|
|
80
|
-
# 1. See what changed
|
|
100
|
+
# 1. See what changed in a PR or branch diff
|
|
81
101
|
npx impact-gate impact --path /path/to/project --since origin/main
|
|
82
102
|
|
|
83
103
|
# 2. Build a coverage plan and CI summary artifacts
|
|
@@ -87,13 +107,35 @@ npx impact-gate plan --path /path/to/project --since origin/main
|
|
|
87
107
|
npx impact-gate gate --path /path/to/project --threshold 80
|
|
88
108
|
```
|
|
89
109
|
|
|
110
|
+
Use the same `plan` command for release readiness:
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
# Compare the current branch or release candidate to the last shipped tag
|
|
114
|
+
npx impact-gate plan --path /path/to/project --since v2.1.0
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
That gives you a release-focused test plan showing impacted flows, current coverage, and where you still need tests or validation before shipping.
|
|
118
|
+
|
|
90
119
|
Notes:
|
|
91
120
|
|
|
92
121
|
- `impact` prints a deterministic summary to stdout.
|
|
93
122
|
- `plan` writes `.e2e-ai-agents/plan.json` and `.e2e-ai-agents/ci-summary.md`.
|
|
123
|
+
- `plan --since <old-release-tag>` is the simplest way to turn a release diff into a prioritized test plan.
|
|
94
124
|
- `gate` expects a threshold in the range `0-100` and exits `1` when the threshold is missed.
|
|
95
125
|
- Add the Optional AI Workflow only after your `route-families.json` manifest is useful enough to trust.
|
|
96
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
|
+
|
|
97
139
|
## Setup and Calibration
|
|
98
140
|
|
|
99
141
|
These commands help the core CI workflow become accurate and project-aware.
|
|
@@ -135,6 +177,20 @@ npx impact-gate finalize-generated-tests --path /path/to/project --create-pr
|
|
|
135
177
|
|
|
136
178
|
`plan` and `suggest` are aliases. `analyze` is the convenience wrapper when you want the full path in one invocation.
|
|
137
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
|
+
|
|
138
194
|
## Advanced / Experimental
|
|
139
195
|
|
|
140
196
|
These features are real, but they are not the clearest place to start if your goal is simple CI coverage decisions.
|
|
@@ -310,7 +366,7 @@ Create `impact-gate.config.json` in your project (auto-discovered):
|
|
|
310
366
|
```json
|
|
311
367
|
{
|
|
312
368
|
"path": ".",
|
|
313
|
-
"profile": "
|
|
369
|
+
"profile": "strict",
|
|
314
370
|
"testsRoot": ".",
|
|
315
371
|
"mode": "impact",
|
|
316
372
|
"framework": "auto",
|
|
@@ -340,14 +396,14 @@ Profiles are not the same thing as frameworks. They control analysis strictness
|
|
|
340
396
|
| Profile | Description |
|
|
341
397
|
|---------|-------------|
|
|
342
398
|
| `default` | Standard analysis behavior for most repositories |
|
|
343
|
-
| `
|
|
399
|
+
| `strict` | Stricter handling of heuristic-only mappings and more opinionated analysis defaults |
|
|
344
400
|
|
|
345
401
|
Framework detection is separate. The CLI can auto-detect Playwright, Cypress, pytest, supertest, and Selenium usage from the project structure and dependencies.
|
|
346
402
|
|
|
347
403
|
### Key options
|
|
348
404
|
|
|
349
405
|
- **`testsRoot`** — path to tests when they live outside the app root
|
|
350
|
-
- **`profile`** — `default` or `
|
|
406
|
+
- **`profile`** — `default` or `strict`
|
|
351
407
|
- **`impact.dependencyGraph`** — static reverse dependency graph for transitive impact
|
|
352
408
|
- **`impact.traceability`** — file-to-test mapping from CI execution data
|
|
353
409
|
- **`impact.aiFlow`** — LLM-powered flow mapping through the configured provider
|
|
@@ -473,22 +529,27 @@ All written under `<testsRoot>/.e2e-ai-agents/`.
|
|
|
473
529
|
|
|
474
530
|
## Advanced / Experimental: Autonomous QA Agent (`impact-gate-qa`)
|
|
475
531
|
|
|
476
|
-
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`.
|
|
477
538
|
|
|
478
539
|
### Quick Start
|
|
479
540
|
|
|
480
541
|
```bash
|
|
481
542
|
# PR mode — test features changed since origin/main
|
|
482
|
-
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
|
|
483
544
|
|
|
484
545
|
# Hunt mode — deep-test a specific area
|
|
485
|
-
npx impact-gate-qa hunt "
|
|
546
|
+
npx impact-gate-qa hunt "settings panel" --base-url http://localhost:3000
|
|
486
547
|
|
|
487
548
|
# Release mode — systematic exploration of all critical flows
|
|
488
|
-
npx impact-gate-qa release --base-url http://localhost:
|
|
549
|
+
npx impact-gate-qa release --base-url http://localhost:3000 --time 30
|
|
489
550
|
|
|
490
551
|
# Fix mode — verify healed specs
|
|
491
|
-
npx impact-gate-qa fix --base-url http://localhost:
|
|
552
|
+
npx impact-gate-qa fix --base-url http://localhost:3000
|
|
492
553
|
```
|
|
493
554
|
|
|
494
555
|
### Architecture
|
|
@@ -501,7 +562,7 @@ npx impact-gate-qa fix --base-url http://localhost:8065
|
|
|
501
562
|
|
|
502
563
|
| Flag | Default | Description |
|
|
503
564
|
|------|---------|-------------|
|
|
504
|
-
| `--base-url` |
|
|
565
|
+
| `--base-url` | Required | Application URL |
|
|
505
566
|
| `--time` | `15` | Time limit in minutes |
|
|
506
567
|
| `--budget` | `2.00` | Max LLM spend in USD |
|
|
507
568
|
| `--phase` | `all` | Run only `1`, `2`, or `3` |
|
|
@@ -513,7 +574,7 @@ Requires `agent-browser` CLI (`npm install -g agent-browser`) and `ANTHROPIC_API
|
|
|
513
574
|
|
|
514
575
|
## Production Usage
|
|
515
576
|
|
|
516
|
-
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.
|
|
517
578
|
|
|
518
579
|
## License
|
|
519
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
|
|
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
|