On this page 9 sections
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:
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 call | OpenMHS target | notes |
|---|---|---|
an unobservable FDL Command | commands[cap] = {"member": name} and an explicit Action with the exact FDL input and output fields | an 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 Command | the same, with long_running, a bounded max_duration_ms and cancellable only where the declaration allows it | confirmation, info, intermediate and final result stay separate; reads with execution expose the last known UUID, progress and intermediate value |
an FDL Property | reads[field] = {"member": name, "field": name} with a matching parameters Field | a 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_bytes | complete bytes through the stock artifact store; an icon is not acquired data |
the feature's Stop command | safety_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, SimulationController | lifecycle outside the package | every 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.jsongh.malcolmsimgithub/chemos2.0: reference, wave 9, rank 521,MHS/registry/tasks/labs/malcolmsimgithub__chemos2.0.jsongh.florianbauer/sila-orchestrator: reference, wave 9, rank 540,MHS/registry/tasks/labs/florianbauer__sila-orchestrator.jsongh.qpillars/openapi-to-sila2: skip, wave 9, rank 657,MHS/registry/tasks/labs/qpillars__openapi-to-sila2.jsongh.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.
| Package | Tier | Ring | Evidence | Stars |
|---|---|---|---|---|
| afrl-ares/ares afrl-ares/ares: orchestration/scheduling for general (lab instrumentation track). OpenMHS plan: reference only (host). L | Tier D | 3 | static scan | 20 |
| malcolmsimgithub/chemos2.0 malcolmsimgithub/chemos2.0: protocol simulation / orchestration for wet-lab automation and chemistry (lab instrumentatio | Tier D | 3 | static scan | 20 |
| florianbauer/sila-orchestrator florianbauer/sila-orchestrator: SiLA2 orchestration client for shared access and protocol infrastructure (lab instrument | Tier D | 3 | static scan | 15 |
| dana12cs/sila2 dana12cs/sila2: protocol implementation/bridge for general (lab instrumentation track). OpenMHS plan: not integrated (sk | Tier X | 3 | declared | 11 |
| accelerationconsortium/sila2-connectors accelerationconsortium/sila2-connectors: connector catalog for shared access and protocol infrastructure (lab instrument | Tier D | 3 | static scan | 7 |
| qpillars/openapi-to-sila2 qpillars/openapi-to-sila2: REST→SiLA2 code generation for shared access and protocol infrastructure (lab instrumentation | Tier D | 3 | agent read | 5 |
| qtimort/sila-nespresso qtimort/sila-nespresso: protocol implementation/bridge for general (lab instrumentation track). OpenMHS plan: not integr | Tier D | 3 | static scan | 3 |
| elseviersoftwarex/softx-d-21-00051 elseviersoftwarex/softx-d-21-00051: orchestration/scheduling for general (lab instrumentation track). OpenMHS plan: refe | Tier D | 3 | static scan | 2 |
| firefly78/sila2-feature-lib firefly78/sila2-feature-lib: repository for shared access and protocol infrastructure (lab instrumentation track). OpenM | Tier D | 3 | agent read | 2 |
| anguyen-23/sila-testing anguyen-23/sila-testing: protocol implementation/bridge for general (lab instrumentation track). OpenMHS plan: family-co | Tier B | 1 | contract checked | 0 |
| bigchemistry-robotlab/sila-workshop bigchemistry-robotlab/sila-workshop: protocol implementation/bridge for general (lab instrumentation track). OpenMHS pla | Tier D | 3 | static scan | 0 |
| ch4mundi/sila_test_client ch4mundi/sila_test_client: protocol implementation/bridge for general (lab instrumentation track). OpenMHS plan: not int | Tier D | 3 | static scan | 0 |
| florianbauer/task-launcher florianbauer/task-launcher: protocol implementation/bridge for general (lab instrumentation track). OpenMHS plan: not in | Tier D | 3 | static scan | 0 |
| markdoerr/nemesys_sila2 markdoerr/nemesys_sila2: protocol implementation/bridge for liquid handling (lab instrumentation track). OpenMHS plan: n | Tier D | 3 | static scan | 0 |
| nadimest/home-assistant-sila-plugin nadimest/home-assistant-sila-plugin: protocol implementation/bridge for general (lab instrumentation track). OpenMHS pla | Tier D | 3 | static scan | 0 |
| nadimest/silaphone-client nadimest/silaphone-client: protocol implementation/bridge for general (lab instrumentation track). OpenMHS plan: not int | Tier D | 3 | static scan | 0 |