@atezer/figma-mcp-bridge 1.7.23 → 1.7.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/.claude-plugin/plugin.json +37 -0
  2. package/.cursor-plugin/plugin.json +21 -0
  3. package/CHANGELOG.md +30 -0
  4. package/README.md +4 -3
  5. package/agents/ds-auditor.md +29 -0
  6. package/agents/screen-builder.md +29 -0
  7. package/agents/token-syncer.md +26 -0
  8. package/assets/logo.png +0 -0
  9. package/commands/add-library.md +122 -0
  10. package/commands/ds-add.md +255 -0
  11. package/commands/ds-sync.md +314 -0
  12. package/commands/implement.md +43 -0
  13. package/commands/install-library.md +73 -0
  14. package/commands/setup.md +26 -0
  15. package/commands/test.md +39 -0
  16. package/commands/update.md +25 -0
  17. package/dist/core/config.d.ts +1 -5
  18. package/dist/core/config.d.ts.map +1 -1
  19. package/dist/core/config.js +11 -111
  20. package/dist/core/config.js.map +1 -1
  21. package/dist/core/plugin-bridge-server.d.ts.map +1 -1
  22. package/dist/core/plugin-bridge-server.js +1 -2
  23. package/dist/core/plugin-bridge-server.js.map +1 -1
  24. package/dist/core/response-guard.d.ts +1 -1
  25. package/dist/core/response-guard.js +1 -1
  26. package/dist/core/types/index.d.ts +2 -98
  27. package/dist/core/types/index.d.ts.map +1 -1
  28. package/dist/core/version.d.ts +1 -1
  29. package/dist/core/version.js +1 -1
  30. package/dist/local-plugin-only.d.ts.map +1 -1
  31. package/dist/local-plugin-only.js +14 -13
  32. package/dist/local-plugin-only.js.map +1 -1
  33. package/f-mcp-plugin/README.md +8 -15
  34. package/f-mcp-plugin/manifest.json +1 -3
  35. package/hooks/hooks.json +26 -0
  36. package/package.json +15 -31
  37. package/skills/BRAND_PROFILE_SCHEMA.md +113 -0
  38. package/skills/SKILL_INDEX.md +194 -0
  39. package/skills/TOOL_MAPPING.md +111 -0
  40. package/skills/ai-handoff-export/SKILL.md +254 -0
  41. package/skills/apply-figma-design-system/SKILL.md +104 -0
  42. package/skills/audit-figma-design-system/SKILL.md +278 -0
  43. package/skills/code-design-mapper/SKILL.md +370 -0
  44. package/skills/component-documentation/SKILL.md +190 -0
  45. package/skills/design-drift-detector/SKILL.md +407 -0
  46. package/skills/design-system-rules/SKILL.md +407 -0
  47. package/skills/design-token-pipeline/SKILL.md +619 -0
  48. package/skills/ds-impact-analysis/SKILL.md +266 -0
  49. package/skills/figjam-diagram-builder/SKILL.md +172 -0
  50. package/skills/figma-a11y-audit/SKILL.md +587 -0
  51. package/skills/figma-canvas-ops/SKILL.md +325 -0
  52. package/skills/figma-screen-analyzer/SKILL.md +235 -0
  53. package/skills/fix-figma-design-system-finding/SKILL.md +117 -0
  54. package/skills/fmcp-project-rules/SKILL.md +93 -0
  55. package/skills/generate-figma-library/SKILL.md +598 -0
  56. package/skills/generate-figma-screen/SKILL.md +689 -0
  57. package/skills/implement-design/SKILL.md +473 -0
  58. package/skills/ux-copy-guidance/SKILL.md +373 -0
  59. package/skills/visual-qa-compare/SKILL.md +166 -0
  60. package/dist/browser/base.d.ts +0 -50
  61. package/dist/browser/base.d.ts.map +0 -1
  62. package/dist/browser/base.js +0 -6
  63. package/dist/browser/base.js.map +0 -1
  64. package/dist/browser/local.d.ts +0 -81
  65. package/dist/browser/local.d.ts.map +0 -1
  66. package/dist/browser/local.js +0 -283
  67. package/dist/browser/local.js.map +0 -1
  68. package/dist/core/console-monitor.d.ts +0 -82
  69. package/dist/core/console-monitor.d.ts.map +0 -1
  70. package/dist/core/console-monitor.js +0 -428
  71. package/dist/core/console-monitor.js.map +0 -1
  72. package/dist/core/design-system-manifest.d.ts +0 -272
  73. package/dist/core/design-system-manifest.d.ts.map +0 -1
  74. package/dist/core/design-system-manifest.js +0 -261
  75. package/dist/core/design-system-manifest.js.map +0 -1
  76. package/dist/core/enrichment/enrichment-service.d.ts +0 -52
  77. package/dist/core/enrichment/enrichment-service.d.ts.map +0 -1
  78. package/dist/core/enrichment/enrichment-service.js +0 -272
  79. package/dist/core/enrichment/enrichment-service.js.map +0 -1
  80. package/dist/core/enrichment/index.d.ts +0 -8
  81. package/dist/core/enrichment/index.d.ts.map +0 -1
  82. package/dist/core/enrichment/index.js +0 -8
  83. package/dist/core/enrichment/index.js.map +0 -1
  84. package/dist/core/enrichment/relationship-mapper.d.ts +0 -106
  85. package/dist/core/enrichment/relationship-mapper.d.ts.map +0 -1
  86. package/dist/core/enrichment/relationship-mapper.js +0 -352
  87. package/dist/core/enrichment/relationship-mapper.js.map +0 -1
  88. package/dist/core/enrichment/style-resolver.d.ts +0 -80
  89. package/dist/core/enrichment/style-resolver.d.ts.map +0 -1
  90. package/dist/core/enrichment/style-resolver.js +0 -327
  91. package/dist/core/enrichment/style-resolver.js.map +0 -1
  92. package/dist/core/figma-api.d.ts +0 -137
  93. package/dist/core/figma-api.d.ts.map +0 -1
  94. package/dist/core/figma-api.js +0 -274
  95. package/dist/core/figma-api.js.map +0 -1
  96. package/dist/core/figma-desktop-connector.d.ts +0 -242
  97. package/dist/core/figma-desktop-connector.d.ts.map +0 -1
  98. package/dist/core/figma-desktop-connector.js +0 -1042
  99. package/dist/core/figma-desktop-connector.js.map +0 -1
  100. package/dist/core/figma-reconstruction-spec.d.ts +0 -162
  101. package/dist/core/figma-reconstruction-spec.d.ts.map +0 -1
  102. package/dist/core/figma-reconstruction-spec.js +0 -387
  103. package/dist/core/figma-reconstruction-spec.js.map +0 -1
  104. package/dist/core/figma-tools.d.ts +0 -21
  105. package/dist/core/figma-tools.d.ts.map +0 -1
  106. package/dist/core/figma-tools.js +0 -2920
  107. package/dist/core/figma-tools.js.map +0 -1
  108. package/dist/core/snippet-injector.d.ts +0 -24
  109. package/dist/core/snippet-injector.d.ts.map +0 -1
  110. package/dist/core/snippet-injector.js +0 -97
  111. package/dist/core/snippet-injector.js.map +0 -1
  112. package/dist/core/types/enriched.d.ts +0 -213
  113. package/dist/core/types/enriched.d.ts.map +0 -1
  114. package/dist/core/types/enriched.js +0 -6
  115. package/dist/core/types/enriched.js.map +0 -1
  116. package/dist/local.d.ts +0 -73
  117. package/dist/local.d.ts.map +0 -1
  118. package/dist/local.js +0 -2605
  119. package/dist/local.js.map +0 -1
@@ -0,0 +1,93 @@
1
+ ---
2
+ name: fmcp-project-rules
3
+ description: F-MCP Bridge kullanım kuralları — Design Token Kuralı, Bağlı Token Kuralı, kütüphane yönetimi, otomatik yanıt kuralları. Tüm F-MCP skill'leri için geçerli temel kurallar. Her Figma işleminde bu kurallar otomatik olarak geçerlidir.
4
+ metadata:
5
+ mcp-server: user-figma-mcp-bridge
6
+ personas:
7
+ - designer
8
+ - designops
9
+ - uidev
10
+ - po
11
+ ---
12
+
13
+ # F-MCP Temel Kurallar
14
+
15
+ Bu skill, tüm F-MCP skill'leri ve komutları için geçerli olan temel kuralları tanımlar. Her Figma işleminde bu kurallar otomatik olarak uygulanır.
16
+
17
+ ## Kullanıcı İstekleri — Otomatik Yanıt
18
+
19
+ ### "F-MCP'yi güncelle" / "update" / "güncelle"
20
+ Terminal komutu verme. `bash scripts/update.sh` çalıştır, sonucu bildir:
21
+ > Güncelleme tamamlandı (vX.Y.Z). Claude'u yeniden başlat ve Figma'da plugin'i kapat-aç.
22
+
23
+ ### "F-MCP'yi kur" / "setup" / "kur" / "bunu kur" / GitHub linki verildi
24
+ Kullanıcı GitHub linki (github.com/atezer/FMCP) verip "kur" derse veya herhangi bir şekilde kurulum isterse:
25
+
26
+ 1. Repo zaten clone edilmişse: `bash scripts/setup.sh` çalıştır
27
+ 2. Repo clone edilmemişse: `git clone https://github.com/atezer/FMCP.git && cd FMCP && bash scripts/setup.sh`
28
+ 3. Kullanıcıya sadece sonucu bildir.
29
+
30
+ Kullanıcıya ASLA terminal komutu söyleme, teknik adım açıklama. Her şeyi sen yap.
31
+
32
+ ### Dil
33
+ Kullanıcı Türkçe konuşuyor. Tüm dosyalarda Türkçe karakterler (ş, ç, ğ, ö, ü, ı, İ) doğru kullanılmalı.
34
+
35
+ ---
36
+
37
+ ## Design System Kütüphaneleri
38
+
39
+ Kullanıcı lokal olarak design system kütüphaneleri kaydedebilir. Kayıtlı kütüphaneler `.claude/libraries/` dizininde bulunur.
40
+
41
+ ### Kullanım kuralları
42
+
43
+ 1. **Skill çalıştırmadan önce** `.claude/libraries/` dizinini kontrol et. Kayıtlı kütüphane varsa oku.
44
+ 2. **Varsayılan kütüphane:** Kullanıcı "hangi kütüphane?" demişse veya context'ten anlaşılamıyorsa, kayıtlı kütüphanelerden ilkini kullan.
45
+ 3. **Figma file key'leri** kütüphane dosyasındaki tablolardan al — URL'den parse etme, doğrudan `File Key` alanını kullan.
46
+ 4. **Token okuma** her zaman kütüphanenin WEB/ana dosyasından yapılır.
47
+ 5. **Platform seçimi:** Web ekranı → WEB dosyası, Mobil ekran → Mobil dosyası (yoksa WEB fallback).
48
+
49
+ ---
50
+
51
+ ## Design Token Kuralı (TÜM skill'ler için geçerli — ZORUNLU)
52
+
53
+ Hiçbir skill gömülü/hardcoded design token değeri içeremez ve kullanamaz. Font ailesi, renk kodu, font boyutu, spacing, radius, gölge — hiçbir tasarım değeri skill içine yazılmaz.
54
+
55
+ **Her tasarım değeri çalışma anında tasarım sisteminden okunur:**
56
+
57
+ 1. **Önce kayıtlı kütüphaneyi oku:** `.claude/libraries/` dizinindeki kütüphane dosyasını kontrol et. Font ailesi, variable collection'lar ve style listesi orada.
58
+ 2. **Canlı değerleri Figma'dan al:**
59
+ - Font → `figma_get_styles()` text style'larından veya kütüphanenin `Font Ailesi` alanından
60
+ - Renkler → `figma_get_variables()` veya `figma_get_styles()` paint style'larından
61
+ - Boyutlar/spacing → `figma_get_variables()` variable collection'larından
62
+ - Gölgeler → `figma_get_styles()` effect style'larından
63
+ 3. **Bulunamazsa kullanıcıya sor.**
64
+ 4. **Kullanıcı "sen seç" derse:** Font için `Inter`, renkler için Figma varsayılanları kullan.
65
+
66
+ **Skill'lerdeki kod örnekleri:** Örneklerde geçen değerler (renk hex, font adı, piksel boyutu) yalnızca FORMAT gösterimidir. Çalışma anında bu değerler her zaman tasarım sisteminden okunmalıdır.
67
+
68
+ ---
69
+
70
+ ## Bağlı Token Kuralı (ZORUNLU — tüm ekran/bileşen oluşturma işlemlerinde)
71
+
72
+ Figma'da oluşturulan hiçbir node'da **bağlanmamış (unbound) tasarım değeri** bulunmamalıdır. Her renk, spacing, padding, radius ve metin stili DS variable'ına veya text style'ına **bağlı (bound)** olmalıdır.
73
+
74
+ - **Renk (fill/stroke):** `figma.variables.importVariableByKeyAsync(key)` ile import et, `setBoundVariableForPaint()` ile bağla
75
+ - **Spacing/padding/radius/gap:** `setBoundVariable("paddingLeft", variable)` ile bağla
76
+ - **Metin stili:** `setTextStyleIdAsync(styleId)` ile DS text style'ını uygula
77
+ - **Metin rengi:** Text node fill'ini `setBoundVariableForPaint()` ile bağla
78
+
79
+ **Hardcoded değer kabul edilmez.** `node.fills = [{ type: "SOLID", color: {r,g,b} }]` veya `node.fontSize = 16` gibi doğrudan değer atamaları YASAKTIR. Tüm değerler DS'ten import edilip bağlanmalıdır.
80
+
81
+ Detaylı API kullanımı: `figma-canvas-ops` skill'inin **madde 10** bölümüne bak.
82
+
83
+ ---
84
+
85
+ ## Mevcut kütüphaneler
86
+
87
+ Kayıtlı kütüphaneleri görmek için `.claude/libraries/` dizinini kontrol et. Her `.md` dosyası bir kütüphanedir. Kütüphane eklemek için `/add-library` komutunu kullan.
88
+
89
+ ## Evolution Triggers
90
+
91
+ - Yeni DS kural kategorisi eklendiğinde bu skill güncellenmelidir.
92
+ - Yeni platform desteği (Flutter, React Native vb.) eklendiğinde platform seçimi kuralları genişletilmelidir.
93
+ - Kullanıcı geri bildirimine göre otomatik yanıt kuralları güncellenmelidir.
@@ -0,0 +1,598 @@
1
+ ---
2
+ name: generate-figma-library
3
+ description: Kod tabanından Figma'da profesyonel design system kütüphanesi inşa eder. Variable collection, primitive/semantic token, bileşen (variant, auto-layout, property), sayfa yapısı ve tema desteği oluşturur. "DS kütüphanesi oluştur", "design system inşa et", "token'ları Figma'ya yaz", "bileşen kütüphanesi kur", "generate library", "Figma'da DS oluştur" ifadeleriyle tetiklenir. F-MCP Bridge ve figma_execute gerektirir.
4
+ metadata:
5
+ mcp-server: user-figma-mcp-bridge
6
+ personas:
7
+ - designops
8
+ - designer
9
+ ---
10
+
11
+ # Generate Figma Library — Koddan DS Kütüphanesi İnşa
12
+
13
+ > **Design Token Kuralı:** Bu skill'deki kod örneklerinde geçen font adları, renk kodları, piksel boyutları yalnızca FORMAT gösterimidir. Çalışma anında tüm design token değerleri (font, renk, boyut, spacing, radius, gölge) kayıtlı kütüphaneden (`figma_get_variables`, `figma_get_styles`) veya kullanıcıdan okunmalıdır. Hardcoded token değeri kullanma. Detay: `project-context.md` → "Design Token Kuralı".
14
+
15
+ ## Overview
16
+
17
+ Bu skill, bir kod tabanından Figma'da profesyonel bir design system kütüphanesi oluşturur. Variable'lar (token), stiller, bileşenler (variant, auto-layout, property) ve sayfa yapısı dahil. Topluluk `figma-generate-library` skill'inden uyarlanmış, F-MCP Bridge araçlarına göre yeniden yazılmıştır.
18
+
19
+ **Bu ASLA tek seferde yapılacak bir iş değildir.** DS inşa etmek 20–100+ `figma_execute` çağrısı, birden fazla faz ve zorunlu kullanıcı onay noktaları gerektirir.
20
+
21
+ **Zorunlu:** Her `figma_execute` çağrısından önce [figma-canvas-ops](../figma-canvas-ops/SKILL.md) kılavuzundaki kuralları uygula.
22
+
23
+ ## Skill Boundaries
24
+
25
+ - Bu skill: Figma'da **DS kütüphanesi** oluşturma/güncelleme
26
+ - DS bileşenleriyle **ekran** oluşturmak istiyorsan → [generate-figma-screen](../generate-figma-screen/SKILL.md)
27
+ - Mevcut ekranı DS'ye **hizalamak** istiyorsan → [apply-figma-design-system](../apply-figma-design-system/SKILL.md)
28
+ - Figma token'larını **kod dosyalarına** export etmek istiyorsan → [design-token-pipeline](../design-token-pipeline/SKILL.md)
29
+
30
+ ## Prerequisites
31
+
32
+ - F-MCP Bridge plugin bağlı olmalı
33
+ - Kod tabanında token/bileşen bilgisi mevcut olmalı (CSS variables, Tailwind config, Swift Color extension, vb.)
34
+
35
+ ## F-MCP skill koordinasyonu
36
+
37
+ - **Sonra:** `design-token-pipeline` (token export), `code-design-mapper` (bileşen eşleme), `design-system-rules` (kural üretimi)
38
+ - **Doğrulama:** `audit-figma-design-system` ile oluşturulan kütüphanenin tutarlılığını kontrol et
39
+ - **a11y:** `figma-a11y-audit` ile kontrast ve erişilebilirlik kontrolü
40
+
41
+ ## F-MCP Avantajları
42
+
43
+ Bridge'de topluluk skill'inde olmayan toplu araçlar mevcut:
44
+
45
+ | Araç | Açıklama |
46
+ |---|---|
47
+ | `figma_batch_create_variables` | Toplu variable oluşturma |
48
+ | `figma_batch_update_variables` | Toplu variable güncelleme |
49
+ | `figma_setup_design_tokens` | Yapılandırılmış token kurulumu |
50
+ | `figma_arrange_component_set` | Variant grid düzenleme |
51
+ | `figma_create_variable_collection` | Collection oluşturma |
52
+
53
+ ## Zorunlu Faz Sırası
54
+
55
+ Faz sırasını değiştirme veya atlama — yapısal bozulmalara neden olur.
56
+
57
+ ```
58
+ Faz 0: KEŞİF (henüz yazma yok)
59
+ 0a. Kod tabanını analiz et → token, bileşen, isimlendirme kurallarını çıkar
60
+ 0b. Figma dosyasını incele → mevcut sayfa, variable, bileşen, stil
61
+ 0c. v1 kapsamını kilitle → tam token seti + bileşen listesinde mutabık kal
62
+ ✋ KULLANICI ONAYI: tam planı sun, onay bekle
63
+
64
+ Faz 1: TEMELLERİ KUR (token'lar — her zaman bileşenlerden önce)
65
+ 1a. Variable collection ve modları oluştur
66
+ 1b. Primitive variable'lar (ham değerler)
67
+ 1c. Semantic variable'lar (alias, mod-bazlı)
68
+ 1d. Tüm variable'larda scope ayarla
69
+ 1e. Effect style ve text style oluştur
70
+ 1f. Motion token'ları oluştur:
71
+ - duration/fast: 150 (ms)
72
+ - duration/normal: 250
73
+ - duration/slow: 400
74
+ - easing/standard: "ease-in-out"
75
+ - easing/decelerate: "ease-out"
76
+ - easing/accelerate: "ease-in"
77
+ NOT: Figma'da motion token'ları native variable olarak desteklenmez (FLOAT/STRING).
78
+ STRING variable olarak oluştur ve scope'u "ALL_SCOPES" ayarla.
79
+ Alternatif: Dokümantasyon sayfasında motion token tablosu olarak belgele.
80
+ 1g. Shadow/elevation token'ları: shadow/sm, shadow/md, shadow/lg, shadow/xl
81
+ Effect style olarak oluştur (figma_execute ile dropShadow).
82
+ → Çıkış kriteri: planlanan her token mevcut, FLOAT token scope'ları ayarlı, STRING token'lar (easing) scope gerektirmez, shadow effect style'lar oluşturulmuş
83
+ ✋ KULLANICI ONAYI: variable özeti göster
84
+
85
+ Faz 2: DOSYA YAPISI (bileşenlerden önce)
86
+ 2a. Sayfa iskeletini oluştur: Cover → Başlangıç → Temeller → Bileşenler → Yardımcılar
87
+ 2b. Temel dokümantasyon sayfaları (renk swatchleri, tipografi örnekleri, spacing barları)
88
+
89
+ **60-30-10 Renk Kuralı:**
90
+
91
+ Palette hiyerarşisi (token yapısı):
92
+ - **%60 Nötr** — Arka plan, yüzey, kenarlık renkleri (neutral/50-900, surface/*)
93
+ - **%30 Birincil** — Marka rengi, birincil aksiyonlar, vurgulanan alanlar (primary/*, brand/*)
94
+ - **%10 Vurgu** — CTA butonları, bildirimler, hata/uyarı durumları (accent/*, semantic/*)
95
+
96
+ UI kullanım rehberi (alan dağılımı):
97
+ - Ekran alanının ~%60'ı nötr renklerle kaplanmalı (beyaz/gri arka plan, yüzeyler)
98
+ - Ekran alanının ~%30'u birincil marka rengi ve türevleriyle dolmalı (navigasyon, başlıklar, paneller)
99
+ - Ekran alanının ~%10'u dikkat çekici vurgu renkleriyle işaretlenmeli (CTA, badge, durum göstergeleri)
100
+
101
+ Bu oran kesin olmaktan çok yol göstericidir; tasarımın görsel dengesini sağlamak amaçlanır.
102
+ → Çıkış kriteri: planlanan tüm sayfalar mevcut
103
+ ✋ KULLANICI ONAYI: sayfa listesi + screenshot
104
+
105
+ Faz 3: BİLEŞENLER (bağımlılık sırasıyla, teker teker)
106
+ Her bileşen için (atomlar → moleküller → organizmalar):
107
+ 3a. Bileşen sayfasını oluştur
108
+ 3b. Base component: auto-layout + variable bağlama
109
+ 3c. Variant kombinasyonları (combineAsVariants + grid layout)
110
+ 3d. Durum kapsamı kontrolü: her bileşende en az 4 durum olmalı
111
+ Zorunlu: Default, Disabled
112
+ Bileşen tipine göre: Hover, Active/Pressed, Loading, Error, Focus
113
+ Etkileşimli bileşenler (Button, Input, Toggle, Checkbox):
114
+ minimum Default + Hover + Active + Disabled + Focus = 5 durum
115
+ Statik bileşenler (Card, Badge, Divider):
116
+ minimum Default + Disabled = 2 durum yeterli
117
+ 3e. Component property ekle (TEXT, BOOLEAN, INSTANCE_SWAP)
118
+ 3f. Sayfa dokümantasyonu (başlık, açıklama, kullanım notları)
119
+ 3g. Doğrulama: figma_get_file_data + figma_capture_screenshot
120
+ → Çıkış kriteri: variant sayısı doğru, tüm bağlamalar doğrulanmış, durum kapsamı yeterli
121
+ ✋ KULLANICI ONAYI: her bileşen sonrası screenshot
122
+
123
+ Faz 4: ENTEGRASYON + QA
124
+ 4a. İsteğe bağlı Code Connect eşleme (code-design-mapper)
125
+ 4b. a11y denetimi (figma-a11y-audit): kontrast, minimum dokunma hedefi
126
+ 4c. İsimlendirme denetimi: kopya yok, isimsiz node yok, tutarlı casing
127
+ 4d. Bağlanmamış fill/stroke denetimi: hardcode kalmamış
128
+ 4e. Son review: tüm sayfaların screenshot'ları
129
+ ✋ KULLANICI ONAYI: tam onay
130
+ ```
131
+
132
+ ## Faz 0: Keşif (Detay)
133
+
134
+ ### 0a. Kod tabanı analizi
135
+
136
+ Aşağıdakileri çıkar:
137
+
138
+ | Kaynak | Çıkarılacak |
139
+ |---|---|
140
+ | CSS Custom Properties / Sass variables | Renk, spacing, radius, shadow token'ları |
141
+ | Tailwind config | Tema token'ları, breakpoint'ler |
142
+ | Swift Color/Font extension | iOS token'ları |
143
+ | Android colors.xml / Compose Theme | Android token'ları |
144
+ | Bileşen dosyaları | Bileşen listesi, prop'lar, variant'lar |
145
+
146
+ ### 0b. Figma dosyası inceleme
147
+
148
+ ```
149
+ figma_get_status()
150
+ figma_get_file_data(depth=1)
151
+ figma_get_variables(verbosity="summary")
152
+ figma_get_styles()
153
+ ```
154
+
155
+ Mevcut yapıyı not al — çakışma riski varsa kullanıcıya sor.
156
+
157
+ ## Faz 1: Temeller (Detay)
158
+
159
+ ### Variable collection oluşturma
160
+
161
+ ```
162
+ figma_create_variable_collection(name="Colors", modes=["Light", "Dark"])
163
+ figma_create_variable_collection(name="Spacing", modes=["Default"])
164
+ figma_create_variable_collection(name="Radius", modes=["Default"])
165
+ ```
166
+
167
+ ### Breakpoint / Ekran Boyut Token'ları (ZORUNLU)
168
+
169
+ Her DS kütüphanesinde ekran boyut token'ları olmalı. Responsive tasarımda hard-coded boyut KABUL EDİLMEZ:
170
+
171
+ ```
172
+ Primitives:
173
+ screen/mobile-width: 390 (iPhone 14)
174
+ screen/mobile-height: 844
175
+ screen/tablet-width: 768 (iPad portrait)
176
+ screen/tablet-height: 1024
177
+ screen/web-width: 1440 (Desktop)
178
+ screen/web-height: 900
179
+ screen/tablet-padding: 120 (Tablet yan padding)
180
+ screen/web-padding: 480 (Web yan padding — centered card)
181
+ screen/top-padding-mobile: 80
182
+ screen/top-padding-tablet: 160
183
+ screen/bottom-padding: 40
184
+
185
+ Semantic:
186
+ layout/screen-mobile-width → screen/mobile-width
187
+ layout/screen-tablet-width → screen/tablet-width
188
+ layout/screen-web-width → screen/web-width
189
+ layout/screen-tablet-padding → screen/tablet-padding
190
+ layout/screen-web-padding → screen/web-padding
191
+ ```
192
+
193
+ Her ekran frame'inde şu binding'ler ZORUNLUDUR:
194
+ - `setBoundVariable("width", ...)` — genişlik
195
+ - `setBoundVariable("minHeight", ...)` — minimum yükseklik
196
+ - `setBoundVariable("paddingLeft/Right", ...)` — yan padding
197
+ - `setBoundVariable("paddingTop/Bottom", ...)` — üst/alt padding
198
+
199
+ Figma'da "Fixed width (390)" veya "Fixed height (900)" yerine variable ikonu görünmelidir. **Hard-coded boyut değeri KABUL EDİLMEZ.**
200
+
201
+ ### Kritik Kural: Tüm Görünüm Değerleri Token'a Bağlı Olmalı (ZORUNLU)
202
+
203
+ Bir bileşen oluşturulurken aşağıdaki TÜM değerler semantic variable'a bağlanmalıdır. Hardcoded değer KABUL EDİLMEZ:
204
+
205
+ | Özellik | Bağlama Yöntemi | Örnek Token |
206
+ |---------|-----------------|-------------|
207
+ | Fill (arka plan) | `setBoundVariable("fills", ...)` | button/primary/bg |
208
+ | Text fill (yazı rengi) | Text node'da `setBoundVariable("fills", ...)` | button/primary/text |
209
+ | Stroke (kenarlık rengi) | `setBoundVariable("strokes", ...)` | button/primary/border |
210
+ | **Stroke width (kenarlık kalınlığı)** | `setBoundVariable("strokeWeight", ...)` | button/border-width |
211
+ | Corner radius | `setBoundVariable("topLeftRadius", ...)` vb. | button/radius |
212
+ | Padding | `setBoundVariable("paddingLeft", ...)` vb. | button/padding-x |
213
+ | Item spacing (gap) | `setBoundVariable("itemSpacing", ...)` | button/gap |
214
+ | Min height | `setBoundVariable("minHeight", ...)` | button/minHeight |
215
+ | Font size | Text Style oluştur + `setBoundVariable("fontSize", ...)` | button/fontSize |
216
+
217
+ **Özellikle gözden kaçan özellikler:**
218
+ - `strokeWeight` — Outline buton gibi kenarlığı olan variantlarda kenarlık kalınlığı variable'a bağlanmalı
219
+ - `fontSize` — Figma'da fontFamily/fontWeight variable olarak bağlanamaz, Text Style ile yönetilir
220
+ - Text Style oluştur → fontSize'i variable'a bağla → tüm text node'lara `setTextStyleIdAsync` ile uygula
221
+
222
+ ### Kritik Kural: Text Hizalama (ZORUNLU)
223
+
224
+ Text node'un `textAlignHorizontal` değeri, bileşenin amacına göre ayarlanmalı:
225
+
226
+ | Bileşen Tipi | textAlignHorizontal | Neden |
227
+ |-------------|---------------------|-------|
228
+ | Button, Tag, Badge | CENTER | Yazı butonun ortasında olmalı |
229
+ | Input, Textarea | LEFT | Kullanıcı metni soldan yazar |
230
+ | Card title, List item | LEFT | Okuma yönü sol→sağ |
231
+ | Dialog title | LEFT veya CENTER | Tasarım kararına bağlı |
232
+ | Table header/cell | LEFT | Tablo verisi sola hizalı |
233
+
234
+ **Kural:** `textAlignHorizontal` ASLA varsayılan LEFT olarak bırakılmamalı — bileşen tipine göre bilinçli seçilmeli.
235
+ Text Style içerisinde hizalama AYARLANAMAZ (Figma kısıtlaması) — her text node'da ayrı ayarlanmalı.
236
+
237
+ ### Kritik Kural: Bileşen Sizing (ZORUNLU)
238
+
239
+ Bileşenler ve instance'lar ASLA `Fixed width` olarak bırakılmamalı (özel durum hariç):
240
+
241
+ | Durum | layoutSizingHorizontal | Neden |
242
+ |-------|----------------------|-------|
243
+ | Button, Tag, Badge | HUG | İçeriğe göre boyutlanır, yazı ortalanır |
244
+ | Input, Textarea | FILL | Parent genişliğine uyar |
245
+ | Card | FILL veya FIXED | Responsive grid'e göre |
246
+ | Icon wrapper | HUG | İkon boyutuna göre |
247
+
248
+ **Kural:** `Fixed width` kullanırsan yazının ortalanmış görünmesini engeller — buton "Kaydet" yazısından geniş kalır ve yazı sola yapışır. HUG kullanırsan buton yazıya sarılır ve auto-layout CENTER düzgün çalışır.
249
+
250
+ **Doğrulama:** Faz 4 (4d) adımında `boundVariables`, stroke, fontSize, text style, text hizalama VE sizing mode kontrol edilmeli.
251
+
252
+ ### Toplu variable oluşturma (F-MCP avantajı)
253
+ ```
254
+
255
+ ### Kritik Kural: Semantic Token = Alias (ZORUNLU)
256
+
257
+ **Her semantic token, bir primitive token'a alias (VARIABLE_ALIAS) olarak bağlanmalıdır.** Hiçbir semantic token'da direkt sabit değer (literal value) olmamalıdır.
258
+
259
+ Eğer semantic token için uygun bir primitive yoksa, **önce primitive oluştur, sonra alias bağla:**
260
+
261
+ ```js
262
+ // figma_execute — Primitives'te karşılık yoksa önce oluştur
263
+ const primColl = (await figma.variables.getLocalVariableCollectionsAsync()).find(c => c.name === "Primitives");
264
+ const newPrim = figma.variables.createVariable("size/touch-min-ios", primColl, "FLOAT");
265
+ newPrim.setValueForMode(primColl.modes[0].modeId, 44);
266
+ newPrim.description = "iOS minimum touch target. 44pt per Apple HIG.";
267
+ newPrim.scopes = ["WIDTH_HEIGHT"];
268
+
269
+ // Sonra semantic'i alias olarak bağla
270
+ const semVar = await figma.variables.getVariableByIdAsync("<SEMANTIC_VAR_ID>");
271
+ semVar.setValueForMode(semModeId, { type: "VARIABLE_ALIAS", id: newPrim.id });
272
+ ```
273
+
274
+ Bu kural, token sisteminin tutarlılığını garanti eder: primitive değişince tüm semantic'ler otomatik güncellenir.
275
+
276
+ ### Toplu variable oluşturma (F-MCP avantajı)
277
+
278
+ ```
279
+ figma_batch_create_variables(
280
+ collectionId="<id>",
281
+ variables=[
282
+ // Aşağıdaki değerler FORMAT örneğidir — çalışma anında DS'den okunur
283
+ { name: "primary/50", type: "COLOR", values: { "Light": "#EEF2FF", "Dark": "#312E81" } },
284
+ { name: "primary/100", type: "COLOR", values: { "Light": "#E0E7FF", "Dark": "#3730A3" } },
285
+ ...
286
+ ]
287
+ )
288
+ ```
289
+
290
+ **Hata yönetimi:** `figma_batch_create_variables` kısmi başarı dönebilir. Yanıttaki `{ created, failed }` alanlarını kontrol et:
291
+ - `failed` boş değilse: hata mesajını oku, eksik variable'ları tekil `figma_create_variable` ile oluştur
292
+ - `created` dizisinden variable ID'lerini kaydet — sonraki adımlarda (scope atama, alias bağlama) kullanılacak
293
+
294
+ Veya `figma_setup_design_tokens` ile yapılandırılmış kurulum (atomik: ya hepsi başarılı ya hiçbiri).
295
+
296
+ ### Scope ayarlama
297
+
298
+ Variable oluşturduktan sonra scope'ları ayarla (ZORUNLU):
299
+
300
+ ```js
301
+ // figma_execute içinde
302
+ const variable = await figma.variables.getVariableByIdAsync("<id>");
303
+ variable.scopes = ["FRAME_FILL", "SHAPE_FILL"];
304
+ return { id: variable.id, scopes: variable.scopes };
305
+ ```
306
+
307
+ ### Description ve Code Syntax (ZORUNLU)
308
+
309
+ Her variable'a description ve code syntax ekle. Bu, geliştirici handoff'unda kritik bilgi sağlar:
310
+
311
+ ```js
312
+ // figma_execute içinde — description
313
+ const variable = await figma.variables.getVariableByIdAsync("<id>");
314
+ variable.description = "Primary button background. WCAG AA on white (4.56:1).";
315
+
316
+ // Code syntax — 3 platform
317
+ variable.setVariableCodeSyntax("WEB", "var(--btn-primary-bg)");
318
+ variable.setVariableCodeSyntax("ANDROID", "R.color.btn_primary_bg");
319
+ variable.setVariableCodeSyntax("iOS", "ButtonColor.primary.bg");
320
+ return { id: variable.id, description: variable.description };
321
+ ```
322
+
323
+ **İsimlendirme kuralları (Code Syntax):**
324
+ - **Web:** CSS custom property: `var(--token-name)` (kebab-case)
325
+ - **Android:** Resource reference: `R.color.token_name` veya `R.dimen.token_name` (snake_case)
326
+ - **iOS:** Swift constant: `Color.tokenName` veya `Spacing.tokenName` (camelCase)
327
+
328
+ ### Text ve effect style'lar
329
+
330
+ > **Font kuralı:** Hardcoded font kullanma. Önce kayıtlı kütüphanenin text style'larından font ailesini oku. Bulunamazsa kullanıcıya sor. Kullanıcı "sen seç" derse `Inter` kullan.
331
+
332
+ ```js
333
+ // FONT_FAMILY ve FONT_STYLE'ı kütüphaneden veya kullanıcıdan al
334
+ const FONT_FAMILY = "KütüphanedenOkunanFont"; // ör: "Source Sans Pro", "Inter", vb.
335
+ const style = figma.createTextStyle();
336
+ style.name = "Heading/H1";
337
+ await figma.loadFontAsync({ family: FONT_FAMILY, style: "Bold" });
338
+ style.fontName = { family: FONT_FAMILY, style: "Bold" };
339
+ style.fontSize = 32;
340
+ style.lineHeight = { value: 40, unit: "PIXELS" };
341
+ return { styleId: style.id, name: style.name };
342
+ ```
343
+
344
+ ## Faz 3: Bileşenler (Detay)
345
+
346
+ ### Base component
347
+
348
+ ```js
349
+ const component = figma.createComponent();
350
+ component.name = "Button";
351
+ component.layoutMode = "HORIZONTAL";
352
+ component.primaryAxisSizingMode = "AUTO";
353
+ component.counterAxisSizingMode = "AUTO";
354
+ component.paddingTop = component.paddingBottom = 12;
355
+ component.paddingLeft = component.paddingRight = 24;
356
+ component.cornerRadius = 8;
357
+ component.itemSpacing = 8;
358
+
359
+ // Metin ekle — FONT_FAMILY'yi kütüphaneden veya kullanıcıdan al
360
+ await figma.loadFontAsync({ family: FONT_FAMILY, style: "Medium" });
361
+ const label = figma.createText();
362
+ label.characters = "Button";
363
+ label.fontName = { family: FONT_FAMILY, style: "Medium" };
364
+ label.fontSize = 14;
365
+ component.appendChild(label);
366
+
367
+ return { componentId: component.id };
368
+ ```
369
+
370
+ ### Variant'lar
371
+
372
+ ```js
373
+ const variants = [];
374
+ const sizes = ["Small", "Medium", "Large"];
375
+ const types = ["Primary", "Secondary", "Ghost"];
376
+
377
+ for (const size of sizes) {
378
+ for (const type of types) {
379
+ const variant = existingComponent.clone();
380
+ variant.name = `Size=${size}, Type=${type}`;
381
+ // Boyut ve stil ayarlamaları...
382
+ variants.push(variant);
383
+ }
384
+ }
385
+
386
+ const componentSet = figma.combineAsVariants(
387
+ [existingComponent, ...variants],
388
+ figma.currentPage
389
+ );
390
+ componentSet.name = "Button";
391
+
392
+ // ZORUNLU: Component set'e auto-layout ekle — yoksa variantlar üst üste biner
393
+ componentSet.layoutMode = "VERTICAL"; // veya "HORIZONTAL"
394
+ componentSet.primaryAxisSizingMode = "AUTO";
395
+ componentSet.counterAxisSizingMode = "AUTO";
396
+ componentSet.itemSpacing = 16;
397
+
398
+ return { componentSetId: componentSet.id, variantCount: variants.length + 1 };
399
+ ```
400
+
401
+ **KRİTİK:** Variantları birleştirmek için `figma_arrange_component_set` kullan:
402
+
403
+ ```
404
+ figma_arrange_component_set(nodeIds=["<VARIANT_1_ID>", "<VARIANT_2_ID>", ...])
405
+ ```
406
+
407
+ Bu araç sadece `combineAsVariants` çağırır. API sonucu native UI ile birebir aynı değildir — aşağıdaki düzeltme adımlarını `figma_execute` ile SONRASINDA uygula:
408
+
409
+ ```js
410
+ // figma_execute — arrange_component_set SONRASI calistir
411
+ const cs = await figma.getNodeByIdAsync("<COMPONENT_SET_ID>");
412
+
413
+ // 1. Stroke ekle (API eklemiyor, native ekliyor)
414
+ cs.strokes = [{
415
+ type: 'SOLID', visible: true, opacity: 1, blendMode: 'NORMAL',
416
+ color: { r: 0.541, g: 0.220, b: 0.961 }
417
+ }];
418
+
419
+ // 2. Auto-layout ekle (native değerler)
420
+ cs.layoutMode = "HORIZONTAL";
421
+ cs.primaryAxisSizingMode = "AUTO";
422
+ cs.counterAxisSizingMode = "AUTO";
423
+ cs.primaryAxisAlignItems = "MIN";
424
+ cs.counterAxisAlignItems = "CENTER";
425
+ cs.itemSpacing = 30;
426
+ cs.paddingLeft = 20; cs.paddingRight = 20;
427
+ cs.paddingTop = 20; cs.paddingBottom = 20;
428
+
429
+ // 3. Property 1 → Variant rename
430
+ for (const child of cs.children) {
431
+ child.name = child.name.replace("Property 1=", "Variant=");
432
+ }
433
+ ```
434
+
435
+ ### Component property
436
+
437
+ ```js
438
+ // figma_execute içinde
439
+ const component = await figma.getNodeByIdAsync("<id>");
440
+ component.addComponentProperty("label", "TEXT", "Button");
441
+ component.addComponentProperty("showIcon", "BOOLEAN", true);
442
+ return { properties: component.componentPropertyDefinitions };
443
+ ```
444
+
445
+ ### Code-Only Props Katmanı (Nathan Curtis Yaklaşımı)
446
+
447
+ Görsel olmayan ama geliştirici için kritik olan property'ler (accessibilityLabel, heading level, slot config, minLength, maxRows vb.) Figma'da **gizli bir katman** içinde tanımlanır. Bu, Figma'yı bileşen tanımının tek doğruluk kaynağı yapar.
448
+
449
+ **Adım 1: Gizli katman oluştur**
450
+
451
+ Component'in kök katmanının alt öğesi olarak, (0,0) konumunda, 0.01x0.01 boyutunda, içeriği kırpılmış bir frame ekle:
452
+
453
+ ```js
454
+ // figma_execute — Code-only props katmanı oluştur
455
+ const component = await figma.getNodeByIdAsync("<COMPONENT_ID>");
456
+
457
+ const codeOnlyFrame = figma.createFrame();
458
+ codeOnlyFrame.name = "Code only props";
459
+ codeOnlyFrame.resize(0.01, 0.01);
460
+ codeOnlyFrame.x = 0;
461
+ codeOnlyFrame.y = 0;
462
+ codeOnlyFrame.clipsContent = true;
463
+ codeOnlyFrame.fills = [];
464
+ component.appendChild(codeOnlyFrame);
465
+ // KRİTİK: ABSOLUTE positioning — yoksa auto-layout gap'te boşluk yaratır
466
+ codeOnlyFrame.layoutPositioning = "ABSOLUTE";
467
+ ```
468
+
469
+ **Adım 2: Her property için bir katman ekle**
470
+
471
+ ```js
472
+ await figma.loadFontAsync({ family: FONT_FAMILY, style: "Regular" });
473
+
474
+ // Erişilebilirlik etiketi
475
+ const a11yLabel = figma.createText();
476
+ a11yLabel.characters = "Label";
477
+ a11yLabel.name = "accessibilityLabel";
478
+ a11yLabel.fontSize = 10;
479
+ codeOnlyFrame.appendChild(a11yLabel);
480
+
481
+ // Component property'ye bağla
482
+ component.addComponentProperty("accessibilityLabel", "TEXT", "Button label");
483
+ a11yLabel.componentPropertyReferences = { characters: "accessibilityLabel#<KEY>" };
484
+ ```
485
+
486
+ **Adım 3: Görünürlük kontrolü**
487
+
488
+ - Ürün tasarımcısının görmesi gereken props → **katman görünür** (Properties panelinde çıkar)
489
+ - Sadece geliştirici için → **katman gizli** (`a11yLabel.visible = false;`) — Properties panelinde görünmez ama spec data'da çıkar
490
+
491
+ **Yaygın Code-Only Prop Örnekleri:**
492
+
493
+ | Bileşen | Code-Only Prop | Type | Açıklama |
494
+ |---------|---------------|------|----------|
495
+ | Button | accessibilityLabel | TEXT | Ekran okuyucu etiketi |
496
+ | Heading | as | VARIANT (h1-h6) | HTML tag seviyesi |
497
+ | Heading | level | VARIANT (1-6) | Görsel hiyerarşi seviyesi |
498
+ | Input | minLength | TEXT | Min karakter (doğrulama) |
499
+ | Input | maxLength | TEXT | Max karakter (doğrulama) |
500
+ | Textarea | minRows | TEXT | Min satır yüksekliği |
501
+ | Textarea | maxRows | TEXT | Max satır yüksekliği |
502
+ | Image | src | TEXT | Görsel kaynağı URL |
503
+ | Image | altText | TEXT | Alternatif metin |
504
+ | CheckboxGroup | items anyOf | TEXT | İzin verilen alt bileşenler |
505
+ | CheckboxGroup | minItems | TEXT | Min seçim sayısı |
506
+
507
+ **Spec Data Çıktısı (YAML):**
508
+ ```yaml
509
+ components:
510
+ button:
511
+ props:
512
+ label:
513
+ type: string
514
+ accessibilityLabel:
515
+ type: string
516
+ disabled:
517
+ type: boolean
518
+ default: false
519
+ heading:
520
+ props:
521
+ children:
522
+ type: string
523
+ as:
524
+ type: string
525
+ enum: [h1, h2, h3, h4, h5, h6]
526
+ default: h2
527
+ level:
528
+ type: number
529
+ enum: [1, 2, 3, 4, 5, 6]
530
+ default: 2
531
+ ```
532
+
533
+ **Kural:** Code-only props, `ai-handoff-export` skill'inin HANDOFF.md çıktısında otomatik olarak listelenmeli. `figma-a11y-audit` skill'i bu props'ları erişilebilirlik denetiminde kullanmalı.
534
+
535
+ ## Türkçe Karakter Kuralı (ZORUNLU)
536
+
537
+ Tüm Türkçe metin içeriklerinde (Figma text node, kod string, dokümantasyon) doğru Unicode karakterler kullanılmalıdır. ASCII karşılıkları YASAKTIR:
538
+
539
+ | Doğru | Yanlış | Doğru | Yanlış |
540
+ |-------|--------|-------|--------|
541
+ | ş | s | Ş | S |
542
+ | ı | i | İ | I |
543
+ | ö | o | Ö | O |
544
+ | ü | u | Ü | U |
545
+ | ç | c | Ç | C |
546
+ | ğ | g | Ğ | G |
547
+
548
+ Son adım: Üretilen tüm Türkçe metinleri karakter kontrolünden geçir.
549
+
550
+ ## Performans Kuralları
551
+
552
+ - Her `figma_execute` çağrısı küçük ve odaklı olmalı — tek bir işlem (1 collection, 1 bileşen, vb.)
553
+ - `figma_batch_create_variables` tercih et — 10+ variable için tekil çağrılardan çok daha verimli
554
+ - `figma_get_variables` ilk çağrıdan sonra sonucu yeniden kullan
555
+ - Screenshot doğrulamayı her faz sonunda yap, her adımda değil
556
+
557
+ ## Dark Mode Token Stratejisi
558
+
559
+ DS kütüphanesinde dark mode desteği **zorunludur**. İki yaklaşım:
560
+
561
+ ### Professional+ Plan (Önerilen):
562
+ Semantic collection'a "Dark" mode ekle:
563
+ ```
564
+ figma_add_mode(collectionId="<SEMANTIC_ID>", modeName="Dark")
565
+ ```
566
+ Sonra her semantic token'ın Dark mode değerini ayarla:
567
+ ```js
568
+ // figma_execute
569
+ const semVar = await figma.variables.getVariableByIdAsync("<SEM_VAR_ID>");
570
+ semVar.setValueForMode(darkModeId, { type: "VARIABLE_ALIAS", id: darkPrimVarId });
571
+ ```
572
+
573
+ ### Free Plan Workaround:
574
+ Ayrı "Primitives Dark" collection oluştur:
575
+ 1. Aynı token isimleriyle (color/blue/600, color/gray/900 vb.) dark değerler ata
576
+ 2. Geliştirici kodda tema'ya göre hangi collection'ı kullanacağını seçer
577
+ 3. FLOAT token'lar (spacing, radius, fontSize) aynı değerde kalır
578
+
579
+ ### Dark Renk Paleti Rehberi:
580
+ | Light | Dark | Kural |
581
+ |-------|------|-------|
582
+ | Beyaz arka plan | Çok koyu gri (#0F1114) | Saf siyah değil, yumuşak koyu |
583
+ | Koyu metin (#111827) | Açık metin (#F3F4F6) | Ters çevir ama saf beyaz değil |
584
+ | Gri border (#E5E7EB) | Koyu border (#272A30) | Daha az belirgin |
585
+ | Mavi/600 (#2563EB) | Mavi/500 açık (#609EF6) | Daha parlak mavi (koyu yüzeyde okunur) |
586
+
587
+ ## Marka Profili Entegrasyonu
588
+
589
+ `.fmcp-brand-profile.json` varsa:
590
+ - `typography` → Display ve body font seçimi Faz 1'de text style oluştururken referans alınır
591
+ - `aestheticDirection` → Faz 2'de dokümantasyon sayfalarının görsel tonunu belirler
592
+
593
+ ## Evolution Triggers
594
+
595
+ - Bridge'e yeni batch araçları (ör. batch style oluşturma) eklenirse Faz 1 güncellenmeli
596
+ - Yeni component property türleri desteklenirse Faz 3 güncellenmeli
597
+ - Çoklu dosya desteği eklenirse Faz 2 genişletilmeli
598
+ - `figma_setup_design_tokens` parametreleri değişirse Faz 1 güncellenmeli