Purpose
Detect contract drift and breaking changes; require explicit versioning or compatibility strategy before merge.
When to Use / When NOT to Use
Use when: OpenAPI/Swagger/AsyncAPI/protobuf/GraphQL changes; API version bumps; review of public endpoints.
Do not use when: internal-only private functions with no published contract; UI-only PRs.
Preconditions
Contract files and/or implementation routes available. Prefer diff of contract + code.
Inputs / Outputs
Inputs: contract files, diff, IMPACT_REPORT (optional), CONTEXT_PACK.
Outputs: CONTRACT_REPORT
Upstream / Downstream
Upstream: change-impact-analyzer, code-reviewer, feature-implementer.
Downstream: quality-gate, delivery-planner, pr-generator, migration-surgeon.
Core Principles
- Published contract is the API promise.
- Breaking = removed/renamed fields, tighter types, new required fields, behavior changes that violate docs.
- Additive changes preferred; otherwise version or dual-run.
- Implementation must match contract (drift is a defect).
- Auth and error shapes are part of the contract.
- Evidence from diff/spec tools when available.
- Do not rewrite product requirements.
Process
- Locate contracts (openapi.yaml, proto, schema.graphql, etc.).
- Diff old vs new; classify Additive | Breaking | Docs-only | Drift.
- Cross-check implementation routes/handlers vs contract.
- Versioning strategy — URL/header/semver/package; migration notes.
- Consumer guidance from IMPACT_REPORT if present.
- Decision: Block on unversioned Breaking for public APIs.
Evidence Requirements
Cite operationIds/paths/fields. Prefer machine-readable diffs.
Stop Conditions / Failure Modes
| Condition | Action |
|---|---|
| Breaking public API, no version/migration | Block |
| Contract updated but code not (or reverse) | Revise |
| No contract exists for a “public API” claim | ProceedWithConditions + require contract |
Severity + Confidence
Unversioned breaking public API → Critical/High.
Output Contract
## CONTRACT_REPORT
Contracts checked: ...
Changes: Additive | Breaking | Drift | Docs
Breaking details: ...
Version/migration plan: ...
Impl drift: ...
Decision: Proceed | ProceedWithConditions | Revise | Block
Handoffs
change-impact-analyzer, quality-gate, migration-surgeon, feature-implementer.
Never
- Never approve silent breaking changes.
- Never invent OpenAPI that was not in repo without labeling it proposed.
- Never ignore auth/error contract changes.