Status: Draft v2.1
Date: 2026-03-04
Source: SPEC-v2.md
This document defines the versioned adapter contracts required by OutcomeGraph Steward for v2.1.
All adapters are discovered at startup and validated before runtime operations begin.
Runtime loads adapter definitions from:
- built-in adapters
.outcomegraph/adapters/<type>/*.json- directories from
$OG_ADAPTER_PATH(override)
Each definition must provide a manifest object and must pass schema and interface checks.
All manifests are schema-versioned records:
schema_version: 2type:worker,oracle,sandbox,store,exportername: adapter key used for selectionimplementation_version: stringinterface_version: integercapabilities: string arrayentrypoint: adapter-specific launch string
Required versions:
- worker:
interface_version == 1 - oracle:
interface_version == 1 - sandbox:
interface_version == 1 - store:
interface_version == 1 - exporter:
interface_version == 1
Any mismatch is hard-failed for required adapters with ADAPTER_INTERFACE_MISMATCH.
distill(input: DistillInput) -> DistillDeltareplay(input: ReplayInput) -> ReplayPlanexplain(input: ExplainInput) -> ClaimSet
run(input: OracleInput) -> OracleResult
create(input: EnvSpec) -> SandboxRefexec(input: ExecInput) -> ExecResultdestroy(input: SandboxRef) -> DestroyResult
put(input: StorePutInput) -> StorePutResultget(input: StoreGetInput) -> StoreGetResultexists(input: StoreExistsInput) -> StoreExistsResult
render(input: ExportInput) -> ExportResult
The following payloads are used as input/output across the above methods:
DistillInputDistillDeltaReplayInputReplayPlanReplayResultClaimSetOracleInputOracleResultEnvSpecSandboxRefExecInputExecResultDestroyResultStorePutInputStoreGetInputStoreExistsInputExportInput
Canonical examples are provided in SPEC-v2.md sections 11 and 12.
Steward exposes the following registration and resolution operations:
register(type, name, impl, manifest)
validates and stores an adapter implementation.set_default(type, name)
marks a default adapter for orchestration calls.resolve(type, name?)
returns selected adapter for calls; with noname, uses default.list(type)
returns all registered adapters for diagnostics.
If manifest validation fails, startup behavior is:
status: errorcode: ADAPTER_INTERFACE_MISMATCH- include:
type,name,required_interface_version,detected_interface_version,remediation - fail startup when adapter is required
- continue in degraded mode when optional and safe to do so
Required adapters are documented in implementation defaults and include worker and store interfaces.
Implemented defaults for v2.1:
- worker:
codex(v1) - store:
filesystem(v1) - oracle:
null-implfallback in recovery mode where applicable - sandbox: local worktree sandbox
- exporter:
canonicaldeterministic renderer
For architecture-level integration, see ARCHITECTURE.md.