docs: verify Codex marketplace readiness (#1931)

This commit is contained in:
Affaan Mustafa
2026-05-15 12:30:26 -04:00
committed by GitHub
parent 701b350f6f
commit e4fa157d12
8 changed files with 84 additions and 16 deletions

View File

@@ -181,7 +181,7 @@ test('preview pack manifest assembles release, Hermes, and publication gates', (
'GitHub prerelease `v2.0.0-rc.1`',
'npm `ecc-universal@2.0.0-rc.1`',
'Claude plugin tag',
'Codex plugin publication',
'Codex repo-marketplace distribution evidence',
'ECC Tools billing/product readiness',
]) {
assert.ok(manifest.includes(blocker), `preview pack manifest missing blocker ${blocker}`);
@@ -254,6 +254,7 @@ test('publication readiness checklist gates public release actions on evidence',
'npm package',
'Claude plugin',
'Codex plugin',
'Codex repo marketplace',
'OpenCode package',
'ECC Tools billing reference',
'Announcement copy',
@@ -265,8 +266,12 @@ test('publication readiness checklist gates public release actions on evidence',
assert.ok(may15Evidence.includes('PR #1921'));
assert.ok(may15Evidence.includes('AgentShield PR #83'));
assert.ok(may15Evidence.includes('ECC Tools PR #73'));
assert.ok(may15Evidence.includes('## Codex Marketplace Evidence'));
assert.ok(may15Evidence.includes('codex plugin marketplace add <local-checkout>'));
assert.ok(may15Evidence.includes('Plugin Directory publishing is still blocked'));
assert.ok(may15Evidence.includes('announcementGate.ready === true'));
assert.ok(source.includes('ECC-Tools #73 added announcementGate'));
assert.ok(source.includes('official Plugin Directory publishing and self-serve management are documented as coming soon'));
assert.ok(may15Evidence.includes('| Trunk discussions | GraphQL discussion count and maintainer-touch sweep | 58 total discussions;'));
assert.ok(source.includes('58 trunk discussions, 0 without maintainer touch'));
assert.ok(may15Evidence.includes('env -u GITHUB_TOKEN'));

View File

@@ -433,11 +433,15 @@ test('marketplace local plugin path resolves to the repo-root Codex bundle', ()
continue;
}
const resolvedRoot = path.resolve(path.dirname(marketplacePath), plugin.source.path);
assert.ok(
plugin.source.path.startsWith('./'),
`Codex marketplace source.path must be ./-prefixed: ${plugin.source.path}`,
);
const resolvedRoot = path.resolve(repoRoot, plugin.source.path);
assert.strictEqual(
resolvedRoot,
repoRoot,
`Expected local marketplace path to resolve to repo root, got: ${plugin.source.path}`,
`Expected local marketplace path to resolve to repo root from marketplace root, got: ${plugin.source.path}`,
);
assert.ok(
fs.existsSync(path.join(resolvedRoot, '.codex-plugin', 'plugin.json')),
@@ -512,6 +516,22 @@ test('user-facing docs do not use the legacy non-URL marketplace add form', () =
);
});
test('.codex-plugin README uses current marketplace add flow', () => {
const readme = fs.readFileSync(path.join(repoRoot, '.codex-plugin', 'README.md'), 'utf8');
assert.ok(
readme.includes('codex plugin marketplace add'),
'Expected .codex-plugin README to document codex plugin marketplace add',
);
assert.ok(
readme.includes('Official Plugin Directory publishing is coming soon'),
'Expected .codex-plugin README to document current official directory status',
);
assert.ok(
!/\bcodex plugin install\b/.test(readme),
'codex plugin install is not a current Codex CLI command',
);
});
test('docs/zh-CN/README.md version row matches package.json', () => {
const readme = fs.readFileSync(zhCnReadmePath, 'utf8');
const match = readme.match(new RegExp(`^\\| \\*\\*版本\\*\\* \\| 插件 \\| 插件 \\| 参考配置 \\| (${semverPattern}) \\|$`, 'm'));