App öffnen
Moonborn — Developers

Persona-as-code (Git-Sync)

Verbinde ein Git-Repository mit deinem Workspace; pull, push oder synchronisiere Personas bidirektional als YAML + Markdown mit Last-Write-Wins-Konflikterkennung.

Persona-as-code schließt den Loop zwischen Moonborns Produktoberfläche und deinem Engineering-Workflow: Personas leben in Git, jede Änderung zeigt sich als Diff in einem Pull Request, und der Workspace bleibt synchron.

Preview-Status. Die Domain- und Application-Schichten sind implementiert (@moonborn/integration-git versendet PullPersonasFromGitUseCase + PushPersonasToGitUseCase); die HTTP-API und die Produkt-Onboarding-UI landen im nächsten Release. Bis dahin geht dieses Tutorial die Konfigurations-Form durch — Early-Access-Kunden können es per direkter Integration verdrahten.

1. Einen Sync-Modus wählen

integrations.git.sync_direction steuert den Fluss:

  • pull — Git ist die kanonische Quelle. Workspace spiegelt das Repo.
  • push — Moonborn-UI ist kanonisch; Git ist die Audit-Spur.
  • bidirectional — beides, mit Konflikt-Resolution.

Die meisten Teams starten den ersten Monat mit push — lass die Produkt-UI die Personas generieren, beobachte die Diffs in Git, dann wechsle zu bidirectional, sobald das Team Personas an beiden Orten editiert.

2. Die Verbindung konfigurieren

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_...',
});

Unterstützte Provider: github, gitlab, bitbucket. Jeder ist unabhängig tier-gated unter integrations.git.providers.* (alle Team+).

3. Datei-Layout

Jede Persona wird zu einer einzelnen Datei unter dem konfigurierten Base-Path:

---
id: persona_01H...
name: Mert Aksoy
version: 4
layer: Soul
desire: etwas bauen, was die Welt nicht ignorieren kann
fear: als gewöhnlich gesehen werden
wound: ein Elternteil, der Liebe in Leistung gemessen hat
growth_arc: vom Anerkennungssucher zum Selbstvertrauer
---
 
Mert verbrachte seine Zwanziger in der Istanbuler Tech-Szene. Seine
erste Firma verkaufte an einen türkischen Telco — ein leiser Exit,
den er immer noch als "okay" beschreibt.

YAML-Frontmatter trägt die strukturierten Layer (Soul, Self, Mask, Surface); der Markdown-Body ist die narrative Erdung. Der Serializer emittiert genau diese Form beim Push; der Parser liest sie beim Pull zurück.

4. Den ersten Sync triggern

In der Preview-Phase werden Sync-Läufe über die Application-Schicht getriggert:

// (Preview — nur direkte Integration; HTTP-Endpoint kommt)
import { PushPersonasToGitUseCase } from '@moonborn/integration-git/application';
await runPush({ workspaceId: 'ws_...' });

In Produktion wird daraus:

# (geplant)
curl -X POST https://api.moonborn.co/v1/integrations/git/push \
  -H "Authorization: Bearer $MOONBORN_API_KEY"

5. Konflikt-Resolution

Bidirektionale Syncs nutzen Last-Write-Wins mit expliziter Ablehnung. Die Strategie wird durch integrations.git.conflict_resolution gesetzt:

  • remote_wins — Pulls überschreiben lokale Änderungen bei Konflikt.
  • local_wins — Pushes überschreiben Remote-Änderungen bei Konflikt.
  • error — Konflikt sichtbar machen, Sync anhalten, PersonaFileSyncConflictError mit den betroffenen Persona-IDs zurückgeben.

Konflikte werden per Git-Blob-SHA-Mismatch erkannt — kein Three-Way- Merge, kein CRDT.

6. Audit + Commit-Messages

Commit-Messages folgen engine.pipeline.audit.commit_message_template (Standard feat(persona): {{name}} v{{version}}). Jede Persona-Änderung produziert einen Commit (mit integrations.git.commit_strategy = per_change) oder wird zu einem Commit pro Sync-Lauf gebatched (mit batched).

Die Git-History wird zum de facto Changelog. Das Moonborn-Audit-Log zeichnet die Sync-Operationen selbst auf, nicht die Persona-Deltas.

Tarif

Team und höher. Jeder Provider-Toggle unabhängig.

Weiter