OSOP Versioning Policy
March 31, 2026 · View on GitHub
Version: 1.0.0-draft
Overview
OSOP uses Semantic Versioning 2.0.0 for both the protocol specification and individual workflow documents. This document defines the versioning rules, what constitutes breaking vs. non-breaking changes, and the RFC process for proposing schema changes.
Two Version Fields
An OSOP document contains two distinct version identifiers:
| Field | Scope | Example | Purpose |
|---|---|---|---|
osop_version | Protocol | "1.0" | Which version of the OSOP specification this document conforms to. |
version | Workflow | "3.2.1" | The version of this specific workflow, managed by its owner. |
These versions are independent. A workflow at version 5.0.0 can conform to OSOP protocol version 1.0.
Protocol Versioning
Format
The osop_version field uses major.minor format (no patch):
- Major increments signal breaking changes to the protocol schema.
- Minor increments signal backward-compatible additions.
Patch-level changes (typo fixes, clarifications) are tracked in the spec repository's changelog but do not change the osop_version value.
Breaking Changes (Major Version Bump)
A change is breaking if a valid document under version N would be invalid or have different semantics under version N+1. Examples:
- Removing a required field
- Changing the type of an existing field
- Renaming a field
- Changing the semantics of an edge mode
- Removing a node type
- Changing the expression language
- Altering the variable interpolation syntax
Non-Breaking Changes (Minor Version Bump)
A change is non-breaking if all valid documents under version N.M remain valid under version N.(M+1). Examples:
- Adding a new optional field
- Adding a new node type
- Adding a new edge mode
- Adding a new trigger type
- Adding a new subtype to an existing node type
- Relaxing a constraint (e.g., allowing a field to be optional that was previously required)
- Adding new built-in variable namespaces
Version Negotiation
Engines MUST declare which OSOP versions they support. When loading a document:
- Parse the
osop_versionfield. - If the major version is unsupported, reject the document with a clear error.
- If the minor version is higher than supported, process the document but warn about potentially unrecognized fields.
- If the minor version is lower or equal, process normally.
Workflow Versioning
Format
The version field on a workflow uses full SemVer (major.minor.patch):
version: "2.1.3"
Guidelines for Workflow Authors
Major (breaking):
- Changing the workflow's inputs or outputs in a backward-incompatible way
- Removing nodes that external systems depend on
- Changing the fundamental flow structure
Minor (feature):
- Adding new nodes or branches
- Adding optional inputs
- Improving retry or timeout policies
- Adding observability
Patch (fix):
- Fixing a timeout value
- Correcting a URL
- Updating a description
- Fixing a CEL expression
Recording Changes
Use the evolution.changelog block to record version history:
evolution:
changelog:
- version: "2.1.3"
date: "2026-03-30"
changes:
- "Fixed health check timeout from 5s to 15s"
- version: "2.1.0"
date: "2026-03-15"
changes:
- "Added security scan node"
- "Added Slack notification on failure"
- version: "2.0.0"
date: "2026-01-10"
changes:
- "BREAKING: Migrated from ECS to Kubernetes deployment"
- "Changed inputs.cluster to inputs.namespace"
Deprecation Policy
When a node, field, or feature is deprecated:
- Mark it in
evolution.deprecated_nodeswith areason,replacement, andsunset_date. - Engines MUST emit a warning when encountering deprecated elements.
- Engines MUST NOT remove support for deprecated elements until the
sunset_datehas passed. - The minimum deprecation window is 90 days from announcement to sunset.
evolution:
deprecated_nodes:
- id: "old-deploy"
reason: "Replaced by canary deployment strategy"
replacement: "canary-deploy"
sunset_date: "2026-07-01"
RFC Process for Protocol Changes
All changes to the OSOP protocol specification go through the RFC (Request for Comments) process.
Stages
-
Discussion — Open a GitHub Discussion in the
osop/specrepository describing the problem and proposed solution. Gather initial feedback. -
RFC Draft — Create a pull request adding a document to
rfcs/with the following structure:rfcs/ NNNN-short-title.mdThe RFC document must include:
- Summary: One-paragraph description
- Motivation: Why this change is needed
- Design: Detailed proposal with examples
- Breaking Changes: Whether this is a major or minor change and why
- Migration Path: How existing documents adapt (if breaking)
- Alternatives Considered: What other approaches were evaluated
- Open Questions: Unresolved issues
-
Review Period — Minimum 14 days for minor changes, 30 days for major changes. The RFC must receive at least two approvals from maintainers.
-
Final Comment Period (FCP) — 7 days. The RFC is marked as entering FCP. Last chance for objections.
-
Merge — The RFC is merged and assigned a number. Implementation begins.
-
Implementation — Schema changes, validator updates, and documentation are implemented in a single release.
-
Release — The new protocol version is published with updated JSON Schema files, documentation, and validator tools.
RFC Numbering
RFCs are numbered sequentially starting from 0001. The number is assigned when the RFC enters the review period, not when it is first proposed.
Who Can Propose RFCs
Anyone. The OSOP RFC process is open to all community members. Maintainers may fast-track non-controversial minor additions but must still go through the FCP stage.
Release Schedule
OSOP does not follow a fixed release cadence. Releases are made when:
- One or more RFCs have been accepted and implemented
- Sufficient testing has been performed
- Documentation has been updated
- Migration guides have been written (for breaking changes)
Minor releases may happen as frequently as monthly. Major releases are expected to be rare (no more than once per year) to maintain ecosystem stability.
See SPEC.md for the full protocol specification. See CONTRIBUTING.md for contribution guidelines.