All releases
Improvement
Web
Mobile
June 24, 2026

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-classic dependency (#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/ tsbuildinfo from 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 apply now 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.