0042. Host: the Rust applications and tools are the release from v4.0
Date: 2026-10-31
Context
By the end of October 2026 every host application had a Rust/Tauri port
held to the Qt original by shared test oracles: Tag Programmer
(0035), Tag Monitor
(0037), Tag Calibrator
(0039) and Tag View, and the command-line
tools that need only the tag interface had Rust ports in tag-tools. The
packages carried both lines side by side: eight applications, two
implementations of seven tools, and Qt with everything attached to it (aqt
in CI, macdeployqt and windeployqt, the QML import checks, the Qt
notices and a GPL section in the licence index for QCustomPlot and Qt Quick
3D). The ports had been used on the bench and the duplication had become
the larger cost.
The plan is host/design/proposals/rust-default-release.md.
Decision
- The packages carry the Rust line only, from
v4.0:tagprogram,tagmonitor,tagcalibrate,tagview, and the Rusttag-info,tag-start,tag-stop,tag-reset,tag-test,tag-cal,tag-dwnld,tag-flashandbase-flash, with the names, output and exit status of the tools they replace. - C++ with no Rust equivalent stays and ships:
dataprocessing,tag-txt-import, and thetagcore_clibrary the Rust programs link. The recovery tools stay in the default build inbin/internal. - One option,
BUILD_LEGACY_HOST(off), builds what was replaced: the Qt applications and their libraries, and the C++ tools with Rust equivalents, which go tobin/legacywhen the Rust tools are also built. It needs Qt; it is how the oracles are regenerated and the fallback if a Rust program fails in the field.BUILD_QT_APPS=ONis accepted as a deprecated alias.BUILD_RUST_APPSis on by default. - The release workflow installs no Qt. A manual run with the
legacyinput builds the legacy configuration so that it does not rot; such a run never publishes. btvizis deleted; its logs open in Tag View.- Tag View ships without the activity filter, which stayed in the Qt layer of sensorViz; porting it into the core is open work.
tag-log-importis Rust and internal: built intobin/internal, not installed.- The Qt applications' manual pages stay for this one release under a "Legacy" heading, and go in the next with their pictures. The Rust applications' pages describe each program in full.
Alternatives considered
- Keep shipping both lines for another release. Nothing the Qt line did was missing from the ports except the activity filter, and two of everything doubled the package, the CI time and the support questions.
- Remove the Qt code outright. The oracles that keep the ports honest (qtmonitor's 710 configuration probe goldens, qtcalibrate's replay log, sensorViz's state dump) are regenerated by the Qt programs, and a fallback release needs them buildable; an option costs little.
- Wait for the activity filter. It is used rarely, and the decision was to release without it rather than hold every other change.
Evidence
- Bench checks on a BitTag V6 and the IMUTagNandBmp581, 2026-10-31:
tag-start --configand--merge,tag-teston the IMUTag,tag-side-channel-check's write, unplug and start-running checks, and programming the U375 through Tag Programmer's engine with Retest, all passed (host/commandline-rs/README.md, Tag Programmer's README). They found one fault, a rare failed SWD enter on the first attach, fixed in both libraries (host/libraries/tagcore/design/investigations/2026-10-l4-attach-swd-enter.md). - The Rust
tag-log-importwrites databases byte-identical to the C++ tool's on a tagsim download. - On macOS a default configure without Qt builds and installs the four
bundles and the shipped tools; the installed
tag-infoattached to the BitTag; the legacy configuration builds qtmonitor and qtcalibrate. - The release workflow, run by hand on
2a43d8be, passed on Linux, macOS and Windows in both configurations, including the Linux package test and the macOS check that the applications embed their pages.
Consequences
- Qt is no longer needed to build or release the host tools. The vcpkg
dependencies (
libusb,protobuf,sqlite3) remain, fortagcore_c,dataprocessing,tag-txt-importand the recovery tools. - A station no longer needs STM32CubeProgrammer.
- The licence index has no GPL programs; Qt, QCustomPlot and the QFlightInstruments artwork are listed as legacy only, and the Rust tools have their own notices file.
- Changing a Qt application's behaviour, and regenerating an oracle from
it, needs a tree configured with
BUILD_LEGACY_HOST=ON. - The bench rules now name Tag Monitor as the program to detach before a power measurement.
- The packaged applications on Windows and Linux beyond "starts and stays up" are checked in the release's own bench checklist.