Skip to content

Compatibility

This document defines forward and backward compatibility guarantees for Synthetic Open Schema.


Compatibility Principles

Backward Compatibility

Definition: Checks written for an older version of the specification MUST work with implementations supporting a newer version within the same major version.

Example: A check written for v1.0 MUST work with a runner implementing v1.5.

Forward Compatibility

Definition: Implementations SHOULD handle checks that include unknown fields gracefully, either by ignoring them or providing clear error messages.

Example: A v1.0 implementation encountering a v1.5 check with new optional fields SHOULD either: 1. Ignore the unknown fields and execute the check 2. Provide a clear error indicating unsupported fields


Version Compatibility Matrix

Within Stable Major Versions

Check Version Runner Version Compatibility Notes
v1.0 v1.0 ✅ Full Exact match
v1.0 v1.5 ✅ Full Backward compatible
v1.5 v1.0 ⚠️ Partial Unknown fields may be ignored
v1 v2 ❌ None Major version breaking change

Beta/Alpha Versions

Beta and alpha versions have NO compatibility guarantees across versions:

Check Version Runner Version Compatibility
v1beta1 v1beta2 ❌ None
v1alpha1 v1alpha2 ❌ None
v1beta1 v1 ❌ None (migration required)

Field Evolution Rules

Adding Fields

New optional fields MAY be added in minor versions:

# v1.0
spec:
  url: https://example.com
  timeout: 5s

# v1.1 adds optional field
spec:
  url: https://example.com
  timeout: 5s
  maxRedirects: 3  # New in v1.1, optional

New required fields MUST NOT be added within a major version.

Deprecating Fields

Fields may be deprecated but MUST remain functional:

# Deprecated in v1.5, removed in v2.0
spec:
  url: https://example.com
  retries: 3  # Deprecated, use retryPolicy instead
  retryPolicy:  # New field replacing retries
    maxAttempts: 3

Changing Defaults

Default values MUST NOT change within a major version, as this changes behavior.


Check Kind Compatibility

Adding Check Kinds

New check kinds MAY be added at any time: - HttpCheck, TcpCheck (v1.0) - DnsCheck, SslCheck (v1.1) ← Allowed - BrowserCheck (v1.2) ← Allowed

Removing Check Kinds

Check kinds MUST NOT be removed within a major version: - Deprecation warnings in v1.x - Removal only in v2.0


Assertion Compatibility

Adding Assertions

New assertion types MAY be added:

# v1.0
checks:
  - type: statusCode
    operator: equals
    value: 200

# v1.1 adds new assertion type
checks:
  - type: statusCode
    operator: equals
    value: 200
  - type: responseTime  # New in v1.1
    operator: lessThan
    value: 500ms

Adding Operators

New operators MAY be added for existing assertions:

# v1.0: equals, notEquals, contains
operator: equals

# v1.1: adds regex operator
operator: regex  # New in v1.1

Implementation Requirements

Conformance Levels

Implementations SHOULD declare their conformance level:

Full Conformance: Supports all required features of the declared version Partial Conformance: Supports subset of features (must document which)

Example:

This runner supports Synthetic Open Schema v1.2 with full conformance.
Supported check kinds: HttpCheck, TcpCheck, DnsCheck, SslCheck

Unknown Field Handling

Implementations MUST either: 1. Strict Mode: Reject checks with unknown fields (recommended for validation tools) 2. Permissive Mode: Ignore unknown fields and execute check (recommended for runners)

The mode SHOULD be configurable.


Migration Guides

When major versions introduce breaking changes, migration guides MUST be provided documenting: 1. What changed 2. Why it changed 3. How to migrate existing checks 4. Automated migration tools (if available)


Guarantees Summary

Guarantee Within Major Version Across Major Versions
Backward Compatibility ✅ Required ❌ Not guaranteed
Forward Compatibility ⚠️ Best effort ❌ Not guaranteed
Field additions ✅ Allowed (optional) ✅ Allowed
Field removals ❌ Prohibited ✅ Allowed
Default changes ❌ Prohibited ✅ Allowed
Check kind additions ✅ Allowed ✅ Allowed
Check kind removals ❌ Prohibited ✅ Allowed (with deprecation)