From 8148340ad14eb32c971346f0cb4cb9431ec0f5de Mon Sep 17 00:00:00 2001 From: Affaan Mustafa Date: Tue, 19 May 2026 10:18:22 -0400 Subject: [PATCH] chore: add release owner approval packet (#2001) --- .../owner-approval-packet-2026-05-19.md | 95 +++++++++++++++++++ .../2.0.0-rc.1/preview-pack-manifest.md | 3 +- .../publication-evidence-2026-05-19.md | 15 +-- .../2.0.0-rc.1/publication-readiness.md | 9 +- ...cc-2-hypergrowth-release-command-center.md | 3 + scripts/platform-audit.js | 2 +- scripts/preview-pack-smoke.js | 1 + tests/docs/ecc2-release-surface.test.js | 47 +++++++++ .../operator-readiness-dashboard.test.js | 4 +- tests/scripts/platform-audit.test.js | 2 +- 10 files changed, 167 insertions(+), 14 deletions(-) create mode 100644 docs/releases/2.0.0-rc.1/owner-approval-packet-2026-05-19.md diff --git a/docs/releases/2.0.0-rc.1/owner-approval-packet-2026-05-19.md b/docs/releases/2.0.0-rc.1/owner-approval-packet-2026-05-19.md new file mode 100644 index 00000000..2b949b5a --- /dev/null +++ b/docs/releases/2.0.0-rc.1/owner-approval-packet-2026-05-19.md @@ -0,0 +1,95 @@ +# ECC v2.0.0-rc.1 Owner Approval Packet + +Snapshot date: 2026-05-19. + +This packet is the final human decision sheet for the rc.1 public launch. It +does not publish anything by itself. Use it to approve, defer, or block each +release action after the final evidence commands are rerun from the intended +release commit. + +Source commit for the clean evidence baseline this packet extends: +`e7a7b2aaa33c0657cad9db3fa2ced0e636cd0f8c`. + +## Current Evidence + +| Evidence | Current recorded state | Repeat before approval | +| --- | --- | --- | +| Platform audit | ready true, 0 open PRs, 0 open issues, 0 discussion gaps, 0 dirty files | yes | +| Preview pack smoke | ready true, digest `790430aef4a8`, 5/5 checks | yes | +| Video suite | ready true, 15/15 source assets, 13/13 suite artifacts, 12/12 publish candidates | yes | +| Release surface tests | 26/26 passed after this packet was added | yes | +| Full local suite | 2548/2548 passed after this packet was added | yes | +| GitHub CI | PR #1998, PR #1999, and PR #2000 merged after green required checks | verify current head | + +## Decision Register + +| Decision | Approve / defer / block | Evidence required first | Notes | +| --- | --- | --- | --- | +| GitHub prerelease | defer | final clean branch, URL ledger, release notes, attached video or video link | Approve only after final release notes contain live package/plugin/video URLs or explicitly marked blocked URLs. | +| npm `next` publish | defer | `npm pack --dry-run`, `npm publish --tag next --dry-run`, registry dist-tag readback plan | Keep `ecc-universal@2.0.0-rc.1` on `next`; do not move `latest` during rc.1. | +| Claude plugin tag | defer | `claude plugin validate .claude-plugin/plugin.json`, `claude plugin tag .claude-plugin --dry-run` | Create and push the real tag only after release approval. | +| Codex repo marketplace | defer | temp-home marketplace add smoke and current official Plugin Directory status | Claim repo-marketplace distribution only; do not claim official Plugin Directory listing without listing evidence. | +| ECC Tools billing language | defer | live readiness readback for the target account and billing/product state | Do not announce native payments or Marketplace-managed Pro until the gate is live. | +| Video upload | defer | owner selects primary launch cut plus short clips, self-eval stays clean | Upload only approved cuts; keep editable timeline/project output preserved. | +| X, LinkedIn, GitHub Discussion, longform | defer | live release, npm, plugin, video, and billing URL ledger updates | Personal-account posts and outbound copy need explicit approval. | +| Sponsor, partner, consulting, conference, podcast outreach | defer | final public URLs plus owner-approved outbound copy | Do not send drafts until the owner approves the exact batch. | + +## Final URL Fill-In + +Update these surfaces after the approved publication actions finish: + +| Surface | Final value source | Update targets | +| --- | --- | --- | +| GitHub prerelease URL | `gh release view v2.0.0-rc.1 --repo affaan-m/ECC --json url` | release notes, URL ledger, social copy | +| npm rc package URL | `npm view ecc-universal@2.0.0-rc.1 version dist-tags --json` | URL ledger, quickstart, release notes | +| Claude plugin tag URL | pushed `ecc--v2.0.0-rc.1` tag or marketplace readback | URL ledger, plugin docs, release notes | +| Codex repo-marketplace evidence | temp-home `codex plugin marketplace add ` readback | URL ledger, publication readiness | +| Primary launch video URL | uploaded owner-approved primary launch video | GitHub release, X, LinkedIn, longform | +| Short clip URLs | uploaded approved clips | X thread, LinkedIn, partner/sponsor/talk pack | +| ECC Tools billing/readiness URL | live readiness readback or explicit blocked status | sponsor copy, Pro copy, release notes | + +## Final Evidence Commands + +Run these from the exact release commit before approving publication: + +```bash +git status --short --branch +node scripts/platform-audit.js --json +npm run preview-pack:smoke -- --format json +npm run release:video-suite -- --format json +npm run harness:adapters -- --check +npm run harness:audit -- --format json +npm run observability:ready +npm run security:ioc-scan +npm audit --audit-level=moderate +npm audit signatures +node tests/docs/ecc2-release-surface.test.js +node tests/run-all.js +cd ecc2 && cargo test +``` + +## Approval Text + +Use short, explicit approvals. Example: + +```text +Approved for rc.1 GitHub prerelease, npm next publish, Claude plugin tag, and +release announcement after the final evidence commands pass from commit . +Video uploads approved for and . +Outbound sponsor, partner, consulting, conference, and podcast messages remain +blocked until I approve the exact batch. +``` + +## Do Not Approve If + +- The final branch is dirty or no longer matches the intended release commit. +- Any required evidence command fails or is skipped without a written deferral. +- The release copy claims live billing, plugin marketplace propagation, npm + `next`, or official Codex Plugin Directory listing before readback exists. +- Announcement copy contains stale URLs, private paths, or unresolved live-link + decisions. +- The selected video cut has black frames, missing audio, stale URLs, weak + product proof, or unreviewed captions. +- The outbound batch has not been reviewed exactly as it will be sent. + +No outbound email, personal-account post, package publish, plugin tag, or billing announcement is authorized by this packet alone. diff --git a/docs/releases/2.0.0-rc.1/preview-pack-manifest.md b/docs/releases/2.0.0-rc.1/preview-pack-manifest.md index 033c0808..c0ea3c7a 100644 --- a/docs/releases/2.0.0-rc.1/preview-pack-manifest.md +++ b/docs/releases/2.0.0-rc.1/preview-pack-manifest.md @@ -25,10 +25,11 @@ surfaces, or posting announcements. | `docs/releases/2.0.0-rc.1/publication-evidence-2026-05-16.md` | Current May 16/17 queue cleanup, recsys skill merge, GateGuard triage, PR #1947 supply-chain protection, AgentShield #87 plugin-cache confidence evidence, AgentShield #88 evidence-pack inspect/readback, AgentShield #89 evidence-pack fleet routing, AgentShield #90 fleet review items, AgentShield #91 policy export, AgentShield #92 policy promotion, ECC-Tools #76 fleet-summary consumption, ECC-Tools #77 hosted finding evidence paths, ECC-Tools #78 harness policy-route linking, dashboard refresh, and combined Node/Rust/release-surface gate evidence through the May 16 mirror | Must still be repeated from a strict clean checkout before real publication | | `docs/releases/2.0.0-rc.1/publication-evidence-2026-05-17.md` | May 17 queue-zero state, Japanese localization merge, Dependabot TypeScript and Node type merges, post-merge ja-JP lint repair, Mini Shai-Hulud/TanStack protection recheck, npm audit/signature checks, legacy and Linear progress routing, deterministic preview-pack smoke, operator dashboard refresh, Linear sync, and GitHub CI evidence for `27dc2918` | Superseded by the May 18 evidence snapshot; repeat from a strict clean checkout before real publication | | `docs/releases/2.0.0-rc.1/publication-evidence-2026-05-18.md` | May 18 queue-zero state, #1970/#1971/#1972 merge batch, #1978 review/closure, supply-chain recheck, AgentShield evidence mirror, Linear sync, current-head CI/security scan success for `4470e2e6`, and ITO-46 naming/plugin publication closure | Superseded by the May 19 ECC identity, video, and growth evidence snapshot | -| `docs/releases/2.0.0-rc.1/publication-evidence-2026-05-19.md` | Current May 19 evidence for canonical ECC identity, release video suite, partner/sponsor/talk outreach pack, May 19 operator dashboard, preview-pack smoke digest `bc2bf157616e`, 2547-test local suite, PR #1998 visual QA CI success, and PR #1999 dashboard evidence CI success | Current strongest readiness snapshot; must still be repeated from a strict clean checkout before real publication | +| `docs/releases/2.0.0-rc.1/publication-evidence-2026-05-19.md` | Current May 19 evidence for canonical ECC identity, release video suite, partner/sponsor/talk outreach pack, owner approval packet, May 19 operator dashboard, preview-pack smoke digest `790430aef4a8`, 2548-test local suite, PR #1998 visual QA CI success, PR #1999 dashboard evidence CI success, and PR #2000 suite-count evidence success | Current strongest readiness snapshot; must still be repeated from a strict clean checkout before real publication | | `docs/releases/2.0.0-rc.1/operator-readiness-dashboard-2026-05-17.md` | Previous prompt-to-artifact operator dashboard | Superseded by the May 18 generated dashboard | | `docs/releases/2.0.0-rc.1/operator-readiness-dashboard-2026-05-18.md` | Previous prompt-to-artifact operator dashboard | Superseded by the May 19 generated dashboard | | `docs/releases/2.0.0-rc.1/operator-readiness-dashboard-2026-05-19.md` | Current prompt-to-artifact operator dashboard | Shows PR/issue/discussion/platform/supply-chain gates current and adds the current `$1,728/mo` to `$10,000/mo` hypergrowth, video owner-approval, and outbound-pack operating lanes | +| `docs/releases/2.0.0-rc.1/owner-approval-packet-2026-05-19.md` | Final human decision sheet for release, package, plugin, video, billing, social, and outbound approvals | Must be reviewed by the owner before any publication or outbound action | | `docs/releases/2.0.0-rc.1/release-url-ledger-2026-05-19.md` | Live URL and approval-gated URL ledger for release copy | Must be regenerated from the final release commit before public announcements | | `docs/releases/2.0.0-rc.1/video-suite-production.md` | Release video production manifest | Gates local media inventory, rough primary render, captions, timeline, self-eval, and no-private-path publication rules | | `docs/releases/2.0.0-rc.1/partner-sponsor-talks-pack.md` | Partner, sponsor, consulting, conference, podcast, and discussion copy | Must stay approval-gated and avoid live billing, release, package, or plugin claims without evidence | diff --git a/docs/releases/2.0.0-rc.1/publication-evidence-2026-05-19.md b/docs/releases/2.0.0-rc.1/publication-evidence-2026-05-19.md index 8018c474..cbecf7cf 100644 --- a/docs/releases/2.0.0-rc.1/publication-evidence-2026-05-19.md +++ b/docs/releases/2.0.0-rc.1/publication-evidence-2026-05-19.md @@ -8,9 +8,9 @@ social announcement. | Field | Evidence | | --- | --- | -| Upstream main | `3304848beb40f57043c2314c744b5ad6265aaa96` | +| Upstream main | `e7a7b2aaa33c0657cad9db3fa2ced0e636cd0f8c` | | Git remote | `https://github.com/affaan-m/ECC.git` | -| Evidence scope | Current `main` after PR #1990 harness-audit GitHub integration scoring, PR #1991 canonical ECC identity gate, PR #1992 release video-suite gate, PR #1993 growth outreach pack, PR #1994 May 19 publication evidence refresh, PR #1995 operator dashboard refresh, PR #1996 primary render self-eval gate, PR #1997 publish-candidate gate, PR #1998 visual QA gate, and PR #1999 video dashboard evidence refresh | +| Evidence scope | Current `main` after PR #1990 harness-audit GitHub integration scoring, PR #1991 canonical ECC identity gate, PR #1992 release video-suite gate, PR #1993 growth outreach pack, PR #1994 May 19 publication evidence refresh, PR #1995 operator dashboard refresh, PR #1996 primary render self-eval gate, PR #1997 publish-candidate gate, PR #1998 visual QA gate, PR #1999 video dashboard evidence refresh, PR #2000 suite-count evidence refresh, and the owner approval packet addition | | Local status caveat | `git status --short --branch` was clean after pulling `origin/main`; generated evidence files are committed after the source snapshot they describe | The release operator must repeat all publish-facing checks from the exact final @@ -48,16 +48,18 @@ Tracked repositories in the platform audit were: | PR #1997 | Merged the publish-candidate gate for the primary launch MP4/captions plus five short clips in wide and vertical formats | | PR #1998 | Merged the release video visual QA gate for publish candidates and black-frame segment detection | | PR #1999 | Merged the operator dashboard refresh that moved the release video suite to current once publish-candidate evidence was recorded | +| PR #2000 | Merged the suite-count evidence refresh so the platform audit rejects stale local-suite totals | +| Owner approval packet | Added the final human decision sheet for release, package, plugin, video, billing, social, and outbound approvals | ## Release And Growth Evidence | Gate | Command | Result | | --- | --- | --- | -| Release-surface tests | `node tests/docs/ecc2-release-surface.test.js` | 25 passed, 0 failed | -| Preview-pack smoke | `npm run preview-pack:smoke -- --format json` | Ready true; digest `bc2bf157616e`; 30 required artifacts; 5 passed, 0 failed | +| Release-surface tests | `node tests/docs/ecc2-release-surface.test.js` | 26 passed, 0 failed | +| Preview-pack smoke | `npm run preview-pack:smoke -- --format json` | Ready true; digest `790430aef4a8`; 31 required artifacts; 5 passed, 0 failed | | Operator dashboard | `npm run operator:dashboard -- --markdown --write docs/releases/2.0.0-rc.1/operator-readiness-dashboard-2026-05-19.md` | Generated May 19 dashboard with platform audit ready true, 0 tracked PRs, 0 tracked issues, 0 discussion gaps, `$1,728/mo` current MRR, `$10,000/mo` target MRR, the release video suite marked current, and top actions for plugin publication, notifications, outbound approval, AgentShield, and ECC Tools billing | | Release video suite | `npm run release:video-suite -- --format json --summary` with `ECC_VIDEO_SOURCE_ROOT` and `ECC_VIDEO_RELEASE_SUITE_ROOT` | Ready true; 15/15 source assets present; 13/13 render, timeline, caption, EDL, and segment artifacts present; 12/12 publish-candidate outputs present with zero detected black-frame segments; primary rough render self-eval passed at 144.759 seconds, 1920x1080, 1 audio stream, and 106.78 MB | -| Full local suite | `node tests/run-all.js` | 2547 passed, 0 failed | +| Full local suite | `node tests/run-all.js` | 2548 passed, 0 failed | | PR #1998 CI | GitHub Actions run `26099020341` | Completed successfully for `d500de1e9f11c0446b6a1349bd98b522d31f9125`; all reported checks passed, including lint, validation, security scan, coverage, GitGuardian, CodeRabbit, Cubic, and the macOS/Ubuntu/Windows test matrix | | PR #1999 CI | GitHub Actions run `26100148726` | Completed successfully for `90584b6d5e5814bc2ad9a4cd651bebd043de989d`; lint, validation, security scan, coverage, GitGuardian, CodeRabbit, and the macOS/Ubuntu/Windows test matrix passed; Cubic completed neutral and did not block merge | | Public-path sanitization | `node scripts/ci/validate-no-personal-paths.js` through local suite and CI | Passed | @@ -71,6 +73,7 @@ Tracked repositories in the platform audit were: | Release claim | Release notes and launch collateral frame ECC as the harness-native operator system for agentic work, not a Claude-only config pack | | Video proof | `video-suite-production.md` gates the local rough render, timeline, captions, source inventory, publish-candidate clip set, self-eval, black-frame QA, and no-private-path publication rules | | Growth proof | `partner-sponsor-talks-pack.md` provides approval-gated copy for sponsors, partners, consulting, talks, podcasts, GitHub Discussion, and video CTAs | +| Owner approval proof | `owner-approval-packet-2026-05-19.md` centralizes release, package, plugin, video, billing, social, and outbound decision gates | | Business baseline | Hypergrowth command center and partner pack use `$1,728/mo` current MRR, `$10,000/mo` target MRR, and `$8,272/mo` gap | | Operator dashboard | `operator-readiness-dashboard-2026-05-19.md` pulls the growth baseline into the same queue, publication, video, outbound, AgentShield, ECC Tools, Linear, and supply-chain control surface | @@ -98,7 +101,7 @@ Tracked repositories in the platform audit were: The tracked public PR queue, issue queue, discussion queue, canonical ECC identity, release video suite, preview pack, and growth outreach packet are current on May 19, 2026 for `main` through -`3304848beb40f57043c2314c744b5ad6265aaa96`. The remaining video work is +`e7a7b2aaa33c0657cad9db3fa2ced0e636cd0f8c`. The remaining video work is owner approval, upload, and public URL attachment, not render or QA production. This improves publication readiness but does not replace the approval-gated diff --git a/docs/releases/2.0.0-rc.1/publication-readiness.md b/docs/releases/2.0.0-rc.1/publication-readiness.md index f88fb764..d15455cc 100644 --- a/docs/releases/2.0.0-rc.1/publication-readiness.md +++ b/docs/releases/2.0.0-rc.1/publication-readiness.md @@ -58,6 +58,9 @@ For the May 18 operator dashboard refresh, see The current May 19 hypergrowth/operator dashboard is [`operator-readiness-dashboard-2026-05-19.md`](operator-readiness-dashboard-2026-05-19.md). +For the final owner decision sheet across release, npm, plugin, video, billing, +social, and outbound approvals, see +[`owner-approval-packet-2026-05-19.md`](owner-approval-packet-2026-05-19.md). For the May 19 live/pending release URL ledger after the public repo rename, see [`release-url-ledger-2026-05-19.md`](release-url-ledger-2026-05-19.md). @@ -99,16 +102,16 @@ Record the exact commit SHA and command output before any publication action: | Evidence | Command | Required result | Recorded output | | --- | --- | --- | --- | | Clean release branch | `git status --short --branch` | On intended release commit; no unrelated files | `3304848b`: `## main...origin/main`; repeat from the exact final publication commit before release | -| Preview-pack smoke | `npm run preview-pack:smoke` | Preview pack artifacts, Hermes boundary, final verification command list, and publication blockers pass | `publication-evidence-2026-05-19.md`: ready yes, digest `bc2bf157616e`, 30 artifacts, 5 passed, 0 failed; repeat in the final strict clean-checkout release pass | +| Preview-pack smoke | `npm run preview-pack:smoke` | Preview pack artifacts, Hermes boundary, final verification command list, and publication blockers pass | `publication-evidence-2026-05-19.md`: ready yes, digest `790430aef4a8`, 31 artifacts, 5 passed, 0 failed; repeat in the final strict clean-checkout release pass | | Harness audit | `npm run harness:audit -- --format json` | 70/70 passing | `99e01ded`: 70/70, 0 top actions | | Adapter scorecard | `npm run harness:adapters -- --check` | PASS | `99e01ded`: PASS, 11 adapters | | Observability readiness | `npm run observability:ready` | 21/21 passing | `publication-evidence-2026-05-18.md`: 21/21, ready yes | | Release safety gate | `npm run observability:ready -- --format json` | Release Safety category passing with publication readiness, supply-chain, workflow security, package surface, and release-surface evidence | May 18 evidence keeps release safety passing; repeat the JSON gate from the exact final release commit | | Supply-chain verification | `npm audit --json`; `npm audit signatures`; `cd ecc2 && cargo audit -q`; Dependabot alerts; GitGuardian Security Checks | 0 vulnerabilities/alerts, registry signatures verified, GitGuardian clean | `publication-evidence-2026-05-19.md` plus CI `26093792219`: GitGuardian and security scan passed; prior May 18 npm registry signatures and IOC scans remain the latest detailed supply-chain evidence | -| Root suite | `node tests/run-all.js` | 0 failures | `3304848b`: local `node tests/run-all.js` passed 2547/2547; PR #1999 CI `26100148726` passed the full OS/runtime/package-manager matrix for `90584b6d` | +| Root suite | `node tests/run-all.js` | 0 failures | Current packet branch based on `e7a7b2a`: local `node tests/run-all.js` passed 2548/2548; PR #2000 CI `26101512088` passed the full OS/runtime/package-manager matrix | | Markdown lint | `npx markdownlint-cli '**/*.md' --ignore node_modules` | 0 failures | CI `26093792219`: markdownlint passed on the growth-pack PR; rerun after any release-copy edits | | Package surface | `node tests/scripts/npm-publish-surface.test.js` | 0 failures; no Python bytecode in npm tarball | `2/2` passed in May 12 evidence pass | -| Release surface | `node tests/docs/ecc2-release-surface.test.js` | 0 failures | May 19 evidence refresh: 25/25 passed after adding the video suite and partner/sponsor/talk gates | +| Release surface | `node tests/docs/ecc2-release-surface.test.js` | 0 failures | May 19 evidence refresh: 26/26 passed after adding the video suite, partner/sponsor/talk gates, and owner approval packet | | Optional Rust surface | `cd ecc2 && cargo test` | 0 failures or explicit deferral | `publication-evidence-2026-05-16.md`: 462/462 passed, existing warnings only | | Queue baseline | `node scripts/platform-audit.js --json` across trunk, AgentShield, JARVIS, ECC Tools, and ECC website | Under 20 open PRs and under 20 open issues | `3304848b`: platform audit ready, 0 open PRs, 0 open issues, 0 conflicting PRs, and 0 blocking dirty files | | Discussion baseline | `node scripts/platform-audit.js --json` and `node scripts/discussion-audit.js --json` | No unmanaged active discussion queue and no answerable Q&A missing an accepted answer | `3304848b`: platform audit sampled 58 trunk discussions, 0 needing maintainer touch, 0 answerable discussions missing accepted answer; `docs/architecture/discussion-response-playbook.md` records response templates and security escalation rules | diff --git a/docs/releases/2.0.0/ecc-2-hypergrowth-release-command-center.md b/docs/releases/2.0.0/ecc-2-hypergrowth-release-command-center.md index 508098e2..5a7dc203 100644 --- a/docs/releases/2.0.0/ecc-2-hypergrowth-release-command-center.md +++ b/docs/releases/2.0.0/ecc-2-hypergrowth-release-command-center.md @@ -103,6 +103,9 @@ Production steps: The source of truth for sponsor, partner, consulting, conference, podcast, and GitHub Discussion copy is `docs/releases/2.0.0-rc.1/partner-sponsor-talks-pack.md`. +The source of truth for owner approval across release, package, plugin, video, +billing, social, and outbound actions is +`docs/releases/2.0.0-rc.1/owner-approval-packet-2026-05-19.md`. ## Copy Rules diff --git a/scripts/platform-audit.js b/scripts/platform-audit.js index f39cc748..fe6b012d 100644 --- a/scripts/platform-audit.js +++ b/scripts/platform-audit.js @@ -472,7 +472,7 @@ function buildLocalEvidenceChecks(rootDir) { ), buildCheck( 'release-evidence-current', - includesAll(evidence, ['Release video suite', 'growth outreach', 'Operator dashboard', 'GitGuardian', 'macOS/Ubuntu/Windows test matrix', '2547 passed']) ? 'pass' : 'fail', + includesAll(evidence, ['Release video suite', 'growth outreach', 'Operator dashboard', 'GitGuardian', 'macOS/Ubuntu/Windows test matrix', '2548 passed']) ? 'pass' : 'fail', 'rc.1 evidence includes current release, video, growth, and CI artifacts', { path: 'docs/releases/2.0.0-rc.1/publication-evidence-2026-05-19.md' } ), diff --git a/scripts/preview-pack-smoke.js b/scripts/preview-pack-smoke.js index 8dbee764..843eade8 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-17.md`, `${RELEASE_DIR}/operator-readiness-dashboard-2026-05-18.md`, `${RELEASE_DIR}/operator-readiness-dashboard-2026-05-19.md`, + `${RELEASE_DIR}/owner-approval-packet-2026-05-19.md`, `${RELEASE_DIR}/release-url-ledger-2026-05-19.md`, `${RELEASE_DIR}/video-suite-production.md`, `${RELEASE_DIR}/partner-sponsor-talks-pack.md`, diff --git a/tests/docs/ecc2-release-surface.test.js b/tests/docs/ecc2-release-surface.test.js index c36bb649..8654080e 100644 --- a/tests/docs/ecc2-release-surface.test.js +++ b/tests/docs/ecc2-release-surface.test.js @@ -54,6 +54,7 @@ const expectedReleaseFiles = [ 'publication-readiness.md', 'video-suite-production.md', 'partner-sponsor-talks-pack.md', + 'owner-approval-packet-2026-05-19.md', 'release-name-plugin-publication-checklist-2026-05-18.md', ]; @@ -179,6 +180,7 @@ test('preview pack manifest assembles release, Hermes, and publication gates', ( 'docs/releases/2.0.0-rc.1/publication-readiness.md', 'docs/releases/2.0.0-rc.1/naming-and-publication-matrix.md', 'docs/releases/2.0.0-rc.1/release-url-ledger-2026-05-19.md', + 'docs/releases/2.0.0-rc.1/owner-approval-packet-2026-05-19.md', 'docs/releases/2.0.0-rc.1/video-suite-production.md', 'docs/releases/2.0.0-rc.1/publication-evidence-2026-05-19.md', 'docs/releases/2.0.0-rc.1/release-name-plugin-publication-checklist-2026-05-18.md', @@ -203,6 +205,51 @@ test('preview pack manifest assembles release, Hermes, and publication gates', ( assert.ok(manifest.includes('Reference-Inspired Adapter Direction')); }); +test('owner approval packet consolidates the final gated decisions', () => { + const packet = read('docs/releases/2.0.0-rc.1/owner-approval-packet-2026-05-19.md'); + const manifest = read('docs/releases/2.0.0-rc.1/preview-pack-manifest.md'); + const publicationReadiness = read('docs/releases/2.0.0-rc.1/publication-readiness.md'); + const hypergrowth = read('docs/releases/2.0.0/ecc-2-hypergrowth-release-command-center.md'); + + for (const marker of [ + 'Owner Approval Packet', + 'Source commit', + 'Decision Register', + 'GitHub prerelease', + 'npm `next` publish', + 'Claude plugin tag', + 'Video upload', + 'Final URL Fill-In', + 'Do Not Approve If', + 'No outbound email, personal-account post, package publish, plugin tag, or billing announcement is authorized by this packet alone.', + ]) { + assert.ok(packet.includes(marker), `owner approval packet missing ${marker}`); + } + + for (const command of [ + 'node scripts/platform-audit.js --json', + 'npm run preview-pack:smoke -- --format json', + 'npm run release:video-suite -- --format json', + 'node tests/run-all.js', + ]) { + assert.ok(packet.includes(command), `owner approval packet missing command ${command}`); + } + + for (const urlSurface of [ + 'GitHub prerelease URL', + 'npm rc package URL', + 'Claude plugin tag URL', + 'Primary launch video URL', + 'ECC Tools billing/readiness URL', + ]) { + assert.ok(packet.includes(urlSurface), `owner approval packet missing ${urlSurface}`); + } + + assert.ok(manifest.includes('owner-approval-packet-2026-05-19.md')); + assert.ok(publicationReadiness.includes('owner-approval-packet-2026-05-19.md')); + assert.ok(hypergrowth.includes('owner-approval-packet-2026-05-19.md')); +}); + test('rc.1 quickstart gives a clone-to-cross-harness path', () => { const quickstart = read('docs/releases/2.0.0-rc.1/quickstart.md'); for (const heading of ['Clone', 'Install', 'Verify', 'First Skill', 'Switch Harness']) { diff --git a/tests/scripts/operator-readiness-dashboard.test.js b/tests/scripts/operator-readiness-dashboard.test.js index 3c816cb0..7839e01a 100644 --- a/tests/scripts/operator-readiness-dashboard.test.js +++ b/tests/scripts/operator-readiness-dashboard.test.js @@ -178,7 +178,7 @@ function seedRepo(rootDir, overrides = {}) { 'Operator dashboard', 'GitGuardian', 'macOS/Ubuntu/Windows test matrix', - '2547 passed', + '2548 passed', 'Business baseline', '$1,728/mo', '$8,272/mo' @@ -424,7 +424,7 @@ function runTests() { 'Operator dashboard', 'GitGuardian', 'macOS/Ubuntu/Windows test matrix', - '2547 passed', + '2548 passed', 'Business baseline', '$1,728/mo', '$8,272/mo', diff --git a/tests/scripts/platform-audit.test.js b/tests/scripts/platform-audit.test.js index 16dcae40..d146c787 100644 --- a/tests/scripts/platform-audit.test.js +++ b/tests/scripts/platform-audit.test.js @@ -68,7 +68,7 @@ function seedRepo(rootDir, overrides = {}) { 'Operator dashboard', 'GitGuardian', 'macOS/Ubuntu/Windows test matrix', - '2547 passed' + '2548 passed' ].join('\n'), 'docs/releases/2.0.0-rc.1/operator-readiness-dashboard-2026-05-19.md': [ 'This dashboard is generated by `npm run operator:dashboard`',