Final QA Launcher
Starts the dev server in tmux, generates a QA checklist from ticket and plan, and guides human through final manual verification.
Configuration
Uses the production API by default. No configuration needed for read operations.
Defaults (no setup required):
- API URL:
https://api-gateway-856475788601.us-central1.run.app - Read-only endpoints at
/public/*require no authentication
For write operations (state transitions), set:
export PIPELINE_API_KEY="..." # Get from GCP Secret Manager or ask admin
Prerequisites
- Code review complete
- All review items addressed
- Ready for final human verification
Workflow
1. Get Ticket Context
import { PipelineClient, PipelineAPIError } from '@pipeline/client'
const client = new PipelineClient({
apiUrl: process.env.PIPELINE_API_URL || 'https://api-gateway-856475788601.us-central1.run.app',
agentId: process.env.AGENT_ID!,
})
const ticket = await client.getTicket(ticketId).catch(() => null)
if (!ticket) {
console.error('❌ No pipeline ticket found. Run ticket-intake first to register this ticket.')
// Stop here - ticket-intake must run before this skill
}
2. Determine Server Type
Ask the user:
Which dev server should I start?
A) pnpm dev - Standard (default)
B) pnpm dev:cloud - Cloud features
C) pnpm dev:electron - Electron features
(or specify custom command)
3. Start Dev Server
Use tmux to start the server in the background:
# Kill existing dev-server window if present
tmux list-windows 2>/dev/null | grep -q dev-server && tmux kill-window -t dev-server
# Create new window and start server
tmux new-window -n "dev-server" -d
tmux send-keys -t "dev-server" "cd {frontend-dir} && pnpm dev:cloud" C-m
Replace {frontend-dir} with the actual ComfyUI_frontend path.
4. Wait for Server Ready
Poll until the server is ready (look for localhost URL):
for i in {1..30}; do
output=$(tmux capture-pane -p -t "dev-server")
if echo "$output" | grep -qE "localhost:[0-9]+"; then
break
fi
sleep 2
done
5. Print Server Info
Once ready, output:
✅ Dev server started
URL: http://localhost:5173 (or detected URL)
To view logs: tmux capture-pane -p -t "dev-server"
To stop: tmux kill-window -t "dev-server"
6. Generate QA Checklist
Use ticket data from the API and local plan.md. Create a checklist:
# QA Checklist: {Ticket Title}
## Acceptance Criteria
(from ticket via API)
- [ ] {Criterion 1}
- [ ] {Criterion 2}
## Implementation Verification
(from local plan.md)
- [ ] {Feature 1} works as expected
- [ ] {Feature 2} works as expected
## Standard Checks
- [ ] No console errors in browser DevTools
- [ ] No network errors in DevTools Network tab
- [ ] Responsive: works on desktop width
- [ ] Responsive: works on mobile width (if applicable)
- [ ] Keyboard navigation works (if applicable)
- [ ] Loading states display correctly
- [ ] Error states display correctly
- [ ] No visual regressions in related areas
## Edge Cases
- [ ] Empty state handled
- [ ] Error state handled
- [ ] Large data handled (if applicable)
- [ ] Concurrent actions handled (if applicable)
## Integration
- [ ] Feature works with rest of application
- [ ] No breaks in related features
7. Save & Present Checklist
Save to local qa-checklist.md and print to user:
Please verify each item manually in the browser.
When complete:
- "approved" - Continue to PR creation
- "issue: {description}" - Report an issue found
- "stop" - Stop for now, will continue later
8. Handle User Response
If "approved":
- Prompt: "Ready to create PR. Continue?"
If "issue: {description}":
- Log the issue
- Ask: "Fix now or note for later?"
- If fix now: return to implementation mode
- If note: add to known issues list
If "stop":
- Save current state locally
- Output: "State saved. Resume with 'final-qa-launcher' skill."
9. Cleanup
Ask:
Keep dev server running? (Y/n)
If no, run:
tmux kill-window -t "dev-server"
Local Working Artifacts
| Artifact | Location | Notes |
|---|---|---|
| Plan | plan.md | Implementation plan, stays local |
| QA Checklist | qa-checklist.md | Generated checklist, stays local |
Notes
- Dev server startup typically takes 10-30 seconds
- Vite prints the URL when ready
- Keep checklist focused—don't overwhelm with items
- Standard checks apply to all tickets
- Acceptance criteria come from ticket via API
- Server persists across the QA session until explicitly stopped
