tribunal-kit 3.0.0 → 4.0.0

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 (233) hide show
  1. package/.agent/ARCHITECTURE.md +99 -99
  2. package/.agent/GEMINI.md +52 -52
  3. package/.agent/agents/accessibility-reviewer.md +187 -220
  4. package/.agent/agents/ai-code-reviewer.md +199 -233
  5. package/.agent/agents/backend-specialist.md +215 -238
  6. package/.agent/agents/code-archaeologist.md +161 -181
  7. package/.agent/agents/database-architect.md +184 -207
  8. package/.agent/agents/debugger.md +191 -218
  9. package/.agent/agents/dependency-reviewer.md +103 -136
  10. package/.agent/agents/devops-engineer.md +218 -238
  11. package/.agent/agents/documentation-writer.md +201 -221
  12. package/.agent/agents/explorer-agent.md +160 -180
  13. package/.agent/agents/frontend-reviewer.md +160 -194
  14. package/.agent/agents/frontend-specialist.md +248 -237
  15. package/.agent/agents/game-developer.md +48 -52
  16. package/.agent/agents/logic-reviewer.md +116 -149
  17. package/.agent/agents/mobile-developer.md +200 -223
  18. package/.agent/agents/mobile-reviewer.md +162 -195
  19. package/.agent/agents/orchestrator.md +181 -211
  20. package/.agent/agents/penetration-tester.md +157 -174
  21. package/.agent/agents/performance-optimizer.md +183 -203
  22. package/.agent/agents/performance-reviewer.md +178 -211
  23. package/.agent/agents/precedence-reviewer.md +213 -0
  24. package/.agent/agents/product-manager.md +142 -162
  25. package/.agent/agents/product-owner.md +6 -25
  26. package/.agent/agents/project-planner.md +142 -162
  27. package/.agent/agents/qa-automation-engineer.md +225 -242
  28. package/.agent/agents/security-auditor.md +174 -194
  29. package/.agent/agents/seo-specialist.md +193 -213
  30. package/.agent/agents/sql-reviewer.md +161 -194
  31. package/.agent/agents/supervisor-agent.md +184 -203
  32. package/.agent/agents/swarm-worker-contracts.md +17 -17
  33. package/.agent/agents/swarm-worker-registry.md +46 -46
  34. package/.agent/agents/test-coverage-reviewer.md +160 -193
  35. package/.agent/agents/test-engineer.md +0 -21
  36. package/.agent/agents/type-safety-reviewer.md +175 -208
  37. package/.agent/patterns/generator.md +9 -9
  38. package/.agent/patterns/inversion.md +12 -12
  39. package/.agent/patterns/pipeline.md +9 -9
  40. package/.agent/patterns/reviewer.md +13 -13
  41. package/.agent/patterns/tool-wrapper.md +9 -9
  42. package/.agent/rules/GEMINI.md +63 -63
  43. package/.agent/scripts/append_flow.js +72 -0
  44. package/.agent/scripts/case_law_manager.py +525 -0
  45. package/.agent/scripts/compress_skills.py +167 -0
  46. package/.agent/scripts/consolidate_skills.py +173 -0
  47. package/.agent/scripts/deep_compress.py +202 -0
  48. package/.agent/scripts/minify_context.py +80 -0
  49. package/.agent/scripts/security_scan.py +1 -1
  50. package/.agent/scripts/skill_evolution.py +563 -0
  51. package/.agent/scripts/strip_tribunal.py +41 -0
  52. package/.agent/skills/agent-organizer/SKILL.md +100 -126
  53. package/.agent/skills/agentic-patterns/SKILL.md +0 -70
  54. package/.agent/skills/ai-prompt-injection-defense/SKILL.md +134 -160
  55. package/.agent/skills/api-patterns/SKILL.md +123 -215
  56. package/.agent/skills/api-security-auditor/SKILL.md +143 -177
  57. package/.agent/skills/app-builder/SKILL.md +334 -50
  58. package/.agent/skills/app-builder/templates/SKILL.md +13 -15
  59. package/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +16 -16
  60. package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +22 -22
  61. package/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +18 -18
  62. package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +20 -20
  63. package/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +17 -17
  64. package/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +18 -18
  65. package/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +21 -21
  66. package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +19 -19
  67. package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +26 -26
  68. package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +26 -26
  69. package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +19 -19
  70. package/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +18 -18
  71. package/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +20 -20
  72. package/.agent/skills/appflow-wireframe/SKILL.md +95 -121
  73. package/.agent/skills/architecture/SKILL.md +169 -331
  74. package/.agent/skills/authentication-best-practices/SKILL.md +139 -173
  75. package/.agent/skills/bash-linux/SKILL.md +129 -154
  76. package/.agent/skills/behavioral-modes/SKILL.md +8 -69
  77. package/.agent/skills/brainstorming/SKILL.md +436 -104
  78. package/.agent/skills/building-native-ui/SKILL.md +152 -174
  79. package/.agent/skills/clean-code/SKILL.md +331 -360
  80. package/.agent/skills/code-review-checklist/SKILL.md +0 -62
  81. package/.agent/skills/config-validator/SKILL.md +115 -141
  82. package/.agent/skills/csharp-developer/SKILL.md +468 -528
  83. package/.agent/skills/database-design/SKILL.md +104 -369
  84. package/.agent/skills/deployment-procedures/SKILL.md +119 -145
  85. package/.agent/skills/devops-engineer/SKILL.md +295 -332
  86. package/.agent/skills/devops-incident-responder/SKILL.md +87 -113
  87. package/.agent/skills/doc.md +5 -5
  88. package/.agent/skills/documentation-templates/SKILL.md +27 -63
  89. package/.agent/skills/edge-computing/SKILL.md +131 -157
  90. package/.agent/skills/extract-design-system/SKILL.md +108 -134
  91. package/.agent/skills/framer-motion-expert/SKILL.md +111 -855
  92. package/.agent/skills/frontend-design/SKILL.md +151 -499
  93. package/.agent/skills/game-design-expert/SKILL.md +79 -105
  94. package/.agent/skills/game-engineering-expert/SKILL.md +96 -122
  95. package/.agent/skills/geo-fundamentals/SKILL.md +97 -124
  96. package/.agent/skills/github-operations/SKILL.md +279 -314
  97. package/.agent/skills/gsap-expert/SKILL.md +119 -826
  98. package/.agent/skills/i18n-localization/SKILL.md +113 -138
  99. package/.agent/skills/intelligent-routing/SKILL.md +167 -127
  100. package/.agent/skills/lint-and-validate/SKILL.md +16 -52
  101. package/.agent/skills/llm-engineering/SKILL.md +344 -357
  102. package/.agent/skills/local-first/SKILL.md +128 -154
  103. package/.agent/skills/mcp-builder/SKILL.md +92 -118
  104. package/.agent/skills/mobile-design/SKILL.md +213 -219
  105. package/.agent/skills/motion-engineering/SKILL.md +184 -0
  106. package/.agent/skills/nextjs-react-expert/SKILL.md +99 -698
  107. package/.agent/skills/nodejs-best-practices/SKILL.md +498 -559
  108. package/.agent/skills/observability/SKILL.md +293 -330
  109. package/.agent/skills/parallel-agents/SKILL.md +96 -122
  110. package/.agent/skills/performance-profiling/SKILL.md +217 -254
  111. package/.agent/skills/plan-writing/SKILL.md +92 -118
  112. package/.agent/skills/platform-engineer/SKILL.md +97 -123
  113. package/.agent/skills/playwright-best-practices/SKILL.md +137 -162
  114. package/.agent/skills/powershell-windows/SKILL.md +112 -146
  115. package/.agent/skills/project-idioms/SKILL.md +87 -0
  116. package/.agent/skills/python-patterns/SKILL.md +15 -35
  117. package/.agent/skills/python-pro/SKILL.md +148 -754
  118. package/.agent/skills/react-specialist/SKILL.md +123 -827
  119. package/.agent/skills/readme-builder/SKILL.md +23 -85
  120. package/.agent/skills/realtime-patterns/SKILL.md +269 -304
  121. package/.agent/skills/red-team-tactics/SKILL.md +18 -51
  122. package/.agent/skills/rust-pro/SKILL.md +623 -701
  123. package/.agent/skills/seo-fundamentals/SKILL.md +129 -154
  124. package/.agent/skills/server-management/SKILL.md +164 -190
  125. package/.agent/skills/shadcn-ui-expert/SKILL.md +181 -206
  126. package/.agent/skills/skill-creator/SKILL.md +24 -56
  127. package/.agent/skills/sql-pro/SKILL.md +579 -633
  128. package/.agent/skills/supabase-postgres-best-practices/SKILL.md +35 -66
  129. package/.agent/skills/swiftui-expert/SKILL.md +151 -176
  130. package/.agent/skills/systematic-debugging/SKILL.md +92 -118
  131. package/.agent/skills/tailwind-patterns/SKILL.md +516 -576
  132. package/.agent/skills/tdd-workflow/SKILL.md +111 -137
  133. package/.agent/skills/test-result-analyzer/SKILL.md +33 -73
  134. package/.agent/skills/testing-patterns/SKILL.md +512 -573
  135. package/.agent/skills/trend-researcher/SKILL.md +30 -71
  136. package/.agent/skills/ui-ux-pro-max/SKILL.md +8 -41
  137. package/.agent/skills/ui-ux-researcher/SKILL.md +51 -91
  138. package/.agent/skills/vue-expert/SKILL.md +127 -866
  139. package/.agent/skills/vulnerability-scanner/SKILL.md +354 -269
  140. package/.agent/skills/web-accessibility-auditor/SKILL.md +168 -193
  141. package/.agent/skills/web-design-guidelines/SKILL.md +25 -61
  142. package/.agent/skills/webapp-testing/SKILL.md +119 -145
  143. package/.agent/skills/whimsy-injector/SKILL.md +58 -132
  144. package/.agent/skills/workflow-optimizer/SKILL.md +28 -68
  145. package/.agent/workflows/api-tester.md +151 -151
  146. package/.agent/workflows/audit.md +127 -138
  147. package/.agent/workflows/brainstorm.md +110 -110
  148. package/.agent/workflows/changelog.md +112 -112
  149. package/.agent/workflows/create.md +124 -124
  150. package/.agent/workflows/debug.md +165 -189
  151. package/.agent/workflows/deploy.md +180 -189
  152. package/.agent/workflows/enhance.md +128 -151
  153. package/.agent/workflows/fix.md +114 -135
  154. package/.agent/workflows/generate.md +13 -4
  155. package/.agent/workflows/migrate.md +160 -160
  156. package/.agent/workflows/orchestrate.md +168 -168
  157. package/.agent/workflows/performance-benchmarker.md +114 -123
  158. package/.agent/workflows/plan.md +173 -173
  159. package/.agent/workflows/preview.md +80 -80
  160. package/.agent/workflows/refactor.md +161 -183
  161. package/.agent/workflows/review-ai.md +101 -129
  162. package/.agent/workflows/review.md +116 -116
  163. package/.agent/workflows/session.md +94 -94
  164. package/.agent/workflows/status.md +79 -79
  165. package/.agent/workflows/strengthen-skills.md +138 -139
  166. package/.agent/workflows/swarm.md +179 -179
  167. package/.agent/workflows/test.md +189 -211
  168. package/.agent/workflows/tribunal-backend.md +94 -113
  169. package/.agent/workflows/tribunal-database.md +95 -115
  170. package/.agent/workflows/tribunal-frontend.md +96 -118
  171. package/.agent/workflows/tribunal-full.md +93 -133
  172. package/.agent/workflows/tribunal-mobile.md +95 -119
  173. package/.agent/workflows/tribunal-performance.md +110 -133
  174. package/.agent/workflows/ui-ux-pro-max.md +122 -143
  175. package/README.md +30 -1
  176. package/bin/tribunal-kit.js +175 -12
  177. package/package.json +25 -4
  178. package/.agent/skills/api-patterns/api-style.md +0 -42
  179. package/.agent/skills/api-patterns/auth.md +0 -24
  180. package/.agent/skills/api-patterns/documentation.md +0 -26
  181. package/.agent/skills/api-patterns/graphql.md +0 -41
  182. package/.agent/skills/api-patterns/rate-limiting.md +0 -31
  183. package/.agent/skills/api-patterns/response.md +0 -37
  184. package/.agent/skills/api-patterns/rest.md +0 -40
  185. package/.agent/skills/api-patterns/security-testing.md +0 -122
  186. package/.agent/skills/api-patterns/trpc.md +0 -41
  187. package/.agent/skills/api-patterns/versioning.md +0 -22
  188. package/.agent/skills/app-builder/agent-coordination.md +0 -71
  189. package/.agent/skills/app-builder/feature-building.md +0 -53
  190. package/.agent/skills/app-builder/project-detection.md +0 -34
  191. package/.agent/skills/app-builder/scaffolding.md +0 -118
  192. package/.agent/skills/app-builder/tech-stack.md +0 -40
  193. package/.agent/skills/architecture/context-discovery.md +0 -43
  194. package/.agent/skills/architecture/examples.md +0 -94
  195. package/.agent/skills/architecture/pattern-selection.md +0 -68
  196. package/.agent/skills/architecture/patterns-reference.md +0 -50
  197. package/.agent/skills/architecture/trade-off-analysis.md +0 -77
  198. package/.agent/skills/brainstorming/dynamic-questioning.md +0 -360
  199. package/.agent/skills/database-design/database-selection.md +0 -43
  200. package/.agent/skills/database-design/indexing.md +0 -39
  201. package/.agent/skills/database-design/migrations.md +0 -48
  202. package/.agent/skills/database-design/optimization.md +0 -36
  203. package/.agent/skills/database-design/orm-selection.md +0 -30
  204. package/.agent/skills/database-design/schema-design.md +0 -56
  205. package/.agent/skills/frontend-design/animation-guide.md +0 -331
  206. package/.agent/skills/frontend-design/color-system.md +0 -329
  207. package/.agent/skills/frontend-design/decision-trees.md +0 -418
  208. package/.agent/skills/frontend-design/motion-graphics.md +0 -306
  209. package/.agent/skills/frontend-design/typography-system.md +0 -363
  210. package/.agent/skills/frontend-design/ux-psychology.md +0 -1116
  211. package/.agent/skills/frontend-design/visual-effects.md +0 -383
  212. package/.agent/skills/intelligent-routing/router-manifest.md +0 -65
  213. package/.agent/skills/mobile-design/decision-trees.md +0 -516
  214. package/.agent/skills/mobile-design/mobile-backend.md +0 -491
  215. package/.agent/skills/mobile-design/mobile-color-system.md +0 -420
  216. package/.agent/skills/mobile-design/mobile-debugging.md +0 -122
  217. package/.agent/skills/mobile-design/mobile-design-thinking.md +0 -357
  218. package/.agent/skills/mobile-design/mobile-navigation.md +0 -458
  219. package/.agent/skills/mobile-design/mobile-performance.md +0 -767
  220. package/.agent/skills/mobile-design/mobile-testing.md +0 -356
  221. package/.agent/skills/mobile-design/mobile-typography.md +0 -433
  222. package/.agent/skills/mobile-design/platform-android.md +0 -666
  223. package/.agent/skills/mobile-design/platform-ios.md +0 -561
  224. package/.agent/skills/mobile-design/touch-psychology.md +0 -537
  225. package/.agent/skills/nextjs-react-expert/1-async-eliminating-waterfalls.md +0 -312
  226. package/.agent/skills/nextjs-react-expert/2-bundle-bundle-size-optimization.md +0 -240
  227. package/.agent/skills/nextjs-react-expert/3-server-server-side-performance.md +0 -490
  228. package/.agent/skills/nextjs-react-expert/4-client-client-side-data-fetching.md +0 -264
  229. package/.agent/skills/nextjs-react-expert/5-rerender-re-render-optimization.md +0 -581
  230. package/.agent/skills/nextjs-react-expert/6-rendering-rendering-performance.md +0 -432
  231. package/.agent/skills/nextjs-react-expert/7-js-javascript-performance.md +0 -684
  232. package/.agent/skills/nextjs-react-expert/8-advanced-advanced-patterns.md +0 -150
  233. package/.agent/skills/vulnerability-scanner/checklists.md +0 -121
@@ -1,162 +1,137 @@
1
- ---
2
- name: playwright-best-practices
3
- description: Playwright End-to-End (E2E) testing mastery. Resilient selectors, auto-waiting mechanisms, parallel test execution, mocking network requests, fixture management, and cross-browser CI configurations. Use when configuring, deploying, or writing E2E web tests.
4
- allowed-tools: Read, Write, Edit, Glob, Grep
5
- version: 2.0.0
6
- last-updated: 2026-04-02
7
- applies-to-model: gemini-2.5-pro, claude-3-7-sonnet
8
- ---
9
-
10
- # Playwright E2E Bulletproof Testing Mastery
11
-
12
- > E2E tests prove the system works. Flaky tests prove nothing.
13
- > Never test implementation details. Test what the user experiences.
14
-
15
- ---
16
-
17
- ## 1. Resilience & Auto-Waiting
18
-
19
- Playwright automatically waits for elements to be actionable (visible, stable, not obscured).
20
-
21
- ```typescript
22
- // ❌ FLAKY: Hardcoded sleeps. Fails on slow CI, wastes time on fast local rings.
23
- await page.waitForTimeout(3000);
24
-
25
- // FLAKY: CSS selectors tied to layout/styling changes
26
- await page.locator('.btn-primary > span').click();
27
-
28
- // ROBUST: Playwright auto-waits for actionability based on user-centric selectors
29
- await page.getByRole('button', { name: "Submit Checkout" }).click();
30
-
31
- // ROBUST: Testing for expected states
32
- await expect(page.getByText('Order confirmed')).toBeVisible();
33
- ```
34
-
35
- ### The Selector Hierarchy (Best to Worst)
36
- 1. `page.getByRole()` — Checks accessibility simultaneously.
37
- 2. `page.getByText()` Finds elements by raw text values.
38
- 3. `page.getByTestId()` — Resilient to text/translation updates (`data-testid`).
39
- 4. `page.locator('css')` — Brittle, bound to DOM structures. Use only as last resort.
40
-
41
- ---
42
-
43
- ## 2. Test Isolation & Fixtures
44
-
45
- Do not cascade tests (where Test B requires Test A to pass first). Playwright gives every test a blank browser context isolated from the rest.
46
-
47
- ```typescript
48
- import { test, expect } from '@playwright/test';
49
-
50
- // ❌ BAD: Cascading state
51
- test.describe('Dashboard', () => {
52
- test('Login', async ({ page }) => {
53
- await login(page); // Next test assumes this succeeded
54
- });
55
- test('Action', async ({ page }) => {
56
- await page.getByRole('button', { name: 'Save' }).click();
57
- });
58
- });
59
-
60
- // ✅ GOOD: Isolated tests via beforeEach or Custom Fixtures
61
- test.beforeEach(async ({ page }) => {
62
- // Login directly via API to bypass slow UI login, seeding cookies
63
- await performFastApiLogin(page);
64
- await page.goto('/dashboard');
65
- });
66
-
67
- test('Should save settings', async ({ page }) => {
68
- await page.getByRole('button', { name: 'Save' }).click();
69
- await expect(page.getByRole('alert')).toHaveText('Saved successfully');
70
- });
71
- ```
72
-
73
- ---
74
-
75
- ## 3. Network Mocking
76
-
77
- E2E tests that rely on external 3rd party APIs (Stripe, SendGrid) will fail randomly due to network latency outside your control.
78
-
79
- ```typescript
80
- test('Should block invalid credit cards', async ({ page }) => {
81
- // Intercept the outgoing request to the payment processor
82
- await page.route('**/api/v1/charge*', async route => {
83
- // Return a mocked failure response immediately
84
- const json = { status: 'declined', message: 'Insufficient funds' };
85
- await route.fulfill({ status: 400, json });
86
- });
87
-
88
- await page.getByRole('button', { name: 'Purchase' }).click();
89
- await expect(page.getByText('Insufficient funds')).toBeVisible();
90
- });
91
- ```
92
-
93
- ---
94
-
95
- ## 4. Configuration for CI/CD
96
-
97
- ```typescript
98
- // playwright.config.ts
99
- import { defineConfig, devices } from '@playwright/test';
100
-
101
- export default defineConfig({
102
- testDir: './tests/e2e',
103
- fullyParallel: true, // Run tests concurrently
104
- forbidOnly: !!process.env.CI, // Fail build if `.only` was left in code
105
- retries: process.env.CI ? 2 : 0, // Retry flakes on CI only
106
- workers: process.env.CI ? 1 : undefined, // Reduce CI overload
107
- reporter: 'html',
108
-
109
- use: {
110
- trace: 'on-first-retry', // Record trace viewer ONLY on failure to save space
111
- video: 'retain-on-failure',
112
- baseURL: 'http://localhost:3000',
113
- },
114
-
115
- projects: [
116
- { name: 'chromium', use: { ...devices['Desktop Chrome'] } },
117
- { name: 'webkit', use: { ...devices['Desktop Safari'] } },
118
- // Mobile Viewport Example
119
- { name: 'Mobile Safari', use: { ...devices['iPhone 13'] } },
120
- ],
121
-
122
- // Spin up local server before running tests
123
- webServer: {
124
- command: 'npm run build && npm run start',
125
- url: 'http://localhost:3000',
126
- reuseExistingServer: !process.env.CI,
127
- },
128
- });
129
- ```
130
-
131
- ---
132
-
133
- ## 🤖 LLM-Specific Traps (Playwright)
134
-
135
- 1. **WaitTime Hallucinations:** AI constantly suggests `await page.waitForTimeout()` to "fix" failing tests. This is a severe anti-pattern. Rely on Playwright's default auto-waiting, or use `waitForURL / waitForResponse`.
136
- 2. **CSS Selector Blindness:** Relying on `.main > div:nth-child(3)` instead of `getByRole`. Tests will break on the next UI update.
137
- 3. **Cypress Confusions:** Writing Cypress syntax (`cy.get`) in Playwright files. They are fundamentally different frameworks.
138
- 4. **Ignoring Promises:** Playwright actions are async. The AI forgets the `await` keyword, causing the test to complete and close the browser instantly before the assertion happens.
139
- 5. **Slow UI Logins:** Executing full UI visual typing of username/password on *every* test. In an E2E suite of 100 tests, this adds 15 minutes. Use API logins to set browser cookies in `beforeEach` (or `globalSetup`).
140
- 6. **`.only` Commit Pollution:** Leaving `test.only()` in the code. Enable `forbidOnly` in `playwright.config.ts` so the CI catches it immediately.
141
- 7. **Trace Recording Overload:** Using `trace: 'on'` inside the CI. Tracking traces for passes consumes massive disk space. Use `trace: 'on-first-retry'`.
142
- 8. **Soft Assertions Abuse:** AI uses `expect.soft()` to suppress failures. If an assertion is critical, allow it to fail the test entirely.
143
- 9. **Clicking Hidden Elements:** Trying to `click()` elements that are functionally obscured by modals. If Playwright refuses to click, it's a real bug. Bypassing it via `click({ force: true })` ruins the purpose of E2E testing.
144
- 10. **State Leakage:** Failing to realize that tests run completely independently. AI trying to pass variables between `test()` blocks. Variables reset on every definition.
145
-
146
- ---
147
-
148
- ## 🏛️ Tribunal Integration
149
-
150
- ### ✅ Pre-Flight Self-Audit
151
- ```
152
- ✅ Did I completely eliminate `waitForTimeout` (hard sleep) sleep commands?
153
- ✅ Are selectors relying on semantic meaning (`getByRole`, `getByText`) instead of raw CSS?
154
- ✅ Have I properly awaited all locator actions and expectations (`await expect...`)?
155
- ✅ Are tests completely isolated (no cascading state dependence)?
156
- ✅ Is the test executing an API-level authentication bypass if testing underlying features?
157
- ✅ Are external 3rd-party SaaS integrations defensively mocked via `page.route`?
158
- ✅ Have I respected Playwright's auto-actionability checks (avoiding `{ force: true }`)?
159
- ✅ Did I define multiple targeted viewports/browsers inside the `playwright.config.ts`?
160
- ✅ Is `forbidOnly` enabled for CI pipelines?
161
- ✅ Did I assert user-facing impacts rather than deep implementation variables?
162
- ```
1
+ ---
2
+ name: playwright-best-practices
3
+ description: Playwright End-to-End (E2E) testing mastery. Resilient selectors, auto-waiting mechanisms, parallel test execution, mocking network requests, fixture management, and cross-browser CI configurations. Use when configuring, deploying, or writing E2E web tests.
4
+ allowed-tools: Read, Write, Edit, Glob, Grep
5
+ version: 2.0.0
6
+ last-updated: 2026-04-02
7
+ applies-to-model: gemini-2.5-pro, claude-3-7-sonnet
8
+ ---
9
+
10
+ ## Hallucination Traps (Read First)
11
+ - ❌ Using `page.waitForTimeout(3000)` for synchronization -> ✅ Use `page.waitForSelector()`, `expect(locator).toBeVisible()`, or auto-waiting locators
12
+ - Using CSS selectors or XPath for test locators -> ✅ Use `getByRole()`, `getByLabel()`, `getByTestId()` for resilient selectors
13
+ - Running tests without `--workers=1` in CI debug mode -> ✅ Parallel tests with shared state cause flaky failures; isolate tests properly
14
+ - ❌ Not using `test.describe.configure({ mode: 'serial' })` when tests have ordering dependencies -> ✅ Explicitly mark serial when needed
15
+
16
+ ---
17
+
18
+
19
+ # Playwright E2E Bulletproof Testing Mastery
20
+
21
+ ---
22
+
23
+ ## 1. Resilience & Auto-Waiting
24
+
25
+ Playwright automatically waits for elements to be actionable (visible, stable, not obscured).
26
+
27
+ ```typescript
28
+ // FLAKY: Hardcoded sleeps. Fails on slow CI, wastes time on fast local rings.
29
+ await page.waitForTimeout(3000);
30
+
31
+ // FLAKY: CSS selectors tied to layout/styling changes
32
+ await page.locator('.btn-primary > span').click();
33
+
34
+ // ✅ ROBUST: Playwright auto-waits for actionability based on user-centric selectors
35
+ await page.getByRole('button', { name: "Submit Checkout" }).click();
36
+
37
+ // ROBUST: Testing for expected states
38
+ await expect(page.getByText('Order confirmed')).toBeVisible();
39
+ ```
40
+
41
+ ### The Selector Hierarchy (Best to Worst)
42
+ 1. `page.getByRole()` — Checks accessibility simultaneously.
43
+ 2. `page.getByText()` Finds elements by raw text values.
44
+ 3. `page.getByTestId()` — Resilient to text/translation updates (`data-testid`).
45
+ 4. `page.locator('css')` Brittle, bound to DOM structures. Use only as last resort.
46
+
47
+ ---
48
+
49
+ ## 2. Test Isolation & Fixtures
50
+
51
+ Do not cascade tests (where Test B requires Test A to pass first). Playwright gives every test a blank browser context isolated from the rest.
52
+
53
+ ```typescript
54
+ import { test, expect } from '@playwright/test';
55
+
56
+ // BAD: Cascading state
57
+ test.describe('Dashboard', () => {
58
+ test('Login', async ({ page }) => {
59
+ await login(page); // Next test assumes this succeeded
60
+ });
61
+ test('Action', async ({ page }) => {
62
+ await page.getByRole('button', { name: 'Save' }).click();
63
+ });
64
+ });
65
+
66
+ // ✅ GOOD: Isolated tests via beforeEach or Custom Fixtures
67
+ test.beforeEach(async ({ page }) => {
68
+ // Login directly via API to bypass slow UI login, seeding cookies
69
+ await performFastApiLogin(page);
70
+ await page.goto('/dashboard');
71
+ });
72
+
73
+ test('Should save settings', async ({ page }) => {
74
+ await page.getByRole('button', { name: 'Save' }).click();
75
+ await expect(page.getByRole('alert')).toHaveText('Saved successfully');
76
+ });
77
+ ```
78
+
79
+ ---
80
+
81
+ ## 3. Network Mocking
82
+
83
+ E2E tests that rely on external 3rd party APIs (Stripe, SendGrid) will fail randomly due to network latency outside your control.
84
+
85
+ ```typescript
86
+ test('Should block invalid credit cards', async ({ page }) => {
87
+ // Intercept the outgoing request to the payment processor
88
+ await page.route('**/api/v1/charge*', async route => {
89
+ // Return a mocked failure response immediately
90
+ const json = { status: 'declined', message: 'Insufficient funds' };
91
+ await route.fulfill({ status: 400, json });
92
+ });
93
+
94
+ await page.getByRole('button', { name: 'Purchase' }).click();
95
+ await expect(page.getByText('Insufficient funds')).toBeVisible();
96
+ });
97
+ ```
98
+
99
+ ---
100
+
101
+ ## 4. Configuration for CI/CD
102
+
103
+ ```typescript
104
+ // playwright.config.ts
105
+ import { defineConfig, devices } from '@playwright/test';
106
+
107
+ export default defineConfig({
108
+ testDir: './tests/e2e',
109
+ fullyParallel: true, // Run tests concurrently
110
+ forbidOnly: !!process.env.CI, // Fail build if `.only` was left in code
111
+ retries: process.env.CI ? 2 : 0, // Retry flakes on CI only
112
+ workers: process.env.CI ? 1 : undefined, // Reduce CI overload
113
+ reporter: 'html',
114
+
115
+ use: {
116
+ trace: 'on-first-retry', // Record trace viewer ONLY on failure to save space
117
+ video: 'retain-on-failure',
118
+ baseURL: 'http://localhost:3000',
119
+ },
120
+
121
+ projects: [
122
+ { name: 'chromium', use: { ...devices['Desktop Chrome'] } },
123
+ { name: 'webkit', use: { ...devices['Desktop Safari'] } },
124
+ // Mobile Viewport Example
125
+ { name: 'Mobile Safari', use: { ...devices['iPhone 13'] } },
126
+ ],
127
+
128
+ // Spin up local server before running tests
129
+ webServer: {
130
+ command: 'npm run build && npm run start',
131
+ url: 'http://localhost:3000',
132
+ reuseExistingServer: !process.env.CI,
133
+ },
134
+ });
135
+ ```
136
+
137
+ ---
@@ -1,146 +1,112 @@
1
- ---
2
- name: powershell-windows
3
- description: PowerShell and Windows environment mastery. Object-oriented piping, strict error handling (ErrorActionPreference), PSProviders, active directory querying, credential management, and execution policies. Use when automating Azure, Windows environments, or writing .ps1 scripts.
4
- allowed-tools: Read, Write, Edit, Glob, Grep
5
- version: 2.0.0
6
- last-updated: 2026-04-02
7
- applies-to-model: gemini-2.5-pro, claude-3-7-sonnet
8
- ---
9
-
10
- # PowerShell — Windows Automation Mastery
11
-
12
- > PowerShell does not pipe text. It pipes rich .NET Objects.
13
- > Your Bash instincts will betray you here. Think in structured data, not regex.
14
-
15
- ---
16
-
17
- ## 1. The Object Pipeline
18
-
19
- Unlike Bash where everything is strings (requiring `awk`/`grep`), PowerShell passes structured .NET class instances between commands.
20
-
21
- ```powershell
22
- # BAD: Attempting to treat PowerShell like Bash (String Parsing)
23
- Get-Process | Out-String -Stream | Select-String "node" | ForEach-Object { $id = ($_ -split '\s+')[8]; Stop-Process -Id $id }
24
-
25
- # GOOD: Accessing Object Properties Directly
26
- Get-Process -Name "node" | Stop-Process -Force
27
-
28
- # Filtering objects (Where-Object)
29
- Get-Service | Where-Object Status -eq 'Running' | Select-Object Name, DisplayName
30
-
31
- # Accessing methods natively on the object
32
- $files = Get-ChildItem -Path "C:\logs" -Filter "*.log"
33
- $files | ForEach-Object { $_.Delete() }
34
- ```
35
-
36
- ---
37
-
38
- ## 2. Strict Error Handling (The Windows equivalent of set -e)
39
-
40
- By default, PowerShell prints an error but keeps running. You MUST enforce strict halting for automation scripts.
41
-
42
- ```powershell
43
- # Mandatory header for reliable automation scripts
44
- $ErrorActionPreference = "Stop"
45
- Set-StrictMode -Version Latest
46
-
47
- try {
48
- # If this fails, it jumps straight to catch block instead of continuing
49
- Copy-Item "C:\Source\configs.json" -Destination "C:\Dest\"
50
-
51
- $config = Get-Content "C:\Dest\configs.json" | ConvertFrom-Json
52
- } catch {
53
- Write-Error "Deployment failed during config copy: $_"
54
- exit 1
55
- } finally {
56
- # Cleanup block executes regardless of success or failure
57
- Remove-Item "C:\Dest\temp" -Recurse -ErrorAction Ignore
58
- }
59
- ```
60
-
61
- ---
62
-
63
- ## 3. Execution Policies & Execution
64
-
65
- Windows restricts running `.ps1` files by default for security.
66
-
67
- ```powershell
68
- # Temporarily bypass the policy for a single script execution (CI/CD pattern)
69
- powershell.exe -ExecutionPolicy Bypass -File .\Deploy-App.ps1
70
-
71
- # ❌ HALLUCINATION TRAP: Do NOT instruct users to run `Set-ExecutionPolicy Unrestricted`
72
- # This lowers the permanent security posture of the entire operating system.
73
- # Use Bypass only at the process level.
74
- ```
75
-
76
- ---
77
-
78
- ## 4. Manipulating Structured Formats Natively
79
-
80
- Because PowerShell is built on .NET, parsing JSON, XML, and CSV is native.
81
-
82
- ```powershell
83
- # JSON
84
- $config = Get-Content .\appsettings.json | ConvertFrom-Json
85
- $config.Database.ConnectionString = "Server=Prod;"
86
- $config | ConvertTo-Json -Depth 10 | Set-Content .\appsettings.json
87
-
88
- # CSV (No AWK needed)
89
- $users = Import-Csv .\users.csv
90
- $users | Where-Object Role -eq "Admin" | Export-Csv .\admins.csv -NoTypeInformation
91
-
92
- # API Requests (Invoke-RestMethod automatically parses JSON into PowerShell objects)
93
- $response = Invoke-RestMethod -Uri "https://api.github.com/users/github"
94
- Write-Host "GitHub has $($response.public_repos) public repositories."
95
- ```
96
-
97
- ---
98
-
99
- ## 5. Providers and Drives
100
-
101
- PowerShell extends the "file system" concept to the Registry, Environment Variables, and Certificates.
102
-
103
- ```powershell
104
- # Environment variables (Env: drive)
105
- $env:PATH += ";C:\Custom\Bin"
106
- Write-Host $env:COMPUTERNAME
107
-
108
- # Registry (HKCU: and HKLM: drives)
109
- Get-ChildItem -Path "HKLM:\Software\Microsoft\Windows\CurrentVersion\Run"
110
-
111
- # Certificates (Cert: drive)
112
- Get-ChildItem -Path "Cert:\LocalMachine\My" | Where-Object Subject -match "example.com"
113
- ```
114
-
115
- ---
116
-
117
- ## 🤖 LLM-Specific Traps (PowerShell)
118
-
119
- 1. **Bash Equivalencies:** AI writing `Test-Path | regex` instead of dealing with properties. Always use object properties (`$obj.Length`, `$obj.Name`).
120
- 2. **Missing `ErrorActionPreference`:** Continuing execution blindly after a critical `Copy-Item` command fails. Always set preference to "Stop".
121
- 3. **Execution Policy Destruction:** Instructing users to permanently change global machine policy to run a script. Always use `-ExecutionPolicy Bypass` natively.
122
- 4. **JSON Conversion Depth limits:** `ConvertTo-Json` defaults to a depth of only 2. It will ruthlessly truncate your nested API payloads silently unless you append `-Depth 10`.
123
- 5. **Return Types in Functions:** PowerShell returns EVERYTHING that hits the pipeline inside a function, not just the `return` statement. Explicitly cast silent operations to `$null` or pipe to `Out-Null`. (e.g., `$list.Add("item") | Out-Null`).
124
- 6. **Comparison Operators:** AI uses `>` or `==`. PowerShell requires `-gt`, `-eq`, `-ne`, `-lt`.
125
- 7. **Backtick Continuation:** Using the backtick `` ` `` as a line continuation character randomly. It is notoriously hard to read and breaks if there's a trailing space. Use proper pipeline formatting or array declarations.
126
- 8. **Paths with Spaces:** Similar to bash, failing to wrap paths in string quotes when executing. `& "C:\Program Files\Node\npm.cmd" install`.
127
- 9. **`Out-File` vs `Set-Content` Encryption:** AI writing configs using `Out-File` defaults to UTF-16 on older PowerShell versions, breaking Linux/Docker containers. Standardize on `Set-Content` or explicitly declare `-Encoding UTF8`.
128
- 10. **`Write-Host` vs `Write-Output`:** AI uses `Write-Host` to return data from functions. `Write-Host` goes straight to the console display buffer. Always use `Write-Output` if you want another variable or pipe to catch the return data.
129
-
130
- ---
131
-
132
- ## 🏛️ Tribunal Integration
133
-
134
- ### ✅ Pre-Flight Self-Audit
135
- ```
136
- ✅ Have I forced strict error catching via `$ErrorActionPreference = "Stop"`?
137
- ✅ Am I manipulating objects (e.g., `Where-Object`) rather than string parsing?
138
- ✅ If I invoked `ConvertTo-Json`, did I set `-Depth 10` (or higher)?
139
- ✅ Are my comparison operators using PowerShell syntax (`-eq`, `-gt`) instead of (`==`, `>`)?
140
- ✅ Did I use `-ExecutionPolicy Bypass` rather than recommending global registry changes?
141
- ✅ Is text encoded correctly to UTF8 via `Set-Content` instead of `Out-File`?
142
- ✅ Did I return data from my functions via `Write-Output` instead of `Write-Host`?
143
- ✅ Are array modifications piped to `Out-Null` to prevent pipeline pollution?
144
- ✅ Is `Invoke-RestMethod` leveraged for APIs instead of the heavier `Invoke-WebRequest`?
145
- ✅ Are commands with spaces invoked using the call operator `& "Path\To\File"`?
146
- ```
1
+ ---
2
+ name: powershell-windows
3
+ description: PowerShell and Windows environment mastery. Object-oriented piping, strict error handling (ErrorActionPreference), PSProviders, active directory querying, credential management, and execution policies. Use when automating Azure, Windows environments, or writing .ps1 scripts.
4
+ allowed-tools: Read, Write, Edit, Glob, Grep
5
+ version: 2.0.0
6
+ last-updated: 2026-04-02
7
+ applies-to-model: gemini-2.5-pro, claude-3-7-sonnet
8
+ ---
9
+
10
+ # PowerShell — Windows Automation Mastery
11
+
12
+ ---
13
+
14
+ ## 1. The Object Pipeline
15
+
16
+ Unlike Bash where everything is strings (requiring `awk`/`grep`), PowerShell passes structured .NET class instances between commands.
17
+
18
+ ```powershell
19
+ # BAD: Attempting to treat PowerShell like Bash (String Parsing)
20
+ Get-Process | Out-String -Stream | Select-String "node" | ForEach-Object { $id = ($_ -split '\s+')[8]; Stop-Process -Id $id }
21
+
22
+ # GOOD: Accessing Object Properties Directly
23
+ Get-Process -Name "node" | Stop-Process -Force
24
+
25
+ # Filtering objects (Where-Object)
26
+ Get-Service | Where-Object Status -eq 'Running' | Select-Object Name, DisplayName
27
+
28
+ # Accessing methods natively on the object
29
+ $files = Get-ChildItem -Path "C:\logs" -Filter "*.log"
30
+ $files | ForEach-Object { $_.Delete() }
31
+ ```
32
+
33
+ ---
34
+
35
+ ## 2. Strict Error Handling (The Windows equivalent of set -e)
36
+
37
+ By default, PowerShell prints an error but keeps running. You MUST enforce strict halting for automation scripts.
38
+
39
+ ```powershell
40
+ # Mandatory header for reliable automation scripts
41
+ $ErrorActionPreference = "Stop"
42
+ Set-StrictMode -Version Latest
43
+
44
+ try {
45
+ # If this fails, it jumps straight to catch block instead of continuing
46
+ Copy-Item "C:\Source\configs.json" -Destination "C:\Dest\"
47
+
48
+ $config = Get-Content "C:\Dest\configs.json" | ConvertFrom-Json
49
+ } catch {
50
+ Write-Error "Deployment failed during config copy: $_"
51
+ exit 1
52
+ } finally {
53
+ # Cleanup block executes regardless of success or failure
54
+ Remove-Item "C:\Dest\temp" -Recurse -ErrorAction Ignore
55
+ }
56
+ ```
57
+
58
+ ---
59
+
60
+ ## 3. Execution Policies & Execution
61
+
62
+ Windows restricts running `.ps1` files by default for security.
63
+
64
+ ```powershell
65
+ # Temporarily bypass the policy for a single script execution (CI/CD pattern)
66
+ powershell.exe -ExecutionPolicy Bypass -File .\Deploy-App.ps1
67
+
68
+ # HALLUCINATION TRAP: Do NOT instruct users to run `Set-ExecutionPolicy Unrestricted`
69
+ # This lowers the permanent security posture of the entire operating system.
70
+ # Use Bypass only at the process level.
71
+ ```
72
+
73
+ ---
74
+
75
+ ## 4. Manipulating Structured Formats Natively
76
+
77
+ Because PowerShell is built on .NET, parsing JSON, XML, and CSV is native.
78
+
79
+ ```powershell
80
+ # JSON
81
+ $config = Get-Content .\appsettings.json | ConvertFrom-Json
82
+ $config.Database.ConnectionString = "Server=Prod;"
83
+ $config | ConvertTo-Json -Depth 10 | Set-Content .\appsettings.json
84
+
85
+ # CSV (No AWK needed)
86
+ $users = Import-Csv .\users.csv
87
+ $users | Where-Object Role -eq "Admin" | Export-Csv .\admins.csv -NoTypeInformation
88
+
89
+ # API Requests (Invoke-RestMethod automatically parses JSON into PowerShell objects)
90
+ $response = Invoke-RestMethod -Uri "https://api.github.com/users/github"
91
+ Write-Host "GitHub has $($response.public_repos) public repositories."
92
+ ```
93
+
94
+ ---
95
+
96
+ ## 5. Providers and Drives
97
+
98
+ PowerShell extends the "file system" concept to the Registry, Environment Variables, and Certificates.
99
+
100
+ ```powershell
101
+ # Environment variables (Env: drive)
102
+ $env:PATH += ";C:\Custom\Bin"
103
+ Write-Host $env:COMPUTERNAME
104
+
105
+ # Registry (HKCU: and HKLM: drives)
106
+ Get-ChildItem -Path "HKLM:\Software\Microsoft\Windows\CurrentVersion\Run"
107
+
108
+ # Certificates (Cert: drive)
109
+ Get-ChildItem -Path "Cert:\LocalMachine\My" | Where-Object Subject -match "example.com"
110
+ ```
111
+
112
+ ---