@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 CHANGED
@@ -1,14 +1,31 @@
1
- # @yasserkhanorg/impact-gate
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
- Diff-aware E2E impact analysis and coverage gating for Playwright/Cypress teams. Optional AI features can suggest, generate, and heal tests once your project has a route-families.json manifest.
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
  [![npm](https://img.shields.io/npm/v/%40yasserkhanorg%2Fimpact-gate)](https://www.npmjs.com/package/@yasserkhanorg/impact-gate)
6
12
  [![License](https://img.shields.io/badge/license-Apache%202.0-blue)](LICENSE)
7
13
  [![GitHub](https://img.shields.io/badge/github-repo-blue?logo=github)](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 and whether the current suite already covers it.
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 Mattermost profile is still the most opinionated path in the codebase. Generic flows are supported, but the package should be judged first on the core CI workflow above.
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": "mattermost",
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
- | `mattermost` | Mattermost-specific conventions and stricter handling of heuristic-only mappings |
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 `mattermost`
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 opens a real browser, navigates to changed features, tries edge cases, and produces a findings report — all unsupervised. Built on top of `agent-browser` and the Anthropic tool-use API.
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:8065
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 "channel settings" --base-url http://localhost:8065
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:8065 --time 30
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:8065
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` | `http://localhost:8065` | Application 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. [Mattermost](https://github.com/mattermost/mattermost) is the most battle-tested public example for coverage gating, generation, and healing. See the [Mattermost Playwright integration](https://github.com/mattermost/mattermost/tree/master/e2e-tests/playwright) for a real-world setup.
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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"}
@@ -335,6 +335,9 @@ function normalizeProfile(value) {
335
335
  if (value === 'default' || value === 'mattermost') {
336
336
  return value;
337
337
  }
338
+ if (value === 'strict') {
339
+ return 'mattermost';
340
+ }
338
341
  return undefined;
339
342
  }
340
343
  function normalizeFramework(value) {
@@ -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;AA6JD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAyFpD"}
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"}
@@ -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 | mattermost',
41
- ' --mattermost Shortcut for --profile mattermost',
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',
@@ -332,6 +332,9 @@ function normalizeProfile(value) {
332
332
  if (value === 'default' || value === 'mattermost') {
333
333
  return value;
334
334
  }
335
+ if (value === 'strict') {
336
+ return 'mattermost';
337
+ }
335
338
  return undefined;
336
339
  }
337
340
  function normalizeFramework(value) {
@@ -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
  }
@@ -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 | mattermost',
38
- ' --mattermost Shortcut for --profile mattermost',
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',
@@ -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:8065
39
- impact-gate-qa hunt "channel settings" --base-url http://localhost:8065
40
- impact-gate-qa release --base-url http://localhost:8065 --time 30
41
- impact-gate-qa fix --base-url http://localhost:8065
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) {
@@ -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:8065
41
- impact-gate-qa hunt "channel settings" --base-url http://localhost:8065
42
- impact-gate-qa release --base-url http://localhost:8065 --time 30
43
- impact-gate-qa fix --base-url http://localhost:8065
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.5",
4
- "description": "Diff-aware E2E impact analysis and coverage gating for Playwright/Cypress teams. Optional AI features can suggest, generate, and heal tests once your project has a route-families.json manifest.",
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.com/yasserfaraazkhan/impact-gate",
120
+ "homepage": "https://yasserfaraazkhan.github.io/impact-gate/",
121
121
  "bugs": {
122
122
  "url": "https://github.com/yasserfaraazkhan/impact-gate/issues"
123
123
  },
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: qa
3
3
  description: |
4
- Systematically QA test the Mattermost web application and fix bugs found.
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 (default: `http://localhost:8065`)
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 no URL → `pr` mode
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 http://localhost:8065
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 "channel settings" --base-url http://localhost:8065
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 http://localhost:8065 --regression --time 30
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 http://localhost:8065 --fix-tier quick --no-fix
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