Breaking Changes:
- Backend settings package renamed from
wuitoconfig(DJANGO_SETTINGS_MODULEis nowconfig.settings.*); deployments/scripts setting that env var directly need updating. Also added an import-linter check enforcing that the sharedcommonapp never imports domain apps, catching one existing violation. (Direct commit5cbc20a.) - "Library Type" renamed to "Analysis Type" end-to-end (model, API fields and endpoints, admin, exports), not just the frontend column label — avoids confusion with Library Protocol.
/api/library_types/and/api/usage/library_types/are now/api/analysis_types/and/api/usage/analysis_types/; thelibrary_type/library_type_nameJSON keys on libraries/samples/run-statistics/sequences-statistics responses are nowanalysis_type/analysis_type_name. (Direct commit2c8c9b8.)
Non-breaking changes:
- Added optional self-hosted GoatCounter web analytics, configured per deployment (dev/test/prod/demo each point at their own site) via VITE_GOATCOUNTER_URL; unset by default, so this is a no-op unless a deployment's env file opts in. Tracking now also covers "Return Pool to Index Generator". (Direct commit
4fbbbe7.) - Removed unused legacy static assets (DataTables, jQuery, noty, daterangepicker, underscore, Bootstrap 3, glyphicon fonts) that had no remaining references anywhere in the app; server-rendered pages (login, password reset, error pages) now use Bootstrap 5 instead of Bootstrap 3. No user-visible change other than faster page loads. (PR #358.)
- Libraries & Samples table now shows a "Flowcell Created" column with the creation date of each flowcell a library/sample was sequenced on, aligned to the existing Flowcell IDs column. (PR #354.)
- Added two box plots to the Usage page, "Turnaround Time by Sequencer" and "Turnaround Time by Analysis Type", showing the spread (min/median/max, plus individual points for any outliers beyond the whiskers) of days from request submission to flowcell loading (first flowcell creation; the sequencer is that of the first flowcell), backed by a new
Request.submitted_attimestamp — set automatically when a request's first library/sample is submitted (status 1), and backfilled for pre-existing requests from their legacy approval timestamp via migration. The Usage page now shows 4 charts in a 2x2 layout — Principal Investigators and Analysis Types on top, their matching Turnaround Time box plots below — and long x-axis labels (over 18 characters) are truncated with an ellipsis. The page defaults to the last 6 months, and a new "Show" selector next to the date range (All records / Libraries / Samples) filters all four charts by record type. Charts share one palette: purple/orange for Libraries/Samples (box plots take the colour of the selected record type), dark teal for box plots over all records, black box plot lines and outliers. (PRs #354, #369.) - Added a
make dev-fixtarget: deploys likemake dev, but also loads demo fixture data.make dev-eznow loads demo fixture data instead of an empty DB. (PR #354.) - Adopted VueUse composables and Motion across the frontend (browser listeners, storage, debounce, clipboard, resize, and dialog animations), including animated save-confirmation dialogs in the Request Editor. (PRs #350, #352.)
- Added Playwright e2e coverage for Request Editor (edit/delete a request), Invoicing (billing-month view, Excel export), Load Flowcells (sample sheet download, destroy flowcell), and Runs/Sequences Statistics. (Direct commit
9380fb48.) - Fixed a fresh database migrate failing outright: the Analysis Type rename shipped without a migration for the model rename itself, and some apps had accumulated conflicting/duplicate migrations from unrelated work. (Direct commit
2d4b3de.) - Fixed the above migration repair having dropped three data-safety steps in the process: sanitizing invalid library/sample names before enforcing the new naming rule, seeding the default Attachment File Types, and transliterating umlauts in existing user names. (Direct commit
d2ea3b02.) - Removed hardcoded institute domain from nginx config, the request-approval page's contact email, and fixture/test data. (Direct commit
6d3cda25.) - "Library Type" renamed to "Analysis Type" end-to-end (model, API fields and endpoints, admin, exports), not just the frontend column label — avoids confusion with Library Protocol.
/api/library_types/and/api/usage/library_types/are now/api/analysis_types/and/api/usage/analysis_types/; thelibrary_type/library_type_nameJSON keys on libraries/samples/run-statistics/sequences-statistics responses are nowanalysis_type/analysis_type_name. (Direct commit2c8c9b89.) - Dates now display as
YYYY.MM.DDeverywhere (tables, exports, PDFs, filters) instead of the oldDD.MM.YYYY. Date-range filters (Duties, Libraries & Samples, Load Flowcells, Runs/Sequences Statistics, Usage) use a new masked text input with a calendar picker instead of the browser's native date field. (PR #343.) - Table header filters: removed gray placeholder text, hint now only in the hover tooltip; filters now trigger 800ms after typing stops (was Tabulator's default 300ms), except Libraries & Samples, which triggers at 2500ms or on Enter. (Direct commit
71e46c72.) - Fixed a migration that could crash applying the new library/sample naming rule to a database with pre-existing invalid names (real production data has some) — invalid names are now cleaned up automatically instead of the migration failing outright. (Direct commit
c9db14dd.) - Duties: migrated to the shared Tabulator-based table used elsewhere in the app, with a redesigned header (search, period filter, and an "Add Duty" button that opens a dialog instead of an always-visible form), sortable date columns, and a new default filter of "Past 1 Year" sorted by most recent end date. (PR #341.)
- Library/Sample names: restricted to letters, numbers and underscores in the request editor's Name column, capped at 99 characters, with a tooltip explaining the rule. (Direct commit
055386ee.) - Index I7/I5, Mean Fragment Size, and Size Distribution validation rules are now also enforced on the backend, closing gaps where the API accepted values the frontend would have rejected. (Direct commit
a6165393.) - Added header tooltips to the request editor's Index I7/I5 columns explaining the allowed characters and max length. (Direct commit
81347594.) - Libraries & Samples: column search now filters across the full result set server-side (not just the loaded page), Advanced Filters gained Index range filters and its dropdown shortcuts back, "Plate Coord" is now computed correctly and consistently, and global search now finds records by Index Type. Incoming, Preparation, Load FCs, Pooling, Run Statistics, and Sequences Statistics got the same filter hint-text and per-column filtering treatment. (PRs #337, #338, #339, #340.)
- Removed the legacy ExtJS shell in favor of a native Vue app shell and navigation, with a restyled top nav bar. (PRs #329, #330, #331, #332, #333, #334, #335. Direct commit
8075e97.) - Emails: fixed an outdated logo in notification headers, and gave transactional emails (approval, password-change, expired-link) a consistent styled layout. (PR #323, direct commit
fce24478.) - Fixed Load Flowcells "Apply to All" not persisting loading concentration/PhiX values. (PR #328.)
- CI: fixed the weekly dependency-update workflow failing due to a stricter zizmor action-pinning requirement. (Direct commits
e681af9c,a00ba038.) - Added a staff API endpoint for looking up PIs, so dissectBCL no longer needs a static configuration list. (PR #317, direct commit
5ddb4fe0.) - Fixed bulk create/update endpoints breaking after a dependency upgrade. (Direct commit
3190d000.) - New Vue-based Invoicing page, replacing the old ExtJS grid. (PR #308.)
- Infrastructure: moved the backend base image to Debian 12 for Playwright/Firefox support. (PR #319.)
- RO-Crate export: improved reliability on per-record errors, richer metadata, and an offline-browsable HTML preview in the export. (PRs #314, #315, #316, #327.)
- Removed unused staff-only pages. (PR #323.)
- Add/Edit Request: clarified "Minimum Read Length" labeling, fixed index dropdowns picking the wrong I7/I5 pair for kits with duplicate sequences, fixed admin errors on large index assignments, and save confirmations now include the request ID. (Direct commits
168ea9a6,dec032c1,a9fe1c99,b2bb16be.) make djtestnow stops at the first failure instead of running the full suite. (Direct commitf6ccb691.)- Fixed CI's Playwright job intermittently failing on a fresh runner because tests started before the frontend build had finished starting up. (PR #341.)