Owner decision, 2026-09-25, after the Easee night (#1417): drivers reach users with the Core release. One version, and ftw update / ftw rollback cover the drivers. A driver fix is a pin bump in drivers/BUNDLED_SOURCE.json, shipped in the next beta. The signed channel serves installs that cannot take a new Core (1.x–3.x) and expert overrides. An override ends when a release catches up.
Why: on the home box a managed easee_cloud 1.3.2 kept running over the bundled 1.3.3 in v0.136.4-beta.1. Precedence goes by file existence, not by version, and nothing told the owner. drivers-stable (f18ceef, 2026-09-08) is older than the bundled pin (489c937).
Done in #1422:
- a managed install retires at the first start of a new release when that release's bundled copy is at least as new;
ftw status lists driver versions and overrides;
- the docs describe the model.
Remaining
drivers-stable follows stable Core. Promotion is a manual dispatch today. It covers the whole catalog, needs drivers-beta to name the exact commit, and has no cadence. Proposed: when native-release.yml publishes vX stable, promote drivers-stable to the commit in that release's BUNDLED_SOURCE.json. That needs a device-drivers workflow change, because the pinned commit is usually not the current beta head.
- Pin bumps as PRs.
bundled-driver-pin.yml only opens an issue when the pin falls behind. Let it open a PR that moves the pin, runs scripts/sync-bundled-drivers.sh and adds a changeset.
- Native UI. Remove the driver update, install and version controls from Settings → Devices on native installs. The API stays for experts and agents.
- Bugs found on the way:
web/update-badge.js computes beta_available with !==, so it offers an older beta as an update.
ChannelCatalog and InstallChannel ignore device_repository.enabled: false, and every open tab fetches the beta manifest every 3 h.
- A managed public artifact that is missing from the signed manifest's
drivers and history fails to start (driverrepo/sourceful.go). The channel history must never drop a version that is installed somewhere.
use_bundled returns "no bundled file declares driver easee_cloud" on the home box. The bundled source declares id = "easee-cloud", and about 25 bundled drivers spell their id differently from the channel.
- The note in
BUNDLED_SOURCE.json says channel artifacts are write-inert; drivers marked control: true keep their control path.
- Version and id lineage (device-drivers). Five bundled drivers carry a
DRIVER.version different from their channel version, for example sdm630 at 1.1.1 against 2.0.1. The split is deliberate (tools/ftw_repository.py, "two lineages"). Now that drivers follow the release, decide whether the channel should take its version and id from the source. Until then a managed install of those five is never retired, which is the safe direction.
Owner decision, 2026-09-25, after the Easee night (#1417): drivers reach users with the Core release. One version, and
ftw update/ftw rollbackcover the drivers. A driver fix is a pin bump indrivers/BUNDLED_SOURCE.json, shipped in the next beta. The signed channel serves installs that cannot take a new Core (1.x–3.x) and expert overrides. An override ends when a release catches up.Why: on the home box a managed easee_cloud 1.3.2 kept running over the bundled 1.3.3 in v0.136.4-beta.1. Precedence goes by file existence, not by version, and nothing told the owner.
drivers-stable(f18ceef, 2026-09-08) is older than the bundled pin (489c937).Done in #1422:
ftw statuslists driver versions and overrides;Remaining
drivers-stablefollows stable Core. Promotion is a manual dispatch today. It covers the whole catalog, needs drivers-beta to name the exact commit, and has no cadence. Proposed: whennative-release.ymlpublishesvXstable, promotedrivers-stableto the commit in that release'sBUNDLED_SOURCE.json. That needs a device-drivers workflow change, because the pinned commit is usually not the current beta head.bundled-driver-pin.ymlonly opens an issue when the pin falls behind. Let it open a PR that moves the pin, runsscripts/sync-bundled-drivers.shand adds a changeset.web/update-badge.jscomputesbeta_availablewith!==, so it offers an older beta as an update.ChannelCatalogandInstallChannelignoredevice_repository.enabled: false, and every open tab fetches the beta manifest every 3 h.driversandhistoryfails to start (driverrepo/sourceful.go). The channel history must never drop a version that is installed somewhere.use_bundledreturns "no bundled file declares driver easee_cloud" on the home box. The bundled source declaresid = "easee-cloud", and about 25 bundled drivers spell their id differently from the channel.BUNDLED_SOURCE.jsonsays channel artifacts are write-inert; drivers markedcontrol: truekeep their control path.DRIVER.versiondifferent from their channel version, for example sdm630 at 1.1.1 against 2.0.1. The split is deliberate (tools/ftw_repository.py, "two lineages"). Now that drivers follow the release, decide whether the channel should take its version and id from the source. Until then a managed install of those five is never retired, which is the safe direction.