From 3b60e762ec772c85753f95a3eb0794eacca4f091 Mon Sep 17 00:00:00 2001 From: Sawyer Cutler Date: Fri, 11 Sep 2026 21:27:03 -0700 Subject: [PATCH 1/3] Wire test, docs, and report conventions into builder chain --- plugins/corbits-skills/skills/implement/SKILL.md | 5 ++++- src/agent/directors/builder/package.test.ts | 8 ++++++++ src/agent/directors/builder/package.ts | 2 ++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/plugins/corbits-skills/skills/implement/SKILL.md b/plugins/corbits-skills/skills/implement/SKILL.md index a8d7c23e3..2150a12fa 100644 --- a/plugins/corbits-skills/skills/implement/SKILL.md +++ b/plugins/corbits-skills/skills/implement/SKILL.md @@ -92,6 +92,8 @@ The order of operations depends on whether you're fixing a bug or building a fea Keep the test focused on the behavior introduced by this commit. Don't test unrelated functionality. The test is part of the deliverable, not an afterthought. +The test lands in the same commit as the implementation (Step 4) — one logical unit (source of truth: style skill, AGENTS.md). + Keep the scope tight to what was discussed. If you discover additional work is needed, finish the current commit's scope first and note the additional work for a future commit. ### Step 3: Build Gate @@ -105,12 +107,13 @@ Run `make` (or the project's equivalent full pipeline: format, lint, build, test - If the build fails due to pre-existing issues unrelated to your changes, report the failure to the caller and let them decide how to proceed - Do not move forward with a broken build - Do not substitute partial builds (e.g., running only the compiler) for the full pipeline +- Record the exact verification commands and their exit statuses: the report maps each success criterion to pass, fail, or blocked with command evidence ### Step 4: Commit Update `activeForm` to "Committing: {subject}". -Create the commit. Follow the commit message conventions from the `style` skill. Include the test in the same commit as the implementation — they are one logical unit of work. +Create the commit. Follow the commit message conventions from the `style` skill. Include the test in the same commit as the implementation — they are one logical unit of work — and the docs updates when the commit changes documented behavior. ### Step 5: Critique Loop diff --git a/src/agent/directors/builder/package.test.ts b/src/agent/directors/builder/package.test.ts index 3d939be01..af596690b 100644 --- a/src/agent/directors/builder/package.test.ts +++ b/src/agent/directors/builder/package.test.ts @@ -167,6 +167,14 @@ describe("builderPackage", () => { expect(prompt).toMatch(/Summary \/ Findings \/ Blockers \/ Paths/); }); + test("systemPrompt wires same-commit tests, docs upkeep, and report mapping", () => { + const p = builderPackage.systemPrompt; + expect(p).toMatch(/same commit/); + expect(p).toMatch(/docs that describe it/i); + expect(p).toContain("success_criteria"); + expect(p).toMatch(/exit status/); + }); + test("systemPrompt preserves public API sync/async under Guidelines", () => { const prompt = builderPackage.systemPrompt; expect(prompt).toMatch(/Public API shapes/i); diff --git a/src/agent/directors/builder/package.ts b/src/agent/directors/builder/package.ts index f4649bc06..57fdea35d 100644 --- a/src/agent/directors/builder/package.ts +++ b/src/agent/directors/builder/package.ts @@ -60,6 +60,8 @@ The order of operations depends on whether you're fixing a bug or building a fea Keep the test focused on the behavior introduced by this unit of work. Don't test unrelated functionality. The test is part of the deliverable, not an afterthought. +Land the test in the same commit as the implementation — one logical unit. When the change alters documented behavior, update the docs that describe it in the same commit (source of truth: style skill, AGENTS.md). + Keep the scope tight to the brief. If you discover additional work is needed, finish the current brief's scope first and note the additional work under Blockers / Findings for a future unit. ## Build Gate From 3c06e39146736c148d9b25527304058aec3bd7a5 Mon Sep 17 00:00:00 2001 From: Sawyer Cutler Date: Fri, 11 Sep 2026 21:47:06 -0700 Subject: [PATCH 2/3] Fix grammar in same-commit docs clause --- plugins/corbits-skills/skills/implement/SKILL.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/corbits-skills/skills/implement/SKILL.md b/plugins/corbits-skills/skills/implement/SKILL.md index 2150a12fa..6194ab322 100644 --- a/plugins/corbits-skills/skills/implement/SKILL.md +++ b/plugins/corbits-skills/skills/implement/SKILL.md @@ -113,7 +113,7 @@ Run `make` (or the project's equivalent full pipeline: format, lint, build, test Update `activeForm` to "Committing: {subject}". -Create the commit. Follow the commit message conventions from the `style` skill. Include the test in the same commit as the implementation — they are one logical unit of work — and the docs updates when the commit changes documented behavior. +Create the commit. Follow the commit message conventions from the `style` skill. Include the test in the same commit as the implementation — they are one logical unit of work — and update the docs when the commit changes documented behavior. ### Step 5: Critique Loop From 9fa56d006a0434dec015ef9996229bb239389294 Mon Sep 17 00:00:00 2001 From: Sawyer Cutler Date: Sat, 12 Sep 2026 09:48:03 -0700 Subject: [PATCH 3/3] Wire docs routing, testsmith consumer, and PR shape into builder chain --- .../corbits-skills/skills/implement/SKILL.md | 6 ++--- src/agent/directors/builder/package.test.ts | 24 +++++++++++++++---- src/agent/directors/builder/package.ts | 4 ++-- 3 files changed, 25 insertions(+), 9 deletions(-) diff --git a/plugins/corbits-skills/skills/implement/SKILL.md b/plugins/corbits-skills/skills/implement/SKILL.md index 6194ab322..6144d0bde 100644 --- a/plugins/corbits-skills/skills/implement/SKILL.md +++ b/plugins/corbits-skills/skills/implement/SKILL.md @@ -92,9 +92,9 @@ The order of operations depends on whether you're fixing a bug or building a fea Keep the test focused on the behavior introduced by this commit. Don't test unrelated functionality. The test is part of the deliverable, not an afterthought. -The test lands in the same commit as the implementation (Step 4) — one logical unit (source of truth: style skill, AGENTS.md). +The test lands in the same unit of work as the implementation (Step 4) — same commit when committing — one logical unit (source of truth: style skill, AGENTS.md). When the caller passes testsmith-designed cases, land them as the implementation tests; any case left unlanded goes in the report with why so the caller can route a tester run. -Keep the scope tight to what was discussed. If you discover additional work is needed, finish the current commit's scope first and note the additional work for a future commit. +Keep the scope tight to what was discussed. If you discover additional work is needed, finish the current commit's scope first and note the additional work for a future commit. When the landing alters documented behavior beyond the discussed doc scope, flag it for the caller so a shakespeare docs pass can follow. ### Step 3: Build Gate @@ -113,7 +113,7 @@ Run `make` (or the project's equivalent full pipeline: format, lint, build, test Update `activeForm` to "Committing: {subject}". -Create the commit. Follow the commit message conventions from the `style` skill. Include the test in the same commit as the implementation — they are one logical unit of work — and update the docs when the commit changes documented behavior. +Create the commit. Follow the commit message conventions from the `style` skill. Include the test in the same unit of work as the implementation — same commit when committing — one logical unit — and update the docs when the commit changes documented behavior. Worker-chain branch/PR convention: branch name carries the issue id, the PR body ends with `Fixes CL-…` and carries no AI-attribution lines (CONTRIBUTING: title stays a plain-English sentence, body is Summary/Verification). ### Step 5: Critique Loop diff --git a/src/agent/directors/builder/package.test.ts b/src/agent/directors/builder/package.test.ts index af596690b..56fe9ffa2 100644 --- a/src/agent/directors/builder/package.test.ts +++ b/src/agent/directors/builder/package.test.ts @@ -167,12 +167,28 @@ describe("builderPackage", () => { expect(prompt).toMatch(/Summary \/ Findings \/ Blockers \/ Paths/); }); - test("systemPrompt wires same-commit tests, docs upkeep, and report mapping", () => { + test("systemPrompt wires same-unit tests, docs upkeep, and report mapping", () => { const p = builderPackage.systemPrompt; expect(p).toMatch(/same commit/); - expect(p).toMatch(/docs that describe it/i); - expect(p).toContain("success_criteria"); - expect(p).toMatch(/exit status/); + expect(p).toMatch(/same commit when committing/); + expect(p).toMatch(/alters documented behavior/i); + expect(p).toMatch(/update the docs/i); + expect(p).toMatch( + /map each success_criteria item to pass, fail, or blocked/, + ); + expect(p).toMatch( + /bare .*pass.*without command evidence.*incomplete report/is, + ); + }); + + test("systemPrompt wires docs routing, testsmith consumer, and branch/PR shape", () => { + const p = builderPackage.systemPrompt; + expect(p).toMatch(/testsmith-designed cases/); + expect(p).toMatch(/route a tester run/); + expect(p).toMatch(/shakespeare docs pass/); + expect(p).toMatch(/branch name carries the issue id/i); + expect(p).toMatch(/Fixes CL-/); + expect(p).toMatch(/no AI-attribution lines/); }); test("systemPrompt preserves public API sync/async under Guidelines", () => { diff --git a/src/agent/directors/builder/package.ts b/src/agent/directors/builder/package.ts index 57fdea35d..b4bfa9e88 100644 --- a/src/agent/directors/builder/package.ts +++ b/src/agent/directors/builder/package.ts @@ -60,7 +60,7 @@ The order of operations depends on whether you're fixing a bug or building a fea Keep the test focused on the behavior introduced by this unit of work. Don't test unrelated functionality. The test is part of the deliverable, not an afterthought. -Land the test in the same commit as the implementation — one logical unit. When the change alters documented behavior, update the docs that describe it in the same commit (source of truth: style skill, AGENTS.md). +Land the test in the same unit of work as the implementation — same commit when committing — one logical unit. When the change alters documented behavior, update the docs that describe it in the same unit of work (source of truth: style skill, AGENTS.md). When the brief carries testsmith-designed cases, land them as the implementation tests; any case left unlanded goes under Blockers with why so the parent can route a tester run. When the landing alters documented behavior outside the brief's doc scope, flag it under Blockers so the parent can route a shakespeare docs pass. Keep the scope tight to the brief. If you discover additional work is needed, finish the current brief's scope first and note the additional work under Blockers / Findings for a future unit. @@ -81,7 +81,7 @@ For implementation work, run the repository-defined typecheck command and releva **Don't shortcut verify.** The value is in the discipline. Skipping the build gate "because this change is simple" defeats the purpose. -**Keep units focused.** Deliver a working tree that satisfies the brief and report. Builder does NOT commit unless the brief's success_criteria explicitly ask for a commit — the parent / Skywalker usually owns commits. Prefer: working tree + report envelope. +**Keep units focused.** Deliver a working tree that satisfies the brief and report. Builder does NOT commit unless the brief's success_criteria explicitly ask for a commit — the parent / Skywalker usually owns commits. Prefer: working tree + report envelope. Worker-chain branch/PR convention for the parent's handoff: branch name carries the issue id, the PR body ends with \`Fixes CL-…\` and carries no AI-attribution lines (CONTRIBUTING: title stays a plain-English sentence, body is Summary/Verification only). **Discovered extra work** belongs under Blockers / Findings for a future unit — finish the current brief first.