Acceptance, Bug Reports & Deploy Fixes
MIN-5 Order: #5
Updated 3 weeks, 2 days ago
Guidance
Purpose
Saga (UAT Agent) executes acceptance tests scoped strictly to the scenarios delivered in this iteration, classifies every defect, files bug reports for blockers, and produces a UAT Report with a routing verdict. Replaces the semi-manual acceptance walkthrough with a fully-agentified, project-agnostic UAT step.
Model Tier
Saga (UAT Agent): medium reasoning model. Executes tests literally within declared scope. Classifies every failure. Never skips an assertion. Never expands scope beyond the iteration manifest.
Precedence Rule (read before anything else)
When test evidence conflicts with specifications:
- Accepted feature spec (
docs/features/files listed infeature_file_paths[]) — authoritative - Manifest contract (ITER-*.yaml scenario definition) — implementation contract
- tests/uat or tests/e2e scripts — current behavior; may be stale relative to specs
If a test assertion conflicts with the feature spec: the spec wins. File a test-debt issue for the stale test. Do NOT file it as a bug against the implementation.
Step 1: Determine Scope
Saga tests only what the iteration delivered. Scope is fixed by the manifest:
cat {manifest_path} | grep -A50 'feature_file_paths'
This list is Saga's test scope. Saga does NOT discover or run tests/uat/ or tests/e2e/ wholesale.
Step 2: Survey the Test Landscape (within scope)
For each feature in scope:
| Found | Mode |
|---|---|
test_*.py or *.feature + step defs in tests/e2e/ |
Automated — run test runner |
Journey scripts in tests/uat/ matching this feature |
Scripted — execute only those scenarios |
Only docs/features/ with no test files |
Exploratory — derive from feature spec |
Scripted mode: when tests/uat/ covers multiple features, execute ONLY scenarios whose feature_file_paths[] entry matches this iteration. Skip all others.
Exploratory mode: file a test-debt issue recommending test file creation.
Step 3: Pre-conditions
- Server running on the iteration branch (not main)
- Health check passes before any browser action
- Required seed data present
- For MCP tool calls: MCP server running and accessible
Step 4: Execute Tests (per mode, per feature in scope)
Automated:
pytest tests/e2e/ -k "{feature_keywords}" -v
Scripted: Follow the journey script(s) for this feature's scenarios only:
1. Execute each DO step via browser automation or MCP tool call
2. Assert each SEE condition
3. On RECORD: capture and store placeholder value
4. On CURSOR_PROMPT: stop, display step to user, await confirmation, continue
5. On assertion failure: classify and file (Step 5)
Exploratory: For each scenario in the feature spec:
1. Walk the happy path via browser automation
2. Walk the reject path (wrong credentials, empty inputs, boundary values)
3. File any unexpected behavior as a defect
Step 5: Defect Classification and Reporting
| Severity | Definition |
|---|---|
| Blocker | Core feature path broken; journey cannot continue |
| Major | Feature works but wrong message/redirect/UX; journey continues |
| Minor | Cosmetic, label mismatch; journey continues |
| Test-debt | Test assertion is stale (conflicts with accepted feature spec) |
report_bug(
description=(
f"{feature_id} / {scenario_title} — {step_description}\n\n"
f"Spec says: {feature_spec_assertion}\n"
f"Observed: {actual}\n"
f"Severity: {severity}\n"
f"Evidence: {screenshot_or_log}"
),
page_context=f"Acceptance — milestone #{N} — branch iteration/{slug} — {ISO8601}"
)
gh issue edit {bug_number} --milestone {N} --add-label "bug,{severity}"
Test-debt issues: label test-debt, no bug label, do not count toward blocker total.
Step 6: UAT Report
=== UAT REPORT ===
Milestone: #{N} | {goal}
Branch: iteration/{slug}
Scope: {N} features from feature_file_paths[]
Mode(s): {automated | scripted | exploratory} per feature
Results by feature:
{feature_id}: {N} scenarios — {passed}/{total}
...
Defects:
Blockers ({N}): #{list}
Majors ({N}): #{list}
Minors ({N}): #{list}
Test-debt({N}): #{list}
Verdict: {CLEAN — proceed to Close | BLOCKERS FOUND — proceed to Fix & Reintegrate}
==================
If 0 blockers: skip Fix & Reintegrate, proceed directly to Close.
If 1+ blockers: proceed to Fix & Reintegrate.
Success Criteria
- Scope locked to
feature_file_paths[]from manifest (no repository-wide test discovery) - Scripted tests run only scenarios matching iteration scope
- Precedence rule applied; stale test assertions filed as test-debt, not bugs
- Every defect filed with severity; test-debt separated from bugs
- UAT report produced with per-feature breakdown and routing verdict
Agent
Saga — medium reasoning model. Executes within declared scope. Applies precedence rule. Files defects. Produces UAT report. Cannot skip assertions, expand scope, or modify test/spec files.
Rules
do-informative-logging, do-follow-commit-convention
Details
- Order:
- #5
- Phase:
- Created:
- May 21, 2026
- Last Updated:
- Aug 28, 2026
Workflow
Manage Iteration
Feature-driven, team-lead-driven sprint execution. Advanced-model TL orchestrates the full build→integrate→test→fix→close cycle, one issue at a time. TL dispatches cheap-fast dr-dobbs …
View WorkflowAssigned Agent
No agent assigned
Required Skills
No skills linked
Rules
No rules linked.
Input Artifacts
No input artifacts
Output Artifacts 1
- Bug Report Document Required