diff --git a/docs/operations/ql3-local-alpha-milestone.md b/docs/operations/ql3-local-alpha-milestone.md index a89ce445..e38c7379 100644 --- a/docs/operations/ql3-local-alpha-milestone.md +++ b/docs/operations/ql3-local-alpha-milestone.md @@ -20,7 +20,7 @@ ``` 2. 打开 `manifest.json`,确认: - - `schema` 为 `qinglong/alpha-local-milestone@v5`; + - `schema` 为 `qinglong/alpha-local-milestone@v7`; - `variant` 为 `headless` 或 `console`,且两个架构记录都使用同一变体; - `sourceRevision` 是准备试用的完整 40 位提交; - `workflow.event` 为 `workflow_dispatch`,`workflow.job` 为 `local-alpha-milestone`; @@ -28,7 +28,7 @@ - `artifacts` 恰好包含 `amd64` 与 `arm64`。 3. 根据主机架构下载 `artifacts..artifactName` 指向的 Trial Kit。 4. 对 Trial Kit 先执行其 `SHA256SUMS`,再确认其中 `manifest.json` 的 SHA-256 与 milestone 的 `bundleManifest.sha256` 完全一致。 -5. 确认 milestone 的 `upgradeReadinessSha256`、`upgradeRehearsalSha256`、`upgradeCutoverRehearsalSha256` 与 Trial Kit manifest 中同名入口摘要一致,再按 Trial Kit 自带 `README.md` 完成 fresh smoke、只读 2.x 升级就绪盘点、受审核计划的 side-by-side 暂存或隔离切换链演练。 +5. 确认 milestone 的 `upgradeReadinessSha256`、`upgradeRehearsalSha256`、`upgradeCutoverRehearsalSha256`、`upgradeReconciliationRehearsalSha256` 与 Trial Kit manifest 中同名入口摘要一致,再按 Trial Kit 自带 `README.md` 完成 fresh smoke、只读 2.x 升级就绪盘点、受审核计划的 side-by-side 暂存、隔离切换链或写后 reconciliation 演练。 若持有同一版本源码与 Node.js 24,可额外审计 milestone 索引: diff --git a/test/back/ql3LocalAlphaMilestone.test.cjs b/test/back/ql3LocalAlphaMilestone.test.cjs index 976b400b..32f8fcb3 100644 --- a/test/back/ql3LocalAlphaMilestone.test.cjs +++ b/test/back/ql3LocalAlphaMilestone.test.cjs @@ -272,6 +272,16 @@ test('finalizes Console trial kits as a separately named milestone', (t) => { ); }); +test('keeps the shipped milestone README aligned with the current schema', () => { + const readme = fs.readFileSync( + path.join(root, 'docs/operations/ql3-local-alpha-milestone.md'), + 'utf8', + ); + assert.match(readme, /qinglong\/alpha-local-milestone@v7/u); + assert.doesNotMatch(readme, /qinglong\/alpha-local-milestone@v5/u); + assert.match(readme, /upgradeReconciliationRehearsalSha256/u); +}); + test('rejects a trial kit from another run attempt before publishing', (t) => { const paths = fixture(t, { arm64: { runAttempt: '1' } }); assert.throws(