5.5 KiB
5.5 KiB
Step 4: Evaluate Gate
Purpose
Determine overall pass/fail status based on execution results. If failed and self-healing is enabled, generate fix context and trigger the quick-dev fix loop.
Inputs
| Input | Source | Required |
|---|---|---|
| results | Step 3 | Yes |
| passed_count | Step 3 | Yes |
| failed_count | Step 3 | Yes |
| failed_details | Step 3 | Yes |
| max_retries | CLI | Yes (default: 2) |
| current_attempt | State | Yes (starts at 0) |
| self_heal_enabled | Config | Yes (default: true) |
Process
4.1 Check All Results
if failed_count == 0:
gate_status = PASS
→ Skip to Step 5 (Report Results)
else:
gate_status = FAIL
→ Continue to 4.2
4.2 Evaluate Retry Eligibility
if current_attempt >= max_retries:
→ Max retries exceeded, halt
exit_code = 2
if self_heal_enabled == false:
→ Self-healing disabled, report failure
exit_code = 1
→ Continue to 4.3 (Generate Fix Context)
4.3 Generate Fix Context Document
Create fix context document at:
{sprint_artifacts}/uat-fixes/epic-{epic_id}-fix-context-{attempt}.md
4.3.1 Load Template
Load from: {workflow_path}/uat-fix-context-template.md
If template not found, use inline default structure.
4.3.2 Populate Template Variables
| Variable | Value |
|---|---|
{epic_id} |
Epic ID being validated |
{attempt} |
Current fix attempt number |
{timestamp} |
ISO 8601 timestamp |
{max_retries} |
Maximum retry limit |
{next_attempt} |
attempt + 1 |
{failure_count} |
Number of failed scenarios |
{passed} |
Number of passed scenarios |
{total} |
Total scenarios executed |
4.3.3 Append Failed Scenario Details
For each failed scenario:
### Scenario {id}: {name}
**Command Executed:**
```bash
{command}
Expected Result: {expected_result}
Actual Result:
{actual_output}
Error Output:
{stderr}
Exit Code: {exit_code}
Related Story: {story_id} (if determinable)
Root Cause Hint: {analyze_error_for_hints}
#### 4.3.4 Add Fix Instructions
```markdown
## Fix Instructions
Address the failures above in priority order. For each fix:
1. **Analyze** - Understand why the scenario failed
2. **Locate** - Find the relevant code files
3. **Fix** - Implement the minimum change to resolve
4. **Verify** - Run the scenario command locally
5. **Commit** - Use: `fix(epic-{epic_id}): {description}`
### Constraints
- Only fix identified failures
- Do not refactor unrelated code
- Run tests after fixes: `npm test`
4.4 Trigger Quick-Dev Fix
Spawn a fresh Claude session for fixes:
fix_prompt="You are Barry, the Quick Flow Solo Dev.
Load and process this fix context document:
{fix_context_file}
Your task:
1. Read the failed scenarios and error details
2. Analyze root cause for each failure
3. Implement targeted fixes
4. Run the failing commands to verify fixes
5. Stage changes: git add -A
6. Commit: fix(epic-{epic_id}): UAT fix #{attempt}
Constraints:
- Only fix identified failures
- Do not refactor unrelated code
- Run tests after fixes
When done, output:
FIX_COMPLETE: {fixed_count}/{failure_count}"
claude --dangerously-skip-permissions -p "$fix_prompt"
4.5 Increment and Re-validate
After fix session completes:
- Increment
current_attempt - Return to Step 3 (Execute Scenarios)
- Re-run validation with fresh results
current_attempt += 1
→ Go to Step 3: Execute Scenarios
→ Then return to Step 4: Evaluate Gate
4.6 Gate Decision Flowchart
┌─────────────────┐
│ Execute Results │
└────────┬────────┘
│
▼
┌─────────┐
│All Pass?│──Yes──▶ GATE_PASS (exit 0)
└────┬────┘
│No
▼
┌──────────────┐
│ Retries Left?│──No──▶ GATE_FAIL (exit 2)
└──────┬───────┘ Max retries exceeded
│Yes
▼
┌──────────────┐
│Self-Heal On? │──No──▶ GATE_FAIL (exit 1)
└──────┬───────┘ Fixable but disabled
│Yes
▼
┌──────────────┐
│Generate Fix │
│Context Doc │
└──────┬───────┘
│
▼
┌──────────────┐
│Spawn Quick- │
│Dev Fix │
└──────┬───────┘
│
▼
┌──────────────┐
│Re-validate │──────▶ (Back to Execute)
└──────────────┘
Outputs
| Output | Location | Description |
|---|---|---|
| gate_status | State | PASS or FAIL |
| fix_context_file | Path | Generated fix context (if failed) |
| fix_attempt | State | Current attempt number |
Completion Signal
GATE_EVALUATED: PASS
or
GATE_EVALUATED: FAIL
FIX_CONTEXT: {fix_context_file}
FIX_ATTEMPT: {attempt}/{max_retries}
Error Handling
| Error | Action |
|---|---|
| Template not found | Use inline default template |
| Fix context write fails | Log error, continue without self-healing |
| Claude session fails | Log output, count as failed attempt |
| Fix didn't resolve issue | Increment attempt, retry if allowed |