From d86fadad0d68ff1d5d5a3addcadd9e308cdd7188 Mon Sep 17 00:00:00 2001 From: Affaan Mustafa Date: Tue, 2 Jun 2026 19:32:59 +0800 Subject: [PATCH] docs: record rc1 live package readbacks (#2117) --- .codex-plugin/README.md | 22 +++++++------ .codex-plugin/plugin.json | 12 +++++-- .codex/config.toml | 4 ++- .gitignore | 1 + assets/ecc-icon.svg | 6 ++++ docs/releases/2.0.0-rc.1/linkedin-post.md | 9 +++--- .../naming-and-publication-matrix.md | 25 +++++++++------ .../owner-approval-packet-2026-05-19.md | 10 +++--- .../2.0.0-rc.1/partner-sponsor-talks-pack.md | 10 +++--- .../2.0.0-rc.1/preview-pack-manifest.md | 32 ++++++++++--------- .../2.0.0-rc.1/publication-readiness.md | 21 ++++++------ docs/releases/2.0.0-rc.1/quickstart.md | 9 ++++++ ...plugin-publication-checklist-2026-05-18.md | 19 +++++------ docs/releases/2.0.0-rc.1/release-notes.md | 23 +++++++++---- .../release-url-ledger-2026-05-19.md | 26 ++++++++------- docs/releases/2.0.0-rc.1/x-thread.md | 2 +- package.json | 2 ++ tests/plugin-manifest.test.js | 24 ++++++++++++++ tests/scripts/npm-publish-surface.test.js | 4 +++ 19 files changed, 171 insertions(+), 90 deletions(-) create mode 100644 assets/ecc-icon.svg diff --git a/.codex-plugin/README.md b/.codex-plugin/README.md index ef850ca3..ddf2b6e1 100644 --- a/.codex-plugin/README.md +++ b/.codex-plugin/README.md @@ -12,15 +12,15 @@ This directory contains the **Codex plugin manifest** for ECC. ## What This Provides -- **200 skills** from `./skills/` — reusable Codex workflows for TDD, security, +- **249 skills** from `./skills/` — reusable Codex workflows for TDD, security, code review, architecture, and more - **6 MCP servers** — GitHub, Context7, Exa, Memory, Playwright, Sequential Thinking ## Installation -Codex plugin support is currently marketplace-backed. The repo exposes a -repo-scoped marketplace at `.agents/plugins/marketplace.json`; Codex can add and -track that marketplace source from the CLI: +Codex plugin support is marketplace-backed. The repo exposes a repo-scoped +marketplace at `.agents/plugins/marketplace.json`; Codex can add and track that +marketplace source from the CLI: ```bash # Add the public repo marketplace @@ -35,10 +35,12 @@ The marketplace entry points at the repository root so `.codex-plugin/plugin.jso or updating the marketplace, restart Codex and install or enable `ecc` from the plugin directory. -Official Plugin Directory publishing is coming soon in Codex. Until self-serve -publishing exists, treat the public repo marketplace as the supported Codex -distribution path and keep release copy framed as repo-marketplace/manual -installation. +Official Plugin Directory publishing is coming soon. For official OpenAI +plugin-directory review, package this repo under the `openai/plugins` +repository shape: `plugins/ecc/.codex-plugin/plugin.json`, +`plugins/ecc/skills/`, and the supporting README/assets. Until that listing is +accepted, treat the public repo marketplace as the supported Codex distribution +path and keep release copy framed as repo-marketplace/manual installation. The installed plugin registers under the short slug `ecc` so tool and command names stay below provider length limits. @@ -56,8 +58,8 @@ stay below provider length limits. ## Notes -- The `skills/` directory at the repo root is shared between Claude Code (`.claude-plugin/`) - and Codex (`.codex-plugin/`) — same source of truth, no duplication +- The `skills/` directory at the repo root is the source of truth for the Codex + plugin package; do not duplicate skill content inside `.codex-plugin/`. - ECC is moving to a skills-first workflow surface. Legacy `commands/` remain for compatibility on harnesses that still expect slash-entry shims. - MCP server credentials are inherited from the launching environment (env vars) diff --git a/.codex-plugin/plugin.json b/.codex-plugin/plugin.json index e512e8b0..508365d6 100644 --- a/.codex-plugin/plugin.json +++ b/.codex-plugin/plugin.json @@ -15,12 +15,18 @@ "mcpServers": "./.mcp.json", "interface": { "displayName": "ECC", - "shortDescription": "207 battle-tested ECC skills plus MCP configs for TDD, security, code review, and autonomous development.", + "shortDescription": "249 ECC skills plus MCP configs for TDD, security, code review, and autonomous development.", "longDescription": "ECC is a harness-native operator system for Codex and adjacent agent harnesses. It packages reusable skills, MCP configs, TDD workflows, security scanning, code review, architecture decisions, operator workflows, and release gates in one installable plugin.", "developerName": "Affaan Mustafa", - "category": "Productivity", - "capabilities": ["Read", "Write"], + "category": "Coding", + "capabilities": ["Interactive", "Read", "Write"], "websiteURL": "https://ecc.tools", + "privacyPolicyURL": "https://docs.github.com/en/site-policy/privacy-policies/github-general-privacy-statement", + "termsOfServiceURL": "https://docs.github.com/en/site-policy/github-terms/github-terms-of-service", + "brandColor": "#E07856", + "composerIcon": "./assets/ecc-icon.svg", + "logo": "./assets/hero.png", + "screenshots": [], "defaultPrompt": [ "Use the tdd-workflow skill to write tests before implementation.", "Use the security-review skill to scan for OWASP Top 10 vulnerabilities.", diff --git a/.codex/config.toml b/.codex/config.toml index 5c3316ff..4b862643 100644 --- a/.codex/config.toml +++ b/.codex/config.toml @@ -51,7 +51,9 @@ args = ["-y", "@upstash/context7-mcp@latest"] startup_timeout_sec = 30 [mcp_servers.exa] -url = "https://mcp.exa.ai/mcp" +command = "npx" +args = ["-y", "mcp-remote", "https://mcp.exa.ai/mcp"] +startup_timeout_sec = 30 [mcp_servers.memory] command = "npx" diff --git a/.gitignore b/.gitignore index 46e46443..2485c9f3 100644 --- a/.gitignore +++ b/.gitignore @@ -44,6 +44,7 @@ yarn-error.log* .pnpm-debug.log* .yarn/ lerna-debug.log* +*.tgz # Build outputs dist/ diff --git a/assets/ecc-icon.svg b/assets/ecc-icon.svg new file mode 100644 index 00000000..0a8b73b1 --- /dev/null +++ b/assets/ecc-icon.svg @@ -0,0 +1,6 @@ + + ECC + + + + diff --git a/docs/releases/2.0.0-rc.1/linkedin-post.md b/docs/releases/2.0.0-rc.1/linkedin-post.md index 9ffbda2d..53e71d54 100644 --- a/docs/releases/2.0.0-rc.1/linkedin-post.md +++ b/docs/releases/2.0.0-rc.1/linkedin-post.md @@ -43,9 +43,10 @@ persistence coverage. There is still more to harden before GA, especially around packaging, installers, and the `ecc2/` control plane. But rc.1 is enough to show the shape clearly. -Public publication is still approval-gated until the GitHub release, npm -`next` publish, plugin path, final URLs, and billing/native-payments claims have -live evidence. +The GitHub prerelease and npm `next` package are live now. Public publication +still stays approval-gated for the plugin path, video URLs, final outbound URLs, +and any billing/native-payments claim that has not been freshly rechecked. The release URL ledger now separates links that already resolve from links that -must wait for the approval-gated release, package, plugin, and billing checks. +must wait for the remaining approval-gated plugin, video, billing, and outbound +checks. diff --git a/docs/releases/2.0.0-rc.1/naming-and-publication-matrix.md b/docs/releases/2.0.0-rc.1/naming-and-publication-matrix.md index 587a2220..ef3bb9e4 100644 --- a/docs/releases/2.0.0-rc.1/naming-and-publication-matrix.md +++ b/docs/releases/2.0.0-rc.1/naming-and-publication-matrix.md @@ -1,6 +1,7 @@ # ECC v2.0.0-rc.1 Naming And Publication Matrix -Snapshot date: 2026-05-19. +Snapshot date: 2026-05-19. Publication state refreshed 2026-05-26 after the +GitHub prerelease and npm `next` readbacks succeeded. This matrix records the rc.1 identity after the public repository rename to `affaan-m/ECC`. It is evidence for planning, not a publication action. @@ -27,12 +28,12 @@ Reason: ## Current Values -| Surface | Current value | Evidence command | 2026-05-18 result | Release decision | +| Surface | Current value | Evidence command | Current result | Release decision | | --- | --- | --- | --- | --- | | Product display name | `ECC` | `rg -n "^# ECC\|displayName.*ECC\|affaan-m/ECC" README.md .codex-plugin/plugin.json docs/releases/2.0.0-rc.1` | Present across README, plugin manifests, release copy, and URL ledger | Keep for rc.1 and GA | | GitHub repo | `affaan-m/ECC` | `git remote get-url origin` | `https://github.com/affaan-m/ECC.git` | Keep for rc.1 and GA | | npm package | `ecc-universal` | `node -p "require('./package.json').name"` | `ecc-universal` | Keep for rc.1 | -| npm package version | `2.0.0-rc.1` local, `1.10.0` registry latest | `node -p "require('./package.json').version"` and `npm view ecc-universal name version dist-tags --json` | Local rc.1 is ready; registry latest remains `1.10.0` and no `next` dist-tag exists yet | Publish rc as `next`, not `latest` | +| npm package version | `2.0.0-rc.1` local, `1.10.0` registry latest, `2.0.0-rc.1` registry next | `node -p "require('./package.json').version"` and `npm view ecc-universal name version dist-tags --json` | Local rc.1 is ready; registry latest remains `1.10.0`; `next` points to `2.0.0-rc.1` | Keep rc on `next`, not `latest` | | Exact npm short name | `ecc` | `npm view ecc name version description repository.url --json` | Occupied by `ecc@0.0.2`, "Elliptic curve cryptography functions." | Do not use | | Scoped npm short name | `@affaan-m/ecc` | `npm view @affaan-m/ecc name version --json` | Registry 404 | Possible future scoped package if npm scope policy permits | | Former package name | `everything-claude-code` | `npm view everything-claude-code name version dist-tags --json` | Registry reports unpublished on 2026-02-07 | Do not revive for rc.1 | @@ -50,21 +51,21 @@ Reason: | Path | Current evidence | Required next action | Blocker | | --- | --- | --- | --- | -| GitHub release | `docs/releases/2.0.0-rc.1/` and release notes are in-tree | Re-run required command evidence from the final release commit, then create/verify `v2.0.0-rc.1` prerelease | No tag/release yet | -| npm | `ecc-universal` local package version is `2.0.0-rc.1`; registry latest is `1.10.0` | Publish rc with `npm publish --tag next` after final `npm pack --dry-run` and release tests | Do not publish before final release commit | +| GitHub release | `v2.0.0-rc.1` prerelease is live at | Keep release notes aligned with the URL ledger; rerun evidence before any follow-up release edit | Remaining plugin, video, billing, and outbound URLs still gated | +| npm | `ecc-universal@2.0.0-rc.1` is live on `next`; registry latest remains `1.10.0` | Keep rc on `next`; do not move `latest` before GA approval | Remaining plugin, video, billing, and outbound URLs still gated | | Claude plugin | `claude plugin validate .claude-plugin/plugin.json` passed; `claude plugin tag --help` confirms the release tag flow creates `{name}--v{version}` tags and can push them | Run `claude plugin tag .claude-plugin --dry-run` from the clean release commit, then tag/push only after release approval | No plugin release tag created in this pass | | Claude marketplace | `.claude-plugin/marketplace.json` points at `ecc` and the public repo | Verify marketplace update/install path after tag exists | External marketplace propagation not verified | | Codex plugin | `codex plugin marketplace` supports local and Git marketplace sources; `.codex-plugin/plugin.json` is present; `.agents/plugins/marketplace.json` exposes `ecc` from the repo root; temp-home local and GitHub-ref marketplace adds passed | Publish rc.1 docs with the repo-marketplace command, then monitor OpenAI's official Plugin Directory path | Do not claim official Plugin Directory listing before OpenAI submission evidence | | OpenCode package | `.opencode/package.json` builds from source and ships inside npm package | Re-run `npm run build:opencode` and package dry-run from release commit | OpenCode CLI 1.2.21 does not expose a separate plugin publication command in this pass | | ECC Tools billing claim | README and launch copy mention ECC Tools / marketplace context | ECC-Tools #89/#90/#91 add selected-target billing readback, selected-target announcement gating, and ignored `--env-file` support; #92 adds the non-breaking operator bearer path; #93 records the live selected-target gate pass | Billing evidence ready; repeat the live selected-target gate before any payment announcement | -| Social and longform copy | X thread, LinkedIn copy, article outline, GitHub release copy exist | Replace any stale URLs, then publish only after release/npm/plugin URLs work | Public URLs not final until release actions complete | +| Social and longform copy | X thread, LinkedIn copy, article outline, GitHub release copy exist | Replace stale URLs and publish only after the remaining plugin/video/billing/outbound gates are approved | GitHub prerelease and npm URLs are live; plugin, video, billing, and outbound URLs are not final | ## ITO-46 Blocker Register | Channel | Current status | Required metadata/evidence | Owner | Blocker or follow-up | | --- | --- | --- | --- | --- | -| GitHub release | Approval-gated; no `v2.0.0-rc.1` prerelease yet | Tag, release URL, prerelease flag, final release notes, URL ledger | Release owner | Create only after final clean-checkout evidence | -| npm | `ecc-universal@2.0.0-rc.1` dry-run passed; registry latest is `1.10.0` | Pack summary, publish dry-run, `next` dist-tag readback, registry signature evidence | Package owner | Do not publish before approval and final release commit | +| GitHub release | Live prerelease at | Tag, release URL, prerelease flag, final release notes, URL ledger | Release owner | Keep release edits behind final evidence and owner approval | +| npm | `ecc-universal@2.0.0-rc.1` is published on `next`; registry latest is `1.10.0` | Pack summary, publish readback, `next` dist-tag readback, registry signature evidence | Package owner | Do not move rc.1 to `latest` before GA approval | | Short npm name | `ecc` is occupied; `@affaan-m/ecc` returns 404 | Name availability outputs and migration plan | Release owner | Keep `ecc-universal` for rc.1; scoped rename is post-rc only | | Claude plugin | `ecc@2.0.0-rc.1` validates; tag dry run would create `ecc--v2.0.0-rc.1` | `claude plugin validate .`, `claude plugin tag .claude-plugin --dry-run`, marketplace install/update smoke | Plugin owner | Real tag push and marketplace propagation require release approval | | Claude marketplace | Docs and CLI support GitHub, git URL, remote marketplace JSON, and local path sources | Public repo marketplace JSON, support/contact metadata, post-tag install smoke | Plugin owner | No external official listing has been submitted in this pass | @@ -72,7 +73,7 @@ Reason: | Codex official Plugin Directory | OpenAI docs describe the curated official directory; ECC has not submitted or received listing evidence | Directory submission link or OpenAI approval path once available | Plugin owner | Track as an ITO-56/ITO-46 follow-up; do not claim an official listing | | OpenCode package | `npm run build:opencode` passed | Built `.opencode` package metadata inside npm tarball | Package owner | No separate public plugin channel identified; follows npm | | Billing/native payments | Marketplace Pro target readback, selected-target announcement preflight, env-file operator path, non-breaking operator bearer, and live selected-target gate have passed | 2026-05-20 selected-target readback, webhook provenance, selected-target announcement gate, ECC-Tools #91 `--env-file` support, ECC-Tools #92 operator bearer, ECC-Tools #93 live gate evidence | ECC Tools owner | Repeat the live gate immediately before rc.1 announcement; final copy still waits on release/plugin/live URL approvals | -| Social/longform copy | Drafts exist | Final live GitHub, npm, Claude, Codex, billing URLs | Release owner | Publish only after release/package/plugin URLs exist | +| Social/longform copy | Drafts exist; GitHub and npm links are live | Final live GitHub, npm, Claude, Codex, video, and billing URLs | Release owner | Publish only after remaining plugin/video/billing/outbound approvals exist | ## Package Rename After rc.1 @@ -110,7 +111,11 @@ npm view ecc name version description repository.url --json ecc@0.0.2 is occupied by an unrelated elliptic curve cryptography package. npm view ecc-universal name version dist-tags --json -registry latest is 1.10.0; no rc dist-tag exists yet. +registry latest is 1.10.0; next is 2.0.0-rc.1. + +npm view ecc-universal@2.0.0-rc.1 name version dist.tarball dist.integrity time --json +registry returned version 2.0.0-rc.1, the rc tarball URL, and published time +2026-05-26T00:36:22.940Z. claude plugin validate .claude-plugin/plugin.json Validation passed on Claude Code 2.1.143. 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 index 8f04df41..8aec4daf 100644 --- 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 @@ -17,8 +17,10 @@ Source commit for the clean evidence baseline this packet extends: | Platform audit | ready true, 0 open PRs, 0 open issues, 0 discussion gaps, 0 dirty files | yes | | Preview pack smoke | ready true, digest `531328aaaa53`, 5/5 checks | yes | | Release approval gate | ready false, digest `ef8f49f727b7`, 4/6 checks pass; owner decisions and live URL readbacks pending | yes | +| GitHub prerelease | live at ; prerelease true, draft false, published `2026-05-25T18:29:31Z` | yes | +| npm `next` publish | live at ; `next` points to `2.0.0-rc.1`, `latest` remains `1.10.0` | yes | | Video suite | ready true, 15/15 source assets, 13/13 suite artifacts, 12/12 publish candidates | yes | -| Release surface tests | 27/27 passed after this packet was added | yes | +| Release surface tests | 28/28 passed after the May 26 URL/package refresh | yes | | Full local suite | 2568/2568 passed before PR #2013 merged; focused GateGuard regression passed 91/91 again before PR #2011 merged | yes | | GitHub CI | PR #1998, PR #1999, PR #2000, PR #2001, PR #2002, PR #2004, PR #2008, post-PR #2006 `main`, PR #2009, post-PR #2009 `main`, post-PR #2011 `main`, and post-PR #2013 `main` all merged or advanced after green required checks | verify current head | @@ -26,8 +28,8 @@ Source commit for the clean evidence baseline this packet extends: | 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. | +| GitHub prerelease | approve | live prerelease readback | Live at . Remaining plugin/video/billing URLs stay approval-gated. | +| npm `next` publish | approve | `npm pack --dry-run`, `npm publish --tag next`, registry dist-tag readback | `ecc-universal@2.0.0-rc.1` is published on `next`; `latest` remains `1.10.0` 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. | @@ -42,7 +44,7 @@ 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 | +| npm rc package URL | `npm view ecc-universal@2.0.0-rc.1 name version dist.tarball dist.integrity time --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 | diff --git a/docs/releases/2.0.0-rc.1/partner-sponsor-talks-pack.md b/docs/releases/2.0.0-rc.1/partner-sponsor-talks-pack.md index f05eaceb..bddf9c7f 100644 --- a/docs/releases/2.0.0-rc.1/partner-sponsor-talks-pack.md +++ b/docs/releases/2.0.0-rc.1/partner-sponsor-talks-pack.md @@ -171,8 +171,9 @@ It now has a reviewed public surface for: - a gated Itô prediction-market skill pack for research, comparison, planning, and risk review, with Itô API access kept separate and approval-based. -The release is still approval-gated until the GitHub prerelease, npm package, -plugin paths, final URLs, and billing claims have live evidence. +The GitHub prerelease and npm `next` package are live now. The release remains +approval-gated for plugin paths, video URLs, final outbound URLs, and billing +claims that have not been freshly rechecked. Feedback wanted: install friction, cross-harness gaps, partner integrations, sponsor fit, prediction-market research use cases, and examples of teams using @@ -196,8 +197,9 @@ Use these with the release video suite: - The release URL ledger still has stale or placeholder links. - `npm run release:video-suite -- --format json` is not green against the intended video roots. -- The GitHub prerelease, npm package, plugin path, or billing claim is described - as live without evidence. +- The GitHub prerelease or npm package readback is contradicted, or a plugin + path, video URL, billing claim, or official directory listing is described as + live without evidence. - The message claims native payments are ready before ECC Tools billing readback passes. - The recipient needs a custom promise that is not covered by `SPONSORS.md`, 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 c337e3b0..46392752 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 @@ -1,9 +1,9 @@ # ECC v2.0.0-rc.1 Preview Pack Manifest This manifest defines the reviewed preview pack for `2.0.0-rc.1`. It is not a -release action by itself. Use it to verify that the public launch surface is -assembled before creating the GitHub prerelease, publishing npm, tagging plugin -surfaces, or posting announcements. +release action by itself. Use it to verify that the public launch surface stays +assembled after the GitHub prerelease and npm `next` publish, and before +tagging plugin surfaces, uploading video, or posting announcements. ## Pack Contents @@ -17,10 +17,10 @@ surfaces, or posting announcements. | `docs/architecture/observability-readiness.md` | Local operator-readiness gate | Verified by `npm run observability:ready` | | `docs/architecture/progress-sync-contract.md` | GitHub, Linear, handoff, roadmap, and work-item sync boundary | Checked by `node scripts/platform-audit.js --json` | | `scripts/preview-pack-smoke.js` | Deterministic preview-pack smoke gate | Verified by `npm run preview-pack:smoke` | -| `scripts/release-approval-gate.js` | Final owner-decision, live-URL, and launch-copy gate | Must return ready true before any release publish, package publish, plugin tag, video upload, announcement, or outbound batch | -| `docs/releases/2.0.0-rc.1/release-notes.md` | GitHub release copy source | Must be refreshed with final live release/package/plugin URLs before publication | +| `scripts/release-approval-gate.js` | Final owner-decision, live-URL, and launch-copy gate | Must return ready true before any additional release/package action, plugin tag, video upload, announcement, or outbound batch | +| `docs/releases/2.0.0-rc.1/release-notes.md` | GitHub release copy source | Must stay aligned with live GitHub/npm URLs and remaining plugin/video/billing gates before publication | | `docs/releases/2.0.0-rc.1/quickstart.md` | Clone-to-first-workflow path | Covers clone, install, verify, first skill, and harness switch | -| `docs/releases/2.0.0-rc.1/launch-checklist.md` | Operator launch checklist | Must remain approval-gated for release, package, plugin, and announcement actions | +| `docs/releases/2.0.0-rc.1/launch-checklist.md` | Operator launch checklist | Must remain approval-gated for plugin, video, billing, and announcement actions | | `docs/releases/2.0.0-rc.1/publication-readiness.md` | Release gate | Requires fresh evidence from the exact release commit | | `docs/releases/2.0.0-rc.1/publication-evidence-2026-05-15.md` | Current May 15 queue, roadmap, security, supply-chain watch, no-lifecycle CI install hardening, AgentShield #86 evidence-pack provenance, ECC Tools billing-gate, Actions cache purge, and `ecc2` test evidence through PR #1941 | Must be superseded by a final clean-checkout evidence file before real publication | | `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 | @@ -36,9 +36,9 @@ surfaces, or posting 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 | | `docs/releases/2.0.0-rc.1/naming-and-publication-matrix.md` | Naming, slug, and publication-path decision record | Keeps `ECC`, npm `ecc-universal`, and plugin slug `ecc` for rc.1 | -| `docs/releases/2.0.0-rc.1/release-name-plugin-publication-checklist-2026-05-18.md` | Release name, package, Claude plugin, Codex plugin, and publication-order checklist | Freezes rc.1 identity and requires final commit evidence before release, npm, plugin, billing, or announcement actions | -| `docs/releases/2.0.0-rc.1/x-thread.md` | X launch draft | Must replace placeholders with live URLs after release/package/plugin publication | -| `docs/releases/2.0.0-rc.1/linkedin-post.md` | LinkedIn launch draft | Must replace placeholders with live URLs after release/package/plugin publication | +| `docs/releases/2.0.0-rc.1/release-name-plugin-publication-checklist-2026-05-18.md` | Release name, package, Claude plugin, Codex plugin, and publication-order checklist | Freezes rc.1 identity and requires final commit evidence before plugin, billing, or announcement actions | +| `docs/releases/2.0.0-rc.1/x-thread.md` | X launch draft | Must use live GitHub/npm URLs and keep remaining plugin/video/billing URLs gated | +| `docs/releases/2.0.0-rc.1/linkedin-post.md` | LinkedIn launch draft | Must use live GitHub/npm URLs and keep remaining plugin/video/billing URLs gated | | `docs/releases/2.0.0-rc.1/article-outline.md` | Longform launch outline | Must stay release-candidate framed until GA evidence exists | | `docs/releases/2.0.0-rc.1/telegram-handoff.md` | Internal/shareable handoff copy | Must not include private workspace or credential details | | `docs/releases/2.0.0-rc.1/demo-prompts.md` | Demo prompts and proof-of-work prompts | Must keep private Hermes workflows abstracted into public examples | @@ -115,16 +115,17 @@ cd ecc2 && cargo test ## Publication Blockers -The preview pack is assembled, but publication is still blocked until these live -surfaces exist and are recorded in a final evidence file: +The preview pack is assembled, and the first release/package surfaces are now +live. Full publication is still blocked until these live surfaces and decisions +are recorded in a final evidence file: - final release URL ledger regenerated from the intended release commit; - `npm run release:approval-gate -- --format json` returning ready true after owner approvals and live URL readbacks are recorded; - final release name/plugin publication checklist rerun from the intended release commit; -- GitHub prerelease `v2.0.0-rc.1`; -- npm `ecc-universal@2.0.0-rc.1` on the `next` dist-tag; +- GitHub prerelease `v2.0.0-rc.1` live readback; +- npm `ecc-universal@2.0.0-rc.1` on the `next` dist-tag live readback; - Claude plugin tag / marketplace propagation for `ecc@ecc`; - Codex repo-marketplace distribution evidence plus official Plugin Directory availability status; @@ -137,5 +138,6 @@ surfaces exist and are recorded in a final evidence file: ## Result The rc.1 preview pack is ready for a final clean-checkout release gate, but not -for public publication without the approval-gated release, package, plugin, and -announcement steps above. +for full public publication without the remaining approval-gated release, package, plugin, and +announcement steps above. GitHub and npm are now recorded; plugin, video, +billing, and outbound approvals remain open. 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 20674cd1..9efa2713 100644 --- a/docs/releases/2.0.0-rc.1/publication-readiness.md +++ b/docs/releases/2.0.0-rc.1/publication-readiness.md @@ -63,7 +63,8 @@ The current May 20 Marketplace Pro release-gate operator dashboard is 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 +For the May 26 live/pending release URL ledger after the GitHub prerelease and +npm `next` readbacks, see [`release-url-ledger-2026-05-19.md`](release-url-ledger-2026-05-19.md). ## Release Identity Matrix @@ -72,10 +73,10 @@ For the May 19 live/pending release URL ledger after the public repo rename, see | --- | --- | --- | --- | --- | --- | --- | | Product name | ECC | `README.md`, plugin manifests, release notes | `rg -n "^# ECC\|displayName.*ECC\|affaan-m/ECC" README.md .codex-plugin/plugin.json docs/releases/2.0.0-rc.1` | `release-name-plugin-publication-checklist-2026-05-18.md` plus `release-url-ledger-2026-05-19.md` | Release owner | Evidence recorded | | GitHub repo | `affaan-m/ECC` | Git remote and release URLs | `git remote get-url origin` | `release-url-ledger-2026-05-19.md` | Release owner | Evidence recorded | -| Git tag | `v2.0.0-rc.1` | GitHub releases | `gh release view v2.0.0-rc.1 --repo affaan-m/ECC` | `release not found` | Release owner | Blocked until release approval | +| Git tag | `v2.0.0-rc.1` | GitHub releases | `gh release view v2.0.0-rc.1 --repo affaan-m/ECC` | Live prerelease at ; prerelease true, draft false | Release owner | Evidence recorded | | npm package | `ecc-universal` | `package.json` | `node -p "require('./package.json').name"` | `publication-evidence-2026-05-12.md` | Package owner | Evidence recorded | | npm version | `2.0.0-rc.1` | `VERSION`, `package.json`, lockfiles | `node -p "require('./package.json').version"` | `publication-evidence-2026-05-12.md` | Package owner | Evidence recorded | -| npm dist-tag | `next` for rc, `latest` only for GA | npm registry | `npm view ecc-universal dist-tags --json` | Current registry only has `latest: 1.10.0`; `next` is pending publish | Package owner | Blocked until publish approval | +| npm dist-tag | `next` for rc, `latest` only for GA | npm registry | `npm view ecc-universal dist-tags --json` | Registry has `latest: 1.10.0` and `next: 2.0.0-rc.1` | Package owner | Evidence recorded | | Claude plugin slug | `ecc` / `ecc@ecc` install path | `.claude-plugin/plugin.json`, `.claude-plugin/marketplace.json` | `node tests/hooks/hooks.test.js` | `publication-evidence-2026-05-12.md` | Plugin owner | Evidence recorded | | Claude plugin manifest | `2.0.0-rc.1`, no unsupported `agents` or explicit `hooks` fields | `.claude-plugin/plugin.json`, `.claude-plugin/PLUGIN_SCHEMA_NOTES.md` | `claude plugin validate .claude-plugin/plugin.json` | `publication-evidence-2026-05-12.md` | Plugin owner | Evidence recorded | | Codex plugin manifest | `2.0.0-rc.1` with shared skill source | `.codex-plugin/plugin.json` | `node tests/docs/ecc2-release-surface.test.js` | `publication-evidence-2026-05-12.md` | Plugin owner | Evidence recorded | @@ -88,13 +89,13 @@ For the May 19 live/pending release URL ledger after the public repo rename, see | Gate | Required evidence | Fresh check | Blocker field | Owner | Status | | --- | --- | --- | --- | --- | --- | -| GitHub release | Tag exists, release notes use final URLs, assets attached if needed | `gh release view v2.0.0-rc.1 --json tagName,url,isPrerelease` | `Blocker: release not found on 2026-05-12` | Release owner | Pending approval | -| npm package | `npm pack --dry-run` has expected files, version matches, rc goes to `next` | `npm pack --dry-run` and `npm publish --tag next --dry-run` where supported | `Blocker: actual publish requires approval; dry run passed with next tag` | Package owner | Dry-run passed | +| GitHub release | Tag exists, release notes use final URLs, assets attached if needed | `gh release view v2.0.0-rc.1 --json tagName,url,isPrerelease` | `Ready: v2.0.0-rc.1 prerelease is live; remaining plugin, video, billing, and outbound URLs are still gated` | Release owner | Evidence recorded | +| npm package | `npm pack --dry-run` has expected files, version matches, rc goes to `next` | `npm pack --dry-run`; `npm view ecc-universal name version dist-tags --json`; `npm view ecc-universal@2.0.0-rc.1 name version dist.tarball dist.integrity time --json` | `Ready: ecc-universal@2.0.0-rc.1 is live on next; latest remains 1.10.0` | Package owner | Evidence recorded | | Claude plugin | Manifest validates, marketplace JSON points to public repo, install docs match slug | `claude plugin validate .claude-plugin/plugin.json`; `claude plugin tag .claude-plugin --dry-run`; isolated temp-home install smoke | `Blocker: real tag creation/push requires approval` | Plugin owner | Clean-checkout dry-run and install smoke recorded | | Codex plugin | Manifest version matches package and docs, repo marketplace points at the plugin root, and OpenAI's current official Plugin Directory status is recorded | `node tests/docs/ecc2-release-surface.test.js`; `node tests/plugin-manifest.test.js`; `codex plugin marketplace add --help`; temp-home `codex plugin marketplace add ` | `Blocker: official Plugin Directory listing requires OpenAI submission/listing evidence` | Plugin owner | Repo-marketplace distribution verified; official directory pending | | OpenCode package | Build output is regenerated from source and package metadata is current | `npm run build:opencode` | `Blocker: none for local build; public distribution still follows npm/plugin release` | Package owner | Evidence recorded | | ECC Tools billing reference | Any billing claim links to verified Marketplace/App state | `env -u GITHUB_TOKEN gh repo view ECC-Tools/ECC-Tools --json nameWithOwner,isPrivate,viewerPermission` plus internal `/api/billing/readiness?selectReadyTarget=1` readback using the operator bearer path | `Ready: ECC-Tools #92 main CI and ECC-Tools #93 main CI passed; live selected-target readback returned announcementGate.ready === true on 2026-05-20; repeat before payment announcement` | ECC Tools owner | Billing evidence ready; final copy still waits on release/plugin/live URL approvals | -| Announcement copy | X, LinkedIn, GitHub release, and longform copy point to live URLs | placeholder-marker scan and `release-url-ledger-2026-05-19.md` | `Blocker: final live release/npm/plugin/billing URLs do not exist yet; live and pending URLs are separated in the May 19 ledger` | Release owner | URL ledger recorded; final URLs pending | +| Announcement copy | X, LinkedIn, GitHub release, and longform copy point to live URLs | placeholder-marker scan and `release-url-ledger-2026-05-19.md` | `Blocker: GitHub and npm links are live; remaining plugin, video, billing, and outbound URLs still need approval/readback` | Release owner | URL ledger recorded; final URLs pending | | Privileged workflow hardening | Release and maintenance workflows avoid persisted checkout tokens | `node scripts/ci/validate-workflow-security.js` | `Blocker:` | Release owner | Evidence recorded in post-hardening refresh | ## Required Command Evidence @@ -105,7 +106,7 @@ Record the exact commit SHA and command output before any publication action: | --- | --- | --- | --- | | Clean release branch | `git status --short --branch` | On intended release commit; no unrelated files | Current May 20 baseline `c2471fe5c535310f8a8008c9ed7ea9f6757b33f2`: `## 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 `eebb8a66c33e`, 33 artifacts, 5 passed, 0 failed; repeat in the final strict clean-checkout release pass | -| Release approval gate | `npm run release:approval-gate -- --format json` | Ready true only after owner decision rows are approved, live release/package/plugin/video/billing URLs are recorded, and launch/outbound copy has no placeholders or private paths | Current May 19 state is intentionally blocked because owner decisions and live URL readbacks remain approval-gated | +| Release approval gate | `npm run release:approval-gate -- --format json` | Ready true only after owner decision rows are approved, live release/package/plugin/video/billing URLs are recorded, and launch/outbound copy has no placeholders or private paths | Current May 26 state is intentionally blocked because plugin/video/billing/outbound owner decisions and URL readbacks remain approval-gated | | Harness audit | `npm run harness:audit -- --format json` | 80/80 passing | Current release gate: 80/80 across 8 applicable categories, 0 top actions | | Adapter scorecard | `npm run harness:adapters -- --check` | PASS | Current release gate: PASS, 11 adapters | | Observability readiness | `npm run observability:ready` | 21/21 passing | Current release gate: 21/21, ready true | @@ -120,7 +121,7 @@ Record the exact commit SHA and command output before any publication action: | 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 | Post-PR #2005 baseline: platform audit sampled 59 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 | | Linear roadmap | Linear project and issue readback | Detailed roadmap exists with release, security, AgentShield, ECC Tools, legacy, and observability lanes | May 18 Linear comments include ITO-57 `3fe5b2b7-c4fe-401c-a317-b40d72119cb3` and ITO-44 `fb4a4f33-6c2d-421a-bbdb-63cfad3e3ee4`; earlier evidence records the project and 16 issue lanes | | Operator readiness dashboard | `npm run operator:dashboard -- --json` | Current queue state mapped to macro-goal deliverables and incomplete gaps | Current May 20 dashboard is refreshed from the post-PR #2020 baseline; platform audit ready true, 0 open PRs, 0 open issues, 0 discussion gaps, 0 dirty files, release video suite current, selected-target billing/env-file path mirrored, and publication gates still approval-gated | -| Release URL ledger | `docs/releases/2.0.0-rc.1/release-url-ledger-2026-05-19.md` plus placeholder-marker scan | Live links and approval-gated links are separated before announcement copy is posted | Ledger records public repo/docs/npm/OpenAI Codex documentation URLs and blocks GitHub release/npm/plugin/billing/social URLs until approval-gated checks pass | +| Release URL ledger | `docs/releases/2.0.0-rc.1/release-url-ledger-2026-05-19.md` plus placeholder-marker scan | Live links and approval-gated links are separated before announcement copy is posted | Ledger records public repo/docs/GitHub prerelease/npm/OpenAI Codex documentation URLs and blocks plugin/video/billing/social URLs until approval-gated checks pass | | Release name and plugin publication checklist | `docs/releases/2.0.0-rc.1/release-name-plugin-publication-checklist-2026-05-18.md` | Name/package/plugin values are frozen, final-release commands are listed, and Claude/Codex publication paths cite current official docs | Checklist keeps `ECC`, `ecc-universal`, and plugin slug `ecc` for rc.1; no npm rename, npm publish, plugin tag, official listing, billing claim, or announcement before final evidence | ## Do Not Publish If @@ -139,8 +140,8 @@ Record the exact commit SHA and command output before any publication action: 1. Merge the release-version PR. 2. Record the required command evidence from the release commit. -3. Create or verify the GitHub prerelease. -4. Publish npm with the rc dist-tag. +3. Verify the GitHub prerelease readback. +4. Verify npm still points rc.1 at `next` and not `latest`. 5. Submit or update plugin marketplace surfaces. 6. Regenerate the release URL ledger and update release notes with final live URLs. diff --git a/docs/releases/2.0.0-rc.1/quickstart.md b/docs/releases/2.0.0-rc.1/quickstart.md index ab8aaf12..9c325a79 100644 --- a/docs/releases/2.0.0-rc.1/quickstart.md +++ b/docs/releases/2.0.0-rc.1/quickstart.md @@ -19,6 +19,15 @@ npm ci This installs the Node-based validation and packaging toolchain used by the public release surface. +To install the rc.1 package from npm instead of working from a checkout: + +```bash +npm install ecc-universal@next +``` + +`next` currently resolves to `ecc-universal@2.0.0-rc.1`; `latest` remains on +`1.10.0` during the release-candidate window. + ## Verify ```bash diff --git a/docs/releases/2.0.0-rc.1/release-name-plugin-publication-checklist-2026-05-18.md b/docs/releases/2.0.0-rc.1/release-name-plugin-publication-checklist-2026-05-18.md index 24170fad..d146e2bd 100644 --- a/docs/releases/2.0.0-rc.1/release-name-plugin-publication-checklist-2026-05-18.md +++ b/docs/releases/2.0.0-rc.1/release-name-plugin-publication-checklist-2026-05-18.md @@ -1,7 +1,8 @@ # ECC v2.0.0-rc.1 Release Name And Plugin Publication Checklist Snapshot date: 2026-05-18. Canonical repo decision refreshed 2026-05-19 -after the public repo rename to `affaan-m/ECC`. +after the public repo rename to `affaan-m/ECC`; release/package state refreshed +2026-05-26 after the GitHub prerelease and npm `next` readbacks succeeded. This checklist is the operator gate for release naming, package publication, and Claude/Codex plugin distribution. It is not a publication action by itself. @@ -30,11 +31,11 @@ Reasons: ## Current Surface Evidence -| Surface | Current value | Evidence command | 2026-05-18 result | Release action | +| Surface | Current value | Evidence command | Current result | Release action | | --- | --- | --- | --- | --- | | Git commit | `67e63e63f9bfd074bd6a21bf6bac71f3dfefa58b` | `git rev-parse HEAD` | Recorded from clean `main` before this ITO-46 evidence refresh | Re-run from final release commit | | GitHub repo | `affaan-m/ECC` | `git remote get-url origin` | `https://github.com/affaan-m/ECC.git` | Keep for rc.1 and GA | -| npm package | `ecc-universal@2.0.0-rc.1` local, `1.10.0` registry latest | `node -p "require('./package.json').name + '@' + require('./package.json').version"` and `npm view ecc-universal name version dist-tags --json` | Local rc.1 ready; registry still latest `1.10.0` | Publish rc.1 with `--tag next` after approval | +| npm package | `ecc-universal@2.0.0-rc.1` local and registry next, `1.10.0` registry latest | `node -p "require('./package.json').name + '@' + require('./package.json').version"` and `npm view ecc-universal name version dist-tags --json` | Local rc.1 ready; registry `next` points to `2.0.0-rc.1`; `latest` remains `1.10.0` | Keep rc.1 on `next`; do not move to `latest` before GA approval | | Exact npm short name | `ecc` | `npm view ecc name version description repository.url --json` | Occupied by unrelated `ecc@0.0.2` | Do not use | | Scoped npm short name | `@affaan-m/ecc` | `npm view @affaan-m/ecc name version --json` | 404 | Candidate only after migration plan | | Claude plugin | `ecc@2.0.0-rc.1` | `claude plugin validate .claude-plugin/plugin.json`; `claude plugin validate .`; `claude plugin tag .claude-plugin --dry-run` | Validation passed on Claude Code `2.1.143`; full plugin validation has one expected root `CLAUDE.md` context warning; dry run would create `ecc--v2.0.0-rc.1` | Run dry-run tag again from the final commit, then tag/push only after approval | @@ -84,15 +85,15 @@ keep the related publication action blocked. | 6 | Verify Codex repo marketplace | `codex plugin marketplace add --help`; temp-home local and GitHub-ref repo marketplace add smoke; OpenAI official directory status recorded | Missing repo marketplace or unverified official-directory status | | 7 | Verify OpenCode package | `npm run build:opencode` | Build failure | | 8 | Regenerate release URL ledger | Live and approval-gated URLs separated in `release-url-ledger-YYYY-MM-DD.md` | Placeholder, private URL, or announcement URL drift | -| 9 | Create GitHub prerelease | `gh release view v2.0.0-rc.1 --json tagName,url,isPrerelease` | Missing URL or wrong prerelease flag | -| 10 | Publish npm rc | `npm view ecc-universal version dist-tags --json` shows rc.1 on `next` | rc.1 lands on `latest` or registry output is unclear | +| 9 | Verify GitHub prerelease | `gh release view v2.0.0-rc.1 --json tagName,url,isPrerelease` | Missing URL or wrong prerelease flag | +| 10 | Verify npm rc | `npm view ecc-universal version dist-tags --json` shows rc.1 on `next` and latest still on GA/stable | rc.1 lands on `latest` or registry output is unclear | | 11 | Publish/plugin-submit | Claude official submission and Codex repo marketplace evidence recorded | Form not submitted, listing not visible, or docs status changed | | 12 | Announce | X, LinkedIn, GitHub release, and longform copy use final live URLs | Any final URL is still pending | ## Do Not Proceed -- Do not publish npm before `npm pack --dry-run --json` is captured from the - final release commit. +- Do not publish an additional npm build before `npm pack --dry-run --json` is + captured from the final release commit. - Do not create or push Claude plugin tags before `claude plugin tag .claude-plugin --dry-run` passes from the final release commit. - Do not claim an official Codex Plugin Directory listing unless OpenAI @@ -101,8 +102,8 @@ keep the related publication action blocked. Marketplace account readback returns ready. - Do not rename the npm package until rc.1 is published and a migration guide maps old install names to new names. -- Do not post social copy while any release, npm, plugin, or billing URL is - still approval-gated. +- Do not post social copy while any required plugin, video, billing, or + outbound URL is still approval-gated. ## External Distribution Sources diff --git a/docs/releases/2.0.0-rc.1/release-notes.md b/docs/releases/2.0.0-rc.1/release-notes.md index 52133b68..97efc041 100644 --- a/docs/releases/2.0.0-rc.1/release-notes.md +++ b/docs/releases/2.0.0-rc.1/release-notes.md @@ -28,6 +28,8 @@ Claude Code remains a core target. Codex, OpenCode, Cursor, Gemini, and other ha IOC coverage, queue-zero/discussion checks, a detailed Linear roadmap gate, the May 18 operator dashboard snapshot, and a live/pending release URL ledger for announcement gating. +- Published `ecc-universal@2.0.0-rc.1` to npm on the `next` dist-tag. The + `latest` tag remains on `1.10.0` during the rc.1 window. ## Since v1.10.0 @@ -58,8 +60,8 @@ feature branch: - gated Itô skill distribution as a public workflow teaser, not a live trading claim or a merge of ECC Tools and Itô ownership. - a release URL ledger that separates links which already resolve from links - that must wait for the GitHub release, npm rc package, plugin tag/directory, - and ECC Tools billing readback. + that must wait for the plugin tag/directory, video upload, and ECC Tools + billing readback. ## Why This Matters @@ -107,9 +109,16 @@ What stays local: 8. Treat `ecc2/` as an alpha control plane until release packaging and installer behavior is finalized. -## Do Not Treat This As Published Yet +## Publication State -The release candidate copy is ready for final review, but the public release is -still blocked on approval-gated actions: the GitHub prerelease, npm `next` -publish, Claude plugin tag/marketplace path, Codex Plugin Directory status, -final live URLs, and any billing or native-payments announcement. +The GitHub prerelease and npm `next` package are live: + +- GitHub prerelease: + +- npm rc package: + + +This is still a release candidate, not a GA claim. Remaining public claims stay +approval-gated until readback exists for the Claude plugin tag/marketplace path, +Codex repo-marketplace or official Plugin Directory status, video upload URLs, +ECC Tools billing/native-payments readiness, and final outbound copy. diff --git a/docs/releases/2.0.0-rc.1/release-url-ledger-2026-05-19.md b/docs/releases/2.0.0-rc.1/release-url-ledger-2026-05-19.md index c5ea4afa..33da969e 100644 --- a/docs/releases/2.0.0-rc.1/release-url-ledger-2026-05-19.md +++ b/docs/releases/2.0.0-rc.1/release-url-ledger-2026-05-19.md @@ -1,19 +1,20 @@ # ECC v2.0.0-rc.1 Release URL Ledger This ledger separates links that are already public from links that only become -valid after the approval-gated release, package, plugin, and announcement -steps. Regenerate it from the final release commit before posting any public -announcement. +valid after the remaining approval-gated plugin, video, billing, and +announcement steps. Regenerate it from the final release commit before posting +any public announcement. -Refreshed on 2026-05-19 after the public repository rename to -`affaan-m/ECC`. The final release pass must replace commit-specific evidence -with output from the exact release commit. +Refreshed on 2026-05-26 after the GitHub prerelease and npm `next` package +readbacks succeeded. Remaining plugin, video, billing, and outbound surfaces +must still be checked from the exact release commit before publication. ## Live Now | Surface | URL | Verification | | --- | --- | --- | | Repository | | `git remote get-url origin` returns `https://github.com/affaan-m/ECC.git` | +| GitHub prerelease URL | | `gh release view v2.0.0-rc.1 --repo affaan-m/ECC --json tagName,url,isPrerelease,isDraft,publishedAt` returned prerelease `true`, draft `false`, published `2026-05-25T18:29:31Z` | | Release pack folder | | In-tree release pack | | Release notes draft | | In-tree release copy | | Hermes setup guide | | In-tree sanitized Hermes guide | @@ -22,7 +23,8 @@ with output from the exact release commit. | May 18 operator dashboard | | Previous prompt-to-artifact dashboard | | May 19 operator dashboard | | Previous prompt-to-artifact dashboard with hypergrowth, video, and outbound lanes | | May 20 operator dashboard | | Current prompt-to-artifact dashboard with Marketplace Pro release-gate sync | -| npm package page | | `npm view ecc-universal name version dist-tags --json` returned `latest: 1.10.0`; rc.1 is not published yet | +| npm package page | | `npm view ecc-universal name version dist-tags versions --json` returned `latest: 1.10.0`, `next: 2.0.0-rc.1`, and included `2.0.0-rc.1` in `versions` | +| npm rc package URL | | `npm view ecc-universal@2.0.0-rc.1 name version dist.tarball dist.integrity time --json` returned version `2.0.0-rc.1`, tarball `https://registry.npmjs.org/ecc-universal/-/ecc-universal-2.0.0-rc.1.tgz`, and published time `2026-05-26T00:36:22.940Z` | | Codex marketplace CLI docs | | Official docs list `codex plugin marketplace add` for GitHub shorthand, Git URLs, SSH URLs, and local marketplace roots | | Codex official Plugin Directory status | | Official docs say public Plugin Directory publishing and self-serve management are coming soon | @@ -30,12 +32,10 @@ with output from the exact release commit. | Surface | Intended URL or command | Gate before use | | --- | --- | --- | -| GitHub prerelease | | `gh release view v2.0.0-rc.1 --repo affaan-m/ECC --json tagName,url,isPrerelease` must return the prerelease | -| npm rc package | | `npm publish --tag next` approval and post-publish `npm view ecc-universal dist-tags --json` | | Claude plugin tag | `claude plugin tag .claude-plugin --dry-run`, then real tag only after approval | Clean release commit and plugin tag/push approval | | Codex repo marketplace install | `codex plugin marketplace add affaan-m/ECC --ref v2.0.0-rc.1` | GitHub tag must exist; official Plugin Directory submission remains separate | | ECC Tools native-payments announcement | ECC Tools Marketplace/App URL plus selected-target billing readiness readback through the operator bearer path | Marketplace-managed selected target returned `announcementGate.ready === true` on 2026-05-20; repeat immediately before publication | -| Public announcements | X, LinkedIn, GitHub release, and longform URLs | GitHub release, npm, plugin, and billing URLs must resolve first | +| Public announcements | X, LinkedIn, GitHub release, and longform URLs | Remaining plugin, video, and billing URLs must resolve or be explicitly marked blocked; exact outbound copy still needs owner approval | ## Pre-Post Check @@ -45,11 +45,13 @@ Run these immediately before publication: git status --short --branch gh release view v2.0.0-rc.1 --repo affaan-m/ECC --json tagName,url,isPrerelease npm view ecc-universal name version dist-tags --json +npm view ecc-universal@2.0.0-rc.1 name version dist.tarball dist.integrity time --json codex plugin marketplace add --help rg -n "TODO|TBD|PLACEHOLDER" docs/releases/2.0.0-rc.1 npm run preview-pack:smoke npm run release:approval-gate -- --format json ``` -Do not post the social or notification copy until the approval-gated URLs above -resolve from a clean release commit. +Do not claim plugin propagation, official Codex Plugin Directory listing, video +upload, ECC Tools billing/native payments, or final outbound readiness until the +remaining approval-gated URLs above resolve from a clean release commit. diff --git a/docs/releases/2.0.0-rc.1/x-thread.md b/docs/releases/2.0.0-rc.1/x-thread.md index fa745dbd..e406e0c3 100644 --- a/docs/releases/2.0.0-rc.1/x-thread.md +++ b/docs/releases/2.0.0-rc.1/x-thread.md @@ -95,7 +95,7 @@ Together they make the work feel less like scattered chat windows and more like The public docs and reusable surfaces are ready for review. -The deeper local integrations stay local until they are sanitized, and publication still waits on the GitHub release, npm, plugin, and final URL gates. +The deeper local integrations stay local until they are sanitized. The GitHub prerelease and npm `next` package are live; plugin, video, billing, and final outbound URLs still stay behind the approval gate. 14/ Start here: diff --git a/package.json b/package.json index 0961b07b..5e3474a7 100644 --- a/package.json +++ b/package.json @@ -53,6 +53,8 @@ "AGENTS.md", "VERSION", "agent.yaml", + "assets/ecc-icon.svg", + "assets/hero.png", "agents/", "commands/", "docs/de-DE/", diff --git a/tests/plugin-manifest.test.js b/tests/plugin-manifest.test.js index e84bf307..1661d433 100644 --- a/tests/plugin-manifest.test.js +++ b/tests/plugin-manifest.test.js @@ -356,6 +356,30 @@ test('codex plugin.json uses canonical ECC repo and display name', () => { assert.strictEqual(codexPlugin.interface.displayName, 'ECC'); }); +test('codex plugin presentation assets exist and ship in npm package', () => { + assert.ok(Array.isArray(rootPackage.files), 'Expected package.json files array'); + const packageFiles = new Set(rootPackage.files); + + for (const field of ['composerIcon', 'logo']) { + const assetPath = codexPlugin.interface[field]; + assert.ok(assetPath, `Expected interface.${field}`); + assert.ok( + assetPath.startsWith('./assets/'), + `Expected interface.${field} to point at a root assets path, got ${assetPath}`, + ); + + const packagePath = assetPath.replace(/^\.\//, ''); + assert.ok( + fs.existsSync(path.join(repoRoot, packagePath)), + `Expected interface.${field} asset to exist: ${packagePath}`, + ); + assert.ok( + packageFiles.has(packagePath), + `Expected package.json files to include interface.${field} asset: ${packagePath}`, + ); + } +}); + // ── .mcp.json at plugin root ────────────────────────────────────────────────── // Per official docs: keep .mcp.json at plugin root, NOT inside .codex-plugin/ console.log('\n=== .mcp.json (plugin root) ===\n'); diff --git a/tests/scripts/npm-publish-surface.test.js b/tests/scripts/npm-publish-surface.test.js index b93b8073..17509d3e 100644 --- a/tests/scripts/npm-publish-surface.test.js +++ b/tests/scripts/npm-publish-surface.test.js @@ -78,6 +78,8 @@ function buildExpectedPublishPaths(repoRoot) { "schemas", "agent.yaml", "VERSION", + "assets/ecc-icon.svg", + "assets/hero.png", ] const exclusionPaths = [ "!**/__pycache__/**", @@ -141,6 +143,8 @@ function main() { ".qwen/QWEN.md", ".claude-plugin/plugin.json", ".codex-plugin/plugin.json", + "assets/ecc-icon.svg", + "assets/hero.png", "schemas/install-state.schema.json", "skills/backend-patterns/SKILL.md", ]) {