Git senkronizasyonu
Persona'ları bir Git deposuna YAML + Markdown olarak yansıt (mirror) — pull / push / iki yönlü (bidirectional), temel yol (base path) kapsamı, Git blob SHA çakışma tespiti.
Git senkronizasyonu persona kütüphaneni çekme isteklerinde (pull request) görünür yapar. Kanonik Moonborn durumu yapılandırılmış bir Git deposuna YAML + Markdown olarak yansıtılır (mirror). Depo kanonik kaynak olabilir (PR inceleme deseni), denetim izi olabilir (Moonborn arayüzü birincil, Git geçmiş), ya da ikisi birden (iki yönlü senkronizasyon, çakışma koruması ile).
Bu sayfayı bitirdiğinde
- Üç senkronizasyon modunu (pull / push / iki yönlü) ayırt edebileceksin.
- Persona'ların dosya biçimini (YAML başlık + Markdown gövde) bileceksin.
- Çakışma tespit (conflict detection) mekanizmasını (Git blob SHA) ve üç çözümleme stratejisini (
remote_wins/local_wins/error) tanıyacaksın. - Commit stratejisi seçeneklerini (
per_change/batched/manual) çalışma alanına göre seçebileceksin.
Ön koşul: Team plan, GitHub / GitLab / Bitbucket deposu, depoya yazma yetkisi olan OAuth token'ı.
Üç senkronizasyon modu
integrations.git.sync_direction:
| Mod | Yön | Kullanım örneği |
|---|---|---|
pull | Git → Moonborn | Depo kanoniktir. Kod-olarak-persona; PR incelemesi zorunlu. |
push | Moonborn → Git | Arayüz kanoniktir. Git denetim izi / yedek. |
bidirectional | İkisi de | Karma ekipler — arayüz editörleri + depo editörleri, çakışma koruması ile. |
Dosya biçimi
Her persona bir dosyadır:
{base_path}/{persona_id}.yamlVarsayılan base_path: personas/. İçerik YAML başlık + Markdown gövde:
---
id: per_mert_01H...
name: Mert Aksoy
version: 4
soul:
desire: dünyanın görmezden gelemeyeceği bir şey inşa etmek
fear: sıradan görünmek
wound: sevgiyi başarıyla ölçen bir ebeveyn
growth_arc: onay arayan'dan kendine güven'e
self:
bigFive:
openness: 0.78
conscientiousness: 0.71
extraversion: 0.55
agreeableness: 0.42
neuroticism: 0.68
archetype: the rebel
values: [competence, autonomy, honesty]
mask:
voice:
register: intelligent, restless, occasionally sharp
rhythm: short clauses; long pauses imagined
signaturePhrases: ["look —", "the thing is", "fine, let me think out loud"]
surface:
name: Mert Aksoy
age: 34
location: Beyoğlu, Istanbul
occupation: Founder, devtools startup
language: tr
---
# Mert Aksoy — anlatı bağlamı
Mert yirmili yaşlarını İstanbul tech sahnesinde geçirdi. İlk
şirketi bir Türk telekoma satıldı — hâlâ "fena değil" diye
tanımladığı sessiz bir çıkış (exit).YAML başlık dört yapısal katmanı taşır; Markdown gövde anlatı temellendirmesi (serbest biçim, isteğe bağlı).
Çakışma tespiti
Üç yönlü birleştirme (three-way merge) yoktur; son-yazan-kazanır (last-write-wins) yaklaşımını açıkça reddederiz. Senkronizasyon sırasında Moonborn son gördüğümüz Git blob SHA'sını saklar; yeni senkronizasyonda SHA'yı tekrar kontrol eder. Eşleşmezse hangi tarafın kazanacağını sen seçersin.
integrations.git.conflict_strategy:
| Strateji | Davranış |
|---|---|
remote_wins | Pull → yerel değişiklikleri ezer |
local_wins | Push → uzaktaki sürümü ezer |
error | PersonaFileSyncConflictError fırlat — etkilenen persona kimlikleri yükte; senkronizasyon durur |
Commit stratejisi
integrations.git.commit_strategy:
| Strateji | Davranış | Kullanım örneği |
|---|---|---|
per_change | Her persona refine = 1 commit | PR inceleme deseni; commit geçmişi değişiklik başına fark |
batched | Senkronizasyon koşumu başına 1 commit | Periyodik senkronizasyon (saatlik, günlük) |
manual | Taslak toplu yayar; commit operatöre bırakılır | Ekip onay deseni — otomatik commit yerine incele-sonra-commit |
Push'lar için varsayılan per_change — her refine incelenebilir bir commit olur.
Kurulum — adım adım
await client.config.setItem({
key: 'integrations.git.enabled',
value: true,
scope: 'workspace',
});
await client.config.setItem({
key: 'integrations.git.provider',
value: 'github', // 'github' | 'gitlab' | 'bitbucket'
scope: 'workspace',
});
await client.config.setItem({
key: 'integrations.git.repo',
value: 'moonborn-org/personas', // sahip/depo
scope: 'workspace',
});
await client.config.setItem({
key: 'integrations.git.branch',
value: 'main',
scope: 'workspace',
});
await client.config.setItem({
key: 'integrations.git.sync_direction',
value: 'bidirectional',
scope: 'workspace',
});
await client.config.setItem({
key: 'integrations.git.commit_strategy',
value: 'per_change',
scope: 'workspace',
});
await client.config.setItem({
key: 'integrations.git.oauth_token_ref',
value: 'secret://workspace/github-pat',
scope: 'workspace',
});Tetiklemek için: POST /v1/integrations/git/sync (elle) veya integrations.git.cron_schedule yapılandırma maddesi (periyodik).
Desteklenen sağlayıcılar
| Sağlayıcı | Durum | Kimlik doğrulama |
|---|---|---|
| GitHub | canlı | Personal Access Token / GitHub App |
| GitLab | canlı | Personal Access Token / Deploy Token |
| Bitbucket | canlı | App Password / Repository Access Token |
Her sağlayıcı integrations.git.providers.<provider>.* altında bağımsız plan kapısıyla kontrol edilir. Üçü de Team ve üzeri.
Henüz inenler
/v1/integrations/git/*REST yüzeyi (şu an sadece yapılandırma + zamanlanmış görev tetikleme)- Sağlayıcı OAuth akışı için ilk kurulum arayüzü (token şu an elle referans)
- Dış push'ları otomatik tetikleyen
git pushwebhook alıcısı errorstratejisi için çakışma çözümleme arayüzü
Plan gereksinimi
Team ve üzeri.
Dürüst kapsam
İlgili
Git senkronizasyonu kurulumunun uçtan uca anlatımı.
Persona YAML + Markdown'ı yazar odası iş akışına bağlama.
Çalışma alanı dışa aktarımı — Git senkronizasyonundan farklı (salt okunur imzalı arşiv).
persona.created / persona.refined olayları ile senkronizasyon tetikleme.