@futdevpro/dynamo-e2e 1.18.21 → 1.18.23

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 (38) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/bin/dye2e.js +49 -0
  3. package/build/_modules/coverage/_collections/coverage-catalog.util.d.ts +22 -0
  4. package/build/_modules/coverage/_collections/coverage-catalog.util.d.ts.map +1 -0
  5. package/build/_modules/coverage/_collections/coverage-catalog.util.js +217 -0
  6. package/build/_modules/coverage/_collections/coverage-catalog.util.js.map +1 -0
  7. package/build/_modules/coverage/_models/coverage-catalog.interface.d.ts +75 -0
  8. package/build/_modules/coverage/_models/coverage-catalog.interface.d.ts.map +1 -0
  9. package/build/_modules/coverage/_models/coverage-catalog.interface.js +8 -0
  10. package/build/_modules/coverage/_models/coverage-catalog.interface.js.map +1 -0
  11. package/build/_modules/coverage/index.d.ts +3 -0
  12. package/build/_modules/coverage/index.d.ts.map +1 -0
  13. package/build/_modules/coverage/index.js +20 -0
  14. package/build/_modules/coverage/index.js.map +1 -0
  15. package/build/_modules/game/_collections/game-seam.const.d.ts +20 -0
  16. package/build/_modules/game/_collections/game-seam.const.d.ts.map +1 -0
  17. package/build/_modules/game/_collections/game-seam.const.js +31 -0
  18. package/build/_modules/game/_collections/game-seam.const.js.map +1 -0
  19. package/build/_modules/game/game-seam.helper.d.ts +15 -1
  20. package/build/_modules/game/game-seam.helper.d.ts.map +1 -1
  21. package/build/_modules/game/game-seam.helper.js +44 -9
  22. package/build/_modules/game/game-seam.helper.js.map +1 -1
  23. package/build/_modules/game/game-seam.installer.d.ts +50 -0
  24. package/build/_modules/game/game-seam.installer.d.ts.map +1 -0
  25. package/build/_modules/game/game-seam.installer.js +76 -0
  26. package/build/_modules/game/game-seam.installer.js.map +1 -0
  27. package/build/_modules/game/index.d.ts +2 -0
  28. package/build/_modules/game/index.d.ts.map +1 -1
  29. package/build/_modules/game/index.js +2 -0
  30. package/build/_modules/game/index.js.map +1 -1
  31. package/build/_modules/generators/_collections/cli-runner.util.d.ts.map +1 -1
  32. package/build/_modules/generators/_collections/cli-runner.util.js +11 -0
  33. package/build/_modules/generators/_collections/cli-runner.util.js.map +1 -1
  34. package/build/index.d.ts +1 -0
  35. package/build/index.d.ts.map +1 -1
  36. package/build/index.js +2 -1
  37. package/build/index.js.map +1 -1
  38. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -3,8 +3,45 @@
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.23] — 2026-09-25 — Game preset: page-side seam installer (BFR-WARFACTORY-008)
7
+
8
+ - Added `DyE2E_installGameSeam({ seam, capabilities, … })` (`/game`, browser-safe): host allow-list + explicit opt-in
9
+ guard, capability ⇄ method validation at install time, attach and ready event in the same tick ("attach = ready"),
10
+ stale-safe `uninstall()`. Before it every game had to hand-roll the guard and the ready event — and a seam without
11
+ the event is never seen by the event-driven `waitForSeam()`.
12
+ - `DyE2E_GameSeam_Helper`: `navigateAndWaitForSeam(url)`, `reloadAndWaitForSeam()`, `clickWorld(point, canvas)`
13
+ (canvas-relative CSS pixels, off-canvas point throws).
14
+ - Fixed: the default `::1` allow-list entry never matched (`new URL('http://[::1]/').hostname === '[::1]'`); hosts are
15
+ compared bracket-free (`DyE2E_normalizeGameSeamHost`), on both sides.
16
+ - The wire contract (`DYE2E_GAME_SEAM_DEFAULTS`, `DYE2E_GAME_CAPABILITY_METHODS`) now has one home, shared by both halves.
17
+ - Tests: 6 unit + 6 real-Chromium specs (the COMPILED installer loaded into the page through a two-module shim — any
18
+ other `require` throws, proving browser-safety); mutations 16/16 killed (incl. the no-window guard); suite 531/0 + 1.
19
+
20
+ ## [01.18.22] — 2026-09-25 — Coverage catalog ↔ evidence validator (BFR-FSMED-006)
21
+
22
+ - ⚠️ The first 01.18.22 CI run failed the COVERAGE gate (functions 61%, gate 75%) — not a test failure: the runnable-capture
23
+ spec's `playwright test --list` child loaded the whole package through Playwright's loader, and c8 merged it as ~150
24
+ never-called functions. The child's `NODE_V8_COVERAGE` now goes to a discard dir (deleting the variable is not enough
25
+ on Windows — measured); functions back to 90%.
26
+
27
+ - Added `DyE2E_validateCoverageCatalog({ featureCatalogPath, journeyCatalogPath, discoveredTestIds?, featureIdPrefix?,
28
+ journeyIdPrefix? })`, `DyE2E_writeCoverageReport(report, path)` and `DyE2E_discoverTestIds({ roots, idPattern })`
29
+ (root export), plus `dye2e validate-coverage-catalog --features --journeys [--scan --id-pattern] [--report]
30
+ [--require-complete]` (exit 0 ok · 1 findings, or not complete in release mode · 2 usage).
31
+ - Checks, with stable `COV-*` codes: an EMPTY or unreadable catalog is never green (`COV-ZERO-DENOMINATOR`,
32
+ `COV-CATALOG-UNREADABLE`) · duplicate / invalid entries · feature ↔ journey links BOTH ways (`COV-LINK-UNKNOWN`,
33
+ `COV-LINK-ONE-WAY`) · `covered` needs evidence, anything else needs `missingEvidence` · evidence files exist and each
34
+ claimed id is in them, with the layer prefix; journey evidence never counts as feature evidence · with discovered
35
+ ids: claimed-but-absent (`COV-EVIDENCE-ID-UNDISCOVERED`) and present-but-unclaimed (`COV-EVIDENCE-ORPHAN`).
36
+ - The report (`schema: dye2e-coverage-report/1`) keeps the feature and the journey denominators SEPARATE, each split
37
+ into covered / red / pending ids, plus the orphan / undiscovered ids; `releaseReady` only when valid, both
38
+ denominators > 0 and every entry covered. Project-specific rules (requirement mapping, variants …) stay project-side.
39
+
6
40
  ## [01.18.21] — 2026-09-25 — VQA aggregate review gate (BFR-FSMED-015, part 3)
7
41
 
42
+ - ⚠️ **01.18.19 and 01.18.20 were never published on their own:** the CI queue coalesced the quick successive pushes
43
+ into one run — their content (journey context, runnable capture) is published in 01.18.21.
44
+
8
45
  - Added `DyE2E_VQA_ReviewGate_Util.verify({ bundlePath, findingsPath?, humanReviewPath?, failOn? })` and the CLI
9
46
  `dye2e verify-review-bundle --bundle <path> [--findings] [--human-review] [--report <json>] [--fail-on a,b]`
10
47
  (exit 0 pass · 1 fail · 2 usage): manifest + captured evidence + finding-set + human-review marker ⇒ ONE release
package/bin/dye2e.js CHANGED
@@ -472,6 +472,55 @@ function main() {
472
472
  process.exit(report.verdict === 'pass' ? 0 : 1);
473
473
  }
474
474
 
475
+ if (parsed.command === 'validate-coverage-catalog') {
476
+ // BFR-FSMED-006 — catalog <-> evidence validator: exit 0 ok, 1 findings (or not complete with --require-complete), 2 usage
477
+ const cov = require('../build/_modules/coverage/_collections/coverage-catalog.util');
478
+ const featuresP = parsed.flags.features;
479
+ const journeysP = parsed.flags.journeys;
480
+ if (!featuresP || !journeysP) {
481
+ process.stderr.write('[dye2e] error: --features <path> and --journeys <path> required\n');
482
+ process.exit(2);
483
+ }
484
+ let discovered;
485
+ if (parsed.flags.scan) {
486
+ if (!parsed.flags['id-pattern']) {
487
+ process.stderr.write('[dye2e] error: --scan needs --id-pattern <regex>\n');
488
+ process.exit(2);
489
+ }
490
+ let idPattern;
491
+ try {
492
+ idPattern = new RegExp(parsed.flags['id-pattern'], 'g');
493
+ } catch (e) {
494
+ process.stderr.write('[dye2e] error: invalid --id-pattern: ' + e.message + '\n');
495
+ process.exit(2);
496
+ }
497
+ discovered = cov.DyE2E_discoverTestIds({
498
+ roots: String(parsed.flags.scan).split(',').map((r) => path.resolve(process.cwd(), r.trim())),
499
+ idPattern: idPattern,
500
+ });
501
+ }
502
+ const report = cov.DyE2E_validateCoverageCatalog({
503
+ featureCatalogPath: path.resolve(process.cwd(), featuresP),
504
+ journeyCatalogPath: path.resolve(process.cwd(), journeysP),
505
+ discoveredTestIds: discovered,
506
+ featureIdPrefix: parsed.flags['feature-prefix'],
507
+ journeyIdPrefix: parsed.flags['journey-prefix'],
508
+ });
509
+ if (parsed.flags.report) {
510
+ cov.DyE2E_writeCoverageReport(report, path.resolve(process.cwd(), parsed.flags.report));
511
+ }
512
+ const layer = (name, l) => name + ' ' + l.covered.length + '/' + l.denominator + ' covered (red ' + l.red.length +
513
+ ', pending ' + l.pending.length + ')';
514
+ process.stdout.write('[dye2e coverage] ' + layer('features', report.features) + '; ' + layer('journeys', report.journeys) +
515
+ '; orphan ' + report.orphanEvidenceIds.length + '; findings ' + report.findings.length +
516
+ '; releaseReady=' + report.releaseReady + '\n');
517
+ for (const f of report.findings) {
518
+ process.stdout.write(' ✗ ' + f.code + ' [' + f.ref + '] — ' + f.message + '\n');
519
+ }
520
+ const requireComplete = parsed.flags['require-complete'] !== undefined;
521
+ process.exit(!report.structurallyValid || (requireComplete && !report.releaseReady) ? 1 : 0);
522
+ }
523
+
475
524
  process.stderr.write(`[dye2e] unknown command: ${parsed.command}\n`);
476
525
  process.stderr.write(DyE2E_CliRunner_Util.helpText());
477
526
  process.exit(2);
@@ -0,0 +1,22 @@
1
+ import { DyE2E_CoverageCatalog_Options, DyE2E_CoverageReport_Interface } from '../_models/coverage-catalog.interface';
2
+ /**
3
+ * BFR-FSMED-006 — two-way feature / journey catalog ↔ test-evidence validator + coverage report.
4
+ *
5
+ * Findings (stable codes): `COV-CATALOG-UNREADABLE` · `COV-ZERO-DENOMINATOR` (an EMPTY catalog is never green) ·
6
+ * `COV-DUPLICATE-ID` · `COV-ENTRY-INVALID` · `COV-LINK-UNKNOWN` / `COV-LINK-ONE-WAY` (feature ↔ journey both ways) ·
7
+ * `COV-STATUS-COVERED-WITHOUT-EVIDENCE` · `COV-MISSING-EVIDENCE-UNEXPLAINED` · `COV-EVIDENCE-FILE-MISSING` ·
8
+ * `COV-EVIDENCE-ID-NOT-IN-FILE` · `COV-EVIDENCE-ID-PREFIX` · `COV-JOURNEY-EVIDENCE-AS-FEATURE` ·
9
+ * with discovered ids: `COV-EVIDENCE-ID-UNDISCOVERED` · `COV-EVIDENCE-ORPHAN`.
10
+ */
11
+ export declare function DyE2E_validateCoverageCatalog(options: DyE2E_CoverageCatalog_Options): DyE2E_CoverageReport_Interface;
12
+ /** Writes the report as JSON (creating the folder). */
13
+ export declare function DyE2E_writeCoverageReport(report: DyE2E_CoverageReport_Interface, reportPath: string): void;
14
+ /**
15
+ * Collects the test ids that really exist: every `idPattern` match in the `*.spec.ts` / `*.test.ts` files under
16
+ * `roots` (the ids live in the test titles). Sorted, unique.
17
+ */
18
+ export declare function DyE2E_discoverTestIds(set: {
19
+ roots: string[];
20
+ idPattern: RegExp;
21
+ }): string[];
22
+ //# sourceMappingURL=coverage-catalog.util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coverage-catalog.util.d.ts","sourceRoot":"","sources":["../../../../src/_modules/coverage/_collections/coverage-catalog.util.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,6BAA6B,EAI7B,8BAA8B,EAC/B,MAAM,uCAAuC,CAAC;AAW/C;;;;;;;;GAQG;AACH,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,6BAA6B,GAAG,8BAA8B,CAgEpH;AAED,uDAAuD;AACvD,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,8BAA8B,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAG1G;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,EAAE,CAqB3F"}
@@ -0,0 +1,217 @@
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_validateCoverageCatalog = DyE2E_validateCoverageCatalog;
27
+ exports.DyE2E_writeCoverageReport = DyE2E_writeCoverageReport;
28
+ exports.DyE2E_discoverTestIds = DyE2E_discoverTestIds;
29
+ const fs = __importStar(require("fs"));
30
+ const path = __importStar(require("path"));
31
+ /**
32
+ * BFR-FSMED-006 — two-way feature / journey catalog ↔ test-evidence validator + coverage report.
33
+ *
34
+ * Findings (stable codes): `COV-CATALOG-UNREADABLE` · `COV-ZERO-DENOMINATOR` (an EMPTY catalog is never green) ·
35
+ * `COV-DUPLICATE-ID` · `COV-ENTRY-INVALID` · `COV-LINK-UNKNOWN` / `COV-LINK-ONE-WAY` (feature ↔ journey both ways) ·
36
+ * `COV-STATUS-COVERED-WITHOUT-EVIDENCE` · `COV-MISSING-EVIDENCE-UNEXPLAINED` · `COV-EVIDENCE-FILE-MISSING` ·
37
+ * `COV-EVIDENCE-ID-NOT-IN-FILE` · `COV-EVIDENCE-ID-PREFIX` · `COV-JOURNEY-EVIDENCE-AS-FEATURE` ·
38
+ * with discovered ids: `COV-EVIDENCE-ID-UNDISCOVERED` · `COV-EVIDENCE-ORPHAN`.
39
+ */
40
+ function DyE2E_validateCoverageCatalog(options) {
41
+ const findings = [];
42
+ const add = (code, ref, message) => {
43
+ findings.push({ code: code, ref: ref, message: message });
44
+ };
45
+ const features = readEntries(options.featureCatalogPath, 'features', add);
46
+ const journeys = readEntries(options.journeyCatalogPath, 'journeys', add);
47
+ const featureLayer = {
48
+ name: 'feature',
49
+ idOf: (entry) => entry.featureId ?? '',
50
+ linksOf: (entry) => entry.journeyIds ?? [],
51
+ catalogPath: options.featureCatalogPath,
52
+ idPrefix: options.featureIdPrefix,
53
+ };
54
+ const journeyLayer = {
55
+ name: 'journey',
56
+ idOf: (entry) => entry.journeyId ?? '',
57
+ linksOf: (entry) => entry.featureIds ?? [],
58
+ catalogPath: options.journeyCatalogPath,
59
+ idPrefix: options.journeyIdPrefix,
60
+ };
61
+ validateLayer(featureLayer, features, journeyLayer, journeys, options, add);
62
+ validateLayer(journeyLayer, journeys, featureLayer, features, options, add);
63
+ // Two-way evidence discovery: claimed-but-absent ids and present-but-unclaimed (orphan) ids
64
+ const claimed = [...features, ...journeys]
65
+ .flatMap((entry) => entry.evidenceTestIds ?? []);
66
+ let orphanEvidenceIds = [];
67
+ let undiscoveredEvidenceIds = [];
68
+ if (options.discoveredTestIds) {
69
+ const discovered = new Set(options.discoveredTestIds);
70
+ const claimedSet = new Set(claimed);
71
+ undiscoveredEvidenceIds = [...claimedSet].filter((id) => !discovered.has(id)).sort();
72
+ orphanEvidenceIds = [...discovered].filter((id) => !claimedSet.has(id)).sort();
73
+ undiscoveredEvidenceIds.forEach((id) => add('COV-EVIDENCE-ID-UNDISCOVERED', id, `claimed evidence id '${id}' does not exist among the discovered tests`));
74
+ orphanEvidenceIds.forEach((id) => add('COV-EVIDENCE-ORPHAN', id, `test id '${id}' exists but no catalog entry claims it`));
75
+ }
76
+ const featureReport = layerReport(features, featureLayer);
77
+ const journeyReport = layerReport(journeys, journeyLayer);
78
+ const structurallyValid = !findings.length;
79
+ return {
80
+ schema: 'dye2e-coverage-report/1',
81
+ generatedAt: new Date().toISOString(),
82
+ features: featureReport,
83
+ journeys: journeyReport,
84
+ orphanEvidenceIds: orphanEvidenceIds,
85
+ undiscoveredEvidenceIds: undiscoveredEvidenceIds,
86
+ structurallyValid: structurallyValid,
87
+ releaseReady: structurallyValid
88
+ && featureReport.denominator > 0 && journeyReport.denominator > 0
89
+ && featureReport.covered.length === featureReport.denominator
90
+ && journeyReport.covered.length === journeyReport.denominator,
91
+ findings: findings,
92
+ };
93
+ }
94
+ /** Writes the report as JSON (creating the folder). */
95
+ function DyE2E_writeCoverageReport(report, reportPath) {
96
+ fs.mkdirSync(path.dirname(reportPath), { recursive: true });
97
+ fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`);
98
+ }
99
+ /**
100
+ * Collects the test ids that really exist: every `idPattern` match in the `*.spec.ts` / `*.test.ts` files under
101
+ * `roots` (the ids live in the test titles). Sorted, unique.
102
+ */
103
+ function DyE2E_discoverTestIds(set) {
104
+ const flags = set.idPattern.flags.includes('g') ? set.idPattern.flags : `${set.idPattern.flags}g`;
105
+ const pattern = new RegExp(set.idPattern.source, flags);
106
+ const ids = new Set();
107
+ const walk = (dir) => {
108
+ for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
109
+ const full = path.join(dir, entry.name);
110
+ if (entry.isDirectory() && entry.name !== 'node_modules') {
111
+ walk(full);
112
+ }
113
+ else if (entry.isFile() && /\.(spec|test)\.[cm]?[jt]s$/.test(entry.name)) {
114
+ for (const match of fs.readFileSync(full, 'utf-8').matchAll(pattern)) {
115
+ ids.add(match[0]);
116
+ }
117
+ }
118
+ }
119
+ };
120
+ set.roots.filter((root) => fs.existsSync(root)).forEach(walk);
121
+ return [...ids].sort();
122
+ }
123
+ /** Reads `features` / `journeys` from a catalog file; an unreadable file is a finding (never an empty-but-green list). */
124
+ function readEntries(catalogPath, key, add) {
125
+ try {
126
+ const catalog = JSON.parse(fs.readFileSync(catalogPath, 'utf-8'));
127
+ const entries = catalog?.[key];
128
+ if (!Array.isArray(entries)) {
129
+ throw new Error(`"${key}" array missing`);
130
+ }
131
+ return entries;
132
+ }
133
+ catch (err) {
134
+ add('COV-CATALOG-UNREADABLE', catalogPath, `${key} catalog unreadable: ${err instanceof Error ? err.message : String(err)}`);
135
+ return [];
136
+ }
137
+ }
138
+ /** Validates one layer against the other (links both ways) and its own evidence. */
139
+ function validateLayer(layer, entries, other, otherEntries, options, add) {
140
+ if (!entries.length) {
141
+ add('COV-ZERO-DENOMINATOR', layer.catalogPath, `the ${layer.name} catalog is empty — an empty catalog is never covered`);
142
+ return;
143
+ }
144
+ const seen = new Set();
145
+ const otherById = new Map(otherEntries
146
+ .map((entry) => [other.idOf(entry), entry]));
147
+ entries.forEach((entry, index) => {
148
+ const id = layer.idOf(entry);
149
+ const ref = id || `${layer.name}s[${index}]`;
150
+ if (!id || !Array.isArray(entry.evidenceTestIds) || !Array.isArray(entry.evidenceFiles)
151
+ || typeof entry.coverageStatus !== 'string' || !entry.coverageStatus) {
152
+ add('COV-ENTRY-INVALID', ref, `${layer.name} needs ${layer.name}Id, evidenceTestIds[], evidenceFiles[] and a coverageStatus`);
153
+ return;
154
+ }
155
+ if (seen.has(id)) {
156
+ add('COV-DUPLICATE-ID', id, `duplicate ${layer.name} id '${id}'`);
157
+ }
158
+ seen.add(id);
159
+ // Feature ↔ journey links, both ways
160
+ layer.linksOf(entry).forEach((linkedId) => {
161
+ const linked = otherById.get(linkedId);
162
+ if (!linked) {
163
+ add('COV-LINK-UNKNOWN', id, `${layer.name} '${id}' links an unknown ${other.name} '${linkedId}'`);
164
+ }
165
+ else if (!other.linksOf(linked).includes(id)) {
166
+ add('COV-LINK-ONE-WAY', id, `${other.name} '${linkedId}' does not link back to ${layer.name} '${id}'`);
167
+ }
168
+ });
169
+ // Status ↔ evidence consistency
170
+ if (entry.coverageStatus === 'covered' && (!entry.evidenceTestIds.length || !entry.evidenceFiles.length)) {
171
+ add('COV-STATUS-COVERED-WITHOUT-EVIDENCE', id, `'${id}' is covered without evidenceTestIds / evidenceFiles`);
172
+ }
173
+ if (entry.coverageStatus !== 'covered' && !entry.missingEvidence?.trim()) {
174
+ add('COV-MISSING-EVIDENCE-UNEXPLAINED', id, `'${id}' is ${entry.coverageStatus} but missingEvidence is empty`);
175
+ }
176
+ validateEvidence(layer, entry, id, options, add);
177
+ });
178
+ }
179
+ /** Evidence files exist; every claimed id appears in them, carries the layer prefix and stays in its layer. */
180
+ function validateEvidence(layer, entry, id, options, add) {
181
+ const catalogDir = path.dirname(layer.catalogPath);
182
+ const sources = [];
183
+ entry.evidenceFiles.forEach((file) => {
184
+ const absolute = path.resolve(catalogDir, file);
185
+ if (fs.existsSync(absolute)) {
186
+ sources.push(fs.readFileSync(absolute, 'utf-8'));
187
+ }
188
+ else {
189
+ add('COV-EVIDENCE-FILE-MISSING', id, `evidence file does not exist: ${file}`);
190
+ }
191
+ });
192
+ entry.evidenceTestIds.forEach((testId) => {
193
+ if (layer.idPrefix && !testId.startsWith(layer.idPrefix)) {
194
+ add('COV-EVIDENCE-ID-PREFIX', id, `evidence id '${testId}' must start with '${layer.idPrefix}'`);
195
+ }
196
+ // A journey test proves the journey layer — it can never be counted as per-feature evidence
197
+ if (layer.name === 'feature' && options.journeyIdPrefix && testId.startsWith(options.journeyIdPrefix)) {
198
+ add('COV-JOURNEY-EVIDENCE-AS-FEATURE', id, `journey evidence '${testId}' cannot count as feature evidence`);
199
+ }
200
+ if (!sources.some((source) => source.includes(testId))) {
201
+ add('COV-EVIDENCE-ID-NOT-IN-FILE', id, `evidence id '${testId}' is not in the declared evidence files`);
202
+ }
203
+ });
204
+ }
205
+ /** Splits a layer's entries into covered / red / pending (ids). */
206
+ function layerReport(entries, layer) {
207
+ const ids = (status) => entries
208
+ .filter((entry) => status(entry.coverageStatus))
209
+ .map(layer.idOf);
210
+ return {
211
+ denominator: entries.length,
212
+ covered: ids((status) => status === 'covered'),
213
+ red: ids((status) => status === 'red'),
214
+ pending: ids((status) => status !== 'covered' && status !== 'red'),
215
+ };
216
+ }
217
+ //# sourceMappingURL=coverage-catalog.util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coverage-catalog.util.js","sourceRoot":"","sources":["../../../../src/_modules/coverage/_collections/coverage-catalog.util.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * BFR-FSMED-006 — the generic coverage-catalog schema (the common core of the fleet's feature / journey catalogs).
3
+ * Projects may carry more fields (requirement ids, sub-plans, variants …) — the validator ignores what it does not know,
4
+ * and the project keeps its own extra checks on top.
5
+ */
6
+ /** One catalog entry (a feature or a journey). */
7
+ export interface DyE2E_CoverageCatalogEntry_Interface {
8
+ /** Feature: `featureId`; journey: `journeyId` — the validator reads whichever the layer uses. */
9
+ featureId?: string;
10
+ journeyId?: string;
11
+ title: string;
12
+ /** Feature → the journeys it takes part in; journey → the features it crosses (checked BOTH ways). */
13
+ journeyIds?: string[];
14
+ featureIds?: string[];
15
+ /** The test ids that prove this entry (they must appear in `evidenceFiles` and, if given, among the discovered ids). */
16
+ evidenceTestIds: string[];
17
+ /** Spec files holding the evidence, relative to the catalog file. */
18
+ evidenceFiles: string[];
19
+ /** `covered` (proven), `red` (evidence exists, but failing), anything else = pending (not proven yet). */
20
+ coverageStatus: string;
21
+ /** Required for every non-`covered` entry: what is missing. */
22
+ missingEvidence?: string;
23
+ }
24
+ /** A catalog file: `{ features: [] }` or `{ journeys: [] }` (extra top-level fields are allowed). */
25
+ export interface DyE2E_CoverageCatalog_Interface {
26
+ features?: DyE2E_CoverageCatalogEntry_Interface[];
27
+ journeys?: DyE2E_CoverageCatalogEntry_Interface[];
28
+ }
29
+ /** A validator finding — the `code` is stable (machine key), the message is for the human. */
30
+ export interface DyE2E_CoverageFinding_Interface {
31
+ code: string;
32
+ /** The entry id (or catalog) the finding is about. */
33
+ ref: string;
34
+ message: string;
35
+ }
36
+ /** Per-layer coverage (feature and journey are reported SEPARATELY — they are different denominators). */
37
+ export interface DyE2E_CoverageLayerReport_Interface {
38
+ denominator: number;
39
+ covered: string[];
40
+ red: string[];
41
+ pending: string[];
42
+ }
43
+ /** The coverage report (`DyE2E_writeCoverageReport` writes it as JSON). */
44
+ export interface DyE2E_CoverageReport_Interface {
45
+ schema: 'dye2e-coverage-report/1';
46
+ generatedAt: string;
47
+ features: DyE2E_CoverageLayerReport_Interface;
48
+ journeys: DyE2E_CoverageLayerReport_Interface;
49
+ /** Discovered test ids that no catalog entry claims (only when discovered ids were given). */
50
+ orphanEvidenceIds: string[];
51
+ /** Catalog evidence ids the discovery did not find (only when discovered ids were given). */
52
+ undiscoveredEvidenceIds: string[];
53
+ /** `true` when there is no finding. */
54
+ structurallyValid: boolean;
55
+ /** `true` only when structurally valid, both denominators are > 0 and EVERY entry is `covered`. */
56
+ releaseReady: boolean;
57
+ findings: DyE2E_CoverageFinding_Interface[];
58
+ }
59
+ /** The validator input. */
60
+ export interface DyE2E_CoverageCatalog_Options {
61
+ /** The feature catalog file (JSON with `features: []`). */
62
+ featureCatalogPath: string;
63
+ /** The journey catalog file (JSON with `journeys: []`). */
64
+ journeyCatalogPath: string;
65
+ /**
66
+ * The test ids that really exist (e.g. `DyE2E_discoverTestIds`). When given, the check is two-way: a claimed id
67
+ * that does not exist, and an existing id nobody claims (orphan), are both findings.
68
+ */
69
+ discoveredTestIds?: string[];
70
+ /** Required prefix of feature evidence ids (e.g. `SMD-E2E-`). */
71
+ featureIdPrefix?: string;
72
+ /** Required prefix of journey evidence ids (e.g. `SMD-E2E-J-`); such ids may NOT count as feature evidence. */
73
+ journeyIdPrefix?: string;
74
+ }
75
+ //# sourceMappingURL=coverage-catalog.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coverage-catalog.interface.d.ts","sourceRoot":"","sources":["../../../../src/_modules/coverage/_models/coverage-catalog.interface.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,kDAAkD;AAClD,MAAM,WAAW,oCAAoC;IACnD,iGAAiG;IACjG,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,sGAAsG;IACtG,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,wHAAwH;IACxH,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,qEAAqE;IACrE,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,0GAA0G;IAC1G,cAAc,EAAE,MAAM,CAAC;IACvB,+DAA+D;IAC/D,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,qGAAqG;AACrG,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,CAAC,EAAE,oCAAoC,EAAE,CAAC;IAClD,QAAQ,CAAC,EAAE,oCAAoC,EAAE,CAAC;CACnD;AAED,8FAA8F;AAC9F,MAAM,WAAW,+BAA+B;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,0GAA0G;AAC1G,MAAM,WAAW,mCAAmC;IAClD,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,GAAG,EAAE,MAAM,EAAE,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,2EAA2E;AAC3E,MAAM,WAAW,8BAA8B;IAC7C,MAAM,EAAE,yBAAyB,CAAC;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,mCAAmC,CAAC;IAC9C,QAAQ,EAAE,mCAAmC,CAAC;IAC9C,8FAA8F;IAC9F,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,6FAA6F;IAC7F,uBAAuB,EAAE,MAAM,EAAE,CAAC;IAClC,uCAAuC;IACvC,iBAAiB,EAAE,OAAO,CAAC;IAC3B,mGAAmG;IACnG,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,+BAA+B,EAAE,CAAC;CAC7C;AAED,2BAA2B;AAC3B,MAAM,WAAW,6BAA6B;IAC5C,2DAA2D;IAC3D,kBAAkB,EAAE,MAAM,CAAC;IAC3B,2DAA2D;IAC3D,kBAAkB,EAAE,MAAM,CAAC;IAC3B;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,iEAAiE;IACjE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,+GAA+G;IAC/G,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ /**
3
+ * BFR-FSMED-006 — the generic coverage-catalog schema (the common core of the fleet's feature / journey catalogs).
4
+ * Projects may carry more fields (requirement ids, sub-plans, variants …) — the validator ignores what it does not know,
5
+ * and the project keeps its own extra checks on top.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ //# sourceMappingURL=coverage-catalog.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coverage-catalog.interface.js","sourceRoot":"","sources":["../../../../src/_modules/coverage/_models/coverage-catalog.interface.ts"],"names":[],"mappings":";AAAA;;;;GAIG"}
@@ -0,0 +1,3 @@
1
+ export * from './_collections/coverage-catalog.util';
2
+ export * from './_models/coverage-catalog.interface';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/_modules/coverage/index.ts"],"names":[],"mappings":"AACA,cAAc,sCAAsC,CAAC;AACrD,cAAc,sCAAsC,CAAC"}
@@ -0,0 +1,20 @@
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ // BFR-FSMED-006 — feature / journey coverage catalog ↔ evidence validator + coverage report.
18
+ __exportStar(require("./_collections/coverage-catalog.util"), exports);
19
+ __exportStar(require("./_models/coverage-catalog.interface"), exports);
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/_modules/coverage/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6FAA6F;AAC7F,uEAAqD;AACrD,uEAAqD"}
@@ -0,0 +1,20 @@
1
+ import type { DyE2E_GameCapability_Type } from '../_models/game-contracts.interface';
2
+ /**
3
+ * BFR-WARFACTORY-008 — the ONE place of the game-seam wire contract, shared by the Playwright-side
4
+ * `DyE2E_GameSeam_Helper` and the page-side `DyE2E_installGameSeam` (browser-safe: type-only imports).
5
+ */
6
+ export declare const DYE2E_GAME_SEAM_DEFAULTS: {
7
+ readonly seamKey: string;
8
+ readonly readyEventName: string;
9
+ readonly optInStorageKey: string;
10
+ readonly optInQueryParam: string;
11
+ readonly allowedHosts: readonly string[];
12
+ };
13
+ /** The methods each capability promises — a declared capability without its methods is refused at install time. */
14
+ export declare const DYE2E_GAME_CAPABILITY_METHODS: Readonly<Record<DyE2E_GameCapability_Type, readonly string[]>>;
15
+ /**
16
+ * Host comparison form: lower-case, IPv6 brackets removed — `new URL('http://[::1]/').hostname` is `'[::1]'`, so a
17
+ * bare `'::1'` allow-list entry never matched before this normalisation.
18
+ */
19
+ export declare function DyE2E_normalizeGameSeamHost(host: string): string;
20
+ //# sourceMappingURL=game-seam.const.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"game-seam.const.d.ts","sourceRoot":"","sources":["../../../../src/_modules/game/_collections/game-seam.const.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AAErF;;;GAGG;AACH,eAAO,MAAM,wBAAwB,EAAE;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;CAO1C,CAAC;AAEF,mHAAmH;AACnH,eAAO,MAAM,6BAA6B,EAAE,QAAQ,CAAC,MAAM,CAAC,yBAAyB,EAAE,SAAS,MAAM,EAAE,CAAC,CAMxG,CAAC;AAEF;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEhE"}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DYE2E_GAME_CAPABILITY_METHODS = exports.DYE2E_GAME_SEAM_DEFAULTS = void 0;
4
+ exports.DyE2E_normalizeGameSeamHost = DyE2E_normalizeGameSeamHost;
5
+ /**
6
+ * BFR-WARFACTORY-008 — the ONE place of the game-seam wire contract, shared by the Playwright-side
7
+ * `DyE2E_GameSeam_Helper` and the page-side `DyE2E_installGameSeam` (browser-safe: type-only imports).
8
+ */
9
+ exports.DYE2E_GAME_SEAM_DEFAULTS = {
10
+ seamKey: '__dye2eGame',
11
+ readyEventName: 'dye2e:game-seam-ready',
12
+ optInStorageKey: 'dye2eGame',
13
+ optInQueryParam: 'dye2eGame',
14
+ allowedHosts: ['localhost', '127.0.0.1', '::1'],
15
+ };
16
+ /** The methods each capability promises — a declared capability without its methods is refused at install time. */
17
+ exports.DYE2E_GAME_CAPABILITY_METHODS = {
18
+ seed: ['installSeed', 'readSeed'],
19
+ state: ['exportState', 'importState'],
20
+ clock: ['advanceClock'],
21
+ canvas: ['worldToScreen'],
22
+ diagnostics: ['getSnapshot', 'getDiagnostics'],
23
+ };
24
+ /**
25
+ * Host comparison form: lower-case, IPv6 brackets removed — `new URL('http://[::1]/').hostname` is `'[::1]'`, so a
26
+ * bare `'::1'` allow-list entry never matched before this normalisation.
27
+ */
28
+ function DyE2E_normalizeGameSeamHost(host) {
29
+ return host.trim().toLowerCase().replace(/^\[(.*)\]$/, '$1');
30
+ }
31
+ //# sourceMappingURL=game-seam.const.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"game-seam.const.js","sourceRoot":"","sources":["../../../../src/_modules/game/_collections/game-seam.const.ts"],"names":[],"mappings":";;;AAiCA,kEAEC;AAjCD;;;GAGG;AACU,QAAA,wBAAwB,GAMjC;IACF,OAAO,EAAE,aAAa;IACtB,cAAc,EAAE,uBAAuB;IACvC,eAAe,EAAE,WAAW;IAC5B,eAAe,EAAE,WAAW;IAC5B,YAAY,EAAE,CAAE,WAAW,EAAE,WAAW,EAAE,KAAK,CAAE;CAClD,CAAC;AAEF,mHAAmH;AACtG,QAAA,6BAA6B,GAAmE;IAC3G,IAAI,EAAE,CAAE,aAAa,EAAE,UAAU,CAAE;IACnC,KAAK,EAAE,CAAE,aAAa,EAAE,aAAa,CAAE;IACvC,KAAK,EAAE,CAAE,cAAc,CAAE;IACzB,MAAM,EAAE,CAAE,eAAe,CAAE;IAC3B,WAAW,EAAE,CAAE,aAAa,EAAE,gBAAgB,CAAE;CACjD,CAAC;AAEF;;;GAGG;AACH,SAAgB,2BAA2B,CAAC,IAAY;IACtD,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;AAC/D,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { Page } from '@playwright/test';
1
+ import type { Locator, Page } from '@playwright/test';
2
2
  import { DyE2E_GameCapability_Type, DyE2E_GameFailureArtifact_Interface, DyE2E_GamePoint_Interface, DyE2E_GameSeam_Options_Interface, DyE2E_GameVersionedState_Interface } from './_models/game-contracts.interface';
3
3
  /**
4
4
  * Capability-gated adapter for an explicitly enabled browser game test seam.
@@ -22,6 +22,15 @@ export declare class DyE2E_GameSeam_Helper<TSnapshot = unknown, TState extends D
22
22
  withOptIn(targetUrl: string): string;
23
23
  /** Wait for one readiness event, or return immediately if the seam is already installed. */
24
24
  waitForSeam(): Promise<void>;
25
+ /**
26
+ * Opt in, navigate and wait for the seam — the required order (opt-in BEFORE navigation) in one call.
27
+ */
28
+ navigateAndWaitForSeam(targetUrl: string): Promise<void>;
29
+ /**
30
+ * Reload and wait until the game re-attaches its seam. With `DyE2E_installGameSeam` attachment means "usable", so
31
+ * a test never reads the half-restored state of a reloading game (the `WF-J-007` race).
32
+ */
33
+ reloadAndWaitForSeam(): Promise<void>;
25
34
  capabilities(): Promise<readonly DyE2E_GameCapability_Type[]>;
26
35
  snapshot(): Promise<TSnapshot>;
27
36
  installSeed(seed: string | number): Promise<void>;
@@ -30,6 +39,11 @@ export declare class DyE2E_GameSeam_Helper<TSnapshot = unknown, TState extends D
30
39
  importState(state: TState): Promise<void>;
31
40
  advanceClock(deltaMs: number): Promise<void>;
32
41
  worldToScreen(point: DyE2E_GamePoint_Interface): Promise<DyE2E_GamePoint_Interface>;
42
+ /**
43
+ * Click a WORLD point on the game canvas. The seam's `worldToScreen` answers in CSS pixels relative to the canvas'
44
+ * top-left corner; a point outside the canvas throws instead of silently clicking whatever lies there.
45
+ */
46
+ clickWorld(point: DyE2E_GamePoint_Interface, canvas: Locator): Promise<DyE2E_GamePoint_Interface>;
33
47
  /** One browser round-trip containing the evidence needed to diagnose deterministic game failures. */
34
48
  captureFailureArtifact(): Promise<DyE2E_GameFailureArtifact_Interface<TSnapshot, TState>>;
35
49
  private assertAllowedHost;
@@ -1 +1 @@
1
- {"version":3,"file":"game-seam.helper.d.ts","sourceRoot":"","sources":["../../../src/_modules/game/game-seam.helper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAE7C,OAAO,EACL,yBAAyB,EAEzB,mCAAmC,EACnC,yBAAyB,EACzB,gCAAgC,EAChC,kCAAkC,EACnC,MAAM,oCAAoC,CAAC;AAK5C;;;;;GAKG;AACH,qBAAa,qBAAqB,CAChC,SAAS,GAAG,OAAO,EACnB,MAAM,SAAS,kCAAkC,GAAG,kCAAkC;IAW1E,OAAO,CAAC,QAAQ,CAAC,IAAI;IARjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAoB;IACjD,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAuC;gBAE/C,IAAI,EAAE,IAAI,EAAE,OAAO,GAAE,gCAAqC;IAmBvF,kGAAkG;IAC5F,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAc3D,gFAAgF;IAChF,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAQpC,4FAA4F;IACtF,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAsC5B,YAAY,IAAI,OAAO,CAAC,SAAS,yBAAyB,EAAE,CAAC;IAqB7D,QAAQ,IAAI,OAAO,CAAC,SAAS,CAAC;IAI9B,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBjD,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;IAUpC,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;IAM9B,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQzC,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU5C,aAAa,CAAC,KAAK,EAAE,yBAAyB,GAAG,OAAO,CAAC,yBAAyB,CAAC;IAezF,qGAAqG;IAC/F,sBAAsB,IAAI,OAAO,CAAC,mCAAmC,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAsC/F,OAAO,CAAC,iBAAiB;YAWX,mBAAmB;IAcjC,OAAO,CAAC,oBAAoB;YAYd,MAAM;CAyBrB"}
1
+ {"version":3,"file":"game-seam.helper.d.ts","sourceRoot":"","sources":["../../../src/_modules/game/game-seam.helper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAEtD,OAAO,EACL,yBAAyB,EAEzB,mCAAmC,EACnC,yBAAyB,EACzB,gCAAgC,EAChC,kCAAkC,EACnC,MAAM,oCAAoC,CAAC;AAU5C;;;;;GAKG;AACH,qBAAa,qBAAqB,CAChC,SAAS,GAAG,OAAO,EACnB,MAAM,SAAS,kCAAkC,GAAG,kCAAkC;IAW1E,OAAO,CAAC,QAAQ,CAAC,IAAI;IARjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAoB;IACjD,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAuC;gBAE/C,IAAI,EAAE,IAAI,EAAE,OAAO,GAAE,gCAAqC;IAoBvF,kGAAkG;IAC5F,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAe3D,gFAAgF;IAChF,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAQpC,4FAA4F;IACtF,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAsClC;;OAEG;IACG,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM9D;;;OAGG;IACG,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IAKrC,YAAY,IAAI,OAAO,CAAC,SAAS,yBAAyB,EAAE,CAAC;IAqB7D,QAAQ,IAAI,OAAO,CAAC,SAAS,CAAC;IAI9B,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBjD,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;IAUpC,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;IAM9B,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQzC,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU5C,aAAa,CAAC,KAAK,EAAE,yBAAyB,GAAG,OAAO,CAAC,yBAAyB,CAAC;IAezF;;;OAGG;IACG,UAAU,CAAC,KAAK,EAAE,yBAAyB,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,yBAAyB,CAAC;IAkBvG,qGAAqG;IAC/F,sBAAsB,IAAI,OAAO,CAAC,mCAAmC,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAsC/F,OAAO,CAAC,iBAAiB;YAWX,mBAAmB;IAcjC,OAAO,CAAC,oBAAoB;YAYd,MAAM;CAyBrB"}
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DyE2E_GameSeam_Helper = void 0;
4
- const DEFAULT_ALLOWED_HOSTS = ['localhost', '127.0.0.1', '::1'];
5
- const KNOWN_CAPABILITIES = ['seed', 'state', 'clock', 'canvas', 'diagnostics'];
4
+ const game_seam_const_1 = require("./_collections/game-seam.const");
5
+ const KNOWN_CAPABILITIES = Object.keys(game_seam_const_1.DYE2E_GAME_CAPABILITY_METHODS);
6
6
  /**
7
7
  * Capability-gated adapter for an explicitly enabled browser game test seam.
8
8
  *
@@ -20,12 +20,13 @@ class DyE2E_GameSeam_Helper {
20
20
  requiredCapabilities;
21
21
  constructor(page, options = {}) {
22
22
  this.page = page;
23
- this.seamKey = options.seamKey ?? '__dye2eGame';
24
- this.readyEventName = options.readyEventName ?? 'dye2e:game-seam-ready';
25
- this.optInStorageKey = options.optInStorageKey ?? 'dye2eGame';
26
- this.optInQueryParam = options.optInQueryParam ?? 'dye2eGame';
23
+ this.seamKey = options.seamKey ?? game_seam_const_1.DYE2E_GAME_SEAM_DEFAULTS.seamKey;
24
+ this.readyEventName = options.readyEventName ?? game_seam_const_1.DYE2E_GAME_SEAM_DEFAULTS.readyEventName;
25
+ this.optInStorageKey = options.optInStorageKey ?? game_seam_const_1.DYE2E_GAME_SEAM_DEFAULTS.optInStorageKey;
26
+ this.optInQueryParam = options.optInQueryParam ?? game_seam_const_1.DYE2E_GAME_SEAM_DEFAULTS.optInQueryParam;
27
27
  this.timeoutMs = options.timeoutMs ?? 15_000;
28
- this.allowedHosts = (options.allowedHosts ?? DEFAULT_ALLOWED_HOSTS).map((host) => host.toLowerCase());
28
+ this.allowedHosts = (options.allowedHosts ?? game_seam_const_1.DYE2E_GAME_SEAM_DEFAULTS.allowedHosts)
29
+ .map((host) => (0, game_seam_const_1.DyE2E_normalizeGameSeamHost)(host));
29
30
  this.requiredCapabilities = options.requiredCapabilities ?? [];
30
31
  if (!Number.isFinite(this.timeoutMs) || this.timeoutMs <= 0) {
31
32
  throw new Error(`[DyE2E_GameSeam_Helper] timeoutMs must be finite and positive; received ${this.timeoutMs}.`);
@@ -41,7 +42,8 @@ class DyE2E_GameSeam_Helper {
41
42
  async enableForNavigation(targetUrl) {
42
43
  this.assertAllowedHost(targetUrl);
43
44
  await this.page.addInitScript((settings) => {
44
- if (!settings.allowedHosts.includes(window.location.hostname.toLowerCase())) {
45
+ // Same normalisation as DyE2E_normalizeGameSeamHost, inline: this runs in the browser, detached from the module.
46
+ if (!settings.allowedHosts.includes(window.location.hostname.toLowerCase().replace(/^\[(.*)\]$/, '$1'))) {
45
47
  return;
46
48
  }
47
49
  try {
@@ -89,6 +91,22 @@ class DyE2E_GameSeam_Helper {
89
91
  }), [this.seamKey, this.readyEventName, this.timeoutMs]);
90
92
  await this.requireCapabilities(this.requiredCapabilities);
91
93
  }
94
+ /**
95
+ * Opt in, navigate and wait for the seam — the required order (opt-in BEFORE navigation) in one call.
96
+ */
97
+ async navigateAndWaitForSeam(targetUrl) {
98
+ await this.enableForNavigation(targetUrl);
99
+ await this.page.goto(targetUrl);
100
+ await this.waitForSeam();
101
+ }
102
+ /**
103
+ * Reload and wait until the game re-attaches its seam. With `DyE2E_installGameSeam` attachment means "usable", so
104
+ * a test never reads the half-restored state of a reloading game (the `WF-J-007` race).
105
+ */
106
+ async reloadAndWaitForSeam() {
107
+ await this.page.reload();
108
+ await this.waitForSeam();
109
+ }
92
110
  async capabilities() {
93
111
  return this.page.evaluate((settings) => {
94
112
  const { key, knownCapabilities } = settings;
@@ -165,6 +183,23 @@ class DyE2E_GameSeam_Helper {
165
183
  }
166
184
  return screenPoint;
167
185
  }
186
+ /**
187
+ * Click a WORLD point on the game canvas. The seam's `worldToScreen` answers in CSS pixels relative to the canvas'
188
+ * top-left corner; a point outside the canvas throws instead of silently clicking whatever lies there.
189
+ */
190
+ async clickWorld(point, canvas) {
191
+ const screenPoint = await this.worldToScreen(point);
192
+ const box = await canvas.boundingBox();
193
+ if (!box) {
194
+ throw new Error('[DyE2E_GameSeam_Helper] clickWorld: the canvas is not visible (no bounding box).');
195
+ }
196
+ if (screenPoint.x < 0 || screenPoint.y < 0 || screenPoint.x >= box.width || screenPoint.y >= box.height) {
197
+ throw new Error(`[DyE2E_GameSeam_Helper] clickWorld: world (${point.x}, ${point.y}) maps to canvas `
198
+ + `(${screenPoint.x}, ${screenPoint.y}), outside the ${box.width}x${box.height} canvas.`);
199
+ }
200
+ await canvas.click({ position: screenPoint });
201
+ return screenPoint;
202
+ }
168
203
  /** One browser round-trip containing the evidence needed to diagnose deterministic game failures. */
169
204
  async captureFailureArtifact() {
170
205
  return this.page.evaluate(async (key) => {
@@ -205,7 +240,7 @@ class DyE2E_GameSeam_Helper {
205
240
  }
206
241
  assertAllowedHost(targetUrl) {
207
242
  const parsed = new URL(targetUrl, 'http://localhost');
208
- if (!this.allowedHosts.includes(parsed.hostname)) {
243
+ if (!this.allowedHosts.includes((0, game_seam_const_1.DyE2E_normalizeGameSeamHost)(parsed.hostname))) {
209
244
  throw new Error(`[DyE2E_GameSeam_Helper] Refusing to enable a game seam on host '${parsed.hostname}'. `
210
245
  + `Allowed hosts: ${this.allowedHosts.join(', ')}. Add a test host explicitly only when its server-side `
211
246
  + 'seam guard is enabled.');
@@ -1 +1 @@
1
- {"version":3,"file":"game-seam.helper.js","sourceRoot":"","sources":["../../../src/_modules/game/game-seam.helper.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"game-seam.helper.js","sourceRoot":"","sources":["../../../src/_modules/game/game-seam.helper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import type { DyE2E_GameCapability_Type } from './_models/game-contracts.interface';
2
+ /** The window surface the installer touches (a structural subset, so it is testable without a browser). */
3
+ export interface DyE2E_GameSeamWindow_Interface {
4
+ location: {
5
+ hostname: string;
6
+ search: string;
7
+ };
8
+ sessionStorage?: {
9
+ getItem(key: string): string | null;
10
+ };
11
+ dispatchEvent(event: Event): boolean;
12
+ }
13
+ export interface DyE2E_GameSeamInstall_Options_Interface {
14
+ /** The game's seam object (a plain object or a class instance) — it must carry the declared capabilities' methods. */
15
+ seam: object;
16
+ /** The capabilities the seam really supports; the Playwright helper refuses calls outside this list. */
17
+ capabilities: readonly DyE2E_GameCapability_Type[];
18
+ seamKey?: string;
19
+ readyEventName?: string;
20
+ optInStorageKey?: string;
21
+ optInQueryParam?: string;
22
+ /** Default: loopback only. Add a deployed test host only when that build keeps its own test-seam guard. */
23
+ allowedHosts?: readonly string[];
24
+ /** Default: the global `window`. */
25
+ target?: DyE2E_GameSeamWindow_Interface;
26
+ }
27
+ export interface DyE2E_GameSeamInstall_Result_Interface {
28
+ installed: boolean;
29
+ /** Why nothing was installed — the normal production outcome, not an error. */
30
+ skippedBecause?: 'host-not-allowed' | 'no-opt-in';
31
+ /** Detach (e.g. in `ngOnDestroy`); a stale handle never removes a seam installed after it. */
32
+ uninstall(): void;
33
+ }
34
+ /**
35
+ * BFR-WARFACTORY-008 — the page-side half of the game preset: installs a game's test seam so that
36
+ * `DyE2E_GameSeam_Helper` can drive it.
37
+ *
38
+ * - **Guarded:** nothing happens unless the host is allow-listed (loopback by default) AND the test opted in
39
+ * (`?dye2eGame=1` or `sessionStorage.dye2eGame === '1'`, which `enableForNavigation()` writes). In production it
40
+ * returns `{ installed: false }` and touches nothing.
41
+ * - **Attach = ready:** the seam is put on `window` and the ready event is dispatched in the SAME tick. Call it only
42
+ * when the seam is USABLE (e.g. after a save is restored) — the helper treats attachment as readiness, so an early
43
+ * attach would let a test read half-restored state (the race `WF-J-007` hit after a reload).
44
+ * - **Honest capabilities:** a declared capability whose methods are missing throws here, at install time, instead of
45
+ * failing later inside a test step with a misleading message.
46
+ *
47
+ * Browser-safe: no Node or Playwright import at runtime.
48
+ */
49
+ export declare function DyE2E_installGameSeam(options: DyE2E_GameSeamInstall_Options_Interface): DyE2E_GameSeamInstall_Result_Interface;
50
+ //# sourceMappingURL=game-seam.installer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"game-seam.installer.d.ts","sourceRoot":"","sources":["../../../src/_modules/game/game-seam.installer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AAOpF,2GAA2G;AAC3G,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/C,cAAc,CAAC,EAAE;QAAE,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IACzD,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC;CACtC;AAED,MAAM,WAAW,uCAAuC;IACtD,sHAAsH;IACtH,IAAI,EAAE,MAAM,CAAC;IACb,wGAAwG;IACxG,YAAY,EAAE,SAAS,yBAAyB,EAAE,CAAC;IACnD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,2GAA2G;IAC3G,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,oCAAoC;IACpC,MAAM,CAAC,EAAE,8BAA8B,CAAC;CACzC;AAED,MAAM,WAAW,sCAAsC;IACrD,SAAS,EAAE,OAAO,CAAC;IACnB,+EAA+E;IAC/E,cAAc,CAAC,EAAE,kBAAkB,GAAG,WAAW,CAAC;IAClD,8FAA8F;IAC9F,SAAS,IAAI,IAAI,CAAC;CACnB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,uCAAuC,GAAG,sCAAsC,CAmD9H"}
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DyE2E_installGameSeam = DyE2E_installGameSeam;
4
+ const game_seam_const_1 = require("./_collections/game-seam.const");
5
+ /**
6
+ * BFR-WARFACTORY-008 — the page-side half of the game preset: installs a game's test seam so that
7
+ * `DyE2E_GameSeam_Helper` can drive it.
8
+ *
9
+ * - **Guarded:** nothing happens unless the host is allow-listed (loopback by default) AND the test opted in
10
+ * (`?dye2eGame=1` or `sessionStorage.dye2eGame === '1'`, which `enableForNavigation()` writes). In production it
11
+ * returns `{ installed: false }` and touches nothing.
12
+ * - **Attach = ready:** the seam is put on `window` and the ready event is dispatched in the SAME tick. Call it only
13
+ * when the seam is USABLE (e.g. after a save is restored) — the helper treats attachment as readiness, so an early
14
+ * attach would let a test read half-restored state (the race `WF-J-007` hit after a reload).
15
+ * - **Honest capabilities:** a declared capability whose methods are missing throws here, at install time, instead of
16
+ * failing later inside a test step with a misleading message.
17
+ *
18
+ * Browser-safe: no Node or Playwright import at runtime.
19
+ */
20
+ function DyE2E_installGameSeam(options) {
21
+ const target = options.target
22
+ ?? globalThis.window;
23
+ const seamKey = options.seamKey ?? game_seam_const_1.DYE2E_GAME_SEAM_DEFAULTS.seamKey;
24
+ const allowedHosts = (options.allowedHosts ?? game_seam_const_1.DYE2E_GAME_SEAM_DEFAULTS.allowedHosts)
25
+ .map((host) => (0, game_seam_const_1.DyE2E_normalizeGameSeamHost)(host));
26
+ const notInstalled = (reason) => ({ installed: false, skippedBecause: reason, uninstall: () => undefined });
27
+ // No window (server-side rendering, a worker): there is no page to test — same outcome as a public host.
28
+ if (!target?.location || !allowedHosts.includes((0, game_seam_const_1.DyE2E_normalizeGameSeamHost)(target.location.hostname))) {
29
+ return notInstalled('host-not-allowed');
30
+ }
31
+ if (!DyE2E_hasGameSeamOptIn(target, options)) {
32
+ return notInstalled('no-opt-in');
33
+ }
34
+ const capabilities = [...new Set(options.capabilities)];
35
+ const seam = options.seam;
36
+ for (const capability of capabilities) {
37
+ const methods = game_seam_const_1.DYE2E_GAME_CAPABILITY_METHODS[capability];
38
+ if (!methods) {
39
+ throw new Error(`[DyE2E_installGameSeam] Unknown capability '${String(capability)}'. `
40
+ + `Known: ${Object.keys(game_seam_const_1.DYE2E_GAME_CAPABILITY_METHODS).join(', ')}.`);
41
+ }
42
+ const missing = methods.filter((method) => typeof seam[method] !== 'function');
43
+ if (missing.length) {
44
+ throw new Error(`[DyE2E_installGameSeam] Capability '${capability}' is declared, but the seam lacks: `
45
+ + `${missing.join(', ')}.`);
46
+ }
47
+ }
48
+ Object.defineProperty(seam, 'capabilities', {
49
+ value: Object.freeze(capabilities), enumerable: true, configurable: true, writable: false,
50
+ });
51
+ target[seamKey] = seam;
52
+ target.dispatchEvent(new CustomEvent(options.readyEventName ?? game_seam_const_1.DYE2E_GAME_SEAM_DEFAULTS.readyEventName, { detail: { seamKey: seamKey } }));
53
+ return {
54
+ installed: true,
55
+ uninstall: () => {
56
+ if (target[seamKey] === seam) {
57
+ delete target[seamKey];
58
+ }
59
+ },
60
+ };
61
+ }
62
+ /** The explicit test opt-in: the query parameter, or the session-storage flag written before navigation. */
63
+ function DyE2E_hasGameSeamOptIn(target, options) {
64
+ if (new URLSearchParams(target.location.search).get(options.optInQueryParam ?? game_seam_const_1.DYE2E_GAME_SEAM_DEFAULTS.optInQueryParam)
65
+ === '1') {
66
+ return true;
67
+ }
68
+ try {
69
+ return target.sessionStorage?.getItem(options.optInStorageKey ?? game_seam_const_1.DYE2E_GAME_SEAM_DEFAULTS.optInStorageKey) === '1';
70
+ }
71
+ catch {
72
+ // Storage disabled by browser policy: only the query opt-in counts.
73
+ return false;
74
+ }
75
+ }
76
+ //# sourceMappingURL=game-seam.installer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"game-seam.installer.js","sourceRoot":"","sources":["../../../src/_modules/game/game-seam.installer.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,6 @@
1
1
  export * from './_models/game-contracts.interface';
2
+ export * from './_collections/game-seam.const';
2
3
  export * from './game-seam.helper';
4
+ export * from './game-seam.installer';
3
5
  export * from './journey-catalog.validator';
4
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/_modules/game/index.ts"],"names":[],"mappings":"AAAA,cAAc,oCAAoC,CAAC;AACnD,cAAc,oBAAoB,CAAC;AACnC,cAAc,6BAA6B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/_modules/game/index.ts"],"names":[],"mappings":"AAAA,cAAc,oCAAoC,CAAC;AACnD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC"}
@@ -15,6 +15,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./_models/game-contracts.interface"), exports);
18
+ __exportStar(require("./_collections/game-seam.const"), exports);
18
19
  __exportStar(require("./game-seam.helper"), exports);
20
+ __exportStar(require("./game-seam.installer"), exports);
19
21
  __exportStar(require("./journey-catalog.validator"), exports);
20
22
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/_modules/game/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qEAAmD;AACnD,qDAAmC;AACnC,8DAA4C"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/_modules/game/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qEAAmD;AACnD,iEAA+C;AAC/C,qDAAmC;AACnC,wDAAsC;AACtC,8DAA4C"}
@@ -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;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"}
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;IA4HzB;;;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"}
@@ -49,6 +49,7 @@ Commands:
49
49
  diff Compare two CWV reports → regression analysis
50
50
  info Show registered field-types + CLI capabilities
51
51
  schema Print JSON Schema for a config type
52
+ validate-coverage-catalog Feature / journey catalog <-> test evidence (both ways) -> coverage report
52
53
  validate-config Validate a config file against its JSON Schema
53
54
  preset List built-in configs, or print one (--name)
54
55
  version Print package version
@@ -79,6 +80,16 @@ Flags (notification-sweep):
79
80
  --fail-on-leak Exit 1 if any page shows a raw technical leak
80
81
  --executable-path <exe> Chromium to launch (or DYE2E_CHROMIUM_EXECUTABLE_PATH)
81
82
 
83
+ Flags (validate-coverage-catalog):
84
+ --features <path> Feature catalog JSON ({ features: [] }) (required)
85
+ --journeys <path> Journey catalog JSON ({ journeys: [] }) (required)
86
+ --scan <dir,..> Spec roots to discover the real test ids in (two-way check: undiscovered + orphan)
87
+ --id-pattern <regex> Test-id pattern for --scan (e.g. SMD-E2E-[A-Z0-9-]+)
88
+ --feature-prefix <p> Required feature evidence-id prefix
89
+ --journey-prefix <p> Journey evidence-id prefix (never counts as feature evidence)
90
+ --report <path> Write the JSON coverage report
91
+ --require-complete Exit 1 unless EVERY feature and journey is covered (release mode)
92
+
82
93
  Flags (preset):
83
94
  --name <preset> Print this preset as JSON (omit to list all)
84
95
 
@@ -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":"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"}
package/build/index.d.ts CHANGED
@@ -5,6 +5,7 @@ export * from './_modules/presets/index';
5
5
  export * from './_modules/cwv/index';
6
6
  export * from './_modules/vqa/index';
7
7
  export * from './_modules/game/index';
8
+ export * from './_modules/coverage/index';
8
9
  /** Package-version stamp — npm-publish-time runtime-érték. */
9
10
  export declare const DYE2E_PACKAGE_VERSION: string;
10
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AAEtC,8DAA8D;AAC9D,eAAO,MAAM,qBAAqB,EAAE,MAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAE1C,8DAA8D;AAC9D,eAAO,MAAM,qBAAqB,EAAE,MAAmB,CAAC"}
package/build/index.js CHANGED
@@ -23,6 +23,7 @@ __exportStar(require("./_modules/presets/index"), exports);
23
23
  __exportStar(require("./_modules/cwv/index"), exports);
24
24
  __exportStar(require("./_modules/vqa/index"), exports);
25
25
  __exportStar(require("./_modules/game/index"), exports);
26
+ __exportStar(require("./_modules/coverage/index"), exports);
26
27
  /** Package-version stamp — npm-publish-time runtime-érték. */
27
- exports.DYE2E_PACKAGE_VERSION = '01.18.21';
28
+ exports.DYE2E_PACKAGE_VERSION = '01.18.23';
28
29
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,6EAA6E;AAC7E,6DAA2C;AAC3C,8DAA4C;AAC5C,2DAAyC;AACzC,2DAAyC;AACzC,uDAAqC;AACrC,uDAAqC;AACrC,wDAAsC;AAEtC,8DAA8D;AACjD,QAAA,qBAAqB,GAAW,UAAU,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,6EAA6E;AAC7E,6DAA2C;AAC3C,8DAA4C;AAC5C,2DAAyC;AACzC,2DAAyC;AACzC,uDAAqC;AACrC,uDAAqC;AACrC,wDAAsC;AACtC,4DAA0C;AAE1C,8DAA8D;AACjD,QAAA,qBAAqB,GAAW,UAAU,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@futdevpro/dynamo-e2e",
3
- "version": "01.18.21",
3
+ "version": "01.18.23",
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",