{
 "about": {
  "method": "oligo-resuspension@1.0.0",
  "recordedOn": "2026-10-21",
  "script": "pipeline/lab-calculators/oligo_reference.py",
  "scriptSha256": "442ff3a26077c8a9e00a433c9b38d1332a88451a43fe360b59afd19feda6ec59",
  "source": "The CSO's Stage D rulings of 21 October 2026, item 4; every value self-constructed",
  "limits": "Uses the amount on the vendor's sheet, not measured here; the concentration is nominal until you measure it; no extinction coefficient is used.",
  "nonFinite": "An infinite or NaN amount or concentration is refused with oligo-input; JSON cannot carry it, so the engine's tests construct it.",
  "tolerances": {
   "values": "within 1e-9 relative",
   "refusals": "exact"
  }
 },
 "oracle": {
  "name": "Python fractions",
  "version": "3.13.16"
 },
 "count": 18,
 "recordedOn": "2026-10-21",
 "cases": [
  {
   "name": "cso-worked",
   "about": "The CSO's case: 25 nmol to 100 µM gives 250 µL",
   "input": {
    "v": 1,
    "kind": "oligo",
    "name": "primer F",
    "amount": {
     "value": 25,
     "unit": "nmol"
    },
    "target": {
     "value": 100,
     "unit": "µM"
    },
    "sourceNote": ""
   },
   "expect": "ok",
   "expected": {
    "amountMol": 2.5e-08,
    "concentrationM": 0.0001,
    "volumeL": 0.00025,
    "volumeUl": 250.0,
    "volumeUlExact": "250.000000000"
   }
  },
  {
   "name": "pmol-to-um",
   "about": "500 pmol to 10 µM",
   "input": {
    "v": 1,
    "kind": "oligo",
    "name": "",
    "amount": {
     "value": 500,
     "unit": "pmol"
    },
    "target": {
     "value": 10,
     "unit": "µM"
    },
    "sourceNote": ""
   },
   "expect": "ok",
   "expected": {
    "amountMol": 5e-10,
    "concentrationM": 1e-05,
    "volumeL": 5e-05,
    "volumeUl": 50.0,
    "volumeUlExact": "50.000000000"
   }
  },
  {
   "name": "umol-to-mm",
   "about": "1 µmol to 1 mM",
   "input": {
    "v": 1,
    "kind": "oligo",
    "name": "",
    "amount": {
     "value": 1,
     "unit": "µmol"
    },
    "target": {
     "value": 1,
     "unit": "mM"
    },
    "sourceNote": ""
   },
   "expect": "ok",
   "expected": {
    "amountMol": 1e-06,
    "concentrationM": 0.001,
    "volumeL": 0.001,
    "volumeUl": 1000.0,
    "volumeUlExact": "1000.000000000"
   }
  },
  {
   "name": "nmol-to-nm",
   "about": "2.5 nmol to 100 nM",
   "input": {
    "v": 1,
    "kind": "oligo",
    "name": "",
    "amount": {
     "value": 2.5,
     "unit": "nmol"
    },
    "target": {
     "value": 100,
     "unit": "nM"
    },
    "sourceNote": ""
   },
   "expect": "ok",
   "expected": {
    "amountMol": 2.5e-09,
    "concentrationM": 1e-07,
    "volumeL": 0.025,
    "volumeUl": 25000.0,
    "volumeUlExact": "25000.000000000"
   }
  },
  {
   "name": "odd-yield",
   "about": "A vendor's 37.4 nmol to 100 µM",
   "input": {
    "v": 1,
    "kind": "oligo",
    "name": "",
    "amount": {
     "value": 37.4,
     "unit": "nmol"
    },
    "target": {
     "value": 100,
     "unit": "µM"
    },
    "sourceNote": ""
   },
   "expect": "ok",
   "expected": {
    "amountMol": 3.74e-08,
    "concentrationM": 0.0001,
    "volumeL": 0.000374,
    "volumeUl": 374.0,
    "volumeUlExact": "374.000000000"
   }
  },
  {
   "name": "tiny",
   "about": "10 pmol to 1 mM",
   "input": {
    "v": 1,
    "kind": "oligo",
    "name": "",
    "amount": {
     "value": 10,
     "unit": "pmol"
    },
    "target": {
     "value": 1,
     "unit": "mM"
    },
    "sourceNote": ""
   },
   "expect": "ok",
   "expected": {
    "amountMol": 1e-11,
    "concentrationM": 0.001,
    "volumeL": 1e-08,
    "volumeUl": 0.01,
    "volumeUlExact": "0.010000000"
   }
  },
  {
   "name": "refuse-zero-amount",
   "about": "0 nmol",
   "input": {
    "v": 1,
    "kind": "oligo",
    "name": "",
    "amount": {
     "value": 0,
     "unit": "nmol"
    },
    "target": {
     "value": 100,
     "unit": "µM"
    },
    "sourceNote": ""
   },
   "expect": "refused",
   "problem": "oligo-input"
  },
  {
   "name": "refuse-negative-amount",
   "about": "−25 nmol",
   "input": {
    "v": 1,
    "kind": "oligo",
    "name": "",
    "amount": {
     "value": -25,
     "unit": "nmol"
    },
    "target": {
     "value": 100,
     "unit": "µM"
    },
    "sourceNote": ""
   },
   "expect": "refused",
   "problem": "oligo-input"
  },
  {
   "name": "refuse-zero-target",
   "about": "To 0 µM",
   "input": {
    "v": 1,
    "kind": "oligo",
    "name": "",
    "amount": {
     "value": 25,
     "unit": "nmol"
    },
    "target": {
     "value": 0,
     "unit": "µM"
    },
    "sourceNote": ""
   },
   "expect": "refused",
   "problem": "oligo-input"
  },
  {
   "name": "refuse-negative-target",
   "about": "To −100 µM",
   "input": {
    "v": 1,
    "kind": "oligo",
    "name": "",
    "amount": {
     "value": 25,
     "unit": "nmol"
    },
    "target": {
     "value": -100,
     "unit": "µM"
    },
    "sourceNote": ""
   },
   "expect": "refused",
   "problem": "oligo-input"
  },
  {
   "name": "blank-amount",
   "about": "No amount yet: blank, not an error",
   "input": {
    "v": 1,
    "kind": "oligo",
    "name": "",
    "amount": {
     "value": null,
     "unit": "nmol"
    },
    "target": {
     "value": 100,
     "unit": "µM"
    },
    "sourceNote": ""
   },
   "expect": "blank",
   "problem": "oligo-empty"
  },
  {
   "name": "blank-target",
   "about": "No concentration yet: blank",
   "input": {
    "v": 1,
    "kind": "oligo",
    "name": "",
    "amount": {
     "value": 25,
     "unit": "nmol"
    },
    "target": {
     "value": null,
     "unit": "µM"
    },
    "sourceNote": ""
   },
   "expect": "blank",
   "problem": "oligo-empty"
  },
  {
   "name": "refuse-mass-ng",
   "about": "An amount in ng needs a molecular weight",
   "input": {
    "v": 1,
    "kind": "oligo",
    "name": "",
    "amount": {
     "value": 150,
     "unit": "ng"
    },
    "target": {
     "value": 100,
     "unit": "µM"
    },
    "sourceNote": ""
   },
   "expect": "refused",
   "problem": "oligo-mass"
  },
  {
   "name": "refuse-mass-ug",
   "about": "An amount in µg",
   "input": {
    "v": 1,
    "kind": "oligo",
    "name": "",
    "amount": {
     "value": 0.2,
     "unit": "µg"
    },
    "target": {
     "value": 100,
     "unit": "µM"
    },
    "sourceNote": ""
   },
   "expect": "refused",
   "problem": "oligo-mass"
  },
  {
   "name": "refuse-mg-per-ml",
   "about": "A target in mg/mL",
   "input": {
    "v": 1,
    "kind": "oligo",
    "name": "",
    "amount": {
     "value": 25,
     "unit": "nmol"
    },
    "target": {
     "value": 1,
     "unit": "mg/mL"
    },
    "sourceNote": ""
   },
   "expect": "refused",
   "problem": "oligo-mass-concentration"
  },
  {
   "name": "refuse-ug-per-ul",
   "about": "A target in µg/µL",
   "input": {
    "v": 1,
    "kind": "oligo",
    "name": "",
    "amount": {
     "value": 25,
     "unit": "nmol"
    },
    "target": {
     "value": 1,
     "unit": "µg/µL"
    },
    "sourceNote": ""
   },
   "expect": "refused",
   "problem": "oligo-mass-concentration"
  },
  {
   "name": "refuse-ng-per-ul",
   "about": "A target in ng/µL, the spectrophotometer's unit",
   "input": {
    "v": 1,
    "kind": "oligo",
    "name": "",
    "amount": {
     "value": 25,
     "unit": "nmol"
    },
    "target": {
     "value": 100,
     "unit": "ng/µL"
    },
    "sourceNote": ""
   },
   "expect": "refused",
   "problem": "oligo-mass-concentration"
  },
  {
   "name": "refuse-unknown-unit",
   "about": "An amount in OD units",
   "input": {
    "v": 1,
    "kind": "oligo",
    "name": "",
    "amount": {
     "value": 5,
     "unit": "OD"
    },
    "target": {
     "value": 100,
     "unit": "µM"
    },
    "sourceNote": ""
   },
   "expect": "refused",
   "problem": "oligo-unit"
  }
 ]
}
