fix(P03): honest execution — real rollback, honest orchestrator, git-native verification

---ci---
project: ci
phase: 3
milestone: v0.5
status: complete
decisions:
  - id: D-026
    decision: Phase 3 Honest Execution complete
    rationale: All HONEST requirements covered; no more fake success returns
    confidence: 0.95
    alternatives: []
requirements:
  covered: [HONEST-01, HONEST-02, HONEST-03]
---/ci---
This commit is contained in:
Jon Chery
2026-05-29 16:44:46 +00:00
parent 815c928a43
commit 5753e2dc96
4 changed files with 174 additions and 16 deletions
+54 -4
View File
@@ -224,7 +224,8 @@ export class OrchestratorAgent extends BaseAgent {
cwd: context.project_path,
stdio: "pipe",
});
} catch {
} catch (err) {
this.warn(`Specify commit failed: ${err instanceof Error ? err.message : String(err)}`);
}
}
} else {
@@ -275,6 +276,21 @@ export class OrchestratorAgent extends BaseAgent {
this.log("Researching project domain...");
this.decisionEngine!.setPhase(1);
const archMd = this.ciFiles!.readArchitectureMd();
if (!archMd) {
this.log("No ARCHITECTURE.md found — mechanical research cannot proceed without backend");
return {
phase: this.pipelineState!.current_phase,
stage: "research",
success: false,
artifacts_created: artifactsCreated,
decisions_made: decisionsMade,
escalations_raised: escalationsRaised,
duration_ms: Date.now() - stageStart,
error: "Research stage requires intelligence backend or existing ARCHITECTURE.md",
};
}
if (this.config.git.auto_commit && this.gitContext!.isGitRepo()) {
const researchCommit = CommitBuilder.buildResearchCommit(
1,
@@ -288,7 +304,8 @@ export class OrchestratorAgent extends BaseAgent {
cwd: context.project_path,
stdio: "pipe",
});
} catch {
} catch (err) {
this.warn(`Research commit failed: ${err instanceof Error ? err.message : String(err)}`);
}
}
@@ -309,11 +326,42 @@ export class OrchestratorAgent extends BaseAgent {
case "execute":
this.log("Executing implementation...");
if (!context.backend) {
this.log("No backend available — mechanical execution cannot implement code changes");
return {
phase: this.pipelineState!.current_phase,
stage: "execute",
success: false,
artifacts_created: artifactsCreated,
decisions_made: decisionsMade,
escalations_raised: escalationsRaised,
duration_ms: Date.now() - stageStart,
error: "Execute stage requires intelligence backend for code implementation",
};
}
this.pipelineState!.execute_completed = true;
break;
case "verify": {
this.log("Running verification...");
const { VerificationPipeline } = await import("../verification/index.js");
const verification = new VerificationPipeline(context.project_path);
const verifyResult = await verification.run(this.pipelineState!.current_phase || 1);
if (!verifyResult.all_passed) {
return {
phase: this.pipelineState!.current_phase,
stage: "verify",
success: false,
artifacts_created: artifactsCreated,
decisions_made: decisionsMade,
escalations_raised: escalationsRaised,
duration_ms: Date.now() - stageStart,
error: `Verification failed: ${verifyResult.escalations_needed.join("; ")}`,
};
}
this.pipelineState!.verify_completed = true;
if (this.config.git.auto_commit && this.gitContext!.isGitRepo()) {
@@ -329,7 +377,8 @@ export class OrchestratorAgent extends BaseAgent {
cwd: context.project_path,
stdio: "pipe",
});
} catch {
} catch (err) {
this.warn(`Verify commit failed: ${err instanceof Error ? err.message : String(err)}`);
}
}
@@ -354,7 +403,8 @@ export class OrchestratorAgent extends BaseAgent {
cwd: context.project_path,
stdio: "pipe",
});
} catch {
} catch (err) {
this.warn(`Completion commit failed: ${err instanceof Error ? err.message : String(err)}`);
}
}