chore: cut v4.1.0 — version stamp, CHANGELOG cut, and ship the LED strip in every build - #149
Merged
Merged
Conversation
…lease notes FIRMWARE_VERSION 4.0.0 -> 4.1.0 (matches the v4.1.0 tag to come). MINOR is right: new settings and device behaviour, nothing removed and no format break — track files, the DOVEX layout, log filenames and the BLE command protocol are byte-for-byte what 4.0.0 wrote. CHANGELOG: [Unreleased] had accreted the same shape as last cut — two separate "### Changed" headings and a trailing "### Added" after "### Fixed" from successive merges. Consolidated into one Added/Changed/Fixed set under [4.1.0] - 2026-08-22. All 20 entries and every body line moved VERBATIM (verified by diffing the sorted line multiset before and after); only the five entries below gained a channel marker. The marker is the substantive change here. Most of this release's headline work — the whole NeoPixel subsystem — is behind BIRDSEYE_ENABLE_NEOPIXEL, which is off in the published images, so a reader of these notes would otherwise go looking for LEDs that a release build never lights. Each affected entry is now marked *(beta channel)*, and the section intro says plainly which half of the release is live for every user. Two plan-0007 behaviours are NOT gated and were being described as if they were: the tach page's corrected *OVER REV* header (display_pages.ino reads settingOverrevLimit outside any #if) and the pace page's STOPPED state (raceEngineStopped(), same) both ship active — those entries now say *(every build)* on that half and *(beta channel)* on the LED half. Link refs: [Unreleased] was still comparing from v3.1.0, stale since the 4.0.0 cut, and [4.0.0] never got a ref at all. Both fixed, [4.1.0] added. DovesLapTimer pins are deliberately untouched. compile-sketch.yml warns that promoting the channel means bumping them, but the library's BETA branch is source-identical to the v4.3.0 tag master already pins (the only difference between the two refs is five CI workflow files), so there is nothing to bump. Verified: 507 host test cases / 325,581 assertions pass. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01U6kd8xwnUbXyd2Ce6m8ydX
Coverage — host-testable units📂 Overall coverage
📄 File coverage
|
This was referenced Aug 22, 2026
…EL defaults to 1 The LED strip stops being a beta-only build and becomes a core feature in 4.1.0: a stock logger drives a strip the moment someone wires one, with no special firmware. The flag's #ifndef default in project.h goes 0 -> 1, which is the whole mechanism — every workflow already installs the Adafruit NeoPixel library, release.yml passes no feature flags at all, and compile-sketch.yml's non-BETA arm passes an empty FEATURE_FLAGS, so all three channels pick the new default up on their own. beta.yml's explicit -DBIRDSEYE_ENABLE_NEOPIXEL=1 is now redundant but harmless, and left alone. WHAT THIS COSTS, stated plainly because no later firmware can undo it: the subsystem's first boot programs UICR->NFCPINS to convert the two NFC pads to GPIO and self-resets once so the latch takes effect. That is a ONE-WAY change — reversing it needs a full chip erase and a bootloader reflash over USB — and with the flag on by default it is charged to EVERY device that installs 4.1.0, wired for LEDs or not, since the firmware cannot tell the difference. The trade was made deliberately: this hardware never uses NFC, the pads are otherwise idle, and gating a headline feature behind a separate build had kept it out of everyone's hands. Users who want the pads for something else must not install 4.1.0, so the CHANGELOG leads its 4.1.0 section with an upgrade note saying exactly that, including the extra reboot to expect. No other translation unit changes: grep confirms `#if BIRDSEYE_ENABLE_NEOPIXEL` appears nowhere outside neopixel.ino, so nothing else compiles differently and the simulator (which excludes that file) is untouched — 6/6 sim ctest still green with the flag flipped, goldens and both lap oracles included. Docs follow the decision rather than trailing it: the CHANGELOG's channel note is replaced by the upgrade warning and the per-entry "(beta channel)" markers come off the LED entries (they are not beta any more); CLAUDE.md subsystem 16, its flags list, constants table, File Map intro and workflows row; the ARCHITECTURE LED bullet; CONTRIBUTING's flag table (now noting this is the one flag defaulting to 1); and compile-sketch.yml's channel comment, where the difference between the two arms is now just SensorEgg and the library ref. Two in-code comments still calling the strip beta-only are corrected too. Verified: 507 host test cases / 325,581 assertions and 6/6 sim ctest. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01U6kd8xwnUbXyd2Ce6m8ydX
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Release-prep for 4.1.0, plus the decision that defines what 4.1.0 is: the NeoPixel strip stops being a beta-only build and ships in the normal firmware. Merge this into
BETAfirst; #151 stacks on it and theBETA -> masterpromotion (#150) then carries both.1. Ship the LED strip in every build
BIRDSEYE_ENABLE_NEOPIXEL's#ifndefdefault inproject.hgoes 0 → 1. That single line is the whole mechanism: every workflow already installs the Adafruit NeoPixel library,release.ymlpasses no feature flags at all, andcompile-sketch.yml's non-BETA arm passes an emptyFEATURE_FLAGS— so all three channels pick the new default up on their own.beta.yml's explicit=1is now redundant but harmless and left alone.What it costs, stated plainly because no later firmware can undo it. The subsystem's first boot programs
UICR->NFCPINSto convert the two NFC pads to GPIO and self-resets once so the latch takes effect. That is one-way — reversing it needs a full chip erase and a bootloader reflash over USB — and with the flag on by default it is charged to every device that installs 4.1.0, wired for LEDs or not, because the firmware cannot tell the difference. The trade is deliberate: this hardware never uses NFC, the pads are otherwise idle, and gating a headline feature behind a separate build had kept it out of everyone's hands. Anyone who wants those pads for something else must not install 4.1.0, so the CHANGELOG now leads its 4.1.0 section with an upgrade note saying exactly that, including the one extra reboot to expect.Verified that no other translation unit changes:
#if BIRDSEYE_ENABLE_NEOPIXELappears nowhere outsideneopixel.ino, so nothing else compiles differently and the simulator (which excludes that file) is untouched — 6/6 sim ctest still green with the flag flipped, goldens and both lap oracles included.2. The release cut
FIRMWARE_VERSION4.0.0 → 4.1.0. MINOR is right by this repo's policy: new settings and behaviour, nothing removed, no format break — track files, the DOVEX layout, log filenames and the BLE command protocol are byte-for-byte what 4.0.0 wrote.[Unreleased]had accreted the same shape it did last release — two separate### Changedheadings and a trailing### Addedsitting after### Fixed. Consolidated into one Added/Changed/Fixed set under[4.1.0] - 2026-08-22. All 20 entries and every body line moved verbatim, verified by diffing the sorted line multiset before and after, not by eye.[Unreleased]'s link ref was still comparing fromv3.1.0(stale since the 4.0.0 cut) and[4.0.0]never got a ref at all. Both fixed,[4.1.0]added.3. Docs follow the decision rather than trailing it
The per-entry (beta channel) markers come off the LED entries — they aren't beta any more. Updated:
CLAUDE.mdsubsystem 16, its flags list, constants table, File Map intro and workflows row; theARCHITECTURE.mdLED bullet;CONTRIBUTING.md's flag table (now noting this is the one flag defaulting to 1); andcompile-sketch.yml's channel comment, where the difference between the two arms is now just SensorEgg and the DovesLapTimer ref. Two in-code comments still calling the strip beta-only are corrected.DovesLapTimer pin: no bump needed
compile-sketch.ymlwarns that promoting the channel means bumping the library pin deliberately. Checked rather than assumed:git diff v4.3.0 origin/BETAinTheAngryRaven/DovesLapTimertouches nothing undersrc/— five CI workflow files and that is all. Nothing to bump in any of the three workflows.Type of change
Not a breaking change by the CHANGELOG's definition — no track file, log format, BLE protocol or removed mode — but the UICR conversion is irreversible per device, which is why it gets an upgrade note rather than a bullet.
How it was verified
#if BIRDSEYE_ENABLE_NEOPIXELgrep)clang-tidyclean — CIChangelog restructure verified mechanically: sorted body-line multiset identical before/after, 20 entries before and after.
project.hkeeps its CRLF endings (the first attempt normalized them and was redone byte-precise).Checklist
CHANGELOG.mdupdated — this PR is the cut;[Unreleased]is left empty for the drag-mode work in plan 0011: Drag mode — distance runs without a track #148ARCHITECTURE.md/CLAUDE.mdupdatedtests/— no new logic here (tests come with fix: release-review findings for 4.1.0 — BLE settings list, LED rail, strict setting parse #151)Related issues
Prep for the
BETA -> masterpromotion (#150). #151 stacks on this with the review fixes. Deliberately excludes #148 (drag mode), slated for the next beta.Release steps after merge
BETA; then Release 4.1.0 — LED strip subsystem, BLE download rework, RPM filter, menu escapes #150 intomaster.compile-sketchon themasterpush to go green — the only run that compiles the real release configuration, since this PR's own compile job builds with BETA's flags and library ref.v4.1.0.