docs: record rc1 live package readbacks (#2117)

This commit is contained in:
Affaan Mustafa 2026-06-02 19:32:59 +08:00 committed by GitHub
parent 64cd1ba248
commit d86fadad0d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
19 changed files with 171 additions and 90 deletions

View File

@ -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)

View File

@ -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.",

View File

@ -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"

1
.gitignore vendored
View File

@ -44,6 +44,7 @@ yarn-error.log*
.pnpm-debug.log*
.yarn/
lerna-debug.log*
*.tgz
# Build outputs
dist/

6
assets/ecc-icon.svg Normal file
View File

@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" role="img" aria-labelledby="title">
<title id="title">ECC</title>
<rect width="128" height="128" rx="28" fill="#111827"/>
<path d="M26 39h55v13H42v12h34v12H42v13h40v13H26V39Z" fill="#F59E0B"/>
<path d="M83 39h19v13H83V39Zm0 25h19v13H83V64Zm0 25h19v13H83V89Z" fill="#E07856"/>
</svg>

After

Width:  |  Height:  |  Size: 353 B

View File

@ -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.

View File

@ -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 <https://github.com/affaan-m/ECC/releases/tag/v2.0.0-rc.1> | 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 <https://github.com/affaan-m/ECC/releases/tag/v2.0.0-rc.1> | 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.

View File

@ -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 <https://github.com/affaan-m/ECC/releases/tag/v2.0.0-rc.1>; prerelease true, draft false, published `2026-05-25T18:29:31Z` | yes |
| npm `next` publish | live at <https://www.npmjs.com/package/ecc-universal/v/2.0.0-rc.1>; `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 <https://github.com/affaan-m/ECC/releases/tag/v2.0.0-rc.1>. 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 <local-checkout>` readback | URL ledger, publication readiness |
| Primary launch video URL | uploaded owner-approved primary launch video | GitHub release, X, LinkedIn, longform |

View File

@ -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`,

View File

@ -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.

View File

@ -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 <https://github.com/affaan-m/ECC/releases/tag/v2.0.0-rc.1>; 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 <local-checkout>` | `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.

View File

@ -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

View File

@ -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

View File

@ -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:
<https://github.com/affaan-m/ECC/releases/tag/v2.0.0-rc.1>
- npm rc package:
<https://www.npmjs.com/package/ecc-universal/v/2.0.0-rc.1>
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.

View File

@ -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 | <https://github.com/affaan-m/ECC> | `git remote get-url origin` returns `https://github.com/affaan-m/ECC.git` |
| GitHub prerelease URL | <https://github.com/affaan-m/ECC/releases/tag/v2.0.0-rc.1> | `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 | <https://github.com/affaan-m/ECC/tree/main/docs/releases/2.0.0-rc.1> | In-tree release pack |
| Release notes draft | <https://github.com/affaan-m/ECC/blob/main/docs/releases/2.0.0-rc.1/release-notes.md> | In-tree release copy |
| Hermes setup guide | <https://github.com/affaan-m/ECC/blob/main/docs/HERMES-SETUP.md> | In-tree sanitized Hermes guide |
@ -22,7 +23,8 @@ with output from the exact release commit.
| May 18 operator dashboard | <https://github.com/affaan-m/ECC/blob/main/docs/releases/2.0.0-rc.1/operator-readiness-dashboard-2026-05-18.md> | Previous prompt-to-artifact dashboard |
| May 19 operator dashboard | <https://github.com/affaan-m/ECC/blob/main/docs/releases/2.0.0-rc.1/operator-readiness-dashboard-2026-05-19.md> | Previous prompt-to-artifact dashboard with hypergrowth, video, and outbound lanes |
| May 20 operator dashboard | <https://github.com/affaan-m/ECC/blob/main/docs/releases/2.0.0-rc.1/operator-readiness-dashboard-2026-05-20.md> | Current prompt-to-artifact dashboard with Marketplace Pro release-gate sync |
| npm package page | <https://www.npmjs.com/package/ecc-universal> | `npm view ecc-universal name version dist-tags --json` returned `latest: 1.10.0`; rc.1 is not published yet |
| npm package page | <https://www.npmjs.com/package/ecc-universal> | `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 | <https://www.npmjs.com/package/ecc-universal/v/2.0.0-rc.1> | `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 | <https://developers.openai.com/codex/cli/reference#codex-plugin-marketplace> | Official docs list `codex plugin marketplace add` for GitHub shorthand, Git URLs, SSH URLs, and local marketplace roots |
| Codex official Plugin Directory status | <https://developers.openai.com/codex/plugins/build#publish-official-public-plugins> | 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 | <https://github.com/affaan-m/ECC/releases/tag/v2.0.0-rc.1> | `gh release view v2.0.0-rc.1 --repo affaan-m/ECC --json tagName,url,isPrerelease` must return the prerelease |
| npm rc package | <https://www.npmjs.com/package/ecc-universal/v/2.0.0-rc.1> | `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.

View File

@ -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:

View File

@ -53,6 +53,8 @@
"AGENTS.md",
"VERSION",
"agent.yaml",
"assets/ecc-icon.svg",
"assets/hero.png",
"agents/",
"commands/",
"docs/de-DE/",

View File

@ -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');

View File

@ -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",
]) {