QA cycling workflow - test, verify, fix, repeat until goal met
[ULTRAQA ACTIVATED - AUTONOMOUS QA CYCLING]
You are now in ULTRAQA mode - an autonomous QA cycling workflow that runs until your quality goal is met.
Cycle: qa-tester → architect verification → fix → repeat
Parse the goal from arguments. Supported formats:
| Invocation | Goal Type | What to Check |
|---|---|---|
/ultraqa --tests | tests | All test suites pass |
/ultraqa --build | build | Build succeeds with exit 0 |
/ultraqa --lint | lint | No lint errors |
/ultraqa --typecheck | typecheck | No TypeScript errors |
/ultraqa --custom "pattern" | custom | Custom success pattern in output |
If no structured goal provided, interpret the argument as a custom goal.
RUN QA: Execute verification based on goal type
--tests: Run the project's test command--build: Run the project's build command--lint: Run the project's lint command--typecheck: Run the project's type check command--custom: Run appropriate command and check for pattern--interactive: Use qa-tester for interactive CLI/service testing:
delegate(role="qa-tester", tier="STANDARD", task="TEST:
Goal: [describe what to verify]
Service: [how to start]
Test cases: [specific scenarios to verify]")
CHECK RESULT: Did the goal pass?
ARCHITECT DIAGNOSIS: Spawn architect to analyze failure
delegate(role="architect", tier="THOROUGH", task="DIAGNOSE FAILURE:
Goal: [goal type]
Output: [test/build output]
Provide root cause and specific fix recommendations.")
FIX ISSUES: Apply architect's recommendations
delegate(role="executor", tier="STANDARD", task="FIX:
Issue: [architect diagnosis]
Files: [affected files]
Apply the fix precisely as recommended.")
REPEAT: Go back to step 1
| Condition | Action |
|---|---|
| Goal Met | Exit with success: "ULTRAQA COMPLETE: Goal met after N cycles" |
| Cycle 5 Reached | Exit with diagnosis: "ULTRAQA STOPPED: Max cycles. Diagnosis: ..." |
| Same Failure 3x | Exit early: "ULTRAQA STOPPED: Same failure detected 3 times. Root cause: ..." |
| Environment Error | Exit: "ULTRAQA ERROR: [tmux/port/dependency issue]" |
Output progress each cycle:
[ULTRAQA Cycle 1/5] Running tests...
[ULTRAQA Cycle 1/5] FAILED - 3 tests failing
[ULTRAQA Cycle 1/5] Architect diagnosing...
[ULTRAQA Cycle 1/5] Fixing: auth.test.ts - missing mock
[ULTRAQA Cycle 2/5] Running tests...
[ULTRAQA Cycle 2/5] PASSED - All 47 tests pass
[ULTRAQA COMPLETE] Goal met after 2 cycles
Use omx_state MCP tools for UltraQA lifecycle state.
state_write({mode: "ultraqa", active: true, current_phase: "qa", iteration: 1, started_at: "<now>"})state_write({mode: "ultraqa", current_phase: "qa", iteration: <cycle>})state_write({mode: "ultraqa", current_phase: "diagnose"})
state_write({mode: "ultraqa", current_phase: "fix"})state_write({mode: "ultraqa", active: false, current_phase: "complete", completed_at: "<now>"})state_read({mode: "ultraqa"})Good: The user says continue after the workflow already has a clear next step. Continue the current branch of work instead of restarting or re-asking the same question.
Good: The user changes only the output shape or downstream delivery step (for example make a PR). Preserve earlier non-conflicting workflow constraints and apply the update locally.
Bad: The user says continue, and the workflow restarts discovery or stops before the missing verification/evidence is gathered.
User can cancel with /cancel which clears the state file.
When goal is met OR max cycles reached OR exiting early, run $cancel or call:
state_clear({mode: "ultraqa"})
Use MCP state cleanup rather than deleting files directly.
Begin ULTRAQA cycling now. Parse the goal and start cycle 1.