From 680aeff0fb9a8598858e3105ba4742973ef386ab Mon Sep 17 00:00:00 2001 From: Affaan Mustafa Date: Mon, 18 May 2026 09:10:51 -0400 Subject: [PATCH] test: enforce release publication checklist in readiness gates --- scripts/operator-readiness-dashboard.js | 12 ++++++++++-- scripts/preview-pack-smoke.js | 1 + .../scripts/operator-readiness-dashboard.test.js | 16 +++++++++++++++- 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/scripts/operator-readiness-dashboard.js b/scripts/operator-readiness-dashboard.js index 0b5d67c7..60f2aec1 100644 --- a/scripts/operator-readiness-dashboard.js +++ b/scripts/operator-readiness-dashboard.js @@ -531,6 +531,7 @@ function buildRequirements(rootDir, platformReport) { const roadmap = readText(rootDir, 'docs/ECC-2.0-GA-ROADMAP.md'); const publicationReadiness = readText(rootDir, 'docs/releases/2.0.0-rc.1/publication-readiness.md'); const namingMatrix = readText(rootDir, 'docs/releases/2.0.0-rc.1/naming-and-publication-matrix.md'); + const releasePublicationChecklist = readText(rootDir, 'docs/releases/2.0.0-rc.1/release-name-plugin-publication-checklist-2026-05-18.md'); const releaseUrlLedger = readText(rootDir, 'docs/releases/2.0.0-rc.1/release-url-ledger-2026-05-18.md'); const ownerQueueCleanup = readText(rootDir, 'docs/releases/2.0.0-rc.1/owner-queue-cleanup-2026-05-18.md'); const previewManifest = readText(rootDir, 'docs/releases/2.0.0-rc.1/preview-pack-manifest.md'); @@ -665,12 +666,19 @@ function buildRequirements(rootDir, platformReport) { buildRequirement( 'naming-and-plugin-publication', 'Prepare name-change, Claude plugin, and Codex plugin paths', - 'naming-and-publication-matrix plus publication-readiness', + 'naming-and-publication-matrix plus release-name-plugin-publication checklist plus publication-readiness', includesAll(namingMatrix, ['Claude plugin', 'Codex plugin', 'npm package', 'Publication Paths']) + && includesAll(releasePublicationChecklist, [ + 'Everything Claude Code (ECC)', + 'ecc-universal', + 'claude plugin tag .claude-plugin --dry-run', + 'codex plugin marketplace add', + 'Do not rename the repo or package until rc.1 is published' + ]) && includesAll(publicationReadiness, ['Claude plugin', 'Codex plugin']) ? 'in_progress' : 'not_complete', - 'naming matrix and plugin readiness gates exist', + 'naming matrix, release publication checklist, and plugin readiness gates exist', 'real tag/push, marketplace submission, and final channel choice remain approval-gated' ), buildRequirement( diff --git a/scripts/preview-pack-smoke.js b/scripts/preview-pack-smoke.js index fc7a03a2..5941141d 100644 --- a/scripts/preview-pack-smoke.js +++ b/scripts/preview-pack-smoke.js @@ -30,6 +30,7 @@ const REQUIRED_ARTIFACTS = [ `${RELEASE_DIR}/operator-readiness-dashboard-2026-05-18.md`, `${RELEASE_DIR}/release-url-ledger-2026-05-18.md`, `${RELEASE_DIR}/naming-and-publication-matrix.md`, + `${RELEASE_DIR}/release-name-plugin-publication-checklist-2026-05-18.md`, `${RELEASE_DIR}/x-thread.md`, `${RELEASE_DIR}/linkedin-post.md`, `${RELEASE_DIR}/article-outline.md`, diff --git a/tests/scripts/operator-readiness-dashboard.test.js b/tests/scripts/operator-readiness-dashboard.test.js index ed9fcc8b..3feef8ee 100644 --- a/tests/scripts/operator-readiness-dashboard.test.js +++ b/tests/scripts/operator-readiness-dashboard.test.js @@ -75,10 +75,18 @@ function seedRepo(rootDir, overrides = {}) { 'Linear live sync is current for the May 17 merge batch', 'operator progress snapshot' ].join('\n'), - 'docs/releases/2.0.0-rc.1/publication-readiness.md': 'Claude plugin Codex plugin', + 'docs/releases/2.0.0-rc.1/publication-readiness.md': 'Claude plugin Codex plugin release-name-plugin-publication-checklist-2026-05-18.md', 'docs/releases/2.0.0-rc.1/naming-and-publication-matrix.md': 'Claude plugin Codex plugin npm package Publication Paths', + 'docs/releases/2.0.0-rc.1/release-name-plugin-publication-checklist-2026-05-18.md': [ + 'Everything Claude Code (ECC)', + 'ecc-universal', + 'claude plugin tag .claude-plugin --dry-run', + 'codex plugin marketplace add', + 'Do not rename the repo or package until rc.1 is published' + ].join('\n'), 'docs/releases/2.0.0-rc.1/preview-pack-manifest.md': [ 'publication-readiness.md release-notes.md quickstart.md', + 'release-name-plugin-publication-checklist-2026-05-18.md', '`scripts/preview-pack-smoke.js`', 'npm run preview-pack:smoke' ].join('\n'), @@ -279,6 +287,12 @@ function runTests() { && item.evidence.includes('target-account billing readback') && item.evidence.includes('provenance-aware Marketplace billing-state gates') ))); + assert.ok(report.requirements.some(item => ( + item.id === 'naming-and-plugin-publication' + && item.artifact.includes('release-name-plugin-publication checklist') + && item.evidence.includes('release publication checklist') + && item.gap === 'real tag/push, marketplace submission, and final channel choice remain approval-gated' + ))); assert.ok(report.requirements.some(item => ( item.id === 'supply-chain-local-protection' && item.artifact.includes('AgentShield package-manager hardening')