From 5438e2f5af8a8967299c3aa2d5cbcfa1844974f0 Mon Sep 17 00:00:00 2001 From: Vitor Mattos <1079143+vitormattos@users.noreply.github.com> Date: Mon, 9 Nov 2026 19:56:18 +0000 Subject: [PATCH] fix(docs): prevent development-only includes from overriding stable manuals Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com> --- tests/test_shared_sources.py | 5 +++++ versioning/build.py | 6 +++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/tests/test_shared_sources.py b/tests/test_shared_sources.py index 0deeec12..1b0d5506 100644 --- a/tests/test_shared_sources.py +++ b/tests/test_shared_sources.py @@ -14,6 +14,9 @@ def fixture(self, root: Path) -> None: (root / "developer_manual/integration").mkdir(parents=True) (root / "developer_manual/integration/index.rst").write_text("Architecture") (root / "developer_manual/integration/new-guide.rst").write_text("New guide") + (root / "developer_manual/integration/_native-webhooks.inc").write_text( + "Development completion event" + ) (root / "developer_manual/api").mkdir() (root / "developer_manual/api/openapi.rst").write_text("OpenAPI") (root / "developer_manual/html").mkdir() @@ -44,6 +47,8 @@ def test_new_rst_is_shared_without_editing_python(self): (stable / "integration/_native-webhooks.inc").read_text(), "Only polling") self.assertEqual( (upcoming / "integration/_native-webhooks.inc").read_text(), "Native event") + self.assertEqual((dev / "integration/_native-webhooks.inc").read_text(), + "Development completion event") self.assertFalse((stable / "integration/source-only.rst").exists()) def test_unlisted_development_section_is_not_leaked(self): diff --git a/versioning/build.py b/versioning/build.py index 27683bce..b51ee70c 100644 --- a/versioning/build.py +++ b/versioning/build.py @@ -49,11 +49,11 @@ def source_tree(stage: Path, slug: str, manual: str) -> Path: if slug == "main": shutil.copytree(ROOT / manual, target) else: - shutil.copytree(ROOT / "versioned/base" / manual, target) - # Contributors declare version-safe sections in versioned/shared.json. - # Copy them before release overlays; no Python change for new RST pages. + target.mkdir(parents=True, exist_ok=True) + # Stable base documentation takes precedence over shared sections. for relative, source in shared_sources(manual): shutil.copytree(source, target / relative, dirs_exist_ok=True) + shutil.copytree(ROOT / "versioned/base" / manual, target, dirs_exist_ok=True) overlay = ROOT / "versioned" / slug / manual if overlay.exists(): shutil.copytree(overlay, target, dirs_exist_ok=True)