From c9e66b22959f5aedabdb9351ba7fc0803cf9e558 Mon Sep 17 00:00:00 2001 From: rcourtman Date: Fri, 7 Aug 2026 01:13:56 +0100 Subject: [PATCH] release: pin code-signing policy link to the release tag The docs link drift guard (test_repo_docs_link_drift.py) fails CI because render_release_body.py links docs/CODE_SIGNING_POLICY.md at blob/main. Release bodies must reference the docs snapshot of the release they describe, so the installation section now links blob/v{version}, matching how the rest of the body pins to the version being cut. The unit test pin follows. Also skip .claude/ in the drift guard so local runs on a shared tree are not polluted by stale agent worktrees under .claude/worktrees that CI never checks out. --- scripts/release_control/render_release_body.py | 2 +- scripts/release_control/render_release_body_test.py | 2 +- scripts/tests/test_repo_docs_link_drift.py | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/scripts/release_control/render_release_body.py b/scripts/release_control/render_release_body.py index d3edac6bc..86aaf8046 100644 --- a/scripts/release_control/render_release_body.py +++ b/scripts/release_control/render_release_body.py @@ -197,7 +197,7 @@ def build_installation_section(version: str) -> str: "", "See the [Installation Guide](https://github.com/rcourtman/Pulse#installation) for complete setup instructions.", "", - "Review the [Code signing policy](https://github.com/rcourtman/Pulse/blob/main/docs/CODE_SIGNING_POLICY.md) for release provenance, approval roles, and signing scope.", + f"Review the [Code signing policy](https://github.com/rcourtman/Pulse/blob/v{version}/docs/CODE_SIGNING_POLICY.md) for release provenance, approval roles, and signing scope.", "", "Paid Pulse Pro, Relay, and eligible legacy customers: public GitHub release assets and the public `rcourtman/pulse` Docker image are community builds. They do not include the private Pulse Pro runtime hooks. Use https://pulserelay.pro/download.html with your activation key to get the private Pulse Pro Docker image or Linux/LXC archive.", ] diff --git a/scripts/release_control/render_release_body_test.py b/scripts/release_control/render_release_body_test.py index a3b9a7cb2..a7bc5649d 100644 --- a/scripts/release_control/render_release_body_test.py +++ b/scripts/release_control/render_release_body_test.py @@ -111,7 +111,7 @@ Old metadata section. self.assertEqual(body.count("## Promotion Metadata"), 1) self.assertIn("docker pull rcourtman/pulse:6.0.0-rc.2", body) self.assertIn( - "[Code signing policy](https://github.com/rcourtman/Pulse/blob/main/docs/CODE_SIGNING_POLICY.md)", + "[Code signing policy](https://github.com/rcourtman/Pulse/blob/v6.0.0-rc.2/docs/CODE_SIGNING_POLICY.md)", body, ) self.assertIn( diff --git a/scripts/tests/test_repo_docs_link_drift.py b/scripts/tests/test_repo_docs_link_drift.py index 1f9072340..f17c97e2f 100644 --- a/scripts/tests/test_repo_docs_link_drift.py +++ b/scripts/tests/test_repo_docs_link_drift.py @@ -17,6 +17,7 @@ FORBIDDEN_PATTERNS = ( ) SKIP_DIR_NAMES = { + ".claude", ".git", ".next", ".pytest_cache",