Skip to content

Laboratory manifests

opensdl.yaml is the machine-readable entry point for one laboratory environment. It declares metadata, storage, runtime settings, adapters, capability bindings, resources, policy, domain packs, and extension data.

A repository may contain separate manifests for simulation, hardware-in-the-loop, staging, and live operation. Credentials are named rather than written: a manifest value may contain ${env:NAME}, which load_manifest resolves from the process environment before validation.

spec:
  adapters:
    - name: networked-balance
      plugin: networked-balance
      config:
        token: ${env:BALANCE_TOKEN}

env: is the only implemented provider. The ${provider:name} form leaves room for a secret provider later, and any other prefix is refused by name rather than passed through. A reference that does not resolve is an error naming the variable and the field: nothing substitutes an empty string and nothing leaves the literal text in place, so a missing credential fails at the loader instead of at an instrument. References are refused in mapping keys, because the environment must not choose which field is configured, and anywhere under spec.policy, because resolving an authorization decision from an environment variable would make EFFECT=allow a supported configuration. A resolved value is written back as its reference when a manifest is dumped and in the operator context pack. See configuration.

Validate a manifest:

uv run --locked opensdl validate opensdl.yaml