Voice variant lineage governance
Brand-team workflow for keeping locale + tone variants close to the canonical persona — review queue, distinctiveness gates, audit trail.
When a brand persona forks into many variants (locales, tones, sub- brands), drift is the failure mode. This guide is the governance loop.
1. Pin the canonical
Make the canonical persona the workspace baseline:
await client.config.setItem({
key: 'consistency.distinctiveness.custom_baseline_persona_id',
value: canonical.id,
scope: 'workspace',
});
await client.config.setItem({
key: 'consistency.distinctiveness.min_score',
value: 0.65,
scope: 'workspace',
});Every variant now scores against your brand, not chatgpt-default.
Below 0.65 = drift toward generic.
2. Lock the brand DNA on forks
When a marketer or designer forks, force Soul + Self + Mask lock so only Surface changes:
const variant = await client.personas.fork({
id: canonical.id,
refine: {
mode: 'lock',
lockLayers: ['soul', 'self', 'mask'],
edits: { 'surface.language': 'de' },
},
});3. Review queue via webhooks
Subscribe to persona.audit_failed. Any variant whose audit drops
below threshold post-refine lands in your review queue:
await client.webhooks.createWebhook({
url: 'https://your-app.com/brand/qa',
events: ['persona.audit_failed'],
});4. Diff trail
Every refine is a version in the lineage tree. Diff in the product UI, or pair with Git sync for pull-request review.
5. Sunset stale variants
A variant abandoned for > 90 days should be archived, not deleted:
await client.personas.archive({ id: variant.id });Archive preserves lineage; downstream forks (if any) keep working.
Honest scope
Governance is a workflow; Moonborn provides the substrate (lineage graph, distinctiveness gates, webhooks). The actual review loop — who approves what, on what cadence — lives in your team's runbook.