@athenaflow/plugin-e2e-test-builder 2.0.9

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 (190) hide show
  1. package/.claude-plugin/plugin.json +20 -0
  2. package/.codex-plugin/plugin.json +15 -0
  3. package/dist/2.0.8/.agents/plugins/marketplace.json +14 -0
  4. package/dist/2.0.8/claude/plugin/.claude-plugin/plugin.json +20 -0
  5. package/dist/2.0.8/claude/plugin/package.json +9 -0
  6. package/dist/2.0.8/claude/plugin/skills/add-e2e-tests/SKILL.md +217 -0
  7. package/dist/2.0.8/claude/plugin/skills/add-e2e-tests/agents/claude.yaml +1 -0
  8. package/dist/2.0.8/claude/plugin/skills/add-e2e-tests/agents/openai.yaml +10 -0
  9. package/dist/2.0.8/claude/plugin/skills/add-e2e-tests/references/authentication.md +8 -0
  10. package/dist/2.0.8/claude/plugin/skills/add-e2e-tests/references/error-recovery.md +43 -0
  11. package/dist/2.0.8/claude/plugin/skills/add-e2e-tests/references/scaffolding.md +12 -0
  12. package/dist/2.0.8/claude/plugin/skills/add-e2e-tests/references/tracker-template.md +53 -0
  13. package/dist/2.0.8/claude/plugin/skills/analyze-test-codebase/SKILL.md +142 -0
  14. package/dist/2.0.8/claude/plugin/skills/analyze-test-codebase/agents/claude.yaml +3 -0
  15. package/dist/2.0.8/claude/plugin/skills/analyze-test-codebase/agents/openai.yaml +4 -0
  16. package/dist/2.0.8/claude/plugin/skills/fix-flaky-tests/SKILL.md +160 -0
  17. package/dist/2.0.8/claude/plugin/skills/fix-flaky-tests/agents/claude.yaml +3 -0
  18. package/dist/2.0.8/claude/plugin/skills/fix-flaky-tests/agents/openai.yaml +10 -0
  19. package/dist/2.0.8/claude/plugin/skills/fix-flaky-tests/references/fix-patterns.md +91 -0
  20. package/dist/2.0.8/claude/plugin/skills/generate-test-cases/SKILL.md +184 -0
  21. package/dist/2.0.8/claude/plugin/skills/generate-test-cases/agents/claude.yaml +3 -0
  22. package/dist/2.0.8/claude/plugin/skills/generate-test-cases/agents/openai.yaml +10 -0
  23. package/dist/2.0.8/claude/plugin/skills/generate-test-cases/references/scenario-categories.md +36 -0
  24. package/dist/2.0.8/claude/plugin/skills/plan-test-coverage/SKILL.md +116 -0
  25. package/dist/2.0.8/claude/plugin/skills/plan-test-coverage/agents/claude.yaml +3 -0
  26. package/dist/2.0.8/claude/plugin/skills/plan-test-coverage/agents/openai.yaml +10 -0
  27. package/dist/2.0.8/claude/plugin/skills/review-test-cases/SKILL.md +147 -0
  28. package/dist/2.0.8/claude/plugin/skills/review-test-cases/agents/claude.yaml +3 -0
  29. package/dist/2.0.8/claude/plugin/skills/review-test-cases/agents/openai.yaml +10 -0
  30. package/dist/2.0.8/claude/plugin/skills/review-test-code/SKILL.md +189 -0
  31. package/dist/2.0.8/claude/plugin/skills/review-test-code/agents/claude.yaml +3 -0
  32. package/dist/2.0.8/claude/plugin/skills/review-test-code/agents/openai.yaml +10 -0
  33. package/dist/2.0.8/claude/plugin/skills/write-test-code/SKILL.md +227 -0
  34. package/dist/2.0.8/claude/plugin/skills/write-test-code/agents/claude.yaml +3 -0
  35. package/dist/2.0.8/claude/plugin/skills/write-test-code/agents/openai.yaml +10 -0
  36. package/dist/2.0.8/claude/plugin/skills/write-test-code/references/anti-patterns.md +88 -0
  37. package/dist/2.0.8/claude/plugin/skills/write-test-code/references/api-setup-teardown.md +83 -0
  38. package/dist/2.0.8/claude/plugin/skills/write-test-code/references/auth-patterns.md +63 -0
  39. package/dist/2.0.8/claude/plugin/skills/write-test-code/references/mapping-tables.md +56 -0
  40. package/dist/2.0.8/claude/plugin/skills/write-test-code/references/network-interception.md +56 -0
  41. package/dist/2.0.8/codex/plugin/.codex-plugin/plugin.json +15 -0
  42. package/dist/2.0.8/codex/plugin/package.json +9 -0
  43. package/dist/2.0.8/codex/plugin/skills/add-e2e-tests/SKILL.md +217 -0
  44. package/dist/2.0.8/codex/plugin/skills/add-e2e-tests/agents/claude.yaml +1 -0
  45. package/dist/2.0.8/codex/plugin/skills/add-e2e-tests/agents/openai.yaml +10 -0
  46. package/dist/2.0.8/codex/plugin/skills/add-e2e-tests/references/authentication.md +8 -0
  47. package/dist/2.0.8/codex/plugin/skills/add-e2e-tests/references/error-recovery.md +43 -0
  48. package/dist/2.0.8/codex/plugin/skills/add-e2e-tests/references/scaffolding.md +12 -0
  49. package/dist/2.0.8/codex/plugin/skills/add-e2e-tests/references/tracker-template.md +53 -0
  50. package/dist/2.0.8/codex/plugin/skills/analyze-test-codebase/SKILL.md +142 -0
  51. package/dist/2.0.8/codex/plugin/skills/analyze-test-codebase/agents/claude.yaml +3 -0
  52. package/dist/2.0.8/codex/plugin/skills/analyze-test-codebase/agents/openai.yaml +4 -0
  53. package/dist/2.0.8/codex/plugin/skills/fix-flaky-tests/SKILL.md +160 -0
  54. package/dist/2.0.8/codex/plugin/skills/fix-flaky-tests/agents/claude.yaml +3 -0
  55. package/dist/2.0.8/codex/plugin/skills/fix-flaky-tests/agents/openai.yaml +10 -0
  56. package/dist/2.0.8/codex/plugin/skills/fix-flaky-tests/references/fix-patterns.md +91 -0
  57. package/dist/2.0.8/codex/plugin/skills/generate-test-cases/SKILL.md +184 -0
  58. package/dist/2.0.8/codex/plugin/skills/generate-test-cases/agents/claude.yaml +3 -0
  59. package/dist/2.0.8/codex/plugin/skills/generate-test-cases/agents/openai.yaml +10 -0
  60. package/dist/2.0.8/codex/plugin/skills/generate-test-cases/references/scenario-categories.md +36 -0
  61. package/dist/2.0.8/codex/plugin/skills/plan-test-coverage/SKILL.md +116 -0
  62. package/dist/2.0.8/codex/plugin/skills/plan-test-coverage/agents/claude.yaml +3 -0
  63. package/dist/2.0.8/codex/plugin/skills/plan-test-coverage/agents/openai.yaml +10 -0
  64. package/dist/2.0.8/codex/plugin/skills/review-test-cases/SKILL.md +147 -0
  65. package/dist/2.0.8/codex/plugin/skills/review-test-cases/agents/claude.yaml +3 -0
  66. package/dist/2.0.8/codex/plugin/skills/review-test-cases/agents/openai.yaml +10 -0
  67. package/dist/2.0.8/codex/plugin/skills/review-test-code/SKILL.md +189 -0
  68. package/dist/2.0.8/codex/plugin/skills/review-test-code/agents/claude.yaml +3 -0
  69. package/dist/2.0.8/codex/plugin/skills/review-test-code/agents/openai.yaml +10 -0
  70. package/dist/2.0.8/codex/plugin/skills/write-test-code/SKILL.md +227 -0
  71. package/dist/2.0.8/codex/plugin/skills/write-test-code/agents/claude.yaml +3 -0
  72. package/dist/2.0.8/codex/plugin/skills/write-test-code/agents/openai.yaml +10 -0
  73. package/dist/2.0.8/codex/plugin/skills/write-test-code/references/anti-patterns.md +88 -0
  74. package/dist/2.0.8/codex/plugin/skills/write-test-code/references/api-setup-teardown.md +83 -0
  75. package/dist/2.0.8/codex/plugin/skills/write-test-code/references/auth-patterns.md +63 -0
  76. package/dist/2.0.8/codex/plugin/skills/write-test-code/references/mapping-tables.md +56 -0
  77. package/dist/2.0.8/codex/plugin/skills/write-test-code/references/network-interception.md +56 -0
  78. package/dist/2.0.8/release.json +18 -0
  79. package/dist/2.0.9/.agents/plugins/marketplace.json +14 -0
  80. package/dist/2.0.9/claude/plugin/.claude-plugin/plugin.json +20 -0
  81. package/dist/2.0.9/claude/plugin/package.json +9 -0
  82. package/dist/2.0.9/claude/plugin/skills/add-e2e-tests/SKILL.md +215 -0
  83. package/dist/2.0.9/claude/plugin/skills/add-e2e-tests/agents/claude.yaml +3 -0
  84. package/dist/2.0.9/claude/plugin/skills/add-e2e-tests/agents/openai.yaml +10 -0
  85. package/dist/2.0.9/claude/plugin/skills/add-e2e-tests/references/authentication.md +8 -0
  86. package/dist/2.0.9/claude/plugin/skills/add-e2e-tests/references/error-recovery.md +43 -0
  87. package/dist/2.0.9/claude/plugin/skills/add-e2e-tests/references/scaffolding.md +12 -0
  88. package/dist/2.0.9/claude/plugin/skills/add-e2e-tests/references/tracker-template.md +53 -0
  89. package/dist/2.0.9/claude/plugin/skills/analyze-test-codebase/SKILL.md +142 -0
  90. package/dist/2.0.9/claude/plugin/skills/analyze-test-codebase/agents/claude.yaml +3 -0
  91. package/dist/2.0.9/claude/plugin/skills/analyze-test-codebase/agents/openai.yaml +4 -0
  92. package/dist/2.0.9/claude/plugin/skills/fix-flaky-tests/SKILL.md +160 -0
  93. package/dist/2.0.9/claude/plugin/skills/fix-flaky-tests/agents/claude.yaml +3 -0
  94. package/dist/2.0.9/claude/plugin/skills/fix-flaky-tests/agents/openai.yaml +10 -0
  95. package/dist/2.0.9/claude/plugin/skills/fix-flaky-tests/references/fix-patterns.md +91 -0
  96. package/dist/2.0.9/claude/plugin/skills/generate-test-cases/SKILL.md +184 -0
  97. package/dist/2.0.9/claude/plugin/skills/generate-test-cases/agents/claude.yaml +3 -0
  98. package/dist/2.0.9/claude/plugin/skills/generate-test-cases/agents/openai.yaml +10 -0
  99. package/dist/2.0.9/claude/plugin/skills/generate-test-cases/references/scenario-categories.md +36 -0
  100. package/dist/2.0.9/claude/plugin/skills/plan-test-coverage/SKILL.md +117 -0
  101. package/dist/2.0.9/claude/plugin/skills/plan-test-coverage/agents/claude.yaml +3 -0
  102. package/dist/2.0.9/claude/plugin/skills/plan-test-coverage/agents/openai.yaml +10 -0
  103. package/dist/2.0.9/claude/plugin/skills/review-test-cases/SKILL.md +147 -0
  104. package/dist/2.0.9/claude/plugin/skills/review-test-cases/agents/claude.yaml +3 -0
  105. package/dist/2.0.9/claude/plugin/skills/review-test-cases/agents/openai.yaml +10 -0
  106. package/dist/2.0.9/claude/plugin/skills/review-test-code/SKILL.md +189 -0
  107. package/dist/2.0.9/claude/plugin/skills/review-test-code/agents/claude.yaml +3 -0
  108. package/dist/2.0.9/claude/plugin/skills/review-test-code/agents/openai.yaml +10 -0
  109. package/dist/2.0.9/claude/plugin/skills/write-test-code/SKILL.md +227 -0
  110. package/dist/2.0.9/claude/plugin/skills/write-test-code/agents/claude.yaml +3 -0
  111. package/dist/2.0.9/claude/plugin/skills/write-test-code/agents/openai.yaml +10 -0
  112. package/dist/2.0.9/claude/plugin/skills/write-test-code/references/anti-patterns.md +88 -0
  113. package/dist/2.0.9/claude/plugin/skills/write-test-code/references/api-setup-teardown.md +83 -0
  114. package/dist/2.0.9/claude/plugin/skills/write-test-code/references/auth-patterns.md +63 -0
  115. package/dist/2.0.9/claude/plugin/skills/write-test-code/references/mapping-tables.md +56 -0
  116. package/dist/2.0.9/claude/plugin/skills/write-test-code/references/network-interception.md +56 -0
  117. package/dist/2.0.9/codex/plugin/.codex-plugin/plugin.json +15 -0
  118. package/dist/2.0.9/codex/plugin/package.json +9 -0
  119. package/dist/2.0.9/codex/plugin/skills/add-e2e-tests/SKILL.md +215 -0
  120. package/dist/2.0.9/codex/plugin/skills/add-e2e-tests/agents/claude.yaml +3 -0
  121. package/dist/2.0.9/codex/plugin/skills/add-e2e-tests/agents/openai.yaml +10 -0
  122. package/dist/2.0.9/codex/plugin/skills/add-e2e-tests/references/authentication.md +8 -0
  123. package/dist/2.0.9/codex/plugin/skills/add-e2e-tests/references/error-recovery.md +43 -0
  124. package/dist/2.0.9/codex/plugin/skills/add-e2e-tests/references/scaffolding.md +12 -0
  125. package/dist/2.0.9/codex/plugin/skills/add-e2e-tests/references/tracker-template.md +53 -0
  126. package/dist/2.0.9/codex/plugin/skills/analyze-test-codebase/SKILL.md +142 -0
  127. package/dist/2.0.9/codex/plugin/skills/analyze-test-codebase/agents/claude.yaml +3 -0
  128. package/dist/2.0.9/codex/plugin/skills/analyze-test-codebase/agents/openai.yaml +4 -0
  129. package/dist/2.0.9/codex/plugin/skills/fix-flaky-tests/SKILL.md +160 -0
  130. package/dist/2.0.9/codex/plugin/skills/fix-flaky-tests/agents/claude.yaml +3 -0
  131. package/dist/2.0.9/codex/plugin/skills/fix-flaky-tests/agents/openai.yaml +10 -0
  132. package/dist/2.0.9/codex/plugin/skills/fix-flaky-tests/references/fix-patterns.md +91 -0
  133. package/dist/2.0.9/codex/plugin/skills/generate-test-cases/SKILL.md +184 -0
  134. package/dist/2.0.9/codex/plugin/skills/generate-test-cases/agents/claude.yaml +3 -0
  135. package/dist/2.0.9/codex/plugin/skills/generate-test-cases/agents/openai.yaml +10 -0
  136. package/dist/2.0.9/codex/plugin/skills/generate-test-cases/references/scenario-categories.md +36 -0
  137. package/dist/2.0.9/codex/plugin/skills/plan-test-coverage/SKILL.md +117 -0
  138. package/dist/2.0.9/codex/plugin/skills/plan-test-coverage/agents/claude.yaml +3 -0
  139. package/dist/2.0.9/codex/plugin/skills/plan-test-coverage/agents/openai.yaml +10 -0
  140. package/dist/2.0.9/codex/plugin/skills/review-test-cases/SKILL.md +147 -0
  141. package/dist/2.0.9/codex/plugin/skills/review-test-cases/agents/claude.yaml +3 -0
  142. package/dist/2.0.9/codex/plugin/skills/review-test-cases/agents/openai.yaml +10 -0
  143. package/dist/2.0.9/codex/plugin/skills/review-test-code/SKILL.md +189 -0
  144. package/dist/2.0.9/codex/plugin/skills/review-test-code/agents/claude.yaml +3 -0
  145. package/dist/2.0.9/codex/plugin/skills/review-test-code/agents/openai.yaml +10 -0
  146. package/dist/2.0.9/codex/plugin/skills/write-test-code/SKILL.md +227 -0
  147. package/dist/2.0.9/codex/plugin/skills/write-test-code/agents/claude.yaml +3 -0
  148. package/dist/2.0.9/codex/plugin/skills/write-test-code/agents/openai.yaml +10 -0
  149. package/dist/2.0.9/codex/plugin/skills/write-test-code/references/anti-patterns.md +88 -0
  150. package/dist/2.0.9/codex/plugin/skills/write-test-code/references/api-setup-teardown.md +83 -0
  151. package/dist/2.0.9/codex/plugin/skills/write-test-code/references/auth-patterns.md +63 -0
  152. package/dist/2.0.9/codex/plugin/skills/write-test-code/references/mapping-tables.md +56 -0
  153. package/dist/2.0.9/codex/plugin/skills/write-test-code/references/network-interception.md +56 -0
  154. package/dist/2.0.9/release.json +18 -0
  155. package/package.json +13 -0
  156. package/skills/add-e2e-tests/SKILL.md +215 -0
  157. package/skills/add-e2e-tests/agents/claude.yaml +3 -0
  158. package/skills/add-e2e-tests/agents/openai.yaml +10 -0
  159. package/skills/add-e2e-tests/references/authentication.md +8 -0
  160. package/skills/add-e2e-tests/references/error-recovery.md +43 -0
  161. package/skills/add-e2e-tests/references/scaffolding.md +12 -0
  162. package/skills/add-e2e-tests/references/tracker-template.md +53 -0
  163. package/skills/analyze-test-codebase/SKILL.md +142 -0
  164. package/skills/analyze-test-codebase/agents/claude.yaml +3 -0
  165. package/skills/analyze-test-codebase/agents/openai.yaml +4 -0
  166. package/skills/fix-flaky-tests/SKILL.md +160 -0
  167. package/skills/fix-flaky-tests/agents/claude.yaml +3 -0
  168. package/skills/fix-flaky-tests/agents/openai.yaml +10 -0
  169. package/skills/fix-flaky-tests/references/fix-patterns.md +91 -0
  170. package/skills/generate-test-cases/SKILL.md +184 -0
  171. package/skills/generate-test-cases/agents/claude.yaml +3 -0
  172. package/skills/generate-test-cases/agents/openai.yaml +10 -0
  173. package/skills/generate-test-cases/references/scenario-categories.md +36 -0
  174. package/skills/plan-test-coverage/SKILL.md +117 -0
  175. package/skills/plan-test-coverage/agents/claude.yaml +3 -0
  176. package/skills/plan-test-coverage/agents/openai.yaml +10 -0
  177. package/skills/review-test-cases/SKILL.md +147 -0
  178. package/skills/review-test-cases/agents/claude.yaml +3 -0
  179. package/skills/review-test-cases/agents/openai.yaml +10 -0
  180. package/skills/review-test-code/SKILL.md +189 -0
  181. package/skills/review-test-code/agents/claude.yaml +3 -0
  182. package/skills/review-test-code/agents/openai.yaml +10 -0
  183. package/skills/write-test-code/SKILL.md +227 -0
  184. package/skills/write-test-code/agents/claude.yaml +3 -0
  185. package/skills/write-test-code/agents/openai.yaml +10 -0
  186. package/skills/write-test-code/references/anti-patterns.md +88 -0
  187. package/skills/write-test-code/references/api-setup-teardown.md +83 -0
  188. package/skills/write-test-code/references/auth-patterns.md +63 -0
  189. package/skills/write-test-code/references/mapping-tables.md +56 -0
  190. package/skills/write-test-code/references/network-interception.md +56 -0
@@ -0,0 +1,147 @@
1
+ ---
2
+ name: review-test-cases
3
+ description: >
4
+ This skill should be used when a quality review of TC-ID test case specifications is needed before writing executable
5
+ test code. It reviews the spec artifact only; it does not implement or rewrite tests.
6
+ Triggers: "review test cases", "check test specs", "review TC-IDs", "audit test coverage",
7
+ "are my test cases good", "validate test specs", "review test-cases/*.md",
8
+ "check for gaps in test cases", "review before writing tests", "quality check test specs".
9
+ Inserted as a quality gate between generate-test-cases and write-test-code — catches
10
+ gaps, duplication, weak assertions, missing error paths, and invented scenarios before they get
11
+ encoded into test code. Review-only — does NOT modify the spec file, does NOT write test code.
12
+ The write-test-code skill should be used for implementation.
13
+ allowed-tools: Read Glob Grep Task
14
+ ---
15
+
16
+ # Review Test Cases
17
+
18
+ Review TC-ID test case specifications for completeness, accuracy, and quality before they are implemented as executable Playwright tests. This is a quality gate — catch problems in the spec, not in the code.
19
+
20
+ ## Input
21
+
22
+ Parse the spec file path from: $ARGUMENTS
23
+
24
+ If no argument provided, search for `test-cases/*.md` files and review the most recently modified one.
25
+
26
+ ## Workflow
27
+
28
+ ### Step 1: Load the Spec and Context
29
+
30
+ 1. Read the test case spec file
31
+ 2. Read any related files for context:
32
+ - `e2e-plan/conventions.md` or `e2e-plan/coverage-plan.md` if they exist
33
+ - `e2e-tracker.md` if it exists (to understand what was explored)
34
+ 3. Extract the target URL from the spec header
35
+
36
+ ### Step 2: Run the Review Checklist
37
+
38
+ Evaluate every test case against each criterion. Track findings by severity:
39
+
40
+ - **BLOCKER** — must fix before writing tests (missing critical paths, invented behavior, wrong URL)
41
+ - **WARNING** — should fix, will cause problems in implementation (vague steps, weak assertions, duplication)
42
+ - **SUGGESTION** — optional improvement (priority adjustment, better categorization, additional edge case)
43
+
44
+ #### 2a. Coverage Completeness
45
+
46
+ | Check | What to Look For |
47
+ |-------|-----------------|
48
+ | Happy path present | At least one Critical-priority test covers the primary success flow end-to-end |
49
+ | Error paths covered (MINIMUM) | Every spec MUST have at least: (1) one server error test (500), (2) one network failure test (timeout/offline), (3) one empty state test. If auth is involved: (4) one session expiry test. Missing any of these is a BLOCKER, not a suggestion |
50
+ | Boundary conditions | Min/max values, empty inputs, special characters, long strings |
51
+ | Authentication edge cases | Session expiry, unauthorized access, role-based differences (if applicable) |
52
+ | Navigation edge cases | Back/forward, direct URL access, refresh mid-flow |
53
+ | Missing user actions | Every interactive element on the page should appear in at least one test case |
54
+
55
+ #### 2b. Specification Quality
56
+
57
+ | Check | What to Look For |
58
+ |-------|-----------------|
59
+ | Steps are concrete | "Click the Submit button" not "submit the form"; "Enter 'test@example.com' in Email field" not "enter email" |
60
+ | Expected results are observable | Specific text, URL change, element state — not "page updates" or "works correctly" |
61
+ | Preconditions are explicit | Auth state, test data, feature flags, starting URL — nothing assumed |
62
+ | TC-IDs are sequential | No gaps, no duplicates, correct feature prefix |
63
+ | Priority is justified | Critical = blocks core journey; not everything is Critical |
64
+ | Categories are accurate | Happy Path vs Validation vs Edge Case — correctly classified |
65
+
66
+ #### 2c. Invented vs Observed
67
+
68
+ This is the most important check. Test cases should trace back to behavior that was actually observed or deliberately triggered during exploration, not assumed.
69
+
70
+ Red flags for invented scenarios:
71
+ - Specific error message text that wasn't observed (e.g., "Please enter a valid email" when the actual message might differ)
72
+ - Assumptions about validation rules without exploration evidence (e.g., "minimum 8 characters" without trying it)
73
+ - Test cases for UI elements that may not exist (e.g., "retry button" on error page without visiting the error page)
74
+ - Server-side behavior assumptions (e.g., "rate limit after 5 attempts" without evidence)
75
+
76
+ When suspicious: delegate a spot-check to a subagent with browser access (Task tool). Pass it the target URL, the specific TC-IDs under suspicion, and the claims to verify (element existence, error message text, validation behavior). The subagent should return structured evidence: what it found, what matched, what differed.
77
+
78
+ #### 2d. Duplication and Overlap
79
+
80
+ - Flag test cases that test the same behavior with trivially different inputs
81
+ - Flag test cases where the steps are identical but expected results differ only cosmetically
82
+ - Merging candidates: cases that could be combined into a single parameterized test without losing coverage
83
+
84
+ #### 2e. Implementability
85
+
86
+ - Flag steps that cannot be automated with Playwright (e.g., "verify email arrives", "check database directly")
87
+ - Flag preconditions that require manual setup with no automation path
88
+ - Flag assertions that require visual comparison without specifying tolerance
89
+ - Flag test cases that depend on third-party services (payment processors, OAuth providers) without a mock strategy
90
+
91
+ ### Step 3: Produce the Review Report
92
+
93
+ Output a structured review with this format:
94
+
95
+ ```markdown
96
+ # Test Case Review: <feature>
97
+
98
+ **Spec file:** <path>
99
+ **Total test cases:** <count>
100
+ **Review date:** <date>
101
+
102
+ ## Verdict: PASS | PASS WITH WARNINGS | NEEDS REVISION
103
+
104
+ ## Blockers (<count>)
105
+ - **TC-<ID>**: <issue description>
106
+
107
+ ## Warnings (<count>)
108
+ - **TC-<ID>**: <issue description>
109
+
110
+ ## Suggestions (<count>)
111
+ - **TC-<ID>**: <issue description>
112
+
113
+ ## Coverage Gaps
114
+ - <Missing scenario that should be added>
115
+
116
+ ## Duplication
117
+ - **TC-<ID>** and **TC-<ID>**: <overlap description>
118
+
119
+ ## Summary
120
+ <2-3 sentences on overall spec quality and what to address before implementation>
121
+ ```
122
+
123
+ ### Step 4: Verdict Rules
124
+
125
+ - **PASS** — no blockers, 2 or fewer warnings. Proceed to write-test-code.
126
+ - **PASS WITH WARNINGS** — no blockers, 3+ warnings. Can proceed but should address warnings.
127
+ - **NEEDS REVISION** — 1+ blockers. Do not proceed to write-test-code until blockers are resolved.
128
+
129
+ Example: 0 blockers + 2 warnings = PASS. 0 blockers + 3 warnings = PASS WITH WARNINGS. 1+ blockers = NEEDS REVISION regardless of warning count.
130
+
131
+ ## Principles
132
+
133
+ - **Review-only** — never modify the spec file; report findings for the author to act on
134
+ - **Evidence over opinion** — cite specific TC-IDs and quote specific steps/assertions when flagging issues
135
+ - **Spot-check against live site** — delegate to a subagent with browser access to verify 2-3 suspicious claims rather than trusting all text at face value
136
+ - **Bounded output** — the review report should be actionable and finite, not an exhaustive rewrite
137
+ - **Severity matters** — distinguish blockers from suggestions; not every imperfection is worth fixing before implementation
138
+
139
+ ## Example Usage
140
+
141
+ ```
142
+ Claude Code: /review-test-cases test-cases/login.md
143
+ Codex: $review-test-cases test-cases/login.md
144
+
145
+ Claude Code: /review-test-cases test-cases/checkout.md
146
+ Codex: $review-test-cases test-cases/checkout.md
147
+ ```
@@ -0,0 +1,3 @@
1
+ frontmatter:
2
+ argument-hint: "<path to test-cases/*.md spec file>"
3
+ user-invocable: true
@@ -0,0 +1,10 @@
1
+ interface:
2
+ display_name: "Review TC-ID Specs"
3
+ short_description: "Review TC-ID specs for gaps, duplication, and weak assertions"
4
+ default_prompt: "Review these TC-ID test case specifications before implementation and flag quality issues."
5
+
6
+ dependencies:
7
+ tools:
8
+ - type: "mcp"
9
+ value: "agent-web-interface"
10
+ description: "Browser automation MCP used to spot-check observed behavior claims against live site"
@@ -0,0 +1,189 @@
1
+ ---
2
+ name: review-test-code
3
+ description: >
4
+ Quality review of Playwright test code before final execution signoff. This skill should be used
5
+ when implementation review of executable Playwright tests is needed, not for diagnosis of runtime flakiness.
6
+ Triggers: "review test code", "review Playwright tests", "check test quality",
7
+ "audit test implementation", "review my tests before merging", "check test code for issues",
8
+ "review e2e tests", "code review Playwright", "are my tests stable",
9
+ "check for brittle selectors", "review before running tests". Quality gate
10
+ after write-test-code — catches brittle selectors, force:true misuse, networkidle overuse, Tailwind
11
+ utility class selectors, exact numeric assertions, missing teardown, parallel-unsafe mutations,
12
+ hardcoded data, missing assertions, test coupling, and convention divergence. Review-only — does NOT
13
+ rewrite tests, does NOT run tests. Use fix-flaky-tests for fixing, write-test-code for rewriting.
14
+ allowed-tools: Read Glob Grep Task
15
+ ---
16
+
17
+ # Review Test Code
18
+
19
+ Review Playwright test code for stability, correctness, and adherence to project conventions before final execution signoff. This is a quality gate — catch structural issues in code before running tests, not after flaky failures.
20
+
21
+ ## Input
22
+
23
+ Parse the test file path or directory from: $ARGUMENTS
24
+
25
+ If no argument provided, search for recently modified `*.spec.ts` or `*.test.ts` files and review those.
26
+
27
+ ## Workflow
28
+
29
+ ### Step 1: Load Context
30
+
31
+ 1. Read the test file(s) to review
32
+ 2. Read project conventions for comparison:
33
+ - `playwright.config.ts` or `playwright.config.js` — extract `baseURL`, `testDir`, projects, timeouts, `fullyParallel`, `workers`
34
+ - 2-3 existing test files (not the ones under review) to establish the project's conventions
35
+ - `e2e-plan/conventions.md` if it exists
36
+ 3. Read the corresponding test case spec (`test-cases/<feature>.md`) if it exists — needed for traceability check
37
+ 4. Note the project's locator strategy, fixture patterns, auth approach, and naming conventions
38
+
39
+ ### Step 2: Run the Review Checklist
40
+
41
+ Evaluate the test code against each criterion. Track findings by severity:
42
+
43
+ - **BLOCKER** — will cause test failures or false passes (missing assertions, wrong selectors, broken isolation)
44
+ - **WARNING** — will cause flakiness or maintenance burden (brittle selectors, arbitrary waits, poor structure)
45
+ - **SUGGESTION** — style or convention improvement (naming, organization, minor readability)
46
+
47
+ #### 2a. Locator Quality
48
+
49
+ | Check | What to Look For |
50
+ |-------|-----------------|
51
+ | Semantic locators preferred | `getByRole`, `getByLabel`, `getByPlaceholder` over CSS selectors |
52
+ | No fragile positional selectors | `.first()`, `.nth()`, `.last()` without documented justification |
53
+ | No dynamic IDs or classes | Selectors containing generated hashes, UUIDs, or auto-incremented values |
54
+ | No utility framework classes | Selectors must not contain Tailwind (`rounded-lg`, `flex`, `bg-*`), Bootstrap (`btn-primary`, `col-md-*`), or similar utility classes — these are styling, not identity |
55
+ | Scoped to containers | Locators narrowed to `main`, `nav`, `[role="dialog"]` where needed |
56
+ | No exact long text matches | Use regex with key words instead of full marketing copy |
57
+
58
+ When a locator appears suspicious, delegate verification to a subagent (Task tool): instruct it to open the target URL, locate the element using the browser MCP tools (`find`, `get_element`), and report back whether the element exists and is unique.
59
+
60
+ #### 2b. Waiting and Timing
61
+
62
+ | Check | What to Look For |
63
+ |-------|-----------------|
64
+ | No `waitForTimeout()` | Arbitrary sleeps mask real timing issues |
65
+ | Proper action-response waits | `waitForResponse` before asserting API-dependent UI |
66
+ | Auto-retrying assertions used | `await expect(el).toBeVisible()` not `expect(await el.isVisible()).toBe(true)` |
67
+ | Reasonable explicit timeouts | Custom timeouts (`{ timeout: 10000 }`) have a comment explaining why |
68
+ | No `networkidle` overuse | `networkidle` is fragile; prefer specific response waits |
69
+
70
+ #### 2c. Assertions
71
+
72
+ | Check | What to Look For |
73
+ |-------|-----------------|
74
+ | Every test has assertions | No test blocks without `expect()` calls |
75
+ | Assertions test user outcomes | Visible text, URL changes, element states — not internal state or CSS classes |
76
+ | Assertions are specific | `toHaveText('Welcome, John')` not just `toBeVisible()` |
77
+ | Error paths have assertions | Error scenario tests verify the error message, not just that "something happened" |
78
+ | No exact server-computed values | Dashboard counters, totals, and aggregates must not assert exact numbers — use patterns, ranges, or seed data first |
79
+ | No `toBeTruthy()` on locators | Use Playwright-specific matchers (`toBeVisible`, `toBeEnabled`, `toHaveText`) |
80
+
81
+ #### 2d. Test Isolation and Structure
82
+
83
+ | Check | What to Look For |
84
+ |-------|-----------------|
85
+ | No shared mutable state | Tests do not depend on execution order or modify shared variables |
86
+ | Proper setup/teardown | `beforeEach`/`afterEach` for shared setup, not duplicated in each test |
87
+ | AAA structure | Clear Arrange → Act → Assert sections (comments optional but structure required) |
88
+ | No test coupling | Test B does not depend on side effects from Test A |
89
+ | Auth handled correctly | `storageState` or fixture, not UI login in every test (unless testing login itself) |
90
+ | Test data is unique | Uses `Date.now()`, factories, or unique IDs — not hardcoded shared data |
91
+ | Parallel-safe (if `fullyParallel: true` or `workers` > 1 found in config) | Tests that create data must not assert on unscoped lists or counts — filter assertions to the specific data created. If parallelism is disabled, note as SUGGESTION rather than WARNING |
92
+ | Data cleanup present | Tests that create persistent records (API POST/PUT) must have corresponding teardown (`afterEach`, fixture cleanup, or `globalTeardown`) |
93
+
94
+ #### 2e. Convention Adherence
95
+
96
+ | Check | What to Look For |
97
+ |-------|-----------------|
98
+ | TC-ID in test title | Every test has `TC-<FEATURE>-<NNN>: Description` format |
99
+ | File naming matches project | Follows existing `*.spec.ts` or `*.test.ts` convention |
100
+ | Import style matches project | Imports from project fixtures file if one exists, not raw `@playwright/test` |
101
+ | baseURL used | `page.goto('/')` not `page.goto('https://example.com/')` |
102
+ | POM pattern followed (if used) | Page objects for interactions, tests for assertions |
103
+ | Consistent locator strategy | Same locator approach as existing tests |
104
+
105
+ #### 2f. TC-ID Traceability
106
+
107
+ If a test case spec file exists for this feature:
108
+ - Verify every TC-ID from the spec has a corresponding test
109
+ - Flag TC-IDs in the spec with no implementation
110
+ - Flag tests with TC-IDs not present in the spec (orphaned tests)
111
+ - Note: not every spec TC-ID must be implemented — but missing ones should be acknowledged
112
+
113
+ #### 2g. Anti-Pattern Detection
114
+
115
+ Flag any instances of these known anti-patterns:
116
+ 1. Raw CSS selectors where semantic locators would work
117
+ 2. `waitForTimeout()` used as a fix
118
+ 3. `.first()` / `.nth()` without justification
119
+ 4. Exact long text matches (fragile to copy changes)
120
+ 5. Login via UI in every test (should use storageState)
121
+ 6. UI clicks to set up test data (should use API)
122
+ 7. No error path tests in the suite
123
+ 8. Hardcoded test data
124
+ 9. Tests depending on execution order
125
+ 10. `expect(await el.isVisible()).toBe(true)` instead of `await expect(el).toBeVisible()`
126
+ 11. Missing `await` on Playwright calls (easy to miss, causes silent failures)
127
+ 12. `{ force: true }` on interactions without documented justification (masks actionability issues — overlapping elements, disabled state, not scrolled into view)
128
+ 13. `waitForLoadState('networkidle')` as default wait strategy — breaks on long-polling, WebSockets, analytics beacons; use specific `waitForResponse` or UI assertions instead
129
+ 14. CSS utility class selectors (Tailwind `rounded-lg`, `flex`, Bootstrap `btn-primary`, `col-md-*`) — styling classes are volatile, never use as selectors
130
+ 15. Asserting exact server-computed values (`toHaveText('12450')`) — use pattern matchers, ranges, or seed data to control expected values
131
+
132
+ ### Step 3: Produce the Review Report
133
+
134
+ Output a structured review with this format:
135
+
136
+ ```markdown
137
+ # Test Code Review: <file or feature>
138
+
139
+ **Files reviewed:** <list>
140
+ **Total tests:** <count>
141
+ **Review date:** <date>
142
+
143
+ ## Verdict: PASS | PASS WITH WARNINGS | NEEDS REVISION
144
+
145
+ ## Blockers (<count>)
146
+ - **<file>:<line>** `<test name>`: <issue description>
147
+
148
+ ## Warnings (<count>)
149
+ - **<file>:<line>** `<test name>`: <issue description>
150
+
151
+ ## Suggestions (<count>)
152
+ - **<file>:<line>**: <issue description>
153
+
154
+ ## Convention Divergences
155
+ - <How this code differs from the project's established patterns>
156
+
157
+ ## TC-ID Traceability
158
+ - **Implemented:** <count> / <total in spec>
159
+ - **Missing from implementation:** <list of TC-IDs>
160
+ - **Orphaned (no spec):** <list of TC-IDs>
161
+
162
+ ## Summary
163
+ <2-3 sentences on overall code quality and what to address before test execution>
164
+ ```
165
+
166
+ ### Step 4: Verdict Rules
167
+
168
+ - **PASS** — no blockers, 2 or fewer warnings. Proceed to test execution.
169
+ - **PASS WITH WARNINGS** — no blockers, 3+ warnings. Can proceed but should address warnings for long-term stability.
170
+ - **NEEDS REVISION** — 1+ blockers. Do not run tests expecting stable results until blockers are resolved.
171
+
172
+ ## Principles
173
+
174
+ - **Review-only** — never modify test files; report findings for the author to act on
175
+ - **Evidence over opinion** — cite specific file paths, line numbers, and code snippets when flagging issues
176
+ - **Spot-check selectors** — delegate to a subagent with browser access to verify 2-3 suspicious locators against the live site
177
+ - **Convention-first** — compare against the project's existing test patterns, not an abstract ideal
178
+ - **Bounded output** — the review should be actionable and finite, not a full rewrite specification
179
+ - **Severity matters** — a missing `await` is a blocker; a naming style preference is a suggestion
180
+
181
+ ## Example Usage
182
+
183
+ ```
184
+ Claude Code: /review-test-code tests/e2e/login.spec.ts
185
+ Codex: $review-test-code tests/e2e/login.spec.ts
186
+
187
+ Claude Code: /review-test-code tests/e2e/
188
+ Codex: $review-test-code tests/e2e/
189
+ ```
@@ -0,0 +1,3 @@
1
+ frontmatter:
2
+ argument-hint: "<path to test file or directory>"
3
+ user-invocable: true
@@ -0,0 +1,10 @@
1
+ interface:
2
+ display_name: "Review Playwright Test Code"
3
+ short_description: "Review Playwright test implementation for stability and correctness"
4
+ default_prompt: "Review this Playwright test implementation before execution and flag quality issues."
5
+
6
+ dependencies:
7
+ tools:
8
+ - type: "mcp"
9
+ value: "agent-web-interface"
10
+ description: "Browser automation MCP used to verify selectors against the live site"
@@ -0,0 +1,227 @@
1
+ ---
2
+ name: write-test-code
3
+ description: >
4
+ This skill should be used when writing, refactoring, or modifying Playwright E2E test code.
5
+ It covers creating test files from TC-ID specs, converting browser exploration results to
6
+ executable tests, refactoring locators or fixtures, adding API mocking, test data
7
+ setup/teardown, and parallel-safe isolation. Includes locator strategy hierarchy, auth setup
8
+ patterns, fixture design, teardown strategies, and network interception recipes.
9
+ Triggers: "write a test for", "add a test case", "refactor this locator", "add error path
10
+ tests", "convert specs to code", "add API mocking", "set up auth for tests".
11
+ NOT for: full pipeline from scratch (use add-e2e-tests), exploring live sites (use
12
+ agent-web-interface-guide), generating specs without code (use plan-test-coverage or
13
+ generate-test-cases), diagnosing flaky tests (use fix-flaky-tests).
14
+ allowed-tools: Read Write Edit Bash Glob Grep Task
15
+ ---
16
+
17
+ # Write E2E Tests
18
+
19
+ Write, refactor, or fix Playwright E2E tests. Convert browser exploration results or test case specifications into executable, stable test code.
20
+
21
+ ## Input
22
+
23
+ Parse the test description or spec file path from: $ARGUMENTS
24
+
25
+ ## Workflow
26
+
27
+ ### 1. Understand the Request
28
+ - Identify the user journey to test and success criteria
29
+ - Identify preconditions (auth, seeded data, feature flags, env)
30
+ - If a test case spec file path is provided, read it for TC-IDs and expected behaviors
31
+
32
+ ### 2. Inspect Repo Conventions (CRITICAL — before writing any code)
33
+ - Search for `playwright.config.ts` / `playwright.config.js` — extract `baseURL`, `testDir`, projects
34
+ - Search for existing tests, fixtures, page objects, locator patterns, test data modules
35
+ - Read 2-3 existing test files to match the project's naming, structure, and locator strategy
36
+ - Check for custom fixtures, POM patterns, auth setup (storageState, global setup)
37
+ - Follow the project's existing style unless it clearly causes flakiness
38
+
39
+ ### 3. Verify Key Selectors Against the Live Site
40
+ - If a test case spec file includes **Selectors observed**, use those as your starting point
41
+ - If no spec or selectors are available, browse the target page using `agent-web-interface-guide` to discover the actual selectors before writing code — do not guess
42
+ - Spot-check 2-3 critical selectors with `find` or `get_element` to confirm they resolve to the intended elements
43
+
44
+ ### 4. Implement Tests
45
+ - Add/adjust fixtures and page objects first (if needed)
46
+ - Write tests in a story-like flow with AAA structure: Arrange → Act → Assert
47
+ - Add assertions that represent user outcomes
48
+ - **For large suites:** Use subagents (Task tool) to write individual test files in parallel.
49
+ Pass each subagent the test case spec path, codebase conventions from Step 2, and the
50
+ operating principles from this skill. Only split when files have independent responsibilities.
51
+
52
+ ### 5. Stabilize
53
+ - Replace any sleeps with meaningful waits
54
+ - Tighten locators to avoid ambiguity
55
+ - For network-driven flows, use `page.waitForResponse` for critical checkpoints
56
+
57
+ ### 6. Verify
58
+ - Run the smallest relevant test command: `npx playwright test <file> --reporter=list 2>&1`
59
+ - In CI or headless environments (no display), never use `--headed` — it will fail silently or hang
60
+ - Use `--headed` only during local interactive debugging when you need to visually observe the test
61
+ - Fix root causes rather than extending timeouts
62
+
63
+ ### 7. Summarize
64
+ Return:
65
+ 1. **What I changed** (bullets)
66
+ 2. **Test case IDs added** (list all new TC-IDs with brief description)
67
+ 3. **Why it's stable** (locator/wait strategy used)
68
+ 4. **How to run** (exact commands)
69
+ 5. **Notes / follow-ups** (optional)
70
+
71
+ ## Operating Principles (Non-Negotiable)
72
+
73
+ ### Test User Outcomes
74
+ Assert what the user sees — visible text, URL changes, enabled/disabled states — not internal state, CSS classes, or component hierarchy.
75
+
76
+ ### No Arbitrary Sleeps
77
+ Avoid `page.waitForTimeout()` except as a last-resort debug aid — remove before finishing.
78
+
79
+ ### Locator Strategy
80
+ | Priority | Method | When to Use |
81
+ |----------|--------|-------------|
82
+ | 1 | `getByRole('role', { name })` | Buttons, links, headings, form controls |
83
+ | 2 | `getByLabel()` | Form fields with visible labels |
84
+ | 3 | `getByPlaceholder()` | Inputs with placeholder text |
85
+ | 4 | `getByTestId()` | When data-testid is available |
86
+ | 5 | `getByText()` | Short, stable text (avoid marketing copy) |
87
+ | 6 | CSS selectors | Last resort, always scoped tightly |
88
+
89
+ Avoid `.first()` / `.nth()` unless a strong, documented reason exists — scope locators to a container instead.
90
+
91
+ **Within-file consistency:** Every test file must use ONE locator approach for equivalent elements. Do not mix `getByPlaceholder('Email')` in one test with `page.locator('input[placeholder="Email"]')` in another test within the same file. When adding tests to an existing file, match the locator style already in use. If the existing style is suboptimal, refactor all locators in the file together — do not create inconsistency.
92
+
93
+ ### Waiting Strategy
94
+ - Prefer Playwright auto-waits via actions and `expect(...)` assertions
95
+ - If explicit waiting needed, wait for meaningful state: visibility, enabled, URL, specific network response, spinner gone
96
+
97
+ ### Test Case IDs
98
+ - Every test MUST have a unique TC-ID: `TC-<FEATURE>-<NUMBER>`
99
+ - Include in test title: `test('TC-LOGIN-001: User can log in with valid credentials', ...)`
100
+ - Sequential within feature area, never reused
101
+ - When adding to existing file, check existing IDs and continue the sequence
102
+
103
+ ### POM + Fixtures
104
+ - If the project has a `pages/` directory or BasePage class, ALL new tests MUST use Page Objects for interactions
105
+ - Page Objects contain HOW (locators + interactions)
106
+ - Tests contain WHAT (behavior/outcome to verify)
107
+ - Keep page objects thin and composable
108
+ - If the boilerplate shipped a BasePage that no tests reference, either extend it for your feature or flag it for removal — do not leave dead infrastructure
109
+
110
+ ### Determinism and Isolation
111
+ - Tests must not depend on execution order
112
+ - Use unique test data per test or suite
113
+ - **Parallel-safe mutations:** When `fullyParallel: true` is configured, tests run concurrently across workers. A test that creates a record (e.g., a ticket) and then asserts it appears in a list WILL race with other tests creating records. Solutions: (a) assert on the specific record you created (filter/search by the unique ID from your API setup), not on list position or count; (b) use `test.describe.serial` for flows that genuinely require sequence (create-then-verify); (c) scope list assertions with `.filter({ hasText: uniqueIdentifier })` to avoid seeing other workers' data.
114
+
115
+ ### Assertions
116
+ - Use Playwright `expect` matchers (auto-retry, better error messages)
117
+ - Avoid `isVisible()` + `expect(true)` pattern
118
+
119
+ ### Configuration Hygiene
120
+ - Use `baseURL` and relative navigation (`page.goto('/')`)
121
+ - Avoid hardcoded domains/URLs in tests
122
+ - Configure `trace: 'on-first-retry'`, `screenshot: 'only-on-failure'`, `video: 'on-first-retry'` for CI debugging
123
+ - Set `retries: process.env.CI ? 2 : 0` — retries in CI only
124
+ - View traces with `npx playwright show-trace trace.zip` to time-travel through failures
125
+ - If `tsconfig.json` defines path aliases (e.g., `@pages/*`, `@fixtures/*`, `@utils/*`), use them in imports instead of relative paths. Check tsconfig paths before writing any import statement.
126
+
127
+ ### Authentication Setup
128
+ Use `storageState` for most projects (log in once in global setup, reuse across tests).
129
+ For parallel workers needing separate accounts, use worker-scoped fixtures.
130
+ For multi-role tests (admin + user), create separate browser contexts.
131
+ Per-test login is only for testing the login flow itself.
132
+ Never hardcode tokens — use environment variables or `.env.test`.
133
+
134
+ See [references/auth-patterns.md](references/auth-patterns.md) for full patterns with code examples.
135
+
136
+ ### API-Driven Test Setup and Teardown
137
+ Use API calls (not UI clicks) to seed test data — 10-50x faster and more reliable.
138
+ Use UI setup only when the creation flow IS the test. Tests that create persistent data
139
+ MUST clean up: use `afterEach` API deletion, fixture-with-cleanup, or bulk `globalTeardown`.
140
+ If no cleanup endpoint exists, document the gap with a TODO.
141
+
142
+ See [references/api-setup-teardown.md](references/api-setup-teardown.md) for full patterns with code examples.
143
+
144
+ ### Network Interception and Error Paths
145
+ Use `page.route()` to mock server errors, patch responses, assert backend calls, or block
146
+ heavy resources. Every feature needs error path tests: server error (500), network timeout,
147
+ and empty state at minimum.
148
+
149
+ See [references/network-interception.md](references/network-interception.md) for full patterns with code examples.
150
+
151
+ ### Custom Fixtures (test.extend)
152
+
153
+ Use `test.extend` to create reusable test setup without duplicating code:
154
+
155
+ ```typescript
156
+ // fixtures/index.ts
157
+ import { test as base, Page } from '@playwright/test';
158
+ import { LoginPage } from '../pages/LoginPage';
159
+
160
+ export const test = base.extend<{
161
+ loginPage: LoginPage;
162
+ authenticatedPage: Page;
163
+ }>({
164
+ loginPage: async ({ page }, use) => {
165
+ await use(new LoginPage(page));
166
+ },
167
+ authenticatedPage: async ({ browser }, use) => {
168
+ const context = await browser.newContext({
169
+ storageState: 'tests/.auth/user.json'
170
+ });
171
+ const page = await context.newPage();
172
+ await use(page);
173
+ await context.close();
174
+ },
175
+ });
176
+ export { expect } from '@playwright/test';
177
+ ```
178
+
179
+ Import `test` from your fixtures file, not from `@playwright/test`, in test files that need custom fixtures.
180
+
181
+ ### Mapping Tables
182
+ When converting journey specs or exploration results to code, consult the mapping tables
183
+ for standard translations of scopes, actions, assertions, and target kinds to Playwright API calls.
184
+ For low-confidence journey steps (<0.7), add extra assertions and include fallback locators as comments.
185
+
186
+ See [references/mapping-tables.md](references/mapping-tables.md) for the full tables.
187
+
188
+ ## Test Template
189
+
190
+ ```typescript
191
+ // If the project has custom fixtures (fixtures/index.ts), import from there:
192
+ // import { test, expect } from '@fixtures/index';
193
+ // Otherwise, use the default:
194
+ import { test, expect } from '@playwright/test';
195
+
196
+ test('TC-FEATURE-001: Description of test case', async ({ page }) => {
197
+ // Arrange
198
+ await page.goto('/feature-path');
199
+
200
+ // Act
201
+ await page.getByRole('button', { name: /submit/i }).click();
202
+
203
+ // Assert
204
+ await expect(page.getByText(/success/i)).toBeVisible();
205
+ });
206
+ ```
207
+
208
+ Always check for a project fixtures file before using the default import. If custom fixtures exist, you MUST import from them to get access to page objects and custom setup.
209
+
210
+ ## Anti-Patterns (Quick Reference)
211
+ 1. Raw CSS selectors — use semantic locators
212
+ 2. `waitForTimeout()` — use proper assertions/waits
213
+ 3. Fragile `.nth()` / `.first()` — scope to container
214
+ 4. Exact long text matches — use regex with key words
215
+ 5. Unscoped locators — scope to container
216
+ 6. Login via UI in every test — use storageState
217
+ 7. UI clicks for test data setup — use API
218
+ 8. No error path tests — add failure scenarios
219
+ 9. Hardcoded test data — use API setup + dynamic values
220
+ 10. Tests depending on execution order
221
+ 11. `expect(await el.isVisible()).toBe(true)` — use `await expect(el).toBeVisible()`
222
+ 12. `{ force: true }` — diagnose root cause instead
223
+ 13. `networkidle` as default wait — use specific response waits
224
+ 14. CSS utility class selectors (Tailwind/Bootstrap)
225
+ 15. Asserting exact server-computed values — use patterns or seed data
226
+
227
+ See [references/anti-patterns.md](references/anti-patterns.md) for detailed explanations and fix strategies.
@@ -0,0 +1,3 @@
1
+ frontmatter:
2
+ argument-hint: "<test description or path to test case spec file>"
3
+ user-invocable: true
@@ -0,0 +1,10 @@
1
+ interface:
2
+ display_name: "Implement Playwright Tests"
3
+ short_description: "Implement or refactor executable Playwright tests from a scenario or spec"
4
+ default_prompt: "Write or update Playwright E2E tests for this scenario or TC-ID spec."
5
+
6
+ dependencies:
7
+ tools:
8
+ - type: "mcp"
9
+ value: "agent-web-interface"
10
+ description: "Browser automation MCP used when selectors or live behavior need verification"