The lab side of the loop — records, robots and safety
Instrument parsing, ELN and LIMS records, inventory and GHS safety, self-driving campaigns and an offline bench logger — connected to the same projects and evidence ledger as the models.
Vendor files in, typed records out
Upload a vendor file and the orchestrator auto-detects the type from content, or you pass the type explicitly. The result is a typed envelope: parser, instrument type, evidence class, raw metadata, data series, peaks or features, derived properties and warnings.
Bruker .raw, Rigaku .ras/.rasx, PANalytical, XRDML, UXD and ASCII XY/CSV inputs. Background subtraction and peak finding, FWHM, Bragg d-spacing, Scherrer crystallite size, and phase matching for common phases (TiO2, Pt, Pd, CeO2, ZnO). Undocumented binary bodies come back as metadata_only with the vendor export path stated, never a fabricated pattern.
Agilent ChemStation/MassHunter, Shimadzu GCMSsolution and Thermo Trace files (.csv, .txt, .dat, .tic, .ms). Total-ion-chromatogram extraction, trapezoidal peak-area integration with area-percent quantification, and NIST-style library matching — with matchms cosine similarity when that package is installed.
UV-Vis inputs from Shimadzu UVProbe, PerkinElmer UV WinLab, Agilent Cary and Thermo Evolution: absorbance/%T interconversion, lambda-max, and direct or indirect Tauc bandgap fits. FTIR inputs from JCAMP-DX, JASCO, Thermo Nicolet OMNIC and PerkinElmer Spectrum: transmittance and absorbance handling, vibrational band detection, and functional-group annotations including O-H, C=O, C-H, N-H and Brønsted/Lewis acid sites.
NMR from JCAMP-DX, Bruker TopSpin, Varian VnmrJ and JEOL Delta (.jdx, .dx, .pkn, .csv, .txt, .fid, .ser): chemical shifts in ppm, solvent-peak identification (CDCl3, DMSO, D2O), multiplet splitting and proton-integral normalisation; binary fid/ser files return metadata_only. Raman from Renishaw WiRE, Horiba LabSpec and ASCII: peak picking and S/N estimation, with RamanSPy preprocessing when installed.
Anton Paar RheoCompass, TA Instruments TRIOS and Malvern Kinexus exports (.csv, .txt, .rso, .tri, .rfd). Fits for Ostwald-de Waele power law and Herschel-Bulkley, a shear-thinning index, and oscillatory moduli (G′, G″, tan delta, |eta*|) with crossover gel-point detection.
Bio-Logic EC-Lab, Arbin, Neware BTS and Landt files (.mpt, .csv, .txt, .nda, .ndax, .res, .bcy, .mps). Charge/discharge capacity, coulombic efficiency, capacity retention and differential-capacity redox peaks. Decodable Neware bodies are read in full; Arbin .res and Bio-Logic MPR binaries return an honest metadata_only envelope with export guidance.
Waters Empower/Millennium, Shimadzu LabSolutions and Thermo Chromeleon peak-table reports are parsed as EXTRACTED rows, with the vendor RAW/UNI/LCD/CMBX binary listings returning metadata_only where they cannot be decoded. Unknown vendors are refused with a clean error — the parser never guesses.
A notebook you can verify, with claims kept precise
The ELN is the digital-thread layer. Records are versioned, instrument results attach to their source sample, and e-signatures form a tamper-evident chain that anyone can re-verify.
Experiment templates are append-only: editing a template writes the next version for the same name and domain pack while the old row is frozen. Samples, containers, microplates, wells, aliquots and inventory items are first-class records, and instrument results attach to the originating sample as EXTRACTED rows stored verbatim.
Each e-signature is an immutable SignatureRecord: SHA-256 over canonical JSON of the record fields plus the previous hash, anchored to the same genesis convention as the core audit chain. The verify endpoint recomputes the full chain and reports clean or tampered, naming the first broken row.
Define QC specs with inclusive min/max bounds, then evaluate a measured value: pass, fail or marginal, where marginal is the 5% edge band just inside spec and out_of_spec is true exactly on fail. Every evaluation is hash-chained and written to the audit log.
Release is held with reasons when data is missing, a QC evaluation failed or is only marginal, signatures are invalid, or a QMS event is open — and released only when all of those pass. The validation pack documents an executable IQ/OQ/PQ checklist covering QC, QMS, lifecycle stages, e-recipes and the signature chain.
regulatory_claim: false and scope integrity-draft. Treat it as a tamper-evident ledger — it is not ISO 17025, GLP or 21 CFR Part 11 certification, and the validation pack is an executable checklist rather than a certificate.Every sample knows where it came from
Samples, aliquots, derivatives and plates are connected records: transfers carry volume and dilution, lineage is a directed graph, and conservation is checked rather than assumed.
Samples carry initial and remaining volume, concentration and status through created, prepared, in_plate, in_analysis, consumed, archived and disposed. Child aliquots deduct parent volume, and multi-source derivatives combine with a mass-weighted resulting concentration.
Aliquot links record parent, child, amount, unit, operator and timestamp. The aliquot tree returns a nested parent-to-child view, and transferred material can be summed for volume-balance checks rather than relying on paperwork.
The lineage graph is a DAG with normalised generation numbers; each edge carries its relationship (aliquot or synthesis precursor), transfer volume and dilution factor. A conservation check compares initial volume against remaining plus everything transferred out, so a result can be traced back to its original lot.
Design ANSI/SLAS layouts with alphanumeric well addressing, apply serial dilution gradients with transfer and diluent volumes, and generate transfer maps — 1-to-1, 96-to-384 quadrant stamping or explicit cherry-picks — which export as Opentrons dispense actions.
Stock, hazards and the cabinet around the corner
Inventory pairs quantity tracking with the safety data that decides where a reagent may live. Hazard information comes from a CAS library; automated SDS text is a screening aid, not a substitute for the supplier sheet.
Items track name, CAS, supplier, lot, purity, storage location, quantity and unit, reorder threshold, cost per unit, expiry and owner, with an audit log on the record. Status is derived as in_stock, low_stock or out_of_stock; consumption and restocking are explicit operations, not silent edits.
Low-stock alerts compute a suggested reorder quantity and estimated cost; expiry alerts flag items already expired or expiring inside the default 30-day window. The inventory store starts empty for a new account — no placeholder reagents appear unless demo seeding is explicitly requested, and those rows are labelled as demos.
The CAS lookup returns formula, molecular weight, density, SMILES, GHS pictograms, H-statements, storage class and temperature requirement. A co-location check flags the classic incompatible pair — oxidizers (GHS03) stored with flammables (GHS02) — before it becomes a cabinet problem.
The GHS/SDS engine produces 16-section OSHA HCS (29 CFR 1910.1200) / EU REACH Annex II draft sheets and can infer a GHS classification from physical properties such as flash point and LD50. Automated hazard text is a screening aid — confirm critical decisions against the supplier’s official SDS.
Structured identifiers, scanned at the bench
Sample, plate, lot and experiment codes are checksummed, rendered as vector graphics, and resolvable from a camera scan or manual entry.
- Structured IDs — Samples (MF-SMP-…), plates (MF-PLT96-…), lots (MF-LOT-…) and experiments (MF-EXP-…), each carrying a short checksum derived from SHA-256.
- Renderers — Vector SVG Code-128 barcodes with the mandatory modulo-103 checksum, and QR matrices whose payload can be JSON.
- Validation — validate_code() recomputes the checksum; a damaged label scans as invalid rather than resolving to the wrong record.
- Scanning — The camera scanner captures via WebRTC and decodes with the BarcodeDetector API, with torch toggle and manual entry as the fallback when the browser cannot decode.
A closed loop with a safety interlock on every action
The SDL layer reuses the platform’s active-learning, robotic-protocol and edge-safety services rather than duplicating them: candidates are proposed, protocols are generated and validated, results pass a physical-plausibility gate, and the loop advances on accepted measurements.
plan_round proposes candidates (exploit via expected improvement or top predicted value, explore via maximum uncertainty, or cold-start space-filling). generate_protocol turns a candidate into an Opentrons OT-2/Flex script with safety bounds injected. ingest_result applies the quality gate, and should_advance moves to the next round once the accepted-result threshold (default four) is met.
Per-target bounds are enforced at ingest: conversions, selectivity and yield 0–100; temperature −50 to 2000 °C; pH 0–14; pressure 0–1000 bar; viscosity above zero; volume 0–1000 µL. In-range values are appended to the campaign dataset as MEASURED. Out-of-range or non-numeric values are recorded as flagged and require human approval — they never silently join the training set.
Registered edge nodes stream telemetry (temperature, chamber pressure, flow rate, shake RPM, door state) and are considered offline after 90 seconds without a heartbeat. Values are checked against per-node safety envelopes; critical breaches such as over-temperature or over-pressure auto-trip the software E-stop across the platform, and non-finite readings cannot bypass the check.
Lifting the E-stop requires an authenticated operator, an explicit confirmation of the physical safety checklist and a justification, recorded as an append-only hash-chained sign-off. Action gates classify operations LOW/MEDIUM/HIGH; MEDIUM and HIGH wait for human approval, and gates cannot be approved while the E-stop is active.
Review rooms where decisions are signed, not implied
Live presence, candidate locking and quorum voting feed a hash-chained decision ledger — so the record shows who was there, what they saw and what they approved.
Rooms track participants with colours and live cursors (x, y, active element) plus the active tab, streamed to the room. Presence heartbeats go stale after a 60-second TTL, so a closed laptop does not leave a ghost reviewer on the board. A shared 3D viewer keeps camera and selected atoms in lockstep.
A shared candidate spreadsheet moves through review states including DRAFT, IN_REVIEW, APPROVED, REJECTED and SENT_TO_LAB. Candidates can be locked to avoid two people editing at once, tagged, shortlisted, and discussed in resolvable comment threads; Pareto filter state and trade-off weights broadcast to the room.
Votes of APPROVE/REJECT/UP/DOWN/ABSTAIN are tallied live, and a candidate auto-approves only when at least two people have voted and approvals strictly outnumber rejections — a quorum of voters, not a single click.
Once a candidate is approved or locked, sign-off writes an immutable certificate whose SHA-256 hash chains to the previous decision (genesis-anchored). The chain verifier recomputes every certificate and reports the first break. Demo placeholders are excluded: a candidate labelled DEMO cannot be signed off.
The bench logger works when the network does not
The bench logger records validation runs against generated recipes, and its mobile companion is an installable offline-first PWA: a lost connection delays the sync, not the experiment.
Start from a generated recipe, log conditions, measurements, temperature ramps and observations, and mark whether the prediction was validated. Logged results export to a dataset and flow back into modelling through the lab-measurements API.
- Offline-first — Records are written to an IndexedDB store with a pending-sync status, so a log survives a lost connection; when connectivity returns the queue is pushed and marked synced.
- Cached recipes — A recipe library is stored offline alongside the queue, so the bench does not depend on the network to know what to run.
- Voice & barcode — Voice notes are transcribed into measurements, and the camera barcode scanner captures sample codes in the field.
- Canonical route — The logger lives at /studio/bench; older /studio/mobile-logger links redirect there.
Straight answers about records, robots and safety
Do imported instrument results count as measurements?
Can I open a Bruker .raw or Bio-Logic .mpr directly?
Are the e-signatures legally validated?
How does the self-driving lab stop a bad measurement entering the model?
What does the E-stop actually stop?
What happens to a quorum vote with one approval?
Does the mobile logger need a connection at the bench?
Close your bench-to-model loop
Record runs, parse the instrument output, keep the sample lineage intact, and feed the cleaned measurements straight back into prediction and optimization.