Platform Contract¶
A research platform can embed Heartwood as its research interaction layer without handing Heartwood its compute, identity, storage, or inference infrastructure. This contract defines that boundary: what Heartwood owns, what the platform owns, what a platform provides for each capability, and the security properties both sides must preserve. Use it to scope a platform integration, to review one, and as the list of what Heartwood asks a platform to provide.
This contract includes capabilities that are not yet implemented
This page describes the complete contract so platforms can prepare for all of it. Every part that current Heartwood does not implement is marked with a box like this one and links the GitHub issue that owns it. A capability is supported only after the conformance evidence in Validate a Platform exists for that exact platform. The contract as a whole is tracked in #150 and scheduled in the 0.5.0 milestone.
Contract at a Glance¶
| Part | What it covers | Status |
|---|---|---|
| Hosting | Running the published artifact with a persistent project | Implemented |
| Access and identity | Authenticated routing and the launch capability | Implemented for one person per gateway; verified per-user identity in #164 |
| Deployment policy | Restrictions the platform imposes on every project | Partial; deployment-owned enforcement in #154 |
| Inference | Model endpoints and authorized model discovery | Partial; platform-managed routes in #151 |
| Platform services | Compute, data, and application tools through MCP | Not implemented; #138 and #152 |
| Agent isolation | Keeping agent tools away from Heartwood's own controls | Not implemented; #163 |
| Controlled data | Read-only inputs, enforced egress denial, and reviewed release of outputs | Not implemented; #129 |
| Audit and provenance | Signed checkpoints, retention, and operation references | Partial; #160 and #128 |
| Contract artifacts | Versioned schemas, API descriptions, and a conformance kit | Not implemented; #150 |
The Boundary¶
Heartwood owns the research session. The platform owns the infrastructure and the authority to use it.
flowchart TB
Researcher(["Researcher"])
Identity["Platform: identity and project access"]
Proxy["Platform: authenticated proxy"]
Gateway["Heartwood: gateway, sessions, reviewed commands, projections, audit"]
Agent["Heartwood: OpenHands agent loop and project tools"]
Inference["Platform: inference endpoint and authorized models"]
Services["Platform: services for compute, data, and applications"]
Infrastructure[("Platform: schedulers, storage, entitlements, quotas")]
Researcher --> Identity --> Proxy --> Gateway --> Agent
Agent -- "model requests" --> Inference
Agent -. "reviewed tool calls" .-> Services
Services -.-> Infrastructure
classDef heartwood fill:#0b694d26,stroke:#2b8268
classDef platform fill:#3f5b7426,stroke:#6f8fae
classDef planned stroke-dasharray: 5 5
class Gateway,Agent heartwood
class Identity,Proxy,Inference,Services,Infrastructure platform
class Services,Infrastructure planned
In the figures on this page, green marks what Heartwood owns, blue marks what the platform owns, and dashed outlines mark what is not yet implemented. Heartwood consumes two independent platform capabilities, inference and platform services, on top of a hosting and access baseline. Either capability can be absent or unavailable without breaking the other: a platform can supply models without services, services without models, or neither while Heartwood runs a standalone model route.
Responsibilities¶
| Area | Heartwood | Platform |
|---|---|---|
| Researcher identity | Records the launching principal as the actor of every accepted command and ignores an actor claimed in a request | Authenticates the person, authorizes project access, and ends the session |
| Gateway access | Requires the launch capability on every API request, event stream, and WebSocket, and validates the declared ingress route | Routes only authenticated users to the gateway, removes client-supplied forwarding and identity headers, terminates TLS, and delivers the capability |
| Research session | Owns the OpenHands conversation, reviewed commands, and terminal, browser, and notebook projections | Keeps the gateway process, its project directory, and its network route available |
| Approval | Binds each approval to the pending action set and accepts it only from an authorized interface | Enforces its own authorization on every operation, whether or not Heartwood approved it |
| Policy | Evaluates model routes, review modes, and credentials against the active policy | Defines the restrictions every project on the platform must obey |
| Inference | Selects an authorized route and keeps model credentials out of model context, tools, and exports | Operates endpoints, backend translation, data-use agreements, eligibility, spend limits, and egress |
| Platform services | Presents proposals, records state and evidence, and projects progress to every interface | Owns scheduling, quotas, cost, dataset entitlements, application services, and infrastructure policy |
| Project storage | Keeps .heartwood/ state single-writer with durable locking and recovery |
Provides persistent, backed-up storage with native advisory locks |
| Audit and provenance | Writes content-minimized session audit and experiment records, and requests signed checkpoints | Retains checkpoints, enforces retention and immutability, and keeps its own operation audit log |
| Controlled data | Makes no compliance claim from compatibility | Decides data eligibility, agreements, egress controls, monitoring, and incident response |
Heartwood still authenticates requests and enforces its own policy inside an authenticated platform. Platform authentication does not replace gateway controls, and a Heartwood approval never grants platform authority.
Deployment Topologies¶
The gateway is the unit of hosting. Only who runs the gateway process, and who authenticates the person in front of it, changes between topologies; the contract below it is the same.
flowchart TB
subgraph Hosted["Hosted per-project service"]
direction TB
H1["Identity provider and spawner"] -.-> H2["Gateway per researcher and project"]
end
subgraph Workspace["Platform workspace"]
direction TB
P1["Platform proxy authenticates"] --> P2["Gateway in the workspace"]
end
subgraph Workstation["Workstation or container"]
direction TB
W1["Researcher's own process"] --> W2["Gateway on loopback"]
end
classDef heartwood fill:#0b694d26,stroke:#2b8268
classDef platform fill:#3f5b7426,stroke:#6f8fae
classDef planned stroke-dasharray: 5 5
class W2,P2,H2 heartwood
class P1,H1 platform
class H1,H2 planned
style Hosted stroke-dasharray: 5 5
| Topology | Runs the gateway | Authenticates the person | Status |
|---|---|---|---|
| Workstation or container | The researcher | The operating system and the launch link | Implemented |
| Platform workspace | The platform, in the researcher's workspace | The platform proxy | Implemented for the terminal on Terra and Stanford Carina and the notebook on Terra |
| Hosted per-project service | The platform, one gateway per researcher and project | The institution's identity provider, verified by Heartwood | Not implemented |
Not yet implemented: hosted per-project service
Heartwood does not verify a person's identity itself, does not attribute commands to individual people, and has no supported deployment that starts, stops, and routes per-project gateways. The hosted topology verifies an OpenID Connect identity at ingress, derives the command actor from the verified subject, exchanges rather than forwards user tokens for platform calls, and reuses an existing spawner and proxy. Tracked in #164.
Hosting¶
A platform runs the published Heartwood artifact with the researcher's project as the working directory.
- Required: run the published image or native release without replacing its entrypoint, user, or bundled browser assets.
- Required: provide the project as a persistent directory;
.heartwood/session storage needs native advisory locks, so object-store and file-transfer mounts are not session stores unless qualified. - Required: keep model weights, credentials, and deployment secrets out of image layers and the project directory.
- Required: run Heartwood-managed local model servers and checkpoint signers only where other operating-system users cannot reach their loopback ports.
- Recommended: back up the project storage and preserve it across compute recreation.
- Optional: provide Jupyter where the platform offers the notebook bridge.
- Recommended: verify the published release attestations before admitting an artifact.
Not yet implemented: signed artifacts and bills of materials
Releases carry build attestations, but release images and native assets are not yet signed and do not yet ship software bills of materials or third-party notices. Tracked in #48.
Not yet implemented: authenticated local servers
A Heartwood-managed model server and the local checkpoint signer listen on fixed loopback ports without authenticating the listener, so another user on a shared host can take a port and receive prompts or signer tokens. Heartwood will serve both over owner-only sockets or verify the listener before sending anything. Tracked in #161 and #162.
See Package the Shared Application and Persist the Right Data.
Access and Identity¶
The platform authenticates the person; Heartwood authorizes the caller of its own API.
sequenceDiagram
actor R as Researcher
participant P as Platform proxy
participant G as Heartwood gateway
R->>P: Sign in with platform identity
P->>P: Authenticate and authorize project access
alt Launch link
G-->>R: One-time launch link printed at startup
R->>P: Open launch link
P->>G: GET /launch?token=…
G-->>R: HttpOnly, SameSite=Strict capability cookie
else Proxy injection
P->>G: Request with X-Heartwood-Capability
end
R->>P: Use Heartwood
P->>G: Request with capability and validated route metadata
G->>G: Validate route, capability, and origin
- Required: authenticate every user before traffic reaches the gateway, and restrict the gateway's network route to the platform proxy.
- Required: remove client-supplied forwarding and identity headers before setting the proxy's own values.
- Required: deliver the launch capability, either by letting the researcher open the one-time launch link, or by injecting
X-Heartwood-Capabilityfor callers the platform has already authenticated. - Required: keep the capability away from the agent workspace, other users, and logs.
- Recommended: run one gateway per researcher and project; Heartwood records one launching principal per gateway and does not distinguish people who share it.
A proxy that injects the capability authenticates on the researcher's behalf, so it must inject it only for the one user who owns that gateway. A trusted identity header is an exact route marker, not a credential.
For example, a platform proxy at https://research.example.org that strips the /heartwood/project-a prefix and forwards from 10.0.0.2 starts the gateway with a secret supplied by the platform's secret manager:
HEARTWOOD_GATEWAY_CAPABILITY="$(cat /run/secrets/heartwood-capability)" \
heartwood gateway serve \
--ingress-mode trusted-proxy \
--host 10.0.0.5 \
--port 8767 \
--public-origin https://research.example.org \
--base-path /heartwood/project-a \
--trusted-proxy-source 10.0.0.2/32 \
--proxy-strips-prefix
The proxy then adds X-Heartwood-Capability with the same secret to each authenticated request.
See the serve options and HW-INGRESS-003.
Not yet implemented: capability delivery without the environment
The gateway keeps HEARTWOOD_GATEWAY_CAPABILITY out of the processes it starts, but the operating system still exposes a process's initial environment to other processes of the same user, including approved agent commands.
Use the environment route only when agent tools run under a different identity.
With direct loopback, browsers also send the capability cookie to every port of the host.
Heartwood will accept an operator secret through an inherited file descriptor or a read-once owner-only file, scope the capability to its own origin, and print the launch link only after it owns its port.
Tracked in #156.
Deployment Policy¶
A platform defines restrictions that every project on it must obey: the model and catalog endpoints a project may reach, the action-review modes it may select, the credential references it may use, and whether egress is denied by default.
- Required: define the policy per platform, deny egress by default, and list exact model and catalog endpoints.
- Required: let researchers narrow the policy for a project, never widen it.
- Recommended: offer Review Every Action as the only review mode for secret-backed or unqualified routes.
- Optional: publish approved Skill sources through the deployment-owned registry at
/etc/heartwood/skill-sources.toml; only that registry can approve a Skill for controlled data.
Heartwood builds each platform's default policy in its platform adapter and evaluates model routes, review modes, and credentials against it.
Not yet implemented: deployment-owned enforcement
Heartwood currently stores the active policy, the selected review mode, and model routes in the project's .heartwood/config.toml, and re-reads that file on every command.
An approved terminal command can rewrite it, so project state cannot enforce a platform restriction today.
Heartwood will build the policy from the platform on every load, let project configuration only narrow it, and journal on-disk changes to review modes and model settings.
Tracked in #154.
Inference¶
A platform can supply the models a researcher may use, so the researcher chooses a model without entering platform-managed credentials or knowing where it runs.
- Required: an OpenAI-compatible Chat Completions endpoint with streaming and native tool calls.
- Recommended: the Responses API for models that support it; Heartwood selects Chat Completions or Responses per model from the OpenHands model capabilities and does not assume every compatible endpoint implements both.
- Required: a model list endpoint that returns only the models the authenticated identity may use.
- Recommended: report each model's context window, tool-calling support, and permitted data classes.
- Required: keep credentials platform-held, through a managed identity, a process-only variable, or a mounted file outside the project.
- Required: state which data classes each route may receive; Heartwood cannot infer eligibility from compatibility.
- Required: return distinguishable failures for rejected credentials, exhausted quota, rate limits, invalid model configuration, and temporary unavailability.
- Recommended: restrict the workspace's network egress to the approved inference endpoints.
- Optional: provide GPU or CPU compute on which Heartwood runs a Heartwood-managed model when no hosted route is available.
- Optional: for air-gapped platforms, provide an approved process to import verified model bundles.
Heartwood discovers models through a connection's catalog endpoint after checking it against the deny-by-default policy, and it never implements a second provider proxy. It currently consumes platform-managed inference through built-in connections, such as the Stanford AI API Gateway, and through compatible services that an operator configures. A route's credential boundary determines whether actions can run without review; secret-backed routes are application-scrubbed unless the platform demonstrates a platform-isolated boundary, which no current adapter claims.
Not yet implemented: platform-managed model routes
Heartwood does not currently read a platform connection manifest, so each platform-managed route needs a platform adapter. It also relies on the OpenHands model table to choose a protocol, which does not recognize platform model aliases. Heartwood will load connections from a deployment-owned manifest outside the project, accept declared protocol, context window, and tool support for unrecognized aliases, and report unknown values as unknown. Tracked in #151.
A platform that describes its models should return this metadata with each entry of its model list:
| Field | Meaning | Level |
|---|---|---|
| Model identifier | The exact value Heartwood sends in each request | Required |
| Protocols | Chat Completions, Responses, or both | Required |
| Context window | Maximum input tokens, or unknown | Recommended |
| Tool calling | Whether native tool calls are supported | Required |
| Data classes | The data classes the route may receive under the platform's agreements | Required |
| Deprecation | Whether the model is being withdrawn, so Heartwood never silently substitutes another model | Recommended |
Not yet implemented: model metadata schema
OpenAI-compatible model lists define only identifiers, so these fields need an agreed extension and a data-class vocabulary. Tracked in #150 and #151.
Realtime Voice¶
A platform can offer realtime speech models for an optional voice interface.
- Required: create realtime sessions on the server side, so no long-lived key reaches the browser.
- Required: state whether realtime audio is covered by the route's data-use agreements; text-route eligibility does not extend to audio.
- Recommended: support a server-owned session in which Heartwood executes and approves every tool call.
Not yet implemented: voice
Heartwood has no voice interface. An ephemeral browser credential is a convenience rather than an enforcement boundary, and speech never grants approval. Tracked in #139.
Platform Services¶
Platform services let a researcher ask Heartwood to submit an analysis, request compute, attach an authorized dataset, or open a platform application through the research session. Services connect through the Model Context Protocol without a platform-specific agent loop.
Not yet implemented: platform services
Heartwood does not currently connect to MCP servers; it disables them in its OpenHands configuration and advertises no platform service. One read-only research or platform metadata service comes first in #138. Operations that change platform state follow in #152.
Discovery and Authorization¶
- Required: expose services over MCP Streamable HTTP with a stable server identity.
- Required: describe each tool's purpose, input and output schemas, and the permission it requires; read access never implies permission to allocate resources or attach data.
- Required: annotate each tool with the MCP tool annotations
readOnlyHint,destructiveHint,idempotentHint, andopenWorldHint. - Required: enforce identity, quotas, and dataset entitlements on every call, independently of Heartwood's approval.
- Required: treat a changed tool set as a new review; discovery does not authorize execution or certify a tool's advertised safety.
- Required: accept delegated or platform-held credentials that never reach model context, tool environments, or exports.
Heartwood treats annotations as hints from the server, not as authorization: a tool marked read-only still runs under Heartwood's review policy, and the platform still authorizes every call.
Operations That Change Platform State¶
A tool that allocates compute, submits work, attaches data, or starts an application is an operation. Each operation follows one lifecycle.
stateDiagram-v2
[*] --> Proposed
Proposed --> Denied: researcher rejects or platform refuses
Proposed --> Submitted: researcher approves
Submitted --> Running: platform accepts
Submitted --> Unknown: response lost
Unknown --> Running: status reconciled
Unknown --> Completed: status reconciled
Unknown --> Failed: status reconciled
Unknown --> Cancelled: status reconciled
Running --> Completed
Running --> Failed
Running --> Cancelled: cancellation observed
Denied --> [*]
Completed --> [*]
Failed --> [*]
Cancelled --> [*]
sequenceDiagram
participant A as Agent
participant G as Heartwood gateway
actor R as Researcher
participant S as Platform service
A->>G: Propose operation
G->>S: Prepare with operation identifier
S-->>G: Proposal: limits, duration, cost, data scope, destination
G->>R: Show proposal for review
R->>G: Approve
G->>S: Submit with the same operation identifier
S->>S: Authorize identity, quota, and entitlements
S-->>G: Accepted, with operation reference
loop Until a terminal state
G->>S: Status by operation identifier
S-->>G: Running, completed, failed, or cancelled
end
G->>A: Result with evidence references
- Required: before approval, return a proposal with the resource limits, expected duration, estimated cost when available, data scope, and destination.
- Required: accept a caller-supplied operation identifier and treat a repeated submission with the same identifier as the same operation.
- Required: report status by operation identifier, so an uncertain outcome is reconciled rather than retried.
- Required: report cancellation as the observed platform result, without promising rollback of completed work.
- Required: return a reference that joins the platform's audit record to Heartwood's session audit without copying data payloads.
Capability Families¶
A platform offers any subset of these families; each is discovered, never assumed.
| Family | Typical operations | Recommended backing |
|---|---|---|
| Compute jobs | Submit a sized job, check status, cancel | GA4GH Task Execution Service or the platform's scheduler |
| Workflows | Run a workflow, check status, cancel | GA4GH Workflow Execution Service |
| GPU resources | Request a named resource profile | The platform's scheduler, through named profiles rather than raw resource numbers |
| Datasets | List authorized datasets, request access, attach read-only | GA4GH Data Repository Service |
| Applications | Discover and open a platform application for the researcher | The platform's application catalog |
| Quota and cost | Report remaining budget and estimated cost before submission | The platform's billing interface |
Heartwood requires none of these standards; the contract is the MCP behavior above, and wrapping an existing standard avoids inventing a new vocabulary. An application opened for the researcher is a hand-off to a person, not an agent action that changes data. A researcher's identity behind delegated calls should come from OpenID Connect.
Controlled Data¶
A platform that admits controlled or regulated data owns that decision and the controls around it.
- Required: decide data eligibility for every model route, dataset, and interface under the platform's agreements.
- Required: provide read-only input snapshots, enforced egress denial, and ephemeral, encrypted execution storage for controlled work.
- Required: keep outputs in quarantine until an authorized data steward approves an exact release manifest.
- Required: report these controls as typed evidence, so Heartwood can refuse to start when a required control is missing.
Heartwood is not a controlled-data boundary on its own; see Security and Controlled Data.
Not yet implemented: isolated execution and quarantine
Heartwood does not provision or verify read-only inputs, enforced egress denial, ephemeral execution, output quarantine, or steward-controlled release. Tracked in #129. Platform validation cases for this work are the Terra and BigQuery OMOP workflow in #43, guided dataset ingest in #126, and the standard research environment pilot in #127.
Agent Isolation¶
Every guarantee above assumes agent tools cannot change the controls that govern them.
- Required: keep platform credentials, service tokens, and signer material out of the environment and file system that agent tools can reach.
- Recommended: run agent tools under an identity that can read and write project files but not
.heartwood/, the gateway process, credentials, or signer material. - Recommended: keep the approval-deciding interfaces, the gateway and the researcher's browser, outside the agent's reach.
Agent tools currently run with the gateway's operating-system identity.
An approved command can read anything that identity can read and can change .heartwood/ state, including project settings, installed Skills, and session and audit files.
Not yet implemented: separate tool identity
Terminal and file-editor tools will run under a separate identity, with the boundary qualified per platform before any platform claims it. Tracked in #163.
Not yet implemented: supporting agent-isolation controls
- Terminals receive the Heartwood environment with only the project's configured model-credential variables and the capability masked, so other secrets pass through; an allowlist will replace that mask in #155.
- Low-Risk Automation decides from the model's own risk label; a deterministic allowlist will make that label advisory in #157.
- An approval binds to model-supplied tool-call identifiers; binding it to the reviewed content comes in #158.
- A verified Skill's neighboring directories also load; loading exactly the verified Skills comes in #159.
See Threat Boundaries for the current limits.
Audit and Provenance¶
- Recommended: operate a deployment-owned checkpoint signer, installed through
/etc/heartwood/checkpoint-signers.tomlorHEARTWOOD_CHECKPOINT_SIGNER_REGISTRY, with keys the agent cannot use. - Recommended: enforce retention, immutability, and deletion for exported audit and experiment records.
- Required for platform services: keep an audit log of operations performed through the contract, joinable to Heartwood's audit by operation reference.
Heartwood's project-local audit and experiment records detect corruption but remain writable by the identity that runs the project. See Audit Checkpoints and Retention and Sessions and Audit.
Not yet implemented: tamper-resistant history and retained provenance
Checkpoints do not yet reference earlier checkpoints, so a later checkpoint can sign rewritten history; continuity checks come in #160. Experiment records are not yet published to platform storage; retention-locked publication comes in #128.
Security Requirements¶
flowchart TB
UI["Researcher's browser: Heartwood interface"]
Proxy["Platform: authenticated proxy"]
Gateway["Heartwood gateway: capability, policy, approval"]
Tools["Agent tools: terminal, files, scripts, as the gateway's operating-system user"]
State[(".heartwood state and project files, writable by that user")]
Inference["Platform: inference endpoint"]
Services["Platform: services"]
UI -- "authenticated, with capability" --> Proxy --> Gateway
Gateway --> Tools
Gateway --> State
Tools -. "same identity" .-> State
Gateway -- "platform credential" --> Inference
Gateway -. "reviewed call" .-> Services
classDef heartwood fill:#0b694d26,stroke:#2b8268
classDef platform fill:#3f5b7426,stroke:#6f8fae
classDef planned stroke-dasharray: 5 5
class UI,Gateway,Tools,State heartwood
class Proxy,Inference,Services platform
class Services planned
Both sides must preserve these properties.
- Agent output cannot grant authority. No model output, tool output, service response, or dataset content can approve an action, widen policy, or grant platform permissions.
- Approval is necessary, never sufficient. Heartwood approves the exact proposal; the platform still authorizes every call.
- Secrets stay outside the session. Credentials never appear in project configuration, model context, tool environments, events, logs, or exports.
- External content is data. Service results, tool descriptions, annotations, and platform responses are untrusted input, bounded in size, and never treated as instructions.
- Uncertain outcomes are reconciled. A timeout or lost response is resolved by status, not by resubmitting an operation as though it were idempotent.
- Egress is denied by default. Heartwood policy denies undeclared model endpoints, and the platform network is the authoritative egress control.
Not yet implemented: full enforcement of these properties
Properties 1 through 3 hold only as far as agent isolation reaches today: Low-Risk Automation trusts the model's risk label, approvals bind to identifiers rather than content, unselected secrets reach terminals, and the policy lives in agent-writable project state. Review Every Action and a platform that enforces restrictions outside the gateway's identity are the current mitigations. Tracked in #154, #155, #157, #158, and #163.
Failure States¶
A platform's failures must be distinguishable so every interface can show the same next step.
| Condition | The platform returns | Heartwood shows |
|---|---|---|
| Capability not offered | No advertised support | The choice is hidden in every interface |
| Missing or invalid launch capability | Not applicable | HW-INGRESS-003 |
| Request does not match the declared route | Not applicable | HW-INGRESS-002 |
| Expired or rejected model credential | An authentication error | HW-AGENT-008 |
| Exhausted quota or budget | A quota error | HW-AGENT-009 |
| Rate limit | A rate-limit error with a retry interval when known | HW-AGENT-010 |
| Denied or misconfigured model | A model or authorization error | HW-AGENT-011 |
| Service temporarily unavailable | An unavailability error | HW-AGENT-012 |
| Platform operation denied, failed, or of unknown outcome | The operation state and a reason | Not yet implemented; #152 |
See Diagnostics and Troubleshooting for each code's recovery steps.
Contract Artifacts¶
A contract a platform can implement against needs exact, versioned artifacts, not only this page.
| Artifact | Defines | Status |
|---|---|---|
| Capability manifest | What a platform supports, served at GET /project/capabilities |
Implemented; see the capability matrix |
| API body schemas | JSON Schemas for gateway request and response bodies, generated from the shared Pydantic contract | Implemented; internal, not published |
| Gateway OpenAPI description | The routes, methods, streams, and launch-capability security scheme a platform proxy serves | Not implemented |
| Platform connection manifest | Model connections a deployment supplies, as heartwood.model-connections.v1 |
Schema implemented; not loaded or published |
| Deployment policy | Platform restrictions, as heartwood.policy-profile.v1 |
Schema implemented; not deployment-owned |
| Model metadata | Protocols, context window, tool support, and data classes per model | Not implemented |
| Data-class vocabulary | The shared names for data classes that routes and datasets declare | Not implemented |
| Operation schemas | Proposal, operation identifier, status, and audit reference for platform operations | Not implemented |
| Contract version | One version identifier for the artifacts above, with compatibility rules | Not implemented |
| Conformance kit | Deterministic fakes and tests a platform runs against its own endpoints | Not implemented |
Not yet implemented: versioned contract artifacts and conformance kit
The schemas, API description, vocabulary, and conformance kit will ship with one contract version so a platform can test its endpoints before live validation. Tracked in #150; operation schemas are implemented with #152.
Validate a Platform¶
A platform integration advances through the evidence levels in Testing and Evidence, and Heartwood advertises a capability only at the level its evidence reaches.
- Implemented: a platform adapter reports capabilities, detection, and policy, with contract tests.
- CI validated: adapter conformance, ingress adversarial, credential-boundary, persistence, and interface tests pass in a production-derived image.
- Live synthetic validated: the published artifact completes a synthetic task on the platform with approval, file verification, replay, and audit export.
- Institution approved: separate institutional evidence covers the deployment; it is never inferred from the previous levels.
Follow Validate Conformance and Validate the Deployment for the exact checks. Before a wider rollout, record a standard environment, confirm the deployment security checklist, and run a pilot evaluation.
Not yet implemented: expansion checklist
One maintained checklist for proposing a new platform, covering ownership, reuse of shared contracts, security and privacy review, and the evidence required before a support claim, is tracked in #49.
What Heartwood Asks of a Platform¶
| Area | Request | Level | Heartwood consumes it today |
|---|---|---|---|
| Hosting | Run the published artifact with the project as a persistent working directory on storage with native advisory locks | Required | Yes |
| Access | Authenticate users, restrict the gateway route to the proxy, strip client identity headers, and deliver the launch capability | Required for the browser | Yes |
| Identity | One gateway per researcher and project, and a documented session expiry | Recommended | Yes |
| Identity | OpenID Connect identity at ingress, and token exchange for platform calls | Recommended | No, #164 |
| Policy | Exact model and catalog endpoints, permitted review modes, and credential references, denying egress by default | Required | Through a platform adapter; #154 |
| Inference | Chat Completions with streaming and tool calls, Responses where available, and an authorized model list | Optional | Built-in and operator-configured routes; #151 |
| Inference | Per-model protocols, context window, tool support, and permitted data classes | Required with inference | No, #151 |
| Inference | Platform-held credentials and distinguishable failures | Required with inference | Yes |
| Voice | Server-created realtime sessions and a statement of audio coverage | Optional | No, #139 |
| Services | MCP Streamable HTTP with schemas, annotations, permissions, and per-call authorization | Optional | No, #138 |
| Services | Proposals, idempotent operation identifiers, status, cancellation, and audit references | Required with operations | No, #152 |
| Isolation | Credentials and signer material outside the agent tools' reach, and a separate tool identity where available | Recommended | No, #163 |
| Controlled data | Eligibility decisions, read-only inputs, enforced egress denial, quarantine, and steward-approved release | Required for controlled data | No, #129 |
| Skills | Approved Skill sources in a deployment-owned registry | Optional | Yes |
| Audit | A deployment-owned checkpoint signer, retention controls, and an operation audit log | Recommended | Signer and retention: yes |
| Security | Network egress limited to approved endpoints | Recommended | Platform-enforced |
| Evidence | A synthetic test environment and a named technical contact for live validation | Required for support | Yes |