@appaflytech/zeyrek-ai-mcp 0.0.56 → 0.0.57

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.
@@ -822,6 +822,18 @@ export const backendRules = [
822
822
  guide: 'ngapps://guides/entity',
823
823
  check: body => entityTransferFindings(body)
824
824
  },
825
+ {
826
+ id: 'ENT-019',
827
+ module: 'entity',
828
+ commands: { create: 'CreateEntityCommand', update: 'UpdateEntityCommand' },
829
+ status: 400,
830
+ summary: "roles tablosunda recordTransferSkipExisting açılamaz",
831
+ sourceRef: 'RecordTransferValidator.ValidateAsync: requestedSkipExisting && entity.Id == Defaults.RoleEntityGuid ⇒ RecordTransferSkipExistingNotAvailableForRolesException (ADR 0072, K-4)',
832
+ guide: 'ngapps://guides/deployment',
833
+ check: body => String(body.slug ?? '').toLowerCase() === 'roles' && body.recordTransferSkipExisting === true
834
+ ? ["recordTransferSkipExisting: Keeping existing rows isn't available for 'roles' — roller kendi taşıyıcılarıyla (Module.Role) aktarılır, satır parçasıyla değil; ayar orada uygulanamadığı için platform 400 döner. Ayarı kapalı bırakın."]
835
+ : []
836
+ },
825
837
  {
826
838
  id: 'MS-017',
827
839
  module: 'microservice',
@@ -57,11 +57,17 @@ Satırlar **tablo başına** açılan kayıt taşıma ayarıyla gider. Ayar enti
57
57
  satırları ana tabloyla **otomatik** gider; onlara ayrıca ayar açılmaz. Junction satırı yalnız iki
58
58
  tarafı da taşınıyorsa gider (dosya tarafı her zaman geçer).
59
59
  - **Kimlikler 1:1 korunur:** satır production'a aynı birincil anahtarla yazılır, identity sayacı
60
- taşınan id'lerin ötesine ilerletilir. Production'da aynı id'li satır varsa üzerine yazılır.
60
+ taşınan id'lerin ötesine ilerletilir. Production'da aynı id'li satır varsa üzerine yazılır (ayar kapalıyken).
61
61
  - **`'all'` = ayna (DEP-005, backend ADR 0011):** promote'ta production o tabloda development'ın
62
62
  aynasıdır. Kaynakta olmayan satır, çevirisi ve junction satırı production'da **silinir** —
63
63
  production'a doğrudan girilmiş satırlar dahil. Kaynak tablo boşsa hedef tablo boşalır. Platformun
64
64
  kendi tabloları (`users`, `roles`, `permissions`) taşımaya açılabilir ama aynalanmaz.
65
+ - **Hedefte varsa elleme (`recordTransferSkipExisting: true`, backend ADR 0072):** hedefte aynı birincil anahtarlı
66
+ ya da başka bir unique anahtarı çakışan satır **güncellenmez**, yalnız eksik satır eklenir; tablo **aynalanmaz**
67
+ (hedefin kendi eklediği satır silinmez). Şablon güncellemesinde de geçerlidir; dal açılışı ve merge yok sayar.
68
+ `roles`'ta açılamaz (ENT-019). Identity anahtarlı tabloya iki taraf da satır eklerse kimlikler çakışır ve kaynağın
69
+ satırı gelmez — iki tarafın satır eklediği tabloda `uuid` anahtar kullanın. Studio: tablo paneli → **"Hedefte zaten olan
70
+ kayıtları güncelleme"**.
65
71
  - **`'specific'` silmez:** yalnız upsert yapar. Seçili satırın FK ile gösterdiği satırlar zincirleme
66
72
  gelir (bir satır seçmek birkaçını taşıyabilir); seçilmemiş bir satıra giden çoka-çok bağı düşer.
67
73
  - **İlişki sırası:** `'all'` açılan tablonun ilişki hedefinde de taşıma açık olmalıdır, yoksa kayıt
@@ -122,4 +128,5 @@ yeni bir deploy.
122
128
  | Çeviriler eksik, satırlar var | ana tablonun ayarı | çeviri tablosu ana tabloyla gider; ana tabloda ayar açık olmalı |
123
129
  | Görsel production'da 404 | `page_schema_get` → prop düz URL mi, `{ type:'file', ref }` mi | prop'u `ref` ile bağlayın ya da dosyayı taşınan satırın dosya sütunundan okuyun |
124
130
  | Satırın dosyası 404, satır var | satır taşınıyor mu (`recordTransferMode`) | dosya yalnız taşınan satırla gider |
125
- | Production'da silinmiş satırlar | tablo `'all'` mı | ayna kuralı (DEP-005); production'a girilen veri bu tabloda tutulmaz |
131
+ | Production'da silinmiş satırlar | tablo `'all'` mı | ayna kuralı (DEP-005); production'a girilen veri bu tabloda tutulmaz — tutulsun isteniyorsa `recordTransferSkipExisting: true` |
132
+ | Production / abone değeri deploy ya da şablon güncellemesiyle ezildi | `entity_get` → `recordTransferSkipExisting` | `true` yapın: var olan satır güncellenmez |
@@ -1,6 +1,6 @@
1
1
  {
2
- "hash": "162e8c2d14c5a0737d023b55790bab139812a00ec8e2e6335ed51981bb27e548",
3
- "generatedAt": "2026-11-02T08:52:07.624Z",
2
+ "hash": "0598b6dcd46ea1951cf067de1e0f3f38b12eaaddc2669205451097bb2a089f90",
3
+ "generatedAt": "2026-11-02T13:49:36.654Z",
4
4
  "types": 377,
5
5
  "files": 196,
6
6
  "note": "Şemaları üreten backend kaynaklarının parmak izi. Elle düzenlemeyin: 'npm run generate-schemas' yazar, 'npm run schema:check' denetler.",
@@ -65,6 +65,9 @@
65
65
  "type": "string"
66
66
  },
67
67
  "nullable": true
68
+ },
69
+ "recordTransferSkipExisting": {
70
+ "type": "boolean"
68
71
  }
69
72
  },
70
73
  "additionalProperties": false
@@ -726,6 +726,9 @@
726
726
  },
727
727
  "nullable": true
728
728
  },
729
+ "recordTransferSkipExisting": {
730
+ "type": "boolean"
731
+ },
729
732
  "automationCount": {
730
733
  "type": "integer",
731
734
  "format": "int32"
@@ -59,6 +59,9 @@
59
59
  "type": "string"
60
60
  },
61
61
  "nullable": true
62
+ },
63
+ "recordTransferSkipExisting": {
64
+ "type": "boolean"
62
65
  }
63
66
  },
64
67
  "additionalProperties": false
@@ -726,6 +726,9 @@
726
726
  },
727
727
  "nullable": true
728
728
  },
729
+ "recordTransferSkipExisting": {
730
+ "type": "boolean"
731
+ },
729
732
  "automationCount": {
730
733
  "type": "integer",
731
734
  "format": "int32"
@@ -27,7 +27,7 @@ export function registerDeploymentTools(server, platform) {
27
27
  const config = platform.config;
28
28
  server.registerTool('deployment_start', {
29
29
  title: 'Deployment başlat',
30
- description: 'Projeyi kaynak environment\'tan hedef environment\'a deploy eder. Asenkron bir saga\'dır: sonuç bu yanıtta bitmez, deployment_status ile izleyin. Environment id\'lerini project_get çıktısından alın. BPM: süreç tanımları ve iş takvimleri taşınır — hedefte farklı aktif model yeni sürüm olarak yayınlanır (production\'da gelişte aktif), hedefin uyarlaması korunur; uyarlama, örnek, görev ve defter taşınmaz; kaynakta olmayan tanım silinir, açık örneği varsa emekliye ayrılır. KAYNAK YALNIZ DEVELOPMENT\'TIR: dal ya da production kaynak verilirse 400 (CantDeployFromBranchException) — dalı önce development\'a merge edin. ÖN DENETİM: deploy başlamadan production verisi denetlenir; veriyi bozacak ya da silecek her değişiklik 400 (DeploymentDataRiskException) ile listelenir ve deploy BAŞLAMAZ — biçim \'tablo.alan: tür (satır)\', türler not-null | unique | field-removed | table-removed | localization-move. YALNIZ TANIM TAŞINIR: tablo satırları ancak tabloda recordTransferMode (\'all\' | \'specific\' + transferRowIds) açıksa gider, çeviri ve junction satırları ana tabloyla birlikte. Kayıt taşıması \'all\' olan tabloda production development\'ın AYNASIDIR (kaynakta olmayan satır ve çevirisi silinir). DOSYA yalnız id referansıyla gider (file tipli prop { type:\'file\', ref:<fileId> } ya da taşınan satırın dosya sütunu); sayfaya düz yazılan /d/ serve URL\'si /p/\'ye çevrilir ama dosya kopyalanmaz, production\'da 404 döner — platform_guide(\'deployment\'). Microfunction\'ın yalnız YAYINLANMIŞ kodu taşınır ve hedefte yayınlanır; hiç yayınlanmamış olan hedefte taslak kalır. Zamanlanmış işin duraklatma durumu taşınır. YAYINLANMAMIŞ TASLAK TAŞINMAZ: kaynakta taslağı olan süreçler yanıtta unpublishedDrafts ({ slug, name, draftVersionNumber, activeVersionNumber }) ve note ile listelenir; hedefte aktif sürüm kalır. Taşımak için taslağı kaynakta yayınlayın (requireGreenScenarios açıksa önce senaryoları taslak üzerinde koşun), sonra yeniden deploy edin. DELTA (varsayılan): yalnız içerik özeti production\'dakinden farklı tanımlar taşınır, kaynakta olmayan tanım silinir; entity, rol, erişim politikası, bileşen, dosya, süreç tanımı, organizasyon yapısı ve tablo satırları her deploy\'da tam taşınır; klasör silme taşınmaz. Kaynağın ya da production\'ın özeti güvenilir değilse (son tamamlanmış özet denetimi güncel biçimde bir fill ya da farksız bir check değilse) deploy kendiliğinden tam koşar; fullMode:true her tanımı taşır. Hangi kipte koştuğu ve modül başına sayılar deployment_status yanıtında (mode, counters).',
30
+ description: 'Projeyi kaynak environment\'tan hedef environment\'a deploy eder. Asenkron bir saga\'dır: sonuç bu yanıtta bitmez, deployment_status ile izleyin. Environment id\'lerini project_get çıktısından alın. BPM: süreç tanımları ve iş takvimleri taşınır — hedefte farklı aktif model yeni sürüm olarak yayınlanır (production\'da gelişte aktif), hedefin uyarlaması korunur; uyarlama, örnek, görev ve defter taşınmaz; kaynakta olmayan tanım silinir, açık örneği varsa emekliye ayrılır. KAYNAK YALNIZ DEVELOPMENT\'TIR: dal ya da production kaynak verilirse 400 (CantDeployFromBranchException) — dalı önce development\'a merge edin. ÖN DENETİM: deploy başlamadan production verisi denetlenir; veriyi bozacak ya da silecek her değişiklik 400 (DeploymentDataRiskException) ile listelenir ve deploy BAŞLAMAZ — biçim \'tablo.alan: tür (satır)\', türler not-null | unique | field-removed | table-removed | localization-move. YALNIZ TANIM TAŞINIR: tablo satırları ancak tabloda recordTransferMode (\'all\' | \'specific\' + transferRowIds) açıksa gider, çeviri ve junction satırları ana tabloyla birlikte. Kayıt taşıması \'all\' olan tabloda production development\'ın AYNASIDIR (kaynakta olmayan satır ve çevirisi silinir) — tabloda recordTransferSkipExisting açıksa ayna yoktur, production\'da var olan satır güncellenmez, yalnız eksik satır eklenir. DOSYA yalnız id referansıyla gider (file tipli prop { type:\'file\', ref:<fileId> } ya da taşınan satırın dosya sütunu); sayfaya düz yazılan /d/ serve URL\'si /p/\'ye çevrilir ama dosya kopyalanmaz, production\'da 404 döner — platform_guide(\'deployment\'). Microfunction\'ın yalnız YAYINLANMIŞ kodu taşınır ve hedefte yayınlanır; hiç yayınlanmamış olan hedefte taslak kalır. Zamanlanmış işin duraklatma durumu taşınır. YAYINLANMAMIŞ TASLAK TAŞINMAZ: kaynakta taslağı olan süreçler yanıtta unpublishedDrafts ({ slug, name, draftVersionNumber, activeVersionNumber }) ve note ile listelenir; hedefte aktif sürüm kalır. Taşımak için taslağı kaynakta yayınlayın (requireGreenScenarios açıksa önce senaryoları taslak üzerinde koşun), sonra yeniden deploy edin. DELTA (varsayılan): yalnız içerik özeti production\'dakinden farklı tanımlar taşınır, kaynakta olmayan tanım silinir; entity, rol, erişim politikası, bileşen, dosya, süreç tanımı, organizasyon yapısı ve tablo satırları her deploy\'da tam taşınır; klasör silme taşınmaz. Kaynağın ya da production\'ın özeti güvenilir değilse (son tamamlanmış özet denetimi güncel biçimde bir fill ya da farksız bir check değilse) deploy kendiliğinden tam koşar; fullMode:true her tanımı taşır. Hangi kipte koştuğu ve modül başına sayılar deployment_status yanıtında (mode, counters).',
31
31
  inputSchema: {
32
32
  projectId: guid,
33
33
  sourceEnvironmentId: guid,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@appaflytech/zeyrek-ai-mcp",
3
- "version": "0.0.56",
3
+ "version": "0.0.57",
4
4
  "type": "module",
5
5
  "description": "Zeyrek (NgApps) platform APIs as MCP tools — data, logic and Studio design surface in one gateway",
6
6
  "license": "UNLICENSED",