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.
This commit is contained in:
rcourtman
2026-08-07 01:13:56 +01:00
parent 99407ee74c
commit c9e66b2295
3 changed files with 3 additions and 2 deletions
@@ -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.",
]
@@ -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(
@@ -17,6 +17,7 @@ FORBIDDEN_PATTERNS = (
)
SKIP_DIR_NAMES = {
".claude",
".git",
".next",
".pytest_cache",