@ia-qa/qa-discovery 0.1.1 → 0.1.2
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 +24 -1
- package/package.json +61 -61
package/README.md
CHANGED
|
@@ -290,6 +290,20 @@ They are two halves of the same loop, and neither replaces the other.
|
|
|
290
290
|
|
|
291
291
|
⚠️ **`scan` and `map` are not the same operation.** `map` writes a page *contract* — every interactive element by role and accessible name, for repairing broken locators. `scan` writes a *surface* — pages, headings, inputs, API calls, for deciding what to test. Do not expect one to produce the other.
|
|
292
292
|
|
|
293
|
+
### `scan` vs `ia-qa-heal discover` — the one that actually gets confused
|
|
294
|
+
|
|
295
|
+
Self-healing has its own crawling verb, and the names do not make the difference obvious. They answer different questions, and if yours is the first one you do **not** need this package:
|
|
296
|
+
|
|
297
|
+
| | `ia-qa-heal discover` | `ia-qa-discover scan` |
|
|
298
|
+
|---|---|---|
|
|
299
|
+
| Answers | *Which routes are missing from my `config.pages`?* | *What does this app take as input, and where would testing start?* |
|
|
300
|
+
| Gives you | `{ name, url }` candidates | the surface behind each URL |
|
|
301
|
+
| Then what | `--apply` appends to `config.json` | you know what there is to test |
|
|
302
|
+
|
|
303
|
+
Measured on the same four pages of ia-qa.com: `discover` returns **4 `{name, url}` pairs**; `scan` returns those four pages plus **159 headings, 3 input fields with their captured labels, 9 observed API calls**, and the verdict that none of the three fields can be located durably. That is not a richer rendering of the same data — it is a different dataset.
|
|
304
|
+
|
|
305
|
+
**So: if you only want to fill `config.pages`, use `ia-qa-heal discover` and stop there.** Reach for `scan` when you need to know what the pages *contain*, or when you have no suite at all — which is the case self-healing's own README opens by excluding.
|
|
306
|
+
|
|
293
307
|
**Discovery → healing.** Once you know the routes, hand them to healing and start writing tests against contracts:
|
|
294
308
|
|
|
295
309
|
```bash
|
|
@@ -299,7 +313,16 @@ ia-qa-heal init # then map it for test mai
|
|
|
299
313
|
|
|
300
314
|
`config.pages` here has the same `{ name, url }` shape as self-healing's, and both packages resolve page names through the *same* function (`pageNameFromUrl`), so a page called `checkout` in one is `checkout` in the other. The two sets of artifacts line up 1:1.
|
|
301
315
|
|
|
302
|
-
**Healing → discovery.** Healing knows what your suite *covers
|
|
316
|
+
**Healing → discovery — and the gap is computed, not just described.** Healing knows what your suite *covers*; discovery knows what *exists*. When a project already has `.ia-qa/mapping/`, `scan` ends by stating the difference:
|
|
317
|
+
|
|
318
|
+
```
|
|
319
|
+
🔗 This project also uses `ia-qa-heal`: it holds contracts for 3 page(s), this scan found 4.
|
|
320
|
+
2 page(s) exist here with no contract: `all-tools`, `resources`
|
|
321
|
+
That is the gap between what the app has and what the suite holds — not a verdict:
|
|
322
|
+
a page with no contract may be deliberately out of scope. You decide which.
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
Comparable only because both packages resolve page names through the *same* `pageNameFromUrl`. It is **not** a verdict and this package gates nothing — an uncovered page may be out of scope on purpose. A contracted page this scan did not reach is reported as a limit of the scan (`--max`, crawl reach, session), never as a page that disappeared. On a project with no `.ia-qa/`, nothing is printed at all.
|
|
303
326
|
|
|
304
327
|
**Sessions are interchangeable.** Both consume a Playwright `storageState`, so a session from either `login` verb works for the other: `ia-qa-discover scan --session ../.ia-qa/session.json`.
|
|
305
328
|
|
package/package.json
CHANGED
|
@@ -1,61 +1,61 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@ia-qa/qa-discovery",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"description": "Deterministic surface reconnaissance for an unknown web app — crawl, capture, diff. No LLM, no hosting: runs entirely on your machine, with a local MCP server for agents.",
|
|
5
|
-
"keywords": [
|
|
6
|
-
"qa",
|
|
7
|
-
"testing",
|
|
8
|
-
"test-discovery",
|
|
9
|
-
"crawler",
|
|
10
|
-
"playwright",
|
|
11
|
-
"mcp",
|
|
12
|
-
"model-context-protocol"
|
|
13
|
-
],
|
|
14
|
-
"license": "MIT",
|
|
15
|
-
"author": "Jean-Christophe Jamet",
|
|
16
|
-
"homepage": "https://www.ia-qa.com",
|
|
17
|
-
"type": "commonjs",
|
|
18
|
-
"main": "dist/index.js",
|
|
19
|
-
"types": "dist/index.d.ts",
|
|
20
|
-
"exports": {
|
|
21
|
-
".": {
|
|
22
|
-
"types": "./dist/index.d.ts",
|
|
23
|
-
"default": "./dist/index.js"
|
|
24
|
-
},
|
|
25
|
-
"./dist/*": [
|
|
26
|
-
"./dist/*",
|
|
27
|
-
"./dist/*.js"
|
|
28
|
-
],
|
|
29
|
-
"./package.json": "./package.json"
|
|
30
|
-
},
|
|
31
|
-
"bin": {
|
|
32
|
-
"ia-qa-discover": "dist/cli/index.js",
|
|
33
|
-
"ia-qa-discover-mcp": "dist/mcp/server.js",
|
|
34
|
-
"ia-qa-discover-ai": "dist/cli-ai/index.js"
|
|
35
|
-
},
|
|
36
|
-
"files": [
|
|
37
|
-
"dist",
|
|
38
|
-
"README.md",
|
|
39
|
-
"ROADMAP.md"
|
|
40
|
-
],
|
|
41
|
-
"scripts": {
|
|
42
|
-
"build": "tsc -p tsconfig.json",
|
|
43
|
-
"dev": "tsc -p tsconfig.json --watch",
|
|
44
|
-
"start:mcp": "node dist/mcp/server.js",
|
|
45
|
-
"prepublishOnly": "npm run build"
|
|
46
|
-
},
|
|
47
|
-
"engines": {
|
|
48
|
-
"node": ">=18.0.0"
|
|
49
|
-
},
|
|
50
|
-
"dependencies": {
|
|
51
|
-
"@ia-qa/self-healing": "^1.7.0"
|
|
52
|
-
},
|
|
53
|
-
"peerDependencies": {
|
|
54
|
-
"playwright": ">=1.40.0"
|
|
55
|
-
},
|
|
56
|
-
"devDependencies": {
|
|
57
|
-
"@types/node": "^20.14.0",
|
|
58
|
-
"playwright": "^1.45.0",
|
|
59
|
-
"typescript": "^5.5.0"
|
|
60
|
-
}
|
|
61
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@ia-qa/qa-discovery",
|
|
3
|
+
"version": "0.1.2",
|
|
4
|
+
"description": "Deterministic surface reconnaissance for an unknown web app — crawl, capture, diff. No LLM, no hosting: runs entirely on your machine, with a local MCP server for agents.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"qa",
|
|
7
|
+
"testing",
|
|
8
|
+
"test-discovery",
|
|
9
|
+
"crawler",
|
|
10
|
+
"playwright",
|
|
11
|
+
"mcp",
|
|
12
|
+
"model-context-protocol"
|
|
13
|
+
],
|
|
14
|
+
"license": "MIT",
|
|
15
|
+
"author": "Jean-Christophe Jamet",
|
|
16
|
+
"homepage": "https://www.ia-qa.com",
|
|
17
|
+
"type": "commonjs",
|
|
18
|
+
"main": "dist/index.js",
|
|
19
|
+
"types": "dist/index.d.ts",
|
|
20
|
+
"exports": {
|
|
21
|
+
".": {
|
|
22
|
+
"types": "./dist/index.d.ts",
|
|
23
|
+
"default": "./dist/index.js"
|
|
24
|
+
},
|
|
25
|
+
"./dist/*": [
|
|
26
|
+
"./dist/*",
|
|
27
|
+
"./dist/*.js"
|
|
28
|
+
],
|
|
29
|
+
"./package.json": "./package.json"
|
|
30
|
+
},
|
|
31
|
+
"bin": {
|
|
32
|
+
"ia-qa-discover": "dist/cli/index.js",
|
|
33
|
+
"ia-qa-discover-mcp": "dist/mcp/server.js",
|
|
34
|
+
"ia-qa-discover-ai": "dist/cli-ai/index.js"
|
|
35
|
+
},
|
|
36
|
+
"files": [
|
|
37
|
+
"dist",
|
|
38
|
+
"README.md",
|
|
39
|
+
"ROADMAP.md"
|
|
40
|
+
],
|
|
41
|
+
"scripts": {
|
|
42
|
+
"build": "tsc -p tsconfig.json",
|
|
43
|
+
"dev": "tsc -p tsconfig.json --watch",
|
|
44
|
+
"start:mcp": "node dist/mcp/server.js",
|
|
45
|
+
"prepublishOnly": "npm run build"
|
|
46
|
+
},
|
|
47
|
+
"engines": {
|
|
48
|
+
"node": ">=18.0.0"
|
|
49
|
+
},
|
|
50
|
+
"dependencies": {
|
|
51
|
+
"@ia-qa/self-healing": "^1.7.0"
|
|
52
|
+
},
|
|
53
|
+
"peerDependencies": {
|
|
54
|
+
"playwright": ">=1.40.0"
|
|
55
|
+
},
|
|
56
|
+
"devDependencies": {
|
|
57
|
+
"@types/node": "^20.14.0",
|
|
58
|
+
"playwright": "^1.45.0",
|
|
59
|
+
"typescript": "^5.5.0"
|
|
60
|
+
}
|
|
61
|
+
}
|