Skip to content

[Production] Release 2026-09-01 - #217

Merged
wasimxyz merged 4 commits into
productionfrom
staging
Sep 1, 2026
Merged

[Production] Release 2026-09-01#217
wasimxyz merged 4 commits into
productionfrom
staging

Conversation

@wasimxyz

@wasimxyz wasimxyz commented Sep 1, 2026

Copy link
Copy Markdown
Member

No description provided.

wasimxyz and others added 3 commits August 31, 2026 13:29
* Render report PDFs inline when S3 stored them as binary.

Watcher uploads of uppercase .PDF files often land as binary/octet-stream, so the report iframe downloaded the file instead of showing it.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Bump watcher to 1.0.1 and tell agents to version shipped watcher changes.

The MIME-type fix needs a package bump before a production tag; watcher/AGENTS.md keeps later branches from shipping src/ changes at the old version.

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
* Add a melting-curve plate report for Azure Cielo qPCR runs.

Existing _MeltingCurve.csv uploads were ignored by the processor gate; parse them into per-well -dF%/dT sparklines and seed a synthetic vendor-shaped fixture so local runs can render the report.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Show qPCR PDF reports and make melt-curve wells expandable.

Report Data now renders the instrument's PDF export through the viewer
TapeStation already uses, and the plate grids move to their own "Melting
Curves" section. Clicking a well opens a modal with the full-resolution
curve from the derivatives CSV, and a per-channel toggle switches both the
grid and the modal between the derivative and the melt curve.

The plate JSON carries both series so that toggle costs no download.
Points are now [x, y] pairs rather than objects, which holds a 384-well
run to 300 KB. Runs processed before this need reprocessing to draw.

Plate geometry and well-selection state move out of the Aunty modules into
shared ones now that two reports use them.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Show both melt-curve series together and pick channels from a dropdown.

The card stacked four 96-well grids and ran several screens tall. A
dropdown now shows one channel at a time, carrying the well selection
across so switching channels stays on the same well.

Derivative and melt curve are no longer exclusive: either, both, or
neither. Well tiles overlay them, each scaled to its own tile. The
single-well chart gives each its own y-axis, tinted to match its line,
because a derivative in %/°C and a percentage of peak fluorescence share
no scale. The plate opens on the derivative alone — 96 tiles of two curves
is a lot to scan — and the well chart opens on both.

The well chart also marks the derivative peak, the melting temperature,
with a dashed line. A flat trace gets no marker so an empty channel does
not get one pinned to its first reading.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Name the well dialog by channel and well in one heading.

The header spent two lines on "A7" over "Channel2 melting curve". One
heading reading "Channel2 – A7" says the same thing and leaves the chart
more room. What was the visible subtitle stays on as a screen-reader
description, since the heading alone no longer says what is plotted and
Radix expects a described dialog.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Put the melting curves above the PDF on qPCR runs.

The plate grids are the part of the page people interact with, so they now
come first and the vendor PDF sits below them. The PDF keeps the "Report
Data" title that every other run variant uses for its main section. The MCP
run report is reordered to match.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Harden the melt-curve parser and simplify the report shell.

Review follow-ups on the melting-curve work:

- The parser dropped blank header cells but kept reading data by the filtered
  index, so a blank column mid-header would have shifted every later well onto
  its neighbour's trace. Column positions now come from the unfiltered header.
- `write_plate_json` writes the plate `parse_melting_curve_file` already built
  instead of rebuilding it from the blocks.
- `PlateWellsProvider` tracks the selected well by label rather than by
  position, so switching a qPCR channel stays on the same well even when the
  channels report different well sets.
- One case-insensitive matcher per melt artifact, shared by the run-page loader
  and the report-file filter.
- `ReportDataShell` takes an optional `count` instead of a required `total`
  plus a `showCount` flag. The empty card is now an exported `ReportDataEmpty`,
  which the melting report renders itself since its card has nothing countable
  to put in the heading.

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
* Keep wide instrument run tables scrolling inside the page.

Gel Doc and SpectraMax metadata columns were stretching the main pane past the sidebar because flex items would not shrink below the table's min-content width.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Apply npm audit fix in the web lockfile.

This pulls Better Auth from 1.6.27 to 1.7.2, which is a breaking account-identity change handled in the next commit.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Store Better Auth 1.7 account issuers so local email sign-in works.

1.7 keys accounts on (issuer, accountId). Seeded credential rows had no issuer, so Alice's password login failed with "Couldn't sign in with that email."

Co-authored-by: Cursor <cursoragent@cursor.com>

* Show comment counts beside the run ID in list tables.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Verify MCP JWTs with Better Auth 1.7's verifyBearerToken.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Keep even padding on table checkbox cells.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Render the deleted run badge inside RunIdCell.

The badge was copy-pasted identically across all eight runs tables, so
RunIdCell now derives it from the run's deleted_at and no longer takes
`children` or `labelClassName`.

The dashboard badge picks up the default 12px size instead of 10px, so
both views match. Its `labelClassName="text-sm"` was already inherited
from `Table`, leaving the run ID label unchanged.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Upgrade pyright to 1.1.411.

Lockfile only; the `>=1.1.408` floor in `pyproject.toml` still holds and
CI resolves the version through `uv sync`. Typecheck stays clean.

Co-authored-by: Cursor <cursoragent@cursor.com>

* chore: Rename make check-all to make check

* Apply the Better Auth 1.7 OAuth schema so MCP registration works.

The 1.7 bump landed without regenerating the OAuth provider schema, so
dynamic client registration returned a 500 and the authorization-code
flow was unusable. Adds the missing columns plus the three new tables,
and swaps the removed `validAudiences` option for seeded `resources`.

Also updates the DCR tests for 1.7's native-only loopback redirect rule
and its 201 response.

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
@wasimxyz wasimxyz self-assigned this Sep 1, 2026
@vercel

vercel Bot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
data-hub Building Building Sep 1, 2026 10:20pm UTC
data-hub (staging) Ready Ready Preview Sep 1, 2026 10:20pm UTC

Request Review

* Roll Better Auth back to 1.6 so MCP clients can register.

1.7 rejects Cursor and Claude Code because both omit application_type
and send a non-https callback. Pin the packages to 1.6.27 and add a
migration that lets 1.6 insert account rows again. Leave the UI and
make-check work from #216 in place.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Stop Next from writing a nested web/web folder.

Next 16 treats the git repo as the Turbopack workspace, so make dev
already running in web/ wrote assets to web/web/.next. Pin the app
root and ignore any leftover copy.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Re-apply the Turbopack root pin after withMicrofrontends.

Keeps client assets in web/.next so a leftover cache cannot
restore them into web/web/.next on make dev.

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
@wasimxyz
wasimxyz merged commit d7e0068 into production Sep 1, 2026
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant