Released: openJII late-June cut
A reliability-focused late-June release with improved scan handling, offline stability, branching measurement flows, long-measurement fixes, mobile upgrades, Workbooks polish, account updates, and security/resilience hardening.
A follow-on deploy to the June 15 platform release, shipping the work from the past ten days. Mobile ships the full current main — so this build carries everything merged since the last mobile release, plus a fresh attempt at the intermittent "Scan error" (OJD-1564). Web/backend deploy the curated release branch. Headlines: the scan-error reliability fix, measurement-flow branching and long-measurement reliability on MultispeQ, the NativeWind 5 / Tailwind 4 upgrade (with the OTP-login crash fix), Workbooks polish, the account-management revamp, and resilience + security hardening. Experiment dashboards and the data-upload overhaul (both web) stay held for the next cut.
📡 Scan-error reliability (the "random scan errors" fix — OJD-1564)
An attempt at the intermittent "Scan error" that was blocking the offline measurement flow, tackling both root causes:
Connection state: scans now abort on a real BLE disconnect instead of trusting a stale polled flag; the old serial port is closed on reconnect (clears the "device not open" zombie) and USB-serial unplugs are detected so scans stop hitting a closed port.
Offline data: re-prefetch offline protocol/macro data on foreground and reconnect, and fail gracefully when offline or when the connection drops mid-scan instead of throwing a bare error.
Plus device-discovery streaming (USB-first), no battery-polling over serial, and reading protocol/macro from the workbook snapshot rather than redundant fetches.
🔬 Measurement flow & MultispeQ
Branch-cell evaluation & routing in the measurement flow — a flow can now branch to different steps based on a cell's answer (breaking change, #1511).
Long measurements no longer falsely time out: dynamic timeouts, a cancel action, and honest live progress for long-running protocols (#1647).
Corrected the protocol duration estimate and unified variable resolution so the estimate matches reality (#1680).
📱 Mobile (full current main ships in this build)
Upgraded to NativeWind 5 + Tailwind 4, streamlined the mobile CI, and replaced the
with-rn-bluetooth-classicdependency (#1351).Fixed an OTP-login crash introduced by a NativeWind 5 class combo on the login screen (OJD-1644, #1698).
Selected experiment now visible in dark mode (#1678); experiment picker refreshes on focus + pull-to-refresh(OJD-1631, #1657).
Fixed relative CTA links in the CMS alert banners (#1673) and excluded
.cache/tsbuildinfofrom the EAS upload so builds pick up fresh compiled output (#1689).
🧪 Workbooks
Searchable picker, in-place rename, and editor polish (part of OJD-588, #1677).
Workbook version number now shown on the detail page (OJD-1632, #1672).
Experiment design pinned to a snapshot with inline editing, plus assorted workbook fixes (#1664).
🖥️ Web & accounts
Account deletion UX + account-page revamp (#1619).
Keyboard shortcuts hardened and migrated to TanStack Hotkeys (OJD-1642, #1686).
Breadcrumb is now a pure ancestor trail (#1682).
🛡️ Resilience & data
Graceful handling of Contentful outages across web and mobile, so a CMS hiccup no longer breaks pages (OJD-1637, #1666).
Contributor metadata lookup now tolerates non-UUID
user_ids instead of erroring (#1691).Improved CMS image and video captions (#1694).
Project-transfer job bumped to Databricks serverless environment v4 to fix the Spark 4 import regression (#1667).
🔒 Security, deps & release tooling
Patched multer (2.2.0) and nodemailer (9.0.1) CVEs (#1679); broader security-vuln patch sweep + removed the unused node-red app (#1660).
Macro-sandbox base-image CVE suppressions: openssl batch (amzn2023.0.5, #1684) and the openssl-fips ASN.1 CVE-2026-34180 (#1683).
CI/CD: every
tofu applynow sits behind a required plan-approval gate (#1649).
⏸️ Held back for the next cut
Web/backend work still on main, intentionally excluded from this release branch while in testing:
Experiment dashboards (#1527) and the visualization polish that rides with them — chart polish sweep (#1690), color-picker debounce + contributor pseudonymization in the filter picker (#1693).
General data-upload overhaul — upload-modal UI/UX (#1670) and generalized-upload volume read paths (#1675) — consistent with the June 15 hold.