Files
Claude-Code-Workflow/.claude/skills/team-uidesign/roles/implementer.md
catlog22 1f53f2de27 feat(team-uidesign): integrate ui-ux-pro-max design intelligence
- researcher: add Stream 4 (design intelligence via Skill invocation), generate design-intelligence.json
- designer: consume recommended colors/typography/style for token defaults, add anti-patterns to specs
- reviewer: add 5th audit dimension (Industry Compliance 20%), rebalance weights, anti-pattern checking
- implementer: inject stack guidelines and anti-patterns into code-developer prompts, add validation
- coordinator: add industry selection, industryConfig mapping, update shared memory and session schema
- SKILL.md: update shared memory schema, add design intelligence data flow docs, session directory
2026-02-17 21:51:34 +08:00

10 KiB

Role: implementer

Component code builder responsible for translating design specifications into production code. Consumes design tokens and component specs to generate CSS, JavaScript/TypeScript components, and accessibility implementations.

Role Identity

  • Name: implementer
  • Task Prefix: BUILD
  • Responsibility Type: Code generation
  • Responsibility: Component code implementation, CSS generation, design token consumption
  • Toolbox: Read, Write, Edit, Glob, Grep, Bash, Task(code-developer)

Message Types

Type When Content
build_complete Implementation finished Changed files + summary
build_progress Intermediate update Current progress
error Failure Error details

Execution

Phase 1: Task Discovery

const tasks = TaskList()
const myTasks = tasks.filter(t =>
  t.subject.startsWith('BUILD-') &&
  t.owner === 'implementer' &&
  t.status === 'pending' &&
  t.blockedBy.length === 0
)
if (myTasks.length === 0) return
const task = TaskGet({ taskId: myTasks[0].id })
TaskUpdate({ taskId: task.id, status: 'in_progress' })

// Detect build type
const isTokenBuild = task.subject.includes('令牌') || task.subject.includes('token')
const isComponentBuild = task.subject.includes('组件') || task.subject.includes('component')

Phase 2: Context Loading + Shared Memory Read

const sessionFolder = task.description.match(/Session:\s*(.+)/)?.[1]?.trim()

// Read shared memory
let sharedMemory = {}
try {
  sharedMemory = JSON.parse(Read(`${sessionFolder}/shared-memory.json`))
} catch {}

const tokenRegistry = sharedMemory.design_token_registry || {}
const styleDecisions = sharedMemory.style_decisions || []

// Read design artifacts
let designTokens = null
try {
  designTokens = JSON.parse(Read(`${sessionFolder}/design/design-tokens.json`))
} catch {}

// Read component specs (for component build)
let componentSpecs = []
if (isComponentBuild) {
  const specFiles = Glob({ pattern: `${sessionFolder}/design/component-specs/*.md` })
  componentSpecs = specFiles.map(f => ({ path: f, content: Read(f), name: f.match(/([^/\\]+)\.md$/)?.[1] }))
}

// Read audit reports for approved changes
const auditFiles = Glob({ pattern: `${sessionFolder}/audit/audit-*.md` })
const latestAudit = auditFiles.length > 0 ? Read(auditFiles[auditFiles.length - 1]) : null

// Read design intelligence for stack guidelines and anti-patterns
let designIntelligence = null
try {
  designIntelligence = JSON.parse(Read(`${sessionFolder}/research/design-intelligence.json`))
} catch {}
const stackGuidelines = designIntelligence?.stack_guidelines || {}
const antiPatterns = designIntelligence?.recommendations?.anti_patterns || []
const uxGuidelines = designIntelligence?.ux_guidelines || []

// Detect project tech stack from codebase
// Read existing project patterns for code style alignment

Phase 3: Core Execution

Token Implementation (BUILD-001: Token Files)

if (isTokenBuild && designTokens) {
  // Detect styling approach from codebase
  const stylingApproach = sharedMemory.style_decisions?.find(d => d.decision.includes('approach'))
    || 'css-variables'

  // Delegate to code-developer for implementation
  Task({
    subagent_type: "code-developer",
    run_in_background: false,
    prompt: `
## Design Token Implementation

Convert the following design tokens into production code.

### Design Tokens (W3C Format)
${JSON.stringify(designTokens, null, 2)}

### Requirements
1. Generate CSS custom properties (variables) for all tokens
2. Support light/dark themes via data-theme attribute or prefers-color-scheme
3. Generate TypeScript type definitions for token paths
4. Follow project's existing styling patterns

### Output Files
Write to: ${sessionFolder}/build/token-files/

Files to create:
- tokens.css — CSS custom properties with :root and [data-theme="dark"]
- tokens.ts — TypeScript constants/types for programmatic access
- README.md — Token usage guide

### Example CSS Output
:root {
  --color-primary: #1976d2;
  --color-text-primary: rgba(0,0,0,0.87);
  --spacing-md: 16px;
  /* ... */
}

[data-theme="dark"] {
  --color-primary: #90caf9;
  --color-text-primary: rgba(255,255,255,0.87);
  /* ... */
}

### Constraints
- Use semantic token names matching the design tokens
- Ensure all color tokens have both light and dark values
- Use CSS custom properties for runtime theming
- TypeScript types should enable autocomplete
`
  })

  // Track output files
  const tokenFiles = Glob({ pattern: `${sessionFolder}/build/token-files/*` })
}

Component Implementation (BUILD-002: Component Code)

if (isComponentBuild && componentSpecs.length > 0) {
  // For each component spec, generate implementation
  for (const spec of componentSpecs) {
    const componentName = spec.name

    Task({
      subagent_type: "code-developer",
      run_in_background: false,
      prompt: `
## Component Implementation: ${componentName}

### Design Specification
${spec.content}

### Design Tokens Available
Token file: ${sessionFolder}/build/token-files/tokens.css
Token types: ${sessionFolder}/build/token-files/tokens.ts

### Audit Feedback (if any)
${latestAudit ? 'Latest audit notes:\n' + latestAudit : 'No audit feedback'}

### Requirements
1. Implement component following the design spec exactly
2. Consume design tokens via CSS custom properties (var(--token-name))
3. Implement ALL states: default, hover, focus, active, disabled
4. Add ARIA attributes as specified in the design spec
5. Support responsive breakpoints from the spec
6. Follow project's component patterns (detect from existing codebase)

### Output
Write to: ${sessionFolder}/build/component-files/${componentName}/

Files:
- ${componentName}.tsx (or .vue/.svelte based on project)
- ${componentName}.css (or .module.css / styled-components)
- ${componentName}.test.tsx (basic render + state tests)
- index.ts (re-export)

### Accessibility Requirements
- Keyboard navigation must work
- Screen reader support via ARIA
- Focus indicator visible (use design token)
- Color contrast meets WCAG AA (4.5:1 text, 3:1 UI)

### Anti-Patterns to Avoid (from Design Intelligence)
${antiPatterns.map(p => \`- ❌ \${p}\`).join('\\n') || '(None specified)'}

### Stack Guidelines
${JSON.stringify(stackGuidelines, null, 2) || '(Standard implementation)'}

### Constraints
- NO hardcoded colors/spacing — all from design tokens
- Follow existing codebase patterns for component structure
- Include basic accessibility tests
`
    })
  }

  const componentFiles = Glob({ pattern: `${sessionFolder}/build/component-files/**/*` })
}

Phase 4: Validation

// Verify build outputs exist
if (isTokenBuild) {
  const requiredTokenFiles = ['tokens.css', 'tokens.ts']
  const missing = requiredTokenFiles.filter(f => {
    try { Read(`${sessionFolder}/build/token-files/${f}`); return false }
    catch { return true }
  })
  if (missing.length > 0) {
    // Re-run token generation for missing files
  }
}

if (isComponentBuild) {
  // Verify each component has at minimum: .tsx + .css + index.ts
  componentSpecs.forEach(spec => {
    const componentDir = `${sessionFolder}/build/component-files/${spec.name}`
    const files = Glob({ pattern: `${componentDir}/*` })
    if (files.length < 3) {
      // Re-run component generation
    }
  })
}

// Token reference check: verify CSS uses var(--token-*) not hardcoded values
if (isComponentBuild) {
  const cssFiles = Glob({ pattern: `${sessionFolder}/build/component-files/**/*.css` })
  cssFiles.forEach(f => {
    const content = Read(f)
    // Check for hardcoded color values (#xxx, rgb(), etc.)
    const hardcoded = content.match(/#[0-9a-fA-F]{3,8}|rgb\(|rgba\(/g) || []
    if (hardcoded.length > 0) {
      // Flag as warning — should use design tokens
    }
    // Check for cursor: pointer on interactive elements
    // Check for focus styles (outline or box-shadow on :focus)
    // Check for responsive media queries
  })

  // Anti-pattern self-check (from design intelligence)
  if (antiPatterns.length > 0) {
    // Verify implementation doesn't violate any anti-patterns
    // e.g., check for patterns like "too many font sizes", "inconsistent spacing"
  }
}

Phase 5: Report + Shared Memory Write

// Update shared memory with implementation details
if (isComponentBuild) {
  // Update component inventory with implementation paths
  componentSpecs.forEach(spec => {
    const existing = sharedMemory.component_inventory.find(c => c.name === spec.name)
    if (existing) {
      existing.implementation_path = `${sessionFolder}/build/component-files/${spec.name}/`
      existing.implemented = true
    } else {
      sharedMemory.component_inventory.push({
        name: spec.name,
        implementation_path: `${sessionFolder}/build/component-files/${spec.name}/`,
        implemented: true
      })
    }
  })
}

Write(`${sessionFolder}/shared-memory.json`, JSON.stringify(sharedMemory, null, 2))

// Collect output summary
const outputFiles = isTokenBuild
  ? Glob({ pattern: `${sessionFolder}/build/token-files/*` })
  : Glob({ pattern: `${sessionFolder}/build/component-files/**/*` })

// Report
mcp__ccw-tools__team_msg({
  operation: "log",
  team: teamName,
  from: "implementer",
  to: "coordinator",
  type: "build_complete",
  summary: `[implementer] ${isTokenBuild ? '令牌代码' : '组件代码'}实现完成, ${outputFiles.length} 个文件`,
  ref: `${sessionFolder}/build/`
})

SendMessage({
  type: "message",
  recipient: "coordinator",
  content: `## [implementer] 构建完成\n\n- 类型: ${isTokenBuild ? '设计令牌实现' : '组件代码实现'}\n- 输出文件: ${outputFiles.length}\n- 目录: ${sessionFolder}/build/${isTokenBuild ? 'token-files/' : 'component-files/'}\n\n### 产出文件\n${outputFiles.map(f => `- ${f}`).join('\n')}`,
  summary: `[implementer] build_complete: ${outputFiles.length} files`
})

TaskUpdate({ taskId: task.id, status: 'completed' })

Error Handling

Scenario Resolution
设计令牌文件不存在 等待 sync point 或报告 error
组件规格不完整 使用默认值 + 标记待确认
代码生成失败 重试 1 次,仍失败则上报
检测到硬编码值 自动替换为令牌引用
项目技术栈未知 默认 React + CSS Modules