chore: gate canonical ECC release identity (#1991)

This commit is contained in:
Affaan Mustafa
2026-05-19 06:42:17 -04:00
committed by GitHub
parent af9b2c1c4c
commit 8141f6904f
31 changed files with 206 additions and 113 deletions

View File

@@ -175,6 +175,7 @@ test('preview pack manifest assembles release, Hermes, and publication gates', (
'scripts/preview-pack-smoke.js',
'docs/releases/2.0.0-rc.1/publication-readiness.md',
'docs/releases/2.0.0-rc.1/naming-and-publication-matrix.md',
'docs/releases/2.0.0-rc.1/release-url-ledger-2026-05-19.md',
'docs/releases/2.0.0-rc.1/release-name-plugin-publication-checklist-2026-05-18.md',
]) {
assert.ok(manifest.includes(artifact), `preview pack manifest missing ${artifact}`);
@@ -201,6 +202,8 @@ test('rc.1 quickstart gives a clone-to-cross-harness path', () => {
for (const heading of ['Clone', 'Install', 'Verify', 'First Skill', 'Switch Harness']) {
assert.ok(quickstart.includes(`## ${heading}`), `Missing ${heading} section`);
}
assert.ok(quickstart.includes('git clone https://github.com/affaan-m/ECC.git'));
assert.ok(quickstart.includes('cd ECC'));
assert.ok(quickstart.includes('node tests/run-all.js'));
assert.ok(quickstart.includes('skills/hermes-imports/SKILL.md'));
});
@@ -348,6 +351,35 @@ test('release name and plugin publication checklist freezes rc.1 surfaces', () =
assert.ok(referenceArchitecture.includes('Keep the release/name/plugin publication checklist current'));
});
test('active release identity surfaces use canonical ECC repo URLs', () => {
const activeFiles = [
'README.md',
'.codex-plugin/README.md',
'.codex-plugin/plugin.json',
'.opencode/README.md',
'.opencode/package.json',
'docs/business/metrics-and-sponsorship.md',
'docs/releases/2.0.0-rc.1/quickstart.md',
'docs/releases/2.0.0-rc.1/x-thread.md',
'docs/releases/2.0.0-rc.1/publication-readiness.md',
'docs/releases/2.0.0-rc.1/naming-and-publication-matrix.md',
'docs/releases/2.0.0-rc.1/release-url-ledger-2026-05-19.md',
'ecc2/Cargo.toml',
'scripts/platform-audit.js',
'scripts/discussion-audit.js',
];
const offenders = [];
for (const relativePath of activeFiles) {
const source = read(relativePath);
if (source.includes('affaan-m/everything-claude-code')) {
offenders.push(relativePath);
}
}
assert.deepStrictEqual(offenders, []);
});
test('release checklist and roadmap link to publication readiness evidence gate', () => {
const launchChecklist = read('docs/releases/2.0.0-rc.1/launch-checklist.md');
const roadmap = read('docs/ECC-2.0-GA-ROADMAP.md');

View File

@@ -134,6 +134,11 @@ test('agent.yaml version matches package.json', () => {
assert.strictEqual(match[1], expectedVersion);
});
test('agent.yaml uses canonical ECC identity', () => {
const agentYamlSource = fs.readFileSync(agentYamlPath, 'utf8');
assert.ok(/^name:\s*ecc$/m.test(agentYamlSource), 'Expected agent.yaml to use the ecc name');
});
test('VERSION file matches package.json', () => {
const versionFile = fs.readFileSync(versionFilePath, 'utf8').trim();
assert.ok(versionFile, 'Expected VERSION file to be non-empty');
@@ -149,7 +154,7 @@ test('docs/SELECTIVE-INSTALL-ARCHITECTURE.md repoVersion example matches package
test('.opencode/plugins/ecc-hooks.ts active plugin banner matches package.json', () => {
const source = fs.readFileSync(opencodeHooksPluginPath, 'utf8');
const match = source.match(new RegExp(`## Active Plugin: Everything Claude Code v(${semverPattern})`));
const match = source.match(new RegExp(`## Active Plugin: ECC v(${semverPattern})`));
assert.ok(match, 'Expected .opencode/plugins/ecc-hooks.ts to declare an active plugin banner');
assert.strictEqual(match[1], expectedVersion);
});
@@ -346,6 +351,11 @@ test('codex plugin.json has interface.displayName', () => {
);
});
test('codex plugin.json uses canonical ECC repo and display name', () => {
assert.strictEqual(codexPlugin.repository, 'https://github.com/affaan-m/ECC');
assert.strictEqual(codexPlugin.interface.displayName, 'ECC');
});
// ── .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');
@@ -522,6 +532,10 @@ test('.codex-plugin README uses current marketplace add flow', () => {
readme.includes('codex plugin marketplace add'),
'Expected .codex-plugin README to document codex plugin marketplace add',
);
assert.ok(
readme.includes('codex plugin marketplace add affaan-m/ECC'),
'Expected .codex-plugin README to document the canonical ECC repo marketplace source',
);
assert.ok(
readme.includes('Official Plugin Directory publishing is coming soon'),
'Expected .codex-plugin README to document current official directory status',

View File

@@ -102,10 +102,10 @@ function runTests() {
try {
const shimPath = writeGhShim(rootDir, {
[discussionEnabledGhKey('affaan-m', 'everything-claude-code')]: {
[discussionEnabledGhKey('affaan-m', 'ECC')]: {
data: { repository: { hasDiscussionsEnabled: true } }
},
[discussionGhKey('affaan-m', 'everything-claude-code')]: {
[discussionGhKey('affaan-m', 'ECC')]: {
data: {
repository: {
hasDiscussionsEnabled: true,
@@ -142,7 +142,7 @@ function runTests() {
const parsed = JSON.parse(run([
'--json',
'--repo',
'affaan-m/everything-claude-code'
'affaan-m/ECC'
], {
cwd: rootDir,
env: {
@@ -165,10 +165,10 @@ function runTests() {
try {
const shimPath = writeGhShim(rootDir, {
[discussionEnabledGhKey('affaan-m', 'everything-claude-code')]: {
[discussionEnabledGhKey('affaan-m', 'ECC')]: {
data: { repository: { hasDiscussionsEnabled: true } }
},
[discussionGhKey('affaan-m', 'everything-claude-code')]: {
[discussionGhKey('affaan-m', 'ECC')]: {
data: {
repository: {
hasDiscussionsEnabled: true,
@@ -195,7 +195,7 @@ function runTests() {
const result = runProcess([
'--json',
'--repo',
'affaan-m/everything-claude-code',
'affaan-m/ECC',
'--exit-code'
], {
cwd: rootDir,
@@ -220,10 +220,10 @@ function runTests() {
try {
const shimPath = writeGhShim(rootDir, {
[discussionEnabledGhKey('affaan-m', 'everything-claude-code')]: {
[discussionEnabledGhKey('affaan-m', 'ECC')]: {
data: { repository: { hasDiscussionsEnabled: true } }
},
[discussionGhKey('affaan-m', 'everything-claude-code')]: {
[discussionGhKey('affaan-m', 'ECC')]: {
data: {
repository: {
hasDiscussionsEnabled: true,
@@ -237,7 +237,7 @@ function runTests() {
'--write',
outputPath,
'--repo',
'affaan-m/everything-claude-code'
'affaan-m/ECC'
], {
cwd: rootDir,
env: { ECC_GH_SHIM: shimPath }

View File

@@ -83,11 +83,12 @@ function seedRepo(rootDir, overrides = {}) {
'docs/releases/2.0.0-rc.1/publication-readiness.md': 'Claude plugin Codex plugin release-name-plugin-publication-checklist-2026-05-18.md',
'docs/releases/2.0.0-rc.1/naming-and-publication-matrix.md': 'Claude plugin Codex plugin npm package Publication Paths',
'docs/releases/2.0.0-rc.1/release-name-plugin-publication-checklist-2026-05-18.md': [
'Everything Claude Code (ECC)',
'Ship `v2.0.0-rc.1` as **ECC**',
'affaan-m/ECC',
'ecc-universal',
'claude plugin tag .claude-plugin --dry-run',
'codex plugin marketplace add',
'Do not rename the repo or package until rc.1 is published'
'Do not rename the npm package until rc.1 is published'
].join('\n'),
'docs/releases/2.0.0-rc.1/preview-pack-manifest.md': [
'publication-readiness.md release-notes.md quickstart.md',
@@ -228,7 +229,7 @@ function runTests() {
'--allow-untracked',
'docs/drafts/',
'--repo',
'affaan-m/everything-claude-code',
'affaan-m/ECC',
'--generated-at',
'2026-05-15T00:00:00.000Z'
]);
@@ -237,7 +238,7 @@ function runTests() {
assert.strictEqual(parsed.root, path.resolve(rootDir));
assert.strictEqual(parsed.skipGithub, true);
assert.deepStrictEqual(parsed.allowUntracked, ['docs/drafts/']);
assert.deepStrictEqual(parsed.repos, ['affaan-m/everything-claude-code']);
assert.deepStrictEqual(parsed.repos, ['affaan-m/ECC']);
assert.strictEqual(parsed.generatedAt, '2026-05-15T00:00:00.000Z');
assert.throws(() => parseArgs(['node', 'script', '--format', 'xml']), /Invalid format/);

View File

@@ -177,7 +177,7 @@ function runTests() {
`--root=${rootDir}`,
'--json',
'--repo',
'affaan-m/everything-claude-code',
'affaan-m/ECC',
'--max-open-prs',
'5',
'--max-open-issues',
@@ -188,7 +188,7 @@ function runTests() {
assert.strictEqual(parsed.format, 'json');
assert.strictEqual(parsed.root, path.resolve(rootDir));
assert.deepStrictEqual(parsed.repos, ['affaan-m/everything-claude-code']);
assert.deepStrictEqual(parsed.repos, ['affaan-m/ECC']);
assert.strictEqual(parsed.thresholds.maxOpenPrs, 5);
assert.strictEqual(parsed.thresholds.maxOpenIssues, 6);
assert.deepStrictEqual(parsed.allowUntracked, ['docs/drafts/']);
@@ -256,12 +256,12 @@ function runTests() {
try {
seedRepo(projectRoot);
const shimPath = writeGhShim(projectRoot, {
'pr list --repo affaan-m/everything-claude-code --state open --json number,title,isDraft,mergeStateStatus,updatedAt,url,author': [],
'issue list --repo affaan-m/everything-claude-code --state open --json number,title,updatedAt,url,author,labels': [],
[discussionEnabledGhKey('affaan-m', 'everything-claude-code')]: {
'pr list --repo affaan-m/ECC --state open --json number,title,isDraft,mergeStateStatus,updatedAt,url,author': [],
'issue list --repo affaan-m/ECC --state open --json number,title,updatedAt,url,author,labels': [],
[discussionEnabledGhKey('affaan-m', 'ECC')]: {
data: { repository: { hasDiscussionsEnabled: true } }
},
[discussionGhKey('affaan-m', 'everything-claude-code')]: {
[discussionGhKey('affaan-m', 'ECC')]: {
data: {
repository: {
hasDiscussionsEnabled: true,
@@ -289,7 +289,7 @@ function runTests() {
'--format=json',
`--root=${projectRoot}`,
'--repo',
'affaan-m/everything-claude-code'
'affaan-m/ECC'
], {
cwd: projectRoot,
env: {
@@ -325,12 +325,12 @@ function runTests() {
author: { login: 'contributor' }
}));
const shimPath = writeGhShim(projectRoot, {
'pr list --repo affaan-m/everything-claude-code --state open --json number,title,isDraft,mergeStateStatus,updatedAt,url,author': prs,
'issue list --repo affaan-m/everything-claude-code --state open --json number,title,updatedAt,url,author,labels': [],
[discussionEnabledGhKey('affaan-m', 'everything-claude-code')]: {
'pr list --repo affaan-m/ECC --state open --json number,title,isDraft,mergeStateStatus,updatedAt,url,author': prs,
'issue list --repo affaan-m/ECC --state open --json number,title,updatedAt,url,author,labels': [],
[discussionEnabledGhKey('affaan-m', 'ECC')]: {
data: { repository: { hasDiscussionsEnabled: true } }
},
[discussionGhKey('affaan-m', 'everything-claude-code')]: {
[discussionGhKey('affaan-m', 'ECC')]: {
data: {
repository: {
hasDiscussionsEnabled: true,
@@ -358,7 +358,7 @@ function runTests() {
'--format=json',
`--root=${projectRoot}`,
'--repo',
'affaan-m/everything-claude-code',
'affaan-m/ECC',
'--max-open-prs',
'2'
], {