api-contract-reviewer — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited api-contract-reviewer (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Reviews contracts — REST OpenAPI specs and protobuf .proto files — for stability, versioning hygiene, and completeness. Catches the contract issues architects encoded rules against before they ship to clients.
.proto files, OpenAPI YAML, or any handler that affects the wire contract.Same shape as security-reviewer §2 — findings table with severity, then a one-line summary.
| Severity | Rule | Location | Evidence | Fix |
|---|---|---|---|---|
| Critical | Breaking change to v1 | `proto/orders/v1/order.proto:23` | Field `status` type changed `string` → `int32` | Revert; introduce `status_v2` as a new field in v1, deprecate `status`, or bump to v2 |
| High | Versioning mismatch | `openapi.yaml` | Endpoint `/orders` lacks `/v1/` prefix | Add `/v1/` prefix per rest-api-architect §4 |
| Medium | Missing OpenAPI example | `openapi.yaml:42` | `CreateOrderRequest` has no `example:` | Add a realistic example — drives SDK gen + docs |
| Low | Inconsistent error shape | `openapi.yaml` | 404 returns `{detail: ...}` while 422 returns RFC 7807 | Standardize on RFC 7807 per rest-api-architect §7 |Severity guide:
openapi-diff; gRPC: buf breaking) — surfaces wire-breaking changes.Per rest-api-architect §4 and protobuf-architect §4:
/v1/, /v2/, etc. Not in headers, not in query params.acme.shop.orders.v1), never appended to message names (OrderV1 is wrong).vN package + run side-by-side.[deprecated = true] (proto) or deprecated: true (OpenAPI), set Deprecation / Sunset headers (RFC 9745 / 8594) for REST.reserved N; + reserved "name";.int32 → string is wire-breaking even if the runtime value fits both. mandatory.** Enum value names UPPER_SNAKE_CASE` prefixed with the enum name.StringValue, Int32Value) — use optional instead.Per rest-api-architect §7 for REST and grpc-architect §2 for gRPC:
type, title, status, detail, instance, correlation_id. Never {"detail": "..."} and {"errors": [...]} mixed in one API.Per rest-api-architect §8 and §9:
400. Documented in OpenAPI as a required header.412. Documented.next_cursor and limit in response."99.99"), never JSON numbers.401, 403, 404, 409, 412, 422).false, easy to miss.1.0.0, not 0.1.7).Per grpc-architect §1:
google.protobuf.Empty as input.The spec is the contract; drift between code and spec is a contract failure:
gen/ per protobuf-architect §6. PR shows the generated diff alongside the proto diff.Run these on the diff before the read pass; their output goes into the report.
| Tool | Catches |
|---|---|
buf breaking --against '.git#branch=main,subdir=proto' | Wire-breaking changes in .proto files |
buf lint | proto3 style + Buf-style package naming |
openapi-diff <old> <new> | Wire-breaking changes in OpenAPI specs (additions, removals, type changes) |
swagger-cli validate openapi.yaml (or redocly lint) | OpenAPI 3.1 validity + completeness rules |
| Snapshot diff in CI | assert(app.openapi() == snapshot) per fastapi-architect §10 |
These run in CI per rest-api-architect §15 and protobuf-architect §8 — review they're actually wired and failing builds on findings.
This skill is about whether the contract is stable and complete, not whether the underlying implementation is fast or safe.
buf breaking / buf lint.BREAKING CHANGE: footer in the commit.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.