Skip to content
Back to skills

Archive

ASecurity

**Created**: 2025-10-21 **Status**: In Progress **Priority**: High **Complexity**: High **Estimated Time**: 8-12 hours ---

  • 245 stars
  • 0 votes
  • 0 copies
  • 4 views
  • Added May 26, 2026
designpythongobashreactvuenodetestinggitdocumentation

Works with

  • claude code
  • mcp

Security analysis

A100/100

Pro scans all 21 files and shows the line behind each finding

Scanned May 27, 2026

npx -y skills add alekspetrov/navigator --skill archive --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Archive?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Archive
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/alekspetrov-archive/badge)](https://www.skillsdirectory.com/skills/alekspetrov-archive)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
# TASK-16: Product Design Skill with Figma MCP Integration

**Created**: 2025-10-21
**Status**: In Progress
**Priority**: High
**Complexity**: High
**Estimated Time**: 8-12 hours

---

## Context

**Problem**: Design handoff from Figma to code is manual, time-consuming (6-10 hours), and error-prone. Design system drift happens when tokens/components diverge between design and implementation.

**Goal**: Create a Navigator skill that automates design review, token extraction, component mapping, and implementation planning using Figma MCP integration. Reduce design handoff time from 6-10 hours to 15-20 minutes (95% reduction).

**Why This Matters**:
- Eliminates manual design token extraction (currently 1+ hour)
- Detects design system drift automatically
- Prevents duplicate components via similarity matching
- Generates implementation plans with acceptance criteria
- Maintains Navigator's token-efficient, autonomous workflow

---

## Design Decisions

### Architecture: Hybrid Skill

**Progressive Enhancement Strategy**:
- **Phase 1**: Manual design review (works without Figma MCP)
- **Phase 2**: Automated extraction via Figma MCP
- **Phase 3**: Advanced features (drift detection, visual regression)

**Why Hybrid**:
- Immediate value without MCP dependency
- Graceful degradation when Figma Desktop not running
- Supports teams without Figma Enterprise (Code Connect)

### Documentation Structure

```
.agent/
└── design-system/           # New directory (separate from system/)
    ├── design-tokens.json   # DTCG format (W3C standard)
    ├── ui-kit-inventory.md  # Component catalog
    ├── component-mapping.json # Figma node ID → code path
    └── reviews/             # Temporal design reviews
        └── YYYY-MM-DD-[feature].md
```

**Why separate from `system/`**:
- Design reviews are temporal (archived after implementation)
- System docs are living architecture
- Different loading patterns (reviews on-demand, inventory always)

### Token Optimization

**Never load**:
- All design review reports (50+ over time = 250k+ tokens)
- Full Figma MCP responses (can be 350k+ tokens)
- Entire UI kit component code

**Always load when skill active**:
- `ui-kit-inventory.md` (~3k tokens)
- `design-tokens.json` (~2k tokens)
- Specific design review for active task (~5k tokens)

**Total**: ~10k tokens vs 150k+ loading everything (93% reduction)

---

## Implementation Plan

### Phase 1: Core Skill Structure (Manual Workflow)

**Goal**: Working skill without Figma MCP dependency

#### Step 1.1: Create Skill Directory Structure

```bash
.claude-plugin/skills/product-design/
├── SKILL.md                    # Main skill prompt (2-3k tokens)
├── functions/
│   ├── design_analyzer.py      # Extract patterns from Figma data
│   ├── token_extractor.py      # Variables → DTCG design tokens
│   ├── component_mapper.py     # Figma component → code mapping
│   ├── design_system_auditor.py # Compare design vs implementation
│   └── implementation_planner.py # Generate task docs
├── templates/
│   ├── design-review-report.md # Analysis output template
│   ├── design-tokens-diff.md   # Token changes summary
│   └── ui-kit-impact.md        # Component library impact
└── examples/
    └── dashboard-redesign-review.md # Reference example
```

**Acceptance Criteria**:
- [ ] Directory structure created
- [ ] All function files exist with docstrings
- [ ] All template files exist with placeholder content
- [ ] Example design review demonstrates output format

#### Step 1.2: Implement design_analyzer.py

**Purpose**: Extract design patterns from Figma MCP data or manual analysis

**Core Algorithm**:
```python
def analyze_design(figma_metadata, variables, ui_kit_inventory):
    """
    Analyzes Figma design data and compares against existing UI kit.

    Args:
        figma_metadata: Figma MCP get_metadata response or manual description
        variables: Figma MCP get_variable_defs response or manual token list
        ui_kit_inventory: Current UI kit inventory JSON

    Returns:
        {
            "new_tokens": [...],
            "new_components": [...],
            "similar_components": [...],
            "breaking_changes": [...]
        }
    """
```

**Features**:
- Extract unique component types from metadata
- Compare against ui_kit_inventory
- Identify patterns (repeated structures = potential components)
- Calculate similarity scores (Levenshtein distance on structure)
- Flag breaking changes (modified existing component mappings)

**Acceptance Criteria**:
- [ ] Parses Figma MCP metadata format (XML-like sparse structure)
- [ ] Identifies new components not in ui_kit_inventory
- [ ] Calculates similarity scores for potential reuse (>70% = suggest extending existing)
- [ ] Returns structured JSON output
- [ ] Works with manual input when MCP unavailable

#### Step 1.3: Implement token_extractor.py

**Purpose**: Convert Figma variables to DTCG design tokens

**DTCG Format** (W3C Design Tokens Community Group spec):
```json
{
  "color": {
    "primary": {
      "500": {
        "$value": "#3B82F6",
        "$type": "color",
        "$description": "Primary brand color - buttons, links"
      }
    }
  },
  "spacing": {
    "md": {
      "$value": "16px",
      "$type": "dimension"
    }
  }
}
```

**Features**:
- Parse Figma `get_variable_defs` response
- Semantic naming alignment (Figma "Primary 500" → "color.primary.500")
- Type detection (color, dimension, typography, shadow)
- Conflict resolution (flag manual review when tokens diverge)
- Generate diff summary (added/modified/removed)

**Acceptance Criteria**:
- [ ] Outputs valid DTCG format JSON
- [ ] Handles all token types (color, spacing, typography, radius, shadow)
- [ ] Generates diff vs existing design-tokens.json
- [ ] Preserves manual customizations in existing tokens
- [ ] Works with manual token list when MCP unavailable

#### Step 1.4: Implement component_mapper.py

**Purpose**: Map Figma components to codebase components

**Mapping Format**:
```json
{
  "figma_node_12345": {
    "figma_name": "Button/Primary/Large",
    "code_path": "src/components/ui/Button.tsx",
    "code_component": "Button",
    "props_mapping": {
      "variant": "primary",
      "size": "lg"
    },
    "confidence": 0.98
  }
}
```

**Features**:
- Parse Figma `get_code_connect_map` response
- Search codebase for component files (glob patterns)
- Fuzzy matching component names (Button, ButtonComponent, Btn)
- Extract variant mappings from component props
- Identify unmapped components (need creation)

**Acceptance Criteria**:
- [ ] Generates component-mapping.json
- [ ] Searches project using glob patterns (*.tsx, *.vue, *.jsx)
- [ ] Fuzzy matches component names (90%+ confidence threshold)
- [ ] Lists unmapped Figma components separately
- [ ] Updates existing mappings without overwriting manual edits

#### Step 1.5: Implement design_system_auditor.py

**Purpose**: Compare design vs implementation, find drift

**Audit Checks**:
1. Token drift (Figma vs design-tokens.json)
2. Component reuse opportunities (similar structures)
3. Unused tokens (exist in code, not in Figma)
4. Missing tokens (exist in Figma, not in code)
5. Tailwind config alignment

**Output Format**:
```markdown
## Token Alignment

✅ **In Sync**: 87 tokens match exactly
⚠️  **Drift Detected**: 5 tokens modified in Figma, not in code
  - color.primary.600: #2563EB (Figma) vs #1D4ED8 (code)
❌ **Missing in Code**: 12 new tokens from design
🗑️  **Unused in Design**: 3 tokens exist in code, not used in Figma

## Component Reuse Analysis

**StatBadge**: 78% similarity to existing `Badge` component
- Recommendation: Extend Badge with `variant="stat"` prop
- Avoids: Creating duplicate component
```

**Acceptance Criteria**:
- [ ] Compares Figma tokens vs design-tokens.json
- [ ] Identifies drift with specific values
- [ ] Calculates component similarity scores
- [ ] Parses Tailwind config for token usage
- [ ] Generates markdown audit report

#### Step 1.6: Implement implementation_planner.py

**Purpose**: Generate implementation task docs with phased breakdown

**Template-Driven Generation**:
- Uses `templates/design-review-report.md` for structure
- Injects analysis results from previous functions
- Generates phased implementation plan
- Creates acceptance criteria checklist
- Estimates complexity per component

**Task Doc Structure**:
```markdown
# TASK-XX: [Feature] Implementation

## Design Review
Reference: .agent/design-system/reviews/YYYY-MM-DD-[feature].md

## Implementation Phases

### Phase 1: Design Tokens (estimated 2 hours)
**Priority**: High (foundation)

#### Subtasks
1. Add new color tokens to design-tokens.json
2. Run Style Dictionary build
3. Update Tailwind @theme

**Acceptance Criteria**:
- [ ] All new tokens available in Tailwind utilities
- [ ] No breaking changes to existing token references

### Phase 2: [Component Name] (estimated 3 hours)
...
```

**Acceptance Criteria**:
- [ ] Generates valid Navigator task document
- [ ] Phases ordered by dependency (tokens → atoms → molecules → organisms)
- [ ] Complexity estimates included
- [ ] Acceptance criteria for each phase
- [ ] Migration strategy for breaking changes

#### Step 1.7: Create SKILL.md Main Prompt

**Structure** (following Navigator skill pattern):

```markdown
---
auto_invoke:
  triggers:
    - "Review this design"
    - "Analyze Figma mockup"
    - "Design handoff for {feature}"
    - "Check design system impact"
    - "Plan implementation for design"
  description: "Automates design review, token extraction, and implementation planning"
---

# Product Design Skill

[Skill instructions...]
```

**Key Sections**:
1. **What This Skill Does** (problem statement)
2. **When to Auto-Invoke** (trigger scenarios)
3. **Workflow Protocol** (5-step process)
4. **Figma MCP Integration** (when available, how to use)
5. **Manual Workflow** (fallback without MCP)
6. **Design System Documentation** (loading strategy)
7. **Predefined Functions** (what each does)
8. **Templates** (output formats)
9. **Token Optimization** (Navigator principles)
10. **Troubleshooting** (common issues)

**Acceptance Criteria**:
- [ ] SKILL.md is 2-3k tokens (measured)
- [ ] Auto-invoke triggers comprehensive
- [ ] Clear workflow steps (1-5)
- [ ] Examples for manual and MCP workflows
- [ ] Troubleshooting section covers MCP token limits

#### Step 1.8: Create Template Files

**templates/design-review-report.md**:
- Header with date, Figma link, reviewer
- New design tokens section (added/modified/removed)
- New components section (atoms/molecules/organisms)
- Design system impact analysis
- Implementation recommendations (phased approach)

**templates/design-tokens-diff.md**:
- Side-by-side comparison table
- Visual indicators (✅ match, ⚠️ drift, ❌ missing, 🗑️ unused)
- Migration notes for breaking changes

**templates/ui-kit-impact.md**:
- Component reuse opportunities
- Similarity scores with recommendations
- New components required
- Breaking changes to existing components

**Acceptance Criteria**:
- [ ] All templates use consistent markdown formatting
- [ ] Placeholder variables clearly marked ({{PLACEHOLDER}})
- [ ] Templates match example output in documentation
- [ ] Visual indicators (emoji) used appropriately

#### Step 1.9: Create Example Design Review

**examples/dashboard-redesign-review.md**:
- Complete example matching template structure
- Real-world scenario (dashboard with metrics)
- Shows token extraction results
- Shows component analysis
- Shows implementation plan

**Purpose**: Reference for users and validation of template quality

**Acceptance Criteria**:
- [ ] Example demonstrates all template sections
- [ ] Realistic design scenario (not trivial)
- [ ] Shows both simple and complex components
- [ ] Includes breaking change example

---

### Phase 2: Figma MCP Integration

**Goal**: Automate extraction using Figma Desktop MCP server

#### Step 2.1: MCP Server Detection

**Function**: `detect_mcp_server()`

**Logic**:
```python
def detect_mcp_server():
    """
    Detects which Figma MCP server is available.

    Returns:
        {
            "type": "local" | "remote" | "none",
            "url": "http://127.0.0.1:3845/mcp" | "https://mcp.figma.com/mcp" | None,
            "tools_available": ["get_design_context", "get_variable_defs", ...]
        }
    """
```

**Detection Strategy**:
1. Check for local server (http://127.0.0.1:3845/mcp)
2. If unavailable, check for remote server config
3. If none, return manual workflow mode

**Acceptance Criteria**:
- [ ] Detects local Figma Desktop MCP server
- [ ] Falls back to remote server if configured
- [ ] Returns "none" when no MCP available
- [ ] Lists available tools per server type

#### Step 2.2: Large Selection Handling

**Problem**: Figma MCP returns >350k tokens for large screens, exceeds Claude Code 25k default limit

**Solution**: Metadata-first approach

**Workflow**:
```markdown
1. Use `get_metadata` first (sparse XML, low tokens)
2. Parse metadata to identify component node IDs
3. Fetch components individually via `get_design_context`
4. Aggregate results
```

**Environment Variable Recommendation**:
```bash
# In skill documentation
export MAX_MCP_OUTPUT_TOKENS=100000
```

**Acceptance Criteria**:
- [ ] Uses `get_metadata` before `get_design_context`
- [ ] Breaks large selections into smaller chunks
- [ ] Documents MAX_MCP_OUTPUT_TOKENS requirement
- [ ] Handles timeout errors gracefully

#### Step 2.3: Automated Token Extraction

**Integration**: `token_extractor.py` + `get_variable_defs`

**Workflow**:
1. Call Figma MCP `get_variable_defs`
2. Parse response JSON
3. Convert to DTCG format
4. Compare with existing design-tokens.json
5. Generate diff summary

**Acceptance Criteria**:
- [ ] Automatically extracts all Figma variables
- [ ] Handles all variable types (color, number, string, boolean)
- [ ] Preserves variable descriptions from Figma
- [ ] Generates complete diff report

#### Step 2.4: Automated Component Mapping

**Integration**: `component_mapper.py` + `get_code_connect_map`

**Workflow**:
1. Call Figma MCP `get_code_connect_map`
2. Parse response with node IDs → code paths
3. Verify code paths exist in project
4. Update component-mapping.json

**Note**: Requires Figma Enterprise for Code Connect

**Acceptance Criteria**:
- [ ] Extracts Code Connect mappings when available
- [ ] Falls back to fuzzy matching when Code Connect unavailable
- [ ] Validates code paths exist before mapping
- [ ] Warns when Code Connect not configured

---

### Phase 3: Advanced Features

**Goal**: Enterprise-grade design system workflow

#### Step 3.1: Visual Regression Test Generation

**Integration**: Generate Chromatic test configuration

**Output**: `.storybook/test-runner.ts` config for visual regression

**Acceptance Criteria**:
- [ ] Generates Chromatic configuration
- [ ] Creates stories for new components
- [ ] Documents visual testing workflow

#### Step 3.2: Design System Drift Alerts

**Workflow**: Run auditor on every design review, flag high-priority drift

**Alert Thresholds**:
- 🚨 Critical: >10 tokens drifted, breaking changes
- ⚠️  Warning: >5 tokens drifted, no breaking changes
- ℹ️  Info: New tokens/components added

**Acceptance Criteria**:
- [ ] Automatic drift detection on every review
- [ ] Priority levels assigned
- [ ] Actionable recommendations provided

#### Step 3.3: Breaking Change Migration Planner

**Feature**: Generate migration guides for breaking component changes

**Output**: Migration markdown with:
- Before/after code examples
- Automated codemod scripts (if possible)
- Manual steps required
- Rollout strategy

**Acceptance Criteria**:
- [ ] Detects breaking changes automatically
- [ ] Generates migration documentation
- [ ] Provides rollback strategy

---

### Phase 4: Project-Specific Generation via nav-skill-creator

**Goal**: Zero-config skill generation per project

#### Step 4.1: Codebase Analysis Integration

**nav-skill-creator workflow**:
```
1. User: "Create a skill for product design with Figma integration"
2. nav-skill-creator invoked
3. Analyzes codebase:
   - React vs Vue detection
   - Tailwind config location
   - Component directory structure
   - Testing framework (Jest, Vitest)
   - Storybook presence
4. Generates product-design skill:
   - Tailored to framework
   - Pre-configured paths
   - Template examples match project conventions
5. Creates .agent/design-system/ structure
6. Runs initial UI kit inventory scan
7. Extracts current design tokens from Tailwind config
```

**Acceptance Criteria**:
- [ ] nav-skill-creator can generate product-design skill
- [ ] Auto-detects framework (React/Vue/Svelte)
- [ ] Pre-configures all file paths
- [ ] Scans existing components for initial inventory

#### Step 4.2: Initial UI Kit Inventory Scan

**Function**: `scan_existing_components()`

**Logic**:
```python
def scan_existing_components(project_root):
    """
    Scans codebase for existing UI components.

    Returns:
        {
            "atoms": [...],
            "molecules": [...],
            "organisms": [...]
        }
    """
```

**Detection Strategy**:
- Glob search: `src/components/**/*.{tsx,vue,jsx}`
- Parse component exports
- Categorize by directory structure (if atomic design used)
- Extract props/variants via AST parsing

**Acceptance Criteria**:
- [ ] Finds all component files in project
- [ ] Extracts component names and paths
- [ ] Attempts atomic design categorization
- [ ] Generates initial ui-kit-inventory.md

---

## Testing Strategy

### Unit Tests

**Functions to Test**:
- `design_analyzer.py`: Component extraction, similarity matching
- `token_extractor.py`: DTCG format conversion, diff generation
- `component_mapper.py`: Fuzzy matching, path validation
- `design_system_auditor.py`: Drift detection, comparison logic
- `implementation_planner.py`: Task doc generation

**Framework**: pytest

**Coverage Target**: 80%+ for all functions

### Integration Tests

**Scenarios**:
1. Full manual workflow (no MCP)
2. Full automated workflow (with MCP mocked)
3. Hybrid workflow (partial MCP data)
4. Error handling (MCP timeout, invalid Figma data)

**Test Data**:
- Mock Figma MCP responses (JSON fixtures)
- Sample design-tokens.json
- Sample ui-kit-inventory.md

### Manual Testing

**Test Project**: Navigator plugin itself

**Test Scenarios**:
1. Review hypothetical dashboard redesign (manual)
2. Extract tokens from mock Figma data
3. Generate implementation plan
4. Verify task doc follows Navigator format

---

## Rollout Plan

### Step 1: Internal Testing (Navigator Project)
- Test skill on Navigator plugin codebase
- Refine based on real usage
- Document learnings

### Step 2: Documentation Update
- Add product-design skill to README.md
- Update plugin.json with new skill
- Create usage guide in .agent/sops/development/

### Step 3: Version Bump
- Increment to v3.2.0 (minor version, new feature)
- Update marketplace.json
- Run version audit script

### Step 4: Release
- Commit all changes
- Create git tag v3.2.0
- Push to GitHub
- Create GitHub release with changelog

---

## Success Metrics

### Efficiency Gains

**Before Product Design Skill**:
- Manual design review: 2-4 hours
- Component discovery: 1-2 hours
- Token extraction: 1 hour
- Implementation planning: 2-3 hours
- **Total**: 6-10 hours

**After**:
- Automated design review: 5 minutes
- Component discovery: Instant
- Token extraction: Instant
- Implementation planning: 10 minutes
- **Total**: 15-20 minutes (developer review)

**Time Savings**: ~95% reduction

### Quality Metrics

- **Design system drift**: Detected automatically on every review
- **Component reuse rate**: Tracked in ui-kit-inventory
- **Token consistency**: 100% via automated sync
- **Implementation accuracy**: Acceptance criteria in every task

---

## Documentation Requirements

### README.md Update

Add section:
```markdown
### product-design

Automates design review, token extraction, and implementation planning.

**Auto-invokes when user says**:
- "Review this design"
- "Analyze Figma mockup"
- "Design handoff for [feature]"
- "Check design system impact"

**Features**:
- Figma MCP integration (auto-detects local/remote server)
- Design token extraction (DTCG format)
- Component mapping (Figma → code)
- Design system drift detection
- Implementation plan generation
- Tailwind CSS integration

**Setup** (optional - enhances automation):
```bash
# Install Figma Desktop MCP
claude mcp add --transport http figma-desktop http://127.0.0.1:3845/mcp
```

**Usage**:
```
"Review the dashboard redesign from Figma"
# Skill analyzes design, extracts tokens, maps components,
# generates implementation plan as Navigator task doc
```
```

### SOP Creation

**File**: `.agent/sops/development/product-design-workflow.md`

**Contents**:
- Step-by-step workflow
- Figma MCP setup instructions
- Troubleshooting common issues
- Token optimization best practices

---

## Risks and Mitigations

### Risk: Figma MCP Token Limit Exceeded

**Likelihood**: High (large designs can be 350k+ tokens)

**Mitigation**:
- Metadata-first approach (use `get_metadata` before `get_design_context`)
- Component-by-component extraction (avoid full screen selections)
- Document `MAX_MCP_OUTPUT_TOKENS=100000` requirement
- Clear error messaging with resolution steps

### Risk: Figma MCP Not Available

**Likelihood**: Medium (requires Figma Desktop running)

**Mitigation**:
- Graceful fallback to manual workflow
- Clear messaging about manual vs automated modes
- Manual workflow still provides value (template-driven analysis)

### Risk: Component Similarity Matching False Positives

**Likelihood**: Medium (algorithm may suggest wrong component)

**Mitigation**:
- Confidence threshold (>70% for recommendations)
- Always flag for manual review
- Show similarity score and reasoning
- Developer has final decision

### Risk: DTCG Format Changes

**Likelihood**: Low (W3C spec approaching v1.0.0)

**Mitigation**:
- Monitor W3C Design Tokens spec updates
- Version DTCG format in design-tokens.json
- Provide migration script if spec changes

---

## Dependencies

### Required
- Python 3.8+ (for predefined functions)
- Navigator v3.1+ (skill architecture)

### Optional (Enhanced Features)
- Figma Desktop app (for local MCP server)
- Figma Enterprise plan (for Code Connect)
- Style Dictionary (for token transformation)
- Tailwind CSS 4.0+ (for @theme support)

---

## Next Steps

1. ✅ Create TASK-16 implementation plan document (this file)
2. ⏳ Create skill directory structure
3. ⏳ Implement Phase 1 functions (manual workflow)
4. ⏳ Create SKILL.md main prompt
5. ⏳ Create template files
6. ⏳ Create example design review
7. ⏳ Register skill in plugin.json
8. ⏳ Test manual workflow
9. ⏳ Implement Phase 2 (Figma MCP integration)
10. ⏳ Update documentation (README, SOPs)
11. ⏳ Version bump and release

---

**Last Updated**: 2025-10-21
**Navigator Version**: 3.1.0
**Target Version**: 3.2.0

Files in this skill

  • TASK-01-session-start-pm-integration.md10 KB
  • TASK-02-readme-markers-v1.4.0.md8.2 KB
  • TASK-03-markers-management-auto-resume.md9.9 KB
  • TASK-04-version-sync-release-process.md14.3 KB
  • TASK-05-autonomous-completion.md15.7 KB
  • TASK-06-session-statistics.md9.1 KB
  • TASK-07-skills-migration.md14.8 KB
  • TASK-08-skills-enhancements-v2.1.md27.2 KB
  • TASK-09-migration-system.md20.8 KB
  • TASK-10-project-skills-v2.2.md12 KB
  • TASK-11-project-skills-generation-v2.3.md14.3 KB
  • TASK-12-v3.0-skills-only.md12 KB
  • TASK-13-otel-session-statistics.md18.4 KB
  • TASK-14-claude-md-updater.md9 KB
  • TASK-14-documentation-consolidation.md13.5 KB
  • TASK-16-product-design-skill.md22.6 KB
  • TASK-17-visual-regression-skill.md14 KB
  • TASK-18-CORRECTIONS.md12.8 KB
  • TASK-18-PITCH.md13.4 KB
  • TASK-18-README.md10.7 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.