mirror of
https://github.com/affaan-m/everything-claude-code.git
synced 2026-05-20 19:29:58 +08:00
chore: gate canonical ECC release identity (#1991)
This commit is contained in:
@@ -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');
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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 }
|
||||
|
||||
@@ -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/);
|
||||
|
||||
@@ -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'
|
||||
], {
|
||||
|
||||
Reference in New Issue
Block a user