Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Use when setting up integration testing for a frontend-backend API boundary, evaluating whether two services are safe to deploy independently, or replacing slow end-to-end tests with contract tests.
.claude/skills/thedaviddias-contract-testing/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-17 | ✗→✓ | ▲ Improved | -19% | 0% |
| case-03 | ✓→✓ | = Same ✓ | 13% | 0% |
| case-02 | ✓→✓ | = Same ✓ | 3% | 0% |
| case-04 | ✓→✓ | = Same ✓ | 3% | 0% |
| case-05 | ✓→✓ | = Same ✓ | -2% | 0% |
Integration tests that require both services running at the same time are slow, brittle, and hard to maintain. Consumer-driven contract testing decouples the consumer and provider test suites — each team can run their tests independently, yet the broker guarantees that the published contract is always verified against the live provider. This catches API mismatches days earlier than end-to-end tests, with far less infrastructure overhead.
Check whether the frontend has consumer-driven contract tests that define and verify the API contract with the backend.
Add Pact consumer tests for the frontend API client, publish the contracts to a broker, and add provider verification to the backend CI pipeline.
Explain how consumer-driven contract testing works, what the Pact workflow looks like end-to-end, and how it compares to mocking and end-to-end testing.
Review the Pact consumer tests. Flag interactions that are too permissive (any-type matchers on fields the consumer actually uses), missing status code assertions, and interactions for endpoints the consumer no longer calls.
For full implementation details, code examples, and framework-specific guidance, see references/rule.md.
Rule page: https://frontendchecklist.io/en/rules/testing/contract-testing
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-03 | pass→pass | 17,343 | 16,804 | -3% | 1 | 1 | 0% | 3,312 | 3,739 | +13% | 0 | 0 | — |
case-01 | fail→fail | 9,566 | 9,194 | -4% | 1 | 1 | 0% | 1,663 | 1,947 | +17% | 0 | 0 | — |
case-02 | pass→pass | 14,199 | 11,315 | -20% | 1 | 1 | 0% | 2,611 | 2,681 | +3% | 0 | 0 | — |
case-04 | pass→pass | 11,159 | 10,544 | -6% | 1 | 1 | 0% | 2,124 | 2,191 | +3% | 0 | 0 | — |
case-05 | pass→pass | 15,525 | 13,346 | -14% | 1 | 1 | 0% | 2,571 | 2,532 | -2% | 0 | 0 | — |
case-06 | pass→pass | 8,679 | 8,528 | -2% | 1 | 1 | 0% | 1,792 | 2,034 | +14% | 0 | 0 | — |
case-07 | pass→pass | 8,647 | 8,576 | -1% | 1 | 1 | 0% | 1,968 | 2,319 | +18% | 0 | 0 | — |
case-08 | pass→pass | 10,011 | 5,696 | -43% | 1 | 1 | 0% | 1,613 | 1,393 | -14% | 0 | 0 | — |
case-09 | pass→pass | 16,329 | 15,629 | -4% | 1 | 1 | 0% | 3,172 | 3,257 | +3% | 0 | 0 | — |
case-10 | pass→pass | 10,699 | 9,886 | -8% | 1 | 1 | 0% | 2,171 | 2,125 | -2% | 0 | 0 | — |
case-11 | pass→pass | 7,571 | 7,016 | -7% | 1 | 1 | 0% | 1,330 | 1,569 | +18% | 0 | 0 | — |
case-12 | pass→pass | 10,555 | 15,895 | +51% | 1 | 1 | 0% | 2,018 | 3,284 | +63% | 0 | 0 | — |
case-13 | pass→pass | 9,866 | 6,637 | -33% | 1 | 1 | 0% | 1,819 | 1,555 | -15% | 0 | 0 | — |
case-14 | pass→pass | 9,572 | 6,307 | -34% | 1 | 1 | 0% | 1,580 | 1,454 | -8% | 0 | 0 | — |
case-15 | pass→pass | 11,071 | 13,698 | +24% | 1 | 1 | 0% | 2,453 | 3,172 | +29% | 0 | 0 | — |
case-16 | pass→pass | 15,925 | 13,497 | -15% | 1 | 1 | 0% | 2,689 | 2,556 | -5% | 0 | 0 | — |
case-17 | fail→pass | 8,159 | 5,421 | -34% | 1 | 1 | 0% | 1,616 | 1,308 | -19% | 0 | 0 | — |
case-23 | pass→pass | 15,358 | 12,038 | -22% | 1 | 1 | 0% | 2,882 | 2,517 | -13% | 0 | 0 | — |
case-18 | pass→pass | 11,863 | 14,303 | +21% | 1 | 1 | 0% | 2,424 | 2,934 | +21% | 0 | 0 | — |
case-19 | pass→pass | 10,378 | 6,941 | -33% | 1 | 1 | 0% | 1,841 | 1,556 | -15% | 0 | 0 | — |
case-20 | pass→pass | 8,963 | 7,633 | -15% | 1 | 1 | 0% | 1,651 | 1,671 | +1% | 0 | 0 | — |
case-21 | pass→pass | 16,151 | 10,811 | -33% | 1 | 1 | 0% | 2,320 | 2,214 | -5% | 0 | 0 | — |
case-22 | pass→pass | 14,041 | 12,161 | -13% | 1 | 1 | 0% | 2,535 | 2,629 | +4% | 0 | 0 | — |
case-24 | pass→pass | 8,827 | 8,805 | -0% | 1 | 1 | 0% | 1,858 | 2,136 | +15% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 24 cases were attempted. The headline lift of +4 percentage points is the difference between those two pass rates over the 24 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.