Files
net-kingdom/docs/adr/ADR-0012-playbook-capability-contract-ownership.md

4.2 KiB

ADR-0012 - Playbook Capability Contract Ownership

Status: Accepted Date: 2026-05-22 Deciders: Bernd Worsch, Codex

Context

ADR-0007 refined NetKingdom's orchestration role into a meta-orchestration layer. NetKingdom selects the services and playbooks a scenario needs, decides which parameters may be tuned, and holds the responsibility map. Railiance remains the execution-orchestration layer: Railiance playbooks provision and converge the actual infrastructure, cluster, platform services, and application layers.

That split requires a stable interface. If a Railiance playbook only describes behavior implicitly, NetKingdom cannot safely compose it into a scenario, compare it with another playbook, or know which parameter changes are safe. The IAM Profile provides the precedent: the consumer that needs a stable contract defines the contract, and providers conform to it.

Decision

NetKingdom owns the Playbook Capability Contract schema and vocabulary. Railiance owns playbook implementation and publishes one conformant declaration per playbook.

The first canonical contract is canon/standards/playbook-capability-contract_v0.1.md, backed by the machine-readable schema in canon/schemas/playbook-capability-declaration_v0.1.schema.json and the validator in tools/playbook-capability-contract/.

The contract is NetKingdom-owned with Railiance co-design:

  • NetKingdom defines the schema, controlled vocabulary, trust-state language, parameter-sensitivity rules, and conformance criteria.
  • Railiance authors and maintains declarations beside the playbooks they describe.
  • Railiance execution stays unchanged. The declaration never becomes the playbook runner.
  • NetKingdom meta-orchestration consumes declarations to select, parametrize, sequence, and build responsibility maps for scenarios.

ADR-0007 remains unchanged: execution stays in Railiance.

Versioning

The contract uses explicit document versions:

  • Patch/editorial changes clarify wording or examples without changing declaration semantics.
  • Minor versions add optional fields, vocabulary entries, or validator warnings that existing declarations can ignore.
  • Breaking versions change required fields, field meanings, allowed vocabulary, parameter-sensitivity semantics, trust-state semantics, or catalog consumption rules.

Declarations carry metadata.contract_version. A catalog may accept more than one contract version during a migration window, but must report the version used for each selected playbook.

Breaking-Change Governance

A breaking change requires:

  1. an ADR or ADR refinement explaining the change and migration path;
  2. a new versioned standard and schema;
  3. an updated validator;
  4. a coexistence window for the previous supported version where practical;
  5. notice to known declaration publishers, especially Railiance repos.

Breaking changes include:

  • removing or renaming required fields;
  • changing capability ids or resource-kind vocabulary;
  • changing trust-state meanings;
  • changing which parameter sensitivities are tenant-tunable;
  • changing catalog selection or override semantics;
  • moving execution responsibility out of Railiance into NetKingdom.

Consequences

  • Playbook declaration files live beside Railiance playbooks, normally at capabilities/playbooks/*.yaml.
  • NetKingdom can validate declarations before consuming them.
  • A playbook interface change becomes visible and versioned instead of an implicit break.
  • The responsibility map can be assembled from declarations, while Railiance keeps execution ownership.

Alternatives Considered

Put The Contract In Railiance

Railiance owns execution, so this is tempting. But NetKingdom is the consumer that needs stable scenario composition and responsibility-map inputs. Keeping the contract in NetKingdom mirrors the IAM Profile pattern and keeps scenario semantics close to the responsibility map.

Make Declarations Free-Form Documentation

Free-form docs are readable but not safely composable. NetKingdom needs a validator and controlled vocabulary so a playbook change cannot silently break a scenario.

Build A Dedicated Execution-Orchestration Repo Now

ADR-0007 explicitly defers that. The contract is useful now and does not require a new runner or repo boundary.