Compatibility

The three contracts outside this repository depend on, and the number each is at. Each is bumped only for a breaking change.

ContractVersionWhat it versionsEnforced by
FORMAT_VERSION1the ship.ks file formatks_core::check, which reads the file's keepshipping: header
STEP_API6the StepKind trait a step implementsHarnessBuilder::build, which refuses a step built against another version
SCRIPT_PROTOCOL1the JSON-stdio protocol between the harness and a TypeScript scriptdeclared and versioned, not yet enforced — nothing reads it at runtime yet

FORMAT_VERSION and STEP_API have a runtime gate today. SCRIPT_PROTOCOL is read by nothing yet — that lands with the script host — so a step author bumping it is making a promise this repository has not yet made the tooling keep.

Port contract digest: 484b6ad0cf46c4a1

A digest of the port traits in crates/core/src/ports/ — the method signatures only, with comments and formatting normalised away. It is pinned in crates/testing/tests/compatibility.rs next to the STEP_API it belongs to, so a port trait changed without STEP_API bumped fails CI. Change a trait and you must change both, and add a ## STEP_API entry under ## Changelog in docs/PORTS.md.

Regenerating this file

This file is generated. To regenerate it after bumping a constant:

KS_BLESS=1 cargo test -p ks-testing --test compatibility