Bridge family · sila2

OpenMHS family: sila2

SiLA 2 features through Sila2Driver (controlled peer, one pinned Phenix source profile)

Recipe published16 packageshardwaresimulated
On this page 9 sections
  1. Launch
  2. Registry coverage
  3. Applicability
  4. Capability mapping
  5. Safety
  6. Fidelity
  7. Pitfalls
  8. First task cards
  9. Sources

SiLA 2 features through Sila2Driver (controlled peer, one pinned Phenix source profile)

Generated by MHS/registry/build_registry.py on 2026-10-20T00:00:00Z from 16 registry records and their task cards. A plan, not a conformance claim.

  • bridge_status: available
  • helper: Sila2Driver
  • exemplar: MHS/drivers/labs/anguyen-23__sila-testing

Launch

Every driver package starts the same way; per-repo configuration (environment id, model path, port, baud rate, VISA resource) lives in the package's driver.py, never in launch flags:

text
mhs serve <driver-dir>

A package is done when python3 -m mhs.driver check <driver-dir> --backend fake exits 0 (evidence contract_checked; a fake never yields an MHS-Device level).

Registry coverage

  • Repos: 16
  • Decisions: family-config 1, reference 5, skip 10
  • Waves: 6: 1, 9: 15
  • Dispatchable now: 0
  • Modes: hardware 1, simulated 1

Applicability

SiLA 2 features: triage rule 9, family:sila2. The implemented Sila2Driver is a configuration-only, finite typed contract over an injected controlled peer (mhs-sila2-controlled-v1). It does not implement a SiLA gRPC/protobuf client: every non-fake backend refuses before any factory, import or connection, so a package passes on its fake (contract_checked) and states its native gaps in RESULT.json notes. Exemplar: gh.anguyen-23/sila-testing (the complete PhenixImager feature: eight commands, seven properties and the Stop binding).

Configuration surface. sila2_config (usually a declarations.py CONFIG) fixes peer_format, runtime_profile, an opaque endpoint, the feature FQI, the pinned commit, the exact FDL, generated proto and implementation paths with their SHA-256, the complete member table (kind, input, output, intermediate, errors, effect, completion, source_ref of each FDL block), stop, the request, execution and stop timeouts and unsafe_properties. On the class: native (the implementation class), commands, an explicit Action per command, reads with parameters, safety_bindings, mode = "hardware", risk R2 or R3, and backends = {"fake": ".fake:connect", "hardware": ".native:connect"}. The fake factory receives a PeerLease, registers its peer before setup and answers describe, observe, invoke, property, subscribe, next, unsubscribe, result and the binary operations; native.py refuses. No method overrides, no estop_physical_ref. See the controlled SiLA 2 profile.

What it cannot express today: gate G7 has one static source profile, the PhenixImager feature at commit 0b572380e06977c1920510773b4bfee7bcd0eec5 (MHS/sdk/src/mhs/driver/sila2_check.py), and the gate prerequisite profile is the same feature's Connect. Any other feature, pin, or a feature generated at run time (UniteLabs CDK connectors ship no FDL), a C# server, or a device below R2 fails SILA_SOURCE_UNPROVEN or the class check. Record a source-verified DEVIATION FROM THE CARD to a direct Driver over the repository's own client class, or stop blocked HELPER_MISSING with the source lines. The model review of 2026-11-05 routed the other four SiLA cards of this registry to direct drivers for that reason (MHS/registry/overrides/waiting-routing.json). Triage rule 9 still tags every repository that imports sila2, sila_python or unitelabs as family sila2: until a second source profile exists such a card needs a reviewed override, and validate.py and the registry tests refuse any other dispatchable sila2 card.

Capability mapping

native callOpenMHS targetnotes
an unobservable FDL Commandcommands[cap] = {"member": name} and an explicit Action with the exact FDL input and output fieldsan effectful command is permit-bound, R2 or R3, and every input carries Limit.operator_required; FDL constraints are protocol bounds, never physical limits
an observable FDL Commandthe same, with long_running, a bounded max_duration_ms and cancellable only where the declaration allows itconfirmation, info, intermediate and final result stay separate; reads with execution expose the last known UUID, progress and intermediate value
an FDL Propertyreads[field] = {"member": name, "field": name} with a matching parameters Fielda fresh property request on every read; it is not an atomic multi-property snapshot
a Binary property (an icon)a command with artifact and media_type, output artifact_ref, media_type, size_bytescomplete bytes through the stock artifact store; an icon is not acquired data
the feature's Stop commandsafety_bindings = {"estop": {"member": "Stop"}} and its safe_state=True Action with output {"stopped": boolean}only the controlled peer's fresh observation proves retirement; a native Stop acknowledgement and a cached idle state do not
Connect (a host or address input)a permit-bound action; the gate prepares it only through fixtures/gate-prerequisites.json (profile sila2-controlled-phenix-connect-v1)the operator overlay names the one allowed host; the preparation is never a stop, reset or safety proof
server start, gRPC channel, certificates, SimulationControllerlifecycle outside the packageevery non-fake backend refuses before any factory, import or connection

Class ids come from python3 -m mhs.driver catalog search <words>. The deprecated classes cap.device.describe.v1, cap.world.state.v1, cap.world.snapshot.v1 and cap.world.restore.v1 are replaced by the protocol methods mhs.devices.get, mhs.resource.read, mhs.snapshot and mhs.restore.

Safety

The risk floor of a device is the highest catalogue risk_class of its classes (CAP-017); a driver may declare a higher risk, never a lower one. Sila2Driver accepts only a hardware declaration at R2 or R3: every effectful route needs a stock input-bound permit and an operator envelope on each input, and the e-stop is the feature's explicit Stop command (safety_bindings), never an @estop method. Risk follows the instrument behind the server (MHS/spec/04-safety.md hazard table), never the feature names. A SiLA command's confirmation, a subscription's end, an expired execution UUID or a closed channel is not a device stop: a Stop acknowledgement and a cached idle property prove nothing about the instrument, and an acquisition can keep running after its caller gave up. A model-authored package never runs a native backend; every one refuses.

Fidelity

A controlled peer yields contract_checked evidence only: no gRPC, protobuf, metadata headers, TLS, server lifetime or instrument timing is modelled, and the peer's observe retirement contract has no native SiLA equivalent. Numbers and strings in the fake are placeholders.

Pitfalls

Servers of one repository often start in simulation mode (SimulationController); feature definitions differ per vendor; observable commands outlive their callers; a Binary property may arrive in chunks that must be deleted; licences of instrument wrappers are often unstated.

First task cards

  • gh.anguyen-23/sila-testing: family-config, wave 6, rank 36, MHS/registry/tasks/labs/anguyen-23__sila-testing.json
  • gh.malcolmsimgithub/chemos2.0: reference, wave 9, rank 521, MHS/registry/tasks/labs/malcolmsimgithub__chemos2.0.json
  • gh.florianbauer/sila-orchestrator: reference, wave 9, rank 540, MHS/registry/tasks/labs/florianbauer__sila-orchestrator.json
  • gh.qpillars/openapi-to-sila2: skip, wave 9, rank 657, MHS/registry/tasks/labs/qpillars__openapi-to-sila2.json
  • gh.elseviersoftwarex/softx-d-21-00051: reference, wave 9, rank 763, MHS/registry/tasks/labs/elseviersoftwarex__softx-d-21-00051.json

Sources

  • Task cards: MHS/registry/tasks/<track>/<owner>__<repo>.json (schema/taskcard.schema.json).
  • Triage rules and the helper table: MHS/registry/triage.py; curated decisions: MHS/registry/overrides/.
  • Driver API and gate: MHS/sdk/docs/driver-authoring.md; exemplars: MHS/drivers/.
  • Controlled SiLA 2 profile and driver authoring.
  • sila-testing exemplar driver, declarations, fake, tests, facts and result notes.

Packages

Top 16 of 16 by stars. Filter the full list.

PackageTierRingEvidenceStars
afrl-ares/ares
afrl-ares/ares: orchestration/scheduling for general (lab instrumentation track). OpenMHS plan: reference only (host). L
Tier D3static scan20
malcolmsimgithub/chemos2.0
malcolmsimgithub/chemos2.0: protocol simulation / orchestration for wet-lab automation and chemistry (lab instrumentatio
Tier D3static scan20
florianbauer/sila-orchestrator
florianbauer/sila-orchestrator: SiLA2 orchestration client for shared access and protocol infrastructure (lab instrument
Tier D3static scan15
dana12cs/sila2
dana12cs/sila2: protocol implementation/bridge for general (lab instrumentation track). OpenMHS plan: not integrated (sk
Tier X3declared11
accelerationconsortium/sila2-connectors
accelerationconsortium/sila2-connectors: connector catalog for shared access and protocol infrastructure (lab instrument
Tier D3static scan7
qpillars/openapi-to-sila2
qpillars/openapi-to-sila2: REST→SiLA2 code generation for shared access and protocol infrastructure (lab instrumentation
Tier D3agent read5
qtimort/sila-nespresso
qtimort/sila-nespresso: protocol implementation/bridge for general (lab instrumentation track). OpenMHS plan: not integr
Tier D3static scan3
elseviersoftwarex/softx-d-21-00051
elseviersoftwarex/softx-d-21-00051: orchestration/scheduling for general (lab instrumentation track). OpenMHS plan: refe
Tier D3static scan2
firefly78/sila2-feature-lib
firefly78/sila2-feature-lib: repository for shared access and protocol infrastructure (lab instrumentation track). OpenM
Tier D3agent read2
anguyen-23/sila-testing
anguyen-23/sila-testing: protocol implementation/bridge for general (lab instrumentation track). OpenMHS plan: family-co
Tier B1contract checked0
bigchemistry-robotlab/sila-workshop
bigchemistry-robotlab/sila-workshop: protocol implementation/bridge for general (lab instrumentation track). OpenMHS pla
Tier D3static scan0
ch4mundi/sila_test_client
ch4mundi/sila_test_client: protocol implementation/bridge for general (lab instrumentation track). OpenMHS plan: not int
Tier D3static scan0
florianbauer/task-launcher
florianbauer/task-launcher: protocol implementation/bridge for general (lab instrumentation track). OpenMHS plan: not in
Tier D3static scan0
markdoerr/nemesys_sila2
markdoerr/nemesys_sila2: protocol implementation/bridge for liquid handling (lab instrumentation track). OpenMHS plan: n
Tier D3static scan0
nadimest/home-assistant-sila-plugin
nadimest/home-assistant-sila-plugin: protocol implementation/bridge for general (lab instrumentation track). OpenMHS pla
Tier D3static scan0
nadimest/silaphone-client
nadimest/silaphone-client: protocol implementation/bridge for general (lab instrumentation track). OpenMHS plan: not int
Tier D3static scan0