Repository navigation
test+docs: phase3 config validation, compute_features contract, wet-lab handoff guide - #27
Merged
cschanhniem merged 2 commits intoJun 28, 2026
Conversation
…act, wet-lab handoff guide
- tests/test_config.py: add test_phase3_config_selection_present, _weights_are_positive,
and _filters_present — pins phase3.yaml keys at the same level of rigour as pipeline.yaml;
if max_disagreement is accidentally removed from phase3.yaml the CI fails immediately rather
than crashing at runtime when eligibility filter accesses item.scores["disagreement"]
- tests/test_physchem.py: add test_compute_features_supplies_synthesis_feasibility_keys —
documents and verifies that compute_features() always returns the three keys that
synthesis_feasibility_score() accesses with direct dict brackets (no .get()):
'length', 'longest_repeat_run', 'cysteine_fraction'; a future refactor that drops
any of these will fail loudly here rather than in mid-pipeline candidate scoring
- docs/WET_LAB_HANDOFF.md: new wet-lab handoff guide covering:
- score interpretation table (activity/safety/synthesis/novelty/ensemble/disagreement)
- ensemble score → synthesise/hold/exclude decision thresholds
- selection gate rationale (why each threshold, pipeline vs phase3)
- pre-synthesis QC flag interpretation and remediation actions
- MIC and hemolysis assay protocols with organism, medium, concentration range, replicate count
- troubleshooting for: too few nominations, synthesis failure, all-hemolytic batch
- confidence statement ("hit rate 20–40% consistent with field literature")
- Troubleshooting section hardcoded 0.40 for disagreement gate but phase3.yaml uses 0.30; a scientist running the final synthesis batch would look at the wrong boundary to explain excluded candidates — now references both thresholds explicitly - μH table used closed interval 0.55-0.80 (implying 0.55 = moderate) but presynth_check.py uses strict > 0.55 so μH=0.55 exactly is low risk; updated to '> 0.55 and ≤ 0.80' to match code
cschanhniem
deleted the
feat/phase3-config-test-compute-features-wetlab-docs
branch
June 28, 2026 02:41
3 tasks done
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Three remaining quality gaps closed before synthesis ordering:
phase3.yaml config validation (3 new tests in test_config.py) — pipeline.yaml was validated at startup; phase3.yaml was not. If
max_disagreementis accidentally removed from phase3.yaml,pipeline.pywould crash at runtime withKeyError: 'disagreement'when iterating candidates. CI now catches this immediately.compute_features → synthesis_feasibility_score contract test —
synthesis_feasibility_score()uses direct dict access (not.get()) forlength,longest_repeat_run, andcysteine_fraction. There was no test verifyingcompute_features()always returns all three. A refactor that renames one key would silently crash candidate scoring. Addedtest_compute_features_supplies_synthesis_feasibility_keysthat both checks key presence and runs the function end-to-end.docs/WET_LAB_HANDOFF.md— new guide for wet-lab scientists covering:Test plan
pytest tests/test_config.py tests/test_physchem.py— 57 passed