@futdevpro/dynamo-e2e 1.18.18 → 1.18.21

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.
Files changed (43) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/bin/dye2e.js +36 -1
  3. package/build/_modules/generators/_collections/cli-runner.util.d.ts.map +1 -1
  4. package/build/_modules/generators/_collections/cli-runner.util.js +9 -1
  5. package/build/_modules/generators/_collections/cli-runner.util.js.map +1 -1
  6. package/build/_modules/runtime/_collections/journey-context.util.d.ts +72 -0
  7. package/build/_modules/runtime/_collections/journey-context.util.d.ts.map +1 -0
  8. package/build/_modules/runtime/_collections/journey-context.util.js +137 -0
  9. package/build/_modules/runtime/_collections/journey-context.util.js.map +1 -0
  10. package/build/_modules/runtime/_models/journey-context.interface.d.ts +31 -0
  11. package/build/_modules/runtime/_models/journey-context.interface.d.ts.map +1 -0
  12. package/build/_modules/runtime/_models/journey-context.interface.js +3 -0
  13. package/build/_modules/runtime/_models/journey-context.interface.js.map +1 -0
  14. package/build/_modules/runtime/index.d.ts +2 -0
  15. package/build/_modules/runtime/index.d.ts.map +1 -1
  16. package/build/_modules/runtime/index.js +2 -0
  17. package/build/_modules/runtime/index.js.map +1 -1
  18. package/build/_modules/vqa/_collections/constants/vqa-standard-viewports.const.d.ts +1 -1
  19. package/build/_modules/vqa/_collections/constants/vqa-standard-viewports.const.js +1 -1
  20. package/build/_modules/vqa/_collections/index.d.ts +1 -0
  21. package/build/_modules/vqa/_collections/index.d.ts.map +1 -1
  22. package/build/_modules/vqa/_collections/index.js +1 -0
  23. package/build/_modules/vqa/_collections/index.js.map +1 -1
  24. package/build/_modules/vqa/_collections/utils/review-gate.util.d.ts +36 -0
  25. package/build/_modules/vqa/_collections/utils/review-gate.util.d.ts.map +1 -0
  26. package/build/_modules/vqa/_collections/utils/review-gate.util.js +232 -0
  27. package/build/_modules/vqa/_collections/utils/review-gate.util.js.map +1 -0
  28. package/build/_modules/vqa/_models/interfaces/index.d.ts +1 -0
  29. package/build/_modules/vqa/_models/interfaces/index.d.ts.map +1 -1
  30. package/build/_modules/vqa/_models/interfaces/index.js +1 -0
  31. package/build/_modules/vqa/_models/interfaces/index.js.map +1 -1
  32. package/build/_modules/vqa/_models/interfaces/review-gate.interface.d.ts +55 -0
  33. package/build/_modules/vqa/_models/interfaces/review-gate.interface.d.ts.map +1 -0
  34. package/build/_modules/vqa/_models/interfaces/review-gate.interface.js +3 -0
  35. package/build/_modules/vqa/_models/interfaces/review-gate.interface.js.map +1 -0
  36. package/build/_modules/vqa/generators/ai-agent-readme.template.js +8 -8
  37. package/build/_modules/vqa/generators/capture-spec.generator.js +1 -1
  38. package/build/_modules/vqa/generators/review-bundle.generator.d.ts +16 -4
  39. package/build/_modules/vqa/generators/review-bundle.generator.d.ts.map +1 -1
  40. package/build/_modules/vqa/generators/review-bundle.generator.js +31 -5
  41. package/build/_modules/vqa/generators/review-bundle.generator.js.map +1 -1
  42. package/build/index.js +1 -1
  43. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -3,6 +3,46 @@
3
3
  Minden release a `dynamo-e2e-foundation` HYPERPLAN MP-N ütemezést követi.
4
4
  Verzióformátum: `MM.mm.p` (két-számjegyes major-minor, Dynamo-konvenció).
5
5
 
6
+ ## [01.18.21] — 2026-09-25 — VQA aggregate review gate (BFR-FSMED-015, part 3)
7
+
8
+ - Added `DyE2E_VQA_ReviewGate_Util.verify({ bundlePath, findingsPath?, humanReviewPath?, failOn? })` and the CLI
9
+ `dye2e verify-review-bundle --bundle <path> [--findings] [--human-review] [--report <json>] [--fail-on a,b]`
10
+ (exit 0 pass · 1 fail · 2 usage): manifest + captured evidence + finding-set + human-review marker ⇒ ONE release
11
+ verdict with stable codes and a JSON report (`schema: dye2e-vqa-review-gate/1`).
12
+ - Categories (`--fail-on`, default all): `missing` (`VQA-GATE-EVIDENCE-MISSING`, `-FINDINGS-MISSING`) · `orphan`
13
+ (`-EVIDENCE-ORPHAN`: evidence for an undeclared state / viewport) · `invalid` (`-FINDING-INVALID` schema,
14
+ `-FINDING-FOREIGN` other feature / state / viewport, `-FINDING-REF-MISSING` evidence ref not in the bundle) ·
15
+ `blocker` / `high` (`-FINDING-OPEN-BLOCKER` / `-HIGH`; closed = verified / ignored / accepted-risk) · `human-review`
16
+ (`-HUMAN-REVIEW-MISSING` / `-INVALID` / `-REJECTED`; marker `{ reviewer, reviewedAt, verdict }`). A missing /
17
+ unreadable manifest always fails. Issues outside `--fail-on` are still reported (`blocking: false`); an unknown
18
+ `--fail-on` category is a usage error, not a silently weaker gate.
19
+ - The bundle README told the reviewer to reference `screenshots/…` / `dom-snapshots/…`, which the capture never
20
+ writes — it now names the real `states/<stateId>/<viewport>-<orientation>/` files (the gate checks refs exist).
21
+
22
+ ## [01.18.20] — 2026-09-25 — Runnable VQA capture (BFR-FSMED-015, part 2)
23
+
24
+ - The review bundle now holds `capture.spec.ts` (was `capture-spec.ts`, which no Playwright `testMatch` picks up) AND
25
+ its own `playwright.config.ts` (`testDir: '.'`, `testMatch: 'capture.spec.ts'`): the bundle lives outside the
26
+ project's `testDir`, so even a correctly named spec gave "No tests found" with the project config.
27
+ - The run command is `DyE2E_VQA_ReviewBundle_Generator.captureCommand(bundlePath)` —
28
+ `VQA_OUT_DIR="<bundle>" npx playwright test --config "<bundle>/playwright.config.ts"`; `dye2e generate-review-bundle`
29
+ prints exactly this. Proven by a spec that runs `playwright test --config … --list` on a generated bundle
30
+ (4 tests discovered) and by running the CLI's printed command.
31
+ - The generated spec imports from `@futdevpro/dynamo-e2e` (root) instead of the `/vqa` subpath, so it resolves under
32
+ `moduleResolution: node` as well; a spec compiles the generated files with `strict` + `moduleResolution: node`.
33
+ - Docs: `vqa-announcement.md` and `vqa-cicd-step-template.md` use the new command (the template's `VQA_OUT_DIR` now
34
+ points at the bundle itself, so the artifacts land where `verifyBundleArtifacts` looks).
35
+
36
+ ## [01.18.19] — 2026-09-25 — Journey context + cleanup registry (BFR-FSMED-007)
37
+
38
+ - Added `DyE2E_JourneyContext<TState>` to `/runtime`: typed state handoff between journey steps (`step(name, fn)` merges
39
+ the returned patch; `handoff(patch)`; `require(key)` fails with the key and the completed steps named instead of
40
+ calling an API with `undefined`) and a cleanup registry (`registerCleanup(label, fn)` → `runCleanup()`: LIFO, every
41
+ cleanup isolated, idempotent, and it THROWS naming the leaked labels when any cleanup failed — a leaked entity is a
42
+ red journey, never a silent one). A failed step is recorded and later steps refuse to run; the cleanups still run.
43
+ - `DyE2E_useJourney(test, { name, initialState })`: serial mode + `afterAll → runCleanup()` for a Playwright
44
+ `describe`. The cleanup runs after the test-scoped fixtures are disposed — it must use its own client.
45
+
6
46
  ## [01.18.18] — 2026-09-25 — Capability-scoped global setup (BFR-FSMED-017)
7
47
 
8
48
  - `DyE2E_getGlobalSetup` new options: `failOnMissingEnv` (the missing `requiredEnvVars` become FATAL, named in the
package/bin/dye2e.js CHANGED
@@ -354,7 +354,7 @@ function main() {
354
354
  process.stdout.write(' runId: ' + result.runId + '\n');
355
355
  process.stdout.write(' files: ' + result.files.length + '\n');
356
356
  process.stdout.write('\n next: cd to the project + run\n');
357
- process.stdout.write(' VQA_OUT_DIR=' + result.bundlePath + ' npx playwright test ' + path.join(result.bundlePath, 'capture-spec.ts') + '\n');
357
+ process.stdout.write(' ' + DyE2E_VQA_ReviewBundle_Generator.captureCommand(result.bundlePath) + '\n');
358
358
  process.exit(0);
359
359
  }
360
360
 
@@ -437,6 +437,41 @@ function main() {
437
437
  process.exit(0);
438
438
  }
439
439
 
440
+ if (parsed.command === 'verify-review-bundle') {
441
+ // BFR-FSMED-015 (3. resz) — aggregate release gate: exit 0 = pass, 1 = fail, 2 = usage / unknown category
442
+ const { DyE2E_VQA_ReviewGate_Util } = require('../build/_modules/vqa/_collections/utils/review-gate.util');
443
+ const bundleP = parsed.flags.bundle;
444
+ if (!bundleP) {
445
+ process.stderr.write('[dye2e] error: --bundle <path> required\n');
446
+ process.exit(2);
447
+ }
448
+ let failOn;
449
+ try {
450
+ failOn = DyE2E_VQA_ReviewGate_Util.parseFailOn(parsed.flags['fail-on']);
451
+ } catch (e) {
452
+ process.stderr.write('[dye2e] error: ' + e.message + '\n');
453
+ process.exit(2);
454
+ }
455
+ const report = DyE2E_VQA_ReviewGate_Util.verify({
456
+ bundlePath: path.resolve(process.cwd(), bundleP),
457
+ findingsPath: parsed.flags.findings ? path.resolve(process.cwd(), parsed.flags.findings) : undefined,
458
+ humanReviewPath: parsed.flags['human-review'] ? path.resolve(process.cwd(), parsed.flags['human-review']) : undefined,
459
+ failOn: failOn,
460
+ });
461
+ if (parsed.flags.report) {
462
+ const reportPath = path.resolve(process.cwd(), parsed.flags.report);
463
+ fs.mkdirSync(path.dirname(reportPath), { recursive: true });
464
+ fs.writeFileSync(reportPath, JSON.stringify(report, null, 2));
465
+ }
466
+ process.stdout.write((report.verdict === 'pass' ? '✓' : '✗') + ' review gate: ' + report.verdict.toUpperCase() +
467
+ ' (' + report.featureId + ', ' + report.findingsTotal + ' findings, fail-on: ' + report.failOn.join(',') + ')\n');
468
+ for (const issue of report.issues) {
469
+ process.stdout.write(' ' + (issue.blocking ? '✗' : '·') + ' ' + issue.code + (issue.ref ? ' [' + issue.ref + ']' : '') +
470
+ ' — ' + issue.message + '\n');
471
+ }
472
+ process.exit(report.verdict === 'pass' ? 0 : 1);
473
+ }
474
+
440
475
  process.stderr.write(`[dye2e] unknown command: ${parsed.command}\n`);
441
476
  process.stderr.write(DyE2E_CliRunner_Util.helpText());
442
477
  process.exit(2);
@@ -1 +1 @@
1
- {"version":3,"file":"cli-runner.util.d.ts","sourceRoot":"","sources":["../../../../src/_modules/generators/_collections/cli-runner.util.ts"],"names":[],"mappings":"AAOA;;;;;GAKG;AACH,qBAAa,oBAAoB;IAE/B,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE;IAsBpF,MAAM,CAAC,QAAQ,IAAI,MAAM;IAyGzB;;;OAGG;IACH,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IA0D/C;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE;QAAE,UAAU,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;QAAC,YAAY,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,MAAM,CAAA;KAAE,GAAG;QAC9H,YAAY,EAAE,OAAO,CAAC;QACtB,iBAAiB,EAAE,OAAO,CAAC;QAC3B,mBAAmB,EAAE,OAAO,CAAC;QAC7B,SAAS,EAAE,OAAO,CAAC;QACnB,aAAa,EAAE,OAAO,CAAC;QACvB,WAAW,EAAE,MAAM,EAAE,CAAC;KACvB;IA2CD,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAI3C;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM;IAuB9D;;;OAGG;IACH,MAAM,CAAC,WAAW,CAChB,OAAO,EAAE,qBAAqB,GAAG,yBAAyB,GAAG,mBAAmB,EAChF,UAAU,EAAE,MAAM,GACjB,MAAM;CAaV"}
1
+ {"version":3,"file":"cli-runner.util.d.ts","sourceRoot":"","sources":["../../../../src/_modules/generators/_collections/cli-runner.util.ts"],"names":[],"mappings":"AAOA;;;;;GAKG;AACH,qBAAa,oBAAoB;IAE/B,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE;IAsBpF,MAAM,CAAC,QAAQ,IAAI,MAAM;IAiHzB;;;OAGG;IACH,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IA0D/C;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE;QAAE,UAAU,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;QAAC,YAAY,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,MAAM,CAAA;KAAE,GAAG;QAC9H,YAAY,EAAE,OAAO,CAAC;QACtB,iBAAiB,EAAE,OAAO,CAAC;QAC3B,mBAAmB,EAAE,OAAO,CAAC;QAC7B,SAAS,EAAE,OAAO,CAAC;QACnB,aAAa,EAAE,OAAO,CAAC;QACvB,WAAW,EAAE,MAAM,EAAE,CAAC;KACvB;IA2CD,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAI3C;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM;IAuB9D;;;OAGG;IACH,MAAM,CAAC,WAAW,CAChB,OAAO,EAAE,qBAAqB,GAAG,yBAAyB,GAAG,mBAAmB,EAChF,UAAU,EAAE,MAAM,GACjB,MAAM;CAaV"}
@@ -57,9 +57,10 @@ Commands:
57
57
  Visual QA (/vqa) commands:
58
58
  validate-manifest Validate a VQA state-manifest JSON
59
59
  validate-finding Validate a VQA finding JSON
60
- generate-review-bundle Manifest -> review bundle (capture-spec, README, summary)
60
+ generate-review-bundle Manifest -> review bundle (capture.spec.ts + its playwright.config.ts, README, summary)
61
61
  generate-comparison-bundle Before/after capture sets -> comparison bundle
62
62
  bundle-summary Print an existing bundle's summary.md
63
+ verify-review-bundle Aggregate release gate: evidence + findings + human review -> pass / fail + JSON
63
64
 
64
65
  QA commands:
65
66
  notification-sweep Login pages -> wrong-password submit -> notification / banner / leak matrix
@@ -98,6 +99,13 @@ Flags (generate-comparison-bundle):
98
99
  Flags (bundle-summary):
99
100
  --bundle <path> Bundle dir containing manifest.json + summary.md
100
101
 
102
+ Flags (verify-review-bundle):
103
+ --bundle <path> Review bundle dir (required)
104
+ --findings <path> Finding-set JSON (default: <bundle>/findings/findings.json)
105
+ --human-review <path> { reviewer, reviewedAt, verdict } (default: <bundle>/human-review.json)
106
+ --report <path> Write the JSON gate report here
107
+ --fail-on <a,b> missing,orphan,invalid,blocker,high,human-review (default: all)
108
+
101
109
  Flags (generate-form-suite):
102
110
  --config <path> Path to JSON config (formSettings, formRoute, ...)
103
111
  --out <path> Output spec.ts path
@@ -1 +1 @@
1
- {"version":3,"file":"cli-runner.util.js","sourceRoot":"","sources":["../../../../src/_modules/generators/_collections/cli-runner.util.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli-runner.util.js","sourceRoot":"","sources":["../../../../src/_modules/generators/_collections/cli-runner.util.ts"],"names":[],"mappings":";;;AAAA,kEAAoE;AACpE,0EAA4E;AAC5E,uEAAyE;AAKzE;;;;;GAKG;AACH,MAAa,oBAAoB;IAE/B,MAAM,CAAC,SAAS,CAAC,IAAc;QAC7B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QACxC,CAAC;QACD,MAAM,OAAO,GAAW,IAAI,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,KAAK,GAA2B,EAAE,CAAC;QACzC,KAAK,IAAI,CAAC,GAAW,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7C,MAAM,GAAG,GAAW,IAAI,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzB,MAAM,GAAG,GAAW,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACjC,MAAM,IAAI,GAAuB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC7C,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;oBACnC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;oBAClB,CAAC,EAAE,CAAC;gBACN,CAAC;qBAAM,CAAC;oBACN,KAAK,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;gBACtB,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC5B,CAAC;IAED,MAAM,CAAC,QAAQ;QACb,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6GV,CAAC;IACA,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,cAAc;QACnB,OAAO;YACL,sBAAsB,EAAE;;;;;;;;;;;;;;CAc7B;YACK,iBAAiB,EAAE;;;;;;;;;;;;;;;;;;;;;;;CAuBxB;YACK,oBAAoB,EAAE,EAAE;YACxB,8BAA8B,EAAE,EAAE;YAClC,eAAe,EAAE;;;;;;;;;;;CAWtB;SACI,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,YAAY,CAAC,GAAW,EAAE,EAA4F;QAQ3H,MAAM,WAAW,GAAW,GAAG,GAAG,eAAe,CAAC;QAClD,IAAI,YAAY,GAAY,KAAK,CAAC;QAClC,IAAI,iBAAiB,GAAY,KAAK,CAAC;QACvC,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;gBAC9D,MAAM,OAAO,GAA2B,EAAE,GAAG,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC,EAAE,CAAC;gBACxG,YAAY,GAAG,uBAAuB,IAAI,OAAO,CAAC;gBAClD,iBAAiB,GAAG,kBAAkB,IAAI,OAAO,CAAC;YACpD,CAAC;YAAC,OAAO,CAAU,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC;QACxC,CAAC;QACD,MAAM,mBAAmB,GAAY,EAAE,CAAC,UAAU,CAAC,GAAG,GAAG,uBAAuB,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,GAAG,uBAAuB,CAAC,CAAC;QAClI,MAAM,SAAS,GAAY,EAAE,CAAC,UAAU,CAAC,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,GAAG,QAAQ,CAAC,CAAC;QACxF,MAAM,aAAa,GAAY,EAAE,CAAC,UAAU,CAAC,GAAG,GAAG,oCAAoC,CAAC,CAAC;QAEzF,MAAM,WAAW,GAAa,EAAE,CAAC;QACjC,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,WAAW,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACvB,WAAW,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;QAC5D,CAAC;QACD,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACzB,WAAW,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;QAC7E,CAAC;QACD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,WAAW,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,WAAW,CAAC,IAAI,CAAC,mGAAmG,CAAC,CAAC;QACxH,CAAC;QAED,OAAO;YACL,YAAY;YACZ,iBAAiB;YACjB,mBAAmB;YACnB,SAAS;YACT,aAAa;YACb,WAAW;SACZ,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,OAAe;QAChC,OAAO,yBAAyB,OAAO,EAAE,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,OAAe,EAAE,UAAoB;QACnD,MAAM,WAAW,GAAa,CAAC,GAAG,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC;QACrD,MAAM,KAAK,GAAa,WAAW,CAAC,MAAM,CAAC,CAAC,CAAS,EAAW,EAAE,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC9K,MAAM,MAAM,GAAa,WAAW,CAAC,MAAM,CAAC,CAAC,CAAS,EAAW,EAAE,CAAC,CAAC,QAAQ,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACzJ,MAAM,MAAM,GAAa,WAAW,CAAC,MAAM,CAAC,CAAC,CAAS,EAAW,EAAE,CAAC,CAAC,YAAY,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACvJ,OAAO,yBAAyB,OAAO;;0BAEjB,WAAW,CAAC,MAAM;cAC9B,KAAK,CAAC,MAAM,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;cAClC,MAAM,CAAC,MAAM,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;cACpC,MAAM,CAAC,MAAM,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;;;;;;CAUjD,CAAC;IACA,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,WAAW,CAChB,OAAgF,EAChF,UAAkB;QAElB,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC/C,IAAI,OAAO,KAAK,qBAAqB,EAAE,CAAC;YACtC,OAAO,gDAAyB,CAAC,IAAI,CAAC,MAAyC,CAAC,CAAC;QACnF,CAAC;QACD,IAAI,OAAO,KAAK,yBAAyB,EAAE,CAAC;YAC1C,OAAO,wDAA6B,CAAC,IAAI,CAAC,MAA6C,CAAC,CAAC;QAC3F,CAAC;QACD,IAAI,OAAO,KAAK,mBAAmB,EAAE,CAAC;YACpC,OAAO,8CAAwB,CAAC,IAAI,CAAC,MAAwC,CAAC,CAAC;QACjF,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;IACjD,CAAC;CACF;AAvTD,oDAuTC"}
@@ -0,0 +1,72 @@
1
+ import { DyE2E_JourneyCleanupReport_Interface, DyE2E_JourneyTestApi_Interface } from '../_models/journey-context.interface';
2
+ /**
3
+ * BFR-FSMED-007 — typed user-journey context: carries the REAL ids / state a step created to the next step
4
+ * (state handoff), and owns a cleanup registry that removes everything the journey created, even when a step failed.
5
+ *
6
+ * - `step(name, fn)`: runs a step with the current state; the returned patch is merged into the state (handoff).
7
+ * A failed step is recorded (`failedStep`) and rethrown — the journey stops, the cleanups still run.
8
+ * - `require(key)`: a handoff guard — a step that needs an earlier step's id fails with the step + key named,
9
+ * instead of calling the API with `undefined`.
10
+ * - `registerCleanup(label, fn)`: register right AFTER the thing exists (create → register), so a later failure
11
+ * cannot leak it. Cleanups run LIFO (dependants before their parents).
12
+ * - `runCleanup()`: runs EVERY cleanup, each isolated (one failure does not skip the rest), once (idempotent), then
13
+ * throws if any failed — a leaked entity is a red journey, never a silent one.
14
+ *
15
+ * With Playwright: `DyE2E_useJourney(test, { name, initialState })` (serial mode + `afterAll` cleanup).
16
+ */
17
+ export declare class DyE2E_JourneyContext<TState extends object> {
18
+ readonly name: string;
19
+ private currentState;
20
+ private readonly cleanups;
21
+ private readonly steps;
22
+ private failed;
23
+ private cleanupReport;
24
+ /** Creates the context with the journey name and its initial state. */
25
+ constructor(set: {
26
+ name: string;
27
+ initialState: TState;
28
+ });
29
+ /** The current state (a copy — change it through a step's returned patch or `handoff`). */
30
+ get state(): Readonly<TState>;
31
+ /** The names of the steps that completed, in order. */
32
+ get completedSteps(): string[];
33
+ /** The name of the step that threw, if any. */
34
+ get failedStep(): string | undefined;
35
+ /** Runs one journey step; its returned patch is merged into the state (the handoff to the next step). */
36
+ step(name: string, fn: (state: Readonly<TState>) => Promise<Partial<TState> | void> | Partial<TState> | void): Promise<Readonly<TState>>;
37
+ /** Merges a patch into the state outside a step (e.g. from a Playwright `test` body). */
38
+ handoff(patch: Partial<TState>): void;
39
+ /** Returns a state value an earlier step must have handed off; throws with the key named when it is missing. */
40
+ require<TKey extends keyof TState>(key: TKey): NonNullable<TState[TKey]>;
41
+ /** Registers a cleanup for something the journey created — call it right after the creation. */
42
+ registerCleanup(label: string, fn: () => Promise<unknown> | unknown): void;
43
+ /**
44
+ * Runs every registered cleanup LIFO, each isolated; idempotent (a second call returns the first report).
45
+ * Throws after ALL of them ran when any failed, naming the failed labels.
46
+ */
47
+ runCleanup(): Promise<DyE2E_JourneyCleanupReport_Interface>;
48
+ }
49
+ /**
50
+ * BFR-FSMED-007 — Playwright binding: puts the calling `describe` into serial mode (the steps share state) and
51
+ * registers `afterAll → runCleanup()`, so the cleanups run even when a step failed. Call it inside `test.describe`.
52
+ *
53
+ * ```ts
54
+ * test.describe('J-002 post lifecycle', () => {
55
+ * const journey = DyE2E_useJourney(test, { name: 'J-002', initialState: { postId: undefined as string | undefined } });
56
+ * test('create', async ({ request }) => {
57
+ * const id = await createPost(request);
58
+ * journey.registerCleanup(`delete post ${id}`, () => deletePostWithOwnClient(id));
59
+ * journey.handoff({ postId: id });
60
+ * });
61
+ * test('read', async ({ request }) => { await readPost(request, journey.require('postId')); });
62
+ * });
63
+ * ```
64
+ *
65
+ * ⚠️ A cleanup runs in `afterAll`, AFTER the test-scoped fixtures (`page`, `request`) were disposed — it must not
66
+ * capture them: use its own client (`fetch`, or `playwright.request.newContext()` created inside the cleanup).
67
+ */
68
+ export declare function DyE2E_useJourney<TState extends object>(test: DyE2E_JourneyTestApi_Interface, set: {
69
+ name: string;
70
+ initialState: TState;
71
+ }): DyE2E_JourneyContext<TState>;
72
+ //# sourceMappingURL=journey-context.util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"journey-context.util.d.ts","sourceRoot":"","sources":["../../../../src/_modules/runtime/_collections/journey-context.util.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oCAAoC,EAEpC,8BAA8B,EAC/B,MAAM,sCAAsC,CAAC;AAQ9C;;;;;;;;;;;;;;GAcG;AACH,qBAAa,oBAAoB,CAAC,MAAM,SAAS,MAAM;IACrD,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6C;IACtE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgB;IACtC,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,aAAa,CAAmD;IAExE,uEAAuE;gBAC3D,GAAG,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE;IAKvD,2FAA2F;IAC3F,IAAW,KAAK,IAAI,QAAQ,CAAC,MAAM,CAAC,CAEnC;IAED,uDAAuD;IACvD,IAAW,cAAc,IAAI,MAAM,EAAE,CAEpC;IAED,+CAA+C;IAC/C,IAAW,UAAU,IAAI,MAAM,GAAG,SAAS,CAE1C;IAED,yGAAyG;IAC5F,IAAI,CACf,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,GACxF,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAsB5B,yFAAyF;IAClF,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI;IAI5C,gHAAgH;IACzG,OAAO,CAAC,IAAI,SAAS,MAAM,MAAM,EAAE,GAAG,EAAE,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAa/E,gGAAgG;IACzF,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,GAAG,IAAI;IAOjF;;;OAGG;IACU,UAAU,IAAI,OAAO,CAAC,oCAAoC,CAAC;CA8BzE;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,SAAS,MAAM,EACpD,IAAI,EAAE,8BAA8B,EACpC,GAAG,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GAC1C,oBAAoB,CAAC,MAAM,CAAC,CAS9B"}
@@ -0,0 +1,137 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DyE2E_JourneyContext = void 0;
4
+ exports.DyE2E_useJourney = DyE2E_useJourney;
5
+ /**
6
+ * BFR-FSMED-007 — typed user-journey context: carries the REAL ids / state a step created to the next step
7
+ * (state handoff), and owns a cleanup registry that removes everything the journey created, even when a step failed.
8
+ *
9
+ * - `step(name, fn)`: runs a step with the current state; the returned patch is merged into the state (handoff).
10
+ * A failed step is recorded (`failedStep`) and rethrown — the journey stops, the cleanups still run.
11
+ * - `require(key)`: a handoff guard — a step that needs an earlier step's id fails with the step + key named,
12
+ * instead of calling the API with `undefined`.
13
+ * - `registerCleanup(label, fn)`: register right AFTER the thing exists (create → register), so a later failure
14
+ * cannot leak it. Cleanups run LIFO (dependants before their parents).
15
+ * - `runCleanup()`: runs EVERY cleanup, each isolated (one failure does not skip the rest), once (idempotent), then
16
+ * throws if any failed — a leaked entity is a red journey, never a silent one.
17
+ *
18
+ * With Playwright: `DyE2E_useJourney(test, { name, initialState })` (serial mode + `afterAll` cleanup).
19
+ */
20
+ class DyE2E_JourneyContext {
21
+ name;
22
+ currentState;
23
+ cleanups = [];
24
+ steps = [];
25
+ failed;
26
+ cleanupReport;
27
+ /** Creates the context with the journey name and its initial state. */
28
+ constructor(set) {
29
+ this.name = set.name;
30
+ this.currentState = { ...set.initialState };
31
+ }
32
+ /** The current state (a copy — change it through a step's returned patch or `handoff`). */
33
+ get state() {
34
+ return { ...this.currentState };
35
+ }
36
+ /** The names of the steps that completed, in order. */
37
+ get completedSteps() {
38
+ return [...this.steps];
39
+ }
40
+ /** The name of the step that threw, if any. */
41
+ get failedStep() {
42
+ return this.failed;
43
+ }
44
+ /** Runs one journey step; its returned patch is merged into the state (the handoff to the next step). */
45
+ async step(name, fn) {
46
+ if (this.failed) {
47
+ throw new Error(`[DyE2E journey "${this.name}"] step "${name}" not run: step "${this.failed}" already failed.`);
48
+ }
49
+ try {
50
+ const patch = await fn(this.state);
51
+ if (patch) {
52
+ this.currentState = { ...this.currentState, ...patch };
53
+ }
54
+ this.steps.push(name);
55
+ }
56
+ catch (err) {
57
+ this.failed = name;
58
+ throw err;
59
+ }
60
+ return this.state;
61
+ }
62
+ /** Merges a patch into the state outside a step (e.g. from a Playwright `test` body). */
63
+ handoff(patch) {
64
+ this.currentState = { ...this.currentState, ...patch };
65
+ }
66
+ /** Returns a state value an earlier step must have handed off; throws with the key named when it is missing. */
67
+ require(key) {
68
+ const value = this.currentState[key];
69
+ if (value === undefined || value === null) {
70
+ throw new Error(`[DyE2E journey "${this.name}"] state "${String(key)}" is missing — an earlier step did not hand it off ` +
71
+ `(completed: ${this.steps.join(' → ') || 'none'}).`);
72
+ }
73
+ return value;
74
+ }
75
+ /** Registers a cleanup for something the journey created — call it right after the creation. */
76
+ registerCleanup(label, fn) {
77
+ if (this.cleanupReport) {
78
+ throw new Error(`[DyE2E journey "${this.name}"] cleanup "${label}" registered after runCleanup().`);
79
+ }
80
+ this.cleanups.push({ label: label, fn: fn });
81
+ }
82
+ /**
83
+ * Runs every registered cleanup LIFO, each isolated; idempotent (a second call returns the first report).
84
+ * Throws after ALL of them ran when any failed, naming the failed labels.
85
+ */
86
+ async runCleanup() {
87
+ if (this.cleanupReport) {
88
+ return this.cleanupReport;
89
+ }
90
+ const results = [];
91
+ for (const entry of [...this.cleanups].reverse()) {
92
+ try {
93
+ await entry.fn();
94
+ results.push({ label: entry.label, ok: true });
95
+ }
96
+ catch (err) {
97
+ results.push({ label: entry.label, ok: false, error: err instanceof Error ? err.message : String(err) });
98
+ }
99
+ }
100
+ const failures = results.filter((result) => !result.ok);
101
+ this.cleanupReport = { journey: this.name, results: results, failed: failures.length };
102
+ if (failures.length) {
103
+ throw new Error(`[DyE2E journey "${this.name}"] ${failures.length}/${results.length} cleanup(s) failed — leaked: ` +
104
+ failures.map((f) => `${f.label} (${f.error})`).join('; '));
105
+ }
106
+ return this.cleanupReport;
107
+ }
108
+ }
109
+ exports.DyE2E_JourneyContext = DyE2E_JourneyContext;
110
+ /**
111
+ * BFR-FSMED-007 — Playwright binding: puts the calling `describe` into serial mode (the steps share state) and
112
+ * registers `afterAll → runCleanup()`, so the cleanups run even when a step failed. Call it inside `test.describe`.
113
+ *
114
+ * ```ts
115
+ * test.describe('J-002 post lifecycle', () => {
116
+ * const journey = DyE2E_useJourney(test, { name: 'J-002', initialState: { postId: undefined as string | undefined } });
117
+ * test('create', async ({ request }) => {
118
+ * const id = await createPost(request);
119
+ * journey.registerCleanup(`delete post ${id}`, () => deletePostWithOwnClient(id));
120
+ * journey.handoff({ postId: id });
121
+ * });
122
+ * test('read', async ({ request }) => { await readPost(request, journey.require('postId')); });
123
+ * });
124
+ * ```
125
+ *
126
+ * ⚠️ A cleanup runs in `afterAll`, AFTER the test-scoped fixtures (`page`, `request`) were disposed — it must not
127
+ * capture them: use its own client (`fetch`, or `playwright.request.newContext()` created inside the cleanup).
128
+ */
129
+ function DyE2E_useJourney(test, set) {
130
+ const journey = new DyE2E_JourneyContext(set);
131
+ test.describe.configure({ mode: 'serial' });
132
+ test.afterAll(async () => {
133
+ await journey.runCleanup();
134
+ });
135
+ return journey;
136
+ }
137
+ //# sourceMappingURL=journey-context.util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"journey-context.util.js","sourceRoot":"","sources":["../../../../src/_modules/runtime/_collections/journey-context.util.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /** BFR-FSMED-007 — the outcome of one registered cleanup in `DyE2E_JourneyContext.runCleanup()`. */
2
+ export interface DyE2E_JourneyCleanupResult_Interface {
3
+ /** The label given at registration (what was cleaned up — e.g. `hard-delete account 64f…`). */
4
+ label: string;
5
+ /** `true` when the cleanup resolved. */
6
+ ok: boolean;
7
+ /** The failure message when `ok` is `false`. */
8
+ error?: string;
9
+ }
10
+ /** BFR-FSMED-007 — what `DyE2E_JourneyContext.runCleanup()` did: every cleanup, in the order it ran (LIFO). */
11
+ export interface DyE2E_JourneyCleanupReport_Interface {
12
+ /** The journey name. */
13
+ journey: string;
14
+ /** One row per registered cleanup, in run order (last registered first). */
15
+ results: DyE2E_JourneyCleanupResult_Interface[];
16
+ /** The number of failed cleanups (`0` = everything the journey created is gone). */
17
+ failed: number;
18
+ }
19
+ /**
20
+ * BFR-FSMED-007 — the minimal Playwright `test` surface `DyE2E_useJourney` needs (structural, so a unit test can pass a
21
+ * double and the runtime needs no specific Playwright version).
22
+ */
23
+ export interface DyE2E_JourneyTestApi_Interface {
24
+ describe: {
25
+ configure: (options: {
26
+ mode: 'serial';
27
+ }) => void;
28
+ };
29
+ afterAll: (fn: () => Promise<void>) => void;
30
+ }
31
+ //# sourceMappingURL=journey-context.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"journey-context.interface.d.ts","sourceRoot":"","sources":["../../../../src/_modules/runtime/_models/journey-context.interface.ts"],"names":[],"mappings":"AAAA,oGAAoG;AACpG,MAAM,WAAW,oCAAoC;IACnD,+FAA+F;IAC/F,KAAK,EAAE,MAAM,CAAC;IACd,wCAAwC;IACxC,EAAE,EAAE,OAAO,CAAC;IACZ,gDAAgD;IAChD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,+GAA+G;AAC/G,MAAM,WAAW,oCAAoC;IACnD,wBAAwB;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,4EAA4E;IAC5E,OAAO,EAAE,oCAAoC,EAAE,CAAC;IAChD,oFAAoF;IACpF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,EAAE;QAAE,SAAS,EAAE,CAAC,OAAO,EAAE;YAAE,IAAI,EAAE,QAAQ,CAAA;SAAE,KAAK,IAAI,CAAA;KAAE,CAAC;IAC/D,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;CAC7C"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=journey-context.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"journey-context.interface.js","sourceRoot":"","sources":["../../../../src/_modules/runtime/_models/journey-context.interface.ts"],"names":[],"mappings":""}
@@ -13,12 +13,14 @@
13
13
  * ```
14
14
  */
15
15
  export * from './_collections/assertion-helpers.util';
16
+ export * from './_collections/journey-context.util';
16
17
  export * from './_collections/notification-detector-page-script.const';
17
18
  export * from './_collections/notification-detector.util';
18
19
  export * from './_collections/notification-sweep.util';
19
20
  export * from './_collections/unique-generator.util';
20
21
  export * from './_collections/wait-helpers.util';
21
22
  export * from './_models/index';
23
+ export * from './_models/journey-context.interface';
22
24
  export * from './_models/notification-report.interface';
23
25
  export * from './_models/notification-sweep.interface';
24
26
  export * from './_models/test-user.interface';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/_modules/runtime/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,cAAc,uCAAuC,CAAC;AACtD,cAAc,wDAAwD,CAAC;AACvE,cAAc,2CAA2C,CAAC;AAC1D,cAAc,wCAAwC,CAAC;AACvD,cAAc,sCAAsC,CAAC;AACrD,cAAc,kCAAkC,CAAC;AACjD,cAAc,iBAAiB,CAAC;AAChC,cAAc,yCAAyC,CAAC;AACxD,cAAc,wCAAwC,CAAC;AACvD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oCAAoC,CAAC;AACnD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,kCAAkC,CAAC;AACjD,cAAc,YAAY,CAAC;AAE3B,eAAO,MAAM,qBAAqB,EAAE,MAAwB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/_modules/runtime/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,cAAc,uCAAuC,CAAC;AACtD,cAAc,qCAAqC,CAAC;AACpD,cAAc,wDAAwD,CAAC;AACvE,cAAc,2CAA2C,CAAC;AAC1D,cAAc,wCAAwC,CAAC;AACvD,cAAc,sCAAsC,CAAC;AACrD,cAAc,kCAAkC,CAAC;AACjD,cAAc,iBAAiB,CAAC;AAChC,cAAc,qCAAqC,CAAC;AACpD,cAAc,yCAAyC,CAAC;AACxD,cAAc,wCAAwC,CAAC;AACvD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oCAAoC,CAAC;AACnD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,kCAAkC,CAAC;AACjD,cAAc,YAAY,CAAC;AAE3B,eAAO,MAAM,qBAAqB,EAAE,MAAwB,CAAC"}
@@ -30,12 +30,14 @@ exports.DYE2E_RUNTIME_VERSION = void 0;
30
30
  * ```
31
31
  */
32
32
  __exportStar(require("./_collections/assertion-helpers.util"), exports);
33
+ __exportStar(require("./_collections/journey-context.util"), exports);
33
34
  __exportStar(require("./_collections/notification-detector-page-script.const"), exports);
34
35
  __exportStar(require("./_collections/notification-detector.util"), exports);
35
36
  __exportStar(require("./_collections/notification-sweep.util"), exports);
36
37
  __exportStar(require("./_collections/unique-generator.util"), exports);
37
38
  __exportStar(require("./_collections/wait-helpers.util"), exports);
38
39
  __exportStar(require("./_models/index"), exports);
40
+ __exportStar(require("./_models/journey-context.interface"), exports);
39
41
  __exportStar(require("./_models/notification-report.interface"), exports);
40
42
  __exportStar(require("./_models/notification-sweep.interface"), exports);
41
43
  __exportStar(require("./_models/test-user.interface"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/_modules/runtime/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;;;GAaG;AACH,wEAAsD;AACtD,yFAAuE;AACvE,4EAA0D;AAC1D,yEAAuD;AACvD,uEAAqD;AACrD,mEAAiD;AACjD,kDAAgC;AAChC,0EAAwD;AACxD,yEAAuD;AACvD,gEAA8C;AAC9C,iEAA+C;AAC/C,gEAA8C;AAC9C,+DAA6C;AAC7C,iEAA+C;AAC/C,6DAA2C;AAC3C,qEAAmD;AACnD,8DAA4C;AAC5C,gEAA8C;AAC9C,mEAAiD;AACjD,6CAA2B;AAEd,QAAA,qBAAqB,GAAW,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/_modules/runtime/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;;;GAaG;AACH,wEAAsD;AACtD,sEAAoD;AACpD,yFAAuE;AACvE,4EAA0D;AAC1D,yEAAuD;AACvD,uEAAqD;AACrD,mEAAiD;AACjD,kDAAgC;AAChC,sEAAoD;AACpD,0EAAwD;AACxD,yEAAuD;AACvD,gEAA8C;AAC9C,iEAA+C;AAC/C,gEAA8C;AAC9C,+DAA6C;AAC7C,iEAA+C;AAC/C,6DAA2C;AAC3C,qEAAmD;AACnD,8DAA4C;AAC5C,gEAA8C;AAC9C,mEAAiD;AACjD,6CAA2B;AAEd,QAAA,qBAAqB,GAAW,eAAe,CAAC"}
@@ -4,7 +4,7 @@ import { DyE2E_Viewport_Interface } from '../../../contracts/_models/interfaces/
4
4
  * ezekből választhat subset-et, vagy override-olhatja sajáttal.
5
5
  *
6
6
  * **Konvenció**: `key` filename-friendly + a `dye2e generate-review-bundle` ezzel
7
- * mappel artifact-ot (`screenshots/<state>/<key>-full.png`).
7
+ * mappel artifact-ot (`states/<state>/<key>-<orientation>/full.png`).
8
8
  */
9
9
  export declare const DyE2E_VQA_StandardViewports_Const: {
10
10
  [key: string]: DyE2E_Viewport_Interface;
@@ -6,7 +6,7 @@ exports.DyE2E_VQA_DefaultViewportSubset_Const = exports.DyE2E_VQA_StandardViewpo
6
6
  * ezekből választhat subset-et, vagy override-olhatja sajáttal.
7
7
  *
8
8
  * **Konvenció**: `key` filename-friendly + a `dye2e generate-review-bundle` ezzel
9
- * mappel artifact-ot (`screenshots/<state>/<key>-full.png`).
9
+ * mappel artifact-ot (`states/<state>/<key>-<orientation>/full.png`).
10
10
  */
11
11
  exports.DyE2E_VQA_StandardViewports_Const = {
12
12
  mobileSmall: {
@@ -7,4 +7,5 @@ export * from './utils/finding-validator.util';
7
7
  export * from './utils/finding-id.util';
8
8
  export * from './utils/risk-score.util';
9
9
  export * from './utils/deterministic-finding.util';
10
+ export * from './utils/review-gate.util';
10
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/_modules/vqa/_collections/index.ts"],"names":[],"mappings":"AAAA,cAAc,0CAA0C,CAAC;AACzD,cAAc,0CAA0C,CAAC;AACzD,cAAc,kCAAkC,CAAC;AACjD,cAAc,mCAAmC,CAAC;AAClD,cAAc,iCAAiC,CAAC;AAChD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oCAAoC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/_modules/vqa/_collections/index.ts"],"names":[],"mappings":"AAAA,cAAc,0CAA0C,CAAC;AACzD,cAAc,0CAA0C,CAAC;AACzD,cAAc,kCAAkC,CAAC;AACjD,cAAc,mCAAmC,CAAC;AAClD,cAAc,iCAAiC,CAAC;AAChD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oCAAoC,CAAC;AACnD,cAAc,0BAA0B,CAAC"}
@@ -23,4 +23,5 @@ __exportStar(require("./utils/finding-validator.util"), exports);
23
23
  __exportStar(require("./utils/finding-id.util"), exports);
24
24
  __exportStar(require("./utils/risk-score.util"), exports);
25
25
  __exportStar(require("./utils/deterministic-finding.util"), exports);
26
+ __exportStar(require("./utils/review-gate.util"), exports);
26
27
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/_modules/vqa/_collections/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2EAAyD;AACzD,2EAAyD;AACzD,mEAAiD;AACjD,oEAAkD;AAClD,kEAAgD;AAChD,iEAA+C;AAC/C,0DAAwC;AACxC,0DAAwC;AACxC,qEAAmD"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/_modules/vqa/_collections/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2EAAyD;AACzD,2EAAyD;AACzD,mEAAiD;AACjD,oEAAkD;AAClD,kEAAgD;AAChD,iEAA+C;AAC/C,0DAAwC;AACxC,0DAAwC;AACxC,qEAAmD;AACnD,2DAAyC"}
@@ -0,0 +1,36 @@
1
+ import { DyE2E_VQA_FindingStatus_Type } from '../../_enums/finding-status.enum';
2
+ import { DyE2E_VQA_ReviewGate_Options, DyE2E_VQA_ReviewGateCategory_Type, DyE2E_VQA_ReviewGateReport_Interface } from '../../_models/interfaces/review-gate.interface';
3
+ /** BFR-FSMED-015 — every gate category, in report order (the default `failOn`). */
4
+ export declare const DYE2E_VQA_REVIEW_GATE_CATEGORIES: DyE2E_VQA_ReviewGateCategory_Type[];
5
+ /**
6
+ * BFR-FSMED-015 — finding statuses that CLOSE a finding for the release verdict. Everything else (open, in-progress,
7
+ * fixed-but-not-re-audited, ready-for-re-audit, reopened) is still open.
8
+ */
9
+ export declare const DYE2E_VQA_CLOSED_FINDING_STATUSES: DyE2E_VQA_FindingStatus_Type[];
10
+ /**
11
+ * BFR-FSMED-015 (part 3) — the aggregate release gate for a VQA review bundle: manifest + captured evidence +
12
+ * finding-set + human-review marker ⇒ ONE verdict with stable codes and a machine-readable report.
13
+ *
14
+ * Checks: missing evidence (`VQA-GATE-EVIDENCE-MISSING`), missing findings file (`VQA-GATE-FINDINGS-MISSING`),
15
+ * orphan evidence (`VQA-GATE-EVIDENCE-ORPHAN`), invalid findings (`VQA-GATE-FINDING-INVALID`,
16
+ * `VQA-GATE-FINDING-FOREIGN`, `VQA-GATE-FINDING-REF-MISSING`), open blocker / high (`VQA-GATE-FINDING-OPEN-BLOCKER` /
17
+ * `-HIGH`), human review (`VQA-GATE-HUMAN-REVIEW-MISSING` / `-INVALID` / `-REJECTED`). A missing / unreadable bundle
18
+ * manifest (`VQA-GATE-MANIFEST-MISSING` / `-INVALID`) always fails — without it nothing can be checked.
19
+ */
20
+ export declare class DyE2E_VQA_ReviewGate_Util {
21
+ /** Runs every check and returns the report; `verdict` is `fail` when any blocking issue exists. */
22
+ static verify(options: DyE2E_VQA_ReviewGate_Options): DyE2E_VQA_ReviewGateReport_Interface;
23
+ /** Parses a `--fail-on a,b` list; an unknown category throws (a typo must not silently weaken the gate). */
24
+ static parseFailOn(raw: string | undefined): DyE2E_VQA_ReviewGateCategory_Type[];
25
+ /** Reads `<bundle>/manifest.json`; a missing / unreadable one is an always-blocking issue. */
26
+ private static readManifest;
27
+ /** Missing capture artifacts + evidence folders the manifest does not declare. */
28
+ private static checkEvidence;
29
+ /** Finding schema + consistency with the bundle + open blocker / high. Returns the number of findings read. */
30
+ private static checkFindings;
31
+ /** The human-review marker: present, well-formed, approving. */
32
+ private static checkHumanReview;
33
+ /** The subdirectory names of a directory. */
34
+ private static subdirs;
35
+ }
36
+ //# sourceMappingURL=review-gate.util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-gate.util.d.ts","sourceRoot":"","sources":["../../../../../src/_modules/vqa/_collections/utils/review-gate.util.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,4BAA4B,EAAE,MAAM,kCAAkC,CAAC;AAMhF,OAAO,EAEL,4BAA4B,EAC5B,iCAAiC,EAEjC,oCAAoC,EACrC,MAAM,gDAAgD,CAAC;AAIxD,mFAAmF;AACnF,eAAO,MAAM,gCAAgC,EAAE,iCAAiC,EACT,CAAC;AAExE;;;GAGG;AACH,eAAO,MAAM,iCAAiC,EAAE,4BAA4B,EAI3E,CAAC;AAcF;;;;;;;;;GASG;AACH,qBAAa,yBAAyB;IAEpC,mGAAmG;IACnG,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,4BAA4B,GAAG,oCAAoC;IAqC1F,4GAA4G;IAC5G,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,iCAAiC,EAAE;IAmBhF,8FAA8F;IAC9F,OAAO,CAAC,MAAM,CAAC,YAAY;IAiC3B,kFAAkF;IAClF,OAAO,CAAC,MAAM,CAAC,aAAa;IAqC5B,+GAA+G;IAC/G,OAAO,CAAC,MAAM,CAAC,aAAa;IAyE5B,gEAAgE;IAChE,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAuC/B,6CAA6C;IAC7C,OAAO,CAAC,MAAM,CAAC,OAAO;CAKvB"}
@@ -0,0 +1,232 @@
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 (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.DyE2E_VQA_ReviewGate_Util = exports.DYE2E_VQA_CLOSED_FINDING_STATUSES = exports.DYE2E_VQA_REVIEW_GATE_CATEGORIES = void 0;
27
+ const fs = __importStar(require("fs"));
28
+ const path = __importStar(require("path"));
29
+ const finding_status_enum_1 = require("../../_enums/finding-status.enum");
30
+ const finding_severity_enum_1 = require("../../_enums/finding-severity.enum");
31
+ const review_bundle_generator_1 = require("../../generators/review-bundle.generator");
32
+ const finding_validator_util_1 = require("./finding-validator.util");
33
+ /** BFR-FSMED-015 — every gate category, in report order (the default `failOn`). */
34
+ exports.DYE2E_VQA_REVIEW_GATE_CATEGORIES = ['missing', 'orphan', 'invalid', 'blocker', 'high', 'human-review'];
35
+ /**
36
+ * BFR-FSMED-015 — finding statuses that CLOSE a finding for the release verdict. Everything else (open, in-progress,
37
+ * fixed-but-not-re-audited, ready-for-re-audit, reopened) is still open.
38
+ */
39
+ exports.DYE2E_VQA_CLOSED_FINDING_STATUSES = [
40
+ finding_status_enum_1.DyE2E_VQA_FindingStatus_Type.verified,
41
+ finding_status_enum_1.DyE2E_VQA_FindingStatus_Type.ignored,
42
+ finding_status_enum_1.DyE2E_VQA_FindingStatus_Type.acceptedRisk,
43
+ ];
44
+ /**
45
+ * BFR-FSMED-015 (part 3) — the aggregate release gate for a VQA review bundle: manifest + captured evidence +
46
+ * finding-set + human-review marker ⇒ ONE verdict with stable codes and a machine-readable report.
47
+ *
48
+ * Checks: missing evidence (`VQA-GATE-EVIDENCE-MISSING`), missing findings file (`VQA-GATE-FINDINGS-MISSING`),
49
+ * orphan evidence (`VQA-GATE-EVIDENCE-ORPHAN`), invalid findings (`VQA-GATE-FINDING-INVALID`,
50
+ * `VQA-GATE-FINDING-FOREIGN`, `VQA-GATE-FINDING-REF-MISSING`), open blocker / high (`VQA-GATE-FINDING-OPEN-BLOCKER` /
51
+ * `-HIGH`), human review (`VQA-GATE-HUMAN-REVIEW-MISSING` / `-INVALID` / `-REJECTED`). A missing / unreadable bundle
52
+ * manifest (`VQA-GATE-MANIFEST-MISSING` / `-INVALID`) always fails — without it nothing can be checked.
53
+ */
54
+ class DyE2E_VQA_ReviewGate_Util {
55
+ /** Runs every check and returns the report; `verdict` is `fail` when any blocking issue exists. */
56
+ static verify(options) {
57
+ const failOn = options.failOn ?? exports.DYE2E_VQA_REVIEW_GATE_CATEGORIES;
58
+ const issues = [];
59
+ const add = (code, category, message, ref) => {
60
+ issues.push({ code: code, category: category, blocking: failOn.includes(category), message: message, ref: ref });
61
+ };
62
+ const manifest = DyE2E_VQA_ReviewGate_Util.readManifest(options.bundlePath, issues);
63
+ let findingsTotal = 0;
64
+ if (manifest) {
65
+ DyE2E_VQA_ReviewGate_Util.checkEvidence(options.bundlePath, manifest, add);
66
+ findingsTotal = DyE2E_VQA_ReviewGate_Util.checkFindings(options, manifest, add);
67
+ DyE2E_VQA_ReviewGate_Util.checkHumanReview(options, add);
68
+ }
69
+ const counts = {
70
+ 'missing': 0, 'orphan': 0, 'invalid': 0, 'blocker': 0, 'high': 0, 'human-review': 0,
71
+ };
72
+ issues.forEach((issue) => {
73
+ counts[issue.category]++;
74
+ });
75
+ return {
76
+ schema: 'dye2e-vqa-review-gate/1',
77
+ bundlePath: options.bundlePath,
78
+ featureId: manifest?.featureId ?? '',
79
+ verdict: issues.some((issue) => issue.blocking) ? 'fail' : 'pass',
80
+ failOn: failOn,
81
+ counts: counts,
82
+ findingsTotal: findingsTotal,
83
+ issues: issues,
84
+ };
85
+ }
86
+ /** Parses a `--fail-on a,b` list; an unknown category throws (a typo must not silently weaken the gate). */
87
+ static parseFailOn(raw) {
88
+ if (!raw) {
89
+ return exports.DYE2E_VQA_REVIEW_GATE_CATEGORIES;
90
+ }
91
+ return raw.split(',').map((part) => {
92
+ const category = exports.DYE2E_VQA_REVIEW_GATE_CATEGORIES
93
+ .find((known) => known === part.trim());
94
+ if (!category) {
95
+ throw new Error(`VQA-GATE-FAIL-ON-UNKNOWN: "${part.trim()}" — valid: ${exports.DYE2E_VQA_REVIEW_GATE_CATEGORIES.join(', ')}`);
96
+ }
97
+ return category;
98
+ });
99
+ }
100
+ /** Reads `<bundle>/manifest.json`; a missing / unreadable one is an always-blocking issue. */
101
+ static readManifest(bundlePath, issues) {
102
+ const manifestPath = path.join(bundlePath, 'manifest.json');
103
+ if (!fs.existsSync(manifestPath)) {
104
+ issues.push({
105
+ code: 'VQA-GATE-MANIFEST-MISSING', category: 'missing', blocking: true, ref: 'manifest.json',
106
+ message: `bundle manifest not found: ${manifestPath}`,
107
+ });
108
+ return undefined;
109
+ }
110
+ try {
111
+ const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf-8'));
112
+ if (!manifest?.featureId || !Array.isArray(manifest.states) || !Array.isArray(manifest.viewports)) {
113
+ throw new Error('featureId / states / viewports missing');
114
+ }
115
+ return manifest;
116
+ }
117
+ catch (err) {
118
+ issues.push({
119
+ code: 'VQA-GATE-MANIFEST-INVALID', category: 'invalid', blocking: true, ref: 'manifest.json',
120
+ message: `bundle manifest unreadable: ${err instanceof Error ? err.message : String(err)}`,
121
+ });
122
+ return undefined;
123
+ }
124
+ }
125
+ /** Missing capture artifacts + evidence folders the manifest does not declare. */
126
+ static checkEvidence(bundlePath, manifest, add) {
127
+ review_bundle_generator_1.DyE2E_VQA_ReviewBundle_Generator.verifyBundleArtifacts(bundlePath, manifest).missing
128
+ .forEach((ref) => add('VQA-GATE-EVIDENCE-MISSING', 'missing', `capture artifact missing: ${ref}`, ref));
129
+ const statesDir = path.join(bundlePath, 'states');
130
+ if (!fs.existsSync(statesDir)) {
131
+ return;
132
+ }
133
+ const orientations = manifest.orientations && manifest.orientations.length ? manifest.orientations : ['preserve'];
134
+ const stateIds = manifest.states.map((state) => state.stateId);
135
+ const viewportDirs = manifest.viewports.flatMap((viewport) => orientations.map((orientation) => `${viewport.key}-${orientation}`));
136
+ for (const stateDir of DyE2E_VQA_ReviewGate_Util.subdirs(statesDir)) {
137
+ if (!stateIds.includes(stateDir)) {
138
+ add('VQA-GATE-EVIDENCE-ORPHAN', 'orphan', `evidence for a state the manifest does not declare: ${stateDir}`, `states/${stateDir}`);
139
+ continue;
140
+ }
141
+ for (const viewportDir of DyE2E_VQA_ReviewGate_Util.subdirs(path.join(statesDir, stateDir))) {
142
+ if (!viewportDirs.includes(viewportDir)) {
143
+ add('VQA-GATE-EVIDENCE-ORPHAN', 'orphan', `evidence for a viewport / orientation the manifest does not declare: ${stateDir}/${viewportDir}`, `states/${stateDir}/${viewportDir}`);
144
+ }
145
+ }
146
+ }
147
+ }
148
+ /** Finding schema + consistency with the bundle + open blocker / high. Returns the number of findings read. */
149
+ static checkFindings(options, manifest, add) {
150
+ const findingsPath = options.findingsPath ?? path.join(options.bundlePath, 'findings', 'findings.json');
151
+ if (!fs.existsSync(findingsPath)) {
152
+ add('VQA-GATE-FINDINGS-MISSING', 'missing', `finding-set not found (the review did not run, or wrote elsewhere): ${findingsPath}`, findingsPath);
153
+ return 0;
154
+ }
155
+ let findings;
156
+ try {
157
+ const raw = JSON.parse(fs.readFileSync(findingsPath, 'utf-8'));
158
+ const list = Array.isArray(raw) ? raw : raw?.findings;
159
+ if (!Array.isArray(list)) {
160
+ throw new Error('expected an array or { findings: [] }');
161
+ }
162
+ findings = list;
163
+ }
164
+ catch (err) {
165
+ add('VQA-GATE-FINDING-INVALID', 'invalid', `finding-set unreadable: ${err instanceof Error ? err.message : String(err)}`, findingsPath);
166
+ return 0;
167
+ }
168
+ const stateIds = manifest.states.map((state) => state.stateId);
169
+ const viewportKeys = manifest.viewports.map((viewport) => viewport.key);
170
+ findings.forEach((finding, index) => {
171
+ const ref = finding?.findingId || `findings[${index}]`;
172
+ const validation = finding_validator_util_1.DyE2E_VQA_FindingValidator_Util.validate(finding);
173
+ if (!validation.ok) {
174
+ add('VQA-GATE-FINDING-INVALID', 'invalid', `schema: ${validation.errors
175
+ .map((e) => `${e.path} ${e.message}`).join('; ')}`, ref);
176
+ }
177
+ // Cross-check against the bundle: a finding about another feature / an undeclared state or viewport is foreign
178
+ if (finding?.featureId !== manifest.featureId || !stateIds.includes(finding?.stateId ?? '')
179
+ || !viewportKeys.includes(finding?.viewport ?? '')) {
180
+ add('VQA-GATE-FINDING-FOREIGN', 'invalid', `feature / state / viewport not in this bundle: ${finding?.featureId} / ${finding?.stateId} / ${finding?.viewport}`, ref);
181
+ }
182
+ // Every evidence reference must point at a file that exists in the bundle
183
+ [finding?.screenshotRef, finding?.domSnapshotRef]
184
+ .filter((evidenceRef) => !!evidenceRef)
185
+ .filter((evidenceRef) => !fs.existsSync(path.join(options.bundlePath, evidenceRef)))
186
+ .forEach((evidenceRef) => add('VQA-GATE-FINDING-REF-MISSING', 'invalid', `evidence reference not in the bundle: ${evidenceRef}`, ref));
187
+ const isOpen = !exports.DYE2E_VQA_CLOSED_FINDING_STATUSES
188
+ .some((status) => status === finding?.status);
189
+ if (isOpen && finding?.severity === finding_severity_enum_1.DyE2E_VQA_FindingSeverity_Type.blocker) {
190
+ add('VQA-GATE-FINDING-OPEN-BLOCKER', 'blocker', `open blocker (status: ${finding.status})`, ref);
191
+ }
192
+ if (isOpen && finding?.severity === finding_severity_enum_1.DyE2E_VQA_FindingSeverity_Type.high) {
193
+ add('VQA-GATE-FINDING-OPEN-HIGH', 'high', `open high (status: ${finding.status})`, ref);
194
+ }
195
+ });
196
+ return findings.length;
197
+ }
198
+ /** The human-review marker: present, well-formed, approving. */
199
+ static checkHumanReview(options, add) {
200
+ const reviewPath = options.humanReviewPath ?? path.join(options.bundlePath, 'human-review.json');
201
+ if (!fs.existsSync(reviewPath)) {
202
+ add('VQA-GATE-HUMAN-REVIEW-MISSING', 'human-review', `no human review marker: ${reviewPath}`, reviewPath);
203
+ return;
204
+ }
205
+ let review;
206
+ try {
207
+ review = JSON.parse(fs.readFileSync(reviewPath, 'utf-8'));
208
+ }
209
+ catch (err) {
210
+ add('VQA-GATE-HUMAN-REVIEW-INVALID', 'human-review', `human review marker unreadable: ${err instanceof Error ? err.message : String(err)}`, reviewPath);
211
+ return;
212
+ }
213
+ const wellFormed = typeof review?.reviewer === 'string' && !!review.reviewer.trim()
214
+ && typeof review.reviewedAt === 'string' && !Number.isNaN(Date.parse(review.reviewedAt))
215
+ && (review.verdict === 'approved' || review.verdict === 'rejected');
216
+ if (!wellFormed) {
217
+ add('VQA-GATE-HUMAN-REVIEW-INVALID', 'human-review', 'human review marker needs { reviewer, reviewedAt (ISO date), verdict: approved | rejected }', reviewPath);
218
+ return;
219
+ }
220
+ if (review.verdict === 'rejected') {
221
+ add('VQA-GATE-HUMAN-REVIEW-REJECTED', 'human-review', `the human reviewer (${review.reviewer}) rejected`, reviewPath);
222
+ }
223
+ }
224
+ /** The subdirectory names of a directory. */
225
+ static subdirs(dir) {
226
+ return fs.readdirSync(dir, { withFileTypes: true })
227
+ .filter((entry) => entry.isDirectory())
228
+ .map((entry) => entry.name);
229
+ }
230
+ }
231
+ exports.DyE2E_VQA_ReviewGate_Util = DyE2E_VQA_ReviewGate_Util;
232
+ //# sourceMappingURL=review-gate.util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-gate.util.js","sourceRoot":"","sources":["../../../../../src/_modules/vqa/_collections/utils/review-gate.util.ts"],"names":[],"mappings":"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"}
@@ -5,4 +5,5 @@ export * from './expected-feedback.interface';
5
5
  export * from './feature-manifest.interface';
6
6
  export * from './dom-evidence.interface';
7
7
  export * from './finding.interface';
8
+ export * from './review-gate.interface';
8
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/_modules/vqa/_models/interfaces/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/_modules/vqa/_models/interfaces/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC"}
@@ -21,4 +21,5 @@ __exportStar(require("./expected-feedback.interface"), exports);
21
21
  __exportStar(require("./feature-manifest.interface"), exports);
22
22
  __exportStar(require("./dom-evidence.interface"), exports);
23
23
  __exportStar(require("./finding.interface"), exports);
24
+ __exportStar(require("./review-gate.interface"), exports);
24
25
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/_modules/vqa/_models/interfaces/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wDAAsC;AACtC,2DAAyC;AACzC,+DAA6C;AAC7C,gEAA8C;AAC9C,+DAA6C;AAC7C,2DAAyC;AACzC,sDAAoC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/_modules/vqa/_models/interfaces/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wDAAsC;AACtC,2DAAyC;AACzC,+DAA6C;AAC7C,gEAA8C;AAC9C,+DAA6C;AAC7C,2DAAyC;AACzC,sDAAoC;AACpC,0DAAwC"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * BFR-FSMED-015 (3. rész) — a review-gate kategóriái: a `--fail-on` ezek közül választ.
3
+ * - `missing`: hiányzó evidence (capture-artifact) vagy hiányzó findings-fájl
4
+ * - `orphan`: a manifestben nem szereplő state / viewport evidence-mappája
5
+ * - `invalid`: sémahibás finding, vagy olyan feature / state / viewport / fájl-hivatkozás, ami a bundle-ben nincs
6
+ * - `blocker` / `high`: NEM lezárt blocker / high finding
7
+ * - `human-review`: hiányzó, sémahibás vagy elutasító emberi review-jelölő
8
+ */
9
+ export type DyE2E_VQA_ReviewGateCategory_Type = 'missing' | 'orphan' | 'invalid' | 'blocker' | 'high' | 'human-review';
10
+ /** BFR-FSMED-015 — egy gate-lelet stabil kóddal (a kód a gépi feldolgozás kulcsa, a szöveg az emberé). */
11
+ export interface DyE2E_VQA_ReviewGateIssue_Interface {
12
+ /** Stabil kód, pl. `VQA-GATE-EVIDENCE-MISSING`. */
13
+ code: string;
14
+ category: DyE2E_VQA_ReviewGateCategory_Type;
15
+ /** A lelet a `failOn` szerint bukást okoz-e. */
16
+ blocking: boolean;
17
+ message: string;
18
+ /** Bundle-relatív útvonal vagy finding-azonosító, amire a lelet vonatkozik. */
19
+ ref?: string;
20
+ }
21
+ /** BFR-FSMED-015 — az emberi review-jelölő (`human-review.json` a bundle-ben, vagy `--human-review <path>`). */
22
+ export interface DyE2E_VQA_HumanReview_Interface {
23
+ /** Ki nézte át (nem üres). */
24
+ reviewer: string;
25
+ /** Mikor (ISO-8601). */
26
+ reviewedAt: string;
27
+ /** A döntés. */
28
+ verdict: 'approved' | 'rejected';
29
+ notes?: string;
30
+ }
31
+ /** BFR-FSMED-015 — a gate gépileg olvasható eredménye (`--report <path>` JSON). */
32
+ export interface DyE2E_VQA_ReviewGateReport_Interface {
33
+ /** A riport-séma azonosítója. */
34
+ schema: 'dye2e-vqa-review-gate/1';
35
+ bundlePath: string;
36
+ featureId: string;
37
+ verdict: 'pass' | 'fail';
38
+ failOn: DyE2E_VQA_ReviewGateCategory_Type[];
39
+ /** Leletek száma kategóriánként (a nem-blokkolók is). */
40
+ counts: Record<DyE2E_VQA_ReviewGateCategory_Type, number>;
41
+ findingsTotal: number;
42
+ issues: DyE2E_VQA_ReviewGateIssue_Interface[];
43
+ }
44
+ /** BFR-FSMED-015 — a gate bemenete. */
45
+ export interface DyE2E_VQA_ReviewGate_Options {
46
+ /** A review-bundle mappája (benne `manifest.json`). */
47
+ bundlePath: string;
48
+ /** Finding-set JSON (tömb vagy `{ findings: [] }`). Default: `<bundle>/findings/findings.json`. */
49
+ findingsPath?: string;
50
+ /** Emberi review-jelölő. Default: `<bundle>/human-review.json`. */
51
+ humanReviewPath?: string;
52
+ /** Mely kategóriák buktatnak. Default: mind a hat. */
53
+ failOn?: DyE2E_VQA_ReviewGateCategory_Type[];
54
+ }
55
+ //# sourceMappingURL=review-gate.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-gate.interface.d.ts","sourceRoot":"","sources":["../../../../../src/_modules/vqa/_models/interfaces/review-gate.interface.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,MAAM,iCAAiC,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,cAAc,CAAC;AAEvH,0GAA0G;AAC1G,MAAM,WAAW,mCAAmC;IAClD,mDAAmD;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,iCAAiC,CAAC;IAC5C,gDAAgD;IAChD,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,+EAA+E;IAC/E,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,gHAAgH;AAChH,MAAM,WAAW,+BAA+B;IAC9C,8BAA8B;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,wBAAwB;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB;IAChB,OAAO,EAAE,UAAU,GAAG,UAAU,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,mFAAmF;AACnF,MAAM,WAAW,oCAAoC;IACnD,iCAAiC;IACjC,MAAM,EAAE,yBAAyB,CAAC;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,MAAM,EAAE,iCAAiC,EAAE,CAAC;IAC5C,yDAAyD;IACzD,MAAM,EAAE,MAAM,CAAC,iCAAiC,EAAE,MAAM,CAAC,CAAC;IAC1D,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,mCAAmC,EAAE,CAAC;CAC/C;AAED,uCAAuC;AACvC,MAAM,WAAW,4BAA4B;IAC3C,uDAAuD;IACvD,UAAU,EAAE,MAAM,CAAC;IACnB,mGAAmG;IACnG,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mEAAmE;IACnE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sDAAsD;IACtD,MAAM,CAAC,EAAE,iCAAiC,EAAE,CAAC;CAC9C"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=review-gate.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-gate.interface.js","sourceRoot":"","sources":["../../../../../src/_modules/vqa/_models/interfaces/review-gate.interface.ts"],"names":[],"mappings":""}
@@ -29,12 +29,12 @@ class DyE2E_VQA_AIAgentReadme_Template {
29
29
  1. **Olvasd át a manifest-et** (\`manifest.json\`) — feature-cél, állapotok, viewportok, critical-element-ek.
30
30
  2. **Tekintsd át a \`summary.md\`-t** — feature-state-viewport tábla a bundle szerkezetével.
31
31
  3. **Per (állapot × viewport)** menj végig:
32
- - \`screenshots/<stateId>/<viewport>-full.png\` — full-page kép
33
- - \`screenshots/<stateId>/<viewport>-fold.png\` — above-fold (viewport-only)
34
- - \`crops/<stateId>/<viewport>/<region>.png\` — region-crop-ok (modal, primary-cta, form, error)
35
- - \`dom-snapshots/<stateId>/<viewport>.json\` — DOM-metrikák
36
- - \`evidence/<stateId>/<viewport>.json\` — 16 DOM-detektor strukturált bizonyíték
37
- - \`a11y/<stateId>/<viewport>.json\` — axe-core a11y scan
32
+ *(minden a \`states/<stateId>/<viewport>-<orientation>/\` mappában — ezt írja a \`capture.spec.ts\`)*
33
+ - \`full.png\` — full-page kép
34
+ - \`fold.png\` — above-fold (viewport-only)
35
+ - \`dom-snapshot.json\` — DOM-metrikák
36
+ - \`evidence.json\` — 16 DOM-detektor strukturált bizonyíték
37
+ - \`a11y.json\` — axe-core a11y scan (ha a manifest bekapcsolja)
38
38
  4. **QA-rubric szerint** értékeld az audit-kérdéseket (14 alap + 3 UX-kiegészítő; lásd lent) — és
39
39
  alkalmazd a kötelező **UX kritikus-felhasználó réteget** (mindset + evidence + kimenet-keretezés).
40
40
  5. **Finding-eket írj** a \`findings.md\`-be a megadott schema szerint (lásd lent).
@@ -156,8 +156,8 @@ A finding-eket írd a \`findings.md\` (markdown) ÉS \`findings.json\` (validál
156
156
  "stateId": "<manifest-state-id>",
157
157
  "viewport": "<manifest-viewport-key>",
158
158
  "orientation": "portrait" | "landscape", // opcionális
159
- "screenshotRef": "screenshots/<stateId>/<viewport>-full.png", // bundle-relative
160
- "domSnapshotRef": "dom-snapshots/<stateId>/<viewport>.json", // opcionális
159
+ "screenshotRef": "states/<stateId>/<viewport>-<orientation>/full.png", // bundle-relative, LÉTEZŐ fájl
160
+ "domSnapshotRef": "states/<stateId>/<viewport>-<orientation>/dom-snapshot.json", // opcionális
161
161
  "additionalEvidenceRefs": [], // opcionális extra-utak
162
162
  "description": "<észlelt probléma — Te írod>",
163
163
  "expectedBehavior": "<mit várnánk helyette — Te írod>",
@@ -31,7 +31,7 @@ import {
31
31
  DyE2E_VQA_AntiFlake_Css_Const,${a11yEnabled ? `
32
32
  DyE2E_VQA_Axe_CdnUrl_Const,
33
33
  DyE2E_VQA_AxeRunScript_Const,` : ''}
34
- } from '@futdevpro/dynamo-e2e/vqa';
34
+ } from '@futdevpro/dynamo-e2e';
35
35
 
36
36
  const VQA_OUT_DIR: string = process.env.VQA_OUT_DIR
37
37
  || path.join(process.cwd(), 'review-bundles', '${manifest.featureId}', \`run-\${process.env.VQA_RUN_ID || Date.now()}\`);
@@ -6,13 +6,14 @@ import { DyE2E_VQA_FeatureManifest_Interface } from '../_models/interfaces/featu
6
6
  * - `README.md` — AI-agent review-instrukció (rubric + finding-schema)
7
7
  * - `summary.md` — feature × state × viewport tábla
8
8
  * - `manifest.json` — a futtatott manifest másolata
9
- * - `capture-spec.ts` — a generált Playwright spec
9
+ * - `capture.spec.ts` + `playwright.config.ts` — a generált Playwright spec és a SAJÁT configja (BFR-FSMED-015)
10
10
  * - `findings/` — üres directory, ahova az AI agent ír (findings.md / findings.json)
11
11
  * - `meta/run-id.txt`, `meta/build-id.txt`, `meta/timing.json`
12
- * - (capture-time után: `screenshots/`, `crops/`, `dom-snapshots/`, `evidence/`, `a11y/`)
12
+ * - (capture-time után: `states/<stateId>/<viewport>-<orientation>/` — full.png, fold.png, dom-snapshot.json, evidence.json, a11y.json)
13
13
  *
14
- * **A capture-spec ELLEN futtatja a user a `playwright test`-et** → az artifact-ok
15
- * a megfelelő helyre kerülnek (a generált spec tudja a `VQA_OUT_DIR`-t).
14
+ * **A futtatás a bundle SAJÁT configjával megy** (`DyE2E_VQA_ReviewBundle_Generator.captureCommand(bundlePath)`):
15
+ * a projekt configjának `testDir`/`testMatch`-e a bundle-t nem látná ("No tests found").
16
+ * Az artifact-ok a megfelelő helyre kerülnek (a generált spec tudja a `VQA_OUT_DIR`-t).
16
17
  *
17
18
  * **scope-LOCK**: NEM csinál AI-call-ot. A bundle "kész AI-agent-re vár".
18
19
  */
@@ -36,7 +37,18 @@ export interface DyE2E_VQA_ReviewBundle_Result {
36
37
  message: string;
37
38
  }[];
38
39
  }
40
+ /** BFR-FSMED-015 — a generált capture-spec fájlneve: `.spec.ts`, hogy a Playwright `testMatch`-e felismerje. */
41
+ export declare const DYE2E_VQA_CAPTURE_SPEC_FILE: string;
42
+ /** BFR-FSMED-015 — a bundle SAJÁT Playwright configja (a bundle a projekt `testDir`-én kívül él). */
43
+ export declare const DYE2E_VQA_CAPTURE_CONFIG_FILE: string;
39
44
  export declare class DyE2E_VQA_ReviewBundle_Generator {
45
+ /**
46
+ * BFR-FSMED-015 — a bizonyítottan futó capture-parancs: a bundle saját configjával (a projekt `testDir` / `testMatch`
47
+ * beállítása nem számít). Futtasd a projekt gyökeréből (ott oldódik fel a `@playwright/test` és a dynamo-e2e).
48
+ */
49
+ static captureCommand(bundlePath: string): string;
50
+ /** BFR-FSMED-015 — a bundle Playwright-configja: csak a saját capture-spec-jét futtatja, a saját mappájából. */
51
+ static emitCaptureConfig(): string;
40
52
  static generate(manifest: DyE2E_VQA_FeatureManifest_Interface, outputBase: string, options?: DyE2E_VQA_ReviewBundle_Options): DyE2E_VQA_ReviewBundle_Result;
41
53
  /** A capture-spec futása UTÁN futtatható; csak ellenőriz hogy a kötelező artifact-ok meg vannak. */
42
54
  static verifyBundleArtifacts(bundlePath: string, manifest: DyE2E_VQA_FeatureManifest_Interface): {
@@ -1 +1 @@
1
- {"version":3,"file":"review-bundle.generator.d.ts","sourceRoot":"","sources":["../../../../src/_modules/vqa/generators/review-bundle.generator.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,mCAAmC,EAEpC,MAAM,kDAAkD,CAAC;AAM1D;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,8BAA8B;IAC7C,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kEAAkE;IAClE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mFAAmF;IACnF,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,6BAA6B;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,eAAe,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACpE;AAED,qBAAa,gCAAgC;IAE3C,MAAM,CAAC,QAAQ,CACb,QAAQ,EAAE,mCAAmC,EAC7C,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,8BAA8B,GACvC,6BAA6B;IA8EhC,oGAAoG;IACpG,MAAM,CAAC,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,mCAAmC,GAAG;QAC/F,EAAE,EAAE,OAAO,CAAC;QACZ,OAAO,EAAE,MAAM,EAAE,CAAC;KACnB;IAsBD,qEAAqE;IACrE,OAAO,CAAC,MAAM,CAAC,cAAc;CAG9B"}
1
+ {"version":3,"file":"review-bundle.generator.d.ts","sourceRoot":"","sources":["../../../../src/_modules/vqa/generators/review-bundle.generator.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,mCAAmC,EAEpC,MAAM,kDAAkD,CAAC;AAM1D;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,WAAW,8BAA8B;IAC7C,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kEAAkE;IAClE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mFAAmF;IACnF,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,6BAA6B;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,eAAe,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACpE;AAED,gHAAgH;AAChH,eAAO,MAAM,2BAA2B,EAAE,MAA0B,CAAC;AAErE,qGAAqG;AACrG,eAAO,MAAM,6BAA6B,EAAE,MAA+B,CAAC;AAE5E,qBAAa,gCAAgC;IAE3C;;;OAGG;IACH,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAIjD,gHAAgH;IAChH,MAAM,CAAC,iBAAiB,IAAI,MAAM;IAclC,MAAM,CAAC,QAAQ,CACb,QAAQ,EAAE,mCAAmC,EAC7C,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,8BAA8B,GACvC,6BAA6B;IA+EhC,oGAAoG;IACpG,MAAM,CAAC,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,mCAAmC,GAAG;QAC/F,EAAE,EAAE,OAAO,CAAC;QACZ,OAAO,EAAE,MAAM,EAAE,CAAC;KACnB;IAsBD,qEAAqE;IACrE,OAAO,CAAC,MAAM,CAAC,cAAc;CAG9B"}
@@ -23,14 +23,39 @@ var __importStar = (this && this.__importStar) || function (mod) {
23
23
  return result;
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.DyE2E_VQA_ReviewBundle_Generator = void 0;
26
+ exports.DyE2E_VQA_ReviewBundle_Generator = exports.DYE2E_VQA_CAPTURE_CONFIG_FILE = exports.DYE2E_VQA_CAPTURE_SPEC_FILE = void 0;
27
27
  const fs = __importStar(require("fs"));
28
28
  const path = __importStar(require("path"));
29
29
  const manifest_validator_util_1 = require("../_collections/utils/manifest-validator.util");
30
30
  const ai_agent_readme_template_1 = require("./ai-agent-readme.template");
31
31
  const bundle_summary_template_1 = require("./bundle-summary.template");
32
32
  const capture_spec_generator_1 = require("./capture-spec.generator");
33
+ /** BFR-FSMED-015 — a generált capture-spec fájlneve: `.spec.ts`, hogy a Playwright `testMatch`-e felismerje. */
34
+ exports.DYE2E_VQA_CAPTURE_SPEC_FILE = 'capture.spec.ts';
35
+ /** BFR-FSMED-015 — a bundle SAJÁT Playwright configja (a bundle a projekt `testDir`-én kívül él). */
36
+ exports.DYE2E_VQA_CAPTURE_CONFIG_FILE = 'playwright.config.ts';
33
37
  class DyE2E_VQA_ReviewBundle_Generator {
38
+ /**
39
+ * BFR-FSMED-015 — a bizonyítottan futó capture-parancs: a bundle saját configjával (a projekt `testDir` / `testMatch`
40
+ * beállítása nem számít). Futtasd a projekt gyökeréből (ott oldódik fel a `@playwright/test` és a dynamo-e2e).
41
+ */
42
+ static captureCommand(bundlePath) {
43
+ return `VQA_OUT_DIR="${bundlePath}" npx playwright test --config "${path.join(bundlePath, exports.DYE2E_VQA_CAPTURE_CONFIG_FILE)}"`;
44
+ }
45
+ /** BFR-FSMED-015 — a bundle Playwright-configja: csak a saját capture-spec-jét futtatja, a saját mappájából. */
46
+ static emitCaptureConfig() {
47
+ return `// AUTOGEN by @futdevpro/dynamo-e2e/vqa — DyE2E_VQA_ReviewBundle_Generator. DO NOT EDIT.
48
+ import { defineConfig } from '@playwright/test';
49
+
50
+ export default defineConfig({
51
+ testDir: '.',
52
+ testMatch: '${exports.DYE2E_VQA_CAPTURE_SPEC_FILE}',
53
+ fullyParallel: false,
54
+ reporter: 'list',
55
+ use: { ignoreHTTPSErrors: true },
56
+ });
57
+ `;
58
+ }
34
59
  static generate(manifest, outputBase, options) {
35
60
  const validation = manifest_validator_util_1.DyE2E_VQA_ManifestValidator_Util.validate(manifest);
36
61
  if (!validation.ok) {
@@ -66,11 +91,12 @@ class DyE2E_VQA_ReviewBundle_Generator {
66
91
  const summaryPath = path.join(bundlePath, 'summary.md');
67
92
  fs.writeFileSync(summaryPath, bundle_summary_template_1.DyE2E_VQA_BundleSummary_Template.render(manifest, runId));
68
93
  files.push('summary.md');
69
- // capture-spec.ts (a user innen futtatja `playwright test capture-spec.ts`)
94
+ // capture.spec.ts + a bundle saját playwright.config.ts-e (futtatás: `captureCommand(bundlePath)`)
70
95
  if (!options?.skipCaptureSpec) {
71
- const specPath = path.join(bundlePath, 'capture-spec.ts');
72
- fs.writeFileSync(specPath, capture_spec_generator_1.DyE2E_VQA_CaptureSpec_Generator.emit(manifest));
73
- files.push('capture-spec.ts');
96
+ fs.writeFileSync(path.join(bundlePath, exports.DYE2E_VQA_CAPTURE_SPEC_FILE), capture_spec_generator_1.DyE2E_VQA_CaptureSpec_Generator.emit(manifest));
97
+ files.push(exports.DYE2E_VQA_CAPTURE_SPEC_FILE);
98
+ fs.writeFileSync(path.join(bundlePath, exports.DYE2E_VQA_CAPTURE_CONFIG_FILE), DyE2E_VQA_ReviewBundle_Generator.emitCaptureConfig());
99
+ files.push(exports.DYE2E_VQA_CAPTURE_CONFIG_FILE);
74
100
  }
75
101
  // findings/ üres mappa (AI agent írja ide a findings.md + findings.json-t)
76
102
  const findingsDir = path.join(bundlePath, 'findings');
@@ -1 +1 @@
1
- {"version":3,"file":"review-bundle.generator.js","sourceRoot":"","sources":["../../../../src/_modules/vqa/generators/review-bundle.generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"review-bundle.generator.js","sourceRoot":"","sources":["../../../../src/_modules/vqa/generators/review-bundle.generator.ts"],"names":[],"mappings":"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"}
package/build/index.js CHANGED
@@ -24,5 +24,5 @@ __exportStar(require("./_modules/cwv/index"), exports);
24
24
  __exportStar(require("./_modules/vqa/index"), exports);
25
25
  __exportStar(require("./_modules/game/index"), exports);
26
26
  /** Package-version stamp — npm-publish-time runtime-érték. */
27
- exports.DYE2E_PACKAGE_VERSION = '01.18.18';
27
+ exports.DYE2E_PACKAGE_VERSION = '01.18.21';
28
28
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@futdevpro/dynamo-e2e",
3
- "version": "01.18.18",
3
+ "version": "01.18.21",
4
4
  "description": "End-to-end testing engine for the Dynamo + FDP ecosystem — auto-generated form-coverage tests, viewport audit matrix, CWV diagnostics. Settings-POJO-first.",
5
5
  "DyBu_settings": {
6
6
  "packageType": "core-package",