# Contract Diff — {{change_id}}

> Auto-generated by `tools/contract_diff.py`. Reviewed during Verify and Deliver.

## Summary

| Field | Value |
|-------|-------|
| Change ID | `{{change_id}}` |
| Base version | `{{base_version}}` |
| Head version | `{{head_version}}` |
| Breaking? | {{yes / no}} |
| Approval required | {{yes / no}} |

## Files Changed

| File | Old Version | New Version | Breaking |
|------|-------------|-------------|----------|
| `{{path}}` | `{{old}}` | `{{new}}` | {{y / n}} |

## OpenAPI Diff

```diff
--- a/contracts/api/{{file}}.yaml
+++ b/contracts/api/{{file}}.yaml
@@
- removed: {{field}}
+ added:    {{field}}
~ changed: {{field}} ({{old_type}} → {{new_type}})
```

## AsyncAPI Diff

```diff
--- a/contracts/events/{{file}}.yaml
+++ b/contracts/events/{{file}}.yaml
@@
- channel removed: {{name}}
+ channel added:   {{name}}
~ payload field:   {{field}}
```

## Breaking Change Detail

> _Filled automatically. Each breaking change must link to a migration note in `contracts/CHANGELOG.md`._

- {{breaking_change_1}}
  - Migration: {{link}}

## Compat Check Result

```
$ tools/contract_diff.py --base {{base}} --head {{head}}
RESULT: {{COMPATIBLE | BREAKING}}
EXIT:   {{0 | 1}}
```

## Sign-off

- [ ] Contracts owner reviewed
- [ ] Provider team reviewed
- [ ] Consumer teams reviewed
- [ ] (If breaking) Human approval received
