Intelligence

ContractRadar

Machine change-governance: a ~200-byte hash poll detects any contract drift, then localises it to a JSON Pointer, classifies it breaking / minor / cosmetic, and routes it — automatically.

Contracts watched
5 · demo
Open breaking
3
Changes recorded
6
Daily watch cost
≈200 B /contract
Radar
Contracts under watch · 5
ServiceRevFingerprint (L0)FieldsLast changeSeen
Payment
payment
v3sha256:5dbad8eaed…3/4breakingdemo10s ago
Order Management
order-management
v2sha256:603a984092…4/4breakingdemo10s ago
Shipment Tracking
shipment-tracking
v2sha256:bf0edf001a…2/4minordemo10s ago
Billing Account
billing-account
v2sha256:1e62cc5b02…2/3cosmeticdemo10s ago
Customer Account
customer-account
v2sha256:71185ac338…1/2minordemo10s ago
Change feed
Detected · localised · classified · routed
  • paymentbreakingpagedv71d ago
    • breakingdomain-changedrange [0, 1000000] → [0, 500000]#/components/schemas/payment/properties/amount
    sha256:a74dae8d54…sha256:5dbad8eaed…
  • customer-accountminorloggedv62d ago
    • minorenum-value-addedenum += 'enterprise'#/components/schemas/customer-account/properties/segment
    sha256:c6dca59d5b…sha256:71185ac338…
  • billing-accountcosmeticsuppressedv53d ago
    acknowledged
    • cosmeticmeaning-changedbusiness meaning edited#/components/schemas/billing-account/properties/amount/description
    sha256:65de0ff161…sha256:1e62cc5b02…
  • shipment-trackingminorloggedv44d ago
    • minorfield-addednew optional field 'trackingRef'#/components/schemas/shipment-tracking/properties/trackingRef
    sha256:4602839da6…sha256:bf0edf001a…
  • order-managementbreakingpagedv35d ago
    • breakingfield-now-required'channel' became required#/components/schemas/order-management/required
    sha256:c81d159a66…sha256:603a984092…
  • paymentbreakingpagedv26d ago
    • breakingenum-value-removedenum -= 'rate_limit'#/components/schemas/payment/properties/action
    sha256:a74dae8d54…sha256:b8d74dbd80…
Governance
Routing policy
breaking
Removed enum / required field / type change — pages the on-call.
minor
Additive: new optional field, new enum value — logged to the channel.
cosmetic
Meaning / scenario / title edits — suppressed (no noise).
Alert channel

Breaking changes notify consumers via webhook + Deprecation/Sunset headers (RFC 8594) and the X-API-Change-Level response header.

Provider
Live sandbox radar

ContractRadar consumes the Companion Sandbox's L0/L1/L2 change-governance surface.

Phase 0 · L0
Fingerprint Lab — how the ~200-byte radar works

A whole API spec — paths, schemas, enums, the lot — is reduced to one canonical SHA-256 (servers stripped so a redeploy doesn't flip it). That hash is the entire L0 payload. To ask "did anything change?" you send the hash as an If-None-Match ETag: unchanged → 304 with an empty body; changed → a fresh ~200-byte L0, and only then do you pull L1/L2. Edit the spec below and Poll to watch it drift.

OpenAPI spec (editable)
L0 response (the whole payload)
{
  "api": "Orders API",
  "version": "2.4.1",
  "schemaHash": "sha256:5c4617bcf9dc80ababfbec299942c951751dd791a7cddb98c521e2403733064e"
}
L0 payload
125 B
Full spec
1019 B
Saved per poll
87.7%

The L0 stays ~125 bytes no matter how big the spec is — a 2 KB or a 2 MB spec both fingerprint to the same fixed size. And an unchanged poll is a 304 with a 0-byte body. That is the whole "200 bytes a day" cost.

Poll timeline
Press Poll L0 to baseline, press again (unchanged → 304), then edit the spec and Poll again to see drift detected from a 200-byte hash.
Why ContractRadar
Stop shipping silent API breaks

A partner narrows one enum, makes one field required, changes one type — and three integrations break in production weeks later. ContractRadar makes that impossible to miss: it watches every contract for a couple of hundred bytes a day and turns any drift into a dated, localised, severity-graded, machine-readable event.

Detect

A ~200-byte L0 hash poll (ETag/304) flips the instant any byte of the contract moves.

Localise

L1 Merkle fingerprints + L2 diff pin the change to an exact RFC-6901 JSON Pointer.

Classify

Every move is graded breaking / minor / cosmetic — no human reads a diff.

Notify

Breaking pages the on-call; consumers get versioned headers + a machine changelog.

≈ 200 B

per contract, per day — the entire watch cost (L0 hash, ETag/304).

3 levels

breaking / minor / cosmetic routing, so only real breaks page anyone.

100% machine

detect → localise → classify → notify; only the DECISION stays human.

How it compares
CapabilityContractRadarManual changelogoasdiff in CIUptime monitor
Catches a one-word / enum / domain change
Localises to an exact JSON Pointer
Classifies severity automatically
Auto-signals consumers (webhook + headers)
Zero manual changelog writing
Daily watch cost ≈ 200 bytes

full · partial / manual · none