Skip to content

Calibration profile shows em-dashes and "awaiting results" over already-plotted fits #136

Description

@pskeshu

The Calibration Profile page presents for every headline metric while the curves those metrics describe are plotted directly below it.

At 25:15 in the recording, embryo_1's profile shows SLOPE —, OFFSET —, R² TOP —, R² BOT —, and a summary panel reading Awaiting calibration results — above FOCUS CURVE — TOP and FOCUS CURVE — BOTTOM, both rendered with data points and fitted lines.

Cause

The metrics strip and summary quad read only image metadata, not the embryo record: gallery.js:494-505 scrapes img.metadata.slope / r_squared_top / … off the pushed PNGs, and :825-830 prints '—' when absent. gallery.js:402-415 falls through to _emptyQuadBody('Awaiting calibration results') when no calibration_summary image exists for that embryo.

So the fit is reconstructed from a matplotlib PNG's metadata rather than from embryo.calibration, which every calibration path already writes. Any run that is still in flight, aborted after the sweeps, or whose plot generation raised (the except only logs a warning) shows em-dashes forever, even though the numbers are in hand.

Fix: seed the fit from the embryo record, once, in _extractCalibInfo — cache e.calibration off EMBRYOS_UPDATE and fill info.slope ??= c.slope_um_per_deg etc. after the metadata loop. render() already has the embryoId to key it.

Related: the agent names R² as the decisive metric and then does not report it

Its own result text says "the real quality metric is the fit R² at each galvo end", and it offers Review calibration fit quality (R²) per embryo — while the table it renders has only Embryo | Galvo extent | Approx. size.

R² is in-process the moment the table is built: computed per galvo end (calibration_tools.py:1246-1250) and stored at :1294-1296. The return string omits it (:1364-1375), and calibrate_all_embryos then keeps only the first two lines — so the agent's context after a batch calibration contains extent and size and nothing about fit quality. It narrated the right metric and rendered the only columns it had.

Fix: put R² on the first line of calibrate_embryo's return (calibration_tools.py:1365) so it survives the two-line truncation; calibrate_all_embryos inherits it via lines[0] with no second patch.


Evidence: 2026-08-07 walkthrough, 25:15, 34:30–36:00. Not previously captured.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workinguiUser interfaceuser-feedbackTraces to a named user demo or feedback session

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions