228 lines
7.3 KiB
Markdown
228 lines
7.3 KiB
Markdown
---
|
|
title: Agent Completion Artifacts
|
|
description: Documentation for agent completion artifact contract and formats
|
|
---
|
|
|
|
# Agent Completion Artifacts
|
|
|
|
This directory stores completion artifacts created by BMAD workflow agents.
|
|
|
|
## Purpose
|
|
|
|
**Problem:** Agents were failing to update story files reliably (60% success rate).
|
|
|
|
**Solution:** Agents create JSON completion artifacts instead. Orchestrator reads these artifacts to update story files mechanically.
|
|
|
|
## Contract
|
|
|
|
### Agent Responsibility
|
|
Each agent MUST create a completion artifact before finishing:
|
|
- File path: `{{story_key}}-{{agent_name}}.json`
|
|
- Format: Structured JSON (see formats below)
|
|
- Verification: File exists = work done (binary check)
|
|
|
|
### Orchestrator Responsibility
|
|
Orchestrator reads completion artifacts and:
|
|
- Parses JSON for structured data
|
|
- Updates story file tasks (check off completed)
|
|
- Fills Dev Agent Record with evidence
|
|
- Verifies updates succeeded
|
|
|
|
## Why This Works
|
|
|
|
**File-based verification:**
|
|
- ✅ Binary check: File exists or doesn't
|
|
- ✅ No complex parsing of agent output
|
|
- ✅ No reconciliation logic needed
|
|
- ✅ Hard stop if artifact missing
|
|
|
|
**JSON format:**
|
|
- ✅ Easy to parse reliably
|
|
- ✅ Structured data (not prose)
|
|
- ✅ Version controllable
|
|
- ✅ Auditable trail
|
|
|
|
## Artifact Formats
|
|
|
|
### Builder Completion (`{{story_key}}-builder.json`)
|
|
|
|
```json
|
|
{
|
|
"story_key": "19-4",
|
|
"agent": "builder",
|
|
"status": "SUCCESS",
|
|
"tasks_completed": [
|
|
"Create PaymentProcessor service",
|
|
"Add retry logic with exponential backoff"
|
|
],
|
|
"files_created": [
|
|
"lib/billing/payment-processor.ts",
|
|
"lib/billing/__tests__/payment-processor.test.ts"
|
|
],
|
|
"files_modified": [
|
|
"lib/billing/worker.ts"
|
|
],
|
|
"tests": {
|
|
"files": 2,
|
|
"cases": 15
|
|
},
|
|
"timestamp": "2026-01-27T02:30:00Z"
|
|
}
|
|
```
|
|
|
|
### Inspector Completion (`{{story_key}}-inspector.json`)
|
|
|
|
```json
|
|
{
|
|
"story_key": "19-4",
|
|
"agent": "inspector",
|
|
"status": "PASS",
|
|
"quality_checks": {
|
|
"type_check": "PASS",
|
|
"lint": "PASS",
|
|
"build": "PASS"
|
|
},
|
|
"tests": {
|
|
"passing": 45,
|
|
"failing": 0,
|
|
"total": 45,
|
|
"coverage": 95
|
|
},
|
|
"files_verified": [
|
|
"lib/billing/payment-processor.ts",
|
|
"lib/billing/__tests__/payment-processor.test.ts"
|
|
],
|
|
"timestamp": "2026-01-27T02:35:00Z"
|
|
}
|
|
```
|
|
|
|
### Reviewer Completion (`{{story_key}}-reviewer.json`)
|
|
|
|
```json
|
|
{
|
|
"story_key": "19-4",
|
|
"agent": "reviewer",
|
|
"status": "ISSUES_FOUND",
|
|
"issues": {
|
|
"critical": 2,
|
|
"high": 3,
|
|
"medium": 4,
|
|
"low": 2,
|
|
"total": 11
|
|
},
|
|
"must_fix": [
|
|
{
|
|
"severity": "CRITICAL",
|
|
"location": "api/occupant/agreement/route.ts:45",
|
|
"description": "SQL injection vulnerability"
|
|
},
|
|
{
|
|
"severity": "HIGH",
|
|
"location": "lib/rentals/expiration-alerts.ts:67",
|
|
"description": "N+1 query pattern"
|
|
}
|
|
],
|
|
"files_reviewed": [
|
|
"api/occupant/agreement/route.ts",
|
|
"lib/rentals/expiration-alerts.ts"
|
|
],
|
|
"timestamp": "2026-01-27T02:40:00Z"
|
|
}
|
|
```
|
|
|
|
### Fixer Completion (`{{story_key}}-fixer.json`)
|
|
|
|
**This is the FINAL artifact used by orchestrator for reconciliation.**
|
|
|
|
```json
|
|
{
|
|
"story_key": "19-4",
|
|
"agent": "fixer",
|
|
"status": "SUCCESS",
|
|
"issues_fixed": {
|
|
"critical": 2,
|
|
"high": 3,
|
|
"total": 5
|
|
},
|
|
"fixes_applied": [
|
|
"Fixed SQL injection in agreement route (CRITICAL)",
|
|
"Added authorization check in admin route (CRITICAL)",
|
|
"Fixed N+1 query pattern (HIGH)"
|
|
],
|
|
"files_modified": [
|
|
"api/occupant/agreement/route.ts",
|
|
"api/admin/rentals/spaces/[id]/route.ts",
|
|
"lib/rentals/expiration-alerts.ts"
|
|
],
|
|
"quality_checks": {
|
|
"type_check": "PASS",
|
|
"lint": "PASS",
|
|
"build": "PASS"
|
|
},
|
|
"tests": {
|
|
"passing": 48,
|
|
"failing": 0,
|
|
"total": 48,
|
|
"coverage": 96
|
|
},
|
|
"git_commit": "a1b2c3d4e5f",
|
|
"timestamp": "2026-01-27T02:50:00Z"
|
|
}
|
|
```
|
|
|
|
## Verification Flow
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────────┐
|
|
│ Agent Phase │
|
|
├─────────────────────────────────────────────────────────────┤
|
|
│ 1. Agent does work (build/inspect/review/fix) │
|
|
│ 2. Agent creates completion.json with Write tool │
|
|
│ 3. Agent returns "AGENT COMPLETE" message │
|
|
└─────────────────────────────────────────────────────────────┘
|
|
│
|
|
▼
|
|
┌─────────────────────────────────────────────────────────────┐
|
|
│ Verification Gate │
|
|
├─────────────────────────────────────────────────────────────┤
|
|
│ 1. Orchestrator checks: [ -f "$COMPLETION_FILE" ] │
|
|
│ 2. If missing → HALT (hard stop) │
|
|
│ 3. If exists → Verify files claimed actually exist │
|
|
│ 4. If files missing → HALT (hard stop) │
|
|
└─────────────────────────────────────────────────────────────┘
|
|
│
|
|
▼
|
|
┌─────────────────────────────────────────────────────────────┐
|
|
│ Reconciliation Phase (After Fixer) │
|
|
├─────────────────────────────────────────────────────────────┤
|
|
│ 1. Orchestrator reads fixer completion.json │
|
|
│ 2. Orchestrator parses JSON for structured data │
|
|
│ 3. Orchestrator updates story file using Edit tool │
|
|
│ 4. Orchestrator verifies updates with bash checks │
|
|
│ 5. If verification fails → Fix and retry │
|
|
└─────────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
## Benefits
|
|
|
|
**Reliability:** 60% → 100% (file exists is binary)
|
|
**Simplicity:** No complex output parsing
|
|
**Auditability:** JSON files are version controlled
|
|
**Debuggability:** Can inspect completion artifacts when issues occur
|
|
**Enforcement:** Can't proceed without completion artifact (hard stop)
|
|
|
|
## Cleanup
|
|
|
|
Completion artifacts can be deleted after successful reconciliation, or kept for audit trail.
|
|
|
|
Suggested cleanup: After story marked "done", move artifacts to archive or delete.
|
|
|
|
```bash
|
|
# Archive completed story artifacts
|
|
mv docs/sprint-artifacts/completions/19-4-*.json \
|
|
docs/sprint-artifacts/completions/archive/
|
|
|
|
# Or delete after verification
|
|
rm docs/sprint-artifacts/completions/19-4-*.json
|
|
```
|