From 3fca02d8d901ad72fb5efcbce95e133ce8ad307b Mon Sep 17 00:00:00 2001 From: "hiraoku.shinichi" Date: Fri, 3 Jul 2026 09:07:16 +0900 Subject: [PATCH] Include iteration artifact evidence --- README.md | 2 ++ dist/artifacts.d.ts.map | 2 +- dist/artifacts.js | 4 ++++ dist/builder/BuilderAgent.js | 2 ++ dist/types/contracts.d.ts | 4 ++++ dist/types/contracts.d.ts.map | 2 +- src/artifacts.ts | 4 ++++ src/builder/BuilderAgent.ts | 2 ++ src/types/contracts.ts | 4 ++++ test/builder-agent.test.js | 14 ++++++++++++-- 10 files changed, 36 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index cffd502..7abdac6 100644 --- a/README.md +++ b/README.md @@ -180,6 +180,8 @@ The command writes: - `.kaizen/builder/self-review.json` - `.kaizen/builder/build-result.json` - `.kaizen/builder/iterations//implementation-summary.json` +- `.kaizen/builder/iterations//changed-files.json` +- `.kaizen/builder/iterations//discovered-issues.json` - `.kaizen/builder/iterations//self-review.json` - `.kaizen/builder/iterations//improvement-instructions.json` - `.kaizen/builder/iterations//residual-notes.json` diff --git a/dist/artifacts.d.ts.map b/dist/artifacts.d.ts.map index c4c0f78..0c449b0 100644 --- a/dist/artifacts.d.ts.map +++ b/dist/artifacts.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"artifacts.d.ts","sourceRoot":"","sources":["../src/artifacts.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAqB,MAAM,sBAAsB,CAAC;AAE/F,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAmC1G"} \ No newline at end of file +{"version":3,"file":"artifacts.d.ts","sourceRoot":"","sources":["../src/artifacts.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAqB,MAAM,sBAAsB,CAAC;AAE/F,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAuC1G"} \ No newline at end of file diff --git a/dist/artifacts.js b/dist/artifacts.js index 07adb96..178837b 100644 --- a/dist/artifacts.js +++ b/dist/artifacts.js @@ -15,11 +15,15 @@ export async function writeBuildArtifacts(outDir, result) { await mkdir(iterationDir, { recursive: true }); const paths = { implementationSummaryPath: join(iterationDir, "implementation-summary.json"), + changedFilesPath: join(iterationDir, "changed-files.json"), + discoveredIssuesPath: join(iterationDir, "discovered-issues.json"), selfReviewPath: join(iterationDir, "self-review.json"), improvementInstructionsPath: join(iterationDir, "improvement-instructions.json"), residualNotesPath: join(iterationDir, "residual-notes.json") }; await writeJson(paths.implementationSummaryPath, { summary: artifact.implementationSummary }); + await writeJson(paths.changedFilesPath, artifact.changedFiles); + await writeJson(paths.discoveredIssuesPath, artifact.discoveredIssues); await writeJson(paths.selfReviewPath, artifact.review); await writeJson(paths.improvementInstructionsPath, artifact.improvementInstructions); await writeJson(paths.residualNotesPath, artifact.residualNotes); diff --git a/dist/builder/BuilderAgent.js b/dist/builder/BuilderAgent.js index b3bd75f..71f5b94 100644 --- a/dist/builder/BuilderAgent.js +++ b/dist/builder/BuilderAgent.js @@ -210,6 +210,8 @@ function createIterationArtifact({ iteration, implementation, review, improvemen return { iteration, implementationSummary: summarizeImplementation(implementation), + changedFiles: extractChangedFiles(implementation), + discoveredIssues: extractDiscoveredIssues(implementation), review: cloneJsonValue(review), improvementInstructions: cloneJsonValue(improvementInstructions), residualNotes: extractResidualNotes(implementation) diff --git a/dist/types/contracts.d.ts b/dist/types/contracts.d.ts index 3812a60..dccce3d 100644 --- a/dist/types/contracts.d.ts +++ b/dist/types/contracts.d.ts @@ -116,6 +116,8 @@ export interface BuilderAdapter { export interface IterationArtifact { iteration: number; implementationSummary: string; + changedFiles: string[]; + discoveredIssues: DiscoveredIssue[]; review: SelfReviewResult; improvementInstructions: string[]; residualNotes: string[]; @@ -126,6 +128,8 @@ export interface BuildArtifactPaths { iterationArtifactPaths: Array<{ iteration: number; implementationSummaryPath: string; + changedFilesPath: string; + discoveredIssuesPath: string; selfReviewPath: string; improvementInstructionsPath: string; residualNotesPath: string; diff --git a/dist/types/contracts.d.ts.map b/dist/types/contracts.d.ts.map index 1edb2a0..22651dc 100644 --- a/dist/types/contracts.d.ts.map +++ b/dist/types/contracts.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../src/types/contracts.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../src/types/contracts.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/artifacts.ts b/src/artifacts.ts index e74031b..9627e7b 100644 --- a/src/artifacts.ts +++ b/src/artifacts.ts @@ -20,12 +20,16 @@ export async function writeBuildArtifacts(outDir: string, result: BuildResult): const paths = { implementationSummaryPath: join(iterationDir, "implementation-summary.json"), + changedFilesPath: join(iterationDir, "changed-files.json"), + discoveredIssuesPath: join(iterationDir, "discovered-issues.json"), selfReviewPath: join(iterationDir, "self-review.json"), improvementInstructionsPath: join(iterationDir, "improvement-instructions.json"), residualNotesPath: join(iterationDir, "residual-notes.json") }; await writeJson(paths.implementationSummaryPath, { summary: artifact.implementationSummary }); + await writeJson(paths.changedFilesPath, artifact.changedFiles); + await writeJson(paths.discoveredIssuesPath, artifact.discoveredIssues); await writeJson(paths.selfReviewPath, artifact.review); await writeJson(paths.improvementInstructionsPath, artifact.improvementInstructions); await writeJson(paths.residualNotesPath, artifact.residualNotes); diff --git a/src/builder/BuilderAgent.ts b/src/builder/BuilderAgent.ts index 3f73f50..4a1d689 100644 --- a/src/builder/BuilderAgent.ts +++ b/src/builder/BuilderAgent.ts @@ -255,6 +255,8 @@ function createIterationArtifact({ iteration, implementation, review, improvemen return { iteration, implementationSummary: summarizeImplementation(implementation), + changedFiles: extractChangedFiles(implementation), + discoveredIssues: extractDiscoveredIssues(implementation), review: cloneJsonValue(review), improvementInstructions: cloneJsonValue(improvementInstructions), residualNotes: extractResidualNotes(implementation) diff --git a/src/types/contracts.ts b/src/types/contracts.ts index ac1e865..a7eb8d7 100644 --- a/src/types/contracts.ts +++ b/src/types/contracts.ts @@ -126,6 +126,8 @@ export interface BuilderAdapter { export interface IterationArtifact { iteration: number; implementationSummary: string; + changedFiles: string[]; + discoveredIssues: DiscoveredIssue[]; review: SelfReviewResult; improvementInstructions: string[]; residualNotes: string[]; @@ -137,6 +139,8 @@ export interface BuildArtifactPaths { iterationArtifactPaths: Array<{ iteration: number; implementationSummaryPath: string; + changedFilesPath: string; + discoveredIssuesPath: string; selfReviewPath: string; improvementInstructionsPath: string; residualNotesPath: string; diff --git a/test/builder-agent.test.js b/test/builder-agent.test.js index 68e7c67..a4c51cc 100644 --- a/test/builder-agent.test.js +++ b/test/builder-agent.test.js @@ -503,7 +503,8 @@ export default { return { summary: "Implemented the first version.", changedFiles: ["src/feature.js"], - residualNotes: ["Tests still need to be added."] + residualNotes: ["Tests still need to be added."], + discoveredIssues: [{ title: "Verifier warning needs follow-up", repo: "verifier" }] }; }, async selfReview() { @@ -514,7 +515,8 @@ export default { return { summary: "Added targeted regression coverage.", changedFiles: [...implementation.changedFiles, "test/feature.test.js"], - residualNotes: [] + residualNotes: [], + discoveredIssues: [{ title: "Builder docs need a note", repo: "builder-agent" }] }; } }; @@ -537,10 +539,14 @@ export default { const result = JSON.parse(resultText); const latestReview = JSON.parse(await readFile(join(outDir, "self-review.json"), "utf8")); const iteration1Summary = JSON.parse(await readFile(join(outDir, "iterations", "1", "implementation-summary.json"), "utf8")); + const iteration1ChangedFiles = JSON.parse(await readFile(join(outDir, "iterations", "1", "changed-files.json"), "utf8")); + const iteration1DiscoveredIssues = JSON.parse(await readFile(join(outDir, "iterations", "1", "discovered-issues.json"), "utf8")); const iteration1Review = JSON.parse(await readFile(join(outDir, "iterations", "1", "self-review.json"), "utf8")); const iteration1Instructions = JSON.parse(await readFile(join(outDir, "iterations", "1", "improvement-instructions.json"), "utf8")); const iteration1ResidualNotes = JSON.parse(await readFile(join(outDir, "iterations", "1", "residual-notes.json"), "utf8")); const iteration2Summary = JSON.parse(await readFile(join(outDir, "iterations", "2", "implementation-summary.json"), "utf8")); + const iteration2ChangedFiles = JSON.parse(await readFile(join(outDir, "iterations", "2", "changed-files.json"), "utf8")); + const iteration2DiscoveredIssues = JSON.parse(await readFile(join(outDir, "iterations", "2", "discovered-issues.json"), "utf8")); const iteration2Review = JSON.parse(await readFile(join(outDir, "iterations", "2", "self-review.json"), "utf8")); assert.equal(output.status, "ready"); @@ -548,10 +554,14 @@ export default { assert.equal(result.iterations, 2); assert.equal(latestReview.passed, true); assert.equal(iteration1Summary.summary, "Implemented the first version."); + assert.deepEqual(iteration1ChangedFiles, ["src/feature.js"]); + assert.deepEqual(iteration1DiscoveredIssues, [{ title: "Verifier warning needs follow-up", repo: "verifier" }]); assert.equal(iteration1Review.passed, false); assert.deepEqual(iteration1Instructions, ["Add targeted tests for the requested behavior."]); assert.deepEqual(iteration1ResidualNotes, ["Tests still need to be added."]); assert.equal(iteration2Summary.summary, "Added targeted regression coverage."); + assert.deepEqual(iteration2ChangedFiles, ["src/feature.js", "test/feature.test.js"]); + assert.deepEqual(iteration2DiscoveredIssues, [{ title: "Builder docs need a note", repo: "builder-agent" }]); assert.equal(iteration2Review.passed, true); assert.equal(Object.hasOwn(result, "iterationArtifacts"), false); await assert.rejects(readFile(join(outDir, "iterations", "3", "stale.json"), "utf8"));