Repository navigation
release: 3.1.0 - #202
Merged
Merged
release: 3.1.0#202
Conversation
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
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.
Release 3.1.0. This PR sets
VERSIONto 3.1.0, regenerates the spec, turns## [Unreleased]into## [3.1.0] - 2026-10-11, and adds "Shipped in 3.1.0" to the roadmap. Nothing else changes.What is in 3.1.0
The full list is in the
[3.1.0]section ofCHANGELOG.md, andscripts/release-notes.shturns that section into the GitHub Release body.system/cron_jobs(feat: manage /etc/crontabs/root one line at a time through system/cron_jobs #193).dhcp/hosts.match_tag(feat: dhcp/hosts.match_tag, and refuse dnsmasq syntax in name and tag #199).dhcp/hostsreservation on a taken IP is refused (fix: refuse a dhcp/hosts reservation IP another host already holds #186).authorized_keysno longer loses keys (fix: an unreadable authorized_keys was read as empty, so the next write dropped every other key #194).authorized_keysor the crontab (fix: a full filesystem emptied authorized_keys or the crontab, and three smaller review findings #198).dhcp/hostsrefuses dnsmasq syntax innameandtag. A newline innamecould add any dnsmasq directive (feat: dhcp/hosts.match_tag, and refuse dnsmasq syntax in name and tag #199).Pre-release checklist
dhcp/hosts.match_tagwas eligible and is in (#199). Two stale roadmap entries were fixed (#200). No open issues, PRs or due deprecations.VERSIONmatches the taginfo.versionin the specmake openapi-check)scripts/changelog-missing.sh v3.0.0prints nothing,[Unreleased]renamedmake test coveragemainruns again after the merge, before the tag.github/release-signers.ascholds the signing keyE4B5C3548E3CFB30, present on the maintainer machinebuild/sdk.sha256pins all four arch SDKsOPENWRT_VERSIONis still 25.12.5verify-arch-builddispatchaarch64_generic,arm_cortex-a7andmips_24kcall builtDoes this change the wire surface?
The release itself does not: it only carries the version bump. The wire changes it ships are additive (
system/cron_jobs,dhcp/hosts.match_tag), plus one tightening:dhcp/hosts.nameandtagnow refuse a comma, a double quote, a#, a control character and a blank value. That uses the carve-out indocs/versioning.mdand has a Security entry, because each refused value broke dnsmasq or injected config. So this is a minor release.Was it verified against a real device, or only by CI?
Both. On the test VM (OpenWrt 25.12.5), with the full
maintree deployed:422, and dnsmasq kept running.openwrt-iac/uapi.500and kept the old crontab.match_tagmatches, and thenameandtaginjection was reproduced and then refused.The whole series was then reviewed as one diff, from v3.0.0 to
main. That review found the four problems fixed in #198, and the review of #199 found the problems fixed in its second commit.The live router was not touched.
Was LuCI checked?
Per change, in each PR. Not applicable to the release commit itself.
🤖 Generated with Claude Code