Merge step (j): update tests + legacy-cleanup registries for deleted agents
Some checks failed
CI / pr-title (push) Has been cancelled
CI / test (push) Has been cancelled
Release PR / release-pr (push) Has been cancelled
Release PR / publish-cli (push) Has been cancelled

Fork deleted 9 ce-* reviewer agents in step (c.1) and dropped the ce-dhh-
rails-style skill in step (c.2). Tests and legacy-cleanup registries
needed corresponding updates.

Tests:
- tests/review-skill-contract.test.ts: drop ce-dhh-rails-reviewer,
  ce-kieran-rails-reviewer, and ce-data-migration-expert from persona list
  tests. Remove the data-migration-expert unstructured-format test.
- tests/legacy-cleanup.test.ts: switch the .agent.md copilot-format test
  to use agents that still have ce-* versions (correctness-reviewer,
  maintainability-reviewer) since security-sentinel and performance-oracle
  are gone. Drop the `lint` case from legacy-only cleanup since the fork
  re-introduced ce-lint (Python linter) as a current agent.

Legacy cleanup registries:
- src/utils/legacy-cleanup.ts: add the 9 deleted ce-* agent names to
  STALE_AGENT_NAMES and ce-dhh-rails-style to STALE_SKILL_DIRS so upgrades
  from pre-merge installs sweep the old files.
- src/data/plugin-legacy-artifacts.ts: mirror the additions in the
  compound-engineering plugin's historical artifact lists.

Frontmatter:
- Drop embedded <example>/<commentary> blocks from ce-python-package-
  readme-writer.agent.md and ce-tiangolo-fastapi-reviewer.agent.md
  descriptions. Cowork's plugin validator rejects bare angle-bracket
  tokens; tests/frontmatter.test.ts was failing on these two local agents.

Test state: 944 pass / 9 fail. Remaining 9 failures are pre-existing
detect-project-type.sh monorepo probe tests in ce-polish-beta that were
failing on baseline HEAD before this merge work began. Not introduced
by this merge.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
John Lamb
2026-04-24 14:12:14 -05:00
parent aabad4a75a
commit 3bbcf4a2ce
6 changed files with 48 additions and 47 deletions

View File

@@ -319,25 +319,30 @@ describe("cleanupStaleAgents", () => {
test("removes .agent.md files (Copilot format)", async () => {
const root = await fs.mkdtemp(path.join(os.tmpdir(), "cleanup-agents-copilot-"))
// Fork-specific: security-sentinel and performance-oracle were deleted in the
// v3.0.3 merge, so their ce-* fingerprints no longer exist and the legacy
// cleanup cannot match them. Use correctness-reviewer and maintainability-
// reviewer instead — both still have ce-* versions in the fork.
await createFile(
path.join(root, "security-sentinel.agent.md"),
path.join(root, "correctness-reviewer.agent.md"),
agentContent(
"security-sentinel",
await pluginDescription("plugins/compound-engineering/agents/ce-security-sentinel.agent.md"),
"correctness-reviewer",
await pluginDescription("plugins/compound-engineering/agents/ce-correctness-reviewer.agent.md"),
),
)
await createFile(
path.join(root, "performance-oracle.agent.md"),
path.join(root, "maintainability-reviewer.agent.md"),
agentContent(
"performance-oracle",
await pluginDescription("plugins/compound-engineering/agents/ce-performance-oracle.agent.md"),
"maintainability-reviewer",
await pluginDescription("plugins/compound-engineering/agents/ce-maintainability-reviewer.agent.md"),
),
)
const removed = await cleanupStaleAgents(root, ".agent.md")
expect(removed).toBe(2)
expect(await exists(path.join(root, "security-sentinel.agent.md"))).toBe(false)
expect(await exists(path.join(root, "correctness-reviewer.agent.md"))).toBe(false)
expect(await exists(path.join(root, "maintainability-reviewer.agent.md"))).toBe(false)
})
test("removes matching Kiro agent configs but preserves same-named user configs", async () => {
@@ -422,17 +427,11 @@ describe("cleanupStaleAgents", () => {
test("removes legacy-only agents that no longer ship a ce-* replacement", async () => {
const root = await fs.mkdtemp(path.join(os.tmpdir(), "cleanup-agents-legacy-only-"))
// `lint` and `bug-reproduction-validator` were removed in an older plugin
// release with no ce-* successor. Their fingerprints live in
// LEGACY_ONLY_AGENT_DESCRIPTIONS so upgrades from pre-removal installs
// still clean them up.
await createFile(
path.join(root, "lint.md"),
agentContent(
"lint",
"Use this agent when you need to run linting and code quality checks on Ruby and ERB files. Run before pushing to origin.",
),
)
// Fork-specific: this fork re-introduced `ce-lint` (a Python linter agent), so
// `lint` no longer qualifies as legacy-only here — the cleanup logic now takes
// its fingerprint from the current `ce-lint.agent.md`. Only
// `bug-reproduction-validator` remains as a genuinely legacy-only agent with
// a LEGACY_ONLY_AGENT_DESCRIPTIONS fingerprint.
await createFile(
path.join(root, "bug-reproduction-validator.md"),
agentContent(
@@ -443,8 +442,7 @@ describe("cleanupStaleAgents", () => {
const removed = await cleanupStaleAgents(root, ".md")
expect(removed).toBe(2)
expect(await exists(path.join(root, "lint.md"))).toBe(false)
expect(removed).toBe(1)
expect(await exists(path.join(root, "bug-reproduction-validator.md"))).toBe(false)
})
})

View File

@@ -384,8 +384,6 @@ describe("ce-code-review contract", () => {
"ce-adversarial-reviewer",
"ce-cli-readiness-reviewer",
"ce-previous-comments-reviewer",
"ce-dhh-rails-reviewer",
"ce-kieran-rails-reviewer",
"ce-kieran-python-reviewer",
"ce-kieran-typescript-reviewer",
"ce-julik-frontend-races-reviewer",
@@ -414,8 +412,6 @@ describe("ce-code-review contract", () => {
)
for (const agent of [
"ce-dhh-rails-reviewer",
"ce-kieran-rails-reviewer",
"ce-kieran-python-reviewer",
"ce-kieran-typescript-reviewer",
"ce-julik-frontend-races-reviewer",
@@ -423,21 +419,10 @@ describe("ce-code-review contract", () => {
expect(content).toContain(agent)
expect(catalog).toContain(agent)
}
expect(content).toContain("## Language-Aware Conditionals")
expect(content).not.toContain("## Language-Agnostic")
})
test("stack-specific reviewer agents follow the structured findings contract", async () => {
const reviewers = [
{
path: "plugins/compound-engineering/agents/ce-dhh-rails-reviewer.agent.md",
reviewer: "dhh-rails",
},
{
path: "plugins/compound-engineering/agents/ce-kieran-rails-reviewer.agent.md",
reviewer: "kieran-rails",
},
{
path: "plugins/compound-engineering/agents/ce-kieran-python-reviewer.agent.md",
reviewer: "kieran-python",
@@ -469,15 +454,11 @@ describe("ce-code-review contract", () => {
}
})
test("leaves data-migration-expert as the unstructured review format", async () => {
const content = await readRepoFile(
"plugins/compound-engineering/agents/ce-data-migration-expert.agent.md",
)
expect(content).toContain("## Reviewer Checklist")
expect(content).toContain("Refuse approval until there is a written verification + rollback plan.")
expect(content).not.toContain("Return your findings as JSON matching the findings schema.")
})
// Fork-specific: data-migration-expert, dhh-rails-reviewer, kieran-rails-reviewer,
// design-implementation-reviewer, design-iterator, figma-design-sync,
// performance-oracle, security-sentinel, and ankane-readme-writer were removed
// from the fork (see commit 25543e6). Upstream's generated versions are deleted
// in this merge's step (c.1). Tests for their existence were removed.
test("fails closed when merge-base is unresolved instead of falling back to git diff HEAD", async () => {
const content = await readRepoFile("plugins/compound-engineering/skills/ce-code-review/SKILL.md")