You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Sad Catapella Batch 4, commit d7a538e56d41ac1093ba79adcad397c21b3dfd32. Confirmed behavior, deliberately covered by an existing test, but it conflicts with the requested no-silent-fallback/no-ambiguous-identity standard; this requires a backward-compatibility decision rather than being labeled an accidental regression.
Evidence
read_experiment_design() lines 516–548 constructs a csv.DictReader and checks that required columns are merely present, not unique; duplicate columns are collapsed into the dictionary, and the last value wins.
Existing test explicitly accepts a duplicated repeat_group column with rep1 in one column and other in the other, and asserts that the lenient reader silently selects other. The strict read_confirmed_design correctly refuses it, but the preprocessing notebook/CLI use the lenient reader to edit and re-publish design state.
Contract §12 allows spreadsheet-friendly boolean spellings/whitespace, but it does not establish a safe scientific policy for two conflicting repeat_group columns.
Impact
A spreadsheet export carrying duplicate identity/pairing columns can silently switch biological-repeat grouping and control interpretation before the user confirms, even though the file remains parseable and a subsequent saved strict design looks valid. No pixel corruption is asserted; this is scientific experimental-design identity corruption.
Fix/acceptance
Keep deliberately lenient whitespace/boolean/CRLF/BOM handling, but reject duplicate identity-bearing and control columns at header parsing with DesignFormatError naming each duplicate; preferably reject any duplicate header. Add conflicting and equal duplicate-column fixtures and ensure no output is rewritten on refusal. Update the existing test that currently codifies the unsafe last-value-wins behavior. A compatibility migration must be explicit, never silently choose a column.
Activity
Refuse a design header naming a column twice; RunInputs reads strictly (
Refuse a design column that repeats another behind an invisible chara…
Merge pull request #130 from CellMigrationLab/claude/fix-design-counts
Merge origin/main (#129, #130) into claude/pp-12-staging-resume
PP-12: move RunInputs' refusal texts to run_inputs_text.py (move only)