[BLE-4.2] Agent-11 goal contract: structured goal_evaluation drives the goal loop (#128)#195
Conversation
…verdict writer (#128) Stage 11's feedback.json may now embed a structured goal_evaluation section. Per-criterion results (met/not_met/unknown) join the existing goal-verdict protocol — same iteration-freshness rules, no second verdict path — and are consumed ONLY when every listed evidence path exists on disk. Unknown or unevidenced claims are rejected with reasons and fall through to the existing ASK_USER path; explicit goal-verdict.json entries outrank agent-11 for the same criterion. Adds normalizeGoalEvaluation / validateGoalEvaluation / goalVerdictsFromFeedback (contracts.js-style checks) and surfaces agent_goal_evaluation {consumed, rejected, issues} on the evaluation for observability. The harness still never calls a model. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…on contract (#128) New Task 8 in the feedback-loop agent: evaluate the run against the active goal.json and emit machine-readable goal_evaluation — status, consistency score, critical count, failing/recommended-rerun stages (routed through the Task-7 maintenance taxonomy), requires_human_decision, reason, and per-criterion results with evidence paths, iteration stamp, and retry/block recommendation. The agent recommends with evidence; the harness evaluator stays the deterministic decision-maker. Interactive review is now Task 9. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
HARNESS.md: verdict protocol gains the evidence-gated agent-11 writer — same protocol, same freshness rules, explicit goal-verdict.json outranks it. loop-recipes.md: architecture-satisfaction recipe now uses stage 11's goal_evaluation as the packaged reviewer and reruns 11-feedback-loop each iteration so the verdict stays fresh. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Qodo reviews are paused for this user.Troubleshooting steps vary by plan Learn more → On a Teams plan? Using GitHub Enterprise Server, GitLab Self-Managed, or Bitbucket Data Center? |
|
Warning Review limit reached
Next review available in: 12 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (7)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
…e id-less shorthand (#128 review) findVerdict matched by criterion_id first across a merged pool, so for a single-judge goal the documented shorthand human verdict {"verdict":"FAIL"} (no criterion_id) lost to an id-matched agent-11 met claim — the goal could pass against an explicit human rejection. The pools are now separate and the explicit goal-verdict.json pool is consumed fully (id match AND shorthand) before any agent-11 verdict is considered. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…med (#128 review) The freshness filter accepts iteration >= current, and the agent stamp comes from a model-written artifact — stamping iteration: 99 at iteration 1 would stay fresh forever. For the agent path only (goal-verdict.json writers are trusted), a stamp GREATER than the current iteration is now rejected with a recorded reason; the honest copy-the-current-iteration case is unaffected. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…so the loop self-refreshes (#128 review) An agent-11 FAIL verdict replaced criterion.rerun_stages with its own recommendation, silently dropping the recipe's 11-feedback-loop wiring — the loop then stalled at ask_user on a stale stamp after one productive iteration. Agent verdicts now UNION with the criterion's rerun_stages (the agent can add stages, never drop wiring); explicit goal-verdict.json keeps its documented replace semantics. Task 8 in the agent prompt now requires self-inclusion of 11-feedback-loop on not_met, semantics documented in HARNESS.md, and the loop test asserts the self-sustaining path (retry resets 06 AND 11, fresh re-evaluation completes) instead of the stall. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
#128 review) Evidence paths now must resolve (path.resolve + relative-prefix check) to a regular file inside the run dir or the project root — '..' traversal, '.', '/', bare directories, and absolute paths outside those roots no longer count as evidence. Docs state the gate's honest limit: it checks evidence EXISTENCE, not RELEVANCE; relevance stays with the validator and the human. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… consumed by neither side (#128 review) Duplicate criterion_id entries with differing result/recommendation were first-entry-wins — met before not_met silently passed the goal. Conflicting duplicates are now dropped entirely (ASK_USER path, rejection recorded) and fail a dedicated goal_evaluation_criteria_no_conflicting_duplicates check in validateGoalEvaluation. Identical duplicates dedupe to the first entry. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Review response — all five BLOCK findings fixed, one commit + test each:
Gates re-run from the worktree: Not addressed by design (per review scope): wiring 🤖 Generated with Claude Code |
Summary
Completes the BLE-4 goal loop: agent 11 (feedback-loop) now emits a structured
goal_evaluationin feedback.json, and the harness goal evaluator consumes it as an evidence-gated writer of the existing verdict protocol — no prose parsing, no second verdict path, and the harness still never calls a model.Harness (
src/core/harness/goal-check.js)normalizeGoalEvaluation/goalVerdictsFromFeedback: per-criterion results (met/not_met/unknown) become judge verdicts through the SAME protocol asgoal-verdict.json— same iteration-freshness rules (older or missing stamp = stale inside a loop iteration),judge: "agent.11-feedback-loop".unknownresults and unevidenced claims are rejected with recorded reasons and fall through to the existingASK_USERpath — the harness never trusts unevidenced claims.goal-verdict.jsonentry outranks the agent-11 evaluation for the same criterion, so a human/host verdict always wins.validateGoalEvaluation: contract check for the section in the same{ok, checks, issues}style as the builder/validator checks (feat(harness): builder contract completeness as a shared harness capability #154 pattern); all new APIs exported fromsrc/index.js.agent_goal_evaluation: { present, consumed, rejected, issues }for observability; ASK_USER reasons explain why an agent claim was not consumed.Agent contract (
agents/sdlc/11-feedback-loop.md)goal.jsonand emitgoal_evaluationwith all the [BLE-4.2] Update Agent 11 goal contract #128 fields (status,consistency_score,critical_count,failing_stages[],recommended_rerun_stages[],requires_human_decision,reason) plus per-criterion results with evidence paths, iteration stamp (read fromloop_iteration_startedevents), maintenance-taxonomy-routed rerun stages, and retry/block recommendation. Boundary stated in the prompt: the agent RECOMMENDS with evidence;goal-check.jsdecides.Docs
docs/HARNESS.md: verdict protocol documents the agent-11 writer path.docs/loop-recipes.md: architecture-satisfaction recipe now uses stage 11 as the packaged reviewer and reruns11-feedback-loopeach iteration so the verdict stays fresh; directgoal-verdict.jsonremains the human override.Invariants held (PR #193 review)
Tests
metwith existing evidence satisfies a judge criterion (PASS).unknownresult never consumed → ASK_USER.not_metremediation maps to stage resets (RETRY with recommended stages);recommendation: "block"→ BLOCK.goal-verdict.jsonoutranks agent-11 for the same criterion.validateGoalEvaluation/normalizeGoalEvaluationschema + junk-shape coverage.not_metresets its stages on iteration 1, goes stale on iteration 2 →ask_user.Verification
npm test(479 pass) ·npm run lint·npm run validate(196 agents) ·node scripts/security-audit.mjs·git diff --check— all green.Closes #128
Closes #126
🤖 Generated with Claude Code