Parent sprint: #87
Depends on: #88, #89, #90, #91, #92, #93, #94, #96, #97
Recommended order: 11
Codex-ready: yes
Goal
Add tests and small fixes so transformation consumes assembly outputs consistently and produces stable SBOL artifacts and JSON intermediates that plating can consume.
Background
BuildCompiler.transformation() currently accepts Plasmid objects, ComponentDefinitions, or dictionaries with a plasmid key. It normalizes inputs, creates chassis objects, calls SBOL2Transformation(...).chemical_transformation(), and returns a dict with sbol_artifacts, json_intermediate, protocol_artifacts, and logs.
This is a useful implementation, but it needs contract tests proving it handles the outputs from assembly_lvl1() and produces deterministic, reloadable SBOL references.
Scope
Add tests for transformation inputs:
- canonical
Plasmid objects produced by lvl1 assembly;
- raw
sbol2.ComponentDefinition plasmid inputs;
- dictionaries containing
plasmid entries;
- invalid or empty inputs.
Add tests for transformation outputs:
- transformation activity identity/reference exists in the SBOL document;
- transformed strain ModuleDefinition is created;
- transformed strain Implementation is created;
- output artifact dict contains stable keys;
json_intermediate has deterministic protocol/version/steps shape;
- plating input normalization can consume the transformation result.
If necessary, add small fixes to make identities and errors deterministic.
Non-goals
- Do not implement wet-lab protocol execution.
- Do not run Opentrons simulation.
- Do not add PUDU as a core dependency.
- Do not rewrite transformation into the future clean-architecture stage package yet.
Acceptance criteria
Verification
pytest -k "transformation"
pytest -k "plating and normalize"
ruff check .
Codex implementation notes
Parent sprint: #87
Depends on: #88, #89, #90, #91, #92, #93, #94, #96, #97
Recommended order: 11
Codex-ready: yes
Goal
Add tests and small fixes so transformation consumes assembly outputs consistently and produces stable SBOL artifacts and JSON intermediates that plating can consume.
Background
BuildCompiler.transformation()currently accepts Plasmid objects, ComponentDefinitions, or dictionaries with aplasmidkey. It normalizes inputs, creates chassis objects, callsSBOL2Transformation(...).chemical_transformation(), and returns a dict withsbol_artifacts,json_intermediate,protocol_artifacts, and logs.This is a useful implementation, but it needs contract tests proving it handles the outputs from
assembly_lvl1()and produces deterministic, reloadable SBOL references.Scope
Add tests for transformation inputs:
Plasmidobjects produced by lvl1 assembly;sbol2.ComponentDefinitionplasmid inputs;plasmidentries;Add tests for transformation outputs:
json_intermediatehas deterministic protocol/version/steps shape;If necessary, add small fixes to make identities and errors deterministic.
Non-goals
Acceptance criteria
normalize_plating_input(...)accepts transformation output.Verification
Codex implementation notes