A record's section metrics saved as analyses; a timeline of what ran when on a cell; pipeline pages that answer from the pipeline, not its jobs; confidence intervals and sensitivity as pipeline elements
Every section of a record becomes an analysis
When a cycling record finishes processing, the platform now measures each section it found — a formation, a rate ladder, a pulse train, a stretch of cycling — and saves one analysis per section against the parent measurement. The numbers are stored next to every other extracted feature rather than recomputed each time a page asks for them, so they are queryable, plottable and downloadable like anything else.One analysis per section, not one per record: the sections measure different things, and a section that occurs twice — two stretches of cycling at different rates — is two results rather than one. Each carries the window it was measured over, the metrics it produced, and a note saying why any number is missing. Rows the platform derived itself are flagged as such, so a view can separate them from analyses a person uploaded.Two new families of metric come with it, both of which need the cell rather than the record:- Specific capacity. Every capacity gains a counterpart in mA.h.g⁻¹, computed from the instance’s active mass.
- Instance C-rate. The existing rate divides by the capacity this record’s window happened to reach; the new one divides by the capacity the cell actually holds. On a real rate ladder that is the difference between reading 0.16 / 0.39 / 0.79 / 1.58 C and reading the 0.2 / 0.5 / 1 / 2 C rungs the ladder was run at.
A timeline of what ran when on a cell
The cell instance page gains a Timeline: every measurement on that cell drawn on one shared time axis, docked to the bottom of the viewport as a title bar that expands on demand. The grid answers “what exists”; this answers “when, and with what gaps” — the question a date-sorted list can only be read one row at a time to approximate.Runs that don’t coincide sit on a single line with the name written inside each bar. The solid bar is what the cell actually recorded; where the logged end time disagrees, it is drawn beside it — dashed out to a later logged end, or marked at an earlier one — because the two disagree often enough to be worth seeing.Pipeline pages answer from the pipeline, not from its jobs
A pipeline’s progress is now computed server-side and served per element, so opening a pipeline no longer means the browser fetching a job and its hundred children one request at a time. On a large multistart fit that was hundreds of requests in a couple of seconds, enough to trip a rate limit with two people on the same page. The page now makes a handful.Alongside it, a cancelled pipeline is now terminal on the wire. Pipelines publishis_terminal and is_failed directly, so a client waiting on one stops
as soon as it is cancelled instead of polling to its timeout and raising a
confusing error — and a status added later classifies itself for clients that
have never heard its name.Confidence intervals and sensitivity as pipeline elements
LinearConfidenceInterval and SobolSensitivity are now pipeline
elements you can add after a fit, returning typed results that decode
client-side with no extra client code. They run as backend jobs, which is the
only practical home for a Sobol analysis, and reuse the same recipes the
pipeline library already ships.Studio
Studio
Improvements
- Drag files straight onto a project’s Raw Data table to upload them — the same gesture as a file drive — with a progress bar, a cancel, and new rows appearing at the top as they land. The upload page still works as before.
- The raw data grid fills the viewport height instead of stopping at a fixed box.
- The analysis preview reads every analysis the platform writes. Previews of compressed results failed to open; they now decode in the browser.
- A file that could not be parsed now stays failed instead of flipping back to “waiting for a cell” with an Attach button that could never succeed — and a file whose data cannot be rebuilt fails once, terminally, rather than being retried on every cell that is created.
- Rows appear during an upload into a project that had none. The table only refreshed while something on screen was already in flight, so a first upload showed a progress bar over an empty table.
- A measurement created from a raw file now carries its whole header — cycler, channel, operator, instrument, cell label, temperature setpoint, software version, export provenance and the test’s start time — rather than only the procedure name. Nothing downstream can recover it once the file has become a measurement, so this was the only place to write it.
- Section detection reads its voltage window from substantial loads only. A brief pulse on a depleted cell could define the window, which collapsed a whole rate-capability record into one bogus capacity check. Pulse grouping also tolerates the cycler’s own timing jitter, so a train of 20 pulses stamped 9.000001 s no longer loses several of them.
- Large batches of fits size their submission limits per user, so one user’s burst no longer eats the headroom of everyone sharing the platform.
Pipeline
Pipeline
Fixes
- MSMR site fractions that did not sum to 1 were being accepted silently. Under one of the constraint methods the fit could return fractions summing to 0.885 or 1.72, which effectively rescales the electrode capacity — a fit could look excellent at ~2 mV RMSE while the parameters were unphysical. The fractions are now normalized, a post-fit check names the sum and the remedy if they still drift, and the stricter constraint method fails loudly rather than reporting a bad number.
- An MSMR half-cell fit keeps its data’s capacity origin. The capacity column was being re-zeroed on the first point, so the model was compared against a grid shifted by whatever a cycler export happened to start at, and the discarded offset reappeared as a wrong lower excess capacity — a physical quantity that feeds downstream state-of-health calculations.
Python API
Python API
Improvements
raise_on_failurenow covers cancellation, so a cancelled pipeline raises rather than returning as though it had finished.
Skills
Skills
Improvements
- The parameterize templates now read model-vs-data channels off the typed result object rather than assembling them by hand, and gain a section on fitting a parameter per objective — both the fixed-per-objective and the fitted-per-objective forms, which the granularity guidance previously described without showing how to express.
- discover-api points at the typed series accessor, so an agent reading the reference before an operation finds the one-call path rather than only the raw two-call read.