diff --git a/docs/ECC-2.0-GA-ROADMAP.md b/docs/ECC-2.0-GA-ROADMAP.md index ba557917..136e4848 100644 --- a/docs/ECC-2.0-GA-ROADMAP.md +++ b/docs/ECC-2.0-GA-ROADMAP.md @@ -78,14 +78,16 @@ As of 2026-05-19: - `docs/releases/2.0.0-rc.1/publication-evidence-2026-05-19.md` records the current May 19 queue-zero state, canonical ECC identity merge, release video suite gate, partner/sponsor/talk outreach pack, preview-pack smoke digest - `3bb55807407b`, local 2544-test suite, and PR #1993 CI success. The May 18 + `bc2bf157616e`, local 2544-test suite, and PR #1993 CI success. The May 18 evidence remains the detailed supply-chain and publication-path snapshot. -- `docs/releases/2.0.0-rc.1/operator-readiness-dashboard-2026-05-18.md` +- `docs/releases/2.0.0-rc.1/operator-readiness-dashboard-2026-05-19.md` regenerates the ITO-44 prompt-to-artifact dashboard from live platform audit evidence: PR queue, issue queue, discussion queue, local worktree gate, - dashboard generation, and supply-chain loop are current; publication, plugin, - billing, AgentShield, ECC Tools, legacy, and Linear/productized sync lanes - remain the next work. + dashboard generation, and supply-chain loop are current; the dashboard now + also tracks the `$1,728/mo` to `$10,000/mo` hypergrowth baseline, release + video-suite lane, and partner/sponsor/talk outbound pack; publication, + plugin, billing, AgentShield, ECC Tools, and final outbound approval remain + the next work. - `docs/releases/2.0.0-rc.1/publication-evidence-2026-05-17.md` records the May 17 queue-zero state, Japanese localization merge, Dependabot TypeScript and Node type merges, post-merge ja-JP lint repair, Mini Shai-Hulud/TanStack @@ -735,7 +737,7 @@ is not complete unless the evidence column exists and has been freshly verified. | Manage repository discussions | Repo-family discussion recheck plus response playbook | Platform audit reports 0 discussion maintainer-touch gaps and 0 answerable Q&A missing accepted answers; trunk still has 58 total discussions; `docs/architecture/discussion-response-playbook.md` distinguishes support, maintainer coordination, stale/concluded, release, informational, and security-sensitive response paths | Complete | | Manage PR discussions | PR review/comment closure plus merge/close state | ECC #1990-#1993 merged through the harness audit, canonical identity, release video suite, and growth outreach batch; no open tracked PRs remain | Complete | | Salvage useful stale work | `docs/stale-pr-salvage-ledger.md` plus `docs/legacy-artifact-inventory.md` | Ledger records salvaged, superseded, skipped, and manual-review tails; #1815-#1818 added cost tracking, skill scout, frontend design guidance, code-reviewer false-positive guardrails, and the May 12 gap pass; #1687, #1609, #1563, #1564, and #1565 localization tails are attached to Linear ITO-55 for language-owner review and no automatic import remains release-blocking | Complete; repeat legacy scan before release | -| ECC 2.0 preview pack ready | Release docs, quickstart, publication readiness, release notes | `docs/releases/2.0.0-rc.1/` and readiness docs are in-tree; May 19 evidence records queue-zero state, canonical ECC identity, release video suite, growth outreach pack, local 2544-test suite, PR #1993 CI success, and preview-pack smoke digest `3bb55807407b` | Needs final release approval | +| ECC 2.0 preview pack ready | Release docs, quickstart, publication readiness, release notes | `docs/releases/2.0.0-rc.1/` and readiness docs are in-tree; May 19 evidence records queue-zero state, canonical ECC identity, release video suite, growth outreach pack, local 2544-test suite, PR #1993 CI success, May 19 operator dashboard, and preview-pack smoke digest `bc2bf157616e` | Needs final release approval | | Hermes specialized skills included safely | Hermes setup/import docs and sanitized skill surface | Hermes setup and import playbook are public; secrets stay local | Needs final release review | | Naming and rename readiness | Naming matrix across package/plugin/docs/social surfaces | `docs/releases/2.0.0-rc.1/naming-and-publication-matrix.md` records current package, repo, Claude plugin, Codex plugin, OpenCode, and npm availability evidence | Complete for rc.1; post-rc rename remains future work | | Claude and Codex plugin publication | Contact/submission path with required artifacts and status | Publication readiness, naming matrix, and May 12 dry-run evidence document plugin validation, clean-checkout Claude tag/install smoke, and Codex marketplace CLI shape | Needs explicit approval for real tag/push and marketplace submission | diff --git a/docs/releases/2.0.0-rc.1/operator-readiness-dashboard-2026-05-19.md b/docs/releases/2.0.0-rc.1/operator-readiness-dashboard-2026-05-19.md new file mode 100644 index 00000000..1ec9b32d --- /dev/null +++ b/docs/releases/2.0.0-rc.1/operator-readiness-dashboard-2026-05-19.md @@ -0,0 +1,65 @@ +# ECC Operator Readiness Dashboard + +This dashboard is generated by `npm run operator:dashboard`. It is an operator snapshot, not release approval. + +Generated: 2026-05-19T11:58:26.640Z +Commit: dafd447977d07d1fdc84e200a9523f9b296cb269 +Status: work remaining + +## Current Status + +| Area | Status | Evidence | +| --- | --- | --- | +| PR queue | Current | 0 open PRs across tracked repos | +| Issue queue | Current | 0 open issues across tracked repos | +| Discussions | Current | 0 need maintainer touch; 0 missing accepted answer | +| Local worktree | Current | 0 blocking dirty files; 0 ignored dirty entries | +| Dashboard generation | Current | platform audit ready: true; GitHub skipped: false | +| Publication | Not complete | release, npm, plugin, billing, and announcement gates are tracked below | + +## Growth Baseline + +| Metric | Current | Target | Gap | +| --- | ---: | ---: | ---: | +| MRR | $1,728/mo | $10,000/mo | $8,272/mo | + +Growth lanes: GitHub Sponsors and OSS partner sponsors; ECC Tools Pro subscriptions; consulting and implementation contracts; talks, podcasts, conference demos, and partner webinars. + +## Prompt-To-Artifact Checklist + +| Objective requirement | Artifact or gate | Status | Evidence | Gap | +| --- | --- | --- | --- | --- | +| Keep public PRs below 20 | scripts/platform-audit.js live GitHub sweep plus owner-wide queue cleanup ledger | current | 0 open PRs across 5 tracked repos; 0 owner-wide open PRs after cleanup | repeat platform:audit and owner-wide gh search before release | +| Keep public issues below 20 | scripts/platform-audit.js live GitHub sweep plus owner-wide queue cleanup ledger | current | 0 open issues across 5 tracked repos; 0 owner-wide open issues after cleanup | repeat platform:audit and owner-wide gh search before release | +| Respond and manage repository discussions | scripts/platform-audit.js discussion summary | current | 0 need maintainer touch; 0 answerable discussions missing accepted answer | repeat before release | +| Build ITO-44 completion dashboard into a repeatable command | npm run operator:dashboard | complete | operator:dashboard package script exists | keep generated dashboard attached to publication evidence | +| ECC 2.0 preview pack ready | docs/releases/2.0.0-rc.1/preview-pack-manifest.md | current | preview pack manifest and deterministic smoke gate are in-tree | repeat clean-checkout preview-pack smoke before publication | +| Include Hermes specialized skills safely | docs/HERMES-SETUP.md and skills/hermes-imports/SKILL.md | current | Hermes setup/import artifacts are covered by preview-pack smoke | repeat preview-pack smoke before release review | +| Prepare name-change, Claude plugin, and Codex plugin paths | naming-and-publication-matrix plus release-name-plugin-publication checklist plus publication-readiness | in_progress | naming matrix, release publication checklist, and plugin readiness gates exist | real tag/push, marketplace submission, and final channel choice remain approval-gated | +| Prepare release notes, articles, tweets, and push notifications | docs/releases/2.0.0-rc.1 social and release-copy files | in_progress | release notes, X thread, LinkedIn draft, and URL ledger are present | final live release/npm/plugin/billing URLs and publish approval still pending | +| Create a second-phase hypergrowth release command center | docs/releases/2.0.0/ecc-2-hypergrowth-release-command-center.md plus May 19 evidence | current | current MRR, target MRR, gap, release claim, video lane, distribution plan, and approval boundaries are in-tree | refresh after every MRR, channel, or approval-state change before public launch | +| Produce the ECC 2.0 release video suite | docs/releases/2.0.0-rc.1/video-suite-production.md and npm run release:video-suite | in_progress | video production manifest and deterministic video-suite gate are wired for launch video, short clips, captions, timeline, and self-eval evidence | render final owner-approved MP4s, captions, platform reframes, and editable timeline before posting | +| Prepare sponsor, partner, consulting, podcast, talk, and Discussion copy | docs/releases/2.0.0-rc.1/partner-sponsor-talks-pack.md | in_progress | sponsor outbound, platform partner DM, consulting intro, talk/podcast pitch, GitHub Discussion announcement, CTA hooks, and do-not-send gate are drafted | replace final URLs after publication gates, then get explicit approval before outbound or personal-account posts | +| Advance AgentShield enterprise iteration | AgentShield PR evidence plus enterprise roadmap | in_progress | AgentShield policy promotion `reviewItems` landed in `87aec47`; package-manager hardening drift detection landed in `28d08c7`; workflow action runtime pins were refreshed in `659f569`; npm age-gate guidance was corrected in `ee585cd`; package-manager hardening Action outputs landed in `1124535`; policy-promotion Action outputs and runtime-smoke job-summary evidence landed in `1593925`; fleet review ticket payloads and current Mini Shai-Hulud IOC breadcrumbs landed in `840952a`; ECC-Tools consumes those outputs in `8658951`, surfaces operator-readable status/pack/count/digest telemetry in `16c537f`, and renders hosted promotion judge audit traces in `05d4e82`; all are mirrored in the GA roadmap | deepen live operator approval/readback after Marketplace/payment gates | +| Advance ECC Tools native payments and AI-native harness-agnostic app | ECC Tools PR evidence, billing gate, hosted analysis lanes | in_progress | billing announcement gate, hosted analysis lanes, AgentShield fleet-summary consumption, hosted finding evidence paths, harness-route policy linking, policy-promotion Action-output telemetry, operator-visible promotion output details, hosted promotion judge audit traces, billing announcement preflight, aggregate production billing KV readback, Wrangler OAuth readback, target-account billing readback, provenance-aware Marketplace billing-state gates, sanitized Marketplace plan/action provenance counts, hosted team-learning feedback controls, and ECC-Tools Dependabot alert remediation are mirrored in the GA roadmap | create or verify Marketplace-managed Pro target billing-state with webhook provenance, configure the target account and INTERNAL_API_SECRET, then rerun target readback and the live announcement gate | +| Audit, prune, or attach legacy work | docs/stale-pr-salvage-ledger.md and legacy inventory | current | legacy salvage ledger and inventory are current; all localization tails are attached to Linear ITO-55 for manual language-owner review | repeat legacy scan before release | +| Keep Linear roadmap detailed and progress tracking synchronized | Linear project mirror plus progress-sync contract | current | Linear live sync and project progress surface are current; progress-sync contract defines the file-backed work-items/status path | repeat Linear/project status update and local work-items sync after each significant merge batch | +| Provide ECC 2.0 observability for self-use | observability readiness gate | complete | observability:ready command and readiness doc exist | runtime/dashboard implementation can continue after release gates | +| Keep Mini Shai-Hulud/TanStack protection loop current | supply-chain watch plus runbook plus AgentShield package-manager hardening | current | scheduled supply-chain watch emits IOC/advisory-source refresh artifacts; ECC scanner covers gh-token-monitor token-store persistence; AgentShield now detects known AI-tool persistence IOCs, npm lifecycle/token drift, unsupported npm age-key drift, and pnpm/Yarn cooldown drift; current-head watch evidence and ITO-57 May 18 Linear evidence updates are current | repeat advisory/source refresh and Linear sync after each significant supply-chain batch | + +## Top Actions + +- `naming-and-plugin-publication`: real tag/push, marketplace submission, and final channel choice remain approval-gated +- `release-notes-and-notifications`: final live release/npm/plugin/billing URLs and publish approval still pending +- `release-video-suite`: render final owner-approved MP4s, captions, platform reframes, and editable timeline before posting +- `partner-sponsor-talks-pack`: replace final URLs after publication gates, then get explicit approval before outbound or personal-account posts +- `agentshield-enterprise-iteration`: deepen live operator approval/readback after Marketplace/payment gates +- `ecc-tools-next-level`: create or verify Marketplace-managed Pro target billing-state with webhook provenance, configure the target account and INTERNAL_API_SECRET, then rerun target readback and the live announcement gate + +## Next Work Order + +1. Regenerate this dashboard from the final release commit before publication evidence is recorded. +2. Render the owner-approved primary launch video, short clips, captions, reframes, and editable timeline from the video-suite production manifest. +3. Replace final release, npm, plugin, billing, and video URLs in the partner/sponsor/talk pack, then get explicit approval before outbound. +4. Repeat ITO-57 Linear/project status sync after the next significant merge batch or advisory-source refresh. +5. Create or verify Marketplace-managed Pro target billing-state with webhook provenance, configure the target account and INTERNAL_API_SECRET, then rerun target readback and the live announcement gate before publishing native-payments copy. 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 ab771b0c..0763f3ed 100644 --- a/docs/releases/2.0.0-rc.1/preview-pack-manifest.md +++ b/docs/releases/2.0.0-rc.1/preview-pack-manifest.md @@ -25,9 +25,10 @@ surfaces, or posting announcements. | `docs/releases/2.0.0-rc.1/publication-evidence-2026-05-16.md` | Current May 16/17 queue cleanup, recsys skill merge, GateGuard triage, PR #1947 supply-chain protection, AgentShield #87 plugin-cache confidence evidence, AgentShield #88 evidence-pack inspect/readback, AgentShield #89 evidence-pack fleet routing, AgentShield #90 fleet review items, AgentShield #91 policy export, AgentShield #92 policy promotion, ECC-Tools #76 fleet-summary consumption, ECC-Tools #77 hosted finding evidence paths, ECC-Tools #78 harness policy-route linking, dashboard refresh, and combined Node/Rust/release-surface gate evidence through the May 16 mirror | Must still be repeated from a strict clean checkout before real publication | | `docs/releases/2.0.0-rc.1/publication-evidence-2026-05-17.md` | May 17 queue-zero state, Japanese localization merge, Dependabot TypeScript and Node type merges, post-merge ja-JP lint repair, Mini Shai-Hulud/TanStack protection recheck, npm audit/signature checks, legacy and Linear progress routing, deterministic preview-pack smoke, operator dashboard refresh, Linear sync, and GitHub CI evidence for `27dc2918` | Superseded by the May 18 evidence snapshot; repeat from a strict clean checkout before real publication | | `docs/releases/2.0.0-rc.1/publication-evidence-2026-05-18.md` | May 18 queue-zero state, #1970/#1971/#1972 merge batch, #1978 review/closure, supply-chain recheck, AgentShield evidence mirror, Linear sync, current-head CI/security scan success for `4470e2e6`, and ITO-46 naming/plugin publication closure | Superseded by the May 19 ECC identity, video, and growth evidence snapshot | -| `docs/releases/2.0.0-rc.1/publication-evidence-2026-05-19.md` | Current May 19 evidence for canonical ECC identity, release video suite, partner/sponsor/talk outreach pack, preview-pack smoke digest `3bb55807407b`, 2544-test local suite, and PR #1993 CI success | Current strongest readiness snapshot; must still be repeated from a strict clean checkout before real publication | +| `docs/releases/2.0.0-rc.1/publication-evidence-2026-05-19.md` | Current May 19 evidence for canonical ECC identity, release video suite, partner/sponsor/talk outreach pack, May 19 operator dashboard, preview-pack smoke digest `bc2bf157616e`, 2544-test local suite, and PR #1993 CI success | Current strongest readiness snapshot; must still be repeated from a strict clean checkout before real publication | | `docs/releases/2.0.0-rc.1/operator-readiness-dashboard-2026-05-17.md` | Previous prompt-to-artifact operator dashboard | Superseded by the May 18 generated dashboard | -| `docs/releases/2.0.0-rc.1/operator-readiness-dashboard-2026-05-18.md` | Current prompt-to-artifact operator dashboard | Shows PR/issue/discussion/platform/supply-chain gates current and publication, plugin, billing, AgentShield, ECC Tools, legacy, and Linear productization gaps still open | +| `docs/releases/2.0.0-rc.1/operator-readiness-dashboard-2026-05-18.md` | Previous prompt-to-artifact operator dashboard | Superseded by the May 19 generated dashboard | +| `docs/releases/2.0.0-rc.1/operator-readiness-dashboard-2026-05-19.md` | Current prompt-to-artifact operator dashboard | Shows PR/issue/discussion/platform/supply-chain gates current and adds the current `$1,728/mo` to `$10,000/mo` hypergrowth, release-video, and outbound-pack operating lanes | | `docs/releases/2.0.0-rc.1/release-url-ledger-2026-05-19.md` | Live URL and approval-gated URL ledger for release copy | Must be regenerated from the final release commit before public announcements | | `docs/releases/2.0.0-rc.1/video-suite-production.md` | Release video production manifest | Gates local media inventory, rough primary render, captions, timeline, self-eval, and no-private-path publication rules | | `docs/releases/2.0.0-rc.1/partner-sponsor-talks-pack.md` | Partner, sponsor, consulting, conference, podcast, and discussion copy | Must stay approval-gated and avoid live billing, release, package, or plugin claims without evidence | diff --git a/docs/releases/2.0.0-rc.1/publication-evidence-2026-05-19.md b/docs/releases/2.0.0-rc.1/publication-evidence-2026-05-19.md index c95fad46..f0b81fcf 100644 --- a/docs/releases/2.0.0-rc.1/publication-evidence-2026-05-19.md +++ b/docs/releases/2.0.0-rc.1/publication-evidence-2026-05-19.md @@ -8,9 +8,9 @@ social announcement. | Field | Evidence | | --- | --- | -| Upstream main | `7a0645ed47d6a3aca54b4a214aab6dfaa58e770d` | +| Upstream main | `c07276a347f8dac4945d2ad294124a708c19b108` | | Git remote | `https://github.com/affaan-m/ECC.git` | -| Evidence scope | Current `main` after PR #1990 harness-audit GitHub integration scoring, PR #1991 canonical ECC identity gate, PR #1992 release video-suite gate, and PR #1993 growth outreach pack | +| Evidence scope | Current `main` after PR #1990 harness-audit GitHub integration scoring, PR #1991 canonical ECC identity gate, PR #1992 release video-suite gate, PR #1993 growth outreach pack, and PR #1994 May 19 publication evidence refresh | | Local status caveat | `git status --short --branch` was clean after pulling `origin/main`; generated evidence files are committed after the source snapshot they describe | The release operator must repeat all publish-facing checks from the exact final @@ -42,13 +42,15 @@ Tracked repositories in the platform audit were: | PR #1991 | Merged canonical ECC release identity gate across README, plugin/package metadata, OpenCode surfaces, Marketplace metadata, audit defaults, quickstart, release URL ledger, naming/publication matrix, and release tests | | PR #1992 | Merged the release video-suite gate, production manifest, validator, package file surface, preview-pack smoke wiring, release-surface tests, and compact CI JSON output | | PR #1993 | Merged the partner, sponsor, consulting, conference, podcast, GitHub Discussion, and video CTA pack for the hypergrowth outbound lane | +| PR #1994 | Merged the May 19 publication-evidence refresh, platform-audit evidence gate, preview-pack smoke evidence gate, and URL/readiness/roadmap references | ## Release And Growth Evidence | Gate | Command | Result | | --- | --- | --- | | Release-surface tests | `node tests/docs/ecc2-release-surface.test.js` | 25 passed, 0 failed | -| Preview-pack smoke | `npm run preview-pack:smoke -- --format json` | Ready true; digest `3bb55807407b`; 29 required artifacts; 5 passed, 0 failed | +| Preview-pack smoke | `npm run preview-pack:smoke -- --format json` | Ready true; digest `bc2bf157616e`; 30 required artifacts; 5 passed, 0 failed | +| Operator dashboard | `npm run operator:dashboard -- --markdown --write docs/releases/2.0.0-rc.1/operator-readiness-dashboard-2026-05-19.md` | Generated May 19 dashboard with platform audit ready true, 0 tracked PRs, 0 tracked issues, 0 discussion gaps, `$1,728/mo` current MRR, `$10,000/mo` target MRR, and top actions for plugin publication, notifications, release video, outbound approval, AgentShield, and ECC Tools billing | | Release video suite | `npm run release:video-suite -- --format json --summary` with `ECC_VIDEO_SOURCE_ROOT` and `ECC_VIDEO_RELEASE_SUITE_ROOT` | Ready true; 15/15 source assets present; 13/13 render, timeline, caption, EDL, and segment artifacts present; primary rough render is 144.759 seconds and 106.78 MB | | Full local suite | `node tests/run-all.js` | 2544 passed, 0 failed | | PR #1993 CI | GitHub Actions run `26093792219` | Completed successfully for `d9ac22c697d9a8a8771512ab01e6df857c16776d`; all reported checks passed, including lint, validation, security scan, coverage, GitGuardian, and the macOS/Ubuntu/Windows test matrix | @@ -64,6 +66,7 @@ Tracked repositories in the platform audit were: | Video proof | `video-suite-production.md` gates the local rough render, timeline, captions, source inventory, self-eval, and no-private-path publication rules | | Growth proof | `partner-sponsor-talks-pack.md` provides approval-gated copy for sponsors, partners, consulting, talks, podcasts, GitHub Discussion, and video CTAs | | Business baseline | Hypergrowth command center and partner pack use `$1,728/mo` current MRR, `$10,000/mo` target MRR, and `$8,272/mo` gap | +| Operator dashboard | `operator-readiness-dashboard-2026-05-19.md` pulls the growth baseline into the same queue, publication, video, outbound, AgentShield, ECC Tools, Linear, and supply-chain control surface | ## Current Publication Blockers @@ -89,7 +92,8 @@ Tracked repositories in the platform audit were: The tracked public PR queue, issue queue, discussion queue, canonical ECC identity, release video suite, preview pack, and growth outreach packet are current on May 19, 2026 for `main` through -`7a0645ed47d6a3aca54b4a214aab6dfaa58e770d`. +`c07276a347f8dac4945d2ad294124a708c19b108`, with the May 19 dashboard +refresh staged for the next merge. This improves publication readiness but does not replace the approval-gated release, package, plugin, billing, Discord, and announcement steps in 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 258ccbb2..558fd2e0 100644 --- a/docs/releases/2.0.0-rc.1/publication-readiness.md +++ b/docs/releases/2.0.0-rc.1/publication-readiness.md @@ -55,6 +55,9 @@ For the May 17 operator dashboard refresh, see [`operator-readiness-dashboard-2026-05-17.md`](operator-readiness-dashboard-2026-05-17.md). For the May 18 operator dashboard refresh, see [`operator-readiness-dashboard-2026-05-18.md`](operator-readiness-dashboard-2026-05-18.md). + +The current May 19 hypergrowth/operator dashboard is +[`operator-readiness-dashboard-2026-05-19.md`](operator-readiness-dashboard-2026-05-19.md). For the May 19 live/pending release URL ledger after the public repo rename, see [`release-url-ledger-2026-05-19.md`](release-url-ledger-2026-05-19.md). @@ -96,7 +99,7 @@ Record the exact commit SHA and command output before any publication action: | Evidence | Command | Required result | Recorded output | | --- | --- | --- | --- | | Clean release branch | `git status --short --branch` | On intended release commit; no unrelated files | `7a0645ed`: `## 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 `3bb55807407b`, 29 artifacts, 5 passed, 0 failed; repeat in the final strict clean-checkout release pass | +| Preview-pack smoke | `npm run preview-pack:smoke` | Preview pack artifacts, Hermes boundary, final verification command list, and publication blockers pass | `publication-evidence-2026-05-19.md`: ready yes, digest `bc2bf157616e`, 30 artifacts, 5 passed, 0 failed; repeat in the final strict clean-checkout release pass | | Harness audit | `npm run harness:audit -- --format json` | 70/70 passing | `99e01ded`: 70/70, 0 top actions | | Adapter scorecard | `npm run harness:adapters -- --check` | PASS | `99e01ded`: PASS, 11 adapters | | Observability readiness | `npm run observability:ready` | 21/21 passing | `publication-evidence-2026-05-18.md`: 21/21, ready yes | 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 e2a6dc2d..9bfbabad 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 @@ -19,7 +19,8 @@ with output from the exact release commit. | Hermes setup guide | | In-tree sanitized Hermes guide | | May 19 evidence snapshot | | Current strongest identity, video, growth, and CI readiness evidence | | May 18 evidence snapshot | | Previous supply-chain and publication-path readiness evidence | -| May 18 operator dashboard | | Prompt-to-artifact dashboard | +| May 18 operator dashboard | | Previous prompt-to-artifact dashboard | +| May 19 operator dashboard | | Current prompt-to-artifact dashboard with hypergrowth, video, and outbound lanes | | npm package page | | `npm view ecc-universal name version dist-tags --json` returned `latest: 1.10.0`; rc.1 is not published yet | | 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 | diff --git a/scripts/operator-readiness-dashboard.js b/scripts/operator-readiness-dashboard.js index 7301a10a..b943b08e 100644 --- a/scripts/operator-readiness-dashboard.js +++ b/scripts/operator-readiness-dashboard.js @@ -543,15 +543,54 @@ function isCurrentOrComplete(status) { return status === 'current' || status === 'complete'; } +function extractGrowthBaseline(hypergrowth) { + const mrrMatch = hypergrowth.match(/\| MRR \| `([^`]+)` \| `([^`]+)` \| `([^`]+)` \|/); + + if (!mrrMatch) { + return { + currentMrr: 'unknown', + targetMrr: 'unknown', + gapMrr: 'unknown', + }; + } + + return { + currentMrr: mrrMatch[1], + targetMrr: mrrMatch[2], + gapMrr: mrrMatch[3], + }; +} + +function buildGrowthSummary(rootDir) { + const hypergrowth = readText(rootDir, 'docs/releases/2.0.0/ecc-2-hypergrowth-release-command-center.md'); + const partnerPack = readText(rootDir, 'docs/releases/2.0.0-rc.1/partner-sponsor-talks-pack.md'); + const baseline = extractGrowthBaseline(hypergrowth || partnerPack); + + return { + ...baseline, + lanes: [ + 'GitHub Sponsors and OSS partner sponsors', + 'ECC Tools Pro subscriptions', + 'consulting and implementation contracts', + 'talks, podcasts, conference demos, and partner webinars', + ], + }; +} + function buildRequirements(rootDir, platformReport) { const roadmap = readText(rootDir, 'docs/ECC-2.0-GA-ROADMAP.md'); const publicationReadiness = readText(rootDir, 'docs/releases/2.0.0-rc.1/publication-readiness.md'); const namingMatrix = readText(rootDir, 'docs/releases/2.0.0-rc.1/naming-and-publication-matrix.md'); const releasePublicationChecklist = readText(rootDir, 'docs/releases/2.0.0-rc.1/release-name-plugin-publication-checklist-2026-05-18.md'); const releaseUrlLedger = readText(rootDir, 'docs/releases/2.0.0-rc.1/release-url-ledger-2026-05-19.md'); + const publicationEvidenceMay19 = readText(rootDir, 'docs/releases/2.0.0-rc.1/publication-evidence-2026-05-19.md'); + const hypergrowthCommandCenter = readText(rootDir, 'docs/releases/2.0.0/ecc-2-hypergrowth-release-command-center.md'); + const partnerSponsorTalksPack = readText(rootDir, 'docs/releases/2.0.0-rc.1/partner-sponsor-talks-pack.md'); + const releaseVideoProduction = readText(rootDir, 'docs/releases/2.0.0-rc.1/video-suite-production.md'); const ownerQueueCleanup = readText(rootDir, 'docs/releases/2.0.0-rc.1/owner-queue-cleanup-2026-05-18.md'); const previewManifest = readText(rootDir, 'docs/releases/2.0.0-rc.1/preview-pack-manifest.md'); const previewPackSmoke = readText(rootDir, 'scripts/preview-pack-smoke.js'); + const releaseVideoSuite = readText(rootDir, 'scripts/release-video-suite.js'); const progressSync = readText(rootDir, 'docs/architecture/progress-sync-contract.md'); const observabilityReadiness = readText(rootDir, 'docs/architecture/observability-readiness.md'); const stalePrSalvage = readText(rootDir, 'docs/stale-pr-salvage-ledger.md'); @@ -577,6 +616,39 @@ function buildRequirements(rootDir, platformReport) { ]); const hermesArtifactsReady = fileExists(rootDir, 'docs/HERMES-SETUP.md') && fileExists(rootDir, 'skills/hermes-imports/SKILL.md'); + const hypergrowthCommandCenterReady = includesAll(hypergrowthCommandCenter, [ + 'harness-native operator system', + '$1,728/mo', + '$10,000/mo', + 'Video Suite', + 'Distribution Plan', + 'Owner Approvals', + ]) && includesAll(publicationEvidenceMay19, [ + 'Business baseline', + '$1,728/mo', + '$8,272/mo', + ]); + const releaseVideoSuiteReady = scripts['release:video-suite'] === 'node scripts/release-video-suite.js' + && fileExists(rootDir, 'scripts/release-video-suite.js') + && includesAll(releaseVideoProduction, [ + 'ECC 2.0 Video Suite Production Manifest', + 'Primary launch video', + 'Self-Eval Gate', + 'timeline', + ]) + && includesAll(releaseVideoSuite, [ + 'ecc.release-video-suite.v1', + 'video-source-assets-present', + 'video-release-artifacts-present', + ]); + const partnerSponsorTalksReady = includesAll(partnerSponsorTalksPack, [ + 'Sponsor Outbound', + 'Platform Partner DM', + 'Consulting Intro', + 'Talk And Podcast Pitch', + 'GitHub Discussion Announcement', + 'Do Not Send Or Publish If', + ]); const githubLive = !platformReport.github.skipped && platformReport.github.totals.errors === 0; const ownerWideOpenPrs = extractLabeledCount(ownerQueueCleanup, 'Owner-wide open PRs after cleanup'); @@ -714,6 +786,42 @@ function buildRequirements(rootDir, platformReport) { ? 'final live release/npm/plugin/billing URLs and publish approval still pending' : 'URL-backed refresh and publish approval still pending' ), + buildRequirement( + 'hypergrowth-command-center', + 'Create a second-phase hypergrowth release command center', + 'docs/releases/2.0.0/ecc-2-hypergrowth-release-command-center.md plus May 19 evidence', + hypergrowthCommandCenterReady ? 'current' : 'in_progress', + hypergrowthCommandCenterReady + ? 'current MRR, target MRR, gap, release claim, video lane, distribution plan, and approval boundaries are in-tree' + : 'hypergrowth command center or May 19 business baseline evidence is incomplete', + hypergrowthCommandCenterReady + ? 'refresh after every MRR, channel, or approval-state change before public launch' + : 'add current MRR, target gap, channel plan, video lane, and approval boundaries' + ), + buildRequirement( + 'release-video-suite', + 'Produce the ECC 2.0 release video suite', + 'docs/releases/2.0.0-rc.1/video-suite-production.md and npm run release:video-suite', + releaseVideoSuiteReady ? 'in_progress' : 'not_complete', + releaseVideoSuiteReady + ? 'video production manifest and deterministic video-suite gate are wired for launch video, short clips, captions, timeline, and self-eval evidence' + : 'video production manifest or release:video-suite gate is incomplete', + releaseVideoSuiteReady + ? 'render final owner-approved MP4s, captions, platform reframes, and editable timeline before posting' + : 'wire release:video-suite and production manifest before final content work' + ), + buildRequirement( + 'partner-sponsor-talks-pack', + 'Prepare sponsor, partner, consulting, podcast, talk, and Discussion copy', + 'docs/releases/2.0.0-rc.1/partner-sponsor-talks-pack.md', + partnerSponsorTalksReady ? 'in_progress' : 'not_complete', + partnerSponsorTalksReady + ? 'sponsor outbound, platform partner DM, consulting intro, talk/podcast pitch, GitHub Discussion announcement, CTA hooks, and do-not-send gate are drafted' + : 'partner, sponsor, consulting, talk, or discussion copy is missing', + partnerSponsorTalksReady + ? 'replace final URLs after publication gates, then get explicit approval before outbound or personal-account posts' + : 'draft the full outbound pack and approval gate' + ), buildRequirement( 'agentshield-enterprise-iteration', 'Advance AgentShield enterprise iteration', @@ -802,12 +910,14 @@ function buildReport(options) { fix: item.gap, })); const head = runCommand('git', ['rev-parse', 'HEAD'], { cwd: rootDir }); + const growth = buildGrowthSummary(rootDir); return { schema_version: SCHEMA_VERSION, generatedAt, root: rootDir, head, + growth, ready: incompleteRequirements.length === 0, dashboardReady: platformReport.ready, publicationReady: false, @@ -827,9 +937,10 @@ function buildReport(options) { top_actions: topActions, next_work_order: [ 'Regenerate this dashboard from the final release commit before publication evidence is recorded.', + 'Render the owner-approved primary launch video, short clips, captions, reframes, and editable timeline from the video-suite production manifest.', + 'Replace final release, npm, plugin, billing, and video URLs in the partner/sponsor/talk pack, then get explicit approval before outbound.', 'Repeat ITO-57 Linear/project status sync after the next significant merge batch or advisory-source refresh.', 'Create or verify Marketplace-managed Pro target billing-state with webhook provenance, configure the target account and INTERNAL_API_SECRET, then rerun target readback and the live announcement gate before publishing native-payments copy.', - 'Resume ITO-45, ITO-46, and ITO-56 only after the generated dashboard and final release gates are refreshed.', ], }; } @@ -848,6 +959,9 @@ function renderText(report) { `Dashboard ready: ${report.dashboardReady}`, `Publication ready: ${report.publicationReady}`, '', + 'Growth baseline:', + ` MRR: ${report.growth ? report.growth.currentMrr : 'unknown'} -> ${report.growth ? report.growth.targetMrr : 'unknown'} (gap ${report.growth ? report.growth.gapMrr : 'unknown'})`, + '', 'Platform:', ` PRs: ${report.platform.openPrs}`, ` Issues: ${report.platform.openIssues}`, @@ -895,6 +1009,14 @@ function renderMarkdown(report) { `| Dashboard generation | ${report.dashboardReady ? 'Current' : 'Needs work'} | platform audit ready: ${report.platform.ready}; GitHub skipped: ${report.platform.githubSkipped} |`, `| Publication | ${report.publicationReady ? 'Ready' : 'Not complete'} | release, npm, plugin, billing, and announcement gates are tracked below |`, '', + '## Growth Baseline', + '', + '| Metric | Current | Target | Gap |', + '| --- | ---: | ---: | ---: |', + `| MRR | ${markdownEscape(report.growth ? report.growth.currentMrr : 'unknown')} | ${markdownEscape(report.growth ? report.growth.targetMrr : 'unknown')} | ${markdownEscape(report.growth ? report.growth.gapMrr : 'unknown')} |`, + '', + 'Growth lanes: GitHub Sponsors and OSS partner sponsors; ECC Tools Pro subscriptions; consulting and implementation contracts; talks, podcasts, conference demos, and partner webinars.', + '', '## Prompt-To-Artifact Checklist', '', '| Objective requirement | Artifact or gate | Status | Evidence | Gap |', diff --git a/scripts/platform-audit.js b/scripts/platform-audit.js index a774031c..5cc17b0c 100644 --- a/scripts/platform-audit.js +++ b/scripts/platform-audit.js @@ -427,7 +427,7 @@ function buildLocalEvidenceChecks(rootDir) { const progressSync = readText(rootDir, 'docs/architecture/progress-sync-contract.md'); const supplyChain = readText(rootDir, 'docs/security/supply-chain-incident-response.md'); const evidence = readText(rootDir, 'docs/releases/2.0.0-rc.1/publication-evidence-2026-05-19.md'); - const operatorDashboard = readText(rootDir, 'docs/releases/2.0.0-rc.1/operator-readiness-dashboard-2026-05-18.md'); + const operatorDashboard = readText(rootDir, 'docs/releases/2.0.0-rc.1/operator-readiness-dashboard-2026-05-19.md'); return [ buildCheck( @@ -472,7 +472,7 @@ function buildLocalEvidenceChecks(rootDir) { ), buildCheck( 'release-evidence-current', - includesAll(evidence, ['Release video suite', 'growth outreach', 'GitGuardian', 'macOS/Ubuntu/Windows test matrix', '2544 passed']) ? 'pass' : 'fail', + includesAll(evidence, ['Release video suite', 'growth outreach', 'Operator dashboard', 'GitGuardian', 'macOS/Ubuntu/Windows test matrix', '2544 passed']) ? 'pass' : 'fail', 'rc.1 evidence includes current release, video, growth, and CI artifacts', { path: 'docs/releases/2.0.0-rc.1/publication-evidence-2026-05-19.md' } ), @@ -480,13 +480,15 @@ function buildLocalEvidenceChecks(rootDir) { 'operator-readiness-dashboard', includesAll(operatorDashboard, [ 'This dashboard is generated by `npm run operator:dashboard`', + 'Growth Baseline', + 'hypergrowth release command center', 'Prompt-To-Artifact Checklist', 'PR queue', 'Not complete', 'Next Work Order', ]) ? 'pass' : 'fail', 'operator dashboard maps macro-goal requirements to current evidence and open gaps', - { path: 'docs/releases/2.0.0-rc.1/operator-readiness-dashboard-2026-05-18.md' } + { path: 'docs/releases/2.0.0-rc.1/operator-readiness-dashboard-2026-05-19.md' } ), ]; } diff --git a/scripts/preview-pack-smoke.js b/scripts/preview-pack-smoke.js index 1c7aec97..8dbee764 100644 --- a/scripts/preview-pack-smoke.js +++ b/scripts/preview-pack-smoke.js @@ -29,6 +29,7 @@ const REQUIRED_ARTIFACTS = [ `${RELEASE_DIR}/publication-evidence-2026-05-19.md`, `${RELEASE_DIR}/operator-readiness-dashboard-2026-05-17.md`, `${RELEASE_DIR}/operator-readiness-dashboard-2026-05-18.md`, + `${RELEASE_DIR}/operator-readiness-dashboard-2026-05-19.md`, `${RELEASE_DIR}/release-url-ledger-2026-05-19.md`, `${RELEASE_DIR}/video-suite-production.md`, `${RELEASE_DIR}/partner-sponsor-talks-pack.md`, diff --git a/tests/scripts/operator-readiness-dashboard.test.js b/tests/scripts/operator-readiness-dashboard.test.js index 6f697c65..d5599a49 100644 --- a/tests/scripts/operator-readiness-dashboard.test.js +++ b/tests/scripts/operator-readiness-dashboard.test.js @@ -33,7 +33,8 @@ function seedRepo(rootDir, overrides = {}) { 'scripts/observability-readiness.js', 'scripts/operator-readiness-dashboard.js', 'scripts/platform-audit.js', - 'scripts/preview-pack-smoke.js' + 'scripts/preview-pack-smoke.js', + 'scripts/release-video-suite.js' ], scripts: { 'discussion:audit': 'node scripts/discussion-audit.js', @@ -41,6 +42,7 @@ function seedRepo(rootDir, overrides = {}) { 'operator:dashboard': 'node scripts/operator-readiness-dashboard.js', 'platform:audit': 'node scripts/platform-audit.js', 'preview-pack:smoke': 'node scripts/preview-pack-smoke.js', + 'release:video-suite': 'node scripts/release-video-suite.js', 'security:ioc-scan': 'node scripts/ci/scan-supply-chain-iocs.js', 'security:advisory-sources': 'node scripts/ci/supply-chain-advisory-sources.js' } @@ -52,6 +54,11 @@ function seedRepo(rootDir, overrides = {}) { 'hermes-boundary-sanitized', 'publication-blockers-preserved' ].join('\n'), + 'scripts/release-video-suite.js': [ + 'ecc.release-video-suite.v1', + 'video-source-assets-present', + 'video-release-artifacts-present' + ].join('\n'), 'docs/ECC-2.0-GA-ROADMAP.md': [ 'https://linear.app/itomarkets/project/ecc-platform-roadmap-52b328ee03e1', 'Linear ITO-44 ITO-59', @@ -109,6 +116,18 @@ function seedRepo(rootDir, overrides = {}) { 'PR queue', 'Not complete' ].join('\n'), + 'docs/releases/2.0.0-rc.1/operator-readiness-dashboard-2026-05-19.md': [ + 'This dashboard is generated by `npm run operator:dashboard`', + 'operator:dashboard', + 'Growth Baseline', + 'hypergrowth release command center', + 'Prompt-To-Artifact Checklist', + 'Next Work Order', + 'ITO-44', + 'ITO-59', + 'PR queue', + 'Not complete' + ].join('\n'), 'docs/releases/2.0.0-rc.1/owner-queue-cleanup-2026-05-18.md': [ 'Owner-wide open PRs after cleanup: 0.', 'Owner-wide open issues after cleanup: 0.', @@ -156,9 +175,34 @@ function seedRepo(rootDir, overrides = {}) { 'docs/releases/2.0.0-rc.1/publication-evidence-2026-05-19.md': [ 'Release video suite', 'growth outreach', + 'Operator dashboard', 'GitGuardian', 'macOS/Ubuntu/Windows test matrix', - '2544 passed' + '2544 passed', + 'Business baseline', + '$1,728/mo', + '$8,272/mo' + ].join('\n'), + 'docs/releases/2.0.0/ecc-2-hypergrowth-release-command-center.md': [ + 'harness-native operator system', + '| MRR | `$1,728/mo` | `$10,000/mo` | `$8,272/mo` |', + 'Video Suite', + 'Distribution Plan', + 'Owner Approvals' + ].join('\n'), + 'docs/releases/2.0.0-rc.1/video-suite-production.md': [ + 'ECC 2.0 Video Suite Production Manifest', + 'Primary launch video', + 'Self-Eval Gate', + 'timeline' + ].join('\n'), + 'docs/releases/2.0.0-rc.1/partner-sponsor-talks-pack.md': [ + 'Sponsor Outbound', + 'Platform Partner DM', + 'Consulting Intro', + 'Talk And Podcast Pitch', + 'GitHub Discussion Announcement', + 'Do Not Send Or Publish If' ].join('\n'), '.github/workflows/supply-chain-watch.yml': 'name: Supply-Chain Watch supply-chain-advisory-sources.js supply-chain-advisory-sources.json' }; @@ -308,6 +352,35 @@ function runTests() { && item.evidence.includes('release publication checklist') && item.gap === 'real tag/push, marketplace submission, and final channel choice remain approval-gated' ))); + assert.deepStrictEqual(report.growth, { + currentMrr: '$1,728/mo', + targetMrr: '$10,000/mo', + gapMrr: '$8,272/mo', + lanes: [ + 'GitHub Sponsors and OSS partner sponsors', + 'ECC Tools Pro subscriptions', + 'consulting and implementation contracts', + 'talks, podcasts, conference demos, and partner webinars', + ], + }); + assert.ok(report.requirements.some(item => ( + item.id === 'hypergrowth-command-center' + && item.status === 'current' + && item.evidence.includes('current MRR') + && item.gap === 'refresh after every MRR, channel, or approval-state change before public launch' + ))); + assert.ok(report.requirements.some(item => ( + item.id === 'release-video-suite' + && item.status === 'in_progress' + && item.evidence.includes('deterministic video-suite gate') + && item.gap === 'render final owner-approved MP4s, captions, platform reframes, and editable timeline before posting' + ))); + assert.ok(report.requirements.some(item => ( + item.id === 'partner-sponsor-talks-pack' + && item.status === 'in_progress' + && item.evidence.includes('sponsor outbound') + && item.gap === 'replace final URLs after publication gates, then get explicit approval before outbound or personal-account posts' + ))); assert.ok(report.requirements.some(item => ( item.id === 'supply-chain-local-protection' && item.artifact.includes('AgentShield package-manager hardening') @@ -328,8 +401,11 @@ function runTests() { && item.gap === 'repeat Linear/project status update and local work-items sync after each significant merge batch' ))); assert.ok(report.top_actions.some(item => item.id === 'naming-and-plugin-publication')); + assert.ok(report.top_actions.some(item => item.id === 'release-video-suite')); + assert.ok(report.top_actions.some(item => item.id === 'partner-sponsor-talks-pack')); assert.ok(!report.top_actions.some(item => item.id === 'ecc-preview-pack')); assert.ok(!report.top_actions.some(item => item.id === 'hermes-specialized-skills')); + assert.ok(!report.top_actions.some(item => item.id === 'hypergrowth-command-center')); assert.ok(!report.top_actions.some(item => item.id === 'legacy-salvage')); assert.ok(!report.top_actions.some(item => item.id === 'linear-roadmap-and-progress')); } finally { @@ -526,6 +602,8 @@ function runTests() { assert.strictEqual(stdout, written); assert.ok(written.includes('# ECC Operator Readiness Dashboard')); assert.ok(written.includes('Generated: 2026-05-15T00:00:00.000Z')); + assert.ok(written.includes('## Growth Baseline')); + assert.ok(written.includes('| MRR | $1,728/mo | $10,000/mo | $8,272/mo |')); assert.ok(written.includes('## Prompt-To-Artifact Checklist')); assert.ok(written.includes('Build ITO-44 completion dashboard into a repeatable command')); assert.ok(written.includes('## Next Work Order')); @@ -550,6 +628,7 @@ function runTests() { assert.ok(stdout.includes('work remaining')); assert.ok(stdout.includes('Dashboard ready: true')); assert.ok(stdout.includes('Publication ready: false')); + assert.ok(stdout.includes('MRR: $1,728/mo -> $10,000/mo (gap $8,272/mo)')); assert.ok(stdout.includes('Top actions:')); assert.ok(stdout.includes('naming-and-plugin-publication')); } finally { diff --git a/tests/scripts/platform-audit.test.js b/tests/scripts/platform-audit.test.js index cba1adc9..c61026e1 100644 --- a/tests/scripts/platform-audit.test.js +++ b/tests/scripts/platform-audit.test.js @@ -65,12 +65,15 @@ function seedRepo(rootDir, overrides = {}) { 'docs/releases/2.0.0-rc.1/publication-evidence-2026-05-19.md': [ 'Release video suite', 'growth outreach', + 'Operator dashboard', 'GitGuardian', 'macOS/Ubuntu/Windows test matrix', '2544 passed' ].join('\n'), - 'docs/releases/2.0.0-rc.1/operator-readiness-dashboard-2026-05-18.md': [ + 'docs/releases/2.0.0-rc.1/operator-readiness-dashboard-2026-05-19.md': [ 'This dashboard is generated by `npm run operator:dashboard`', + 'Growth Baseline', + 'hypergrowth release command center', 'Prompt-To-Artifact Checklist', 'ITO-44', 'ITO-59',