Confirmed by an adversarial review pass (survived 2 of 3 refuters) and re-verified on current main.
Defect
src/taxonmech/seed.py:515
if type_strain_ids & set(ccs):
entry["is_type_strain"] = True
type_strain_ids is the union of every type-strain designation from every LPSN name on the record. A strain is flagged if it matches any single deposit in that union. A species has exactly one type strain, so a one-deposit match is too weak a rule.
Worked example
data/taxa/bacteria/salmonella_enterica.yaml flags two different strains, both against the same correct LPSN name (lpsn:784857, which lists 8 designations):
| strain |
designation |
classified_as |
matched designations |
bacdive:5117 |
LT2 |
— |
ATCC 43971, CCUG 42060, DSM 17058 |
bacdive:23943 |
110 (K 108), CNCT SK 108, … |
NCBITaxon:59201 |
DSM 27656 |
Both render as type strain on the taxon page with nothing to distinguish them. The likely cause is that LPSN's designation list for a species includes deposits belonging to the type strains of its subspecies, and subtree gathering pulls those subspecies strains into the species record.
Why no gate catches it
tests/test_corpus_integrity.py::test_type_strains_match_a_nomenclature_designation restates the seeder's own derivation rule (does the strain match a designation?), so it cannot fail on this.
Suggested fix
Require the match to identify a single strain per name — e.g. flag only the strain matching the most designations of the record's correct name, and record the rest as type_strain_candidate with the matched deposits — plus a corpus test that no record flags two type strains for one correct name.
Requires a corpus rebuild. Sequence after #62.
Confirmed by an adversarial review pass (survived 2 of 3 refuters) and re-verified on current
main.Defect
src/taxonmech/seed.py:515type_strain_idsis the union of every type-strain designation from every LPSN name on the record. A strain is flagged if it matches any single deposit in that union. A species has exactly one type strain, so a one-deposit match is too weak a rule.Worked example
data/taxa/bacteria/salmonella_enterica.yamlflags two different strains, both against the same correct LPSN name (lpsn:784857, which lists 8 designations):bacdive:5117bacdive:23943NCBITaxon:59201Both render as type strain on the taxon page with nothing to distinguish them. The likely cause is that LPSN's designation list for a species includes deposits belonging to the type strains of its subspecies, and subtree gathering pulls those subspecies strains into the species record.
Why no gate catches it
tests/test_corpus_integrity.py::test_type_strains_match_a_nomenclature_designationrestates the seeder's own derivation rule (does the strain match a designation?), so it cannot fail on this.Suggested fix
Require the match to identify a single strain per name — e.g. flag only the strain matching the most designations of the record's correct name, and record the rest as
type_strain_candidatewith the matched deposits — plus a corpus test that no record flags two type strains for one correct name.Requires a corpus rebuild. Sequence after #62.