diff --git a/tests/test_site_validation.py b/tests/test_site_validation.py index 5d5b6f7e..a0f928ee 100644 --- a/tests/test_site_validation.py +++ b/tests/test_site_validation.py @@ -53,6 +53,26 @@ class ProsePlaceholders(unittest.TestCase): self.assertEqual(_escape_tags("size < 4096"), "size < 4096") +class WikiSourceHeadings(unittest.TestCase): + def test_no_prose_line_starts_with_a_hash(self): + """Python-Markdown reads `#79).` at the start of a line as a heading: + it asks for no space after the hash. A wrapped issue reference gave + the release page a second H1 and failed the site build.""" + offenders = [] + for page in sorted((ROOT / "wiki").glob("*.md")): + fenced = False + for number, line in enumerate( + page.read_text(encoding="utf-8").splitlines(), start=1 + ): + if line.lstrip().startswith("```"): + fenced = not fenced + elif not fenced and line.startswith("#") and not line.startswith( + ("# ", "## ", "### ", "#### ", "##### ", "###### ") + ): + offenders.append(f"{page.name}:{number}") + self.assertEqual(offenders, []) + + class RenderedSiteValidation(unittest.TestCase): def setUp(self) -> None: self.temp = tempfile.TemporaryDirectory(dir=TMP_ROOT) diff --git a/wiki/release-process.md b/wiki/release-process.md index ced503bb..8b6a159e 100644 --- a/wiki/release-process.md +++ b/wiki/release-process.md @@ -272,8 +272,8 @@ is needed, each is an ordinary ZIP, and they extract into the same folder. Until v2026.09.04 the parts were byte ranges cut by `split`, named `.zip.001`, and the sentence explaining them sat under the table. A range opened alone is not an archive and no tool says a part is missing, so five -reports in six months took one for a broken download (#45, #51, #66, #77, -#79). The README, the download page and the troubleshooting page describe +reports in six months took one for a broken download (issues 45, 51, 66, 77 +and 79). The README, the download page and the troubleshooting page describe both layouts for as long as a release cut that way is still published; once step 7 has deleted it, the `.zip.001` paragraph leaves those three pages.