Home / Sample diff

What your last release actually fixed

Put two reviews side by side. A fix counts only when the same check ran again over the whole input, and the diff will also tell you what the fix broke.

Real engine output on both sides. The earlier review is the sample report. The later one is the same API description after a revision we wrote to show what a diff looks like: shared error responses added to every operation, schemas added where a body declared JSON but had none, and one type conflict settled. It stands in for a team's next release. It is not the publisher's real fix.

56resolved
71still there
1new
0not shown to be fixed

How a fix is counted

A finding is the same finding before and after if it has the same fingerprint. It is called resolved only when its rule ran again, at the same version, over input that was read in full. If the rule could not run the second time, or the input was only partly read, the finding is listed as not shown to be fixed with the reason, never quietly dropped. This run had 0 of those.

Causes, before and after

RuleCauseBeforeAfter
CC-CONSIST-01conflicting types for freight-values.absolutemoneycost10
CC-ERR-01no error response documented530
CC-EX-02example violates schema at /absolutemoneycost01
CC-SCHEMA-01no schema for application/json20

New since the earlier review (1)

MediumCC-EX-02 Request or success-response example does not validate against its own schema

Example does not match its schema at `/absoluteMoneyCost`: "1.00" is not of type "number"

Not a finding anyone had before. See how it arose in the note below.

This one came from the revision itself. It changed the type of the money property from string to number, which settled the conflict between two schemas, but left an example value of "1.00" in quotes. The example no longer matched its own schema. A person reading the change would easily miss it. The diff reported it because the example check ran again after the change.

Rule outcomes that changed

RuleLooks forBeforeAfter
CC-CONSIST-01The same property has incompatible types in different schemasGap foundNo gap
CC-ERR-01Operation documents no error responseGap foundNo gap
CC-EX-02Request or success-response example does not validate against its own schemaNo gapGap found
CC-REF-01Internal $ref that does not resolveNot applicableNo gap
CC-SCHEMA-01Request or response declares a structured content type but no schemaGap foundNo gap
ERR-02Error responses lack a shared, machine-readable shapeNot applicableNo gap
ERR-04Which failures are worth retrying is not describedNot applicableNo gap

Two rules went from not applicable to passed because the revision gave them something to check: once error responses exist, their shape and retry advice can be examined.

Resolved (56)

RuleCausePlaces
MediumCC-ERR-01no error response documented53
HighCC-SCHEMA-01no schema for application/json2
MediumCC-CONSIST-01conflicting types for freight-values.absolutemoneycost1

Still there (71)

RuleCausePlaces
MediumCC-PARAM-01required parameter without description42
LowCC-DESC-02weak description: restates its name9
MediumPAG-01no pagination5
LowCC-RESP-01response without description4
LowAUTH-02security scheme without description2
LowCC-DESC-02weak description: too short2
MediumCC-PARAM-01required request property without description1
LowCC-EX-01no request or response example1
LowDATA-02unformatted date/time properties1
LowIDEM-01no idempotency1
LowNAME-01inconsistent casing: kebab-case,snake_case,camelcase1
LowNAME-01verbs in some paths1
LowRATE-01no rate limit documentation1

Also available as

Get a free first review