Release notes
Newest first. The beta channel is listed before released versions; beta changes appear there until they are promoted to a numbered rules release.
To be told when a new release ships, subscribe to the release feed — the tag is the release event.
Beta channel (staging)
Unreleased rule changes live in profiles/mwp-rules-beta.json and are published
on the Beta rules page. They are not part of a
numbered release yet and need no version bump, tag or changelog entry.
What's New in v2.6.1
- Dark mode fix in the rule generator — the "Allowed user agents" suggestion
chips (PerplexityBot, GPTBot, ClaudeBot, CCBot, Stripe/, PayPal IPN, and the
rest) rendered black text on a near-black background, because a
<button>never inherited the page colour. They now follow the palette: 1.21:1 → 12.9:1. - Colour theme switch — the generator header now carries Auto / Light /
Dark. Auto follows the operating system (and keeps following it if you change
the setting with the page open); Light and Dark pin the palette. The choice is
stored in
localStorageand applied before the first paint, so there is no flash of the wrong theme. - Native controls follow the theme — the page declares
color-scheme, so checkboxes, the action<select>, the file input, scrollbars and progress bars stop rendering in light colours on the dark palette. - Keyboard and screen-reader fixes — Load preset… is now reachable with
the keyboard (it was a label around a
hiddeninput), the preset buttons keep focus when you click one, the notice is announced as a status message, and the results list no longer re-announces unchanged messages on every keystroke. - Offline tests —
tests/generator/theme.test.mjscovers Auto/Light/Dark resolution and the boot-script/module contract;tests/test-generator.shnow also rejects inline styles and asserts the switch, the theme attribute and thecolor-schemedeclaration.
What's New in v2.6.0
- Apply-profile reporting fix —
create-rules,update-rulesandupgrade-default-rulesno longer reportThis zone already has rule(s)with a blank count. The count is read from the entry point response itself, and a ruleset that was just created no longer triggers a replace prompt. - Rules as tables, not JSON — before the replace prompt the command prints the zone's existing rules as a counted table, and after applying it prints the resulting rules the same way. The raw API body and the bare ruleset ID are no longer printed.
- Dated output — the default table gains a per-rule
UPDATEDcolumn (UTCYYYY-MM-DD HH:MM:SS) and the summary line shows the ruleset'slast_updatedin the same form;--longprints alast_updated:line per rule. - Settings success lines —
set-settingsreports the change it made, such asChallenge TTL set to 604800 (7d 0h 0m 0s), instead of echoing the PATCH body. - Offline tests —
tests/test-apply-profile.shcovers the new-zone, accept, decline,--yesand empty-ruleset paths without credentials;tests/test-list-rules-output.shasserts theUPDATEDcolumn.
What's New in v2.5.1
- Release notifications — a new Release notifications
page explains how to be told about a new release: subscribe to the tag-derived
releases.atomfeed, read onlyX.Y.Ztags, and ignore rules-release tags such asv208. - Why not the obvious signals — the page records why
VERSIONonmainand GitHub's "Latest release"/"Watch → Releases" are not the notification path: a rules release rewritesVERSIONwithout a tag, and/releases/latestlagged six tags behind on 2026-10-29. - Release workflow —
AGENTS.mdnow states that a release is announced by its tag and that the feed is the public notification channel. - Offline tests —
tests/test-docs-site.shasserts the page, its sidebar entry, the feed URL and the semver filter.