@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 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
- Two kinds of drift, and they do not weigh the same:
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 and drift behind interaction never fail a tour |
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
- An agent can drive `ia-qa-pal` from a shell, or through its local MCP server:
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)
@@ -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;
@@ -1 +1 @@
1
- {"version":3,"file":"history.js","sourceRoot":"","sources":["../src/history.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"history.js","sourceRoot":"","sources":["../src/history.ts"],"names":[],"mappings":"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"}
@@ -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
- : mood === 'baseline'
233
- ? r.mode === 'explore'
234
- ? {
235
- explored: `${plural(p.exploredThisTour.length, 'page')} explored in depth and added to the reference`,
236
- 'nothing-mapped': 'Nothing was explored — no page is under contract yet',
237
- 'nothing-openable': 'Nothing to explore — no page under contract has a closed menu, tab or dialog',
238
- 'all-explored': 'Nothing left to explore — every page with closed controls is already explored in depth',
239
- }[(0, report_1.exploreOutcome)(r)]
240
- : 'Nothing to compare yet — this tour is the reference the next one measures against'
241
- : d && d.verdict === 'BLOCK' && !d.gating
242
- ? 'Drift only behind interaction — not failing the tour'
243
- : d
244
- ? `Compared with the baseline: ${d.verdict}`
245
- : 'No page could be compared this tour';
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),