Skip to content

Commit 7f91077

Browse files
committed
Rename the implement director id to build
1 parent 3c5fe68 commit 7f91077

15 files changed

Lines changed: 58 additions & 50 deletions

File tree

scripts/eval-capability.test.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,9 @@ describe("parseArgs", () => {
6262
expect(pair.model).toBe("bar");
6363
});
6464

65-
test("--director implement is parsed", () => {
66-
const opts = parseArgs(["--provider", "foo", "--model", "bar", "--director", "implement"]);
67-
expect(opts.director).toBe("implement");
65+
test("--director build is parsed", () => {
66+
const opts = parseArgs(["--provider", "foo", "--model", "bar", "--director", "build"]);
67+
expect(opts.director).toBe("build");
6868
});
6969

7070
test("omitted --director stays undefined", () => {

src/agent/directors/build/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export { buildDirectorPackage } from "./package.js";

src/agent/directors/implement/package.test.ts renamed to src/agent/directors/build/package.test.ts

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,70 +1,70 @@
11
import { describe, expect, test } from "bun:test";
2-
import { implementPackage } from "./package.js";
2+
import { buildDirectorPackage } from "./package.js";
33

4-
describe("implementPackage", () => {
4+
describe("buildDirectorPackage", () => {
55
test("id matches directory / registry id", () => {
6-
expect(implementPackage.id).toBe("implement");
6+
expect(buildDirectorPackage.id).toBe("build");
77
});
88

99
test("systemPrompt is non-empty and not a Placeholder", () => {
10-
expect(implementPackage.systemPrompt.length).toBeGreaterThan(0);
11-
expect(implementPackage.systemPrompt.startsWith("Placeholder")).toBe(false);
10+
expect(buildDirectorPackage.systemPrompt.length).toBeGreaterThan(0);
11+
expect(buildDirectorPackage.systemPrompt.startsWith("Placeholder")).toBe(false);
1212
});
1313

1414
test("systemPrompt mentions PRIMARY INTENT", () => {
15-
expect(implementPackage.systemPrompt).toContain("PRIMARY INTENT");
15+
expect(buildDirectorPackage.systemPrompt).toContain("PRIMARY INTENT");
1616
});
1717

1818
test("spawn.maySpawn is false (leaf)", () => {
19-
expect(implementPackage.spawn.maySpawn).toBe(false);
19+
expect(buildDirectorPackage.spawn.maySpawn).toBe(false);
2020
});
2121

2222
test("tools.allow includes product write tools", () => {
23-
const allow = implementPackage.tools?.allow ?? [];
23+
const allow = buildDirectorPackage.tools?.allow ?? [];
2424
expect(allow).toContain("write_file");
2525
expect(allow).toContain("edit_file");
2626
expect(allow).toContain("delete_file");
2727
});
2828

2929
test("report.requiredSections includes Summary, Findings, Blockers, Paths", () => {
30-
const sections = implementPackage.report.requiredSections;
30+
const sections = buildDirectorPackage.report.requiredSections;
3131
expect(sections).toContain("Summary");
3232
expect(sections).toContain("Findings");
3333
expect(sections).toContain("Blockers");
3434
expect(sections).toContain("Paths");
3535
});
3636

3737
test("modelRole is implement", () => {
38-
expect(implementPackage.modelRole).toBe("implement");
38+
expect(buildDirectorPackage.modelRole).toBe("implement");
3939
});
4040

4141
test("optionalSkills order is style, philosophy, typescript", () => {
42-
expect(implementPackage.optionalSkills).toEqual(["style", "philosophy", "typescript"]);
42+
expect(buildDirectorPackage.optionalSkills).toEqual(["style", "philosophy", "typescript"]);
4343
});
4444

4545
test("systemPrompt has DONE GATE for success_criteria", () => {
46-
const prompt = implementPackage.systemPrompt;
46+
const prompt = buildDirectorPackage.systemPrompt;
4747
expect(prompt).toContain("DONE GATE");
4848
expect(prompt).toContain("success_criteria");
4949
expect(prompt).toMatch(/[Ss]top when/);
5050
});
5151

5252
test("systemPrompt has VERIFY language", () => {
53-
const prompt = implementPackage.systemPrompt;
53+
const prompt = buildDirectorPackage.systemPrompt;
5454
expect(prompt).toContain("VERIFY");
5555
expect(prompt).toMatch(/typecheck|tests/);
5656
expect(prompt).toContain("Blockers");
5757
});
5858

5959
test("systemPrompt has REPORT MAP for criteria and Paths", () => {
60-
const prompt = implementPackage.systemPrompt;
60+
const prompt = buildDirectorPackage.systemPrompt;
6161
expect(prompt).toContain("REPORT MAP");
6262
expect(prompt).toMatch(/success_criteria.*pass|fail|blocked/s);
6363
expect(prompt).toMatch(/Paths must list files touched/);
6464
});
6565

6666
test("systemPrompt has API CONTRACT for sync/async preservation", () => {
67-
const prompt = implementPackage.systemPrompt;
67+
const prompt = buildDirectorPackage.systemPrompt;
6868
expect(prompt).toContain("API CONTRACT");
6969
expect(prompt).toMatch(/sync/i);
7070
expect(prompt).toMatch(/Promise|async/);
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import type { DirectorPackage } from "../types.js";
2-
import { IMPLEMENT_TOOLS } from "../tool-sets.js";
2+
import { BUILD_TOOLS } from "../tool-sets.js";
33

4-
export const implementPackage: DirectorPackage = {
5-
id: "implement",
4+
export const buildDirectorPackage: DirectorPackage = {
5+
id: "build",
66
primaryIntent: "Ship product code with tests to satisfy the brief",
77
outOfLane: [
88
"architecture gates",
@@ -13,7 +13,7 @@ export const implementPackage: DirectorPackage = {
1313
],
1414
description: "Implementation leaf — edit, verify, report",
1515
optionalSkills: ["style", "philosophy", "typescript"],
16-
tools: { allow: IMPLEMENT_TOOLS },
16+
tools: { allow: BUILD_TOOLS },
1717
spawn: { maySpawn: false },
1818
nudge: { maxTurns: 60 },
1919
report: { requiredSections: ["Summary", "Findings", "Blockers", "Paths"] },

src/agent/directors/identity.test.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@ import { DIRECTOR_REGISTRY } from "./registry.js";
88

99
describe("formatDirectorSystemPrompt", () => {
1010
test("prefixes agent id, model role, and optional skills", () => {
11-
const text = formatDirectorSystemPrompt(DIRECTOR_REGISTRY.implement);
12-
expect(text.startsWith("Identity: agent id `implement`")).toBe(true);
13-
expect(text).toContain('task(agent="implement")');
11+
const text = formatDirectorSystemPrompt(DIRECTOR_REGISTRY.build);
12+
expect(text.startsWith("Identity: agent id `build`")).toBe(true);
13+
expect(text).toContain('task(agent="build")');
1414
expect(text).toContain("Model role: implement.");
1515
expect(text).toContain("style, philosophy, typescript");
16-
expect(text).toContain(DIRECTOR_REGISTRY.implement.systemPrompt);
16+
expect(text).toContain(DIRECTOR_REGISTRY.build.systemPrompt);
1717
});
1818

1919
test("intern reports no optional skills by default", () => {
@@ -25,7 +25,7 @@ describe("formatDirectorSystemPrompt", () => {
2525
describe("defaultEffortForDirector", () => {
2626
test("intern is low; implement is medium; greybeard is high", () => {
2727
expect(defaultEffortForDirector(DIRECTOR_REGISTRY.intern)).toBe("low");
28-
expect(defaultEffortForDirector(DIRECTOR_REGISTRY.implement)).toBe(
28+
expect(defaultEffortForDirector(DIRECTOR_REGISTRY.build)).toBe(
2929
MODEL_ROLE_DEFAULT_EFFORT.implement,
3030
);
3131
expect(defaultEffortForDirector(DIRECTOR_REGISTRY.greybeard)).toBe("high");

src/agent/directors/implement/index.ts

Lines changed: 0 additions & 1 deletion
This file was deleted.

src/agent/directors/registry.test.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ describe("director registry", () => {
5050
test("intent map defaults (no general)", () => {
5151
expect(resolveDirector({ intent: "implement" })).toMatchObject({
5252
ok: true,
53-
package: { id: "implement" },
53+
package: { id: "build" },
5454
});
5555
expect(resolveDirector({ intent: "explore" })).toMatchObject({
5656
ok: true,
@@ -154,8 +154,8 @@ describe("director registry", () => {
154154
}
155155
});
156156

157-
test("implement mounts product writes; intern is shell-only; other leaves do not spawn", () => {
158-
expect(DIRECTOR_REGISTRY.implement.tools?.allow).toEqual(
157+
test("build mounts product writes; intern is shell-only; other leaves do not spawn", () => {
158+
expect(DIRECTOR_REGISTRY.build.tools?.allow).toEqual(
159159
expect.arrayContaining(["write_file", "edit_file", "delete_file"]),
160160
);
161161
const internAllow = DIRECTOR_REGISTRY.intern.tools?.allow ?? [];

src/agent/directors/registry.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { emilPackage } from "./emil/index.js";
77
import { explorePackage } from "./explore/index.js";
88
import { gaasbotPackage } from "./gaasbot/index.js";
99
import { greybeardPackage } from "./greybeard/index.js";
10-
import { implementPackage } from "./implement/index.js";
10+
import { buildDirectorPackage } from "./build/index.js";
1111
import { internPackage } from "./intern/index.js";
1212
import { neckbeardPackage } from "./neckbeard/index.js";
1313
import { planPackage } from "./plan/index.js";
@@ -27,7 +27,7 @@ import {
2727

2828
/** Intent → default director when `task(agent=…)` is omitted. No general director. */
2929
export const INTENT_DEFAULT_DIRECTOR: Readonly<Record<Exclude<TaskIntent, "general">, DirectorId>> = {
30-
implement: "implement",
30+
implement: "build",
3131
explore: "explore",
3232
plan: "plan",
3333
review: "critique",
@@ -39,7 +39,7 @@ export const INTENT_DEFAULT_DIRECTOR: Readonly<Record<Exclude<TaskIntent, "gener
3939
*/
4040
export const DIRECTOR_REGISTRY: Readonly<Record<DirectorId, DirectorPackage>> = {
4141
skywalker: skywalkerPackage,
42-
implement: implementPackage,
42+
build: buildDirectorPackage,
4343
explore: explorePackage,
4444
plan: planPackage,
4545
intern: internPackage,

src/agent/directors/skywalker/package.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ describe("skywalkerPackage", () => {
2424
expect(skywalkerPackage.spawn.maySpawn).toBe(true);
2525
expect(skywalkerPackage.spawn.allowlist).toHaveLength(15);
2626
expect(skywalkerPackage.spawn.allowlist).toEqual([
27-
"implement",
27+
"build",
2828
"explore",
2929
"plan",
3030
"intern",

src/agent/directors/skywalker/package.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ Example chains:
2323
- feature: explore → implement → critique
2424
- "why / how / is this stalled": answer yourself; at most one explore if a single unknown blocks you
2525
26-
Closed directors (use search_agents / registry; each id matches task(agent="<id>")): implement, explore, plan, intern, critique, greybeard, neckbeard, bruckheimer, gaasbot, draper, emil, brand-reviewer, shakespeare, testsmith, tester.
26+
Closed directors (use search_agents / registry; each id matches task(agent="<id>")): build, explore, plan, intern, critique, greybeard, neckbeard, bruckheimer, gaasbot, draper, emil, brand-reviewer, shakespeare, testsmith, tester.
2727
No catch-all worker. If unsure, reclassify — do not spawn a blob agent.
2828
2929
Quick routing:
@@ -131,7 +131,7 @@ Do not reclassify COMMUNICATION as ORCHESTRATION just to justify parallel task s
131131
# Spawn graph
132132
133133
Skywalker = full closed set. Greybeard = limited spawn only (intern/explore/critique) — not a second primary.
134-
You may spawn: implement, explore, plan, intern, critique, greybeard, neckbeard, bruckheimer, gaasbot, draper, emil, brand-reviewer, shakespeare, testsmith, tester.
134+
You may spawn: build, explore, plan, intern, critique, greybeard, neckbeard, bruckheimer, gaasbot, draper, emil, brand-reviewer, shakespeare, testsmith, tester.
135135
136136
When spawning, prefer a typed brief:
137137
- intent — explore | implement | plan | review
@@ -174,7 +174,7 @@ export const skywalkerPackage: DirectorPackage = {
174174
spawn: {
175175
maySpawn: true,
176176
allowlist: [
177-
"implement",
177+
"build",
178178
"explore",
179179
"plan",
180180
"intern",

0 commit comments

Comments
 (0)