Wire validateGoalEvaluation into the stage-11 validation path (#196)#198
Conversation
…tract gate (#196) When a goal is active for the run (goal.json in the run dir, or pinned loop events proving a --goal recipe context), a task targeting 11-feedback-loop must ship a well-formed goal_evaluation section: missing/malformed FAILs with the named shape checks. No active goal or no stage-11 target = no enforcement, the section stays optional. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
sdlc_validate now delegates to validateStageGoalEvaluation (same shared-harness pattern as validateBuilderCompleteness, #118/#154): on a goal-driven run a stage-11 task with a missing or malformed goal_evaluation FAILs validation with the named checks recorded in validation.json. The model-free pipeline run/loop bridge drives the same tool, so the gate covers both paths. 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? |
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (6)
📝 WalkthroughWalkthroughThis PR adds a Stage-11 validation gate that enforces the ChangesStage-11 Goal Evaluation Gate
Estimated code review effort: 3 (Moderate) | ~25 minutes Possibly related issues
Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 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 |
Summary
Runtime enforcement of the agent-11 goal contract — the last prompt-text-only promise from PR #195's adversarial review (finding 6), which product goal 1 forbids.
validateStageGoalEvaluation({ runDir, stageIds })insrc/core/harness/goal-check.js(same shared-API-then-delegate pattern asvalidateBuilderCompleteness, [BLE-2.1] Enforce builder contract completeness #118/feat(harness): builder contract completeness as a shared harness capability #154; same{ok, checks, issues}contract shape). Exported fromsrc/index.js.goal.jsonin the run dir, or the pinned loop events (loop_iteration_started/goal_evaluated) that prove apipeline loop --goal <recipe>context — the recipe file lives outside the run dir, so goal.json absence alone never means "no goal".sdlc_validate(src/integrations/pi/rstack-sdlc.ts): on a goal-driven run, a task targeting11-feedback-loopFAILs validation when feedback.json is missing or itsgoal_evaluationsection is malformed — the named shape checks land in validation.json and the FAIL routes through the existing retry policy, instead of silently degrading to ASK_USER at loop time. The model-freepipeline run/loopbridge drives the same tool, so both paths are covered. Stage targets derive viataskStageIds(the rollup's own derivation), so the gate and the loop's stage reset can never disagree.goal_evaluation_not_requiredPASS; tasks that never target stage 11 see no goal checks at all.Acceptance criteria (from #196)
validateGoalEvaluationwhen a goal definition is active (goal.json present /--goalrecipe context)goal_evaluationon a goal-driven run = validation FAIL with checks/issues recorded in validation.jsontests/harness-goal-check.test.js(missing artifact, absent section, malformed section, well-formed pass, loop-event detection, junk shapes) + end-to-endtests/extension-goal-gate.test.jsthrough the mock-Pisdlc_validate(all five transitions)Verification
npm test— 487/487 passnpm run lint— passnpm run validate— pass (exit 0, all 196 agents)node scripts/security-audit.mjs— baseline OK, 0 blockinggit diff --check— cleanCloses #196
🤖 Generated with Claude Code
Summary by CodeRabbit
New Features
Bug Fixes