From 4d376e9727118696d8a2108bd7cdbdc38198cdd7 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Tue, 10 Nov 2026 13:34:05 +0100 Subject: [PATCH] docs: write the release notes without pronouns The release page is public text like the site. render() said "finds your setup", "file for your system" and "your BIOS folder". The pronoun test now renders the notes from release.json, once more with a pack in parts, and fails on any pronoun the script writes. --- scripts/release_notes.py | 6 +++--- tests/test_site_pronouns.py | 17 +++++++++++++++++ 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/scripts/release_notes.py b/scripts/release_notes.py index dff6f6f49..7308826a4 100644 --- a/scripts/release_notes.py +++ b/scripts/release_notes.py @@ -126,7 +126,7 @@ def render(record: dict, platforms_dir: str, whats_new: str) -> str: lines = [ "### Install in one command", "", - "It finds your setup and its BIOS folder, then downloads only what is missing.", + "It finds the setup and its BIOS folder, then downloads only what is missing.", "", "**Linux, macOS, Steam Deck**", "```sh", @@ -138,12 +138,12 @@ def render(record: dict, platforms_dir: str, whats_new: str) -> str: install_command("powershell"), "```", "", - (f"**On a handheld**: copy the `RetroBIOS` file for your system to the card" + (f"**On a handheld**: copy the `RetroBIOS` file for the system to the card" f" ([which one]({SITE}wiki/installer/#on-a-handheld-the-retrobios-port))."), "", "### Or download a pack", "", - "Extract it into your BIOS folder.", + "Extract it into the BIOS folder.", "", ] if any(len(pack["assets"]) > 1 for pack in packs.values()): diff --git a/tests/test_site_pronouns.py b/tests/test_site_pronouns.py index 7acc265a4..1914d30f8 100644 --- a/tests/test_site_pronouns.py +++ b/tests/test_site_pronouns.py @@ -186,6 +186,23 @@ class SitePronouns(unittest.TestCase): hits = _hits(files) self.assertEqual(hits, [], "\n".join(hits)) + def test_release_notes(self): + """The release page is public text too. Rendered from the committed + record, and once more with a pack in parts, its own paragraph.""" + sys.path.insert(0, str(ROOT / "scripts")) + import release_notes + import release_record + + record = release_record.load_record(ROOT / "release.json") + first = next(iter(record["packs"])) + parted = {**record, "packs": {**record["packs"], first: { + **record["packs"][first], "assets": ["a.part1of2.zip", "a.part2of2.zip"]}}} + platforms = str(ROOT / "platforms") + hits = [f"release notes:{number}: {line}" + for sample in (record, parted) + for number, line in pronouns(release_notes.render(sample, platforms, "x"))] + self.assertEqual(hits, [], "\n".join(hits)) + def test_every_allowed_quote_says_why(self): for quoted, reason in {**NAMES, **INSTALLER, **SOURCE}.items(): with self.subTest(quoted=quoted):