agentic-qe 1.9.4 → 2.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 (262) hide show
  1. package/.claude/agents/qe-api-contract-validator.md +95 -1336
  2. package/.claude/agents/qe-chaos-engineer.md +152 -1211
  3. package/.claude/agents/qe-code-complexity.md +144 -707
  4. package/.claude/agents/qe-coverage-analyzer.md +147 -743
  5. package/.claude/agents/qe-deployment-readiness.md +143 -1496
  6. package/.claude/agents/qe-flaky-test-hunter.md +132 -1529
  7. package/.claude/agents/qe-fleet-commander.md +12 -12
  8. package/.claude/agents/qe-performance-tester.md +150 -886
  9. package/.claude/agents/qe-production-intelligence.md +155 -1396
  10. package/.claude/agents/qe-quality-analyzer.md +6 -6
  11. package/.claude/agents/qe-quality-gate.md +151 -648
  12. package/.claude/agents/qe-regression-risk-analyzer.md +132 -1150
  13. package/.claude/agents/qe-requirements-validator.md +149 -932
  14. package/.claude/agents/qe-security-scanner.md +157 -797
  15. package/.claude/agents/qe-test-data-architect.md +96 -1365
  16. package/.claude/agents/qe-test-executor.md +8 -8
  17. package/.claude/agents/qe-test-generator.md +145 -1540
  18. package/.claude/agents/qe-visual-tester.md +153 -1257
  19. package/.claude/agents/qx-partner.md +248 -0
  20. package/.claude/agents/subagents/qe-code-reviewer.md +40 -136
  21. package/.claude/agents/subagents/qe-coverage-gap-analyzer.md +40 -480
  22. package/.claude/agents/subagents/qe-data-generator.md +41 -125
  23. package/.claude/agents/subagents/qe-flaky-investigator.md +55 -411
  24. package/.claude/agents/subagents/qe-integration-tester.md +53 -141
  25. package/.claude/agents/subagents/qe-performance-validator.md +54 -130
  26. package/.claude/agents/subagents/qe-security-auditor.md +56 -114
  27. package/.claude/agents/subagents/qe-test-data-architect-sub.md +57 -548
  28. package/.claude/agents/subagents/qe-test-implementer.md +58 -551
  29. package/.claude/agents/subagents/qe-test-refactorer.md +65 -722
  30. package/.claude/agents/subagents/qe-test-writer.md +63 -726
  31. package/.claude/skills/accessibility-testing/SKILL.md +144 -692
  32. package/.claude/skills/agentic-quality-engineering/SKILL.md +176 -529
  33. package/.claude/skills/api-testing-patterns/SKILL.md +180 -560
  34. package/.claude/skills/brutal-honesty-review/SKILL.md +113 -603
  35. package/.claude/skills/bug-reporting-excellence/SKILL.md +116 -517
  36. package/.claude/skills/chaos-engineering-resilience/SKILL.md +127 -72
  37. package/.claude/skills/cicd-pipeline-qe-orchestrator/SKILL.md +209 -404
  38. package/.claude/skills/code-review-quality/SKILL.md +158 -608
  39. package/.claude/skills/compatibility-testing/SKILL.md +148 -38
  40. package/.claude/skills/compliance-testing/SKILL.md +132 -63
  41. package/.claude/skills/consultancy-practices/SKILL.md +114 -446
  42. package/.claude/skills/context-driven-testing/SKILL.md +117 -381
  43. package/.claude/skills/contract-testing/SKILL.md +176 -141
  44. package/.claude/skills/database-testing/SKILL.md +137 -130
  45. package/.claude/skills/exploratory-testing-advanced/SKILL.md +160 -629
  46. package/.claude/skills/holistic-testing-pact/SKILL.md +140 -188
  47. package/.claude/skills/localization-testing/SKILL.md +145 -33
  48. package/.claude/skills/mobile-testing/SKILL.md +132 -448
  49. package/.claude/skills/mutation-testing/SKILL.md +147 -41
  50. package/.claude/skills/performance-testing/SKILL.md +200 -546
  51. package/.claude/skills/quality-metrics/SKILL.md +164 -519
  52. package/.claude/skills/refactoring-patterns/SKILL.md +132 -699
  53. package/.claude/skills/regression-testing/SKILL.md +120 -926
  54. package/.claude/skills/risk-based-testing/SKILL.md +157 -660
  55. package/.claude/skills/security-testing/SKILL.md +199 -538
  56. package/.claude/skills/sherlock-review/SKILL.md +163 -699
  57. package/.claude/skills/shift-left-testing/SKILL.md +161 -465
  58. package/.claude/skills/shift-right-testing/SKILL.md +161 -519
  59. package/.claude/skills/six-thinking-hats/SKILL.md +175 -1110
  60. package/.claude/skills/skills-manifest.json +683 -0
  61. package/.claude/skills/tdd-london-chicago/SKILL.md +131 -448
  62. package/.claude/skills/technical-writing/SKILL.md +103 -154
  63. package/.claude/skills/test-automation-strategy/SKILL.md +166 -772
  64. package/.claude/skills/test-data-management/SKILL.md +126 -910
  65. package/.claude/skills/test-design-techniques/SKILL.md +179 -89
  66. package/.claude/skills/test-environment-management/SKILL.md +136 -91
  67. package/.claude/skills/test-reporting-analytics/SKILL.md +169 -92
  68. package/.claude/skills/testability-scoring/README.md +71 -0
  69. package/.claude/skills/testability-scoring/SKILL.md +245 -0
  70. package/.claude/skills/testability-scoring/resources/templates/config.template.js +84 -0
  71. package/.claude/skills/testability-scoring/resources/templates/testability-scoring.spec.template.js +532 -0
  72. package/.claude/skills/testability-scoring/scripts/generate-html-report.js +1007 -0
  73. package/.claude/skills/testability-scoring/scripts/run-assessment.sh +70 -0
  74. package/.claude/skills/visual-testing-advanced/SKILL.md +155 -78
  75. package/.claude/skills/xp-practices/SKILL.md +151 -587
  76. package/CHANGELOG.md +110 -0
  77. package/README.md +55 -21
  78. package/dist/agents/QXPartnerAgent.d.ts +146 -0
  79. package/dist/agents/QXPartnerAgent.d.ts.map +1 -0
  80. package/dist/agents/QXPartnerAgent.js +1831 -0
  81. package/dist/agents/QXPartnerAgent.js.map +1 -0
  82. package/dist/agents/index.d.ts +1 -0
  83. package/dist/agents/index.d.ts.map +1 -1
  84. package/dist/agents/index.js +82 -2
  85. package/dist/agents/index.js.map +1 -1
  86. package/dist/agents/lifecycle/AgentLifecycleManager.d.ts.map +1 -1
  87. package/dist/agents/lifecycle/AgentLifecycleManager.js +34 -31
  88. package/dist/agents/lifecycle/AgentLifecycleManager.js.map +1 -1
  89. package/dist/cli/commands/debug/agent.d.ts.map +1 -1
  90. package/dist/cli/commands/debug/agent.js +19 -6
  91. package/dist/cli/commands/debug/agent.js.map +1 -1
  92. package/dist/cli/commands/debug/health-check.js +20 -7
  93. package/dist/cli/commands/debug/health-check.js.map +1 -1
  94. package/dist/cli/commands/init-claude-md-template.d.ts +1 -0
  95. package/dist/cli/commands/init-claude-md-template.d.ts.map +1 -1
  96. package/dist/cli/commands/init-claude-md-template.js +18 -3
  97. package/dist/cli/commands/init-claude-md-template.js.map +1 -1
  98. package/dist/cli/commands/workflow/cancel.d.ts.map +1 -1
  99. package/dist/cli/commands/workflow/cancel.js +4 -3
  100. package/dist/cli/commands/workflow/cancel.js.map +1 -1
  101. package/dist/cli/commands/workflow/list.d.ts.map +1 -1
  102. package/dist/cli/commands/workflow/list.js +4 -3
  103. package/dist/cli/commands/workflow/list.js.map +1 -1
  104. package/dist/cli/commands/workflow/pause.d.ts.map +1 -1
  105. package/dist/cli/commands/workflow/pause.js +4 -3
  106. package/dist/cli/commands/workflow/pause.js.map +1 -1
  107. package/dist/cli/init/claude-config.d.ts.map +1 -1
  108. package/dist/cli/init/claude-config.js +3 -8
  109. package/dist/cli/init/claude-config.js.map +1 -1
  110. package/dist/cli/init/claude-md.d.ts.map +1 -1
  111. package/dist/cli/init/claude-md.js +44 -2
  112. package/dist/cli/init/claude-md.js.map +1 -1
  113. package/dist/cli/init/database-init.js +1 -1
  114. package/dist/cli/init/index.d.ts.map +1 -1
  115. package/dist/cli/init/index.js +13 -6
  116. package/dist/cli/init/index.js.map +1 -1
  117. package/dist/cli/init/skills.d.ts.map +1 -1
  118. package/dist/cli/init/skills.js +2 -1
  119. package/dist/cli/init/skills.js.map +1 -1
  120. package/dist/core/SwarmCoordinator.d.ts +180 -0
  121. package/dist/core/SwarmCoordinator.d.ts.map +1 -0
  122. package/dist/core/SwarmCoordinator.js +473 -0
  123. package/dist/core/SwarmCoordinator.js.map +1 -0
  124. package/dist/core/memory/AgentDBIntegration.d.ts +24 -6
  125. package/dist/core/memory/AgentDBIntegration.d.ts.map +1 -1
  126. package/dist/core/memory/AgentDBIntegration.js +66 -10
  127. package/dist/core/memory/AgentDBIntegration.js.map +1 -1
  128. package/dist/core/memory/UnifiedMemoryCoordinator.d.ts +341 -0
  129. package/dist/core/memory/UnifiedMemoryCoordinator.d.ts.map +1 -0
  130. package/dist/core/memory/UnifiedMemoryCoordinator.js +986 -0
  131. package/dist/core/memory/UnifiedMemoryCoordinator.js.map +1 -0
  132. package/dist/core/memory/index.d.ts +5 -0
  133. package/dist/core/memory/index.d.ts.map +1 -1
  134. package/dist/core/memory/index.js +23 -1
  135. package/dist/core/memory/index.js.map +1 -1
  136. package/dist/core/metrics/MetricsAggregator.d.ts +228 -0
  137. package/dist/core/metrics/MetricsAggregator.d.ts.map +1 -0
  138. package/dist/core/metrics/MetricsAggregator.js +482 -0
  139. package/dist/core/metrics/MetricsAggregator.js.map +1 -0
  140. package/dist/core/metrics/index.d.ts +5 -0
  141. package/dist/core/metrics/index.d.ts.map +1 -0
  142. package/dist/core/metrics/index.js +11 -0
  143. package/dist/core/metrics/index.js.map +1 -0
  144. package/dist/core/optimization/SwarmOptimizer.d.ts +190 -0
  145. package/dist/core/optimization/SwarmOptimizer.d.ts.map +1 -0
  146. package/dist/core/optimization/SwarmOptimizer.js +648 -0
  147. package/dist/core/optimization/SwarmOptimizer.js.map +1 -0
  148. package/dist/core/optimization/index.d.ts +9 -0
  149. package/dist/core/optimization/index.d.ts.map +1 -0
  150. package/dist/core/optimization/index.js +25 -0
  151. package/dist/core/optimization/index.js.map +1 -0
  152. package/dist/core/optimization/types.d.ts +53 -0
  153. package/dist/core/optimization/types.d.ts.map +1 -0
  154. package/dist/core/optimization/types.js +6 -0
  155. package/dist/core/optimization/types.js.map +1 -0
  156. package/dist/core/orchestration/AdaptiveScheduler.d.ts +190 -0
  157. package/dist/core/orchestration/AdaptiveScheduler.d.ts.map +1 -0
  158. package/dist/core/orchestration/AdaptiveScheduler.js +460 -0
  159. package/dist/core/orchestration/AdaptiveScheduler.js.map +1 -0
  160. package/dist/core/orchestration/PriorityQueue.d.ts +54 -0
  161. package/dist/core/orchestration/PriorityQueue.d.ts.map +1 -0
  162. package/dist/core/orchestration/PriorityQueue.js +122 -0
  163. package/dist/core/orchestration/PriorityQueue.js.map +1 -0
  164. package/dist/core/orchestration/WorkflowOrchestrator.d.ts +189 -0
  165. package/dist/core/orchestration/WorkflowOrchestrator.d.ts.map +1 -0
  166. package/dist/core/orchestration/WorkflowOrchestrator.js +845 -0
  167. package/dist/core/orchestration/WorkflowOrchestrator.js.map +1 -0
  168. package/dist/core/orchestration/index.d.ts +7 -0
  169. package/dist/core/orchestration/index.d.ts.map +1 -0
  170. package/dist/core/orchestration/index.js +11 -0
  171. package/dist/core/orchestration/index.js.map +1 -0
  172. package/dist/core/orchestration/types.d.ts +96 -0
  173. package/dist/core/orchestration/types.d.ts.map +1 -0
  174. package/dist/core/orchestration/types.js +6 -0
  175. package/dist/core/orchestration/types.js.map +1 -0
  176. package/dist/core/recovery/CircuitBreaker.d.ts +176 -0
  177. package/dist/core/recovery/CircuitBreaker.d.ts.map +1 -0
  178. package/dist/core/recovery/CircuitBreaker.js +382 -0
  179. package/dist/core/recovery/CircuitBreaker.js.map +1 -0
  180. package/dist/core/recovery/RecoveryOrchestrator.d.ts +186 -0
  181. package/dist/core/recovery/RecoveryOrchestrator.d.ts.map +1 -0
  182. package/dist/core/recovery/RecoveryOrchestrator.js +476 -0
  183. package/dist/core/recovery/RecoveryOrchestrator.js.map +1 -0
  184. package/dist/core/recovery/RetryStrategy.d.ts +127 -0
  185. package/dist/core/recovery/RetryStrategy.d.ts.map +1 -0
  186. package/dist/core/recovery/RetryStrategy.js +314 -0
  187. package/dist/core/recovery/RetryStrategy.js.map +1 -0
  188. package/dist/core/recovery/index.d.ts +8 -0
  189. package/dist/core/recovery/index.d.ts.map +1 -0
  190. package/dist/core/recovery/index.js +27 -0
  191. package/dist/core/recovery/index.js.map +1 -0
  192. package/dist/core/skills/DependencyResolver.d.ts +99 -0
  193. package/dist/core/skills/DependencyResolver.d.ts.map +1 -0
  194. package/dist/core/skills/DependencyResolver.js +260 -0
  195. package/dist/core/skills/DependencyResolver.js.map +1 -0
  196. package/dist/core/skills/DynamicSkillLoader.d.ts +96 -0
  197. package/dist/core/skills/DynamicSkillLoader.d.ts.map +1 -0
  198. package/dist/core/skills/DynamicSkillLoader.js +353 -0
  199. package/dist/core/skills/DynamicSkillLoader.js.map +1 -0
  200. package/dist/core/skills/ManifestGenerator.d.ts +114 -0
  201. package/dist/core/skills/ManifestGenerator.d.ts.map +1 -0
  202. package/dist/core/skills/ManifestGenerator.js +449 -0
  203. package/dist/core/skills/ManifestGenerator.js.map +1 -0
  204. package/dist/core/skills/index.d.ts +9 -0
  205. package/dist/core/skills/index.d.ts.map +1 -0
  206. package/dist/core/skills/index.js +24 -0
  207. package/dist/core/skills/index.js.map +1 -0
  208. package/dist/core/skills/types.d.ts +118 -0
  209. package/dist/core/skills/types.d.ts.map +1 -0
  210. package/dist/core/skills/types.js +7 -0
  211. package/dist/core/skills/types.js.map +1 -0
  212. package/dist/core/transport/QUICTransport.d.ts +320 -0
  213. package/dist/core/transport/QUICTransport.d.ts.map +1 -0
  214. package/dist/core/transport/QUICTransport.js +711 -0
  215. package/dist/core/transport/QUICTransport.js.map +1 -0
  216. package/dist/core/transport/index.d.ts +40 -0
  217. package/dist/core/transport/index.d.ts.map +1 -0
  218. package/dist/core/transport/index.js +46 -0
  219. package/dist/core/transport/index.js.map +1 -0
  220. package/dist/core/transport/quic-loader.d.ts +123 -0
  221. package/dist/core/transport/quic-loader.d.ts.map +1 -0
  222. package/dist/core/transport/quic-loader.js +293 -0
  223. package/dist/core/transport/quic-loader.js.map +1 -0
  224. package/dist/core/transport/quic.d.ts +154 -0
  225. package/dist/core/transport/quic.d.ts.map +1 -0
  226. package/dist/core/transport/quic.js +214 -0
  227. package/dist/core/transport/quic.js.map +1 -0
  228. package/dist/mcp/server.d.ts +9 -9
  229. package/dist/mcp/server.d.ts.map +1 -1
  230. package/dist/mcp/server.js +1 -2
  231. package/dist/mcp/server.js.map +1 -1
  232. package/dist/mcp/services/AgentRegistry.d.ts.map +1 -1
  233. package/dist/mcp/services/AgentRegistry.js +4 -1
  234. package/dist/mcp/services/AgentRegistry.js.map +1 -1
  235. package/dist/types/index.d.ts +2 -1
  236. package/dist/types/index.d.ts.map +1 -1
  237. package/dist/types/index.js +2 -0
  238. package/dist/types/index.js.map +1 -1
  239. package/dist/types/qx.d.ts +429 -0
  240. package/dist/types/qx.d.ts.map +1 -0
  241. package/dist/types/qx.js +71 -0
  242. package/dist/types/qx.js.map +1 -0
  243. package/dist/visualization/api/RestEndpoints.js +2 -2
  244. package/dist/visualization/api/RestEndpoints.js.map +1 -1
  245. package/dist/visualization/api/WebSocketServer.d.ts +44 -0
  246. package/dist/visualization/api/WebSocketServer.d.ts.map +1 -1
  247. package/dist/visualization/api/WebSocketServer.js +144 -23
  248. package/dist/visualization/api/WebSocketServer.js.map +1 -1
  249. package/dist/visualization/core/DataTransformer.d.ts +10 -0
  250. package/dist/visualization/core/DataTransformer.d.ts.map +1 -1
  251. package/dist/visualization/core/DataTransformer.js +60 -5
  252. package/dist/visualization/core/DataTransformer.js.map +1 -1
  253. package/dist/visualization/emit-event.d.ts +75 -0
  254. package/dist/visualization/emit-event.d.ts.map +1 -0
  255. package/dist/visualization/emit-event.js +213 -0
  256. package/dist/visualization/emit-event.js.map +1 -0
  257. package/dist/visualization/index.d.ts +1 -0
  258. package/dist/visualization/index.d.ts.map +1 -1
  259. package/dist/visualization/index.js +7 -1
  260. package/dist/visualization/index.js.map +1 -1
  261. package/docs/reference/skills.md +63 -1
  262. package/package.json +16 -58
@@ -1,187 +1,222 @@
1
1
  ---
2
2
  name: contract-testing
3
- description: Consumer-driven contract testing for microservices using Pact, schema validation, API versioning, and backward compatibility testing. Use when testing API contracts, preventing breaking changes, or coordinating distributed teams.
3
+ description: "Consumer-driven contract testing for microservices using Pact, schema validation, API versioning, and backward compatibility testing. Use when testing API contracts or coordinating distributed teams."
4
+ category: testing-methodologies
5
+ priority: high
6
+ tokenEstimate: 900
7
+ agents: [qe-api-contract-validator, qe-test-generator, qe-security-scanner]
8
+ implementation_status: optimized
9
+ optimization_version: 1.0
10
+ last_optimized: 2025-12-02
11
+ dependencies: []
12
+ quick_reference_card: true
13
+ tags: [contract, pact, consumer-driven, api, microservices, schema-validation]
4
14
  ---
5
15
 
6
16
  # Contract Testing
7
17
 
8
- ## Core Principle
9
-
10
- **Microservices fail when API contracts break.**
11
-
12
- Contract testing validates that providers (APIs) fulfill contracts expected by consumers (clients). Prevents breaking changes that cause production failures in distributed systems.
13
-
14
- ## What is Contract Testing?
15
-
16
- **Contract:** Agreement between API provider and consumer about request/response structure.
17
-
18
- **Traditional Testing Problems:**
18
+ <default_to_action>
19
+ When testing API contracts or microservices:
20
+ 1. DEFINE consumer expectations (what consumers actually need)
21
+ 2. VERIFY provider fulfills contracts (Pact verification)
22
+ 3. DETECT breaking changes before deployment (CI/CD integration)
23
+ 4. VERSION APIs semantically (breaking = major bump)
24
+ 5. MAINTAIN backward compatibility for supported versions
25
+
26
+ **Quick Contract Testing Steps:**
27
+ - Consumer: Define expected request/response pairs
28
+ - Provider: Verify against all consumer contracts
29
+ - CI/CD: Block deploys that break contracts
30
+ - Versioning: Document supported versions and deprecation
31
+
32
+ **Critical Success Factors:**
33
+ - Consumers own the contract (they define what they need)
34
+ - Provider must pass all consumer contracts before deploy
35
+ - Breaking changes require coordination, not surprise
36
+ </default_to_action>
37
+
38
+ ## Quick Reference Card
39
+
40
+ ### When to Use
41
+ - Microservices communication
42
+ - Third-party API integrations
43
+ - Distributed team coordination
44
+ - Preventing breaking changes
45
+
46
+ ### Consumer-Driven Contract Flow
19
47
  ```
20
- Consumer Team: "We need user.id as integer"
21
- Provider Team: "We changed it to UUID string"
22
- Production failure! No one noticed until deployed.
48
+ Consumer Defines Expectations Contract
49
+
50
+ Provider Verifies Contract Pass/Fail
51
+
52
+ CI/CD → Blocks Breaking Changes
23
53
  ```
24
54
 
25
- **Contract Testing Solution:**
26
- ```
27
- 1. Consumer defines expected contract
28
- 2. Provider validates against contract
29
- 3. Breaking changes caught before deployment
30
- ```
55
+ ### Breaking vs Non-Breaking Changes
56
+ | Change Type | Breaking? | Semver |
57
+ |-------------|-----------|--------|
58
+ | Remove field | ✅ Yes | Major |
59
+ | Rename field | Yes | Major |
60
+ | Change type | ✅ Yes | Major |
61
+ | Add optional field | ❌ No | Minor |
62
+ | Add new endpoint | ❌ No | Minor |
63
+ | Bug fix | ❌ No | Patch |
64
+
65
+ ### Tools
66
+ | Tool | Best For |
67
+ |------|----------|
68
+ | **Pact** | Consumer-driven contracts |
69
+ | **OpenAPI/Swagger** | API-first design |
70
+ | **JSON Schema** | Schema validation |
71
+ | **GraphQL** | Schema-first contracts |
31
72
 
32
- ## Consumer-Driven Contracts (Pact)
73
+ ---
33
74
 
34
- **Install Pact:**
35
- ```bash
36
- npm install --save-dev @pact-foundation/pact
37
- ```
75
+ ## Consumer Contract (Pact)
38
76
 
39
- **Consumer Test (defines contract):**
40
77
  ```javascript
41
- import { PactV3 } from '@pact-foundation/pact';
78
+ // Consumer defines what it needs
79
+ const { Pact } = require('@pact-foundation/pact');
42
80
 
43
- const provider = new PactV3({
44
- consumer: 'UserWebApp',
45
- provider: 'UserAPI'
46
- });
81
+ describe('Order API Consumer', () => {
82
+ const provider = new Pact({
83
+ consumer: 'CheckoutUI',
84
+ provider: 'OrderService'
85
+ });
47
86
 
48
- test('get user by id', async () => {
49
- // Define expected interaction
50
- await provider
51
- .given('user 123 exists')
52
- .uponReceiving('a request for user 123')
53
- .withRequest({
54
- method: 'GET',
55
- path: '/users/123'
56
- })
57
- .willRespondWith({
58
- status: 200,
59
- headers: { 'Content-Type': 'application/json' },
60
- body: {
61
- id: 123,
62
- email: 'user@example.com',
63
- name: 'John Doe'
87
+ beforeAll(() => provider.setup());
88
+ afterAll(() => provider.finalize());
89
+
90
+ it('creates an order', async () => {
91
+ await provider.addInteraction({
92
+ state: 'products exist',
93
+ uponReceiving: 'a create order request',
94
+ withRequest: {
95
+ method: 'POST',
96
+ path: '/orders',
97
+ body: { productId: 'abc', quantity: 2 }
98
+ },
99
+ willRespondWith: {
100
+ status: 201,
101
+ body: {
102
+ orderId: like('order-123'), // Any string matching pattern
103
+ total: like(19.99) // Any number
104
+ }
64
105
  }
65
106
  });
66
107
 
67
- // Execute test
68
- await provider.executeTest(async (mockServer) => {
69
- const api = new UserAPI(mockServer.url);
70
- const user = await api.getUser(123);
71
-
72
- expect(user.id).toBe(123);
73
- expect(user.email).toBe('user@example.com');
108
+ const response = await orderClient.create({ productId: 'abc', quantity: 2 });
109
+ expect(response.orderId).toBeDefined();
74
110
  });
75
111
  });
76
-
77
- // Generates pact contract file
78
112
  ```
79
113
 
80
- **Provider Verification:**
81
- ```javascript
82
- import { Verifier } from '@pact-foundation/pact';
83
-
84
- test('provider honors all consumer contracts', async () => {
85
- const verifier = new Verifier({
86
- provider: 'UserAPI',
87
- providerBaseUrl: 'http://localhost:3000',
88
-
89
- // Load contracts from Pact Broker
90
- pactBrokerUrl: 'https://pact-broker.example.com',
91
- pactBrokerToken: process.env.PACT_BROKER_TOKEN,
114
+ ---
92
115
 
93
- // Or load local contracts
94
- pactUrls: ['./pacts/UserWebApp-UserAPI.json'],
116
+ ## Provider Verification
95
117
 
96
- // Provider states
97
- stateHandlers: {
98
- 'user 123 exists': async () => {
99
- await db.users.create({ id: 123, email: 'user@example.com', name: 'John Doe' });
118
+ ```javascript
119
+ // Provider verifies it fulfills all consumer contracts
120
+ const { Verifier } = require('@pact-foundation/pact');
121
+
122
+ describe('Order Service Provider', () => {
123
+ it('fulfills all consumer contracts', async () => {
124
+ await new Verifier({
125
+ provider: 'OrderService',
126
+ providerBaseUrl: 'http://localhost:3000',
127
+ pactUrls: ['./pacts/checkoutui-orderservice.json'],
128
+ stateHandlers: {
129
+ 'products exist': async () => {
130
+ await db.products.create({ id: 'abc', price: 9.99 });
131
+ }
100
132
  }
101
- }
133
+ }).verifyProvider();
102
134
  });
103
-
104
- await verifier.verifyProvider();
105
- // Fails if provider doesn't match consumer expectations
106
135
  });
107
136
  ```
108
137
 
109
- ## Schema Validation
138
+ ---
110
139
 
111
- **JSON Schema Contract:**
112
- ```javascript
113
- const userSchema = {
114
- type: 'object',
115
- required: ['id', 'email'],
116
- properties: {
117
- id: { type: 'integer' },
118
- email: { type: 'string', format: 'email' },
119
- name: { type: 'string' },
120
- createdAt: { type: 'string', format: 'date-time' }
121
- }
122
- };
123
-
124
- test('API response matches schema', async () => {
125
- const response = await fetch('/api/users/123');
126
- const user = await response.json();
127
-
128
- const validator = new Ajv();
129
- const valid = validator.validate(userSchema, user);
130
-
131
- expect(valid).toBe(true);
132
- expect(validator.errors).toBeNull();
133
- });
140
+ ## Breaking Change Detection
141
+
142
+ ```typescript
143
+ // Agent detects breaking changes
144
+ await Task("Contract Validation", {
145
+ currentContract: 'openapi-v2.yaml',
146
+ previousContract: 'openapi-v1.yaml',
147
+ detectBreaking: true,
148
+ calculateSemver: true,
149
+ generateMigrationGuide: true
150
+ }, "qe-api-contract-validator");
151
+
152
+ // Output:
153
+ // Breaking changes found: 2
154
+ // - Removed field: order.discount
155
+ // - Type change: order.total (number → string)
156
+ // Recommended version: 3.0.0 (major bump)
134
157
  ```
135
158
 
136
- ## API Versioning Testing
137
-
138
- **Test backward compatibility:**
139
- ```javascript
140
- test('v2 API is backward compatible with v1', async () => {
141
- // v1 client
142
- const v1Response = await fetch('/api/v1/users/123');
143
- const v1User = await v1Response.json();
159
+ ---
144
160
 
145
- // v2 client
146
- const v2Response = await fetch('/api/v2/users/123');
147
- const v2User = await v2Response.json();
161
+ ## CI/CD Integration
162
+
163
+ ```yaml
164
+ name: Contract Tests
165
+ on: [push]
166
+
167
+ jobs:
168
+ consumer-tests:
169
+ steps:
170
+ - run: npm run test:contract
171
+ - name: Publish Pacts
172
+ run: npx pact-broker publish ./pacts --broker-base-url $PACT_BROKER
173
+
174
+ provider-verification:
175
+ needs: consumer-tests
176
+ steps:
177
+ - name: Verify Provider
178
+ run: npm run verify:contracts
179
+ - name: Can I Deploy?
180
+ run: npx pact-broker can-i-deploy --pacticipant OrderService --version $VERSION
181
+ ```
148
182
 
149
- // v2 must include all v1 fields
150
- expect(v2User).toMatchObject(v1User);
183
+ ---
151
184
 
152
- // v2 can have additional fields
153
- expect(v2User.newField).toBeDefined();
154
- });
185
+ ## Agent Coordination Hints
155
186
 
156
- test('deprecated fields still present', async () => {
157
- const response = await fetch('/api/v2/users/123');
158
- const user = await response.json();
187
+ ### Memory Namespace
188
+ ```
189
+ aqe/contract-testing/
190
+ ├── contracts/* - Current contracts
191
+ ├── breaking-changes/* - Detected breaking changes
192
+ ├── versioning/* - Version compatibility matrix
193
+ └── verification-results/* - Provider verification history
194
+ ```
159
195
 
160
- // Deprecated field still works (with warning header)
161
- expect(user.oldField).toBeDefined();
162
- expect(response.headers.get('Deprecation')).toBeTruthy();
196
+ ### Fleet Coordination
197
+ ```typescript
198
+ const contractFleet = await FleetManager.coordinate({
199
+ strategy: 'contract-testing',
200
+ agents: [
201
+ 'qe-api-contract-validator', // Validation, breaking detection
202
+ 'qe-test-generator', // Generate contract tests
203
+ 'qe-security-scanner' // API security
204
+ ],
205
+ topology: 'sequential'
163
206
  });
164
207
  ```
165
208
 
166
- ## Related Skills
209
+ ---
167
210
 
211
+ ## Related Skills
168
212
  - [api-testing-patterns](../api-testing-patterns/) - API testing strategies
169
- - [regression-testing](../regression-testing/) - Contract regression
170
- - [agentic-quality-engineering](../agentic-quality-engineering/)
213
+ - [shift-left-testing](../shift-left-testing/) - Early contract validation
214
+ - [cicd-pipeline-qe-orchestrator](../cicd-pipeline-qe-orchestrator/) - Pipeline integration
171
215
 
172
- ## Remember
173
-
174
- **Breaking API changes break production.**
216
+ ---
175
217
 
176
- - Microservices depend on each other
177
- - Changes propagate across services
178
- - Integration tests miss distributed issues
179
- - Contract testing catches breaks early
218
+ ## Remember
180
219
 
181
- **Consumer-driven prevents surprises:**
182
- - Consumers define expectations
183
- - Providers validate before deployment
184
- - Breaking changes caught in CI
185
- - Safe, independent deployments
220
+ **Consumers own the contract.** They define what they need; providers must fulfill it. Breaking changes require major version bumps and coordination. CI/CD blocks deploys that break contracts. Use Pact for consumer-driven, OpenAPI for API-first.
186
221
 
187
- **With Agents:** `qe-api-contract-validator` automatically validates contracts, detects breaking changes, and ensures backward compatibility across all API versions.
222
+ **With Agents:** Agents validate contracts, detect breaking changes with semver recommendations, and generate migration guides. Use agents to maintain contract compliance at scale.