Skip to content

CHANGELOG cleanup: fold post-release-cut merges into 4.1.0, dedupe section headings - #157

Merged
TheAngryRaven merged 1 commit into
BETAfrom
claude/pr-150-cleanup-zm2j26
Aug 24, 2026
Merged

TheAngryRaven merged 1 commit into
BETAfrom
claude/pr-150-cleanup-zm2j26

Conversation

@TheAngryRaven

Copy link
Copy Markdown
Owner

Summary

Docs-only restructure of CHANGELOG.md — no entry is dropped; text moves verbatim except for the deliberate edits listed below. The mass-merge frenzy after the 4.1.0 release cut left the file discombobulated in two ways, and this fixes both:

1. The post-#151 merges belong in the 4.1.0 section, not [Unreleased]. #152–#156 (loop CPU profiling, the multi-cylinder RPM fix, assignable LED status modes, the download-throughput regression fix) each appended entries under [Unreleased] — which had accumulated three separate ### Fixed headings — but FIRMWARE_VERSION on this branch is already 4.1.0 and everything here ships when #150 merges. Those entries are now folded into [4.1.0] (one heading per category), the date is bumped to 2026-08-24, and the release intro is corrected to match the merged reality:

  • The "DOVEX log format byte-for-byte unchanged" claim is replaced with the real caveat: stock logs drop the three always-nan temperature columns (13 vs 16 data columns; readers key off the CSV header).
  • A headline caveat is added for the cylinder_count RPM fix (readings change for anyone who had it set above 1).
  • "SensorEgg gained nothing this release" is gone — it gained the scanner race-gating fix — and the new beta-only profiler flag is noted alongside it.

2. Released sections carried the same duplication. [3.0.1] had three ### Added, three ### Changed, and two ### Fixed headings; [2.2.0] had two ### Changed. Duplicates are merged (entries moved verbatim, one heading per category), and the missing blank line before [4.0.0]'s ### Fixed is added. An empty [Unreleased] heading stays at the top per Keep a Changelog.

Deliberate text edits (the release cut's entries named the setting by its mid-cycle beta key, which 4.1.0 never ships): rev_limit references in the NeoPixel and overrev entries now read target_rpm; the temp1_alert_c entry is marked SensorEgg-only and points at the egt status mode (both post-#154/#155 reality); and the rename entry notes the old key only ever existed on the beta channel.

Merge this before #150 so the release promotes the cleaned changelog. Not renamed here (flagging instead): three plan records share the number 0012 (0012-download-throughput-regression-deepdive, 0012-led-status-modes, 0012-tach-rpm-single-pickup), and open PR #148 also calls itself plan 0011 — same number as profiling. Renumbering would break the "plan NNNN" citations already in commit messages and these changelog entries, so that's left as a maintainer call.

Type of change

  • Bug fix (no user-visible behavior change beyond the fix)
  • New feature / behavior
  • Refactor (no behavior change)
  • Tests only
  • CI / tooling / docs
  • Breaking change (track files, log format, BLE protocol, or a removed mode)

How it was verified

  • Restructure was done by line range with a checked script: every non-blank content line of the original file is asserted to survive verbatim (the intro paragraphs and the listed rev_limit/temp1_alert_c edits are the only allowed exceptions), and each .replace() asserts its target text exists.
  • Heading audit after the rewrite: every version section now has each of Added/Changed/Fixed/Removed/Security at most once; no consecutive blank lines; link refs intact.
  • Host unit tests / clang-tidy / compile — docs-only change, no source touched (CI will confirm).

Checklist

  • CHANGELOG.md updated — this PR is the changelog change
  • ARCHITECTURE.md / CLAUDE.md updated — n/a, no module or interface changed
  • New testable logic has a matching test in tests/ — n/a, no code
  • Branch is focused — one concern: changelog structure

Related issues

Companion to release PR #150 (its description is updated to match). Merge order: this → #150.

🤖 Generated with Claude Code

https://claude.ai/code/session_01MqSstYTWPhm3TZ3PxXs4hk


Generated by Claude Code

…e headings

The parallel merges after the 4.1.0 release cut (#152-#156: loop CPU
profiling, the multi-cylinder RPM fix, assignable LED status modes, and
the download-throughput regression fix) each appended their entries under
a fresh [Unreleased] heading, leaving that block with three separate
'Fixed' sections while FIRMWARE_VERSION on this branch is already 4.1.0 -
everything here ships in the release PR #150 promotes. Fold those entries
into the [4.1.0] section, one heading per category, and refresh the
release intro: the date, the DOVEX byte-for-byte claim (stock logs now
drop the three temperature columns), the cylinder_count RPM caveat, and
the beta-only note (SensorEgg gained the scanner race-gating fix, and the
profiler is a second beta-only flag).

Entry text is moved verbatim except where the release-cut entries named
the setting by its mid-cycle key: 'rev_limit' references now read
'target_rpm' (the key 4.1.0 actually ships), the temp1_alert_c entry is
marked SensorEgg-only, and the rename entry notes the old key only ever
existed on the beta channel.

Also merges the same mass-merge duplication in released sections - 3.0.1
carried three 'Added', three 'Changed' and two 'Fixed' headings, 2.2.0
two 'Changed' - moving entries verbatim, and adds the missing blank line
before 4.0.0's 'Fixed'. An empty [Unreleased] heading stays at the top.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MqSstYTWPhm3TZ3PxXs4hk
@github-actions

Copy link
Copy Markdown

Coverage — host-testable units

📂 Overall coverage

Metric Coverage
Lines 🟢 1854/1881 (98.6%)
Functions 🟢 197/197 (100.0%)
Branches 🟢 1372/1516 (90.5%)

📄 File coverage

File Lines Functions Branches
BirdsEye/ble_stream.cpp 🟢 34/34 (100.0%) 🟢 8/8 (100.0%) 🟡 17/20 (85.0%)
BirdsEye/camera_fsm.cpp 🟢 238/246 (96.7%) 🟢 20/20 (100.0%) 🟡 142/160 (88.8%)
BirdsEye/course_creator.cpp 🟢 213/221 (96.4%) 🟢 21/21 (100.0%) 🟡 119/136 (87.5%)
BirdsEye/course_prune.cpp 🟢 37/37 (100.0%) 🟢 5/5 (100.0%) 🟢 47/50 (94.0%)
BirdsEye/crc32.cpp 🟢 30/30 (100.0%) 🟢 4/4 (100.0%) 🟢 24/24 (100.0%)
BirdsEye/crossing_pattern.cpp 🟢 15/15 (100.0%) 🟢 1/1 (100.0%) 🟢 12/12 (100.0%)
BirdsEye/dovex_header.cpp 🟢 106/107 (99.1%) 🟢 7/7 (100.0%) 🔴 62/88 (70.5%)
BirdsEye/filename_validator.cpp 🟢 14/14 (100.0%) 🟢 1/1 (100.0%) 🟢 30/30 (100.0%)
BirdsEye/gps_stats.cpp 🟢 25/25 (100.0%) 🟢 3/3 (100.0%) 🟢 8/8 (100.0%)
BirdsEye/gps_status_page.cpp 🟢 29/29 (100.0%) 🟢 4/4 (100.0%) 🟢 28/28 (100.0%)
BirdsEye/gps_time.cpp 🟢 45/45 (100.0%) 🟢 6/6 (100.0%) 🟢 30/32 (93.8%)
BirdsEye/gps_validation.cpp 🟢 24/24 (100.0%) 🟢 2/2 (100.0%) 🟢 66/66 (100.0%)
BirdsEye/haversine.cpp 🟢 8/8 (100.0%) 🟢 1/1 (100.0%) ⚫ 0/0 (0.0%)
BirdsEye/idle_policy.cpp 🟢 17/17 (100.0%) 🟢 2/2 (100.0%) 🟢 14/14 (100.0%)
BirdsEye/insta360_protocol.cpp 🟢 140/140 (100.0%) 🟢 16/16 (100.0%) 🟡 86/98 (87.8%)
BirdsEye/lap_format.cpp 🟢 18/18 (100.0%) 🟢 1/1 (100.0%) 🟢 9/9 (100.0%)
BirdsEye/led_animations.cpp 🟢 84/84 (100.0%) 🟢 7/7 (100.0%) 🟢 43/46 (93.5%)
BirdsEye/led_frame.cpp 🟢 21/21 (100.0%) 🟢 7/7 (100.0%) 🟢 6/6 (100.0%)
BirdsEye/led_modes.cpp 🟢 67/68 (98.5%) 🟢 6/6 (100.0%) 🟢 50/52 (96.2%)
BirdsEye/led_status.cpp 🟢 106/108 (98.1%) 🟢 11/11 (100.0%) 🟢 71/75 (94.7%)
BirdsEye/local_time.cpp 🟢 48/48 (100.0%) 🟢 6/6 (100.0%) 🟢 46/50 (92.0%)
BirdsEye/loop_profile.cpp 🟢 65/65 (100.0%) 🟢 7/7 (100.0%) 🟢 35/36 (97.2%)
BirdsEye/sat_bars.cpp 🟢 33/33 (100.0%) 🟢 2/2 (100.0%) 🟢 51/54 (94.4%)
BirdsEye/sd_access_policy.cpp 🟢 9/9 (100.0%) 🟢 3/3 (100.0%) 🟢 18/18 (100.0%)
BirdsEye/sd_format_page.cpp 🟢 25/25 (100.0%) 🟢 3/3 (100.0%) 🟢 25/26 (96.2%)
BirdsEye/sector_purple.cpp 🟢 84/85 (98.8%) 🟢 3/3 (100.0%) 🟡 57/64 (89.1%)
BirdsEye/sensoregg_protocol.cpp 🟢 44/45 (97.8%) 🟢 7/7 (100.0%) 🟢 33/34 (97.1%)
BirdsEye/setting_parse.cpp 🟢 29/30 (96.7%) 🟢 2/2 (100.0%) 🟢 38/42 (90.5%)
BirdsEye/sprint_select.cpp 🟢 25/25 (100.0%) 🟢 4/4 (100.0%) 🟢 46/48 (95.8%)
BirdsEye/tach_filter.cpp 🟢 91/91 (100.0%) 🟢 13/13 (100.0%) 🟡 72/82 (87.8%)
BirdsEye/track_json.cpp 🟢 116/120 (96.7%) 🟢 12/12 (100.0%) 🟡 67/88 (76.1%)
BirdsEye/wake_cause.cpp 🟢 14/14 (100.0%) 🟢 2/2 (100.0%) 🟢 20/20 (100.0%)

@TheAngryRaven
TheAngryRaven merged commit 8237840 into BETA Aug 24, 2026
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants