@vijaypjavvadi/bdd2pw 4.1.0 → 4.3.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/CHANGELOG.md CHANGED
@@ -9,6 +9,250 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
9
9
 
10
10
  _Nothing yet._
11
11
 
12
+ ## [4.3.0] — 2026-09-18
13
+
14
+ ### Theme: in-process self-healing via `@vijaypjavvadi/pw-self-heal`
15
+
16
+ `--self-healing` used to emit a 450-line `lib/heal.ts` shim, patch
17
+ `tsconfig.json` with a path alias, and require an external HTTP
18
+ service at `SELF_HEALING_URL` to actually rank replacement locators.
19
+ That worked but the operational burden — a Python service, a
20
+ database, network hop on every heal — meant most users never turned
21
+ it on.
22
+
23
+ v4.3 replaces that entire stack with `@vijaypjavvadi/pw-self-heal`
24
+ — the trained-ONNX-ranker sibling package with a published Zenodo
25
+ DOI (10.5281/zenodo.19684439). It runs in-process, needs no server,
26
+ no API key, no Python, and the DOM never leaves the machine.
27
+
28
+ Emitted repos with `--self-healing` now get a **3-line**
29
+ `tests/fixtures.ts`:
30
+
31
+ ```typescript
32
+ import { test as base } from "@playwright/test";
33
+ import { withSelfHealing } from "@vijaypjavvadi/pw-self-heal";
34
+ export const test = withSelfHealing(base, { mode: "hybrid" });
35
+ export { expect } from "@playwright/test";
36
+ ```
37
+
38
+ Every emitted spec's top-of-file import auto-rewrites from
39
+ `@playwright/test` to `./fixtures`. POM classes are unchanged —
40
+ they receive the healing-wrapped `page` transparently, so
41
+ `await loginPage.usernameInput.fill("x")` heals on locator drift
42
+ without a single `healOrThrow(...)` wrapper.
43
+
44
+ ### Added — pw-self-heal scaffold emission (default when `--self-healing`)
45
+
46
+ - **`tests/fixtures.ts`** — wraps `@playwright/test`'s base `test`
47
+ with `withSelfHealing({ mode })`. Re-exports `test` and `expect`.
48
+ Overwritten idempotently on every re-scaffold so mode changes
49
+ propagate; hand-editing this file is supported (rename it or move
50
+ it out of `tests/` to prevent overwrite).
51
+ - **`.pwheal/.gitkeep`** — placeholder so the telemetry directory
52
+ exists on fresh clones. pw-self-heal appends
53
+ `.pwheal/heal-events.jsonl` at runtime; the JSONL itself is
54
+ gitignored.
55
+ - **Emitted `package.json` devDependencies** get
56
+ `@vijaypjavvadi/pw-self-heal ^1.1.2` unconditionally, and
57
+ `onnxruntime-node ^1.18.0` only when the ranker mode is `ml` or
58
+ `hybrid` (the `heuristic` mode has zero native deps).
59
+ - **Spec import rewrite** — the top-of-file
60
+ `import { test, expect } from "@playwright/test"` in every
61
+ emitted spec is redirected to `"./fixtures"` when
62
+ `--self-healing` is on without `--legacy-healing`. Exact single-
63
+ line regex — inline type-only imports elsewhere in the spec are
64
+ left untouched.
65
+ - **POM emission** — `--self-healing` no longer passes
66
+ `selfHealingShim: true` to `pw-emit`, so POM fields are plain
67
+ `page.getByLabel(...)` calls without the `healOrThrow(page, {...})`
68
+ wrapping. The healing happens invisibly through the wrapped
69
+ fixture instead.
70
+
71
+ ### Added — CLI flags
72
+
73
+ - **`--self-healing-mode <heuristic|ml|hybrid>`** — pass through to
74
+ `withSelfHealing({ mode })`. Default `hybrid`. Matches pw-self-heal's
75
+ production default (0.4·heuristic + 0.6·ml, 68.63% HSR on their
76
+ bench).
77
+ - **`--legacy-healing`** — DEPRECATED. Keeps emitting the v4.2
78
+ `lib/heal.ts` + external service shim for one release. Prints a
79
+ `warn`-severity entry in `BDD_REVIEW.md` so users see the
80
+ deprecation path. Removed in v5.0.
81
+
82
+ ### Added — API surface
83
+
84
+ Two new optional fields on the public types:
85
+
86
+ ```typescript
87
+ interface ScaffoldOptions {
88
+ // ... existing fields
89
+ selfHealingMode?: "heuristic" | "ml" | "hybrid"; // v4.3.0
90
+ legacyHealing?: boolean; // v4.3.0
91
+ }
92
+ ```
93
+
94
+ ### Added — tests
95
+
96
+ - 10-case vitest suite in `tests/unit/v430PwSelfHeal.test.ts`
97
+ covering: default mode, mode override, re-emit idempotency,
98
+ `.pwheal` gitkeep, package.json devDependency patching (hybrid
99
+ vs. heuristic), legacy-healing deprecation warning, and
100
+ self-healing-off no-op.
101
+ - 8-case Node.js smoke runner in `scripts/smoke-v430-selfheal.mjs`
102
+ that bypasses vitest.
103
+
104
+ ### Deprecated
105
+
106
+ - **`--legacy-healing`** (v4.3.0 → removed in v5.0.0). One-release
107
+ window for existing users to migrate off the external
108
+ `SELF_HEALING_URL` service. The `bdd2pw heal-stats` CLI continues
109
+ to work — it now reads `.pwheal/heal-events.jsonl` by default
110
+ and falls back to the v4.2 `artefacts/heal-events.jsonl` path.
111
+
112
+ ### No breaking changes
113
+
114
+ Users NOT passing `--self-healing` see identical output to v4.2.
115
+ Users on `--self-healing --legacy-healing` see the same
116
+ lib/heal.ts + tsconfig-alias emission as v4.2. Users adopting the
117
+ new `--self-healing` default get a smaller emitted repo (no
118
+ `lib/heal.ts`, no tsconfig `paths`, no external service required)
119
+ plus a strictly better runtime healer.
120
+
121
+ ### Migration
122
+
123
+ `npm i @vijaypjavvadi/bdd2pw@4.3.0` — no code changes required.
124
+ Re-scaffold repos that use `--self-healing` and the new fixture
125
+ wiring lands automatically. If you were relying on the v4.2
126
+ `SELF_HEALING_URL` service, either:
127
+
128
+ 1. Drop it and adopt the new default (recommended — trained ONNX
129
+ ranker with a published DOI, no service to run).
130
+ 2. Pass `--legacy-healing` for one release while you plan the
131
+ migration. Deprecation warning appears in `BDD_REVIEW.md`.
132
+
133
+ ## [4.2.0] — 2026-09-02
134
+
135
+ ### Theme: Silent problems, made loud — DOM drift detection
136
+
137
+ Silent UI changes are the second-worst failure mode in Playwright
138
+ suites (the worst being flaky locators — which bdd2pw's healing loop
139
+ already addresses). A vendor updates their design system, a component
140
+ library rolls out a new variant, a form input's role attribute
141
+ changes — and a week later three tests start failing with `element
142
+ not found` and no obvious cause. The team spends an hour bisecting
143
+ the DOM instead of an hour fixing the UI.
144
+
145
+ v4.2 embeds a **stable sha256 of the page's accessibility tree** in
146
+ every emitted POM's header comment. On re-scaffold, bdd2pw compares
147
+ the new snapshot against the hash stored in the existing POM. If
148
+ they differ, a `DOM DRIFT` warning lands in `BDD_REVIEW.md` with
149
+ both hashes and a suggested triage path. A new `--fail-on-drift`
150
+ CLI flag turns the warning into a non-zero exit code so CI can
151
+ gate merges on silent UI regressions.
152
+
153
+ Credit for the idea: a LinkedIn commenter on the v4.1 release post
154
+ suggested "version the emitted POM against a DOM snapshot hash so a
155
+ silent UI change shows up as a diff rather than a mystery failure
156
+ next run." That's exactly what v4.2 does.
157
+
158
+ ### Added — DOM-hash utilities (`src/discovery/domHash.ts`)
159
+
160
+ - `computeDomHash(snapshot)` — deterministic sha256 of the
161
+ accessibility tree via canonical JSON stringify (sorted keys at
162
+ every object level). Identical trees always produce identical
163
+ hashes regardless of MCP's property ordering. Only the tree
164
+ contributes to the hash — url, title, and raw DOM string are
165
+ ignored so unrelated changes don't false-positive.
166
+ - `buildDomHashHeader(hash, url, at?)` — the JSDoc-formatted
167
+ `@bdd2pw` comment block prepended to every emitted POM.
168
+ - `extractDomHashFromPom(contents)` — reverse operation for drift
169
+ detection on re-scaffold.
170
+ - `prependDomHashHeader(contents, header)` — idempotent header
171
+ injection; replaces any prior `@bdd2pw` block instead of
172
+ stacking duplicates.
173
+
174
+ ### Added — POM header emission
175
+
176
+ Every emitted POM now carries a comment block above the imports:
177
+
178
+ ```typescript
179
+ /**
180
+ * @bdd2pw generated 2026-09-02T14:32:00.000Z
181
+ * @bdd2pw dom-hash a3f8c2e4d5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2
182
+ * @bdd2pw url https://saucedemo.com/
183
+ *
184
+ * The dom-hash line is used by bdd2pw to detect DOM drift on
185
+ * re-scaffold. Do not edit it by hand — regenerate with `bdd2pw
186
+ * scaffold` or `bdd2pw update-pom` to refresh.
187
+ */
188
+ import { Page } from "@playwright/test";
189
+ export class LoginPage { ... }
190
+ ```
191
+
192
+ Emission is unconditional — deterministic-only runs, LLM-fallback
193
+ runs, and `--dry-run` all produce the header when a snapshot exists.
194
+ `--no-discovery` runs (no snapshot) skip the header, and re-scaffold
195
+ against a v4.1-or-earlier POM emits an info-level `BDD_REVIEW.md`
196
+ note that says the baseline hash was just planted.
197
+
198
+ ### Added — drift detection on re-scaffold
199
+
200
+ When `scaffold()` runs in `augment` mode (existing POM present) and
201
+ the new snapshot's hash differs from the one embedded in the POM:
202
+
203
+ - A `warn`-severity `ReviewItem` is added to `BDD_REVIEW.md` with
204
+ both truncated hashes and a suggested review path.
205
+ - `ScaffoldResult.driftDetected` is set to `true` for programmatic
206
+ callers.
207
+
208
+ ### Added — `--fail-on-drift` CLI flag
209
+
210
+ `bdd2pw scaffold ... --fail-on-drift` exits with code `2` when
211
+ drift is detected, AFTER the scaffold completes writing (so
212
+ `BDD_REVIEW.md` and the refreshed POM are still on disk for the
213
+ developer to inspect). Exit code `2` is distinct from `1` (used for
214
+ other scaffold errors) so CI can special-case drift vs. real failures.
215
+
216
+ ### Added — API surface
217
+
218
+ Two new optional fields on the public types:
219
+
220
+ ```typescript
221
+ interface ScaffoldOptions {
222
+ // ... existing fields
223
+ failOnDrift?: boolean; // v4.2.0
224
+ }
225
+
226
+ interface ScaffoldResult {
227
+ // ... existing fields
228
+ driftDetected?: boolean; // v4.2.0
229
+ }
230
+ ```
231
+
232
+ ### Added — tests
233
+
234
+ - 15-case vitest suite in `tests/unit/v420DomHash.test.ts` covering
235
+ hash determinism, canonical key ordering, round-trip
236
+ extract/build, and idempotent header injection.
237
+ - 11-case Node.js smoke runner in `scripts/smoke-v420-domhash.mjs`
238
+ that bypasses vitest.
239
+
240
+ ### No breaking changes
241
+
242
+ Additive-only. Programmatic callers that don't set `failOnDrift`
243
+ see no behavioural change (drift is still detected and reported in
244
+ `BDD_REVIEW.md`, but the process exit code is unchanged). Emitted
245
+ POMs gain a comment block above the imports; all downstream
246
+ consumers (Playwright itself, `merge` mode, `updatePom`) tolerate
247
+ the comment. `updatePom`'s append-only guarantee is preserved.
248
+
249
+ ### Migration
250
+
251
+ `npm i @vijaypjavvadi/bdd2pw@4.2.0` — no code changes required. The
252
+ first re-scaffold of an existing repo plants the baseline hash and
253
+ emits an info-level `BDD_REVIEW.md` line. From the second re-scaffold
254
+ onward, DOM drift will be detected and warned about.
255
+
12
256
  ## [4.1.0] — 2026-08-21
13
257
 
14
258
  ### Theme: LLM-binding rewriter — 3/8 → 8/8 bench apps compile cleanly
package/README.md CHANGED
@@ -25,7 +25,7 @@ Most teams writing BDD test cases (via Cucumber `.feature` files, possibly autho
25
25
 
26
26
  Point it at a `.feature` file and a URL. It parses the Gherkin, scans the live page with Chromium, picks the most stable locator for every interactive element, matches each step to a POM method call, and emits a runnable Playwright TypeScript repo — including `playwright.config.ts`, `pages/login.page.ts`, `tests/login.spec.ts`, and a `BDD_REVIEW.md` listing anything a human still needs to look at.
27
27
 
28
- ## What `bdd2pw` is and isn't (as of v4.1.0)
28
+ ## What `bdd2pw` is and isn't (as of v4.3.0)
29
29
 
30
30
  `bdd2pw` is a **deterministic scaffolder with an optional governed LLM fallback across three providers**. The output is honest about its limits:
31
31
 
@@ -39,6 +39,8 @@ Point it at a `.feature` file and a URL. It parses the Gherkin, scans the live p
39
39
  - **Three-provider LLM fallback, batched per scenario** (v3.5 + v3.11 + v3.12) — one Anthropic Claude Sonnet 4.6, OpenAI gpt-4o-mini, or Google Gemini 2.5 Flash call per scenario instead of one per unmatched step. ~75% cost reduction on unmatched-heavy scaffolds. Every prompt goes through the `ai-governance` sidecar's `/sanitize` endpoint (fail-closed on 4xx/5xx/timeout — the run terminates rather than emit ungoverned code).
40
40
  - **Three hallucination-rejection gates on LLM output** (v4.0.1) — invented-helper detection, structured-pomCall guard, and bare-field-call trap. Bindings the LLM emits that would compile-fail land as `// TODO` comments with `BDD_REVIEW.md` entries instead of broken code. Locked by 19 dedicated unit tests.
41
41
  - **Six-pattern LLM-binding rewriter** (v4.1) — mechanically transforms common LLM emission mistakes (invented-helper shapes, bare-field args, unquoted string values, CSS-selector args, `page.<method>` invented-helpers in customBody, Locator-only matchers hallucinated on `page`, bare-identifier assertion locators) into valid Playwright-idiomatic code. Runs *before* the v4.0.1 gates; if a rewrite would still produce broken code, the binding is rejected and lands as TODO. Bench result: 3/8 → **8/8 apps produce specs that pass `tsc --noEmit`**. Locked by 35 unit tests.
42
+ - **DOM-drift detection via POM header hash** (v4.2) — every emitted POM carries a `@bdd2pw dom-hash` comment with a stable sha256 of the page's accessibility tree. On re-scaffold, bdd2pw diffs the new snapshot against the stored hash. Silent UI changes surface as a `DOM DRIFT` warning in `BDD_REVIEW.md` with both hashes and a suggested triage path. `--fail-on-drift` turns it into a non-zero exit code so CI can gate merges on silent UI regressions.
43
+ - **In-process self-healing locators via `@vijaypjavvadi/pw-self-heal`** (v4.3) — `--self-healing` emits a 3-line `tests/fixtures.ts` that wraps the base `test` with `withSelfHealing({ mode })`. Every spec's top-of-file import auto-rewrites to pull `test` + `expect` from `./fixtures` instead of `@playwright/test` directly. POM classes are unchanged; healing is transparent. Ranker: trained ONNX model with a published Zenodo DOI ([10.5281/zenodo.19684439](https://doi.org/10.5281/zenodo.19684439)), GB AUC 0.9993, three modes (`heuristic` / `ml` / `hybrid`). No server, no API key, no Python — the DOM never leaves the machine.
42
44
  - **Data-driven scaffolds** (v4.0.0) — `--data <path>` injects CSV / JSON / XLSX rows into every Scenario Outline's `Examples:` table; `--gen-data --schema <path> --rows N` generates synthetic rows via Faker + optional per-column LLM calls (`llm:auto insurance claim description`); seeded (`--seed 42`) for reproducibility.
43
45
  - **`updatePom` is append-only by construction.** Re-scanning a page that already has a Page Object adds new locators only. Hand-edited method bodies, custom helper methods, custom imports are all preserved byte-identical.
44
46
  - **`--merge` mode** (v3.2) preserves `// bdd2pw:user-block id="..."` sections across regenerations so iterative locator tuning doesn't lose work.
@@ -362,20 +364,24 @@ output/
362
364
  | v3.10.0 | Heal stats | `bdd2pw heal-stats <repo>` CLI consumes `artefacts/heal-events.jsonl` and writes `heal-stats.json` with heal rate, top failing fields, top error patterns, retry latency, candidate-selector promotions. Self-healing ROI per test run. |
363
365
  | v3.11.0 | OpenAI provider | `LLMClientOptions.provider: "openai"` lands with cache + governance + batching + telemetry parity. Default model `gpt-4o-mini` (~17x cheaper than `gpt-4o` for structured-JSON tasks). |
364
366
  | v3.12.0 | Gemini provider | `LLMClientOptions.provider: "gemini"` lands with full parity. Default model `gemini-2.5-flash` ($0.10/M input — cheapest across all three providers). Three-provider parity complete. |
365
- | **v4.0.0 (current)** | Data-driven scaffolds | `--data <path>` (CSV/JSON/XLSX) and `--gen-data --schema <path>` (Faker + LLM) inject Examples rows into Scenario Outlines. `LLMClient.generateText()` added to all three providers. **Additive only — no breaking changes.** |
367
+ | v4.0.0 | Data-driven scaffolds | `--data <path>` (CSV/JSON/XLSX) and `--gen-data --schema <path>` (Faker + LLM) inject Examples rows into Scenario Outlines. `LLMClient.generateText()` added to all three providers. **Additive only — no breaking changes.** |
368
+ | v4.0.1 | LLM hallucination gates | Three-layer rejector for invented POM helpers — bindings that would compile-fail land as TODO instead of broken code. 19 unit tests lock the behaviour. |
369
+ | v4.1.0 | LLM binding rewriter | Six-pattern rewriter that mechanically fixes common LLM emission mistakes (invented helpers, bare-field args, CSS-selector args, `page.<method>` in customBody, hallucinated Page matchers, bare-identifier assertion locators). Bench result: 3/8 → **8/8 apps produce specs that pass `tsc --noEmit`**. Peer-reviewed publication in Elsevier SoftwareX. |
370
+ | v4.2.0 | DOM-drift detection | Every emitted POM carries a `@bdd2pw dom-hash` header (sha256 of the accessibility tree). Re-scaffold diffs against the stored hash and surfaces silent UI changes in `BDD_REVIEW.md`. `--fail-on-drift` CLI flag exits non-zero when drift is detected (CI merge gate). |
371
+ | **v4.3.0 (current)** | pw-self-heal integration | `--self-healing` swaps the v4.2 lib/heal.ts + external service shim for `@vijaypjavvadi/pw-self-heal` — trained ONNX ranker (Zenodo DOI 10.5281/zenodo.19684439), in-process, no server. Emits a 3-line `tests/fixtures.ts`; POM classes unchanged. `--legacy-healing` keeps v4.2 behaviour for one release. |
366
372
 
367
- ### Next 6 months (Jun 2026 → Nov 2026, ~2 releases/month)
373
+ ### Next 6 months (Oct 2026 → Mar 2027, ~1 release/month)
368
374
 
369
375
  | Target | Version | Theme | Headline |
370
376
  |---|---|---|---|
371
- | Aug 2026 | **v3.13.0** | Auto-rules | `bdd2pw apply-proposals --interactive` — walks the human through each v3.6 proposal, validates the regex compiles + matches the sample texts, optionally appends to `stepMatcher.ts`. Closes the propose-rules loop. |
372
- | Aug 2026 | **v4.1.0** | Modern defaults | Bump default models, retire v2.x deprecated APIs, flip opt-in defaults (domains, llm-stats, healing) to opt-out. Migration guide ships alongside. |
373
- | Sep 2026 | **v4.1.0** | sel2pw merge | sel2pw migrated onto `@vijaypjavvadi/pw-emit` — three packages share one emitter. All future v3.x emitter improvements automatically flow to Selenium users. |
374
- | Sep 2026 | **v4.2.0** | Domain packs | Three more opt-in packs: **fintech** (KYC, AML, trading desks), **real-estate** (MLS, listings, escrow), **hospitality** (PMS, reservations, OTA). ~60 more rules. |
375
- | Oct 2026 | **v4.3.0** | API v2 | WebSocket assertion rules, multipart file-upload patterns, GraphQL query / mutation / subscription rules. Extends v3.0's API testing surface. |
376
- | Oct 2026 | **v4.4.0** | Coverage analyzer | `bdd2pw coverage` CLI: which deterministic rules fired on which features across a fleet, per-pack hit rate, dead-rule report, suggestion to retire unused rules. |
377
- | Nov 2026 | **v4.5.0** | CI/CD templates | Optional scaffolder output: GitHub Actions / GitLab CI / Azure Pipelines / CircleCI starter workflows wired to run the generated specs. Opt-in via `--ci <provider>`. |
378
- | Nov 2026 | **v4.6.0** | Mobile dialect | Touch / swipe / scroll-into-view rules + responsive viewport assertions. Reuses the same emitter pipeline; opt-in via `domains: ["mobile"]`. |
377
+ | Oct 2026 | **v4.4.0** | LLM quarantine lane | `@llm-generated` Playwright tag on every LLM-derived scenario + `bdd2pw quarantine-stats` CLI that reports pass rate for the LLM-fallback lane separately from the deterministic lane. Teams can filter runs with `--grep-invert @llm-generated` for a "trusted only" execution. |
378
+ | Nov 2026 | **v4.5.0** | sel2pw merge | sel2pw migrated onto `@vijaypjavvadi/pw-emit` — three packages share one emitter. All future emitter improvements automatically flow to Selenium users. |
379
+ | Oct 2026 | **v4.5.0** | Auto-rules | `bdd2pw apply-proposals --interactive` — walks the human through each v3.6 proposal, validates the regex compiles + matches the sample texts, optionally appends to `stepMatcher.ts`. Closes the propose-rules loop. |
380
+ | Nov 2026 | **v4.6.0** | Domain packs | Three more opt-in packs: **fintech** (KYC, AML, trading desks), **real-estate** (MLS, listings, escrow), **hospitality** (PMS, reservations, OTA). ~60 more rules. |
381
+ | Nov 2026 | **v4.7.0** | API v2 | WebSocket assertion rules, multipart file-upload patterns, GraphQL query / mutation / subscription rules. Extends v3.0's API testing surface. |
382
+ | Dec 2026 | **v4.8.0** | Coverage analyzer | `bdd2pw coverage` CLI: which deterministic rules fired on which features across a fleet, per-pack hit rate, dead-rule report, suggestion to retire unused rules. |
383
+ | Jan 2027 | **v4.9.0** | CI/CD templates | Optional scaffolder output: GitHub Actions / GitLab CI / Azure Pipelines / CircleCI starter workflows wired to run the generated specs. Opt-in via `--ci <provider>`. |
384
+ | Feb 2027 | **v5.0.0** | Mobile dialect | Touch / swipe / scroll-into-view rules + responsive viewport assertions. Reuses the same emitter pipeline; opt-in via `domains: ["mobile"]`. Bumps to v5 alongside a small set of default flips (llm-stats + healing become opt-out). Migration guide ships alongside. |
379
385
 
380
386
  Each release is shaped to be self-contained, ship in ~2 weeks, and keep `domains: []` byte-stable for existing users so the upgrade path stays painless.
381
387
 
package/dist/cli.js CHANGED
@@ -75,7 +75,9 @@ program
75
75
  .option("--no-validate", "Skip tsc --noEmit step")
76
76
  .option("--telemetry", "Enable local SQLite failure telemetry", false)
77
77
  .option("--force", "Overwrite existing spec files", false)
78
- .option("--self-healing", "Wrap emitted locators in healOrThrow() and generate lib/heal.ts + tsconfig path alias. Locator events are logged to artefacts/heal-events.jsonl for the offline self-heal pipeline. Action-time healing is v1.2.", false)
78
+ .option("--self-healing", "v4.3.0 — wire the emitted test suite to @vijaypjavvadi/pw-self-heal (in-process, trained ONNX ranker, no server). Writes tests/fixtures.ts + adds pw-self-heal to devDependencies. Combine with --legacy-healing to keep the v4.2 lib/heal.ts + external SELF_HEALING_URL service shim (deprecated).", false)
79
+ .option("--self-healing-mode <mode>", "v4.3.0 — pw-self-heal ranker mode: heuristic (no native deps) | ml (ONNX only) | hybrid (default: 0.4·heuristic + 0.6·ml).", "hybrid")
80
+ .option("--legacy-healing", "v4.3.0 — DEPRECATED. Keep emitting the v4.2 lib/heal.ts + external SELF_HEALING_URL service shim instead of the pw-self-heal integration. Removed in v5.0.", false)
79
81
  .option("--llm-stats", "v3.9.0 — write <repo>/artefacts/llm-stats.json with per-call latency, token counts, cache hit rate, and estimated cost.", false)
80
82
  // v3.4.0 — domain rule packs. Comma-separated list of any of:
81
83
  // banking, healthcare, insurance, retail, gov, education, telecom.
@@ -88,6 +90,7 @@ program
88
90
  .option("--schema <path>", "v4.0.0 — JSON schema for --gen-data. Object of {column: source} where source is 'faker.X.Y', 'llm:<prompt>', or a literal string.")
89
91
  .option("--rows <n>", "v4.0.0 — row count for --gen-data. Default 20.", "20")
90
92
  .option("--seed <n>", "v4.0.0 — Faker RNG seed for --gen-data reproducibility. Default 42.", "42")
93
+ .option("--fail-on-drift", "v4.2.0 — exit non-zero when the page's DOM has drifted since the previous scaffold (POM header dom-hash mismatch). Useful in CI to gate merges on silent UI regressions.", false)
91
94
  .action(async (feature, opts) => {
92
95
  try {
93
96
  // v2.0 — wire the actual LLM config when --llm is passed. The legacy
@@ -146,6 +149,13 @@ program
146
149
  // Commander negates --no-discovery into opts.discovery=false
147
150
  noDiscovery: opts.discovery === false,
148
151
  selfHealing: opts.selfHealing,
152
+ // v4.3.0 — pw-self-heal integration.
153
+ selfHealingMode: opts.selfHealingMode === "heuristic" ||
154
+ opts.selfHealingMode === "ml" ||
155
+ opts.selfHealingMode === "hybrid"
156
+ ? opts.selfHealingMode
157
+ : "hybrid",
158
+ legacyHealing: opts.legacyHealing === true,
149
159
  // v3.4.0 — domain rule packs. Empty array if --domains not passed.
150
160
  domains: opts.domains
151
161
  ? opts.domains
@@ -170,8 +180,18 @@ program
170
180
  seed: opts.seed ? Number(opts.seed) : undefined,
171
181
  }
172
182
  : undefined,
183
+ // v4.2.0 — drift gate for CI.
184
+ failOnDrift: opts.failOnDrift === true,
173
185
  });
174
186
  logger_1.logger.info({ result }, "scaffold complete");
187
+ // v4.2.0 — exit non-zero when the user asked to gate on drift
188
+ // and drift was actually detected. Runs AFTER the scaffold has
189
+ // fully written its output so users still see the drift warning
190
+ // in BDD_REVIEW.md and can review the affected fields.
191
+ if (opts.failOnDrift === true && result.driftDetected === true) {
192
+ logger_1.logger.warn("--fail-on-drift set and DOM drift detected; exiting with code 2");
193
+ process.exit(2);
194
+ }
175
195
  }
176
196
  catch (err) {
177
197
  logger_1.logger.error({ err }, "scaffold failed");
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * v4.2.0 — DOM snapshot hashing for POM drift detection.
3
+ *
4
+ * Every emitted POM carries a stable sha256 of the accessibility tree it
5
+ * was generated from. On re-scaffold, bdd2pw compares the new snapshot's
6
+ * hash against the one embedded in the existing POM. If they differ, the
7
+ * UI drifted since the last scaffold — and any downstream test failure
8
+ * suddenly has a specific, actionable explanation: "the page shape
9
+ * changed, here are the affected fields."
10
+ *
11
+ * Detection triggers a `DOM DRIFT` entry in `BDD_REVIEW.md`. When
12
+ * `--fail-on-drift` is set (or `failOnDrift: true` programmatically),
13
+ * `scaffold()` returns `driftDetected: true` and the CLI exits with a
14
+ * non-zero code so CI catches silent UI regressions.
15
+ *
16
+ * Why hash the accessibility tree (not the raw DOM):
17
+ * - The tree is what drives POM field selection — irrelevant DOM shifts
18
+ * (whitespace, comment nodes, class-name churn) shouldn't trigger a
19
+ * drift warning.
20
+ * - Deterministic canonical JSON output means identical trees always
21
+ * produce identical hashes, regardless of key order.
22
+ */
23
+ import type { PageSnapshot } from "./mcpClient";
24
+ /**
25
+ * Compute the sha256 hash of a page snapshot's accessibility tree.
26
+ * Returned as lowercase hex (64 chars).
27
+ */
28
+ export declare function computeDomHash(snapshot: PageSnapshot): string;
29
+ /**
30
+ * Build the POM-header comment that carries the DOM hash. Emitted at the
31
+ * top of every generated POM immediately after any `import` block by
32
+ * `index.ts`.
33
+ *
34
+ * Uses a machine-parseable format so `extractDomHashFromPom` can find
35
+ * the value on re-scaffold. The `bdd2pw:dom-hash` tag is unique enough
36
+ * that a naive substring match works.
37
+ */
38
+ export declare function buildDomHashHeader(hash: string, url: string, generatedAt?: Date): string;
39
+ /**
40
+ * Extract the DOM hash from an existing POM file's contents. Returns
41
+ * undefined if no hash header is present (older POM files predating
42
+ * v4.2, or files where the header was hand-removed).
43
+ */
44
+ export declare function extractDomHashFromPom(pomContents: string): string | undefined;
45
+ /**
46
+ * Prepend the DOM-hash header to a POM file's contents. Placed above
47
+ * any existing text (which typically starts with `import` statements).
48
+ * If a header is already present (idempotent re-emit), it is replaced
49
+ * rather than duplicated.
50
+ */
51
+ export declare function prependDomHashHeader(pomContents: string, header: string): string;
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+ /**
3
+ * v4.2.0 — DOM snapshot hashing for POM drift detection.
4
+ *
5
+ * Every emitted POM carries a stable sha256 of the accessibility tree it
6
+ * was generated from. On re-scaffold, bdd2pw compares the new snapshot's
7
+ * hash against the one embedded in the existing POM. If they differ, the
8
+ * UI drifted since the last scaffold — and any downstream test failure
9
+ * suddenly has a specific, actionable explanation: "the page shape
10
+ * changed, here are the affected fields."
11
+ *
12
+ * Detection triggers a `DOM DRIFT` entry in `BDD_REVIEW.md`. When
13
+ * `--fail-on-drift` is set (or `failOnDrift: true` programmatically),
14
+ * `scaffold()` returns `driftDetected: true` and the CLI exits with a
15
+ * non-zero code so CI catches silent UI regressions.
16
+ *
17
+ * Why hash the accessibility tree (not the raw DOM):
18
+ * - The tree is what drives POM field selection — irrelevant DOM shifts
19
+ * (whitespace, comment nodes, class-name churn) shouldn't trigger a
20
+ * drift warning.
21
+ * - Deterministic canonical JSON output means identical trees always
22
+ * produce identical hashes, regardless of key order.
23
+ */
24
+ Object.defineProperty(exports, "__esModule", { value: true });
25
+ exports.computeDomHash = computeDomHash;
26
+ exports.buildDomHashHeader = buildDomHashHeader;
27
+ exports.extractDomHashFromPom = extractDomHashFromPom;
28
+ exports.prependDomHashHeader = prependDomHashHeader;
29
+ const node_crypto_1 = require("node:crypto");
30
+ /**
31
+ * Canonical JSON stringify — sorted keys at every object level so
32
+ * identical accessibility trees always hash to the same value even if
33
+ * MCP delivered them with different property ordering.
34
+ */
35
+ function canonicalStringify(value) {
36
+ if (value === null)
37
+ return "null";
38
+ if (typeof value !== "object")
39
+ return JSON.stringify(value);
40
+ if (Array.isArray(value)) {
41
+ return "[" + value.map(canonicalStringify).join(",") + "]";
42
+ }
43
+ const obj = value;
44
+ const keys = Object.keys(obj).sort();
45
+ const parts = keys.map((k) => JSON.stringify(k) + ":" + canonicalStringify(obj[k]));
46
+ return "{" + parts.join(",") + "}";
47
+ }
48
+ /**
49
+ * Compute the sha256 hash of a page snapshot's accessibility tree.
50
+ * Returned as lowercase hex (64 chars).
51
+ */
52
+ function computeDomHash(snapshot) {
53
+ const canonical = canonicalStringify(snapshot.accessibilityTree);
54
+ return (0, node_crypto_1.createHash)("sha256").update(canonical, "utf8").digest("hex");
55
+ }
56
+ /**
57
+ * Build the POM-header comment that carries the DOM hash. Emitted at the
58
+ * top of every generated POM immediately after any `import` block by
59
+ * `index.ts`.
60
+ *
61
+ * Uses a machine-parseable format so `extractDomHashFromPom` can find
62
+ * the value on re-scaffold. The `bdd2pw:dom-hash` tag is unique enough
63
+ * that a naive substring match works.
64
+ */
65
+ function buildDomHashHeader(hash, url, generatedAt = new Date()) {
66
+ return [
67
+ "/**",
68
+ " * @bdd2pw generated " + generatedAt.toISOString(),
69
+ " * @bdd2pw dom-hash " + hash,
70
+ " * @bdd2pw url " + url,
71
+ " *",
72
+ " * The dom-hash line is used by bdd2pw to detect DOM drift on",
73
+ " * re-scaffold. Do not edit it by hand — regenerate with `bdd2pw",
74
+ " * scaffold` or `bdd2pw update-pom` to refresh.",
75
+ " */",
76
+ "",
77
+ ].join("\n");
78
+ }
79
+ /**
80
+ * Extract the DOM hash from an existing POM file's contents. Returns
81
+ * undefined if no hash header is present (older POM files predating
82
+ * v4.2, or files where the header was hand-removed).
83
+ */
84
+ function extractDomHashFromPom(pomContents) {
85
+ const match = pomContents.match(/@bdd2pw dom-hash ([a-f0-9]{64})/);
86
+ return match ? match[1] : undefined;
87
+ }
88
+ /**
89
+ * Prepend the DOM-hash header to a POM file's contents. Placed above
90
+ * any existing text (which typically starts with `import` statements).
91
+ * If a header is already present (idempotent re-emit), it is replaced
92
+ * rather than duplicated.
93
+ */
94
+ function prependDomHashHeader(pomContents, header) {
95
+ // Strip any existing @bdd2pw header block first (idempotent).
96
+ const stripped = pomContents.replace(/^\/\*\*[\s\S]*?@bdd2pw dom-hash[\s\S]*?\*\/\s*\n*/, "");
97
+ return header + stripped;
98
+ }
99
+ //# sourceMappingURL=domHash.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domHash.js","sourceRoot":"","sources":["../../src/discovery/domHash.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;;AA4BH,wCAGC;AAWD,gDAiBC;AAOD,sDAKC;AAQD,oDAUC;AAvFD,6CAAyC;AAGzC;;;;GAIG;AACH,SAAS,kBAAkB,CAAC,KAAc;IACxC,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,MAAM,CAAC;IAClC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC5D,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IAC7D,CAAC;IACD,MAAM,GAAG,GAAG,KAAgC,CAAC;IAC7C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACrC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CACpB,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAC5D,CAAC;IACF,OAAO,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;AACrC,CAAC;AAED;;;GAGG;AACH,SAAgB,cAAc,CAAC,QAAsB;IACnD,MAAM,SAAS,GAAG,kBAAkB,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IACjE,OAAO,IAAA,wBAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACtE,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,kBAAkB,CAChC,IAAY,EACZ,GAAW,EACX,cAAoB,IAAI,IAAI,EAAE;IAE9B,OAAO;QACL,KAAK;QACL,uBAAuB,GAAG,WAAW,CAAC,WAAW,EAAE;QACnD,sBAAsB,GAAG,IAAI;QAC7B,iBAAiB,GAAG,GAAG;QACvB,IAAI;QACJ,+DAA+D;QAC/D,kEAAkE;QAClE,iDAAiD;QACjD,KAAK;QACL,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,SAAgB,qBAAqB,CACnC,WAAmB;IAEnB,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACnE,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACtC,CAAC;AAED;;;;;GAKG;AACH,SAAgB,oBAAoB,CAClC,WAAmB,EACnB,MAAc;IAEd,8DAA8D;IAC9D,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAClC,mDAAmD,EACnD,EAAE,CACH,CAAC;IACF,OAAO,MAAM,GAAG,QAAQ,CAAC;AAC3B,CAAC"}
package/dist/index.js CHANGED
@@ -60,6 +60,7 @@ const locatorPicker_1 = require("./transformers/locatorPicker");
60
60
  const pomResolver_1 = require("./transformers/pomResolver");
61
61
  const stepMatcher_1 = require("./transformers/stepMatcher");
62
62
  const facade_1 = require("./emitters/facade");
63
+ const domHash_1 = require("./discovery/domHash");
63
64
  const tscRunner_1 = require("./validate/tscRunner");
64
65
  const reviewReport_1 = require("./reports/reviewReport");
65
66
  const metaSidecar_1 = require("./reports/metaSidecar");
@@ -133,6 +134,9 @@ async function scaffold(opts) {
133
134
  baseUrl: opts.url,
134
135
  projectName: feature.name.toLowerCase().replace(/\s+/g, "-"),
135
136
  selfHealing: opts.selfHealing,
137
+ // v4.3.0 — pw-self-heal integration.
138
+ selfHealingMode: opts.selfHealingMode,
139
+ legacyHealing: opts.legacyHealing,
136
140
  dependencyStrategy: opts.dependencyStrategy,
137
141
  });
138
142
  reviewItems.push(...scaffoldResult.warnings);
@@ -148,6 +152,10 @@ async function scaffold(opts) {
148
152
  // lands and rule-only steps (`I am on the page`, `should be redirected`)
149
153
  // still produce useful output even when the URL isn't reachable.
150
154
  let elements = [];
155
+ // v4.2.0 — DOM-hash tracking. Snapshot is hoisted here so the hash can
156
+ // be embedded in the POM header (§8 below). undefined if discovery
157
+ // failed or was skipped, which suppresses the header.
158
+ let capturedSnapshot;
151
159
  if (opts.noDiscovery) {
152
160
  reviewItems.push({
153
161
  severity: "info",
@@ -156,13 +164,13 @@ async function scaffold(opts) {
156
164
  }
157
165
  else {
158
166
  try {
159
- const snapshot = await (0, mcpClient_1.scanPage)({
167
+ capturedSnapshot = await (0, mcpClient_1.scanPage)({
160
168
  url: opts.url,
161
169
  storageState: opts.storageState,
162
170
  headed: opts.headed,
163
171
  snapshotFile: opts.snapshotFile,
164
172
  });
165
- elements = (0, snapshotParser_1.parseSnapshot)(snapshot);
173
+ elements = (0, snapshotParser_1.parseSnapshot)(capturedSnapshot);
166
174
  }
167
175
  catch (err) {
168
176
  reviewItems.push({
@@ -460,6 +468,40 @@ async function scaffold(opts) {
460
468
  }
461
469
  }
462
470
  const filesWritten = [...scaffoldResult.filesWritten];
471
+ // v4.2.0 — drift detection. Runs BEFORE the emit so a warning lands
472
+ // even if the emit itself fails partway through. `driftDetected` is
473
+ // surfaced in the return value for --fail-on-drift CI behaviour.
474
+ let driftDetected = false;
475
+ const currentDomHash = capturedSnapshot ? (0, domHash_1.computeDomHash)(capturedSnapshot) : undefined;
476
+ if (currentDomHash && decision.existing) {
477
+ const existingPomContents = await fs
478
+ .readFile(decision.existing.filePath, "utf8")
479
+ .catch(() => undefined);
480
+ if (existingPomContents) {
481
+ const previousHash = (0, domHash_1.extractDomHashFromPom)(existingPomContents);
482
+ if (previousHash && previousHash !== currentDomHash) {
483
+ driftDetected = true;
484
+ reviewItems.push({
485
+ severity: "warn",
486
+ message: "DOM DRIFT detected: the page's accessibility tree has changed since the last scaffold. " +
487
+ "Previous hash " +
488
+ previousHash.slice(0, 12) +
489
+ "… → new hash " +
490
+ currentDomHash.slice(0, 12) +
491
+ "…. Any pinned locators may now point at moved or missing elements.",
492
+ suggestion: "Review the diff between the last snapshot and the current one, then re-run the affected specs to confirm behaviour. Pass --fail-on-drift in CI to gate merges on this signal.",
493
+ file: finalPom.filePath,
494
+ });
495
+ }
496
+ else if (!previousHash) {
497
+ reviewItems.push({
498
+ severity: "info",
499
+ message: "Existing POM predates v4.2 dom-hash tracking. First scaffold with v4.2+ will embed a baseline hash; future runs will detect drift.",
500
+ file: finalPom.filePath,
501
+ });
502
+ }
503
+ }
504
+ }
463
505
  if (!opts.dryRun) {
464
506
  // 8) Emit Page Object
465
507
  const pomEmitMode = decision.decision === "CREATE" ? "create" : "augment";
@@ -469,11 +511,23 @@ async function scaffold(opts) {
469
511
  existing: decision.existing
470
512
  ? await fs.readFile(decision.existing.filePath, "utf8").catch(() => undefined)
471
513
  : undefined,
472
- selfHealingShim: opts.selfHealing,
514
+ // v4.3.0 — the pw-emit healing shim (healOrThrow wrapping) is ONLY
515
+ // emitted for --legacy-healing. New-mode healing is transparent —
516
+ // the emitted spec imports `test` from a fixtures file that wraps
517
+ // the base test with `withSelfHealing(...)`, so POM classes need
518
+ // no changes and every field call heals through the wrapped page.
519
+ selfHealingShim: opts.selfHealing === true && opts.legacyHealing === true,
473
520
  });
474
521
  reviewItems.push(...pomEmit.warnings.map((w) => ({ ...w, file: finalPom.filePath })));
522
+ // v4.2.0 — prepend DOM-hash header if we have a snapshot. Header is
523
+ // idempotent (replaces any prior header block from a previous
524
+ // scaffold) so re-emitting doesn't stack duplicates.
525
+ let pomContents = pomEmit.contents;
526
+ if (currentDomHash) {
527
+ pomContents = (0, domHash_1.prependDomHashHeader)(pomContents, (0, domHash_1.buildDomHashHeader)(currentDomHash, opts.url));
528
+ }
475
529
  await fs.ensureDir(path.dirname(finalPom.filePath));
476
- await fs.writeFile(finalPom.filePath, pomEmit.contents, "utf8");
530
+ await fs.writeFile(finalPom.filePath, pomContents, "utf8");
477
531
  filesWritten.push(finalPom.filePath);
478
532
  // 9) Emit spec file. pageObjectFileName returns "login.page.ts"; strip
479
533
  // the trailing ".ts" for both the spec file stem and the import path.
@@ -505,6 +559,17 @@ async function scaffold(opts) {
505
559
  // prepend a `// bdd2pw:generated v=… source=…` header so future
506
560
  // merges can recognise our own output.
507
561
  let finalSpec = specEmit.contents;
562
+ // v4.3.0 — pw-self-heal integration. When --self-healing is on and
563
+ // --legacy-healing is not set, redirect the emitted spec's `test` /
564
+ // `expect` import from `@playwright/test` to the sibling `./fixtures`
565
+ // file scaffoldProject wrote. The fixtures file re-exports the two
566
+ // symbols with `withSelfHealing()` applied to `test`, so every
567
+ // `page` fixture in the spec heals broken locators at runtime.
568
+ // Only rewrites the exact top-of-file import — inline type-only
569
+ // imports elsewhere in the spec are left untouched.
570
+ if (opts.selfHealing === true && opts.legacyHealing !== true) {
571
+ finalSpec = finalSpec.replace(/^import\s+\{\s*test\s*,\s*expect\s*\}\s+from\s+["']@playwright\/test["'];\s*$/m, 'import { test, expect } from "./fixtures";');
572
+ }
508
573
  if (opts.merge) {
509
574
  finalSpec = (0, specMerge_1.prependGeneratedHeader)(finalSpec, PACKAGE_VERSION, path.relative(opts.repo, opts.feature));
510
575
  if (await fs.pathExists(specPath)) {
@@ -577,7 +642,7 @@ async function scaffold(opts) {
577
642
  // Close the SQLite cache handle if we opened one.
578
643
  if (llm?.close)
579
644
  await llm.close().catch(() => undefined);
580
- return { filesWritten, reviewItems, tscErrorCount, reviewReportPath };
645
+ return { filesWritten, reviewItems, tscErrorCount, reviewReportPath, driftDetected };
581
646
  }
582
647
  /**
583
648
  * Construct the final POM IR based on the resolver decision.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -24,8 +24,31 @@ export interface ScaffoldProjectOptions {
24
24
  baseUrl?: string;
25
25
  /** Injected as `name` in package.json. */
26
26
  projectName?: string;
27
- /** When true, also write lib/heal.ts and patch tsconfig paths. */
27
+ /**
28
+ * When true, wire runtime locator healing into the emitted repo.
29
+ * v4.3.0+: default emission uses `@vijaypjavvadi/pw-self-heal` —
30
+ * a `tests/fixtures.ts` is written that wraps `@playwright/test`
31
+ * with `withSelfHealing(...)` and the emitted spec files import
32
+ * `test` and `expect` from `../fixtures` instead of directly from
33
+ * `@playwright/test`. No `lib/heal.ts` template, no tsconfig path
34
+ * alias, no external service.
35
+ *
36
+ * When combined with `legacyHealing: true`, the v4.2 behaviour
37
+ * (bundled `lib/heal.ts` template + tsconfig alias + external
38
+ * `SELF_HEALING_URL` service) is emitted instead. Deprecated —
39
+ * removed in v5.0.
40
+ */
28
41
  selfHealing?: boolean;
42
+ /**
43
+ * v4.3.0 — ranker mode passed to `withSelfHealing({mode})` in the
44
+ * emitted fixtures. Ignored when `legacyHealing: true`.
45
+ */
46
+ selfHealingMode?: "heuristic" | "ml" | "hybrid";
47
+ /**
48
+ * v4.3.0 — keep emitting the v4.2 `lib/heal.ts` + external service
49
+ * shim. One-release deprecation window; will be removed in v5.0.
50
+ */
51
+ legacyHealing?: boolean;
29
52
  /**
30
53
  * v3.2.0 — pin emitted devDependency versions when set to `exact`.
31
54
  * Default `caret` matches existing behavior. See TestForge handoff
@@ -68,7 +68,17 @@ async function scaffoldProject(opts) {
68
68
  const filesWritten = [...result.filesWritten];
69
69
  const warnings = [...result.warnings];
70
70
  if (opts.selfHealing) {
71
- await emitSelfHealingScaffold(opts.repoRoot, filesWritten, warnings);
71
+ if (opts.legacyHealing) {
72
+ warnings.push({
73
+ severity: "warn",
74
+ message: "--legacy-healing emits the v4.2 bundled lib/heal.ts + external SELF_HEALING_URL service shim. This mode is deprecated and will be removed in v5.0.",
75
+ suggestion: "Drop --legacy-healing to use the v4.3+ in-process @vijaypjavvadi/pw-self-heal integration (trained ONNX ranker, no server, no API key).",
76
+ });
77
+ await emitLegacyHealingScaffold(opts.repoRoot, filesWritten, warnings);
78
+ }
79
+ else {
80
+ await emitPwSelfHealScaffold(opts.repoRoot, opts.selfHealingMode ?? "hybrid", filesWritten, warnings);
81
+ }
72
82
  }
73
83
  return {
74
84
  filesWritten,
@@ -77,10 +87,110 @@ async function scaffoldProject(opts) {
77
87
  };
78
88
  }
79
89
  /**
90
+ * v4.3.0+ — emit the pw-self-heal fixture wiring:
91
+ * - `tests/fixtures.ts` — re-exports `test`/`expect` with
92
+ * `withSelfHealing()` applied to the base test.
93
+ * - `.pwheal/.gitkeep` — placeholder so the telemetry directory exists
94
+ * on fresh clones (heal-events.jsonl is gitignored).
95
+ * - Append `@vijaypjavvadi/pw-self-heal` + optional `onnxruntime-node`
96
+ * to the emitted `package.json` devDependencies.
97
+ *
98
+ * All operations are idempotent — re-scaffold rewrites the fixture with
99
+ * the currently-selected mode but never appends duplicates to
100
+ * package.json. Existing `tests/fixtures.ts` is overwritten so mode
101
+ * changes propagate. Downstream consumers that need a custom fixture
102
+ * (extra beforeEach, storage state, etc.) can copy the emitted file
103
+ * to a different path and update spec imports accordingly.
104
+ */
105
+ async function emitPwSelfHealScaffold(repoRoot, mode, filesWritten, warnings) {
106
+ // 1) tests/fixtures.ts — the minimal wrapper.
107
+ const testsDir = path.join(repoRoot, "tests");
108
+ await fs.ensureDir(testsDir);
109
+ const fixturesPath = path.join(testsDir, "fixtures.ts");
110
+ const fixturesContent = renderPwSelfHealFixtures(mode);
111
+ await fs.writeFile(fixturesPath, fixturesContent, "utf8");
112
+ if (!filesWritten.includes(fixturesPath))
113
+ filesWritten.push(fixturesPath);
114
+ // 2) .pwheal/.gitkeep so telemetry directory is committable.
115
+ const pwhealDir = path.join(repoRoot, ".pwheal");
116
+ await fs.ensureDir(pwhealDir);
117
+ const gitkeep = path.join(pwhealDir, ".gitkeep");
118
+ if (!(await fs.pathExists(gitkeep))) {
119
+ await fs.writeFile(gitkeep, "# @vijaypjavvadi/pw-self-heal writes heal-events.jsonl here at test\n" +
120
+ "# runtime. Files in this directory are intentionally excluded from\n" +
121
+ "# version control via the project's .gitignore — only this\n" +
122
+ "# placeholder is tracked so the directory exists on a fresh checkout.\n", "utf8");
123
+ filesWritten.push(gitkeep);
124
+ }
125
+ // 3) Append pw-self-heal + optional onnxruntime-node to package.json.
126
+ const pkgPath = path.join(repoRoot, "package.json");
127
+ if (await fs.pathExists(pkgPath)) {
128
+ try {
129
+ const pkgRaw = await fs.readFile(pkgPath, "utf8");
130
+ const pkg = JSON.parse(pkgRaw);
131
+ pkg.devDependencies ?? (pkg.devDependencies = {});
132
+ let mutated = false;
133
+ if (!pkg.devDependencies["@vijaypjavvadi/pw-self-heal"]) {
134
+ pkg.devDependencies["@vijaypjavvadi/pw-self-heal"] = "^1.1.2";
135
+ mutated = true;
136
+ }
137
+ // onnxruntime-node is required only for `ml` and `hybrid` modes.
138
+ // Emit it as optional so `mode: heuristic` users can drop it.
139
+ if ((mode === "ml" || mode === "hybrid") &&
140
+ !pkg.devDependencies["onnxruntime-node"]) {
141
+ pkg.devDependencies["onnxruntime-node"] = "^1.18.0";
142
+ mutated = true;
143
+ }
144
+ if (mutated) {
145
+ // Preserve trailing newline convention.
146
+ const trailer = pkgRaw.endsWith("\n") ? "\n" : "";
147
+ await fs.writeFile(pkgPath, JSON.stringify(pkg, null, 2) + trailer, "utf8");
148
+ }
149
+ }
150
+ catch {
151
+ warnings.push({
152
+ severity: "warn",
153
+ message: "Could not append @vijaypjavvadi/pw-self-heal to package.json — file was malformed. Add it manually: `npm i -D @vijaypjavvadi/pw-self-heal onnxruntime-node`.",
154
+ });
155
+ }
156
+ }
157
+ }
158
+ /**
159
+ * Build the fixtures.ts contents.
160
+ */
161
+ function renderPwSelfHealFixtures(mode) {
162
+ return [
163
+ "/**",
164
+ " * Generated by bdd2pw v4.3.0+ — self-healing test fixtures.",
165
+ " *",
166
+ " * Every scaffolded spec imports `test` and `expect` from this file",
167
+ " * instead of `@playwright/test` directly. `withSelfHealing()` wraps",
168
+ " * the base `test` so the `page` fixture heals broken locators at",
169
+ " * runtime — POM classes need zero changes.",
170
+ " *",
171
+ " * Ranker mode: " + JSON.stringify(mode) + " — override via",
172
+ " * `bdd2pw scaffold --self-healing-mode {heuristic|ml|hybrid}`.",
173
+ " *",
174
+ " * See https://www.npmjs.com/package/@vijaypjavvadi/pw-self-heal",
175
+ " */",
176
+ 'import { test as base } from "@playwright/test";',
177
+ 'import { withSelfHealing } from "@vijaypjavvadi/pw-self-heal";',
178
+ "",
179
+ "export const test = withSelfHealing(base, { mode: " +
180
+ JSON.stringify(mode) +
181
+ " });",
182
+ 'export { expect } from "@playwright/test";',
183
+ "",
184
+ ].join("\n");
185
+ }
186
+ /**
187
+ * v4.2 — legacy healing scaffold. Deprecated in v4.3, removed in v5.0.
188
+ *
80
189
  * Add lib/heal.ts + tsconfig path alias + artefacts/.gitkeep when the
81
- * scaffold is run with --self-healing. All three operations are idempotent.
190
+ * scaffold is run with --self-healing --legacy-healing. All three
191
+ * operations are idempotent.
82
192
  */
83
- async function emitSelfHealingScaffold(repoRoot, filesWritten, warnings) {
193
+ async function emitLegacyHealingScaffold(repoRoot, filesWritten, warnings) {
84
194
  // 1) Copy heal.ts template -> lib/heal.ts
85
195
  // We resolve the template relative to this compiled module so it works
86
196
  // both in dev (src/repo/projectScaffolder.ts -> ../../templates) and in
@@ -1 +1 @@
1
- {"version":3,"file":"projectScaffolder.js","sourceRoot":"","sources":["../../src/repo/projectScaffolder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"projectScaffolder.js","sourceRoot":"","sources":["../../src/repo/projectScaffolder.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -219,6 +219,20 @@ export interface ScaffoldOptions {
219
219
  * Default: false (purely additive minor bump).
220
220
  */
221
221
  selfHealing?: boolean;
222
+ /**
223
+ * v4.3.0 — self-healing ranker mode passed through to
224
+ * `withSelfHealing({mode})` in the emitted `tests/fixtures.ts`.
225
+ * Ignored when `legacyHealing: true` or `selfHealing: false`.
226
+ * Default `hybrid` — the production default per pw-self-heal docs
227
+ * (0.4·heuristic + 0.6·ml, 68.63% HSR on their bench).
228
+ */
229
+ selfHealingMode?: "heuristic" | "ml" | "hybrid";
230
+ /**
231
+ * v4.3.0 — keep emitting the v4.2 lib/heal.ts + external service
232
+ * shim instead of the pw-self-heal integration. Deprecated —
233
+ * removed in v5.0. Prints a warning in BDD_REVIEW.md.
234
+ */
235
+ legacyHealing?: boolean;
222
236
  /**
223
237
  * v3.1.0 — opt-in instrumentation. See TestForge handoff Issue 4 and
224
238
  * Issue 5.
@@ -334,12 +348,27 @@ export interface ScaffoldOptions {
334
348
  /** type === "synthetic" only. Faker seed for reproducibility. Default 42. */
335
349
  seed?: number;
336
350
  };
351
+ /**
352
+ * v4.2.0 — treat DOM drift as an error. When true and re-scaffold
353
+ * detects that the accessibility tree of the target URL has changed
354
+ * since the previous run (POM header dom-hash mismatch), `scaffold()`
355
+ * returns `driftDetected: true` and the CLI exits with a non-zero
356
+ * code. Useful in CI to gate merges on silent UI regressions.
357
+ */
358
+ failOnDrift?: boolean;
337
359
  }
338
360
  export interface ScaffoldResult {
339
361
  filesWritten: string[];
340
362
  reviewItems: ReviewItem[];
341
363
  tscErrorCount: number;
342
364
  reviewReportPath: string;
365
+ /**
366
+ * v4.2.0 — true iff the DOM snapshot hash differs from the one
367
+ * embedded in the existing POM. Independent of `failOnDrift` — the
368
+ * flag is always populated so callers can inspect drift status even
369
+ * without triggering an exit.
370
+ */
371
+ driftDetected?: boolean;
343
372
  }
344
373
  export interface AnalyzeOptions {
345
374
  feature: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vijaypjavvadi/bdd2pw",
3
- "version": "4.1.0",
3
+ "version": "4.3.0",
4
4
  "description": "Scaffold runnable Playwright TypeScript tests from Gherkin .feature files. Detects existing Page Objects, scans live pages via Microsoft Playwright MCP, emits POMs + specs, ready for execution. CLI + HTTP service. Optional governed LLM fallback (Anthropic / OpenAI / Gemini).",
5
5
  "bin": {
6
6
  "bdd2pw": "dist/cli.js"