Track owner approval packet in dashboard

This commit is contained in:
Affaan Mustafa
2026-05-19 10:23:34 -04:00
committed by Affaan Mustafa
parent 8148340ad1
commit c7d662c3c6
11 changed files with 123 additions and 30 deletions

View File

@@ -77,17 +77,19 @@ As of 2026-05-19:
refreshed operator dashboard.
- `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
`bc2bf157616e`, local 2544-test suite, and PR #1993 CI success. The May 18
evidence remains the detailed supply-chain and publication-path snapshot.
suite gate, partner/sponsor/talk outreach pack, owner approval packet
(`owner-approval-packet-2026-05-19.md`), preview-pack smoke digest
`790430aef4a8`, local 2550-test suite, PR #2001 merge, and GitHub Actions run
`26102500291` 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-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; 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.
video-suite lane, partner/sponsor/talk outbound pack, and owner approval
packet; 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
@@ -732,12 +734,12 @@ is not complete unless the evidence column exists and has been freshly verified.
| Prompt requirement | Required artifact or gate | Current evidence | Status |
| --- | --- | --- | --- |
| Keep public PRs below 20 | Repo-family PR recheck | 0 open PRs across `ECC`, AgentShield, JARVIS, `ECC-Tools/ECC-Tools`, and `ECC-Tools/ECC-website` on 2026-05-19 after merging PR #1993 and refreshing platform audit evidence | Complete |
| Keep public PRs below 20 | Repo-family PR recheck | 0 open PRs across `ECC`, AgentShield, JARVIS, `ECC-Tools/ECC-Tools`, and `ECC-Tools/ECC-website` on 2026-05-19 after merging PR #2001 and refreshing platform audit evidence | Complete |
| Keep public issues below 20 | Repo-family issue recheck | 0 open issues across `ECC`, AgentShield, JARVIS, `ECC-Tools/ECC-Tools`, and `ECC-Tools/ECC-website` on 2026-05-19 after the live platform audit refresh | Complete |
| 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 |
| Manage PR discussions | PR review/comment closure plus merge/close state | ECC #1990-#2001 merged through the harness audit, canonical identity, release video suite, growth outreach, evidence refresh, visual QA, suite-count, and owner-approval packet 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, May 19 operator dashboard, and preview-pack smoke digest `bc2bf157616e` | 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, owner approval packet, local 2550-test suite, PR #2001 merge, GitHub Actions run `26102500291` success, May 19 operator dashboard, `owner-approval-packet-2026-05-19.md`, and preview-pack smoke digest `790430aef4a8` | 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 |

View File

@@ -2,8 +2,8 @@
This dashboard is generated by `npm run operator:dashboard`. It is an operator snapshot, not release approval.
Generated: 2026-05-19T13:22:19.744Z
Commit: 247750b7a6e918ac770402119c3191f512a69aa1
Generated: 2026-05-19T14:27:11.558Z
Commit: a11bad8a7ad5bb028eb884913abf20285aec01d1
Status: work remaining
## Current Status
@@ -37,6 +37,7 @@ Growth lanes: GitHub Sponsors and OSS partner sponsors; ECC Tools Pro subscripti
| 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 |
| Prepare final owner approval packet | docs/releases/2.0.0-rc.1/owner-approval-packet-2026-05-19.md | current | owner approval packet covers release, package, plugin, video, billing, social, and outbound decisions | review owner approvals from the final release commit before any publication or outbound action |
| 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 | current | video-suite gate is ready with 15/15 source assets, 13/13 suite artifacts, 12/12 publish candidates, primary self-eval, and zero detected black-frame segments recorded in May 19 evidence | final owner approval, upload, and public video URLs remain approval-gated |
| 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 |
@@ -58,7 +59,8 @@ Growth lanes: GitHub Sponsors and OSS partner sponsors; ECC Tools Pro subscripti
## Next Work Order
1. Regenerate this dashboard from the final release commit before publication evidence is recorded.
2. Review the owner-approved primary launch video candidates, choose the final cuts, upload after approval, and attach public video URLs to the release pack.
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.
2. Review the owner approval packet from the final release commit and approve, defer, or block each publication and outbound lane.
3. Review the owner-approved primary launch video candidates, choose the final cuts, upload after approval, and attach public video URLs to the release pack.
4. Replace final release, npm, plugin, billing, and video URLs in the partner/sponsor/talk pack, then get explicit approval before outbound.
5. Repeat ITO-57 Linear/project status sync after the next significant merge batch or advisory-source refresh.
6. 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.

View File

@@ -17,9 +17,9 @@ 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 `790430aef4a8`, 5/5 checks | yes |
| Video suite | ready true, 15/15 source assets, 13/13 suite artifacts, 12/12 publish candidates | yes |
| Release surface tests | 26/26 passed after this packet was added | yes |
| Full local suite | 2548/2548 passed after this packet was added | yes |
| GitHub CI | PR #1998, PR #1999, and PR #2000 merged after green required checks | verify current head |
| Release surface tests | 27/27 passed after this packet was added | yes |
| Full local suite | 2550/2550 passed after this packet was added | yes |
| GitHub CI | PR #1998, PR #1999, PR #2000, and PR #2001 merged after green required checks | verify current head |
## Decision Register

View File

@@ -25,7 +25,7 @@ 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, owner approval packet, May 19 operator dashboard, preview-pack smoke digest `790430aef4a8`, 2548-test local suite, PR #1998 visual QA CI success, PR #1999 dashboard evidence CI success, and PR #2000 suite-count evidence success | Current strongest readiness snapshot; must still be repeated from a strict clean checkout before real publication |
| `docs/releases/2.0.0-rc.1/publication-evidence-2026-05-19.md` | Current May 19 evidence for canonical ECC identity, release video suite, partner/sponsor/talk outreach pack, owner approval packet, May 19 operator dashboard, preview-pack smoke digest `790430aef4a8`, 2550-test local suite, PR #1998 visual QA CI success, PR #1999 dashboard evidence CI success, PR #2000 suite-count evidence success, and PR #2001 owner approval packet 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` | Previous prompt-to-artifact operator dashboard | Superseded by the May 19 generated dashboard |
| `docs/releases/2.0.0-rc.1/operator-readiness-dashboard-2026-05-19.md` | Current prompt-to-artifact operator dashboard | Shows PR/issue/discussion/platform/supply-chain gates current and adds the current `$1,728/mo` to `$10,000/mo` hypergrowth, video owner-approval, and outbound-pack operating lanes |

View File

@@ -8,9 +8,9 @@ social announcement.
| Field | Evidence |
| --- | --- |
| Upstream main | `e7a7b2aaa33c0657cad9db3fa2ced0e636cd0f8c` |
| Upstream main | `8148340ad14eb32c971346f0cb4cb9431ec0f5de` |
| Git remote | `https://github.com/affaan-m/ECC.git` |
| Evidence scope | Current `main` after PR #1990 harness-audit GitHub integration scoring, PR #1991 canonical ECC identity gate, PR #1992 release video-suite gate, PR #1993 growth outreach pack, PR #1994 May 19 publication evidence refresh, PR #1995 operator dashboard refresh, PR #1996 primary render self-eval gate, PR #1997 publish-candidate gate, PR #1998 visual QA gate, PR #1999 video dashboard evidence refresh, PR #2000 suite-count evidence refresh, and the owner approval packet addition |
| Evidence scope | Current `main` after PR #1990 harness-audit GitHub integration scoring, PR #1991 canonical ECC identity gate, PR #1992 release video-suite gate, PR #1993 growth outreach pack, PR #1994 May 19 publication evidence refresh, PR #1995 operator dashboard refresh, PR #1996 primary render self-eval gate, PR #1997 publish-candidate gate, PR #1998 visual QA gate, PR #1999 video dashboard evidence refresh, PR #2000 suite-count evidence refresh, and PR #2001 owner approval packet addition |
| Local status caveat | `git status --short --branch` was clean after pulling `origin/main`; generated evidence files are committed after the source snapshot they describe |
The release operator must repeat all publish-facing checks from the exact final
@@ -49,19 +49,20 @@ Tracked repositories in the platform audit were:
| PR #1998 | Merged the release video visual QA gate for publish candidates and black-frame segment detection |
| PR #1999 | Merged the operator dashboard refresh that moved the release video suite to current once publish-candidate evidence was recorded |
| PR #2000 | Merged the suite-count evidence refresh so the platform audit rejects stale local-suite totals |
| Owner approval packet | Added the final human decision sheet for release, package, plugin, video, billing, social, and outbound approvals |
| PR #2001 | Merged the final human decision sheet for release, package, plugin, video, billing, social, and outbound approvals; GitHub Actions run `26102500291` completed successfully |
## Release And Growth Evidence
| Gate | Command | Result |
| --- | --- | --- |
| Release-surface tests | `node tests/docs/ecc2-release-surface.test.js` | 26 passed, 0 failed |
| Release-surface tests | `node tests/docs/ecc2-release-surface.test.js` | 27 passed, 0 failed |
| Preview-pack smoke | `npm run preview-pack:smoke -- --format json` | Ready true; digest `790430aef4a8`; 31 required artifacts; 5 passed, 0 failed |
| Operator dashboard | `npm run operator:dashboard -- --markdown --write docs/releases/2.0.0-rc.1/operator-readiness-dashboard-2026-05-19.md` | Generated May 19 dashboard with platform audit ready true, 0 tracked PRs, 0 tracked issues, 0 discussion gaps, `$1,728/mo` current MRR, `$10,000/mo` target MRR, the release video suite marked current, and top actions for plugin publication, notifications, outbound approval, AgentShield, and ECC Tools billing |
| Release video suite | `npm run release:video-suite -- --format json --summary` with `ECC_VIDEO_SOURCE_ROOT` and `ECC_VIDEO_RELEASE_SUITE_ROOT` | Ready true; 15/15 source assets present; 13/13 render, timeline, caption, EDL, and segment artifacts present; 12/12 publish-candidate outputs present with zero detected black-frame segments; primary rough render self-eval passed at 144.759 seconds, 1920x1080, 1 audio stream, and 106.78 MB |
| Full local suite | `node tests/run-all.js` | 2548 passed, 0 failed |
| Full local suite | `node tests/run-all.js` | 2550 passed, 0 failed |
| PR #1998 CI | GitHub Actions run `26099020341` | Completed successfully for `d500de1e9f11c0446b6a1349bd98b522d31f9125`; all reported checks passed, including lint, validation, security scan, coverage, GitGuardian, CodeRabbit, Cubic, and the macOS/Ubuntu/Windows test matrix |
| PR #1999 CI | GitHub Actions run `26100148726` | Completed successfully for `90584b6d5e5814bc2ad9a4cd651bebd043de989d`; lint, validation, security scan, coverage, GitGuardian, CodeRabbit, and the macOS/Ubuntu/Windows test matrix passed; Cubic completed neutral and did not block merge |
| PR #2001 CI | GitHub Actions run `26102500291` | Completed successfully for `8148340ad14eb32c971346f0cb4cb9431ec0f5de`; required checks passed before merge |
| Public-path sanitization | `node scripts/ci/validate-no-personal-paths.js` through local suite and CI | Passed |
| Markdown and whitespace | `markdownlint` focused release docs plus `git diff --check` before PR #1999 | Passed |

View File

@@ -108,10 +108,10 @@ Record the exact commit SHA and command output before any publication action:
| Observability readiness | `npm run observability:ready` | 21/21 passing | `publication-evidence-2026-05-18.md`: 21/21, ready yes |
| Release safety gate | `npm run observability:ready -- --format json` | Release Safety category passing with publication readiness, supply-chain, workflow security, package surface, and release-surface evidence | May 18 evidence keeps release safety passing; repeat the JSON gate from the exact final release commit |
| Supply-chain verification | `npm audit --json`; `npm audit signatures`; `cd ecc2 && cargo audit -q`; Dependabot alerts; GitGuardian Security Checks | 0 vulnerabilities/alerts, registry signatures verified, GitGuardian clean | `publication-evidence-2026-05-19.md` plus CI `26093792219`: GitGuardian and security scan passed; prior May 18 npm registry signatures and IOC scans remain the latest detailed supply-chain evidence |
| Root suite | `node tests/run-all.js` | 0 failures | Current packet branch based on `e7a7b2a`: local `node tests/run-all.js` passed 2548/2548; PR #2000 CI `26101512088` passed the full OS/runtime/package-manager matrix |
| Root suite | `node tests/run-all.js` | 0 failures | Current dashboard branch: local `node tests/run-all.js` passed 2550/2550; PR #2001 CI `26102500291` passed the previous full OS/runtime/package-manager matrix |
| Markdown lint | `npx markdownlint-cli '**/*.md' --ignore node_modules` | 0 failures | CI `26093792219`: markdownlint passed on the growth-pack PR; rerun after any release-copy edits |
| Package surface | `node tests/scripts/npm-publish-surface.test.js` | 0 failures; no Python bytecode in npm tarball | `2/2` passed in May 12 evidence pass |
| Release surface | `node tests/docs/ecc2-release-surface.test.js` | 0 failures | May 19 evidence refresh: 26/26 passed after adding the video suite, partner/sponsor/talk gates, and owner approval packet |
| Release surface | `node tests/docs/ecc2-release-surface.test.js` | 0 failures | May 19 evidence refresh: 27/27 passed after adding the video suite, partner/sponsor/talk gates, owner approval packet, and roadmap evidence mirror |
| Optional Rust surface | `cd ecc2 && cargo test` | 0 failures or explicit deferral | `publication-evidence-2026-05-16.md`: 462/462 passed, existing warnings only |
| Queue baseline | `node scripts/platform-audit.js --json` across trunk, AgentShield, JARVIS, ECC Tools, and ECC website | Under 20 open PRs and under 20 open issues | `3304848b`: platform audit ready, 0 open PRs, 0 open issues, 0 conflicting PRs, and 0 blocking dirty files |
| Discussion baseline | `node scripts/platform-audit.js --json` and `node scripts/discussion-audit.js --json` | No unmanaged active discussion queue and no answerable Q&A missing an accepted answer | `3304848b`: platform audit sampled 58 trunk discussions, 0 needing maintainer touch, 0 answerable discussions missing accepted answer; `docs/architecture/discussion-response-playbook.md` records response templates and security escalation rules |

View File

@@ -588,6 +588,7 @@ function buildRequirements(rootDir, platformReport) {
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 ownerApprovalPacket = readText(rootDir, 'docs/releases/2.0.0-rc.1/owner-approval-packet-2026-05-19.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');
@@ -658,6 +659,17 @@ function buildRequirements(rootDir, platformReport) {
'GitHub Discussion Announcement',
'Do Not Send Or Publish If',
]);
const ownerApprovalPacketReady = includesAll(ownerApprovalPacket, [
'Owner Approval Packet',
'Decision Register',
'GitHub prerelease',
'npm `next` publish',
'Claude plugin tag',
'Video upload',
'Final URL Fill-In',
'Do Not Approve If',
'No outbound email, personal-account post, package publish, plugin tag, or billing announcement is authorized by this packet alone.'
]) && includesAll(previewManifest, ['owner-approval-packet-2026-05-19.md']);
const githubLive = !platformReport.github.skipped && platformReport.github.totals.errors === 0;
const ownerWideOpenPrs = extractLabeledCount(ownerQueueCleanup, 'Owner-wide open PRs after cleanup');
@@ -795,6 +807,18 @@ 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(
'owner-approval-packet',
'Prepare final owner approval packet',
'docs/releases/2.0.0-rc.1/owner-approval-packet-2026-05-19.md',
ownerApprovalPacketReady ? 'current' : 'not_complete',
ownerApprovalPacketReady
? 'owner approval packet covers release, package, plugin, video, billing, social, and outbound decisions'
: 'owner approval packet is missing or incomplete',
ownerApprovalPacketReady
? 'review owner approvals from the final release commit before any publication or outbound action'
: 'add the owner decision sheet before publication review'
),
buildRequirement(
'hypergrowth-command-center',
'Create a second-phase hypergrowth release command center',
@@ -954,6 +978,7 @@ function buildReport(options) {
top_actions: topActions,
next_work_order: [
'Regenerate this dashboard from the final release commit before publication evidence is recorded.',
'Review the owner approval packet from the final release commit and approve, defer, or block each publication and outbound lane.',
releaseVideoWorkOrder,
'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.',

View File

@@ -472,7 +472,7 @@ function buildLocalEvidenceChecks(rootDir) {
),
buildCheck(
'release-evidence-current',
includesAll(evidence, ['Release video suite', 'growth outreach', 'Operator dashboard', 'GitGuardian', 'macOS/Ubuntu/Windows test matrix', '2548 passed']) ? 'pass' : 'fail',
includesAll(evidence, ['Release video suite', 'growth outreach', 'Operator dashboard', 'GitGuardian', 'macOS/Ubuntu/Windows test matrix', '2550 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' }
),

View File

@@ -250,6 +250,24 @@ test('owner approval packet consolidates the final gated decisions', () => {
assert.ok(hypergrowth.includes('owner-approval-packet-2026-05-19.md'));
});
test('GA roadmap mirrors the current May 19 release evidence', () => {
const roadmap = read('docs/ECC-2.0-GA-ROADMAP.md');
for (const marker of [
'owner-approval-packet-2026-05-19.md',
'preview-pack smoke digest `790430aef4a8`',
'local 2550-test suite',
'PR #2001',
'GitHub Actions run `26102500291`',
'owner approval packet',
]) {
assert.ok(roadmap.includes(marker), `GA roadmap missing current evidence marker ${marker}`);
}
assert.ok(!roadmap.includes('preview-pack smoke digest `bc2bf157616e`'));
assert.ok(!roadmap.includes('local 2544-test suite'));
});
test('rc.1 quickstart gives a clone-to-cross-harness path', () => {
const quickstart = read('docs/releases/2.0.0-rc.1/quickstart.md');
for (const heading of ['Clone', 'Install', 'Verify', 'First Skill', 'Switch Harness']) {

View File

@@ -100,9 +100,21 @@ function seedRepo(rootDir, overrides = {}) {
'docs/releases/2.0.0-rc.1/preview-pack-manifest.md': [
'publication-readiness.md release-notes.md quickstart.md',
'release-name-plugin-publication-checklist-2026-05-18.md',
'owner-approval-packet-2026-05-19.md',
'`scripts/preview-pack-smoke.js`',
'npm run preview-pack:smoke'
].join('\n'),
'docs/releases/2.0.0-rc.1/owner-approval-packet-2026-05-19.md': [
'Owner Approval Packet',
'Decision Register',
'GitHub prerelease',
'npm `next` publish',
'Claude plugin tag',
'Video upload',
'Final URL Fill-In',
'Do Not Approve If',
'No outbound email, personal-account post, package publish, plugin tag, or billing announcement is authorized by this packet alone.'
].join('\n'),
'docs/releases/2.0.0-rc.1/release-notes.md': 'release notes',
'docs/releases/2.0.0-rc.1/x-thread.md': 'x thread',
'docs/releases/2.0.0-rc.1/linkedin-post.md': 'linkedin post',
@@ -178,7 +190,7 @@ function seedRepo(rootDir, overrides = {}) {
'Operator dashboard',
'GitGuardian',
'macOS/Ubuntu/Windows test matrix',
'2548 passed',
'2550 passed',
'Business baseline',
'$1,728/mo',
'$8,272/mo'
@@ -381,6 +393,12 @@ function runTests() {
&& 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 === 'owner-approval-packet'
&& item.status === 'current'
&& item.evidence.includes('release, package, plugin, video, billing, social, and outbound decisions')
&& item.gap === 'review owner approvals from the final release commit before any publication or outbound action'
)));
assert.ok(report.requirements.some(item => (
item.id === 'supply-chain-local-protection'
&& item.artifact.includes('AgentShield package-manager hardening')
@@ -403,6 +421,7 @@ function runTests() {
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 === 'owner-approval-packet'));
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'));
@@ -424,7 +443,7 @@ function runTests() {
'Operator dashboard',
'GitGuardian',
'macOS/Ubuntu/Windows test matrix',
'2548 passed',
'2550 passed',
'Business baseline',
'$1,728/mo',
'$8,272/mo',
@@ -517,6 +536,32 @@ function runTests() {
}
})) passed++; else failed++;
if (test('owner approval packet fails closed when it is missing from the release pack', () => {
const rootDir = createTempDir('operator-dashboard-owner-packet-');
try {
seedRepo(rootDir, {
'docs/releases/2.0.0-rc.1/owner-approval-packet-2026-05-19.md': null,
'docs/releases/2.0.0-rc.1/preview-pack-manifest.md': [
'publication-readiness.md release-notes.md quickstart.md',
'release-name-plugin-publication-checklist-2026-05-18.md',
'`scripts/preview-pack-smoke.js`',
'npm run preview-pack:smoke'
].join('\n')
});
const report = buildSeededReport(rootDir);
const ownerPacket = report.requirements.find(item => item.id === 'owner-approval-packet');
assert.strictEqual(ownerPacket.status, 'not_complete');
assert.strictEqual(ownerPacket.evidence, 'owner approval packet is missing or incomplete');
assert.strictEqual(ownerPacket.gap, 'add the owner decision sheet before publication review');
assert.ok(report.top_actions.some(item => item.id === 'owner-approval-packet'));
} finally {
cleanup(rootDir);
}
})) passed++; else failed++;
if (test('AgentShield enterprise evidence covers export and policy promotion markers', () => {
const cases = [
{

View File

@@ -68,7 +68,7 @@ function seedRepo(rootDir, overrides = {}) {
'Operator dashboard',
'GitGuardian',
'macOS/Ubuntu/Windows test matrix',
'2548 passed'
'2550 passed'
].join('\n'),
'docs/releases/2.0.0-rc.1/operator-readiness-dashboard-2026-05-19.md': [
'This dashboard is generated by `npm run operator:dashboard`',