Files
awoooi/docs/adr/ADR-049-figma-code-connect-design-system.md
OG T c9c60c3a61
Some checks failed
E2E Health Check / e2e-health (push) Has been cancelled
CD Pipeline / build-and-deploy (push) Has been cancelled
Type Sync Check / check-type-sync (push) Failing after 22s
feat(mcp-integrations): Phase S 架構修復 + MCP 整合基礎建設
Phase S 技術債修復 (首席架構師審查 82→完整):
- S-01: generate_alert_fingerprint 移至 AlertAnalyzer.generate_fingerprint() staticmethod
- S-04: 移除 Pydantic v2 deprecated json_encoders (直接用原生 datetime 序列化)

Sentry MCP 整合 (Phase 23):
- ADR-048: Sentry→OpenClaw AI Triage 架構決策
- sentry_webhook_service.py: parse/analyze/create_incident/build_message Service 層
- config.py: SENTRY_WEBHOOK_SECRET (Fail-Closed HMAC-SHA256)

Playwright MCP 整合 (短期):
- smoke.spec.ts: 5 頁面 E2E smoke test (home/dashboard/incidents/approvals/terminal)
- cd.yaml: E2E Smoke Test 步驟 + Telegram 🎭 Smoke 狀態通知

長期規劃 ADR:
- ADR-049: Figma Code Connect 設計系統同步
- ADR-050: Telegram 互動式 Incident 2.0 (6鍵 Inline Keyboard)
- ADR-051: Context7 依賴升級顧問 (Next.js 14→15, FastAPI 0.115→0.128)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 16:20:57 +08:00

164 lines
5.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ADR-049: Figma Code Connect 設計系統同步
| 項目 | 內容 |
|------|------|
| **狀態** | 📋 已批准,待實作 |
| **日期** | 2026-04-01 |
| **決策者** | 首席架構師 + 統帥 |
| **觸發** | MCP 整合長期計畫 |
## 背景
前端 UI 元件與 Figma 設計稿可能產生漂移drift設計師在 Figma 更新了元件樣式或佈局,但 `apps/web/src/components/` 下的 React 元件未同步更新,導致 QA 發現視覺差異時已累積大量技術債。
目前缺乏任何機制能夠:
1. 讓設計師在 Figma 中直接看到對應的程式碼元件
2. 在 Code Review 時確認 UI 實作與設計稿的一致性
3. 系統化追蹤哪些元件存在 design-code drift
## 問題
| 面向 | 現況 | 目標 |
|------|------|------|
| 設計-代碼映射 | 無正式對應關係 | Figma 元件 ↔ React 元件 1:1 映射 |
| 漂移偵測 | 手動 QA 發現 | 每週自動掃描確認映射狀態 |
| 設計師工作流 | 不知道對應哪支 component | Figma Dev Mode 直接顯示程式碼 |
## 決策
使用 **Figma Code Connect** 建立 `.figma.js` 映射文件,將每個 Figma 元件對應到 React 元件的 import 與 props 結構。
定期(每週)使用 Figma MCP 掃描設計稿,確認映射是否需要更新。
## 架構
### 文件結構
```
apps/web/src/components/
├── ui/
│ ├── button/
│ │ ├── Button.tsx
│ │ └── Button.figma.js ← Code Connect 映射
│ ├── card/
│ │ ├── Card.tsx
│ │ └── Card.figma.js
│ └── badge/
│ ├── Badge.tsx
│ └── Badge.figma.js
├── incident/
│ ├── IncidentCard.tsx
│ └── IncidentCard.figma.js
└── approval/
├── ApprovalCard.tsx
└── ApprovalCard.figma.js
```
### Code Connect 映射格式
```js
// Button.figma.js
import figma from '@figma/code-connect'
import { Button } from './Button'
figma.connect(Button, 'https://www.figma.com/design/FILEID?node-id=NODE_ID', {
props: {
variant: figma.enum('Variant', {
primary: 'primary',
secondary: 'secondary',
destructive: 'destructive',
}),
size: figma.enum('Size', {
sm: 'sm',
md: 'md',
lg: 'lg',
}),
label: figma.string('Label'),
disabled: figma.boolean('Disabled'),
},
example: ({ variant, size, label, disabled }) => (
<Button variant={variant} size={size} disabled={disabled}>
{label}
</Button>
),
})
```
### 每週掃描流程
```
Claude Code + Figma MCP
→ get_design_context (核心元件節點)
→ get_code_connect_suggestions
→ 比對現有 .figma.js 映射
→ 輸出「drift report」
→ 若有差異 → 建立 GitHub Issue
```
## 實作計畫
### P1核心 UI 元件(第 1 週)
| 元件 | Figma 節點 | React 路徑 |
|------|------------|------------|
| Button | TBD | `components/ui/button/Button.tsx` |
| Card | TBD | `components/ui/card/Card.tsx` |
| Badge | TBD | `components/ui/badge/Badge.tsx` |
| Input | TBD | `components/ui/input/Input.tsx` |
| Modal | TBD | `components/ui/modal/Modal.tsx` |
**前置條件**: 確認 Figma 文件 URL 與節點 ID需統帥提供
### P2業務元件第 2-3 週)
| 元件 | Figma 節點 | React 路徑 |
|------|------------|------------|
| IncidentCard | TBD | `components/incident/IncidentCard.tsx` |
| ApprovalCard | TBD | `components/approval/ApprovalCard.tsx` |
| AlertBanner | TBD | `components/alert/AlertBanner.tsx` |
| StatusBadge | TBD | `components/status/StatusBadge.tsx` |
### P3Storybook 整合(第 4 週,視現況決定)
- 確認是否已有 Storybook 設置
- 若已有:在 Story 中引用 Code Connect 映射
- 若未有:評估導入成本,記入 INSPIRATION_LAB.md 待批准
## 工具需求
```json
// package.json (apps/web)
{
"devDependencies": {
"@figma/code-connect": "^1.x"
}
}
```
發布指令(需 Figma Personal Access Token
```bash
npx figma connect publish --token $FIGMA_ACCESS_TOKEN
```
## 注意事項
1. **Figma URL 需要統帥提供**:在執行 P1 前,需要確認 Figma 設計稿的文件 ID 和各核心元件的節點 ID
2. **Token 管理**`FIGMA_ACCESS_TOKEN` 需存入 K8s Secrets不得 hardcode
3. **每週掃描**:由 Claude Code + Figma MCP 執行,不需要新增 CI 步驟
4. **`.figma.js` 檔案不影響 build**:只在開發環境和 Code Connect 發布時使用
## 影響
| 面向 | 影響 |
|------|------|
| **設計師** | Figma Dev Mode 可直接看到對應元件的 import 和 props |
| **前端開發** | PR 時有明確參考,減少「我以為設計是這樣」問題 |
| **QA** | 視覺差異有跡可查drift report 提前預警 |
| **Build 時間** | 無影響,`.figma.js` 不參與 webpack/next build |
## 相關文件
- [feedback_design_system_quickref.md](~/.claude/projects/-Users-ogt-awoooi/memory/feedback_design_system_quickref.md)
- [feedback_ui_collaboration_protocol.md](~/.claude/projects/-Users-ogt-awoooi/memory/feedback_ui_collaboration_protocol.md)
- Figma Code Connect 官方文件https://www.figma.com/developers/code-connect