@sun-asterisk/sungen 2.6.15 → 2.7.0-beta.1

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 (90) hide show
  1. package/dist/cli/index.js +3 -1
  2. package/dist/cli/index.js.map +1 -1
  3. package/dist/exporters/feature-parser.d.ts +9 -2
  4. package/dist/exporters/feature-parser.d.ts.map +1 -1
  5. package/dist/exporters/feature-parser.js +12 -4
  6. package/dist/exporters/feature-parser.js.map +1 -1
  7. package/dist/orchestrator/ai-rules-updater.d.ts.map +1 -1
  8. package/dist/orchestrator/ai-rules-updater.js +10 -0
  9. package/dist/orchestrator/ai-rules-updater.js.map +1 -1
  10. package/dist/orchestrator/project-initializer.d.ts +5 -0
  11. package/dist/orchestrator/project-initializer.d.ts.map +1 -1
  12. package/dist/orchestrator/project-initializer.js +16 -0
  13. package/dist/orchestrator/project-initializer.js.map +1 -1
  14. package/dist/orchestrator/templates/ai-instructions/claude-cmd-create-test.md +9 -1
  15. package/dist/orchestrator/templates/ai-instructions/claude-cmd-review.md +13 -12
  16. package/dist/orchestrator/templates/ai-instructions/claude-cmd-run-test.md +4 -2
  17. package/dist/orchestrator/templates/ai-instructions/claude-config.md +1 -1
  18. package/dist/orchestrator/templates/ai-instructions/claude-skill-delivery.md +1 -1
  19. package/dist/orchestrator/templates/ai-instructions/claude-skill-gherkin-syntax.md +14 -0
  20. package/dist/orchestrator/templates/ai-instructions/claude-skill-selector-fix.md +57 -11
  21. package/dist/orchestrator/templates/ai-instructions/claude-skill-selector-keys.md +41 -31
  22. package/dist/orchestrator/templates/ai-instructions/claude-skill-tc-generation.md +386 -326
  23. package/dist/orchestrator/templates/ai-instructions/claude-skill-tc-review.md +268 -90
  24. package/dist/orchestrator/templates/ai-instructions/claude-skill-test-design-techniques.md +23 -49
  25. package/dist/orchestrator/templates/ai-instructions/claude-skill-viewpoint-group-a-data-entry.md +203 -0
  26. package/dist/orchestrator/templates/ai-instructions/claude-skill-viewpoint-group-b-data-ops.md +179 -0
  27. package/dist/orchestrator/templates/ai-instructions/claude-skill-viewpoint-group-c-data-explore.md +233 -0
  28. package/dist/orchestrator/templates/ai-instructions/claude-skill-viewpoint-group-d-display.md +226 -0
  29. package/dist/orchestrator/templates/ai-instructions/claude-skill-viewpoint-group-e-identity.md +177 -0
  30. package/dist/orchestrator/templates/ai-instructions/claude-skill-viewpoint.md +69 -240
  31. package/dist/orchestrator/templates/ai-instructions/copilot-cmd-create-test.md +9 -1
  32. package/dist/orchestrator/templates/ai-instructions/copilot-cmd-review.md +13 -12
  33. package/dist/orchestrator/templates/ai-instructions/copilot-cmd-run-test.md +4 -2
  34. package/dist/orchestrator/templates/ai-instructions/copilot-config.md +1 -1
  35. package/dist/orchestrator/templates/ai-instructions/github-skill-sungen-delivery.md +1 -1
  36. package/dist/orchestrator/templates/ai-instructions/github-skill-sungen-gherkin-syntax.md +15 -21
  37. package/dist/orchestrator/templates/ai-instructions/github-skill-sungen-selector-fix.md +61 -15
  38. package/dist/orchestrator/templates/ai-instructions/github-skill-sungen-selector-keys.md +41 -31
  39. package/dist/orchestrator/templates/ai-instructions/github-skill-sungen-tc-generation.md +371 -324
  40. package/dist/orchestrator/templates/ai-instructions/github-skill-sungen-tc-review.md +262 -102
  41. package/dist/orchestrator/templates/ai-instructions/github-skill-sungen-test-design-techniques.md +23 -49
  42. package/dist/orchestrator/templates/ai-instructions/github-skill-sungen-viewpoint-group-a-data-entry.md +203 -0
  43. package/dist/orchestrator/templates/ai-instructions/github-skill-sungen-viewpoint-group-b-data-ops.md +179 -0
  44. package/dist/orchestrator/templates/ai-instructions/github-skill-sungen-viewpoint-group-c-data-explore.md +233 -0
  45. package/dist/orchestrator/templates/ai-instructions/github-skill-sungen-viewpoint-group-d-display.md +226 -0
  46. package/dist/orchestrator/templates/ai-instructions/github-skill-sungen-viewpoint-group-e-identity.md +177 -0
  47. package/dist/orchestrator/templates/ai-instructions/github-skill-sungen-viewpoint.md +69 -240
  48. package/dist/orchestrator/templates/qa-context.md +90 -0
  49. package/dist/orchestrator/templates/readme.md +16 -13
  50. package/package.json +9 -1
  51. package/src/cli/index.ts +4 -1
  52. package/src/exporters/feature-parser.ts +12 -4
  53. package/src/orchestrator/ai-rules-updater.ts +10 -0
  54. package/src/orchestrator/project-initializer.ts +20 -0
  55. package/src/orchestrator/templates/ai-instructions/claude-cmd-create-test.md +9 -1
  56. package/src/orchestrator/templates/ai-instructions/claude-cmd-review.md +13 -12
  57. package/src/orchestrator/templates/ai-instructions/claude-cmd-run-test.md +4 -2
  58. package/src/orchestrator/templates/ai-instructions/claude-config.md +1 -1
  59. package/src/orchestrator/templates/ai-instructions/claude-skill-delivery.md +1 -1
  60. package/src/orchestrator/templates/ai-instructions/claude-skill-gherkin-syntax.md +14 -0
  61. package/src/orchestrator/templates/ai-instructions/claude-skill-selector-fix.md +57 -11
  62. package/src/orchestrator/templates/ai-instructions/claude-skill-selector-keys.md +41 -31
  63. package/src/orchestrator/templates/ai-instructions/claude-skill-tc-generation.md +386 -326
  64. package/src/orchestrator/templates/ai-instructions/claude-skill-tc-review.md +268 -90
  65. package/src/orchestrator/templates/ai-instructions/claude-skill-test-design-techniques.md +23 -49
  66. package/src/orchestrator/templates/ai-instructions/claude-skill-viewpoint-group-a-data-entry.md +203 -0
  67. package/src/orchestrator/templates/ai-instructions/claude-skill-viewpoint-group-b-data-ops.md +179 -0
  68. package/src/orchestrator/templates/ai-instructions/claude-skill-viewpoint-group-c-data-explore.md +233 -0
  69. package/src/orchestrator/templates/ai-instructions/claude-skill-viewpoint-group-d-display.md +226 -0
  70. package/src/orchestrator/templates/ai-instructions/claude-skill-viewpoint-group-e-identity.md +177 -0
  71. package/src/orchestrator/templates/ai-instructions/claude-skill-viewpoint.md +69 -240
  72. package/src/orchestrator/templates/ai-instructions/copilot-cmd-create-test.md +9 -1
  73. package/src/orchestrator/templates/ai-instructions/copilot-cmd-review.md +13 -12
  74. package/src/orchestrator/templates/ai-instructions/copilot-cmd-run-test.md +4 -2
  75. package/src/orchestrator/templates/ai-instructions/copilot-config.md +1 -1
  76. package/src/orchestrator/templates/ai-instructions/github-skill-sungen-delivery.md +1 -1
  77. package/src/orchestrator/templates/ai-instructions/github-skill-sungen-gherkin-syntax.md +15 -21
  78. package/src/orchestrator/templates/ai-instructions/github-skill-sungen-selector-fix.md +61 -15
  79. package/src/orchestrator/templates/ai-instructions/github-skill-sungen-selector-keys.md +41 -31
  80. package/src/orchestrator/templates/ai-instructions/github-skill-sungen-tc-generation.md +371 -324
  81. package/src/orchestrator/templates/ai-instructions/github-skill-sungen-tc-review.md +262 -102
  82. package/src/orchestrator/templates/ai-instructions/github-skill-sungen-test-design-techniques.md +23 -49
  83. package/src/orchestrator/templates/ai-instructions/github-skill-sungen-viewpoint-group-a-data-entry.md +203 -0
  84. package/src/orchestrator/templates/ai-instructions/github-skill-sungen-viewpoint-group-b-data-ops.md +179 -0
  85. package/src/orchestrator/templates/ai-instructions/github-skill-sungen-viewpoint-group-c-data-explore.md +233 -0
  86. package/src/orchestrator/templates/ai-instructions/github-skill-sungen-viewpoint-group-d-display.md +226 -0
  87. package/src/orchestrator/templates/ai-instructions/github-skill-sungen-viewpoint-group-e-identity.md +177 -0
  88. package/src/orchestrator/templates/ai-instructions/github-skill-sungen-viewpoint.md +69 -240
  89. package/src/orchestrator/templates/qa-context.md +90 -0
  90. package/src/orchestrator/templates/readme.md +16 -13
@@ -166,37 +166,47 @@ Resolver searches in this order:
166
166
 
167
167
  If no YAML key exists, the resolver infers from the Gherkin element type:
168
168
 
169
- | Gherkin | Inferred locator |
170
- |---|---|
171
- | `[X] button` | `getByRole('button', { name: 'X' })` |
172
- | `[X] link` | `getByRole('link', { name: 'X' })` |
173
- | `[X] heading` / `header` | `getByRole('heading', { name: 'X' })` |
174
- | `[X] checkbox` | `getByRole('checkbox', { name: 'X' })` |
175
- | `[X] radio` | `getByRole('radio', { name: 'X' })` |
176
- | `[X] field` | `getByPlaceholder('X')` |
177
- | `[X] text` / `message` / `label` | `getByText('X')` |
178
- | `[X] logo/image/icon` | `getByRole('img', { name: 'X' })` |
179
- | `[X] search` | `getByRole('searchbox', { name: 'X' })` |
180
- | `[X] option` | `getByRole('option', { name: 'X' })` |
181
- | `[X] slider` | `getByRole('slider', { name: 'X' })` |
182
- | `[X] toggle` | `getByRole('switch', { name: 'X' })` |
183
- | `[X] tab` | `getByRole('tab', { name: 'X' })` |
184
- | `[X] table` | `getByRole('table', { name: 'X' })` |
185
- | `[X] list` | `getByRole('list', { name: 'X' })` |
186
- | `[X] column` | `getByRole('columnheader', { name: 'X' })` |
187
- | `[X] dialog` / `modal` / `drawer` | `getByRole('dialog', { name: 'X' })` |
188
- | `[X] dropdown` / `select` | `getByRole('combobox', { name: 'X' })` |
189
- | `[X] menuitem` | `getByRole('menuitem', { name: 'X' })` |
190
- | `[X] progressbar` | `getByRole('progressbar', { name: 'X' })` |
191
- | `[X] section` | `getByRole('region', { name: 'X' })` |
192
- | `[X] card` | `getByRole('article', { name: 'X' })` |
193
- | `[X] item` | `getByRole('listitem', { name: 'X' })` |
194
- | `[X] cell` | `getByRole('cell', { name: 'X' })` |
195
- | `[X] spinner` | `getByRole('status', { name: 'X' })` |
196
- | `[X] breadcrumb` | `getByRole('navigation', { name: 'X' })` |
197
- | `[X] badge` / `tooltip` / `tag` | `getByText('X')` |
198
-
199
- **Only add a YAML entry when** the auto-inferred locator won't work (wrong name, need testid, need nth, etc.).
169
+ > ⚠️ **Auto-infer pitfall the #1 cause of selector failures in production.**
170
+ >
171
+ > `[X] button` auto-infers as `getByRole('button', { name: 'X' })`. This **only works** when the button's accessible name in the DOM is **exactly `X`** — same language, same text, same casing.
172
+ >
173
+ > The Gherkin `[Reference]` is your human label for the element, **not** the DOM name. If the app is in Vietnamese (or any language where the Gherkin label differs from DOM text), auto-infer will produce `No element found` at runtime. **Write an explicit YAML entry** with the real DOM name instead.
174
+ >
175
+ > **Decision rule**: auto-infer is safe ONLY when you have confirmed in the snapshot that the DOM element's accessible name / placeholder text is literally `X`. When in doubt → write YAML.
176
+
177
+ | Gherkin | Inferred locator | Safe when… |
178
+ |---|---|---|
179
+ | `[X] button` | `getByRole('button', { name: 'X' })` | Button's accessible name = X |
180
+ | `[X] link` | `getByRole('link', { name: 'X' })` | Link text = X |
181
+ | `[X] heading` / `header` | `getByRole('heading', { name: 'X' })` | Heading text = X |
182
+ | `[X] checkbox` | `getByRole('checkbox', { name: 'X' })` | Checkbox label = X |
183
+ | `[X] radio` | `getByRole('radio', { name: 'X' })` | Radio label = X |
184
+ | `[X] field` | `getByPlaceholder('X')` | Placeholder text = X AND field has a placeholder |
185
+ | `[X] text` / `message` / `label` | `getByText('X')` | Visible text = X (partial match) |
186
+ | `[X] logo/image/icon` | `getByRole('img', { name: 'X' })` | Image alt = X |
187
+ | `[X] search` | `getByRole('searchbox', { name: 'X' })` | Searchbox label = X |
188
+ | `[X] option` | `getByRole('option', { name: 'X' })` | Option text = X |
189
+ | `[X] slider` | `getByRole('slider', { name: 'X' })` | Slider label = X |
190
+ | `[X] toggle` | `getByRole('switch', { name: 'X' })` | Toggle label = X |
191
+ | `[X] tab` | `getByRole('tab', { name: 'X' })` | Tab text = X |
192
+ | `[X] table` | `getByRole('table', { name: 'X' })` | Table aria-label = X |
193
+ | `[X] list` | `getByRole('list', { name: 'X' })` | List aria-label = X |
194
+ | `[X] column` | `getByRole('columnheader', { name: 'X' })` | Column header text = X |
195
+ | `[X] dialog` / `modal` / `drawer` | `getByRole('dialog', { name: 'X' })` | Dialog aria-label/heading = X |
196
+ | `[X] dropdown` / `select` | `getByRole('combobox', { name: 'X' })` | Combobox label = X |
197
+ | `[X] menuitem` | `getByRole('menuitem', { name: 'X' })` | Menu item text = X |
198
+ | `[X] progressbar` | `getByRole('progressbar', { name: 'X' })` | Progressbar label = X |
199
+ | `[X] section` | `getByRole('region', { name: 'X' })` | Section aria-label = X |
200
+ | `[X] card` | `getByRole('article', { name: 'X' })` | Card aria-label = X |
201
+ | `[X] item` | `getByRole('listitem', { name: 'X' })` | List item text = X |
202
+ | `[X] cell` | `getByRole('cell', { name: 'X' })` | Cell text = X |
203
+ | `[X] spinner` | `getByRole('status', { name: 'X' })` | Spinner aria-label = X |
204
+ | `[X] breadcrumb` | `getByRole('navigation', { name: 'X' })` | Navigation aria-label = X |
205
+ | `[X] badge` / `tooltip` / `tag` | `getByText('X')` | Visible text = X |
206
+
207
+ **Special note on `[X] field`**: `getByPlaceholder('X')` only works when (1) the field has a placeholder attribute AND (2) the placeholder text equals X. For fields without placeholders (floating labels, aria-label), write explicit YAML: `type: label, value: "Actual label text"`.
208
+
209
+ **Only add a YAML entry when** auto-infer cannot work: DOM name differs from Gherkin label, need `testid`, need `nth`, need `exact: true`, or the field type requires explicit config.
200
210
 
201
211
  ### Types requiring YAML entry (no auto-infer)
202
212