| ํญ๋ชฉ | ๋ด์ฉ |
|---|---|
| Invoke | /feature-qa |
| Aliases | /qa, /quality-check |
| Category | petmedi-development |
| Complexity | moderate |
/feature-qa#
Evaluates a 5-axis QA Health Score per feature and tracks regressions against baselines. gstack
/qapattern reference: quantitative quality score + regression baseline comparison
Triggers#
- After feature implementation for quality verification
- As a quality gate before PR creation
- To check quality regression of existing features
Usage#
# Basic usage: QA by feature path
/feature-qa feature/auth/
# Regression comparison (against previous baseline)
/feature-qa feature/auth/ --regression
# Quick check (functional completeness only)
/feature-qa feature/auth/ --quick
# Specific axis only
/feature-qa feature/auth/ --focus ui,a11y
# Parallel evaluation (Agent Teams)
/feature-qa feature/auth/ --parallel
Parameters#
| Parameter | Required | Description | Example |
|---|---|---|---|
feature_path |
โ | Feature module path | feature/auth/ |
--regression | โ | Compare against previous baseline | |
--quick | โ | Quick check (functional completeness only) | |
--focus |
โ | Focus on specific axes | ui, a11y, perf, i18n, func |
--parallel |
โ | 5-axis parallel evaluation (requires Agent Teams) | |
--save-baseline | โ | Save baseline (default: auto-save) | |
--no-save | โ | Do not save baseline |
5-Axis Evaluation System#
Functional Completeness โ Weight 30%#
| Item | Points | Inspection Method |
|---|---|---|
| Acceptance Criteria met | 30 | Map issue AC to implementation code |
| Edge case handling | 25 | Check null/empty/boundary handling |
| Error handling | 25 | try-catch, ErrorState, user messages |
| Test coverage | 20 | UseCase 100%, BLoC 80%+ target |
Inspection Items:
- Are all ACs mapped to implementation code
- Is null safety handled properly
- Is there user feedback on network errors
- Is empty list state (EmptyState) handled
- Is loading state displayed
UI/UX (Visual) โ Weight 20%#
| Item | Points | Inspection Method |
|---|---|---|
| Correct CoUI component usage | 30 | Verify component API compliance |
| Layout consistency | 25 | Gap/Insets constants used, alignment |
| Color system compliance | 25 | appColors/colorScheme used |
| Typography compliance | 20 | context.textStyles used |
Inspection Items:
- Are CoUI component APIs used correctly (features parameter, etc.)
- Are Gap/Insets constants used (no hardcoded values)
- Are colors accessed via context.appColors / context.colorScheme
- Are text styles accessed via context.textStyles
- Are non-existent APIs like ButtonSize.medium not used
Accessibility โ Weight 20%#
| Item | Points | Inspection Method |
|---|---|---|
| Semantic Labels | 35 | Labels present on images, icons, buttons |
| Touch target size | 30 | Minimum 48x48 verified |
| Color contrast | 20 | WCAG AA criteria |
| Screen reader order | 15 | Logical tab order |
Inspection Items:
- Do Image/Icon have semanticLabel
- Are touchable elements at least 48x48
- Is text-background color contrast 4.5:1 or above
- Are widgets arranged in a meaningful order
Performance โ Weight 15%#
| Item | Points | Inspection Method |
|---|---|---|
| const widget usage | 30 | Check const-eligible widgets |
| BlocBuilder optimization | 25 | buildWhen/listenWhen usage |
| Image optimization | 25 | cacheWidth/cacheHeight applied |
| Resource cleanup | 20 | dispose/cancel verified |
Inspection Items:
- Are const-eligible widgets declared as const
- Is buildWhen applied to BlocBuilder
- Do network images have cacheWidth/cacheHeight
- Are Stream subscriptions cancelled in dispose
- Is BLoC isClosed checked in async handlers
Internationalization (i18n) โ Weight 15%#
| Item | Points | Inspection Method |
|---|---|---|
| Translation key usage | 40 | context.t.* pattern used |
| No hardcoded strings | 30 | UI text hardcoding detection |
| Pluralization handling | 15 | plural/ordinal applied |
| Dynamic value parameterization | 15 | Parameters instead of string interpolation |
Inspection Items:
- Do all UI texts use context.t.*
- Are there no hardcoded Korean/English strings
- Is pluralization handled for texts containing numbers
- Are dynamic values passed as parameters
Health Score Calculation#
Score Computation#
Total = Sum(each axis score x weight) - (Critical issue count x 10)
Each axis score = Sum(item scores) / 100 x 100
Grade Criteria#
| Grade | Score Range | Meaning |
|---|---|---|
| A | 90-100 | Excellent โ production ready |
| B | 80-89 | Good โ minor improvements needed |
| C | 70-79 | Average โ improvements recommended |
| D | 60-69 | Insufficient โ improvements required |
| F | 0-59 | Poor โ must fix before PR creation |
Baseline Storage and Regression Comparison#
Baseline Storage#
Automatically saved to .qa-baseline/{feature-name}.json on QA execution:
{
" feature " : " auth " ,
" date " : " 2026-03-13T10:30:00Z " ,
" grade " : " B " ,
" totalScore " : 85,
" scores " : {
" functional " : { " score " : 90, " weight " : 0.30, " weighted " : 27.0 },
" visual " : { " score " : 80, " weight " : 0.20, " weighted " : 16.0 },
" accessibility " : { " score " : 75, " weight " : 0.20, " weighted " : 15.0 },
" performance " : { " score " : 85, " weight " : 0.15, " weighted " : 12.75 },
" i18n " : { " score " : 90, " weight " : 0.15, " weighted " : 13.5 }
},
" criticalIssues " : 0,
" penalty " : 0,
" issues " : [
{
" axis " : " accessibility " ,
" severity " : " warning " ,
" message " : " semantic label missing " ,
" file " : " lib/src/presentation/widget/author_card.dart " ,
" line " : 42
}
]
}
Regression Comparison#
When using the --regression option, compares against the previous baseline:
## Regression Report: auth
| Axis | Previous | Current | Change |
|------|----------|---------|--------|
| Functional Completeness | 90 | 92 | โ
+2 |
| UI/UX | 80 | 80 | โก๏ธ 0 |
| Accessibility | 75 | 70 | โ ๏ธ -5 |
| Performance | 85 | 88 | โ
+3 |
| i18n | 90 | 90 | โก๏ธ 0 |
| **Total** | **85 (B)** | **84 (B)** | โ ๏ธ -1 |
### Regression Items (score decrease)
- โฟ Accessibility -5 points: semanticLabel missing on newly added ProfileImage
Output Format#
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Feature QA Health Score: auth โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฃ
โ โ
โ Grade: B (85/100) โ
โ โ
โ ๐งช Functional โโโโโโโโโโโโโโโโโโโโโโ 90/100 (ร0.30 = 27.0) โ
โ ๐จ UI/UX โโโโโโโโโโโโโโโโโโโโโโ 80/100 (ร0.20 = 16.0) โ
โ โฟ Accessibility โโโโโโโโโโโโโโโโโโโโโโ 75/100 (ร0.20 = 15.0) โ
โ โก Performance โโโโโโโโโโโโโโโโโโโโโโ 85/100 (ร0.15 = 12.8) โ
โ ๐ i18n โโโโโโโโโโโโโโโโโโโโโโ 90/100 (ร0.15 = 13.5) โ
โ โ
โ Critical: 0 items | Penalty: 0 points โ
โ Baseline: Saved (.qa-baseline/auth.json) โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
### Issues Found (5 items)
| # | Axis | Severity | Issue | File |
|---|------|----------|-------|------|
| 1 | โฟ Accessibility | โ ๏ธ | semantic label missing | author_card.dart:42 |
| 2 | โก Performance | โ ๏ธ | cacheWidth not specified | author_image.dart:15 |
| 3 | ๐ i18n | ๐ก | hardcoded string | author_list_page.dart:28 |
| 4 | ๐จ UI/UX | ๐ก | SizedBox used instead of Gap | author_form.dart:55 |
| 5 | ๐งช Functional | ๐ก | EmptyState not handled | author_list_bloc.dart:30 |
Parallel Evaluation (--parallel, Agent Teams)#
Prerequisites#
CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1environment variable set- If Agent Teams unavailable, automatically falls back to sequential evaluation
Parallel Execution Flow#
When --parallel option is used:
1. Check Agent Teams availability
helpers.md#Check-Agent-Teams-Available
โ Falls back to sequential evaluation if unavailable
2. 3-team parallel evaluation (3 Teammates)
โโ Teammate 1: Functional Completeness (30%)
โ โโ Acceptance Criteria met
โ โโ Edge case handling
โ โโ Error handling
โ โโ Test coverage
โ
โโ Teammate 2: UI/UX (20%) + Accessibility (20%)
โ โโ Correct CoUI component usage
โ โโ Layout/color/typography consistency
โ โโ Semantic Labels
โ โโ Touch target size
โ โโ Color contrast
โ
โโ Teammate 3: Performance (15%) + i18n (15%)
โโ const widgets / BlocBuilder optimization
โโ Image optimization / resource cleanup
โโ Translation key usage
โโ Hardcoded string detection
3. Lead merges results
โโ helpers.md#Collect-Team-Results
โโ Sum each axis score and apply weights
โโ Critical issue count x 10 point penalty
โโ Final grade calculation (A~F)
Fallback (Sequential Evaluation)#
If Agent Teams unavailable, runs 5-axis sequential evaluation as before.
Automation#
# Run tests (for coverage verification)
melos run test:with-html-coverage -- --scope= " *auth* "
# Static analysis
melos run analyze -- --scope= " *auth* "
# Code review (detailed)
/code-review feature/auth/ --gate-mode
Related Commands#
/code-review- 8-category code review/checklist:feature-complete- Feature complete checklist/dev:run- Full development cycle (can be auto-invoked at Step 8.7)