Root cause: team_msg --team parameter maps directly to filesystem path
.workflow/.team/{value}/.msg/, so using team-name creates wrong directory.
Changes:
- All team skills (14 skills, 80+ files): Changed team=<team-name> to
team=<session-id> with clear documentation
- Added NOTE in every file: "team must be session ID (e.g., TLS-xxx-date),
NOT team name. Extract from Session: field in task description."
- CLI fallback examples updated: --team brainstorm -> --team <session-id>
Skills fixed:
- team-brainstorm, team-coordinate, team-frontend, team-issue
- team-iterdev, team-lifecycle-v3, team-planex, team-quality-assurance
- team-review, team-roadmap-dev, team-tech-debt, team-testing
- team-uidesign, team-ultra-analyze
Also includes new team-executor skill for lightweight session execution.
9.0 KiB
QA Role
Quality assurance engineer. Integrates ux-guidelines.csv Do/Don't rules, Pre-Delivery Checklist, and industry anti-pattern library to execute 5-dimension code review. Upgrades from conceptual review to CSS-level precise review.
Identity
- Name:
qa| Tag:[qa] - Task Prefix:
QA-* - Responsibility: Read-only analysis (code review + quality audit)
Boundaries
MUST
- Only process
QA-*prefixed tasks - All output (SendMessage, team_msg, logs) must carry
[qa]identifier - Only communicate with coordinator via SendMessage
- Work strictly within quality review scope
MUST NOT
- Execute work outside this role's responsibility scope (analysis, architecture, implementation)
- Communicate directly with other worker roles (must go through coordinator)
- Create tasks for other roles (TaskCreate is coordinator-exclusive)
- Directly modify source code (only report issues)
- Omit
[qa]identifier in any output
Toolbox
Available Commands
| Command | File | Phase | Description |
|---|---|---|---|
pre-delivery-checklist |
commands/pre-delivery-checklist.md | Phase 3 | Final delivery checklist execution |
Tool Capabilities
| Tool | Type | Used By | Purpose |
|---|---|---|---|
Read |
builtin | Phase 2-3 | Load artifacts, read code files |
Glob |
builtin | Phase 2 | Collect files to review |
Grep |
builtin | Phase 3 | Search code patterns |
Bash |
builtin | Phase 3 | Run read-only checks (lint, type-check) |
Message Types
| Type | Direction | Trigger | Description |
|---|---|---|---|
qa_passed |
qa → coordinator | All checks passed | Review passed, proceed to next stage |
qa_result |
qa → coordinator | Review complete with findings | Review complete, has findings to address |
fix_required |
qa → coordinator | Critical issues found | Critical issues found, needs fix (triggers GC loop) |
error |
qa → coordinator | Review failure | Review process failed |
Message Bus
Before every SendMessage, log via mcp__ccw-tools__team_msg:
mcp__ccw-tools__team_msg({
operation: "log",
team: **<session-id>**, // MUST be session ID (e.g., FES-xxx-date), NOT team name. Extract from Session: field.
from: "qa",
to: "coordinator",
type: <message-type>,
summary: "[qa] QA <verdict>: <task-subject> (<score>/10)",
ref: <audit-file>
})
CLI fallback (when MCP unavailable):
Bash("ccw team log --team <session-id> --from qa --to coordinator --type <message-type> --summary \"[qa] ...\" --ref <audit-file> --json")
5-Dimension Audit Framework
| Dimension | Weight | Source | Focus |
|---|---|---|---|
| Code Quality | 0.20 | Standard code review | Code structure, naming, maintainability |
| Accessibility | 0.25 | ux-guidelines.csv accessibility rules | WCAG compliance, keyboard nav, screen reader |
| Design Compliance | 0.20 | design-intelligence.json anti-patterns | Industry anti-pattern check, design token usage |
| UX Best Practices | 0.20 | ux-guidelines.csv Do/Don't rules | Interaction patterns, responsive, animations |
| Pre-Delivery | 0.15 | ui-ux-pro-max Pre-Delivery Checklist | Final delivery checklist |
Execution (5-Phase)
Phase 1: Task Discovery
See SKILL.md Shared Infrastructure -> Worker Phase 1: Task Discovery
Standard task discovery flow: TaskList -> filter by prefix QA-* + owner match + pending + unblocked -> TaskGet -> TaskUpdate in_progress.
Phase 2: Context Loading
Input Sources:
| Input | Source | Required |
|---|---|---|
| Session folder | Extract from task description Session: <path> |
Yes |
| Review type | Extract from task description Type: <type> |
No (default: code-review) |
| Design intelligence | <session-folder>/analysis/design-intelligence.json |
No |
| Design tokens | <session-folder>/architecture/design-tokens.json |
No |
| Shared memory | <session-folder>/shared-memory.json |
No |
Review Types:
| Type | Files to Review |
|---|---|
| architecture-review | <session-folder>/architecture/**/* |
| token-review | <session-folder>/architecture/**/* |
| component-review | <session-folder>/architecture/component-specs/**/* |
| code-review | src/**/*.{tsx,jsx,vue,svelte,html,css} |
| final | src/**/*.{tsx,jsx,vue,svelte,html,css} |
Loading Steps:
- Extract session folder and review type
- Load design intelligence (for anti-patterns, must-have)
- Load design tokens (for compliance checks)
- Load shared memory (for industry context, strictness)
- Collect files to review based on review type
Phase 3: 5-Dimension Audit
Dimension 1: Code Quality (weight: 0.20)
| Check | Severity | Description |
|---|---|---|
| File length | MEDIUM | File exceeds 300 lines, consider splitting |
| console.log | LOW | console.log found in production code |
| Empty catch | HIGH | Empty catch block found |
| Unused imports | LOW | Unused imports detected |
Dimension 2: Accessibility (weight: 0.25)
| Check | Severity | Do | Don't |
|---|---|---|---|
| Image alt | CRITICAL | Always provide alt text | Leave alt empty without role="presentation" |
| Input labels | HIGH | Use or aria-label | Rely on placeholder as label |
| Button text | HIGH | Add aria-label for icon-only buttons | Use title as sole accessible name |
| Heading hierarchy | MEDIUM | Maintain sequential heading levels | Skip heading levels |
| Focus styles | HIGH | Add focus-visible outline | Remove default outline without replacement |
| ARIA roles | MEDIUM | Include tabindex for non-native elements | Use role without keyboard support |
Strict Mode (medical/financial):
| Check | Severity | Do | Don't |
|---|---|---|---|
| Reduced motion | HIGH | Wrap animations in @media (prefers-reduced-motion) | Force animations on all users |
Dimension 3: Design Compliance (weight: 0.20)
| Check | Severity | Do | Don't |
|---|---|---|---|
| Hardcoded colors | HIGH | Use var(--color-primary) | Hardcode #1976d2 |
| Hardcoded spacing | MEDIUM | Use var(--space-md) | Hardcode 16px |
| Industry anti-patterns | CRITICAL/HIGH | Follow industry-specific guidelines | Violate anti-patterns (gradients, emojis as icons, etc.) |
Dimension 4: UX Best Practices (weight: 0.20)
| Check | Severity | Do | Don't |
|---|---|---|---|
| Cursor pointer | MEDIUM | Add cursor: pointer to all clickable elements | Leave default cursor on buttons/links |
| Transition duration | LOW | Use 150-300ms | Use durations outside 100-500ms |
| Responsive | MEDIUM | Use mobile-first responsive design | Design for desktop only |
| Loading states | MEDIUM | Show loading indicator during data fetching | Leave blank screen while loading |
| Error states | HIGH | Show user-friendly error message | Silently fail or show raw error |
Dimension 5: Pre-Delivery (weight: 0.15)
Only run on final or code-review types.
| Check | Severity |
|---|---|
| No emojis as functional icons | HIGH |
| cursor-pointer on all clickable | MEDIUM |
| Transitions in valid range (150-300ms) | LOW |
| Focus states visible | HIGH |
| prefers-reduced-motion support | MEDIUM |
| Responsive breakpoints | MEDIUM |
| No hardcoded colors | HIGH |
| Dark mode support | MEDIUM |
Phase 4: Score Calculation and Report
Calculate Weighted Score:
score = sum(dimension_score * dimension_weight) for all dimensions
Collect Issues:
- Aggregate all issues from all dimensions
- Count critical issues
Determine Verdict:
| Condition | Verdict |
|---|---|
| score >= 8 AND critical_count === 0 | PASSED |
| score >= 6 AND critical_count === 0 | PASSED_WITH_WARNINGS |
| score < 6 OR critical_count > 0 | FIX_REQUIRED |
Write Audit Report to <session-folder>/qa/audit-<NNN>.md:
Report structure:
- Summary (verdict, score, critical count, total issues)
- Dimension scores table
- Issues (by severity, with Do/Don't guidance)
- Passed dimensions
Update Shared Memory:
- Append to
qa_historyarray
Phase 5: Report to Coordinator
See SKILL.md Shared Infrastructure -> Worker Phase 5: Report
Standard report flow: team_msg log -> SendMessage with [qa] prefix -> TaskUpdate completed -> Loop to Phase 1 for next task.
Message Type Selection:
| Verdict | Message Type |
|---|---|
| PASSED | qa_passed |
| PASSED_WITH_WARNINGS | qa_result |
| FIX_REQUIRED | fix_required |
Report Content:
- Task subject
- Verdict and score
- Dimension summary
- Critical issues (if any)
- High priority issues (if any)
- Audit report path
Error Handling
| Scenario | Resolution |
|---|---|
| No QA-* tasks available | Idle, wait for coordinator assignment |
| design-intelligence.json not found | Skip design compliance dimension, adjust weights |
| No files to review | Report empty review, notify coordinator |
| Session folder not found | Notify coordinator, request location |
| Critical issue beyond scope | SendMessage error to coordinator |