Runtime & Integrations · Runtime Harness

Ports

Where, exactly, effects enter.

Ports are typing.Protocols — DatasetStore, TraceSource, TaskRunner, JudgeModel, ResultStore, ScoreSink — with typed request and result dataclasses. They are the narrow, swappable, deletable seams that keep the core effect-free. The core never imports this module.

Because a port is just a protocol, a backend is “implement this interface,” and a result type constrains what can come back. Crucially, every port result carries diagnostics, never scores: a failed task or judge returns typed infrastructure evidence, not a low quality value.

The six ports

PortReturns
DatasetStoreExamples, references, dataset status and version.
TraceSourceRecorded host behavior as TraceEnvelopes.
TaskRunnerReplayed outputs, or a typed failure diagnostic.
JudgeModelJudge evidence with a JudgeEvidenceStatus — never a score.
ResultStorePersisted RunRecords, Scorecards, reports, baselines.
ScoreSinkA rendering of immutable results — it cannot mutate them.
The line a port may not cross A port carries evidence and data across the boundary and nothing else. It is the conceptual seam described in Ports & Adapters; the concrete implementations are Integrations.

Next steps