diff --git a/plugins/corbits-skills/skills/implement/SKILL.md b/plugins/corbits-skills/skills/implement/SKILL.md index a8d7c23e3..6144d0bde 100644 --- a/plugins/corbits-skills/skills/implement/SKILL.md +++ b/plugins/corbits-skills/skills/implement/SKILL.md @@ -92,7 +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. -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. +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. 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 @@ -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 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 3d939be01..56fe9ffa2 100644 --- a/src/agent/directors/builder/package.test.ts +++ b/src/agent/directors/builder/package.test.ts @@ -167,6 +167,30 @@ describe("builderPackage", () => { expect(prompt).toMatch(/Summary \/ Findings \/ Blockers \/ Paths/); }); + test("systemPrompt wires same-unit tests, docs upkeep, and report mapping", () => { + const p = builderPackage.systemPrompt; + expect(p).toMatch(/same commit/); + 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", () => { 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..b4bfa9e88 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 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. ## Build Gate @@ -79,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.