From 2336ddffeeeba306dac4a326026c3ff32c2e54f3 Mon Sep 17 00:00:00 2001 From: garrytan Date: Sat, 3 Oct 2026 00:58:36 +0000 Subject: [PATCH] document-release: CHANGELOG-preservation and VERSION-ask rules at normal volume (s10 M4, M5; UC2, eval-gated) --- document-release/sections/release-body.md.tmpl | 11 ++++------- test/ship-document-release-dispatch.test.ts | 6 ++++-- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/document-release/sections/release-body.md.tmpl b/document-release/sections/release-body.md.tmpl index a44484870..e2c85ae83 100644 --- a/document-release/sections/release-body.md.tmpl +++ b/document-release/sections/release-body.md.tmpl @@ -81,12 +81,9 @@ Apply approved changes immediately after each answer. ## Step 5: CHANGELOG Voice Polish -**CRITICAL — NEVER CLOBBER CHANGELOG ENTRIES.** - -This step polishes voice. It does NOT rewrite, replace, or regenerate CHANGELOG content. - -A real incident occurred where an agent replaced existing CHANGELOG entries when it should have -preserved them. This skill must NEVER do that. +This step polishes voice only. It does not rewrite, replace, or regenerate CHANGELOG +content: the entries are the release record, and a replaced entry loses facts nobody +notices until after the release. **Rules:** 1. Read the entire CHANGELOG.md first. Understand what is already there. @@ -157,7 +154,7 @@ If TODOS.md does not exist, skip this step. ## Step 8: VERSION Bump Question -**CRITICAL — NEVER BUMP VERSION WITHOUT ASKING.** +**Ask before changing VERSION** — the version number is the user's release decision. 1. **If VERSION does not exist:** Skip silently. diff --git a/test/ship-document-release-dispatch.test.ts b/test/ship-document-release-dispatch.test.ts index 02583cead..d54cca83f 100644 --- a/test/ship-document-release-dispatch.test.ts +++ b/test/ship-document-release-dispatch.test.ts @@ -161,8 +161,10 @@ describe('pre-publication documentation lifecycle', () => { 'Ship-owned documentation mode', 'standalone branch gate']) expect(skill).toContain(text); const body = read('document-release/sections/release-body.md.tmpl'); for (const text of ['never `git add -A`', 'Never regenerate a CHANGELOG entry', - 'body-original.md', 'UNTRUSTED TRACKER CONTENT', 'gstack-redact --from-file', - 'NEVER BUMP VERSION WITHOUT ASKING']) expect(body).toContain(text); + 'body-original.md', 'UNTRUSTED TRACKER CONTENT', 'gstack-redact --from-file']) expect(body).toContain(text); + const versionStep = body.slice(body.indexOf('## Step 8'), body.indexOf('\n## ', body.indexOf('## Step 8') + 1)); + expect(versionStep).toMatch(/ask[^\n]*before[^\n]*VERSION/i); + expect(body).toMatch(/does not rewrite, replace, or regenerate CHANGELOG/i); }); });