tribunal-kit 2.4.6 → 3.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 (142) hide show
  1. package/.agent/agents/accessibility-reviewer.md +220 -134
  2. package/.agent/agents/ai-code-reviewer.md +233 -129
  3. package/.agent/agents/backend-specialist.md +238 -178
  4. package/.agent/agents/code-archaeologist.md +181 -119
  5. package/.agent/agents/database-architect.md +207 -164
  6. package/.agent/agents/debugger.md +218 -151
  7. package/.agent/agents/dependency-reviewer.md +136 -55
  8. package/.agent/agents/devops-engineer.md +238 -175
  9. package/.agent/agents/documentation-writer.md +221 -137
  10. package/.agent/agents/explorer-agent.md +180 -142
  11. package/.agent/agents/frontend-reviewer.md +194 -80
  12. package/.agent/agents/frontend-specialist.md +237 -188
  13. package/.agent/agents/game-developer.md +52 -184
  14. package/.agent/agents/logic-reviewer.md +149 -78
  15. package/.agent/agents/mobile-developer.md +223 -152
  16. package/.agent/agents/mobile-reviewer.md +195 -79
  17. package/.agent/agents/orchestrator.md +211 -170
  18. package/.agent/agents/penetration-tester.md +174 -131
  19. package/.agent/agents/performance-optimizer.md +203 -139
  20. package/.agent/agents/performance-reviewer.md +211 -108
  21. package/.agent/agents/product-manager.md +162 -108
  22. package/.agent/agents/project-planner.md +162 -142
  23. package/.agent/agents/qa-automation-engineer.md +242 -138
  24. package/.agent/agents/security-auditor.md +194 -170
  25. package/.agent/agents/seo-specialist.md +213 -132
  26. package/.agent/agents/sql-reviewer.md +194 -73
  27. package/.agent/agents/supervisor-agent.md +203 -156
  28. package/.agent/agents/test-coverage-reviewer.md +193 -81
  29. package/.agent/agents/type-safety-reviewer.md +208 -65
  30. package/.agent/scripts/__pycache__/auto_preview.cpython-311.pyc +0 -0
  31. package/.agent/scripts/__pycache__/bundle_analyzer.cpython-311.pyc +0 -0
  32. package/.agent/scripts/__pycache__/checklist.cpython-311.pyc +0 -0
  33. package/.agent/scripts/__pycache__/dependency_analyzer.cpython-311.pyc +0 -0
  34. package/.agent/scripts/__pycache__/security_scan.cpython-311.pyc +0 -0
  35. package/.agent/scripts/__pycache__/session_manager.cpython-311.pyc +0 -0
  36. package/.agent/scripts/__pycache__/skill_integrator.cpython-311.pyc +0 -0
  37. package/.agent/scripts/__pycache__/swarm_dispatcher.cpython-311.pyc +0 -0
  38. package/.agent/scripts/__pycache__/test_runner.cpython-311.pyc +0 -0
  39. package/.agent/scripts/__pycache__/verify_all.cpython-311.pyc +0 -0
  40. package/.agent/skills/agent-organizer/SKILL.md +126 -132
  41. package/.agent/skills/ai-prompt-injection-defense/SKILL.md +155 -66
  42. package/.agent/skills/api-patterns/SKILL.md +289 -257
  43. package/.agent/skills/api-security-auditor/SKILL.md +172 -70
  44. package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +1 -1
  45. package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +1 -1
  46. package/.agent/skills/appflow-wireframe/SKILL.md +107 -100
  47. package/.agent/skills/architecture/SKILL.md +331 -200
  48. package/.agent/skills/authentication-best-practices/SKILL.md +168 -67
  49. package/.agent/skills/bash-linux/SKILL.md +154 -215
  50. package/.agent/skills/brainstorming/SKILL.md +104 -210
  51. package/.agent/skills/building-native-ui/SKILL.md +169 -70
  52. package/.agent/skills/clean-code/SKILL.md +360 -206
  53. package/.agent/skills/config-validator/SKILL.md +141 -165
  54. package/.agent/skills/csharp-developer/SKILL.md +528 -107
  55. package/.agent/skills/database-design/SKILL.md +455 -275
  56. package/.agent/skills/deployment-procedures/SKILL.md +145 -188
  57. package/.agent/skills/devops-engineer/SKILL.md +332 -134
  58. package/.agent/skills/devops-incident-responder/SKILL.md +113 -98
  59. package/.agent/skills/edge-computing/SKILL.md +157 -213
  60. package/.agent/skills/extract-design-system/SKILL.md +129 -69
  61. package/.agent/skills/framer-motion-expert/SKILL.md +939 -0
  62. package/.agent/skills/game-design-expert/SKILL.md +105 -0
  63. package/.agent/skills/game-engineering-expert/SKILL.md +122 -0
  64. package/.agent/skills/geo-fundamentals/SKILL.md +124 -215
  65. package/.agent/skills/github-operations/SKILL.md +314 -354
  66. package/.agent/skills/gsap-expert/SKILL.md +901 -0
  67. package/.agent/skills/i18n-localization/SKILL.md +138 -216
  68. package/.agent/skills/intelligent-routing/SKILL.md +127 -139
  69. package/.agent/skills/llm-engineering/SKILL.md +357 -258
  70. package/.agent/skills/local-first/SKILL.md +154 -203
  71. package/.agent/skills/mcp-builder/SKILL.md +118 -224
  72. package/.agent/skills/nextjs-react-expert/SKILL.md +783 -203
  73. package/.agent/skills/nodejs-best-practices/SKILL.md +559 -280
  74. package/.agent/skills/observability/SKILL.md +330 -285
  75. package/.agent/skills/parallel-agents/SKILL.md +122 -181
  76. package/.agent/skills/performance-profiling/SKILL.md +254 -197
  77. package/.agent/skills/plan-writing/SKILL.md +118 -188
  78. package/.agent/skills/platform-engineer/SKILL.md +123 -135
  79. package/.agent/skills/playwright-best-practices/SKILL.md +157 -76
  80. package/.agent/skills/powershell-windows/SKILL.md +146 -230
  81. package/.agent/skills/python-pro/SKILL.md +879 -114
  82. package/.agent/skills/react-specialist/SKILL.md +931 -108
  83. package/.agent/skills/realtime-patterns/SKILL.md +304 -296
  84. package/.agent/skills/rust-pro/SKILL.md +701 -240
  85. package/.agent/skills/seo-fundamentals/SKILL.md +154 -181
  86. package/.agent/skills/server-management/SKILL.md +190 -212
  87. package/.agent/skills/shadcn-ui-expert/SKILL.md +201 -68
  88. package/.agent/skills/sql-pro/SKILL.md +633 -104
  89. package/.agent/skills/swiftui-expert/SKILL.md +171 -70
  90. package/.agent/skills/systematic-debugging/SKILL.md +118 -186
  91. package/.agent/skills/tailwind-patterns/SKILL.md +576 -232
  92. package/.agent/skills/tdd-workflow/SKILL.md +137 -209
  93. package/.agent/skills/testing-patterns/SKILL.md +573 -205
  94. package/.agent/skills/vue-expert/SKILL.md +964 -119
  95. package/.agent/skills/vulnerability-scanner/SKILL.md +269 -316
  96. package/.agent/skills/web-accessibility-auditor/SKILL.md +188 -71
  97. package/.agent/skills/webapp-testing/SKILL.md +145 -236
  98. package/.agent/workflows/api-tester.md +151 -279
  99. package/.agent/workflows/audit.md +138 -168
  100. package/.agent/workflows/brainstorm.md +110 -146
  101. package/.agent/workflows/changelog.md +112 -144
  102. package/.agent/workflows/create.md +124 -139
  103. package/.agent/workflows/debug.md +189 -196
  104. package/.agent/workflows/deploy.md +189 -153
  105. package/.agent/workflows/enhance.md +151 -139
  106. package/.agent/workflows/fix.md +135 -143
  107. package/.agent/workflows/generate.md +157 -164
  108. package/.agent/workflows/migrate.md +160 -163
  109. package/.agent/workflows/orchestrate.md +168 -151
  110. package/.agent/workflows/performance-benchmarker.md +123 -305
  111. package/.agent/workflows/plan.md +173 -151
  112. package/.agent/workflows/preview.md +80 -137
  113. package/.agent/workflows/refactor.md +183 -153
  114. package/.agent/workflows/review-ai.md +129 -140
  115. package/.agent/workflows/review.md +116 -155
  116. package/.agent/workflows/session.md +94 -154
  117. package/.agent/workflows/status.md +79 -125
  118. package/.agent/workflows/strengthen-skills.md +139 -99
  119. package/.agent/workflows/swarm.md +179 -194
  120. package/.agent/workflows/test.md +211 -166
  121. package/.agent/workflows/tribunal-backend.md +113 -111
  122. package/.agent/workflows/tribunal-database.md +115 -132
  123. package/.agent/workflows/tribunal-frontend.md +118 -115
  124. package/.agent/workflows/tribunal-full.md +133 -136
  125. package/.agent/workflows/tribunal-mobile.md +119 -123
  126. package/.agent/workflows/tribunal-performance.md +133 -152
  127. package/.agent/workflows/ui-ux-pro-max.md +143 -171
  128. package/README.md +11 -15
  129. package/package.json +1 -1
  130. package/.agent/skills/dotnet-core-expert/SKILL.md +0 -103
  131. package/.agent/skills/framer-motion-animations/SKILL.md +0 -74
  132. package/.agent/skills/game-development/2d-games/SKILL.md +0 -119
  133. package/.agent/skills/game-development/3d-games/SKILL.md +0 -135
  134. package/.agent/skills/game-development/SKILL.md +0 -236
  135. package/.agent/skills/game-development/game-art/SKILL.md +0 -185
  136. package/.agent/skills/game-development/game-audio/SKILL.md +0 -190
  137. package/.agent/skills/game-development/game-design/SKILL.md +0 -129
  138. package/.agent/skills/game-development/mobile-games/SKILL.md +0 -108
  139. package/.agent/skills/game-development/multiplayer/SKILL.md +0 -132
  140. package/.agent/skills/game-development/pc-games/SKILL.md +0 -144
  141. package/.agent/skills/game-development/vr-ar/SKILL.md +0 -123
  142. package/.agent/skills/game-development/web-games/SKILL.md +0 -150
@@ -1,81 +1,162 @@
1
1
  ---
2
2
  name: playwright-best-practices
3
- description: End-to-end testing expert specializing in Playwright. Focuses on robust selectors, auto-waiting, parallelization, and reducing flaky tests.
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
4
  allowed-tools: Read, Write, Edit, Glob, Grep
5
- version: 1.0.0
6
- last-updated: 2026-03-30
7
- applies-to-model: claude-3-7-sonnet, gemini-2.5-pro
5
+ version: 2.0.0
6
+ last-updated: 2026-04-02
7
+ applies-to-model: gemini-2.5-pro, claude-3-7-sonnet
8
8
  ---
9
9
 
10
- # Playwright Best Practices
11
-
12
- You are an expert in End-to-End (E2E) testing utilizing Playwright. Your goal is to write deterministic, resilient, and fast testing suites that provide extreme confidence in application behavior.
13
-
14
- ## Core Directives
15
-
16
- 1. **Locator Strategy:**
17
- - Always prefer user-facing locators: `getByRole`, `getByText`, `getByLabel`.
18
- - Never use XPath or highly coupled CSS selectors (e.g., `.container > div > span`) unless absolutely necessary.
19
- - For components needing strict test-binding, use `data-testid` via `getByTestId`.
20
-
21
- 2. **Auto-Waiting & Assertions:**
22
- - Playwright automatically waits for elements to be actionable. Never insert explicit `page.waitForTimeout(5000)` unless debugging.
23
- - Use web-first assertions: `await expect(locator).toBeVisible()`, `await expect(locator).toHaveText()`. Do not use standard Node.js assertions `assert(true)` for DOM state.
24
-
25
- 3. **Authentication & Setup:**
26
- - Utilize global setup (`globalSetup` or `test.beforeAll`) for authentication.
27
- - Save the authentication state (cookies/local storage) into a reusable state file (e.g., `playwright/.auth/user.json`) to skip login UI flows during testing.
28
-
29
- 4. **Parallelization & Structure:**
30
- - Group related tests logically using `test.describe`.
31
- - Keep tests independent. Tests should not rely on state mutated by previous tests.
32
- - Clean up data after tests using `test.afterEach` or isolated contexts.
33
-
34
- ## Output Format
35
-
36
- When creating or modifying tests:
37
- 1. Explain the User Journey being tested.
38
- 2. Outline the steps and assertions.
39
- 3. Provide the full test code incorporating the best practices above.
40
-
41
-
42
- ---
43
-
44
- ## 🤖 LLM-Specific Traps
45
-
46
- AI coding assistants often fall into specific bad habits when dealing with this domain. These are strictly forbidden:
47
-
48
- 1. **Over-engineering:** Proposing complex abstractions or distributed systems when a simpler approach suffices.
49
- 2. **Hallucinated Libraries/Methods:** Using non-existent methods or packages. Always `// VERIFY` or check `package.json` / `requirements.txt`.
50
- 3. **Skipping Edge Cases:** Writing the "happy path" and ignoring error handling, timeouts, or data validation.
51
- 4. **Context Amnesia:** Forgetting the user's constraints and offering generic advice instead of tailored solutions.
52
- 5. **Silent Degradation:** Catching and suppressing errors without logging or re-raising.
53
-
54
- ---
55
-
56
- ## 🏛️ Tribunal Integration (Anti-Hallucination)
57
-
58
- **Slash command: `/review` or `/tribunal-full`**
59
- **Active reviewers: `logic-reviewer` · `security-auditor`**
60
-
61
- ### Forbidden AI Tropes
62
-
63
- 1. **Blind Assumptions:** Never make an assumption without documenting it clearly with `// VERIFY: [reason]`.
64
- 2. **Silent Degradation:** Catching and suppressing errors without logging or handling.
65
- 3. **Context Amnesia:** Forgetting the user's constraints and offering generic advice instead of tailored solutions.
66
-
67
- ### Pre-Flight Self-Audit
68
-
69
- Review these questions before confirming output:
70
- ```
71
- ✅ Did I rely ONLY on real, verified tools and methods?
72
- ✅ Is this solution appropriately scoped to the user's constraints?
73
- ✅ Did I handle potential failure modes and edge cases?
74
- ✅ Have I avoided generic boilerplate that doesn't add value?
75
- ```
76
-
77
- ### 🛑 Verification-Before-Completion (VBC) Protocol
78
-
79
- **CRITICAL:** You must follow a strict "evidence-based closeout" state machine.
80
- - **Forbidden:** Declaring a task complete because the output "looks correct."
81
- - **Required:** You are explicitly forbidden from finalizing any task without providing **concrete evidence** (terminal output, passing tests, compile success, or equivalent proof) that your output works as intended.
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,230 +1,146 @@
1
- ---
2
- name: powershell-windows
3
- description: PowerShell Windows patterns. Critical pitfalls, operator syntax, error handling.
4
- allowed-tools: Read, Write, Edit, Glob, Grep
5
- version: 1.0.0
6
- last-updated: 2026-03-12
7
- applies-to-model: gemini-2.5-pro, claude-3-7-sonnet
8
- ---
9
-
10
- # PowerShell on Windows
11
-
12
- > PowerShell is not bash with a Windows accent.
13
- > It is object-based, not text-based. That changes everything.
14
-
15
- ---
16
-
17
- ## Core Difference: Objects, Not Text
18
-
19
- Every PowerShell command returns objects, not strings. This is the foundational difference from bash.
20
-
21
- ```powershell
22
- # bash: 'ls' returns text you parse
23
- ls -la | awk '{print $9}'
24
-
25
- # PowerShell: Get-ChildItem returns objects you access directly
26
- Get-ChildItem | Select-Object Name, Length
27
- (Get-ChildItem ".\src").Count # count files directly
28
- ```
29
-
30
- This means string parsing (grep, awk, cut) is often unnecessary in PowerShell.
31
-
32
- ---
33
-
34
- ## Critical Operator Pitfalls
35
-
36
- PowerShell comparison operators use letters, not symbols:
37
-
38
- | Operation | PowerShell | NOT This |
39
- |---|---|---|
40
- | Equal | `-eq` | `==` |
41
- | Not equal | `-ne` | `!=` |
42
- | Greater than | `-gt` | `>` |
43
- | Less than | `-lt` | `<` |
44
- | Like (wildcard) | `-like "*.ts"` | — |
45
- | Match (regex) | `-match "pattern"` | — |
46
- | Contains | `-contains "val"` | — |
47
-
48
- ```powershell
49
- # This doesn't compare — it redirects output
50
- if ($count == 5) { ... }
51
-
52
- # Correct PowerShell comparison
53
- if ($count -eq 5) { ... }
54
- ```
55
-
56
- ---
57
-
58
- ## Path Handling
59
-
60
- Windows paths have backslashes but PowerShell handles both:
61
-
62
- ```powershell
63
- # Both work in PowerShell
64
- $path = "C:\Users\username\project"
65
- $path = "C:/Users/username/project"
66
-
67
- # Use Join-Path for safe cross-platform joins
68
- $full = Join-Path $env:USERPROFILE "Desktop\project"
69
-
70
- # Resolve to absolute path
71
- $abs = Resolve-Path ".\relative\path"
72
-
73
- # Test existence before using
74
- if (Test-Path $path) { ... }
75
- if (Test-Path $path -PathType Container) { ... } # is it a directory?
76
- if (Test-Path $path -PathType Leaf) { ... } # is it a file?
77
- ```
78
-
79
- ---
80
-
81
- ## Error Handling
82
-
83
- PowerShell has two error types: terminating and non-terminating.
84
-
85
- ```powershell
86
- # Stop on any error (like bash set -e)
87
- $ErrorActionPreference = 'Stop'
88
-
89
- # Try/Catch only catches terminating errors
90
- try {
91
- Remove-Item "nonexistent.txt" -ErrorAction Stop
92
- } catch {
93
- Write-Host "Error: $_" -ForegroundColor Red
94
- exit 1
95
- }
96
-
97
- # Handle non-terminating errors
98
- $result = Get-Item "maybe.txt" -ErrorAction SilentlyContinue
99
- if (-not $result) {
100
- Write-Host "File not found"
101
- }
102
- ```
103
-
104
- ---
105
-
106
- ## String Handling
107
-
108
- ```powershell
109
- # Single quotes = literal (no variable expansion)
110
- $name = 'world'
111
- Write-Host 'Hello $name' # outputs: Hello $name
112
-
113
- # Double quotes = interpolation
114
- Write-Host "Hello $name" # outputs: Hello world
115
-
116
- # Here-string for multiline
117
- $block = @"
118
- Line 1
119
- Line 2
120
- Value: $name
121
- "@
122
-
123
- # String operations
124
- $str.ToLower()
125
- $str.Replace("old", "new")
126
- $str.Split(",")
127
- $str.Trim()
128
- $str -like "*.ts" # wildcard match
129
- $str -match "^\d{4}$" # regex match
130
- ```
131
-
132
- ---
133
-
134
- ## Useful Patterns
135
-
136
- ```powershell
137
- # Get script directory (equivalent of bash's $SCRIPT_DIR)
138
- $ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
139
-
140
- # Run command and capture output WITH error handling
141
- $output = & git status 2>&1
142
- if ($LASTEXITCODE -ne 0) {
143
- Write-Error "git failed: $output"
144
- exit 1
145
- }
146
-
147
- # Iterate files matching pattern
148
- Get-ChildItem ".\src" -Recurse -Filter "*.ts" | ForEach-Object {
149
- Write-Host $_.FullName
150
- }
151
-
152
- # Create directory if not exists
153
- New-Item -ItemType Directory -Force ".\output" | Out-Null
154
-
155
- # Read/write files
156
- $content = Get-Content ".\file.txt" -Raw
157
- Set-Content ".\output.txt" "new content"
158
- Add-Content ".\log.txt" "append this line"
159
-
160
- # Environment variables
161
- $env:MY_VAR = "value" # set
162
- [System.Environment]::GetEnvironmentVariable("PATH") # read system-level
163
- ```
164
-
165
- ---
166
-
167
- ## Execution Policy
168
-
169
- Scripts may be blocked by execution policy:
170
-
171
- ```powershell
172
- # Check current policy
173
- Get-ExecutionPolicy
174
-
175
- # Allow local scripts (most permissive safe setting)
176
- Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
177
-
178
- # Run a specific script bypassing policy (one-time)
179
- powershell -ExecutionPolicy Bypass -File script.ps1
180
- ```
181
-
182
- ---
183
-
184
- ## Output Format
185
-
186
- When this skill produces or reviews code, structure your output as follows:
187
-
188
- ```
189
- ━━━ Powershell Windows Report ━━━━━━━━━━━━━━━━━━━━━━━━
190
- Skill: Powershell Windows
191
- Language: [detected language / framework]
192
- Scope: [N files · N functions]
193
- ─────────────────────────────────────────────────
194
- ✅ Passed: [checks that passed, or "All clean"]
195
- ⚠️ Warnings: [non-blocking issues, or "None"]
196
- ❌ Blocked: [blocking issues requiring fix, or "None"]
197
- ─────────────────────────────────────────────────
198
- VBC status: PENDING → VERIFIED
199
- Evidence: [test output / lint pass / compile success]
200
- ```
201
-
202
- **VBC (Verification-Before-Completion) is mandatory.**
203
- Do not mark status as VERIFIED until concrete terminal evidence is provided.
204
-
205
-
206
- ---
207
-
208
- ## 🏛️ Tribunal Integration (Anti-Hallucination)
209
-
210
- **Slash command: `/audit` or `/review`**
211
- **Active reviewers: `logic` · `security` · `devops`**
212
-
213
- ### ❌ Forbidden AI Tropes in PowerShell
214
-
215
- 1. **Using Bash Operators** — writing `==` or `!=` instead of `-eq` or `-ne`.
216
- 2. **Text Parsing Over Objects** — extracting properties with regex instead of just accessing `$obj.Property`.
217
- 3. **Ignoring Execution Policies** — writing scripts without considering that they might be blocked on the user's machine.
218
- 4. **Silent Failures** — relying on generic `catch` blocks without understanding terminating vs non-terminating errors.
219
- 5. **Path Separator Errors** — failing to wrap path operations in safe cmdlets like `Join-Path` or `Test-Path`.
220
-
221
- ### ✅ Pre-Flight Self-Audit
222
-
223
- Review these questions before generating PowerShell commands:
224
- ```
225
- ✅ Did I use the correct comparison operators (e.g., `-gt`, `-like`)?
226
- ✅ Did I leverage PowerShell's object pipeline instead of parsing text?
227
- ✅ Are paths safely manipulated (e.g., `Join-Path`) to handle Windows backslashes correctly?
228
- ✅ Are potential non-terminating errors handled explicitly?
229
- ✅ Will this script require an execution policy bypass, and did I note that for the user?
230
- ```
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
+ ```