fix(P01): replace hardcoded phase=1 in orchestrator and fix getDecisions double-fetch

---ci---
project: ci
phase: 1
milestone: v0.8
status: in_progress
decisions:
  - id: D-021
    decision: 6-phase wave-ordered vertical slices for v0.8
    rationale: Each phase independently demoable; critical fixes first
    confidence: 0.90
requirements:
  covered: [FIX-01, FIX-06]
---/ci---

FIX-01: Replace 5 hardcoded phase=1 literals in orchestrator.ts mechanical
execution path with this.pipelineState!.current_phase. The orchestrator
correctly tracks current_phase but commits always embedded literal 1.

FIX-06: Replace getDecisions() redundant double-fetch with single
getRecentCommits(50) call, delegating to existing getDecisionsFromCommits().
Old code called getRecentCommits(50) once per grep match entry (O(N*M)
when it should be O(1)).
This commit is contained in:
Jon Chery
2026-05-29 19:46:46 +00:00
parent a416413c7d
commit 2306493a77
3 changed files with 10 additions and 29 deletions
+2 -20
View File
@@ -185,26 +185,8 @@ export class GitContext {
}
getDecisions(phase?: number): CommitDecision[] {
const grepArg = phase !== undefined ? `--grep="phase: ${phase}"` : '--grep="decisions:"';
const raw = this.git(`log --all ${grepArg} --format="%B%x01"`);
if (!raw) return [];
const decisions: CommitDecision[] = [];
const entries = raw.split("\x01").filter(Boolean);
for (const entry of entries) {
const commits = this.getRecentCommits(50);
for (const commit of commits) {
if (commit.ci?.decisions) {
if (phase === undefined || commit.ci.phase === phase) {
decisions.push(...commit.ci.decisions);
}
}
}
}
return decisions;
const commits = this.getRecentCommits(50);
return this.getDecisionsFromCommits(commits, phase);
}
getDecisionsFromCommits(commits: ParsedCIAgentCommit[], phase?: number): CommitDecision[] {