@ia-qa/pal 0.8.0 → 1.0.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/README.md +24 -1
- package/ROADMAP.md +121 -0
- package/TUTORIAL.md +74 -3
- package/dist/cli/index.js +21 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/skill.d.ts +16 -0
- package/dist/cli/skill.js +57 -0
- package/dist/cli/skill.js.map +1 -0
- package/dist/history.js +4 -0
- package/dist/history.js.map +1 -1
- package/dist/htmlReport.js +30 -20
- package/dist/htmlReport.js.map +1 -1
- package/dist/plan.d.ts +38 -1
- package/dist/plan.js +36 -5
- package/dist/plan.js.map +1 -1
- package/dist/report.d.ts +15 -0
- package/dist/report.js +82 -15
- package/dist/report.js.map +1 -1
- package/dist/run.d.ts +1 -0
- package/dist/run.js +4 -2
- package/dist/run.js.map +1 -1
- package/dist/tour.d.ts +30 -1
- package/dist/tour.js +79 -5
- package/dist/tour.js.map +1 -1
- package/package.json +5 -3
- package/skills/ia-qa-pal/SKILL.md +120 -0
package/README.md
CHANGED
|
@@ -10,6 +10,20 @@ One command walks your web app, maps every page, checks it, and compares it with
|
|
|
10
10
|
|
|
11
11
|
> **New here?** The [step-by-step tutorial](https://www.ia-qa.com/devtools/pal/tutorial) walks a first tour, reading the report, logins and CI.
|
|
12
12
|
|
|
13
|
+
**Driving this with an AI agent?** One command hands it the whole doctrine — the order the
|
|
14
|
+
verbs go in, what each section of the report means, and what it must never do:
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
npx -p @ia-qa/pal ia-qa-pal skill --print # read it
|
|
18
|
+
npx -p @ia-qa/pal ia-qa-pal skill --install # into .claude/skills/, where agents look
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## What it will and will not do
|
|
22
|
+
|
|
23
|
+
[`ROADMAP.md`](./ROADMAP.md), shipped in this package: the eight guardrails a tour keeps, the three
|
|
24
|
+
things v1 was asked for and deliberately does differently, what is not built yet and what will
|
|
25
|
+
never be built — a hosted version, an LLM near the verdict, automatic repairs, a percentage.
|
|
26
|
+
|
|
13
27
|
## Install
|
|
14
28
|
|
|
15
29
|
```bash
|
|
@@ -91,6 +105,7 @@ a page nothing links to.
|
|
|
91
105
|
|
|
92
106
|
- **Drift on what a page shows when it loads** — a control lost, ambiguous, or a selector now reaching another element — fails the tour.
|
|
93
107
|
- **Drift on what is reached only by clicking** — a profile opened from a ranking, a button that exists in one state of the app — is listed under *To decide* with the clicks that reached it, and does **not** fail the tour: on an app with live data it may simply depend on what the click landed on. `--strict` makes it fail too.
|
|
108
|
+
- **A list whose items were replaced** — a catalogue that swapped products, a feed with new posts on top — is **one line**, naming what left and what arrived, instead of a row per item. It does not fail the tour; `--strict` makes it fail. A list that was **emptied**, or a control inserted above its siblings, is never folded: those still fail.
|
|
94
109
|
- **A label that differs only by a number** (`Cart (3)` → `Cart (5)`, `Activity60` → `Activity30`) comes with the `nameMask` to paste into `.ia-qa/config.json`; the element stays under contract, only its label stops being compared.
|
|
95
110
|
- **A change you intended**: review it, then make it the reference for those pages only —
|
|
96
111
|
|
|
@@ -130,6 +145,13 @@ Declare it at setup (`--tests tests/`, or answer yes when the tour finds it) and
|
|
|
130
145
|
- **⛔ To decide** — locator names your tests use that nothing on the mapped pages carries, and renamed labels your tests locate by name.
|
|
131
146
|
- **🔍 Not seen** — `ia-qa-pal tour --suite` runs your tests once, with the capture hook, and names the pages they **never visit**. A full suite can take twenty minutes, which is why nobody runs it every tour: declare a shorter one for pal, and it runs that instead.
|
|
132
147
|
|
|
148
|
+
**A tour that mapped nothing stops before running it.** If no page could be captured — an
|
|
149
|
+
expired session is the usual reason — there is nothing to compare the suite against, and
|
|
150
|
+
spending twenty minutes to end on "no comparable page" is the failure this check exists to
|
|
151
|
+
prevent. pal says so, names the cause, points at `ia-qa-heal session --check`, and offers
|
|
152
|
+
`--suite-only` when what you wanted was the coverage measurement: your suite carries its own
|
|
153
|
+
login, so that half is still worth having.
|
|
154
|
+
|
|
133
155
|
```json
|
|
134
156
|
{ "pal": { "testCommand": "npx playwright test --grep @smoke" } }
|
|
135
157
|
```
|
|
@@ -173,8 +195,9 @@ One tour runs per project; a second is refused while the first is alive, and a t
|
|
|
173
195
|
|---|---|
|
|
174
196
|
| `--more` | explore the next batch in depth instead of a regression tour |
|
|
175
197
|
| `--suite` | also run your test command once, with the capture hook |
|
|
198
|
+
| `--suite-only` | run **only** that command, for coverage — no capture, no comparison, no verdict. The way to measure which pages your tests visit when the session is not opening the app. The report says so in as many words, and exits 0 (or 1 if your suite failed): nothing was compared because nothing was asked to be |
|
|
176
199
|
| `--background` | start detached and return at once |
|
|
177
|
-
| `--strict` | also fail on drift reached only by clicking |
|
|
200
|
+
| `--strict` | also fail on drift reached only by clicking, and on lists whose items were replaced |
|
|
178
201
|
| `--all-contracts` | judge every contract in `.ia-qa/mapping/`, not only the pages your config declares |
|
|
179
202
|
| `--batch <n>` | pages per depth batch (default 10) |
|
|
180
203
|
| `--json` | the whole report as one JSON document on stdout; progress stays on stderr |
|
package/ROADMAP.md
ADDED
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# @ia-qa/pal — roadmap
|
|
2
|
+
|
|
3
|
+
What a tour does, what it deliberately does **not** do, and what would have to be measured
|
|
4
|
+
before any of that changes. One rule governs every line below:
|
|
5
|
+
|
|
6
|
+
> **pal composes, it never computes.** Every verdict it prints comes from a function
|
|
7
|
+
> `@ia-qa/self-healing` exports for exactly that purpose. pal adds no scoring, no heuristic
|
|
8
|
+
> and no second opinion. If a number here ever disagrees with `ia-qa-heal`, that is a bug —
|
|
9
|
+
> not a nuance.
|
|
10
|
+
|
|
11
|
+
The guardrails that make a tour worth reading, kept across every version:
|
|
12
|
+
|
|
13
|
+
1. **No engine of its own.** `runMap`, `dirDiffAggregate`, `checkProject`, `runFix`,
|
|
14
|
+
`auditProject` all come from the healing package. Rebuilding a verdict here would be the
|
|
15
|
+
CLI/MCP dispatch split in another costume.
|
|
16
|
+
2. **A first tour is never a pass.** It establishes a baseline; nothing was compared, so
|
|
17
|
+
nothing is green.
|
|
18
|
+
3. **"Not seen" is never dropped**, including from a clean report. A tour that measured a
|
|
19
|
+
third of an app and found nothing is not a clean app, and that section is where the
|
|
20
|
+
denominator lives.
|
|
21
|
+
4. **Repairs are proposed, never applied.** pal never edits a test file. It prints the plan
|
|
22
|
+
and the command a human runs after reading it.
|
|
23
|
+
5. **The test command comes from the config file** — never from a flag, never from an MCP
|
|
24
|
+
argument. A tool that runs a string it was handed is a tool that runs anything.
|
|
25
|
+
6. **Nothing leaves the machine, and no LLM is called.** A headless browser against the app
|
|
26
|
+
the user configured, and their own test command only when asked.
|
|
27
|
+
7. **One tour per project**, and a tour always runs in the background when started by an
|
|
28
|
+
agent: it outlives any client timeout.
|
|
29
|
+
8. **No percentage.** Counts and page names, always beside what the tour could not see — a
|
|
30
|
+
ratio invites a denominator nobody guarantees.
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## v1 — shipped
|
|
35
|
+
|
|
36
|
+
| What | Landed in |
|
|
37
|
+
|---|---|
|
|
38
|
+
| The healing API a tour needs (batches, per-page stats, partial baseline, shared verdict) | healing 1.10.0 |
|
|
39
|
+
| `tour`, levels 0 and 1 | pal 0.1.0 |
|
|
40
|
+
| `setup` (URL, login, suite detected) | pal 0.2.0 + healing 1.11.0 |
|
|
41
|
+
| Level 2: inventory, repair plan (`fix --dry-run`), dead names (`audit`), isolated `--suite` | pal 0.3.0 + healing 1.12.0 |
|
|
42
|
+
| Tracked tours (lock, `run.json`), `--background`, `status` | pal 0.3.0 |
|
|
43
|
+
| `ia-qa-pal-mcp`: `pal_project`, `pal_setup`, `pal_tour`, `pal_status` | pal 0.3.0 |
|
|
44
|
+
| Two levels of drift (on load vs behind interaction), `nameMask` relayed, `accept` | pal 0.4.0 + healing 1.13.0 |
|
|
45
|
+
| The HTML report: mood, "X of Y" gauges, four sections, click paths, timeline | pal 0.5.0 |
|
|
46
|
+
| Field round (old repository): `rebaseline`, `pal.testCommand`, scope limited to declared pages + `--all-contracts` | pal 0.6.0 + healing 1.14.0 |
|
|
47
|
+
| Lists whose items are data folded into one finding | pal 0.8.0 + healing 1.16.0 |
|
|
48
|
+
| Pre-flight refusal when nothing was mapped, `--suite-only`, redirected pages in *Read this first*, `skill` | pal 1.0.0 |
|
|
49
|
+
|
|
50
|
+
**Measured in the field, and worth knowing before planning anything on top**: a surface pass
|
|
51
|
+
costs ≈ 1.7 s per page; depth costs 19–25 s per page and scales with the number of controls
|
|
52
|
+
(r 0.74–0.97). "Only pages with closed controls need depth" filters almost nothing on a real
|
|
53
|
+
app — a shared navbar gives every page ≥ 9 openable controls.
|
|
54
|
+
|
|
55
|
+
### The three gaps v1 accepts, stated rather than implied
|
|
56
|
+
|
|
57
|
+
The specification asked for each of these. v1 ships something else on purpose, and the reason
|
|
58
|
+
is written here so nobody has to guess whether it was forgotten.
|
|
59
|
+
|
|
60
|
+
| Asked for | What v1 does | Why |
|
|
61
|
+
|---|---|---|
|
|
62
|
+
| Repairs as a **patch** | a plan plus the command that applies it | A patch invites `git apply` without reading. The plan is the review. |
|
|
63
|
+
| The local **console** as a third door | `status` and the HTML report | The console belongs to `ia-qa-heal ui`, which blocks until a human closes the tab. A second one here would duplicate a surface pal does not own. |
|
|
64
|
+
| First depth batch in **menu order** | in the order of `config.pages` | Menu order needs a navigation graph pal does not build; config order is the user's own stated priority. |
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## Next — not built, and each waits on a real signal
|
|
69
|
+
|
|
70
|
+
Nothing here is scheduled. Each is written down so it is a decision rather than an oversight.
|
|
71
|
+
|
|
72
|
+
- **Level 3a — actions that change data** (submit, order, delete). Only against a target
|
|
73
|
+
declared as staging, with an explicit refusal anywhere else. The refusal is the hard part,
|
|
74
|
+
not the clicking: a tool that mutates the wrong environment once is a tool nobody runs again.
|
|
75
|
+
- **Level 3b — LLM-proposed scenarios (BYOK)**. Playwright specs generated on a Page Object,
|
|
76
|
+
kept only if they pass twice, reviewed by a human. **The model writes; it never returns the
|
|
77
|
+
verdict.** Depends on the item below.
|
|
78
|
+
- **Deterministic POM generation** from the contract — the prerequisite for 3b, and useful on
|
|
79
|
+
its own. `@ia-qa/qa-discovery`'s `generate` already scaffolds a spec per uncovered page;
|
|
80
|
+
whether that is the same job is an open question.
|
|
81
|
+
- **Opening a pull request** (GitHub/GitLab). Needs a token and an outbound flow, which is a
|
|
82
|
+
different security posture from "nothing leaves the machine".
|
|
83
|
+
- **Built-in scheduling** (nightly). In v1 the CI calls the CLI itself, which costs one cron
|
|
84
|
+
line and keeps the scheduler where the team already looks.
|
|
85
|
+
- **Parallelism between pages** — has to be measured first: 429s, and whether a session
|
|
86
|
+
survives concurrent use.
|
|
87
|
+
- **Notifications** (Slack, mail, Jira).
|
|
88
|
+
- **Cypress / Selenium parity at level 2.** The loop is proven on Playwright; heal reads all
|
|
89
|
+
three and ships all three capture hooks, and pal already names the right one per project
|
|
90
|
+
(`detectFrameworks`), but the corpus that proves the round-trip is Playwright. Parity means
|
|
91
|
+
a corpus, not a flag.
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## Explicitly out of scope — will not build
|
|
96
|
+
|
|
97
|
+
- **A hosted version on ia-qa.com.** No server-side browser, credentials that would leave the
|
|
98
|
+
machine, an SSRF surface, and apps behind a VPN that would be unreachable anyway. The site
|
|
99
|
+
keeps the install-free demo at `/devtools/sandbox`.
|
|
100
|
+
- **An LLM anywhere near the verdict.** pal calls no model at all. The BYOK layers live in the
|
|
101
|
+
sibling packages, are opt-in, and never gate.
|
|
102
|
+
- **A second engine.** Recomputing a verdict from `collectDirDiff` + `aggregateReports` inside
|
|
103
|
+
pal, or spawning `ia-qa-heal` and parsing its text, is the same defect twice.
|
|
104
|
+
- **`accept` as an MCP tool.** Promoting a baseline says *a person reviewed this change and
|
|
105
|
+
meant it*. CLI only, on purpose.
|
|
106
|
+
- **A percentage anywhere.** A QA reads `34%` as code coverage — a ratio over a denominator a
|
|
107
|
+
compiler guarantees. This one is uncertain by construction (login wall, href blindness, the
|
|
108
|
+
page cap, states nobody opened).
|
|
109
|
+
- **Applying repairs automatically**, with or without a flag. See guardrail 4.
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## What would move the version
|
|
114
|
+
|
|
115
|
+
- **A field report that measures something this roadmap does not cover.** Every version above
|
|
116
|
+
was pushed by one, and none by a plan: the pre-flight refusal exists because a tour spent
|
|
117
|
+
eighteen minutes proving what it knew at minute one.
|
|
118
|
+
- **A parity corpus** for Cypress or Selenium at level 2 — that is what turns the last "next"
|
|
119
|
+
item into a shipped one.
|
|
120
|
+
- **Never a version bump to signal activity.** A verdict that did not change does not need a
|
|
121
|
+
new number.
|
package/TUTORIAL.md
CHANGED
|
@@ -108,6 +108,22 @@ The report has at most four sections, and each one appears only when it holds so
|
|
|
108
108
|
| 🔧 **Ready to repair** | with your test suite declared: selector rewrites for your tests (section 7) | review, then apply with `ia-qa-heal fix` |
|
|
109
109
|
| 🔍 **Not seen** | pages not explored, not mapped, not compared, only partly explored, links it could not verify, pages your suite never visits | decide whether it matters |
|
|
110
110
|
|
|
111
|
+
There is a fifth block, above all of them, and it only appears when something needs saying
|
|
112
|
+
before you read anything else:
|
|
113
|
+
|
|
114
|
+
```
|
|
115
|
+
🧭 Read this first
|
|
116
|
+
1 page did not serve the URL you configured — the app sent the browser somewhere else,
|
|
117
|
+
and the contract saved under that name describes the page it landed on: cart →
|
|
118
|
+
https://shop.example/index.php/cart/. No login form was involved, so this is a redirect
|
|
119
|
+
your app performs, not a session problem.
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
That one matters on the **first** tour more than on any later one: the baseline is being
|
|
123
|
+
written right now, and it is being written from the page the app actually served. A test
|
|
124
|
+
expecting the configured page will fail against a contract describing another one. It used to
|
|
125
|
+
appear once, mid-stream, in the middle of the mapping output — which is to say, nowhere.
|
|
126
|
+
|
|
111
127
|
Three things are worth knowing about this first report:
|
|
112
128
|
|
|
113
129
|
- **It is not a pass.** Nothing was compared — there was nothing to compare with. The headline says so.
|
|
@@ -155,10 +171,20 @@ ia-qa-pal tour — https://project-1jpdv.vercel.app · level 2 (with your test s
|
|
|
155
171
|
"nameMask": ["📡Activité*"]
|
|
156
172
|
```
|
|
157
173
|
|
|
158
|
-
|
|
174
|
+
Three kinds of drift, and they do not weigh the same. *To decide* lists them in order of risk — your tests acting on the wrong element first, then a selector now reaching another control, then what is lost, then what became ambiguous:
|
|
159
175
|
|
|
160
176
|
- **What a page shows when it loads** fails the tour. Here, `📡Activité60` is a counter that moved on its own — the 💡 line gives the `nameMask` to paste once.
|
|
161
177
|
- **What is reached only by clicking** is listed with the clicks that reached it and does **not** fail the tour. "Intercepter" exists only while the game has something to intercept: the tour did nothing wrong, the data changed. `--strict` makes these fail too.
|
|
178
|
+
- **A list whose items were replaced** — a catalogue, a feed, a results table — is one line instead of a row per item. On the witness app, eight products rotating half their items and a feed with two new posts made eighteen rows; the tour prints this:
|
|
179
|
+
|
|
180
|
+
```
|
|
181
|
+
⛔ To decide
|
|
182
|
+
drift feed: button "Export" lost
|
|
183
|
+
data feed: the link list a[href="/item/:id"] kept 4, lost 4 ("Item 101", "Item 102", …) and gained 4 ("Item 109", "Item 110", …) — its items changed, the list is still there; 4 rows folded into this line (not failing the tour; --strict would)
|
|
184
|
+
data feed: the button list #latest > li:nth-of-type(*) > button kept 4, lost 2 ("Delta post", "Epsilon post") and gained 2 ("Eta post", "Theta post") — its items changed, the list is still there; 6 rows folded into this line (not failing the tour; --strict would)
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
The lost "Export" button still fails the tour. A list is folded only when it has at least four items, at least two of them gone **and** at least two new ones: an **emptied** list and a control **inserted** above its siblings are never folded, because those are changes to the page, not to its data. A link list is recognised by an id in its path (`/item/101`, `/blog/2026-09-17-…`); items linked by a name alone (`/product/blue-mug`) are not grouped yet.
|
|
162
188
|
|
|
163
189
|
With the `nameMask` added, the next tour of the same game:
|
|
164
190
|
|
|
@@ -223,7 +249,7 @@ The control stays under contract; only its label is no longer compared.
|
|
|
223
249
|
|
|
224
250
|
| code | meaning |
|
|
225
251
|
|---|---|
|
|
226
|
-
| `0` | nothing needs a decision — warnings, proposed repairs
|
|
252
|
+
| `0` | nothing needs a decision — warnings, proposed repairs, drift behind interaction and lists whose items changed never fail a tour (`--strict` changes the last two) |
|
|
227
253
|
| `1` | a dead link, drift on what pages show on load, a test about to act on the wrong element, or your suite failed under `--suite` |
|
|
228
254
|
| `2` | no answer: not set up, nothing could be mapped, the tour refused to run, or one is already running |
|
|
229
255
|
|
|
@@ -280,6 +306,38 @@ npx ia-qa-pal setup --url https://staging.shop.example --login session --session
|
|
|
280
306
|
|
|
281
307
|
**A login form filled from environment variables** is set up with `npx -p @ia-qa/self-healing ia-qa-heal init`, which writes the variable *names*, never their values.
|
|
282
308
|
|
|
309
|
+
### When a tour says every page landed on a login
|
|
310
|
+
|
|
311
|
+
A session expires, and then nothing can be captured. Two things happen now, and both exist
|
|
312
|
+
because a tour once spent eighteen minutes discovering what it already knew at minute one.
|
|
313
|
+
|
|
314
|
+
**The tour stops instead of continuing.** With no page captured there is nothing to compare,
|
|
315
|
+
so the verdict would be "no comparable page" whatever the rest of the run did. It says so,
|
|
316
|
+
names the cause, and — if you passed `--suite` — tells you the suite was **not** run and why:
|
|
317
|
+
its result could not have been compared to anything.
|
|
318
|
+
|
|
319
|
+
**And it points at the one command that tells you which failure this is:**
|
|
320
|
+
|
|
321
|
+
```bash
|
|
322
|
+
npx -p @ia-qa/self-healing ia-qa-heal session --check
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
It separates *expired* (log in again), *wrong-host* (your session and your app's URL are
|
|
326
|
+
different applications — logging in again produces the identical file) and *rotated* (the
|
|
327
|
+
server dropped a session that still looks valid). The first two are answered from the file
|
|
328
|
+
itself, without opening a browser.
|
|
329
|
+
|
|
330
|
+
If what you actually wanted was the coverage half, it survives a dead session — your suite
|
|
331
|
+
logs itself in:
|
|
332
|
+
|
|
333
|
+
```bash
|
|
334
|
+
npx ia-qa-pal tour --suite-only
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
No capture, no comparison, no verdict: just which pages your tests visit. The report leads with
|
|
338
|
+
*« Suite only — nothing was captured and nothing was compared, by design »* and names the pages
|
|
339
|
+
the command never reaches. It is not a pass and not a failure: no verdict was sought.
|
|
340
|
+
|
|
283
341
|
---
|
|
284
342
|
|
|
285
343
|
## 7. With your test suite
|
|
@@ -374,7 +432,20 @@ Never commit `.ia-qa/session.json`.
|
|
|
374
432
|
|
|
375
433
|
## 10. With an AI agent
|
|
376
434
|
|
|
377
|
-
|
|
435
|
+
**Start here — one command, and the agent knows the whole thing:**
|
|
436
|
+
|
|
437
|
+
```bash
|
|
438
|
+
npx -p @ia-qa/pal ia-qa-pal skill --install
|
|
439
|
+
```
|
|
440
|
+
|
|
441
|
+
That writes `.claude/skills/ia-qa-pal/SKILL.md` — the order the verbs go in, what each section
|
|
442
|
+
of the report means, what every exit code means, and the eight things an agent must never do
|
|
443
|
+
(call a first tour a pass, drop *Not seen*, apply the proposed repairs, add `--suite` without
|
|
444
|
+
asking, re-run a tour that mapped nothing instead of checking the session…). Agents read
|
|
445
|
+
`.claude/skills/`, never `node_modules`, so the file has to land there to exist at all.
|
|
446
|
+
`--print` reads it to stdout without writing anything; `--user` installs it for every project.
|
|
447
|
+
|
|
448
|
+
An agent can then drive `ia-qa-pal` from a shell, or through its local MCP server:
|
|
378
449
|
|
|
379
450
|
```json
|
|
380
451
|
{ "mcpServers": { "ia-qa-pal": { "command": "npx", "args": ["-y", "-p", "@ia-qa/pal", "ia-qa-pal-mcp"] } } }
|
package/dist/cli/index.js
CHANGED
|
@@ -42,6 +42,7 @@ const run_1 = require("../run");
|
|
|
42
42
|
const accept_1 = require("../accept");
|
|
43
43
|
const htmlReport_1 = require("../htmlReport");
|
|
44
44
|
const rebaseline_1 = require("../rebaseline");
|
|
45
|
+
const skill_1 = require("./skill");
|
|
45
46
|
const VERSION = require('../../package.json').version;
|
|
46
47
|
const HELP = `ia-qa-pal — a QA pal next to your team
|
|
47
48
|
|
|
@@ -70,13 +71,18 @@ Usage:
|
|
|
70
71
|
learn which pages they never visit. Runs "pal":
|
|
71
72
|
{ "testCommand": … } from config.json when it is
|
|
72
73
|
declared (a shorter command), else "testCommand"
|
|
74
|
+
--suite-only run ONLY that suite, for coverage: no capture, no
|
|
75
|
+
comparison, no verdict. The way to measure which
|
|
76
|
+
pages your tests visit when the session is not
|
|
77
|
+
opening the app
|
|
73
78
|
--background start the tour detached and return at once;
|
|
74
79
|
follow it with \`ia-qa-pal status\`
|
|
75
80
|
--all-contracts judge every contract in .ia-qa/mapping/, not only
|
|
76
81
|
the pages your config declares (default: declared only)
|
|
77
82
|
--strict also fail on drift behind interaction (elements
|
|
78
83
|
reached only by clicking, which may depend on
|
|
79
|
-
the data the click lands on)
|
|
84
|
+
the data the click lands on) and on lists whose
|
|
85
|
+
items were replaced (a catalogue, a feed)
|
|
80
86
|
--batch <n> pages per depth batch (default 10)
|
|
81
87
|
--json the report as one JSON document on stdout
|
|
82
88
|
--report [file.html] also write the report as a web page (default
|
|
@@ -113,6 +119,15 @@ Usage:
|
|
|
113
119
|
--json as one JSON document
|
|
114
120
|
--config <dir> project folder (default: here)
|
|
115
121
|
|
|
122
|
+
ia-qa-pal skill This CLI's agent instructions: the order the verbs go
|
|
123
|
+
in, what each section of the report means, and what an
|
|
124
|
+
agent must never do. Read them first.
|
|
125
|
+
--print write them to stdout and stop
|
|
126
|
+
--install write .claude/skills/ia-qa-pal/
|
|
127
|
+
--user into ~/ instead of this project
|
|
128
|
+
--dir <d> into another project root
|
|
129
|
+
--force overwrite an edited copy
|
|
130
|
+
|
|
116
131
|
ia-qa-pal setup Write .ia-qa/config.json: the app address, how it
|
|
117
132
|
logs in, its pages (from sitemap.xml, else by
|
|
118
133
|
following its links), and your test suite.
|
|
@@ -229,6 +244,10 @@ async function main() {
|
|
|
229
244
|
process.exitCode = outcome.written ? 0 : 2;
|
|
230
245
|
return;
|
|
231
246
|
}
|
|
247
|
+
if (command === 'skill') {
|
|
248
|
+
await (0, skill_1.runSkill)(args.slice(1));
|
|
249
|
+
return;
|
|
250
|
+
}
|
|
232
251
|
if (command === 'accept') {
|
|
233
252
|
const pages = args.slice(1).filter((a, i, all) => !a.startsWith('--') && all[i - 1] !== '--config');
|
|
234
253
|
const outcome = await (0, accept_1.acceptPages)(dir, pages, { all: args.includes('--all') });
|
|
@@ -285,7 +304,7 @@ async function main() {
|
|
|
285
304
|
const batch = batchRaw === undefined ? undefined : Number(batchRaw);
|
|
286
305
|
if (batch !== undefined && (!Number.isInteger(batch) || batch < 1))
|
|
287
306
|
throw new Error('--batch needs a positive whole number.');
|
|
288
|
-
const tourOptions = { more: args.includes('--more'), suite: args.includes('--suite'), strict: args.includes('--strict'), allContracts: args.includes('--all-contracts'), batch, session: valueOf(args, '--session') };
|
|
307
|
+
const tourOptions = { more: args.includes('--more'), suite: args.includes('--suite') || args.includes('--suite-only'), suiteOnly: args.includes('--suite-only'), strict: args.includes('--strict'), allContracts: args.includes('--all-contracts'), batch, session: valueOf(args, '--session') };
|
|
289
308
|
if (args.includes('--background')) {
|
|
290
309
|
const started = (0, run_1.startBackground)(dir, tourOptions);
|
|
291
310
|
if (json)
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `ia-qa-pal skill` — install this CLI's agent instructions.
|
|
3
|
+
*
|
|
4
|
+
* Same reasoning as its two siblings: agents read `.claude/skills/`, never `node_modules`, so
|
|
5
|
+
* the verb is what makes the markdown reach anyone. The implementation is imported from
|
|
6
|
+
* `@ia-qa/self-healing` — pal composes that package everywhere else, and a hand-copied verb
|
|
7
|
+
* here would be the one place it does not.
|
|
8
|
+
*/
|
|
9
|
+
export declare const SKILL_NAME = "ia-qa-pal";
|
|
10
|
+
export declare const skillSourcePath: () => string;
|
|
11
|
+
export declare const readSkill: () => string;
|
|
12
|
+
export declare const skillTargetDir: (opts: {
|
|
13
|
+
user?: boolean;
|
|
14
|
+
dir?: string;
|
|
15
|
+
}) => string;
|
|
16
|
+
export declare const runSkill: (args: string[]) => Promise<void>;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.runSkill = exports.skillTargetDir = exports.readSkill = exports.skillSourcePath = exports.SKILL_NAME = void 0;
|
|
37
|
+
const path = __importStar(require("path"));
|
|
38
|
+
const self_healing_1 = require("@ia-qa/self-healing");
|
|
39
|
+
/**
|
|
40
|
+
* `ia-qa-pal skill` — install this CLI's agent instructions.
|
|
41
|
+
*
|
|
42
|
+
* Same reasoning as its two siblings: agents read `.claude/skills/`, never `node_modules`, so
|
|
43
|
+
* the verb is what makes the markdown reach anyone. The implementation is imported from
|
|
44
|
+
* `@ia-qa/self-healing` — pal composes that package everywhere else, and a hand-copied verb
|
|
45
|
+
* here would be the one place it does not.
|
|
46
|
+
*/
|
|
47
|
+
exports.SKILL_NAME = 'ia-qa-pal';
|
|
48
|
+
const verb = (0, self_healing_1.createSkillVerb)({
|
|
49
|
+
name: exports.SKILL_NAME,
|
|
50
|
+
cli: 'ia-qa-pal',
|
|
51
|
+
packageRoot: path.join(__dirname, '..', '..'),
|
|
52
|
+
});
|
|
53
|
+
exports.skillSourcePath = verb.skillSourcePath;
|
|
54
|
+
exports.readSkill = verb.readSkill;
|
|
55
|
+
exports.skillTargetDir = verb.skillTargetDir;
|
|
56
|
+
exports.runSkill = verb.runSkill;
|
|
57
|
+
//# sourceMappingURL=skill.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill.js","sourceRoot":"","sources":["../../src/cli/skill.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAA6B;AAC7B,sDAAsD;AAEtD;;;;;;;GAOG;AACU,QAAA,UAAU,GAAG,WAAW,CAAC;AAEtC,MAAM,IAAI,GAAG,IAAA,8BAAe,EAAC;IAC3B,IAAI,EAAE,kBAAU;IAChB,GAAG,EAAE,WAAW;IAChB,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC;CAC9C,CAAC,CAAC;AAEU,QAAA,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;AACvC,QAAA,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;AAC3B,QAAA,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;AACrC,QAAA,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC"}
|
package/dist/history.js
CHANGED
|
@@ -51,6 +51,10 @@ function moodOf(r) {
|
|
|
51
51
|
return 'no-answer';
|
|
52
52
|
if (r.exitCode === 1)
|
|
53
53
|
return 'broken';
|
|
54
|
+
// Nothing was compared, on purpose. Not a pass over the app — no verdict was sought — and
|
|
55
|
+
// not an alarm either. `baseline` is the mood that already means "measured, not judged".
|
|
56
|
+
if (r.suiteOnly)
|
|
57
|
+
return 'baseline';
|
|
54
58
|
if (r.mode !== 'regression')
|
|
55
59
|
return 'baseline';
|
|
56
60
|
const d = r.drift;
|
package/dist/history.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"history.js","sourceRoot":"","sources":["../src/history.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BA,
|
|
1
|
+
{"version":3,"file":"history.js","sourceRoot":"","sources":["../src/history.ts"],"names":[],"mappings":"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"}
|
package/dist/htmlReport.js
CHANGED
|
@@ -124,22 +124,26 @@ function renderHtmlReport(r, history = [], meta = {}) {
|
|
|
124
124
|
broken.push(item(`<span class="tag red">suite</span> your test command exited ${s.run.exitCode}: <code>${esc(s.run.command)}</code>`));
|
|
125
125
|
}
|
|
126
126
|
const decide = [];
|
|
127
|
+
const sf = d?.suiteFindings;
|
|
127
128
|
if (d) {
|
|
128
|
-
for (const f of d.onLoad)
|
|
129
|
-
decide.push(item(`<span class="tag red">${esc(f.status)}</span> <strong>${esc(f.page)}</strong> · ${esc(f.role)} “${esc(f.name)}” <span class="muted">visible on load — fails the tour</span>`));
|
|
130
129
|
for (const page of d.suitePages)
|
|
131
130
|
decide.push(item(`<span class="tag red">tests</span> <strong>${esc(page)}</strong> · your tests would act on the wrong element ${cmd('npx -p @ia-qa/self-healing ia-qa-heal diff')}`));
|
|
131
|
+
}
|
|
132
|
+
if (sf && sf.names + sf.bindings > 0) {
|
|
133
|
+
decide.push(item(`<span class="tag red">tests</span> ${[sf.names > 0 ? `${plural(sf.names, 'renamed label')} your tests locate by name` : '', sf.bindings > 0 ? `${plural(sf.bindings, 'selector')} your tests write changed what they reach` : ''].filter(Boolean).join(' · ')} ${cmd('npx -p @ia-qa/self-healing ia-qa-heal diff')}`));
|
|
134
|
+
}
|
|
135
|
+
if (d) {
|
|
136
|
+
for (const f of d.onLoad)
|
|
137
|
+
decide.push(item(`<span class="tag red">${esc(f.status)}</span> <strong>${esc(f.page)}</strong> · ${esc(f.role)} “${esc(f.name)}” <span class="muted">visible on load — fails the tour</span>`));
|
|
132
138
|
for (const f of d.behindInteraction) {
|
|
133
139
|
decide.push(item(`<span class="tag amber">${esc(f.status)}</span> <strong>${esc(f.page)}</strong> · ${esc(f.role)} “${esc(f.name)}” <span class="path">after ${f.via.map((v) => `<span class="step">${esc(v)}</span>`).join('<span class="arrow">→</span>')}</span> <span class="muted">reached only by clicking — may depend on the data${d.gating ? '' : ', not failing the tour'}</span>`, 'soft'));
|
|
134
140
|
}
|
|
141
|
+
for (const l of d.dataLists ?? [])
|
|
142
|
+
decide.push(item(`<span class="tag amber">data</span> ${esc((0, report_1.dataListText)(l))} <span class="muted">— not failing the tour; --strict would</span>`, 'soft'));
|
|
135
143
|
const pages = [...new Set([...d.onLoad, ...d.behindInteraction].map((f) => f.page).concat(d.suitePages))];
|
|
136
144
|
if (pages.length > 0)
|
|
137
145
|
decide.push(item(`If these changes are intended, make them the reference for those pages only: ${cmd(`npx -p @ia-qa/pal ia-qa-pal accept ${pages.join(' ')}`)}`, 'hint'));
|
|
138
146
|
}
|
|
139
|
-
const sf = d?.suiteFindings;
|
|
140
|
-
if (sf && sf.names + sf.bindings > 0) {
|
|
141
|
-
decide.push(item(`<span class="tag red">tests</span> ${[sf.names > 0 ? `${plural(sf.names, 'renamed label')} your tests locate by name` : '', sf.bindings > 0 ? `${plural(sf.bindings, 'selector')} your tests write changed what they reach` : ''].filter(Boolean).join(' · ')} ${cmd('npx -p @ia-qa/self-healing ia-qa-heal diff')}`));
|
|
142
|
-
}
|
|
143
147
|
if (r.check) {
|
|
144
148
|
const c = r.check;
|
|
145
149
|
if (c.newUnnamed.length > 0)
|
|
@@ -227,22 +231,28 @@ function renderHtmlReport(r, history = [], meta = {}) {
|
|
|
227
231
|
.map(([k, v, tone]) => `<span class="chip ${tone}"><strong>${v}</strong> ${k}</span>`)
|
|
228
232
|
.join('')
|
|
229
233
|
: '';
|
|
234
|
+
// The suite-only sentence comes from so this renderer cannot word it
|
|
235
|
+
// differently — it used to say a reference had been established over a run that captured
|
|
236
|
+
// nothing.
|
|
237
|
+
const onlySuite = (0, report_1.suiteOnlyHeadline)(r);
|
|
230
238
|
const headline = r.refused
|
|
231
239
|
? esc(r.refused)
|
|
232
|
-
:
|
|
233
|
-
?
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
: d
|
|
244
|
-
?
|
|
245
|
-
:
|
|
240
|
+
: onlySuite
|
|
241
|
+
? esc(onlySuite)
|
|
242
|
+
: mood === 'baseline'
|
|
243
|
+
? r.mode === 'explore'
|
|
244
|
+
? {
|
|
245
|
+
explored: `${plural(p.exploredThisTour.length, 'page')} explored in depth and added to the reference`,
|
|
246
|
+
'nothing-mapped': 'Nothing was explored — no page is under contract yet',
|
|
247
|
+
'nothing-openable': 'Nothing to explore — no page under contract has a closed menu, tab or dialog',
|
|
248
|
+
'all-explored': 'Nothing left to explore — every page with closed controls is already explored in depth',
|
|
249
|
+
}[(0, report_1.exploreOutcome)(r)]
|
|
250
|
+
: 'Nothing to compare yet — this tour is the reference the next one measures against'
|
|
251
|
+
: d && d.verdict === 'BLOCK' && !d.gating
|
|
252
|
+
? `${(0, report_1.softDriftWhere)(d)} — not failing the tour`
|
|
253
|
+
: d
|
|
254
|
+
? `Compared with the baseline: ${d.verdict}`
|
|
255
|
+
: 'No page could be compared this tour';
|
|
246
256
|
const needing = p.explored + p.notExplored.length;
|
|
247
257
|
const gauges = [
|
|
248
258
|
gauge('Pages under contract', p.underContract, p.configured),
|