Install
The release accepts the compatible FastSim >=0.1.0a15,<0.2 contract train. The
conformance check still selects the plugin distribution and entry point exactly:
python -m pip install fastsim-control-source-conformance==0.1.8
For local development in this repository:
python -m pip install -e './packages/fastsim-control-source-conformance[dev]'
Test an installed control source
Use the exact values published by the plugin manifest and installed distribution. The manifest SHA-256 should come from the resolved FastSim lock or registry index.
from fastsim_control_source_conformance import (
InstalledControlSourceSpec,
make_control_source_binding,
run_installed_control_source_conformance,
)
spec = InstalledControlSourceSpec(
plugin_id="plugin://example/my-source",
plugin_version="1.0.0",
distribution="example-fastsim-source",
distribution_version="1.0.0",
entry_point="example.my-source",
entry_point_value="example_fastsim_source:plugin_factory",
)
binding = make_control_source_binding(
spec,
manifest_sha256="0123456789abcdef" * 4,
bindings={"actor": "robot"},
config={"enabled": True},
)
report = run_installed_control_source_conformance(spec, binding=binding)
print(report.to_json())
report.raise_for_failure()
A passing report means the selected installed factory matches the locked identity
and completed the public FastSim plugin lifecycle without leaking owned tasks. A
failed report contains stable check codes in report.failures; calling
raise_for_failure() turns it into one typed aggregate exception suitable for CI.
What this test does not prove
The runner executes trusted plugin code in-process. It is not an operating-system sandbox, physics test, task-success test, or performance benchmark. Test unknown or untrusted packages in an isolated process or container.
Package checks
python -m pytest packages/fastsim-control-source-conformance
python -m ruff check packages/fastsim-control-source-conformance
python -m mypy packages/fastsim-control-source-conformance/src/fastsim_control_source_conformance