Persona-as-code (Git sync)
Workspace'ine bir Git repository bağla; personaları YAML + markdown olarak pull, push ya da çift yönlü senkronize et, last-write-wins çakışma tespitiyle.
Persona-as-code Moonborn'un ürün yüzeyi ile mühendislik iş akışın arasındaki döngüyü kapatır: personalar Git'te yaşar, her değişiklik bir pull request'te diff olarak görünür ve workspace senkron kalır.
Preview durumu. Domain ve application katmanları implement edildi (
@moonborn/integration-gitPullPersonasFromGitUseCase+PushPersonasToGitUseCasegönderir); HTTP API ve ürün onboarding UI'ı sonraki release'de iniyor. O zamana kadar bu tutorial konfigürasyon şeklini gösterir — early-access müşterileri doğrudan entegrasyon üzerinden bağlayabilir.
1. Bir sync mode seç
integrations.git.sync_direction akışı kontrol eder:
pull— Git kanonik kaynak. Workspace repo'yu mirror'lar.push— Moonborn UI kanonik; Git audit trail.bidirectional— ikisi de, çakışma çözümlemeyle.
Çoğu ekip ilk ay push ile başlar — ürün UI'ı personaları üretsin,
diff'lerin Git'e indiğini izle, sonra ekip personaları iki yerde
düzenlemeye başladığında bidirectional'a geç.
2. Bağlantıyı konfigüre et
await client.config.setItem({
key: 'integrations.git.provider',
value: 'github',
scope: 'workspace',
scopeId: 'ws_...',
});
await client.config.setItem({
key: 'integrations.git.repo_url',
value: 'https://github.com/your-org/persona-bible',
scope: 'workspace',
scopeId: 'ws_...',
});
await client.config.setItem({
key: 'integrations.git.base_path',
value: 'personas/',
scope: 'workspace',
scopeId: 'ws_...',
});
await client.config.setItem({
key: 'integrations.git.sync_direction',
value: 'push',
scope: 'workspace',
scopeId: 'ws_...',
});Desteklenen sağlayıcılar: github, gitlab, bitbucket. Her biri
integrations.git.providers.* altında bağımsız tier-gated (hepsi
Team+).
3. Dosya düzeni
Her persona konfigüre edilmiş base path altında tek dosya olur:
---
id: persona_01H...
name: Mert Aksoy
version: 4
layer: 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
---
Mert yirmili yaşlarını İstanbul tech sahnesinde geçirdi. İlk şirketi
bir Türk telkoya satıldı — hâlâ "fena değil" diye tanımladığı
sessiz bir exit.YAML frontmatter yapılı katmanları taşır (Soul, Self, Mask, Surface); markdown gövdesi anlatı temellendirmesi. Serializer push'ta bu kesin şekli yayar; parser pull'da geri okur.
4. İlk sync'i tetikle
Preview aşamasında, sync run'lar application katmanı üzerinden tetiklenir:
// (preview — sadece doğrudan entegrasyon; HTTP endpoint geliyor)
import { PushPersonasToGitUseCase } from '@moonborn/integration-git/application';
await runPush({ workspaceId: 'ws_...' });Production'da, bu şuna döner:
# (planlı)
curl -X POST https://api.moonborn.co/v1/integrations/git/push \
-H "Authorization: Bearer $MOONBORN_API_KEY"5. Çakışma çözümleme
Bidirectional sync'ler last-write-wins'i açık reddetmeyle kullanır.
Strateji integrations.git.conflict_resolution ile belirlenir:
remote_wins— pull'lar çakışmada local değişiklikleri ezer.local_wins— push'lar çakışmada remote değişiklikleri ezer.error— çakışmayı yüzeye çıkar, sync'i durdur, etkilenen persona ID'leriylePersonaFileSyncConflictErrordöndür.
Çakışmalar Git blob SHA mismatch'iyle tespit edilir — three-way merge yok, CRDT yok.
6. Audit + commit mesajları
Commit mesajları engine.pipeline.audit.commit_message_template'i
takip eder (default feat(persona): {{name}} v{{version}}). Her
persona değişikliği bir commit üretir (integrations.git.commit_strategy = per_change ile) ya da sync run başına bir commit'e batch'lenir
(batched ile).
Git history de facto change log olur. Moonborn audit log'u persona delta'larını değil, sync operasyonlarının kendilerini kaydeder.
Tarif
Team ve üstü. Her sağlayıcı toggle'ı bağımsız.
Sonraki
- Use case: Persona-as-code use case.
- Sağlayıcı detayları: Git sync integration.
- Integrations API reference.