@sun-asterisk/sungen 3.2.10-beta.6 → 3.2.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/capabilities/discover.d.ts.map +1 -1
- package/dist/capabilities/discover.js +2 -5
- package/dist/capabilities/discover.js.map +1 -1
- package/dist/cli/commands/capability.d.ts.map +1 -1
- package/dist/cli/commands/capability.js +2 -44
- package/dist/cli/commands/capability.js.map +1 -1
- package/dist/harness/capability.d.ts +0 -1
- package/dist/harness/capability.d.ts.map +1 -1
- package/dist/harness/capability.js.map +1 -1
- package/dist/harness/catalog/drivers.yaml +1 -2
- package/dist/orchestrator/templates/ai-src/commands/run-test.md +0 -1
- package/dist/orchestrator/templates/ai-src/config/claude.md +1 -3
- package/dist/orchestrator/templates/ai-src/config/copilot.md +1 -3
- package/package.json +2 -3
- package/src/capabilities/discover.ts +2 -5
- package/src/cli/commands/capability.ts +2 -40
- package/src/harness/capability.ts +0 -1
- package/src/harness/catalog/drivers.yaml +1 -2
- package/src/orchestrator/templates/ai-src/commands/run-test.md +0 -1
- package/src/orchestrator/templates/ai-src/config/claude.md +1 -3
- package/src/orchestrator/templates/ai-src/config/copilot.md +1 -3
- package/dist/orchestrator/templates/ai-src/commands/create-data-test.md +0 -85
- package/dist/orchestrator/templates/ai-src/skills/sungen-data-factory/SKILL.md +0 -101
- package/src/orchestrator/templates/ai-src/commands/create-data-test.md +0 -85
- package/src/orchestrator/templates/ai-src/skills/sungen-data-factory/SKILL.md +0 -101
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../../src/capabilities/discover.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../../src/capabilities/discover.ts"],"names":[],"mappings":"AAkFA,wBAAgB,+BAA+B,IAAI,IAAI,CAKtD"}
|
|
@@ -62,7 +62,7 @@ const builtins_1 = require("./builtins");
|
|
|
62
62
|
* move to their packages (R5.5/R5.6) they join this list and leave `LOCAL_DRIVERS`; eventually this
|
|
63
63
|
* becomes a scan of installed `@sungen/driver-*` packages (R5.7).
|
|
64
64
|
*/
|
|
65
|
-
const EXTERNAL_DRIVERS = ['@sungen/driver-ui', '@sungen/driver-db', '@sungen/driver-api', '@sungen/driver-mobile'
|
|
65
|
+
const EXTERNAL_DRIVERS = ['@sungen/driver-ui', '@sungen/driver-db', '@sungen/driver-api', '@sungen/driver-mobile'];
|
|
66
66
|
/**
|
|
67
67
|
* Bundled (non-opt-in) drivers: shipped as a core dependency (`drivers.yaml` `bundled: true`), so the
|
|
68
68
|
* project gets them without `sungen capability add`. If one fails to resolve it is NOT a declined
|
|
@@ -70,10 +70,7 @@ const EXTERNAL_DRIVERS = ['@sungen/driver-ui', '@sungen/driver-db', '@sungen/dri
|
|
|
70
70
|
* symlink for the package is missing). Surface it LOUDLY: otherwise the entire UI step vocabulary is
|
|
71
71
|
* absent and every step silently compiles to "Unrecognized step pattern" with no clue why.
|
|
72
72
|
*/
|
|
73
|
-
|
|
74
|
-
// codegen), so shipping it by default adds no runtime, unlike ui/db/api/mobile. It makes standardized
|
|
75
|
-
// test-data available out of the box (no `capability add` needed); inert until a field-map/recipe exists.
|
|
76
|
-
const BUNDLED_DRIVERS = new Set(['@sungen/driver-ui', '@sungen/driver-data-factory']);
|
|
73
|
+
const BUNDLED_DRIVERS = new Set(['@sungen/driver-ui']);
|
|
77
74
|
function loadExternalDriver(name) {
|
|
78
75
|
// Resolve from the user's PROJECT first, then from core's own location. Opt-in drivers
|
|
79
76
|
// (`sungen capability add db|api`) install into the PROJECT's node_modules — a globally-installed
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discover.js","sourceRoot":"","sources":["../../src/capabilities/discover.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"discover.js","sourceRoot":"","sources":["../../src/capabilities/discover.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkFA,0EAKC;AAvFD;;;;;;;;;;;;;;;;;;GAkBG;AACH,mCAAuC;AACvC,2CAA6B;AAC7B,yCAAgD;AAChD,yCAAmE;AAEnE;;;;GAIG;AACH,MAAM,gBAAgB,GAAG,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,uBAAuB,CAAC,CAAC;AAEnH;;;;;;GAMG;AACH,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC;AAEvD,SAAS,kBAAkB,CAAC,IAAY;IACtC,uFAAuF;IACvF,kGAAkG;IAClG,mGAAmG;IACnG,8EAA8E;IAC9E,KAAK,MAAM,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,EAAE,UAAU,CAAC,EAAE,CAAC;QAC5E,IAAI,GAAgB,CAAC;QACrB,IAAI,CAAC;YAAC,GAAG,GAAG,IAAA,sBAAa,EAAC,MAAM,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,SAAS;QAAC,CAAC;QACxD,IAAI,QAAgB,CAAC;QACrB,IAAI,CAAC;YAAC,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,SAAS;QAAC,CAAC,CAAC,0CAA0C;QACpG,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC1B,MAAM,QAAQ,GAAyD,GAAG,EAAE,YAAY,EAAE,QAAQ,IAAI,GAAG,EAAE,QAAQ,CAAC;YACpH,IAAI,OAAO,QAAQ,KAAK,UAAU;gBAAE,QAAQ,CAAC,6BAAkB,CAAC,CAAC;QACnE,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,6FAA6F;YAC7F,+FAA+F;YAC/F,mDAAmD;YACnD,OAAO,CAAC,IAAI,CACV,gCAAgC,IAAI,iDAAiD;gBACrF,KAAM,CAAW,EAAE,OAAO,IAAI,CAAC,IAAI;gBACnC,gDAAgD,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,mBAAmB,CACzG,CAAC;QACJ,CAAC;QACD,OAAO,CAAC,gFAAgF;IAC1F,CAAC;IACD,gCAAgC;IAChC,IAAI,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,gGAAgG;QAChG,wEAAwE;QACxE,OAAO,CAAC,IAAI,CACV,iCAAiC,IAAI,2DAA2D;YAChG,4DAA4D;YAC5D,gDAAgD;YAChD,kDAAkD;YAClD,4GAA4G,IAAI,GAAG,CACpH,CAAC;QACF,OAAO;IACT,CAAC;IACD,2EAA2E;AAC7E,CAAC;AAED,SAAgB,+BAA+B;IAC7C,IAAI,6BAAkB,CAAC,WAAW,EAAE;QAAE,OAAO;IAC7C,KAAK,MAAM,IAAI,IAAI,gBAAgB;QAAE,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,4CAA4C;IAC3G,KAAK,MAAM,MAAM,IAAI,wBAAa;QAAE,MAAM,CAAC,QAAQ,CAAC,6BAAkB,CAAC,CAAC,CAAC,4BAA4B;IACrG,IAAA,iCAAsB,EAAC,6BAAkB,CAAC,CAAC,CAAC,iDAAiD;AAC/F,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capability.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/capability.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"capability.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/capability.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6EpC,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiMhE"}
|
|
@@ -51,40 +51,6 @@ function coreVersion() {
|
|
|
51
51
|
return 'latest';
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
|
-
/**
|
|
55
|
-
* Resolve the driver version to install for the running core `core`.
|
|
56
|
-
*
|
|
57
|
-
* Lockstep wants the EXACT `core` version. But the beta channel publishes `<core>-beta.N` before a
|
|
58
|
-
* stable `<core>` ever exists — so a released core (e.g. 3.2.10) asking for `@3.2.10` hits ETARGET
|
|
59
|
-
* out-of-the-box when npm only has `3.2.10-beta.2` (`sungen capability add` then fails for a fresh
|
|
60
|
-
* user). Fall back on the SAME version line: prefer exact `core`, else the highest `core-beta.N`,
|
|
61
|
-
* else the `beta` dist-tag as a last resort. Keeps the driver's pinned core-dep on the same line.
|
|
62
|
-
*/
|
|
63
|
-
function resolveDriverVersion(pkg, core) {
|
|
64
|
-
if (core === 'latest')
|
|
65
|
-
return 'beta';
|
|
66
|
-
try {
|
|
67
|
-
const out = (0, child_process_1.spawnSync)('npm', ['view', pkg, 'versions', '--json'], { encoding: 'utf-8', shell: true });
|
|
68
|
-
if (out.status !== 0 || !out.stdout)
|
|
69
|
-
return core; // can't query → let the exact install try/fail
|
|
70
|
-
let versions = [];
|
|
71
|
-
const parsed = JSON.parse(out.stdout);
|
|
72
|
-
versions = Array.isArray(parsed) ? parsed : [parsed];
|
|
73
|
-
if (versions.includes(core))
|
|
74
|
-
return core; // exact exists → lockstep
|
|
75
|
-
const prefix = `${core}-beta.`;
|
|
76
|
-
const betas = versions
|
|
77
|
-
.filter((v) => typeof v === 'string' && v.startsWith(prefix))
|
|
78
|
-
.map((v) => parseInt(v.slice(prefix.length), 10))
|
|
79
|
-
.filter((n) => Number.isInteger(n));
|
|
80
|
-
if (betas.length)
|
|
81
|
-
return `${core}-beta.${Math.max(...betas)}`; // highest same-line prerelease
|
|
82
|
-
return 'beta'; // nothing on this line → newest beta dist-tag
|
|
83
|
-
}
|
|
84
|
-
catch {
|
|
85
|
-
return core;
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
54
|
/**
|
|
89
55
|
* Add `test:mobile` to the project's package.json scripts (if absent).
|
|
90
56
|
* Idempotent — skips if the script is already set.
|
|
@@ -258,21 +224,13 @@ function registerCapabilityCommand(program) {
|
|
|
258
224
|
process.exit(1);
|
|
259
225
|
}
|
|
260
226
|
const adapterName = meta.adapter || meta.id;
|
|
261
|
-
|
|
262
|
-
// as a core dependency (`drivers.yaml` bundled: true, e.g. data-factory) — present already,
|
|
263
|
-
// so no install/verify: `capability add` on it just records it in the profile.
|
|
264
|
-
const bundled = adapters_1.adapterRegistry.hasAdapter(adapterName) || meta.bundled === true;
|
|
227
|
+
const bundled = adapters_1.adapterRegistry.hasAdapter(adapterName); // e.g. `web` is bundled in Phase 2a
|
|
265
228
|
if (!bundled && !o.skipInstall) {
|
|
266
229
|
// Pin the driver to the RUNNING core's exact version (lockstep). Without this, plain
|
|
267
230
|
// `npm install @sungen/driver-x` resolves the package's `latest` dist-tag — which on a
|
|
268
231
|
// beta channel can lag (e.g. a prerelease first-published-as-latest), pulling a driver
|
|
269
232
|
// whose core dep resolves to the wrong @sun-asterisk/sungen and fails to load.
|
|
270
|
-
const
|
|
271
|
-
const target = resolveDriverVersion(meta.package, core); // exact core, else same-line beta, else 'beta' tag
|
|
272
|
-
const spec = `${meta.package}@${target}`;
|
|
273
|
-
if (target !== core) {
|
|
274
|
-
console.log(`ℹ ${meta.package}@${core} is not published yet — installing ${spec} (closest on the ${core} line).`);
|
|
275
|
-
}
|
|
233
|
+
const spec = `${meta.package}@${coreVersion()}`;
|
|
276
234
|
console.log(`📦 Installing ${spec} (dev dependency)...`);
|
|
277
235
|
const r = (0, child_process_1.spawnSync)('npm', ['install', '-D', spec], { stdio: 'inherit', shell: true });
|
|
278
236
|
if (r.status !== 0)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capability.js","sourceRoot":"","sources":["../../../src/cli/commands/capability.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"capability.js","sourceRoot":"","sources":["../../../src/cli/commands/capability.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capability.d.ts","sourceRoot":"","sources":["../../src/harness/capability.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,mBAAmB,GAAG,QAAQ,CAAC;CACxC;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,UAAU,GAAG,YAAY,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,
|
|
1
|
+
{"version":3,"file":"capability.d.ts","sourceRoot":"","sources":["../../src/harness/capability.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,mBAAmB,GAAG,QAAQ,CAAC;CACxC;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,UAAU,GAAG,YAAY,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,CAa/D;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,MAAM,CAUxG;AAGD,wBAAgB,iBAAiB,IAAI,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAQ9D;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAE7D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capability.js","sourceRoot":"","sources":["../../src/harness/capability.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"capability.js","sourceRoot":"","sources":["../../src/harness/capability.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BA,4CAEC;AAED,4CAaC;AAED,8CAUC;AAGD,8CAQC;AAED,gCAEC;AA1ED;;;;;;;;;GASG;AACH,uCAAyB;AACzB,2CAA6B;AAC7B,+BAAsE;AAkBtE,SAAgB,gBAAgB,CAAC,GAAW;IAC1C,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,mBAAmB,CAAC,CAAC;AACnD,CAAC;AAED,SAAgB,gBAAgB,CAAC,GAAW;IAC1C,MAAM,CAAC,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;QAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IACrF,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,IAAA,YAAS,EAAC,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QACvD,OAAO;YACL,QAAQ,EAAE,OAAO,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;YACjE,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;YAC9D,MAAM,EAAE,mBAAmB;SAC5B,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAChE,CAAC;AACH,CAAC;AAED,SAAgB,iBAAiB,CAAC,GAAW,EAAE,OAAiD;IAC9F,MAAM,CAAC,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAChC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACnD,MAAM,IAAI,GACR,0EAA0E;QAC1E,oFAAoF;QACpF,gFAAgF;QAChF,IAAA,gBAAa,EAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAC1E,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACnC,OAAO,CAAC,CAAC;AACX,CAAC;AAED,IAAI,QAAQ,GAAsC,IAAI,CAAC;AACvD,SAAgB,iBAAiB;IAC/B,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;IAC1D,MAAM,CAAC,GAAG,IAAA,YAAS,EAAC,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAwD,CAAC;IACxG,MAAM,GAAG,GAA+B,EAAE,CAAC;IAC3C,KAAK,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;QAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC;IAC9E,QAAQ,GAAG,GAAG,CAAC;IACf,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAgB,UAAU,CAAC,EAAU;IACnC,OAAO,iBAAiB,EAAE,CAAC,EAAE,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -51,8 +51,7 @@ drivers:
|
|
|
51
51
|
data-factory:
|
|
52
52
|
kind: capability
|
|
53
53
|
package: "@sungen/driver-data-factory"
|
|
54
|
-
status:
|
|
55
|
-
bundled: true # runtime-free knowledge+codegen — shipped by default (no `capability add` needed)
|
|
54
|
+
status: planned
|
|
56
55
|
capabilities: ["@dataFactory"]
|
|
57
56
|
unblocks: [M1]
|
|
58
57
|
mock:
|
|
@@ -127,7 +127,6 @@ If the unit is **api-first**, skip every selector/capture phase (an API test has
|
|
|
127
127
|
## Pre-run (phased — per `sungen-selector-fix` skill)
|
|
128
128
|
|
|
129
129
|
1. Verify `<base>/<name>/` has `.feature` + `test-data.yaml`. **If the feature has `@query` steps**, check the resolved datasource `engine` in `qa/datasources.yaml` — unsupported engine → follow the `sungen-gherkin-syntax` skill § "Unsupported DB engine — fallback" before compiling (do not attempt a direct connect).
|
|
130
|
-
1.5. **Data Factory pre-check (before running)** — Data Factory is bundled with core, so whenever a field-map exists (`qa/data-factory/<name>.fields.yaml`), confirm the test-data is standardized and covers each field before you run: `[ -x ./bin/sungen.js ] && ./bin/sungen.js data lint --screen <name> || npx sungen data lint --screen <name>`. If it reports coverage gaps (missing boundary/invalid, unresolved values, unmapped error codes) or the field-map is newer than `test-data/<name>.yaml`, refresh via `/sungen:create-data-test <name>` (or `sungen data gen --screen <name>`) — then compile. Blind spots (a `type` not in the catalog) are for the QA to answer, not to invent. No field-map / driver disabled → skip this step.
|
|
131
130
|
2. **Phase 0 — Selector Pre-gen**: if `selectors.yaml` is missing/empty or doesn't cover the feature file's `[Reference]`s, apply the following decision tree before running Phase 0 from `sungen-selector-fix`:
|
|
132
131
|
|
|
133
132
|
```
|
|
@@ -18,16 +18,14 @@ You generate 3 files for sungen — a Gherkin compiler that produces Playwright
|
|
|
18
18
|
| `sungen-delivery` | Export Gherkin + Playwright results → CSV test case deliverable |
|
|
19
19
|
| `sungen-capture` | Acquire visual/design context — one skill, 4 modes: figma-mcp (Dev Mode MCP), figma-pat (URL → spec_figma.md), live (Playwright MCP scan), local (images in `requirements/ui/`) |
|
|
20
20
|
| `sungen-locale` | Bootstrap i18n — audit selectors, detect locale switch mechanism, generate test-data overlay |
|
|
21
|
-
| `sungen-data-factory` | Standardized test-data — field-type/security catalog, 4-source method, `.overwrite`, blind-spot prompts |
|
|
22
21
|
|
|
23
|
-
## Workflow (
|
|
22
|
+
## Workflow (7 AI commands)
|
|
24
23
|
|
|
25
24
|
| Command | What it does |
|
|
26
25
|
|---|---|
|
|
27
26
|
| `/sungen:add-screen <name> <path>` | Scaffold `qa/screens/<name>/` directories |
|
|
28
27
|
| `/sungen:add-flow <name> [--path <url>]` | Scaffold `qa/flows/<name>/` directories for E2E cross-screen testing |
|
|
29
28
|
| `/sungen:create-test <name>` | Generate `.feature` + `test-data.yaml` (auto-detects screen or flow) |
|
|
30
|
-
| `/sungen:create-data-test <name>` | Generate standardized test-data (valid/boundary/invalid + CHK trace) from the Data Factory catalog; no name = all units (asks to confirm) |
|
|
31
29
|
| `/sungen:review <name>` | Score syntax, coverage, viewpoint quality (auto-detects screen or flow) |
|
|
32
30
|
| `/sungen:run-test <name>` | Generate `selectors.yaml`, compile, run, auto-fix (auto-detects screen or flow) |
|
|
33
31
|
| `/sungen:delivery [name...]` | Export test cases → CSV for QA delivery (all screens if no arg) |
|
|
@@ -18,16 +18,14 @@ You generate 3 files for sungen — a Gherkin compiler that produces Playwright
|
|
|
18
18
|
| `sungen-delivery` | Export Gherkin + Playwright results → CSV test case deliverable |
|
|
19
19
|
| `sungen-capture` | Acquire visual/design context — one skill, 4 modes: figma-mcp (Dev Mode MCP), figma-pat (URL → spec_figma.md), live (Playwright MCP scan), local (images in `requirements/ui/`) |
|
|
20
20
|
| `sungen-locale` | Bootstrap i18n — audit selectors, detect locale switch mechanism, generate test-data overlay |
|
|
21
|
-
| `sungen-data-factory` | Standardized test-data — field-type/security catalog, 4-source method, `.overwrite`, blind-spot prompts |
|
|
22
21
|
|
|
23
|
-
## Workflow (
|
|
22
|
+
## Workflow (7 AI commands)
|
|
24
23
|
|
|
25
24
|
| Command | What it does |
|
|
26
25
|
|---|---|
|
|
27
26
|
| `/sungen-add-screen <name> <path>` | Scaffold `qa/screens/<name>/` directories |
|
|
28
27
|
| `/sungen-add-flow <name> [--path <url>]` | Scaffold `qa/flows/<name>/` directories for E2E cross-screen testing |
|
|
29
28
|
| `/sungen-create-test <name>` | Generate `.feature` + `test-data.yaml` (auto-detects screen or flow) |
|
|
30
|
-
| `/sungen-create-data-test <name>` | Generate standardized test-data (valid/boundary/invalid + CHK trace) from the Data Factory catalog; no name = all units (asks to confirm) |
|
|
31
29
|
| `/sungen-review <name>` | Score syntax, coverage, viewpoint quality (auto-detects screen or flow) |
|
|
32
30
|
| `/sungen-run-test <name>` | Generate `selectors.yaml`, compile, run, auto-fix (auto-detects screen or flow) |
|
|
33
31
|
| `/sungen-delivery [name...]` | Export test cases → CSV for QA delivery (all screens if no arg) |
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sun-asterisk/sungen",
|
|
3
|
-
"version": "3.2.
|
|
3
|
+
"version": "3.2.11",
|
|
4
4
|
"description": "Deterministic E2E Test Compiler - Gherkin + Selectors → Playwright tests",
|
|
5
5
|
"main": "src/index.ts",
|
|
6
6
|
"types": "src/index.ts",
|
|
@@ -39,8 +39,7 @@
|
|
|
39
39
|
"@babel/types": "^7.28.5",
|
|
40
40
|
"@cucumber/gherkin": "^37.0.0",
|
|
41
41
|
"@cucumber/messages": "^31.0.0",
|
|
42
|
-
"@sungen/driver-
|
|
43
|
-
"@sungen/driver-ui": "3.2.10-beta.6",
|
|
42
|
+
"@sungen/driver-ui": "3.2.11",
|
|
44
43
|
"chalk": "^5.6.2",
|
|
45
44
|
"commander": "^14.0.2",
|
|
46
45
|
"dotenv": "^17.2.3",
|
|
@@ -27,7 +27,7 @@ import { LOCAL_DRIVERS, registerCoreCapability } from './builtins';
|
|
|
27
27
|
* move to their packages (R5.5/R5.6) they join this list and leave `LOCAL_DRIVERS`; eventually this
|
|
28
28
|
* becomes a scan of installed `@sungen/driver-*` packages (R5.7).
|
|
29
29
|
*/
|
|
30
|
-
const EXTERNAL_DRIVERS = ['@sungen/driver-ui', '@sungen/driver-db', '@sungen/driver-api', '@sungen/driver-mobile'
|
|
30
|
+
const EXTERNAL_DRIVERS = ['@sungen/driver-ui', '@sungen/driver-db', '@sungen/driver-api', '@sungen/driver-mobile'];
|
|
31
31
|
|
|
32
32
|
/**
|
|
33
33
|
* Bundled (non-opt-in) drivers: shipped as a core dependency (`drivers.yaml` `bundled: true`), so the
|
|
@@ -36,10 +36,7 @@ const EXTERNAL_DRIVERS = ['@sungen/driver-ui', '@sungen/driver-db', '@sungen/dri
|
|
|
36
36
|
* symlink for the package is missing). Surface it LOUDLY: otherwise the entire UI step vocabulary is
|
|
37
37
|
* absent and every step silently compiles to "Unrecognized step pattern" with no clue why.
|
|
38
38
|
*/
|
|
39
|
-
|
|
40
|
-
// codegen), so shipping it by default adds no runtime, unlike ui/db/api/mobile. It makes standardized
|
|
41
|
-
// test-data available out of the box (no `capability add` needed); inert until a field-map/recipe exists.
|
|
42
|
-
const BUNDLED_DRIVERS = new Set(['@sungen/driver-ui', '@sungen/driver-data-factory']);
|
|
39
|
+
const BUNDLED_DRIVERS = new Set(['@sungen/driver-ui']);
|
|
43
40
|
|
|
44
41
|
function loadExternalDriver(name: string): void {
|
|
45
42
|
// Resolve from the user's PROJECT first, then from core's own location. Opt-in drivers
|
|
@@ -15,36 +15,6 @@ function coreVersion(): string {
|
|
|
15
15
|
try { return require('../../../package.json').version || 'latest'; } catch { return 'latest'; }
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
/**
|
|
19
|
-
* Resolve the driver version to install for the running core `core`.
|
|
20
|
-
*
|
|
21
|
-
* Lockstep wants the EXACT `core` version. But the beta channel publishes `<core>-beta.N` before a
|
|
22
|
-
* stable `<core>` ever exists — so a released core (e.g. 3.2.10) asking for `@3.2.10` hits ETARGET
|
|
23
|
-
* out-of-the-box when npm only has `3.2.10-beta.2` (`sungen capability add` then fails for a fresh
|
|
24
|
-
* user). Fall back on the SAME version line: prefer exact `core`, else the highest `core-beta.N`,
|
|
25
|
-
* else the `beta` dist-tag as a last resort. Keeps the driver's pinned core-dep on the same line.
|
|
26
|
-
*/
|
|
27
|
-
function resolveDriverVersion(pkg: string, core: string): string {
|
|
28
|
-
if (core === 'latest') return 'beta';
|
|
29
|
-
try {
|
|
30
|
-
const out = spawnSync('npm', ['view', pkg, 'versions', '--json'], { encoding: 'utf-8', shell: true });
|
|
31
|
-
if (out.status !== 0 || !out.stdout) return core; // can't query → let the exact install try/fail
|
|
32
|
-
let versions: string[] = [];
|
|
33
|
-
const parsed = JSON.parse(out.stdout);
|
|
34
|
-
versions = Array.isArray(parsed) ? parsed : [parsed];
|
|
35
|
-
if (versions.includes(core)) return core; // exact exists → lockstep
|
|
36
|
-
const prefix = `${core}-beta.`;
|
|
37
|
-
const betas = versions
|
|
38
|
-
.filter((v) => typeof v === 'string' && v.startsWith(prefix))
|
|
39
|
-
.map((v) => parseInt(v.slice(prefix.length), 10))
|
|
40
|
-
.filter((n) => Number.isInteger(n));
|
|
41
|
-
if (betas.length) return `${core}-beta.${Math.max(...betas)}`; // highest same-line prerelease
|
|
42
|
-
return 'beta'; // nothing on this line → newest beta dist-tag
|
|
43
|
-
} catch {
|
|
44
|
-
return core;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
|
|
48
18
|
/**
|
|
49
19
|
* Add `test:mobile` to the project's package.json scripts (if absent).
|
|
50
20
|
* Idempotent — skips if the script is already set.
|
|
@@ -217,22 +187,14 @@ export function registerCapabilityCommand(program: Command): void {
|
|
|
217
187
|
}
|
|
218
188
|
|
|
219
189
|
const adapterName = meta.adapter || meta.id;
|
|
220
|
-
|
|
221
|
-
// as a core dependency (`drivers.yaml` bundled: true, e.g. data-factory) — present already,
|
|
222
|
-
// so no install/verify: `capability add` on it just records it in the profile.
|
|
223
|
-
const bundled = adapterRegistry.hasAdapter(adapterName) || meta.bundled === true;
|
|
190
|
+
const bundled = adapterRegistry.hasAdapter(adapterName); // e.g. `web` is bundled in Phase 2a
|
|
224
191
|
|
|
225
192
|
if (!bundled && !o.skipInstall) {
|
|
226
193
|
// Pin the driver to the RUNNING core's exact version (lockstep). Without this, plain
|
|
227
194
|
// `npm install @sungen/driver-x` resolves the package's `latest` dist-tag — which on a
|
|
228
195
|
// beta channel can lag (e.g. a prerelease first-published-as-latest), pulling a driver
|
|
229
196
|
// whose core dep resolves to the wrong @sun-asterisk/sungen and fails to load.
|
|
230
|
-
const
|
|
231
|
-
const target = resolveDriverVersion(meta.package, core); // exact core, else same-line beta, else 'beta' tag
|
|
232
|
-
const spec = `${meta.package}@${target}`;
|
|
233
|
-
if (target !== core) {
|
|
234
|
-
console.log(`ℹ ${meta.package}@${core} is not published yet — installing ${spec} (closest on the ${core} line).`);
|
|
235
|
-
}
|
|
197
|
+
const spec = `${meta.package}@${coreVersion()}`;
|
|
236
198
|
console.log(`📦 Installing ${spec} (dev dependency)...`);
|
|
237
199
|
const r = spawnSync('npm', ['install', '-D', spec], { stdio: 'inherit', shell: true });
|
|
238
200
|
if (r.status !== 0) throw new Error(`npm install -D ${spec} failed.`);
|
|
@@ -24,7 +24,6 @@ export interface DriverMeta {
|
|
|
24
24
|
package: string;
|
|
25
25
|
runtime?: string;
|
|
26
26
|
adapter?: string; // registry adapter name (defaults to id)
|
|
27
|
-
bundled?: boolean; // shipped as a core dependency — present without `capability add`
|
|
28
27
|
capabilities: string[];
|
|
29
28
|
unblocks?: string[];
|
|
30
29
|
}
|
|
@@ -51,8 +51,7 @@ drivers:
|
|
|
51
51
|
data-factory:
|
|
52
52
|
kind: capability
|
|
53
53
|
package: "@sungen/driver-data-factory"
|
|
54
|
-
status:
|
|
55
|
-
bundled: true # runtime-free knowledge+codegen — shipped by default (no `capability add` needed)
|
|
54
|
+
status: planned
|
|
56
55
|
capabilities: ["@dataFactory"]
|
|
57
56
|
unblocks: [M1]
|
|
58
57
|
mock:
|
|
@@ -127,7 +127,6 @@ If the unit is **api-first**, skip every selector/capture phase (an API test has
|
|
|
127
127
|
## Pre-run (phased — per `sungen-selector-fix` skill)
|
|
128
128
|
|
|
129
129
|
1. Verify `<base>/<name>/` has `.feature` + `test-data.yaml`. **If the feature has `@query` steps**, check the resolved datasource `engine` in `qa/datasources.yaml` — unsupported engine → follow the `sungen-gherkin-syntax` skill § "Unsupported DB engine — fallback" before compiling (do not attempt a direct connect).
|
|
130
|
-
1.5. **Data Factory pre-check (before running)** — Data Factory is bundled with core, so whenever a field-map exists (`qa/data-factory/<name>.fields.yaml`), confirm the test-data is standardized and covers each field before you run: `[ -x ./bin/sungen.js ] && ./bin/sungen.js data lint --screen <name> || npx sungen data lint --screen <name>`. If it reports coverage gaps (missing boundary/invalid, unresolved values, unmapped error codes) or the field-map is newer than `test-data/<name>.yaml`, refresh via `/sungen:create-data-test <name>` (or `sungen data gen --screen <name>`) — then compile. Blind spots (a `type` not in the catalog) are for the QA to answer, not to invent. No field-map / driver disabled → skip this step.
|
|
131
130
|
2. **Phase 0 — Selector Pre-gen**: if `selectors.yaml` is missing/empty or doesn't cover the feature file's `[Reference]`s, apply the following decision tree before running Phase 0 from `sungen-selector-fix`:
|
|
132
131
|
|
|
133
132
|
```
|
|
@@ -18,16 +18,14 @@ You generate 3 files for sungen — a Gherkin compiler that produces Playwright
|
|
|
18
18
|
| `sungen-delivery` | Export Gherkin + Playwright results → CSV test case deliverable |
|
|
19
19
|
| `sungen-capture` | Acquire visual/design context — one skill, 4 modes: figma-mcp (Dev Mode MCP), figma-pat (URL → spec_figma.md), live (Playwright MCP scan), local (images in `requirements/ui/`) |
|
|
20
20
|
| `sungen-locale` | Bootstrap i18n — audit selectors, detect locale switch mechanism, generate test-data overlay |
|
|
21
|
-
| `sungen-data-factory` | Standardized test-data — field-type/security catalog, 4-source method, `.overwrite`, blind-spot prompts |
|
|
22
21
|
|
|
23
|
-
## Workflow (
|
|
22
|
+
## Workflow (7 AI commands)
|
|
24
23
|
|
|
25
24
|
| Command | What it does |
|
|
26
25
|
|---|---|
|
|
27
26
|
| `/sungen:add-screen <name> <path>` | Scaffold `qa/screens/<name>/` directories |
|
|
28
27
|
| `/sungen:add-flow <name> [--path <url>]` | Scaffold `qa/flows/<name>/` directories for E2E cross-screen testing |
|
|
29
28
|
| `/sungen:create-test <name>` | Generate `.feature` + `test-data.yaml` (auto-detects screen or flow) |
|
|
30
|
-
| `/sungen:create-data-test <name>` | Generate standardized test-data (valid/boundary/invalid + CHK trace) from the Data Factory catalog; no name = all units (asks to confirm) |
|
|
31
29
|
| `/sungen:review <name>` | Score syntax, coverage, viewpoint quality (auto-detects screen or flow) |
|
|
32
30
|
| `/sungen:run-test <name>` | Generate `selectors.yaml`, compile, run, auto-fix (auto-detects screen or flow) |
|
|
33
31
|
| `/sungen:delivery [name...]` | Export test cases → CSV for QA delivery (all screens if no arg) |
|
|
@@ -18,16 +18,14 @@ You generate 3 files for sungen — a Gherkin compiler that produces Playwright
|
|
|
18
18
|
| `sungen-delivery` | Export Gherkin + Playwright results → CSV test case deliverable |
|
|
19
19
|
| `sungen-capture` | Acquire visual/design context — one skill, 4 modes: figma-mcp (Dev Mode MCP), figma-pat (URL → spec_figma.md), live (Playwright MCP scan), local (images in `requirements/ui/`) |
|
|
20
20
|
| `sungen-locale` | Bootstrap i18n — audit selectors, detect locale switch mechanism, generate test-data overlay |
|
|
21
|
-
| `sungen-data-factory` | Standardized test-data — field-type/security catalog, 4-source method, `.overwrite`, blind-spot prompts |
|
|
22
21
|
|
|
23
|
-
## Workflow (
|
|
22
|
+
## Workflow (7 AI commands)
|
|
24
23
|
|
|
25
24
|
| Command | What it does |
|
|
26
25
|
|---|---|
|
|
27
26
|
| `/sungen-add-screen <name> <path>` | Scaffold `qa/screens/<name>/` directories |
|
|
28
27
|
| `/sungen-add-flow <name> [--path <url>]` | Scaffold `qa/flows/<name>/` directories for E2E cross-screen testing |
|
|
29
28
|
| `/sungen-create-test <name>` | Generate `.feature` + `test-data.yaml` (auto-detects screen or flow) |
|
|
30
|
-
| `/sungen-create-data-test <name>` | Generate standardized test-data (valid/boundary/invalid + CHK trace) from the Data Factory catalog; no name = all units (asks to confirm) |
|
|
31
29
|
| `/sungen-review <name>` | Score syntax, coverage, viewpoint quality (auto-detects screen or flow) |
|
|
32
30
|
| `/sungen-run-test <name>` | Generate `selectors.yaml`, compile, run, auto-fix (auto-detects screen or flow) |
|
|
33
31
|
| `/sungen-delivery [name...]` | Export test cases → CSV for QA delivery (all screens if no arg) |
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: create-data-test
|
|
3
|
-
description: "Generate standardized test-data for a screen/flow from the Data Factory catalog — valid/boundary/invalid values with CHK-* traceability (no free-form guessing)"
|
|
4
|
-
argument-hint: [screen-or-flow-name]
|
|
5
|
-
order: 25
|
|
6
|
-
claude-tools: "Read, Grep, Bash, Glob, Write, Edit, AskUserQuestion, Skill"
|
|
7
|
-
copilot-tools: "[vscode, execute, read, agent, edit, search, todo]"
|
|
8
|
-
codex-trigger: "Run when the user asks to CREATE, generate, or standardize TEST DATA / test values for a screen or flow (valid/boundary/invalid, boundary values, negative data). Uses the Data Factory driver. Not for generating the .feature scenarios themselves (that is create-test)."
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
**Input**: A screen or flow name (e.g., `/sungen:create-data-test login`), OR **no name** to do every unit (with a confirmation — see ALL mode). Load the `sungen-data-factory` skill for the full method.
|
|
12
|
-
|
|
13
|
-
## Role
|
|
14
|
-
|
|
15
|
-
You are a **Senior QA Engineer** producing **test data to a standard**, not by guessing. You do NOT invent values field-by-field. You follow the 4-source method (spec rules → field-type catalog → design technique → DB mapping), driven by the **Data Factory** capability driver. Values come from the catalog (`common/` + the project's `.overwrite`), each tagged with a `CHK-*` id that traces back to the spec. Where the catalog cannot cover a project-specific field, you **ask the QA** — you never fabricate domain data.
|
|
16
|
-
|
|
17
|
-
## Preconditions
|
|
18
|
-
|
|
19
|
-
1. **Availability** — Data Factory is **bundled with core** (no `capability add` needed); its CLI (`sungen data …`) is available out of the box. Just continue.
|
|
20
|
-
2. Determine mode from `$ARGUMENTS`:
|
|
21
|
-
- A **name** given → single-unit mode (that screen/flow only).
|
|
22
|
-
- **No name** → **ALL mode** (see below — always confirm first).
|
|
23
|
-
|
|
24
|
-
## ALL mode (no name) — confirm before doing everything
|
|
25
|
-
|
|
26
|
-
If no name was given, the user wants **all** screens/flows — but this is wide, and a missing name is often a typo (they meant `create-data-test home`). So:
|
|
27
|
-
|
|
28
|
-
1. List every unit under `qa/screens/*` and `qa/flows/*`, and classify each as **new** (no `test-data/<name>.yaml` yet) vs **would-overwrite**.
|
|
29
|
-
2. Show the list and use `AskUserQuestion` to confirm: *"Generate test-data for ALL N units? (X new · Y would overwrite)"* — default to **No**.
|
|
30
|
-
3. Only proceed when the user confirms. Then run the per-unit flow below for each (the CLI `sungen data gen --all` also enforces this confirm; `--yes` after the user agrees).
|
|
31
|
-
|
|
32
|
-
## Per-unit flow (single unit, or each unit in ALL mode)
|
|
33
|
-
|
|
34
|
-
Auto-detect: `qa/flows/<name>/` → flow; else `qa/screens/<name>/` → screen. (API units carry their contract in `apis.yaml` — data there is `@cases` in create-test, not this command.)
|
|
35
|
-
|
|
36
|
-
### 1. Read the sources (Nguồn 1 + 4)
|
|
37
|
-
|
|
38
|
-
Read `qa/<screens|flows>/<name>/requirements/spec.md` and `test-viewpoint.md`. For **each input field / parameter**, extract:
|
|
39
|
-
- data **type** (map to a catalog field-type: email · password · phone · string · number-integer · number-float · currency · postcode · katakana …),
|
|
40
|
-
- `required`, format, **min/max** length or value,
|
|
41
|
-
- the real **error/message code** the spec shows when a rule is violated,
|
|
42
|
-
- any **DB mapping** (unique, cross-entity dependency) noted in the spec.
|
|
43
|
-
|
|
44
|
-
Viewpoint tells you which fields are high-priority → give them the fullest data.
|
|
45
|
-
|
|
46
|
-
**No input fields → nothing to generate.** If the unit is a pure navigation / listing / capture-compare flow (e.g. a home-shopping browse flow) with **no user-input fields or parameters**, Data Factory has nothing to standardize. Report *"`<name>`: no input fields → nothing to generate"* and stop for this unit — do **not** write an empty `qa/data-factory/<name>.fields.yaml`. (Its scenarios are covered by create-test's data, not by field-level test data.)
|
|
47
|
-
|
|
48
|
-
### 2. Write the field-map — `qa/data-factory/<name>.fields.yaml`
|
|
49
|
-
|
|
50
|
-
This is the input the deterministic generator expands. One entry per field:
|
|
51
|
-
|
|
52
|
-
```yaml
|
|
53
|
-
screen: <name> # or: flow: <name>
|
|
54
|
-
fields:
|
|
55
|
-
- name: email
|
|
56
|
-
type: email
|
|
57
|
-
required: true
|
|
58
|
-
constraints: { maxLocal: 64, maxTotal: 254 } # project's real limits
|
|
59
|
-
errorMap: { M13: E1042, M02: E1001 } # catalog placeholder → project's real code
|
|
60
|
-
- name: password
|
|
61
|
-
type: password
|
|
62
|
-
constraints: { minLength: 8, maxLength: 32 }
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
Map every placeholder error code you can (`errorMap`) to the spec's real code. Leave a code unmapped only if the spec truly has none — the lint will flag it as an open point to confirm with BA/Dev.
|
|
66
|
-
|
|
67
|
-
### 3. Blind spots — ask, do not invent
|
|
68
|
-
|
|
69
|
-
If a field's type is **not** in the catalog (a business enum, a cross-entity constraint, a project data model), **stop and ask the QA** with `AskUserQuestion` for: (1) the valid set, (2) invalid / non-existent values, (3) the error code when wrong, (4) dependencies on other fields. Record the answer in `qa/data-factory/project/<entity>.yaml` for reuse. Never fabricate domain values.
|
|
70
|
-
|
|
71
|
-
### 4. Lint the coverage
|
|
72
|
-
|
|
73
|
-
Run (local-first): `[ -x ./bin/sungen.js ] && ./bin/sungen.js data lint --screen <name> || npx sungen data lint --screen <name>`. Fix what it reports: add missing boundary values, resolve `UNRESOLVED` items (supply the constraint), map `OPEN_ERRORREF` codes. The bar is the phuong-phap §6 checklist — every required field has valid + boundary + invalid, one invalid per rule.
|
|
74
|
-
|
|
75
|
-
### 5. Generate the test-data
|
|
76
|
-
|
|
77
|
-
Run (local-first): `[ -x ./bin/sungen.js ] && ./bin/sungen.js data gen --screen <name> || npx sungen data gen --screen <name>`. If `test-data/<name>.yaml` already exists it **asks before overwriting** — respect the user's choice (in ALL mode after they confirmed, add `--yes`; use `--force` only when the user explicitly wants an unconditional overwrite). The output is standardized `valid/boundary/invalid` values with `CHK-*` traceability.
|
|
78
|
-
|
|
79
|
-
### 6. Weave into scenarios (if create-test already ran)
|
|
80
|
-
|
|
81
|
-
If the `.feature` exists, turn the generated invalid/boundary sets into data-driven `Scenario Outline` + `Examples` (`@cases`) referencing the values — following `sungen-gherkin-syntax`. Otherwise leave the standardized `test-data/<name>.yaml` for `/sungen:run-test` to consume.
|
|
82
|
-
|
|
83
|
-
## After running
|
|
84
|
-
|
|
85
|
-
Use `AskUserQuestion` to offer the next step: review the generated data, run `/sungen:create-test <name>` (if scenarios don't exist yet), or `/sungen:run-test <name>`.
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: sungen-data-factory
|
|
3
|
-
description: 'Use when create-data-test (or create-test) needs standardized TEST DATA — valid/boundary/invalid values for input fields with CHK-* traceability. Drives the Data Factory catalog + the 4-source method. Invoke after reading spec.md, when authoring the field-map or filling test-data.'
|
|
4
|
-
user-invocable: false
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## What this skill does
|
|
8
|
-
|
|
9
|
-
Turn a screen/flow's fields into **standardized test data** — not guessed values. You author a
|
|
10
|
-
**field-map**; the deterministic `sungen data gen` expands it from the Data Factory **catalog**
|
|
11
|
-
(field-type + security + technique library) into valid / boundary / invalid values, each carrying a
|
|
12
|
-
`CHK-*` id that traces to the spec. Your judgment goes into *reading the spec correctly* and
|
|
13
|
-
*answering blind spots* — never into inventing values the catalog or the QA should own.
|
|
14
|
-
|
|
15
|
-
Data Factory is **bundled with core** (runtime-free) — no `capability add` needed; the `sungen data …`
|
|
16
|
-
CLI is available out of the box.
|
|
17
|
-
|
|
18
|
-
## The 4-source method (phuong-phap-tao-test-data.md)
|
|
19
|
-
|
|
20
|
-
Never invent values from memory. Cross-reference four sources — each covers the previous one's gap:
|
|
21
|
-
|
|
22
|
-
1. **Spec validate rules** — required, format, min/max, business rules, and the **error/message code**
|
|
23
|
-
per rule. Defines the legal/illegal boundary. (Says the *law*, not every way to *break* it.)
|
|
24
|
-
2. **Field-type catalog** — the accumulated "how this type breaks" knowledge (email/password/phone/
|
|
25
|
-
number/…). This is the Data Factory `common/` — it fills the "spec doesn't list every break" gap.
|
|
26
|
-
3. **Design technique** — Boundary Value Analysis / Equivalence Partitioning / Decision Table / State
|
|
27
|
-
Transition — reduces the rule + candidates to a *minimal-but-sufficient* representative set.
|
|
28
|
-
4. **DB mapping** — unique constraints, cross-entity dependency, real backend limits → precondition
|
|
29
|
-
data, not just a single input value.
|
|
30
|
-
|
|
31
|
-
Then classify every value into **Valid / Boundary / Invalid** (each invalid tagged with its error
|
|
32
|
-
code) and give it a `CHK-*` id for traceability.
|
|
33
|
-
|
|
34
|
-
## The field-map — `qa/data-factory/<name>.fields.yaml`
|
|
35
|
-
|
|
36
|
-
Your main artifact. One entry per input field; the generator expands it:
|
|
37
|
-
|
|
38
|
-
```yaml
|
|
39
|
-
screen: login # or flow: <name>
|
|
40
|
-
fields:
|
|
41
|
-
- name: email
|
|
42
|
-
type: email # a catalog field-type (see list below)
|
|
43
|
-
required: true
|
|
44
|
-
constraints: { maxLocal: 64, maxTotal: 254 } # the project's REAL limits from spec
|
|
45
|
-
errorMap: { M13: E1042, M02: E1001 } # catalog placeholder code → project's real code
|
|
46
|
-
- name: password
|
|
47
|
-
type: password
|
|
48
|
-
constraints: { minLength: 8, maxLength: 32 }
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
**Catalog field-types** (P1): `email` · `password` · `phone` · `string` · `number-integer` ·
|
|
52
|
-
`number-float` · `currency` · `postcode` · `katakana` (JP). Security payload banks auto-append to a
|
|
53
|
-
field's invalid group via the type's `uses_security` (`sqli`, `xss`, `idor`, `broken-auth`, `upload`,
|
|
54
|
-
`input-validation`).
|
|
55
|
-
|
|
56
|
-
Rules:
|
|
57
|
-
- Pick the closest `type`; put the project's real numbers in `constraints` (they override the
|
|
58
|
-
catalog defaults).
|
|
59
|
-
- Map every `errorRef` placeholder (`M13`, `M39`, …) to the spec's real code via `errorMap`. Leave
|
|
60
|
-
one unmapped **only** if the spec has none — the lint flags it as an open point to confirm.
|
|
61
|
-
|
|
62
|
-
## No input fields → nothing to generate
|
|
63
|
-
|
|
64
|
-
Data Factory standardizes **field-level input data**. If a unit has no user-input fields or
|
|
65
|
-
parameters — a pure navigation, listing, or capture-compare flow — there is nothing to generate.
|
|
66
|
-
Report *"no input fields → nothing to generate"* and skip it; do **not** write an empty field-map.
|
|
67
|
-
Those scenarios are covered by the data create-test already produced, not by field-level test data.
|
|
68
|
-
(This is a correct outcome, not a gap — don't force a field-map to make the unit "processed".)
|
|
69
|
-
|
|
70
|
-
## Blind spots — ask, never fabricate
|
|
71
|
-
|
|
72
|
-
If a field's type is **not** in the catalog — a business enum, a cross-entity constraint, a
|
|
73
|
-
project-specific data model — do **not** guess. Ask the QA (via `AskUserQuestion`) for: (1) the valid
|
|
74
|
-
set, (2) invalid / non-existent values, (3) the error code when wrong, (4) dependencies on other
|
|
75
|
-
fields. Record it in `qa/data-factory/project/<entity>.yaml` so it becomes reusable project catalog.
|
|
76
|
-
This is the core discipline: *common is never enough; when blind, think and ask — don't invent.*
|
|
77
|
-
|
|
78
|
-
## Customizing the catalog — `.overwrite` (survives `sungen update`)
|
|
79
|
-
|
|
80
|
-
The shipped `common/` is a floor. Project rules go in `qa/data-factory/common.overwrite.yaml`,
|
|
81
|
-
deep-merged over the common (**later-wins**, keyed by `type` + data-point `id`): same `id` replaces,
|
|
82
|
-
new `id` appends, `constraints` merge key-by-key. `sungen update` refreshes `common/` but never
|
|
83
|
-
touches your overlay. If an update makes an overlay entry stale (references a bank/constraint that no
|
|
84
|
-
longer exists), the loader **warns you to prune it** — it never edits your file. Prefer a targeted
|
|
85
|
-
`errorMap`/`constraints` in the field-map for per-screen tweaks; use `.overwrite` only for rules that
|
|
86
|
-
apply project-wide.
|
|
87
|
-
|
|
88
|
-
## Verify before done — the phuong-phap §6 checklist
|
|
89
|
-
|
|
90
|
-
Run `sungen data lint` and clear it: every required field has **≥1 valid**, **boundary present**
|
|
91
|
-
(exact min/max, not only over-boundary) for bounded types, **≥1 invalid per rule** (not one generic
|
|
92
|
-
"wrong" value for many rules), no `UNRESOLVED` values, error codes mapped or explicitly left open.
|
|
93
|
-
Then `sungen data gen` writes the standardized `test-data/<name>.yaml`. Do not hand-edit the
|
|
94
|
-
generated values — change the field-map or `.overwrite` and re-run (determinism: same input → same
|
|
95
|
-
data).
|
|
96
|
-
|
|
97
|
-
## Weaving into scenarios
|
|
98
|
-
|
|
99
|
-
When a `.feature` exists, express invalid/boundary sets as data-driven `Scenario Outline` + `Examples`
|
|
100
|
-
(`@cases`) referencing the values — see `sungen-gherkin-syntax`. This keeps one logic + many values
|
|
101
|
-
instead of copy-pasted scenarios, and each row carries its `CHK-*` id for traceability.
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: create-data-test
|
|
3
|
-
description: "Generate standardized test-data for a screen/flow from the Data Factory catalog — valid/boundary/invalid values with CHK-* traceability (no free-form guessing)"
|
|
4
|
-
argument-hint: [screen-or-flow-name]
|
|
5
|
-
order: 25
|
|
6
|
-
claude-tools: "Read, Grep, Bash, Glob, Write, Edit, AskUserQuestion, Skill"
|
|
7
|
-
copilot-tools: "[vscode, execute, read, agent, edit, search, todo]"
|
|
8
|
-
codex-trigger: "Run when the user asks to CREATE, generate, or standardize TEST DATA / test values for a screen or flow (valid/boundary/invalid, boundary values, negative data). Uses the Data Factory driver. Not for generating the .feature scenarios themselves (that is create-test)."
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
**Input**: A screen or flow name (e.g., `/sungen:create-data-test login`), OR **no name** to do every unit (with a confirmation — see ALL mode). Load the `sungen-data-factory` skill for the full method.
|
|
12
|
-
|
|
13
|
-
## Role
|
|
14
|
-
|
|
15
|
-
You are a **Senior QA Engineer** producing **test data to a standard**, not by guessing. You do NOT invent values field-by-field. You follow the 4-source method (spec rules → field-type catalog → design technique → DB mapping), driven by the **Data Factory** capability driver. Values come from the catalog (`common/` + the project's `.overwrite`), each tagged with a `CHK-*` id that traces back to the spec. Where the catalog cannot cover a project-specific field, you **ask the QA** — you never fabricate domain data.
|
|
16
|
-
|
|
17
|
-
## Preconditions
|
|
18
|
-
|
|
19
|
-
1. **Availability** — Data Factory is **bundled with core** (no `capability add` needed); its CLI (`sungen data …`) is available out of the box. Just continue.
|
|
20
|
-
2. Determine mode from `$ARGUMENTS`:
|
|
21
|
-
- A **name** given → single-unit mode (that screen/flow only).
|
|
22
|
-
- **No name** → **ALL mode** (see below — always confirm first).
|
|
23
|
-
|
|
24
|
-
## ALL mode (no name) — confirm before doing everything
|
|
25
|
-
|
|
26
|
-
If no name was given, the user wants **all** screens/flows — but this is wide, and a missing name is often a typo (they meant `create-data-test home`). So:
|
|
27
|
-
|
|
28
|
-
1. List every unit under `qa/screens/*` and `qa/flows/*`, and classify each as **new** (no `test-data/<name>.yaml` yet) vs **would-overwrite**.
|
|
29
|
-
2. Show the list and use `AskUserQuestion` to confirm: *"Generate test-data for ALL N units? (X new · Y would overwrite)"* — default to **No**.
|
|
30
|
-
3. Only proceed when the user confirms. Then run the per-unit flow below for each (the CLI `sungen data gen --all` also enforces this confirm; `--yes` after the user agrees).
|
|
31
|
-
|
|
32
|
-
## Per-unit flow (single unit, or each unit in ALL mode)
|
|
33
|
-
|
|
34
|
-
Auto-detect: `qa/flows/<name>/` → flow; else `qa/screens/<name>/` → screen. (API units carry their contract in `apis.yaml` — data there is `@cases` in create-test, not this command.)
|
|
35
|
-
|
|
36
|
-
### 1. Read the sources (Nguồn 1 + 4)
|
|
37
|
-
|
|
38
|
-
Read `qa/<screens|flows>/<name>/requirements/spec.md` and `test-viewpoint.md`. For **each input field / parameter**, extract:
|
|
39
|
-
- data **type** (map to a catalog field-type: email · password · phone · string · number-integer · number-float · currency · postcode · katakana …),
|
|
40
|
-
- `required`, format, **min/max** length or value,
|
|
41
|
-
- the real **error/message code** the spec shows when a rule is violated,
|
|
42
|
-
- any **DB mapping** (unique, cross-entity dependency) noted in the spec.
|
|
43
|
-
|
|
44
|
-
Viewpoint tells you which fields are high-priority → give them the fullest data.
|
|
45
|
-
|
|
46
|
-
**No input fields → nothing to generate.** If the unit is a pure navigation / listing / capture-compare flow (e.g. a home-shopping browse flow) with **no user-input fields or parameters**, Data Factory has nothing to standardize. Report *"`<name>`: no input fields → nothing to generate"* and stop for this unit — do **not** write an empty `qa/data-factory/<name>.fields.yaml`. (Its scenarios are covered by create-test's data, not by field-level test data.)
|
|
47
|
-
|
|
48
|
-
### 2. Write the field-map — `qa/data-factory/<name>.fields.yaml`
|
|
49
|
-
|
|
50
|
-
This is the input the deterministic generator expands. One entry per field:
|
|
51
|
-
|
|
52
|
-
```yaml
|
|
53
|
-
screen: <name> # or: flow: <name>
|
|
54
|
-
fields:
|
|
55
|
-
- name: email
|
|
56
|
-
type: email
|
|
57
|
-
required: true
|
|
58
|
-
constraints: { maxLocal: 64, maxTotal: 254 } # project's real limits
|
|
59
|
-
errorMap: { M13: E1042, M02: E1001 } # catalog placeholder → project's real code
|
|
60
|
-
- name: password
|
|
61
|
-
type: password
|
|
62
|
-
constraints: { minLength: 8, maxLength: 32 }
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
Map every placeholder error code you can (`errorMap`) to the spec's real code. Leave a code unmapped only if the spec truly has none — the lint will flag it as an open point to confirm with BA/Dev.
|
|
66
|
-
|
|
67
|
-
### 3. Blind spots — ask, do not invent
|
|
68
|
-
|
|
69
|
-
If a field's type is **not** in the catalog (a business enum, a cross-entity constraint, a project data model), **stop and ask the QA** with `AskUserQuestion` for: (1) the valid set, (2) invalid / non-existent values, (3) the error code when wrong, (4) dependencies on other fields. Record the answer in `qa/data-factory/project/<entity>.yaml` for reuse. Never fabricate domain values.
|
|
70
|
-
|
|
71
|
-
### 4. Lint the coverage
|
|
72
|
-
|
|
73
|
-
Run (local-first): `[ -x ./bin/sungen.js ] && ./bin/sungen.js data lint --screen <name> || npx sungen data lint --screen <name>`. Fix what it reports: add missing boundary values, resolve `UNRESOLVED` items (supply the constraint), map `OPEN_ERRORREF` codes. The bar is the phuong-phap §6 checklist — every required field has valid + boundary + invalid, one invalid per rule.
|
|
74
|
-
|
|
75
|
-
### 5. Generate the test-data
|
|
76
|
-
|
|
77
|
-
Run (local-first): `[ -x ./bin/sungen.js ] && ./bin/sungen.js data gen --screen <name> || npx sungen data gen --screen <name>`. If `test-data/<name>.yaml` already exists it **asks before overwriting** — respect the user's choice (in ALL mode after they confirmed, add `--yes`; use `--force` only when the user explicitly wants an unconditional overwrite). The output is standardized `valid/boundary/invalid` values with `CHK-*` traceability.
|
|
78
|
-
|
|
79
|
-
### 6. Weave into scenarios (if create-test already ran)
|
|
80
|
-
|
|
81
|
-
If the `.feature` exists, turn the generated invalid/boundary sets into data-driven `Scenario Outline` + `Examples` (`@cases`) referencing the values — following `sungen-gherkin-syntax`. Otherwise leave the standardized `test-data/<name>.yaml` for `/sungen:run-test` to consume.
|
|
82
|
-
|
|
83
|
-
## After running
|
|
84
|
-
|
|
85
|
-
Use `AskUserQuestion` to offer the next step: review the generated data, run `/sungen:create-test <name>` (if scenarios don't exist yet), or `/sungen:run-test <name>`.
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: sungen-data-factory
|
|
3
|
-
description: 'Use when create-data-test (or create-test) needs standardized TEST DATA — valid/boundary/invalid values for input fields with CHK-* traceability. Drives the Data Factory catalog + the 4-source method. Invoke after reading spec.md, when authoring the field-map or filling test-data.'
|
|
4
|
-
user-invocable: false
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## What this skill does
|
|
8
|
-
|
|
9
|
-
Turn a screen/flow's fields into **standardized test data** — not guessed values. You author a
|
|
10
|
-
**field-map**; the deterministic `sungen data gen` expands it from the Data Factory **catalog**
|
|
11
|
-
(field-type + security + technique library) into valid / boundary / invalid values, each carrying a
|
|
12
|
-
`CHK-*` id that traces to the spec. Your judgment goes into *reading the spec correctly* and
|
|
13
|
-
*answering blind spots* — never into inventing values the catalog or the QA should own.
|
|
14
|
-
|
|
15
|
-
Data Factory is **bundled with core** (runtime-free) — no `capability add` needed; the `sungen data …`
|
|
16
|
-
CLI is available out of the box.
|
|
17
|
-
|
|
18
|
-
## The 4-source method (phuong-phap-tao-test-data.md)
|
|
19
|
-
|
|
20
|
-
Never invent values from memory. Cross-reference four sources — each covers the previous one's gap:
|
|
21
|
-
|
|
22
|
-
1. **Spec validate rules** — required, format, min/max, business rules, and the **error/message code**
|
|
23
|
-
per rule. Defines the legal/illegal boundary. (Says the *law*, not every way to *break* it.)
|
|
24
|
-
2. **Field-type catalog** — the accumulated "how this type breaks" knowledge (email/password/phone/
|
|
25
|
-
number/…). This is the Data Factory `common/` — it fills the "spec doesn't list every break" gap.
|
|
26
|
-
3. **Design technique** — Boundary Value Analysis / Equivalence Partitioning / Decision Table / State
|
|
27
|
-
Transition — reduces the rule + candidates to a *minimal-but-sufficient* representative set.
|
|
28
|
-
4. **DB mapping** — unique constraints, cross-entity dependency, real backend limits → precondition
|
|
29
|
-
data, not just a single input value.
|
|
30
|
-
|
|
31
|
-
Then classify every value into **Valid / Boundary / Invalid** (each invalid tagged with its error
|
|
32
|
-
code) and give it a `CHK-*` id for traceability.
|
|
33
|
-
|
|
34
|
-
## The field-map — `qa/data-factory/<name>.fields.yaml`
|
|
35
|
-
|
|
36
|
-
Your main artifact. One entry per input field; the generator expands it:
|
|
37
|
-
|
|
38
|
-
```yaml
|
|
39
|
-
screen: login # or flow: <name>
|
|
40
|
-
fields:
|
|
41
|
-
- name: email
|
|
42
|
-
type: email # a catalog field-type (see list below)
|
|
43
|
-
required: true
|
|
44
|
-
constraints: { maxLocal: 64, maxTotal: 254 } # the project's REAL limits from spec
|
|
45
|
-
errorMap: { M13: E1042, M02: E1001 } # catalog placeholder code → project's real code
|
|
46
|
-
- name: password
|
|
47
|
-
type: password
|
|
48
|
-
constraints: { minLength: 8, maxLength: 32 }
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
**Catalog field-types** (P1): `email` · `password` · `phone` · `string` · `number-integer` ·
|
|
52
|
-
`number-float` · `currency` · `postcode` · `katakana` (JP). Security payload banks auto-append to a
|
|
53
|
-
field's invalid group via the type's `uses_security` (`sqli`, `xss`, `idor`, `broken-auth`, `upload`,
|
|
54
|
-
`input-validation`).
|
|
55
|
-
|
|
56
|
-
Rules:
|
|
57
|
-
- Pick the closest `type`; put the project's real numbers in `constraints` (they override the
|
|
58
|
-
catalog defaults).
|
|
59
|
-
- Map every `errorRef` placeholder (`M13`, `M39`, …) to the spec's real code via `errorMap`. Leave
|
|
60
|
-
one unmapped **only** if the spec has none — the lint flags it as an open point to confirm.
|
|
61
|
-
|
|
62
|
-
## No input fields → nothing to generate
|
|
63
|
-
|
|
64
|
-
Data Factory standardizes **field-level input data**. If a unit has no user-input fields or
|
|
65
|
-
parameters — a pure navigation, listing, or capture-compare flow — there is nothing to generate.
|
|
66
|
-
Report *"no input fields → nothing to generate"* and skip it; do **not** write an empty field-map.
|
|
67
|
-
Those scenarios are covered by the data create-test already produced, not by field-level test data.
|
|
68
|
-
(This is a correct outcome, not a gap — don't force a field-map to make the unit "processed".)
|
|
69
|
-
|
|
70
|
-
## Blind spots — ask, never fabricate
|
|
71
|
-
|
|
72
|
-
If a field's type is **not** in the catalog — a business enum, a cross-entity constraint, a
|
|
73
|
-
project-specific data model — do **not** guess. Ask the QA (via `AskUserQuestion`) for: (1) the valid
|
|
74
|
-
set, (2) invalid / non-existent values, (3) the error code when wrong, (4) dependencies on other
|
|
75
|
-
fields. Record it in `qa/data-factory/project/<entity>.yaml` so it becomes reusable project catalog.
|
|
76
|
-
This is the core discipline: *common is never enough; when blind, think and ask — don't invent.*
|
|
77
|
-
|
|
78
|
-
## Customizing the catalog — `.overwrite` (survives `sungen update`)
|
|
79
|
-
|
|
80
|
-
The shipped `common/` is a floor. Project rules go in `qa/data-factory/common.overwrite.yaml`,
|
|
81
|
-
deep-merged over the common (**later-wins**, keyed by `type` + data-point `id`): same `id` replaces,
|
|
82
|
-
new `id` appends, `constraints` merge key-by-key. `sungen update` refreshes `common/` but never
|
|
83
|
-
touches your overlay. If an update makes an overlay entry stale (references a bank/constraint that no
|
|
84
|
-
longer exists), the loader **warns you to prune it** — it never edits your file. Prefer a targeted
|
|
85
|
-
`errorMap`/`constraints` in the field-map for per-screen tweaks; use `.overwrite` only for rules that
|
|
86
|
-
apply project-wide.
|
|
87
|
-
|
|
88
|
-
## Verify before done — the phuong-phap §6 checklist
|
|
89
|
-
|
|
90
|
-
Run `sungen data lint` and clear it: every required field has **≥1 valid**, **boundary present**
|
|
91
|
-
(exact min/max, not only over-boundary) for bounded types, **≥1 invalid per rule** (not one generic
|
|
92
|
-
"wrong" value for many rules), no `UNRESOLVED` values, error codes mapped or explicitly left open.
|
|
93
|
-
Then `sungen data gen` writes the standardized `test-data/<name>.yaml`. Do not hand-edit the
|
|
94
|
-
generated values — change the field-map or `.overwrite` and re-run (determinism: same input → same
|
|
95
|
-
data).
|
|
96
|
-
|
|
97
|
-
## Weaving into scenarios
|
|
98
|
-
|
|
99
|
-
When a `.feature` exists, express invalid/boundary sets as data-driven `Scenario Outline` + `Examples`
|
|
100
|
-
(`@cases`) referencing the values — see `sungen-gherkin-syntax`. This keeps one logic + many values
|
|
101
|
-
instead of copy-pasted scenarios, and each row carries its `CHK-*` id for traceability.
|