tribunal-kit 2.4.6 → 3.1.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 (250) hide show
  1. package/.agent/ARCHITECTURE.md +99 -99
  2. package/.agent/GEMINI.md +52 -52
  3. package/.agent/agents/accessibility-reviewer.md +139 -86
  4. package/.agent/agents/ai-code-reviewer.md +160 -90
  5. package/.agent/agents/backend-specialist.md +164 -127
  6. package/.agent/agents/code-archaeologist.md +115 -73
  7. package/.agent/agents/database-architect.md +130 -110
  8. package/.agent/agents/debugger.md +137 -97
  9. package/.agent/agents/dependency-reviewer.md +78 -30
  10. package/.agent/agents/devops-engineer.md +161 -118
  11. package/.agent/agents/documentation-writer.md +151 -87
  12. package/.agent/agents/explorer-agent.md +117 -99
  13. package/.agent/agents/frontend-reviewer.md +127 -47
  14. package/.agent/agents/frontend-specialist.md +169 -109
  15. package/.agent/agents/game-developer.md +28 -164
  16. package/.agent/agents/logic-reviewer.md +87 -49
  17. package/.agent/agents/mobile-developer.md +151 -103
  18. package/.agent/agents/mobile-reviewer.md +133 -50
  19. package/.agent/agents/orchestrator.md +121 -110
  20. package/.agent/agents/penetration-tester.md +103 -77
  21. package/.agent/agents/performance-optimizer.md +136 -92
  22. package/.agent/agents/performance-reviewer.md +139 -69
  23. package/.agent/agents/product-manager.md +104 -70
  24. package/.agent/agents/product-owner.md +6 -25
  25. package/.agent/agents/project-planner.md +95 -95
  26. package/.agent/agents/qa-automation-engineer.md +174 -87
  27. package/.agent/agents/security-auditor.md +133 -129
  28. package/.agent/agents/seo-specialist.md +160 -99
  29. package/.agent/agents/sql-reviewer.md +132 -44
  30. package/.agent/agents/supervisor-agent.md +137 -109
  31. package/.agent/agents/swarm-worker-contracts.md +17 -17
  32. package/.agent/agents/swarm-worker-registry.md +46 -46
  33. package/.agent/agents/test-coverage-reviewer.md +132 -53
  34. package/.agent/agents/test-engineer.md +0 -21
  35. package/.agent/agents/type-safety-reviewer.md +143 -33
  36. package/.agent/patterns/generator.md +9 -9
  37. package/.agent/patterns/inversion.md +12 -12
  38. package/.agent/patterns/pipeline.md +9 -9
  39. package/.agent/patterns/reviewer.md +13 -13
  40. package/.agent/patterns/tool-wrapper.md +9 -9
  41. package/.agent/rules/GEMINI.md +63 -63
  42. package/.agent/scripts/__pycache__/auto_preview.cpython-311.pyc +0 -0
  43. package/.agent/scripts/__pycache__/bundle_analyzer.cpython-311.pyc +0 -0
  44. package/.agent/scripts/__pycache__/checklist.cpython-311.pyc +0 -0
  45. package/.agent/scripts/__pycache__/dependency_analyzer.cpython-311.pyc +0 -0
  46. package/.agent/scripts/__pycache__/security_scan.cpython-311.pyc +0 -0
  47. package/.agent/scripts/__pycache__/session_manager.cpython-311.pyc +0 -0
  48. package/.agent/scripts/__pycache__/skill_integrator.cpython-311.pyc +0 -0
  49. package/.agent/scripts/__pycache__/swarm_dispatcher.cpython-311.pyc +0 -0
  50. package/.agent/scripts/__pycache__/test_runner.cpython-311.pyc +0 -0
  51. package/.agent/scripts/__pycache__/verify_all.cpython-311.pyc +0 -0
  52. package/.agent/scripts/compress_skills.py +167 -0
  53. package/.agent/scripts/consolidate_skills.py +173 -0
  54. package/.agent/scripts/deep_compress.py +202 -0
  55. package/.agent/scripts/minify_context.py +80 -0
  56. package/.agent/scripts/security_scan.py +1 -1
  57. package/.agent/scripts/strip_tribunal.py +41 -0
  58. package/.agent/skills/agent-organizer/SKILL.md +60 -100
  59. package/.agent/skills/agentic-patterns/SKILL.md +0 -70
  60. package/.agent/skills/ai-prompt-injection-defense/SKILL.md +108 -53
  61. package/.agent/skills/api-patterns/SKILL.md +197 -257
  62. package/.agent/skills/api-security-auditor/SKILL.md +125 -57
  63. package/.agent/skills/app-builder/SKILL.md +326 -50
  64. package/.agent/skills/app-builder/templates/SKILL.md +13 -15
  65. package/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +16 -16
  66. package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +22 -22
  67. package/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +18 -18
  68. package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +20 -20
  69. package/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +17 -17
  70. package/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +18 -18
  71. package/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +21 -21
  72. package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +19 -19
  73. package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +26 -26
  74. package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +26 -26
  75. package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +19 -19
  76. package/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +18 -18
  77. package/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +20 -20
  78. package/.agent/skills/appflow-wireframe/SKILL.md +71 -98
  79. package/.agent/skills/architecture/SKILL.md +161 -200
  80. package/.agent/skills/authentication-best-practices/SKILL.md +121 -54
  81. package/.agent/skills/bash-linux/SKILL.md +71 -166
  82. package/.agent/skills/behavioral-modes/SKILL.md +8 -69
  83. package/.agent/skills/brainstorming/SKILL.md +345 -127
  84. package/.agent/skills/building-native-ui/SKILL.md +125 -57
  85. package/.agent/skills/clean-code/SKILL.md +266 -149
  86. package/.agent/skills/code-review-checklist/SKILL.md +0 -62
  87. package/.agent/skills/config-validator/SKILL.md +73 -131
  88. package/.agent/skills/csharp-developer/SKILL.md +434 -73
  89. package/.agent/skills/database-design/SKILL.md +190 -275
  90. package/.agent/skills/deployment-procedures/SKILL.md +81 -158
  91. package/.agent/skills/devops-engineer/SKILL.md +255 -94
  92. package/.agent/skills/devops-incident-responder/SKILL.md +50 -69
  93. package/.agent/skills/doc.md +5 -5
  94. package/.agent/skills/documentation-templates/SKILL.md +19 -63
  95. package/.agent/skills/edge-computing/SKILL.md +75 -165
  96. package/.agent/skills/extract-design-system/SKILL.md +84 -58
  97. package/.agent/skills/framer-motion-expert/SKILL.md +195 -0
  98. package/.agent/skills/frontend-design/SKILL.md +151 -499
  99. package/.agent/skills/game-design-expert/SKILL.md +71 -0
  100. package/.agent/skills/game-engineering-expert/SKILL.md +88 -0
  101. package/.agent/skills/geo-fundamentals/SKILL.md +52 -178
  102. package/.agent/skills/github-operations/SKILL.md +197 -272
  103. package/.agent/skills/gsap-expert/SKILL.md +194 -0
  104. package/.agent/skills/i18n-localization/SKILL.md +60 -172
  105. package/.agent/skills/intelligent-routing/SKILL.md +123 -103
  106. package/.agent/skills/lint-and-validate/SKILL.md +8 -52
  107. package/.agent/skills/llm-engineering/SKILL.md +281 -195
  108. package/.agent/skills/local-first/SKILL.md +76 -159
  109. package/.agent/skills/mcp-builder/SKILL.md +48 -188
  110. package/.agent/skills/mobile-design/SKILL.md +213 -219
  111. package/.agent/skills/motion-engineering/SKILL.md +184 -0
  112. package/.agent/skills/nextjs-react-expert/SKILL.md +184 -203
  113. package/.agent/skills/nodejs-best-practices/SKILL.md +403 -185
  114. package/.agent/skills/observability/SKILL.md +211 -203
  115. package/.agent/skills/parallel-agents/SKILL.md +53 -146
  116. package/.agent/skills/performance-profiling/SKILL.md +171 -151
  117. package/.agent/skills/plan-writing/SKILL.md +49 -153
  118. package/.agent/skills/platform-engineer/SKILL.md +57 -103
  119. package/.agent/skills/playwright-best-practices/SKILL.md +110 -63
  120. package/.agent/skills/powershell-windows/SKILL.md +61 -179
  121. package/.agent/skills/python-patterns/SKILL.md +7 -35
  122. package/.agent/skills/python-pro/SKILL.md +273 -114
  123. package/.agent/skills/react-specialist/SKILL.md +227 -108
  124. package/.agent/skills/readme-builder/SKILL.md +15 -85
  125. package/.agent/skills/realtime-patterns/SKILL.md +216 -243
  126. package/.agent/skills/red-team-tactics/SKILL.md +10 -51
  127. package/.agent/skills/rust-pro/SKILL.md +525 -142
  128. package/.agent/skills/seo-fundamentals/SKILL.md +92 -153
  129. package/.agent/skills/server-management/SKILL.md +110 -166
  130. package/.agent/skills/shadcn-ui-expert/SKILL.md +154 -55
  131. package/.agent/skills/skill-creator/SKILL.md +18 -58
  132. package/.agent/skills/sql-pro/SKILL.md +543 -68
  133. package/.agent/skills/supabase-postgres-best-practices/SKILL.md +28 -68
  134. package/.agent/skills/swiftui-expert/SKILL.md +124 -57
  135. package/.agent/skills/systematic-debugging/SKILL.md +49 -151
  136. package/.agent/skills/tailwind-patterns/SKILL.md +433 -149
  137. package/.agent/skills/tdd-workflow/SKILL.md +63 -169
  138. package/.agent/skills/test-result-analyzer/SKILL.md +33 -73
  139. package/.agent/skills/testing-patterns/SKILL.md +437 -130
  140. package/.agent/skills/trend-researcher/SKILL.md +30 -71
  141. package/.agent/skills/ui-ux-pro-max/SKILL.md +0 -41
  142. package/.agent/skills/ui-ux-researcher/SKILL.md +51 -91
  143. package/.agent/skills/vue-expert/SKILL.md +225 -119
  144. package/.agent/skills/vulnerability-scanner/SKILL.md +264 -226
  145. package/.agent/skills/web-accessibility-auditor/SKILL.md +141 -58
  146. package/.agent/skills/web-design-guidelines/SKILL.md +17 -61
  147. package/.agent/skills/webapp-testing/SKILL.md +71 -196
  148. package/.agent/skills/whimsy-injector/SKILL.md +58 -132
  149. package/.agent/skills/workflow-optimizer/SKILL.md +28 -68
  150. package/.agent/workflows/api-tester.md +96 -224
  151. package/.agent/workflows/audit.md +81 -122
  152. package/.agent/workflows/brainstorm.md +69 -105
  153. package/.agent/workflows/changelog.md +65 -97
  154. package/.agent/workflows/create.md +73 -88
  155. package/.agent/workflows/debug.md +80 -111
  156. package/.agent/workflows/deploy.md +119 -92
  157. package/.agent/workflows/enhance.md +80 -91
  158. package/.agent/workflows/fix.md +68 -97
  159. package/.agent/workflows/generate.md +165 -164
  160. package/.agent/workflows/migrate.md +106 -109
  161. package/.agent/workflows/orchestrate.md +103 -86
  162. package/.agent/workflows/performance-benchmarker.md +77 -268
  163. package/.agent/workflows/plan.md +120 -98
  164. package/.agent/workflows/preview.md +39 -96
  165. package/.agent/workflows/refactor.md +105 -97
  166. package/.agent/workflows/review-ai.md +63 -102
  167. package/.agent/workflows/review.md +71 -110
  168. package/.agent/workflows/session.md +53 -113
  169. package/.agent/workflows/status.md +42 -88
  170. package/.agent/workflows/strengthen-skills.md +90 -51
  171. package/.agent/workflows/swarm.md +114 -129
  172. package/.agent/workflows/test.md +125 -102
  173. package/.agent/workflows/tribunal-backend.md +60 -78
  174. package/.agent/workflows/tribunal-database.md +62 -100
  175. package/.agent/workflows/tribunal-frontend.md +62 -82
  176. package/.agent/workflows/tribunal-full.md +56 -100
  177. package/.agent/workflows/tribunal-mobile.md +65 -94
  178. package/.agent/workflows/tribunal-performance.md +62 -105
  179. package/.agent/workflows/ui-ux-pro-max.md +72 -121
  180. package/README.md +11 -15
  181. package/package.json +1 -1
  182. package/.agent/skills/api-patterns/api-style.md +0 -42
  183. package/.agent/skills/api-patterns/auth.md +0 -24
  184. package/.agent/skills/api-patterns/documentation.md +0 -26
  185. package/.agent/skills/api-patterns/graphql.md +0 -41
  186. package/.agent/skills/api-patterns/rate-limiting.md +0 -31
  187. package/.agent/skills/api-patterns/response.md +0 -37
  188. package/.agent/skills/api-patterns/rest.md +0 -40
  189. package/.agent/skills/api-patterns/security-testing.md +0 -122
  190. package/.agent/skills/api-patterns/trpc.md +0 -41
  191. package/.agent/skills/api-patterns/versioning.md +0 -22
  192. package/.agent/skills/app-builder/agent-coordination.md +0 -71
  193. package/.agent/skills/app-builder/feature-building.md +0 -53
  194. package/.agent/skills/app-builder/project-detection.md +0 -34
  195. package/.agent/skills/app-builder/scaffolding.md +0 -118
  196. package/.agent/skills/app-builder/tech-stack.md +0 -40
  197. package/.agent/skills/architecture/context-discovery.md +0 -43
  198. package/.agent/skills/architecture/examples.md +0 -94
  199. package/.agent/skills/architecture/pattern-selection.md +0 -68
  200. package/.agent/skills/architecture/patterns-reference.md +0 -50
  201. package/.agent/skills/architecture/trade-off-analysis.md +0 -77
  202. package/.agent/skills/brainstorming/dynamic-questioning.md +0 -360
  203. package/.agent/skills/database-design/database-selection.md +0 -43
  204. package/.agent/skills/database-design/indexing.md +0 -39
  205. package/.agent/skills/database-design/migrations.md +0 -48
  206. package/.agent/skills/database-design/optimization.md +0 -36
  207. package/.agent/skills/database-design/orm-selection.md +0 -30
  208. package/.agent/skills/database-design/schema-design.md +0 -56
  209. package/.agent/skills/dotnet-core-expert/SKILL.md +0 -103
  210. package/.agent/skills/framer-motion-animations/SKILL.md +0 -74
  211. package/.agent/skills/frontend-design/animation-guide.md +0 -331
  212. package/.agent/skills/frontend-design/color-system.md +0 -329
  213. package/.agent/skills/frontend-design/decision-trees.md +0 -418
  214. package/.agent/skills/frontend-design/motion-graphics.md +0 -306
  215. package/.agent/skills/frontend-design/typography-system.md +0 -363
  216. package/.agent/skills/frontend-design/ux-psychology.md +0 -1116
  217. package/.agent/skills/frontend-design/visual-effects.md +0 -383
  218. package/.agent/skills/game-development/2d-games/SKILL.md +0 -119
  219. package/.agent/skills/game-development/3d-games/SKILL.md +0 -135
  220. package/.agent/skills/game-development/SKILL.md +0 -236
  221. package/.agent/skills/game-development/game-art/SKILL.md +0 -185
  222. package/.agent/skills/game-development/game-audio/SKILL.md +0 -190
  223. package/.agent/skills/game-development/game-design/SKILL.md +0 -129
  224. package/.agent/skills/game-development/mobile-games/SKILL.md +0 -108
  225. package/.agent/skills/game-development/multiplayer/SKILL.md +0 -132
  226. package/.agent/skills/game-development/pc-games/SKILL.md +0 -144
  227. package/.agent/skills/game-development/vr-ar/SKILL.md +0 -123
  228. package/.agent/skills/game-development/web-games/SKILL.md +0 -150
  229. package/.agent/skills/intelligent-routing/router-manifest.md +0 -65
  230. package/.agent/skills/mobile-design/decision-trees.md +0 -516
  231. package/.agent/skills/mobile-design/mobile-backend.md +0 -491
  232. package/.agent/skills/mobile-design/mobile-color-system.md +0 -420
  233. package/.agent/skills/mobile-design/mobile-debugging.md +0 -122
  234. package/.agent/skills/mobile-design/mobile-design-thinking.md +0 -357
  235. package/.agent/skills/mobile-design/mobile-navigation.md +0 -458
  236. package/.agent/skills/mobile-design/mobile-performance.md +0 -767
  237. package/.agent/skills/mobile-design/mobile-testing.md +0 -356
  238. package/.agent/skills/mobile-design/mobile-typography.md +0 -433
  239. package/.agent/skills/mobile-design/platform-android.md +0 -666
  240. package/.agent/skills/mobile-design/platform-ios.md +0 -561
  241. package/.agent/skills/mobile-design/touch-psychology.md +0 -537
  242. package/.agent/skills/nextjs-react-expert/1-async-eliminating-waterfalls.md +0 -312
  243. package/.agent/skills/nextjs-react-expert/2-bundle-bundle-size-optimization.md +0 -240
  244. package/.agent/skills/nextjs-react-expert/3-server-server-side-performance.md +0 -490
  245. package/.agent/skills/nextjs-react-expert/4-client-client-side-data-fetching.md +0 -264
  246. package/.agent/skills/nextjs-react-expert/5-rerender-re-render-optimization.md +0 -581
  247. package/.agent/skills/nextjs-react-expert/6-rendering-rendering-performance.md +0 -432
  248. package/.agent/skills/nextjs-react-expert/7-js-javascript-performance.md +0 -684
  249. package/.agent/skills/nextjs-react-expert/8-advanced-advanced-patterns.md +0 -150
  250. package/.agent/skills/vulnerability-scanner/checklists.md +0 -121
@@ -1,166 +1,189 @@
1
1
  ---
2
- description: Test generation and test running command. Creates and executes tests for code.
2
+ description: Test generation and test running command. Creates and executes tests for code using the Testing Trophy strategy (unit → integration → E2E). Tests are behavioral (GIVEN/WHEN/THEN), not structural. Tests cannot be approved without covering happy path, error path, and boundary cases.
3
3
  ---
4
4
 
5
- # /test — Test Quality Engine
5
+ # /test — Test Generation & Execution
6
6
 
7
7
  $ARGUMENTS
8
8
 
9
9
  ---
10
10
 
11
- This command either **generates tests that actually test things**, or **audits existing tests** to find ones that don't. A test that always passes isn't protecting anything.
11
+ ## When to Use /test
12
12
 
13
- ---
14
-
15
- ## When to Use /test vs Other Commands
16
-
17
- | Use `/test` when... | Use something else when... |
18
- |---|---|
19
- | No tests exist for working code | Code is broken → `/debug` first, then `/test` |
20
- | Tests exist but coverage is thin | Quality of test assertions → use `audit` mode |
21
- | You changed behavior and need regression tests | Full project test health → `/audit` |
22
- | You want edge case coverage only | Integration tests → specify in the test plan |
13
+ |Use `/test` when...|Use something else when...|
14
+ |:---|:---|
15
+ |New code was just generated and needs tests|Tests are failing → `/debug`|
16
+ |After `/debug` to prevent regression|Need a full coverage audit → `/audit`|
17
+ |Test coverage is below threshold|E2E for the whole app → `/performance-benchmarker`|
18
+ |A bug was fixed and needs a regression test||
23
19
 
24
20
  ---
25
21
 
26
- ## Modes
22
+ ## Testing Trophy Strategy (2026 Standard)
27
23
 
28
24
  ```
29
- /test [file or function] → Generate tests for the target
30
- /test audit → Check existing tests for quality issues
31
- /test coverage → Identify code paths with no test coverage
32
- /test edge [function] → Generate edge-case tests only (null, empty, boundary)
33
- /test run → Run the existing test suite and analyze failures
25
+ /\
26
+ /E2E\ ← Small (Playwright): happy paths, auth, critical checkout
27
+ /──────\
28
+ /Integr.\ ← Medium (RTL + MSW): component + network behavior
29
+ /──────────\
30
+ / Unit \ ← Foundation (Vitest): pure logic + transformations
31
+ /──────────────\
32
+ / Static Types \ ← Free: TypeScript + ESLint
33
+ /────────────────────\
34
34
  ```
35
35
 
36
+ When asked to write tests without specifying a level, default to **integration tests** (highest ROI per test).
37
+
36
38
  ---
37
39
 
38
- ## Mode: Generate Tests
40
+ ## Phase 1 — Coverage Gap Analysis
39
41
 
40
- ### First Read the Code
42
+ Before writing new tests, understand existing coverage:
41
43
 
42
- Before writing a single test, map:
44
+ ```bash
45
+ npm run test:coverage # Generate coverage report
46
+ ```
43
47
 
44
- - Every **execution path** (normal path, error path, edge cases)
45
- - All **direct external dependencies** (to identify what needs mocking)
46
- - **Expected inputs and outputs** — derived from the function signature and actual behavior, not assumed
48
+ Cover these areas in priority order:
47
49
 
48
- ### Then — Write the Test Plan
50
+ ```
51
+ 1. Authentication flows (login, logout, session expiry)
52
+ 2. Data mutation paths (create, update, delete)
53
+ 3. Validation rejection (invalid input → correct error)
54
+ 4. Error handling (API failure → correct fallback)
55
+ 5. Authorization (wrong role → 403, unauthenticated → 401)
56
+ 6. Boundary values (0, null, empty, max)
57
+ ```
49
58
 
50
- A plan must be written **before** test code:
59
+ ---
51
60
 
52
- ```
53
- Target: [function or module name]
54
- Framework: [Jest | Vitest | pytest | Go test]
61
+ ## Phase 2 — Test Design (Behavioral, Not Structural)
55
62
 
56
- Path inventory:
57
- › Normal path — valid input, expected output
58
- › Null / undefined / None input
59
- › Empty string / empty array / empty object
60
- › Boundary values (0, -1, MAX_INT, max string length)
61
- › Async rejection / network failure / timeout
62
- › Invalid type input (string where number expected, etc.)
63
- › Auth / permission fail path
64
- › Concurrent access (if applicable)
63
+ Tests describe **behavior**, not implementation:
65
64
 
66
- Dependencies to mock: [list — minimal, only direct external deps]
67
65
  ```
66
+ ✅ Behavioral: "returns 401 when no auth token is provided"
67
+ ❌ Structural: "calls validateToken() once"
68
68
 
69
- **Then tests are written and passed through `test-coverage-reviewer`.**
69
+ Format every test as:
70
+ GIVEN [initial state/context]
71
+ WHEN [action taken]
72
+ THEN [observable behavior verified]
73
+ ```
70
74
 
71
75
  ---
72
76
 
73
- ## Test Structure Standard
74
-
75
- Every generated test file follows this format:
77
+ ## Phase 3 — Minimum Required Test Coverage
76
78
 
77
- ```typescript
78
- describe('[Unit under test]', () => {
79
+ The Tribunal rejects any test submission that does not cover ALL of:
79
80
 
80
- describe('[scenario group]', () => {
81
- it('[specific behavior being tested]', () => {
82
- // Arrange
83
- const input = [setup value];
81
+ ```
82
+ □ Happy path — does it work correctly with valid input?
83
+ Error path — does it fail correctly with invalid/missing input?
84
+ Boundary cases what happens at 0, null, empty, max, limits?
85
+ □ Auth boundary — what happens without auth? With wrong role?
86
+ ```
84
87
 
85
- // Act
86
- const result = functionUnderTest(input);
88
+ ---
87
89
 
88
- // Assert specific value, not .toBeDefined()
89
- expect(result).toBe([exact expected value]);
90
- });
91
- });
90
+ ## Test Templates by Layer
92
91
 
93
- describe('edge cases', () => {
94
- it('throws when input is null', () => {
95
- expect(() => functionUnderTest(null)).toThrow('[exact error message]');
96
- });
92
+ ### Unit Test (Vitest)
97
93
 
98
- it('handles empty string without crashing', () => {
99
- expect(functionUnderTest('')).toBe([expected fallback value]);
100
- });
94
+ ```typescript
95
+ describe('[functionName]()', () => {
96
+ it('[happy path description]', () => {
97
+ expect(fn(validInput)).toBe(expectedResult);
98
+ });
99
+
100
+ it('returns [expected] when input is [edge case]', () => {
101
+ expect(fn(boundaryInput)).toBe(expectedBoundaryResult);
102
+ });
103
+
104
+ it('throws [ErrorType] when [invalid condition]', () => {
105
+ expect(() => fn(invalidInput)).toThrow(ExpectedError);
101
106
  });
102
-
103
107
  });
104
108
  ```
105
109
 
106
- ---
110
+ ### Integration Test (RTL + MSW)
107
111
 
108
- ## Mode: Audit Existing Tests
112
+ ```typescript
113
+ test('[user observable behavior]', async () => {
114
+ // GIVEN: server mock defined in handlers.ts
115
+ // WHEN: user action
116
+ render(<Component />);
117
+ await userEvent.click(screen.getByRole('button', { name: /submit/i }));
118
+ // THEN: observable outcome
119
+ await screen.findByText(/success/i);
120
+ });
121
+ ```
109
122
 
110
- The `test-coverage-reviewer` flags:
123
+ ### E2E Test (Playwright)
111
124
 
112
- | Problem | What It Looks Like | Why It's Bad |
113
- |---|---|---|
114
- | Tautology test | `expect(fn(x)).toBe(fn(x))` | Always passes regardless of fn's behavior |
115
- | No assertion | `it('works', () => { fn(); })` | Passes even if fn throws wrong output |
116
- | Missing edge cases | Suite has happy path only | Misses real-world failure modes |
117
- | Over-mocking | Every dep mocked, nothing real tested | Tests the mocking framework, not the code |
118
- | Vacuous truthy | `expect(result).toBeTruthy()` | Passes for `1`, `"a"`, `{}`, `[]` |
125
+ ```typescript
126
+ test('[critical user path]', async ({ page }) => {
127
+ // GIVEN: pre-authenticated (stored session not login from UI every test)
128
+ // WHEN: navigate and act
129
+ await page.goto('/checkout');
130
+ // THEN: verify final state
131
+ await expect(page.getByText('Order confirmed')).toBeVisible();
132
+ });
133
+ ```
119
134
 
120
135
  ---
121
136
 
122
- ## Mode: Run Tests
137
+ ## Phase 4 — Test Execution
123
138
 
124
139
  ```bash
125
- // turbo
126
- python .agent/scripts/test_runner.py . --coverage
140
+ # Run tests
141
+ npm test # Unit + integration
142
+ npm run test:e2e # Playwright E2E (CI environment)
143
+ npm run test:coverage # With coverage report
144
+
145
+ # target coverage threshold (default 80%)
127
146
  ```
128
147
 
129
- After running, the `test-result-analyzer` identifies:
130
- - Root causes across multiple failing test files
131
- - Whether failures are from flaky setup or actual code breakage
132
- - Actionable fix recommendations
148
+ Failed tests halt the workflow. Fix the code or fix the test (not both — understand which first).
133
149
 
134
150
  ---
135
151
 
136
- ## Hallucination Guard
152
+ ## Human Gate — Before Writing Test Files
137
153
 
138
- - Only **documented** Vitest/Jest/pytest methods are used — never `test.eventually()`, `expect.when()`, or inventions
139
- - Assertions test **specific values** — `toBe('exact')`, not `toBeDefined()` or `toBeTruthy()`
140
- - Mocks are **minimal** — only the direct external dependency, not the whole world
141
- - All conclusions about existing test quality are backed by **reading the actual test code**
142
- - `// VERIFY: check this matcher exists` on any assertion method not commonly used
154
+ After the test-coverage-reviewer approves:
143
155
 
144
- ---
156
+ ```
157
+ ━━━ Human Gate ━━━━━━━━━━━━━━━━━━━━━━━━━
145
158
 
146
- ## Cross-Workflow Navigation
159
+ Generated tests cover:
160
+ ✅ Happy path
161
+ ✅ Error path
162
+ ✅ Boundary cases
163
+ ✅ Auth boundary
147
164
 
148
- | After /test shows... | Go to |
149
- |---|---|
150
- | Failures in existing tests after a change | `/debug` to find root cause |
151
- | Code has no tests and is untested in prod | `/review` first for quality check |
152
- | Tests pass but logic seems wrong | `/review [file]` for deeper audit |
153
- | Coverage gaps found in security-sensitive paths | `/audit` for full project security + test sweep |
165
+ Files to write:
166
+ [list of .test.ts files]
167
+
168
+ Write to disk? Y = write | N = discard | R = revise coverage
169
+ ```
170
+
171
+ No test files are written without explicit approval.
154
172
 
155
173
  ---
156
174
 
157
- ## Usage
175
+ ## Test Review Verdicts
176
+
177
+ The `test-coverage-reviewer` is automatically activated and checks:
158
178
 
159
179
  ```
160
- /test src/services/auth.service.ts
161
- /test the validateEmail function
162
- /test audit check whether my existing tests actually assert anything
163
- /test coverage show branches with no test
164
- /test edge validateInput generate null, empty, boundary tests only
165
- /test run execute the suite and analyze failures
180
+ Happy path covered for new function/component
181
+ □ Error/rejection paths covered
182
+ Boundary values tested
183
+ No brittle CSS selectors only getByRole/getByLabelText
184
+ No implementation details tested (private state, internal calls)
185
+ Async assertions use await findBy* (not getBy*)
186
+ □ Mock only at architectural boundaries (MSW for network — not hooks/methods)
166
187
  ```
188
+
189
+ ---
@@ -1,111 +1,93 @@
1
1
  ---
2
- description: Backend-specific Tribunal. Runs Logic + Security + Dependency + Types. Use for API routes, server logic, and auth code.
2
+ description: Backend-specific Tribunal. Runs Logic + Security + Dependency + Type Safety reviewers. Use for API routes, server logic, auth code, middleware, Server Actions, and any server-side business logic.
3
3
  ---
4
4
 
5
- # /tribunal-backend — Server-Side Audit
5
+ # /tribunal-backend — Backend Code Audit
6
6
 
7
7
  $ARGUMENTS
8
8
 
9
9
  ---
10
10
 
11
- Focused audit for backend and API code. Paste server-side code and these four reviewers analyze it simultaneously.
11
+ ## When to Use /tribunal-backend
12
12
 
13
- ---
13
+ |Use `/tribunal-backend` when...|Use something else when...|
14
+ |:---|:---|
15
+ |Reviewing API routes or middleware|Frontend components → `/tribunal-frontend`|
16
+ |Auth, JWT, session code|Database queries only → `/tribunal-database`|
17
+ |Server Actions|Mobile code → `/tribunal-mobile`|
18
+ |Input validation and Zod schemas|Maximum coverage → `/tribunal-full`|
19
+ |Third-party API integrations||
14
20
 
15
- ## When to Use This vs Other Tribunals
21
+ ---
16
22
 
17
- | Code type | Right tribunal |
18
- |---|---|
19
- | API routes, auth, middleware | `/tribunal-backend` ← you are here |
20
- | React components, hooks | `/tribunal-frontend` |
21
- | SQL queries, ORM, migrations | `/tribunal-database` |
22
- | Mobile-specific code | `/tribunal-mobile` |
23
- | Unknown domain or cross-domain | `/tribunal-full` |
23
+ ## 4 Active Reviewers (All Run Simultaneously)
24
+
25
+ ### logic-reviewer
26
+ - Hallucinated Express/Hono/Fastify methods
27
+ - Missing awaits on async operations
28
+ - Unreachable code after return statements
29
+ - Race conditions in sequential state mutations
30
+
31
+ ### security-auditor
32
+ - SQL injection via string interpolation
33
+ - JWT verify missing `{ algorithms: ['HS256'] }` option
34
+ - Auth check after business logic (wrong order)
35
+ - IDOR — resource ownership not verified against session
36
+ - SSRF — user-controlled URLs passed to fetch()
37
+ - Hardcoded secrets / missing env var existence checks
38
+ - CORS wildcard (`*`) in production
39
+
40
+ ### dependency-reviewer
41
+ - Packages not in package.json
42
+ - npm package names matching typosquatting patterns
43
+ - Major version incompatibilities
44
+ - Known CVEs in used packages
45
+
46
+ ### type-safety-reviewer
47
+ - `any` types in request handlers
48
+ - Missing Zod validation before DB access
49
+ - Unsafe type assertions (`as User` without runtime check)
50
+ - Return type mismatches
24
51
 
25
52
  ---
26
53
 
27
- ## Active Reviewers
54
+ ## Verdict System
28
55
 
29
56
  ```
30
- logic-reviewer Invented stdlib methods, impossible conditional branches,
31
- calling .user on a req that wasn't authenticated
32
- security-auditor → Auth bypass, SQL injection, secrets in code, rate limiting gaps,
33
- JWT algorithm enforcement, CORS misconfiguration
34
- dependency-reviewer → Any import not found in your package.json
35
- type-safety-reviewer → Implicit any, unguarded optional access, missing return types,
36
- unsafe casts
57
+ If ANY reviewer REJECTED: code must be fixed before Human Gate
58
+ If any reviewer ⚠️ WARNING: proceed with flagged items noted
59
+ If all reviewers APPROVED: present to Human Gate
37
60
  ```
38
61
 
39
62
  ---
40
63
 
41
- ## What Gets Flagged — Real Examples
42
-
43
- | Reviewer | Example Finding |
44
- |---|---|
45
- | logic | `req.user.id` used after a guard that can pass with null user |
46
- | security | `jwt.verify(token, secret)` — no `algorithms` option → allows `alg:none` attack |
47
- | security | `app.use(cors())` with no origin restriction in production |
48
- | security | `rate-limiter` missing on auth endpoints |
49
- | dependency | `import { z } from 'zod'` but `zod` not in `package.json` |
50
- | type-safety | `async function handler(req, res)` — untyped `req` and `res` |
51
- | type-safety | `const user = await db.findUser(id)` — result typed as `any` |
52
-
53
64
  ---
54
65
 
55
- ## Report Format
56
-
57
- ```
58
- ━━━ Backend Audit ━━━━━━━━━━━━━━━━━━━━━━━
59
-
60
- logic-reviewer: ✅ APPROVED
61
- security-auditor: ❌ REJECTED
62
- dependency-reviewer: ✅ APPROVED
63
- type-safety-reviewer: ⚠️ WARNING
64
-
65
- ━━━ Issues ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
66
+ ## Backend-Specific Hallucination Traps (Common LLM Mistakes)
66
67
 
67
- security-auditor:
68
- CRITICAL Line 44
69
- JWT algorithm not enforced: jwt.verify(token, secret)
70
- Fix: jwt.verify(token, secret, { algorithms: ['HS256'] })
68
+ ```typescript
69
+ // express.Router() methods that don't exist
70
+ router.middleware(() => {}); // not a method — use app.use()
71
+ router.beforeAll(() => {}); // not a method — use router.use()
71
72
 
72
- HIGH Line 12
73
- CORS open: app.use(cors())allows any origin
74
- Fix: app.use(cors({ origin: process.env.ALLOWED_ORIGIN }))
73
+ // Hono methods that don't exist
74
+ app.middleware('/path', handler); // not valid use app.use('/path', handler)
75
75
 
76
- type-safety-reviewer:
77
- ⚠️ MEDIUMLine 10
78
- Request body typed as any — use Zod schema parse at the API boundary
79
- Fix: const body = schema.parse(req.body)
76
+ // ❌ next-auth v4 patterns in v5 projects
77
+ import { getServerSession } from 'next-auth'; // v4 use auth() from './auth' in v5
80
78
 
81
- ━━━ Verdict: REJECTED fix before merging ━━━━━━
79
+ // jwt.verify async form (it's synchronous)
80
+ const payload = await jwt.verify(token, secret); // jwt.verify is NOT async
81
+ const payload = jwt.verify(token, secret); // Correct
82
82
  ```
83
83
 
84
84
  ---
85
85
 
86
- ## Hallucination Guard
87
-
88
- - Logic findings must cite the **exact line and condition** that creates the problem
89
- - Security findings must name the **attack class** (not just "this is unsafe")
90
- - No invented framework methods — only documented Express/Fastify/Hono/etc. APIs
91
-
92
- ---
93
-
94
- ## Cross-Workflow Navigation
95
-
96
- | Finding type | Next step |
97
- |---|---|
98
- | Security CRITICAL | `/audit` to scan the whole project |
99
- | All approved | Human Gate to write to disk |
100
- | SQL queries also present | Add `/tribunal-database` for those specifically |
101
-
102
- ---
103
-
104
- ## Usage
86
+ ## Usage Examples
105
87
 
106
88
  ```
107
- /tribunal-backend [paste API route code]
108
- /tribunal-backend [paste auth middleware]
109
- /tribunal-backend src/routes/user.ts
110
- /tribunal-backend the JWT verification middleware
89
+ /tribunal-backend the POST /api/auth/login route with JWT issuance
90
+ /tribunal-backend the createOrder Server Action with Stripe integration
91
+ /tribunal-backend the auth middleware that verifies session on protected routes
92
+ /tribunal-backend the webhook handler for Stripe payment events
111
93
  ```
@@ -1,132 +1,94 @@
1
1
  ---
2
- description: Database-specific Tribunal. Runs Logic + Security + SQL reviewers. Use for queries, migrations, and ORM code.
2
+ description: Database-specific Tribunal. Runs Logic + Security + SQL reviewers. Use for Prisma queries, raw SQL, schema migrations, ORM operations, and database transaction code.
3
3
  ---
4
4
 
5
- # /tribunal-database — Data Layer Audit
5
+ # /tribunal-database — Database Code Audit
6
6
 
7
7
  $ARGUMENTS
8
8
 
9
9
  ---
10
10
 
11
- Focused audit for SQL queries, ORM code, schema changes, and migrations. **Provide your schema alongside the code** for the most accurate analysis.
11
+ ## When to Use /tribunal-database
12
12
 
13
- ---
14
-
15
- ## When to Use This vs Other Tribunals
16
-
17
- | Code type | Right tribunal |
18
- |---|---|
19
- | SQL queries, ORM, migrations | `/tribunal-database` ← you are here |
20
- | API routes, auth, middleware | `/tribunal-backend` |
21
- | React components, hooks | `/tribunal-frontend` |
22
- | Unknown domain or cross-domain | `/tribunal-full` |
23
-
24
- ---
25
-
26
- ## Active Reviewers
27
-
28
- ```
29
- logic-reviewer → ORM methods that don't exist, impossible WHERE conditions,
30
- chained queries on results that could be null
31
- security-auditor → SQL injection surfaces, sensitive data exposed without masking,
32
- missing authorization checks before DB access
33
- sql-reviewer → String interpolation in queries, N+1 patterns,
34
- references to tables/columns not in the schema,
35
- unbounded SELECT *, missing WHERE clauses on DELETE/UPDATE
36
- ```
13
+ |Use `/tribunal-database` when...|Use something else when...|
14
+ |:---|:---|
15
+ |Prisma queries and schema|Frontend queries `/tribunal-frontend`|
16
+ |Raw SQL with pg/mysql2/better-sqlite3|API routes calling DB → `/tribunal-backend`|
17
+ |Database migrations|Full audit `/tribunal-full`|
18
+ |ORM schema changes||
19
+ |Transaction boundaries||
37
20
 
38
21
  ---
39
22
 
40
- ## Important: Provide Your Schema
23
+ ## 3 Active Reviewers (All Run Simultaneously)
41
24
 
42
- The `sql-reviewer` can only validate column/table names if it has the schema:
25
+ ### logic-reviewer
26
+ - Prisma methods that don't exist (`findOne` was removed — use `findUnique`)
27
+ - Transaction that should be `$transaction` but isn't
28
+ - Pagination query missing total count (returns wrong metadata)
29
+ - `.findMany()` with no `take` limit (unbounded query)
43
30
 
44
- ```
45
- /tribunal-database
31
+ ### security-auditor
32
+ - SQL injection via `$queryRaw` with template literals and user input
33
+ - Row-level security bypass (no WHERE clause on user-scoped query)
34
+ - Mass assignment via `prisma.user.update({ data: req.body })` (unrestricted)
35
+ - Prisma `$executeRaw` with string interpolation
46
36
 
47
- Schema:
48
- CREATE TABLE users (id UUID, email TEXT, created_at TIMESTAMPTZ);
49
- CREATE TABLE posts (id UUID, user_id UUID REFERENCES users(id), title TEXT);
50
-
51
- Code to audit:
52
- [paste query or ORM code here]
53
- ```
54
-
55
- **Without the schema**, the reviewer flags all table/column references as `[VERIFY — schema not provided]`.
37
+ ### sql-reviewer
38
+ - N+1 pattern (loop with prisma query inside)
39
+ - Foreign key columns without `@@index`
40
+ - No index on ORDER BY column for large tables
41
+ - Unscoped UPDATE/DELETE without WHERE clause
42
+ - Missing rollback in raw SQL catch block
43
+ - Expand vs contract migration not followed
56
44
 
57
45
  ---
58
46
 
59
- ## What Gets Flagged — Real Examples
60
-
61
- | Reviewer | Example Finding | Severity |
62
- |---|---|---|
63
- | logic | `prisma.user.findFirstOrCreate()` — not a real Prisma method | ❌ HIGH |
64
- | security | `` db.query(`SELECT * WHERE id = ${req.params.id}`) `` — injection | ❌ CRITICAL |
65
- | security | `SELECT password FROM users` returned to API without masking | ❌ HIGH |
66
- | sql | `SELECT * FROM payments` when `payments` not in schema | ❌ HIGH |
67
- | sql | `SELECT` query inside a `for` loop — N+1 pattern | ❌ HIGH |
68
- | sql | `DELETE FROM sessions` with no `WHERE` clause | ❌ CRITICAL |
69
- | sql | `SELECT * FROM users` with no pagination — unbounded result | ⚠️ MEDIUM |
70
- | security | No `LIMIT` on a user-controlled query parameter | ⚠️ MEDIUM |
71
-
72
- ---
73
-
74
- ## Report Format
47
+ ## Verdict System
75
48
 
76
49
  ```
77
- ━━━ Database Audit ━━━━━━━━━━━━━━━━━━━━━━
78
-
79
- logic-reviewer: ✅ APPROVED
80
- security-auditor: ❌ REJECTED
81
- sql-reviewer: ❌ REJECTED
82
-
83
- ━━━ Issues ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
84
-
85
- security-auditor:
86
- ❌ CRITICAL — Line 6
87
- SQL injection: string interpolation in query
88
- Code: db.query(`SELECT * WHERE id = ${req.params.id}`)
89
- Fix: db.query('SELECT * WHERE id = $1', [req.params.id])
90
-
91
- sql-reviewer:
92
- ❌ HIGH — Line 19
93
- N+1 detected: SELECT inside for-loop (10 users = 10 queries)
94
- Fix: Batch with WHERE id = ANY($1::uuid[]) or use a JOIN
95
-
96
- ⚠️ MEDIUM — Line 32
97
- Unbounded result: SELECT * FROM audit_logs — no LIMIT
98
- Fix: Add LIMIT + OFFSET or use cursor-based pagination
99
-
100
- ━━━ Verdict: REJECTED — fix CRITICAL and HIGH before merging ━━━
50
+ If ANY reviewer → ❌ REJECTED: fix before Human Gate
51
+ If any reviewer → ⚠️ WARNING: proceed with flagged items
52
+ If all reviewers → ✅ APPROVED: Human Gate
101
53
  ```
102
54
 
103
55
  ---
104
56
 
105
- ## Hallucination Guard
106
-
107
- - `sql-reviewer` only references tables and columns **from the provided schema** — no invented schema
108
- - ORM method names are verified against **the installed ORM version's documented API**
109
- - Parameterized query fixes show the **exact parameterized form** for the target database driver
110
- - N+1 fixes must show the **actual batched query**, not just say "use a JOIN"
111
-
112
57
  ---
113
58
 
114
- ## Cross-Workflow Navigation
115
-
116
- | Finding type | Next step |
117
- |---|---|
118
- | SQL injection CRITICAL | Rotate credentials, then fix with `/generate` using parameterization |
119
- | N+1 pattern in ORM | `/enhance` the repository method with proper eager loading |
120
- | Schema references invalid columns | Fix schema first with `/migrate` |
121
- | All approved | Human Gate to write to disk |
59
+ ## Database-Specific Hallucination Traps (Common LLM Mistakes)
60
+
61
+ ```typescript
62
+ // ❌ Prisma: findOne was REMOVED — doesn't exist in any version
63
+ const user = await prisma.user.findOne({ where: { id } });
64
+ // Correct
65
+ const user = await prisma.user.findUnique({ where: { id } });
66
+
67
+ // ❌ Prisma: upsertMany doesn't exist
68
+ await prisma.product.upsertMany({ data: products }); // Doesn't exist
69
+ // ✅ Use createMany or transaction with multiple upserts
70
+ await prisma.$transaction(products.map(p => prisma.product.upsert({ ... })));
71
+
72
+ // ❌ Migration fails silently: adding NOT NULL column to populated table
73
+ ALTER TABLE users ADD COLUMN phone VARCHAR(20) NOT NULL; // Error on existing rows
74
+ // ✅ Always add nullable first, backfill, then add constraint
75
+
76
+ // ❌ Missing rollback in raw SQL
77
+ try {
78
+ await db.query('BEGIN');
79
+ await db.query('UPDATE ...');
80
+ } catch (e) {
81
+ // Missing: await db.query('ROLLBACK');
82
+ }
83
+ ```
122
84
 
123
85
  ---
124
86
 
125
- ## Usage
87
+ ## Usage Examples
126
88
 
127
89
  ```
128
- /tribunal-database [paste query with schema]
129
- /tribunal-database src/repositories/userRepo.ts
130
- /tribunal-database [paste Prisma query]
131
- /tribunal-database the payment queries in services/billing.ts
90
+ /tribunal-database the createOrder function with Stripe idempotency
91
+ /tribunal-database the user registration with email uniqueness check
92
+ /tribunal-database the migration file adding phoneNumber to users
93
+ /tribunal-database the paginated product query with category filter
132
94
  ```