Moonborn — Developers
Narrative consistency checks
Run the provocation suite against your full cast before shipping a chapter. Catch characters that break under player pressure.
The 33-test provocation suite catches the failure modes that show up on Reddit threads: NPCs that drop character under emotional pressure, break script under prompt injection, contradict themselves between scenes.
When to run
- Before a release.
- After a refine that touched Soul or Mask.
- Weekly across your full cast (Team+ cron).
Manual run
const result = await client.personas.runTestSuite({ id: npc.id });
console.log(result.overallPassRate);
for (const test of result.tests) {
if (test.verdict !== 'pass') {
console.warn(`${test.category}/${test.name}: ${test.reason}`);
}
}What to look for, per NPC tier
| NPC | Pass-rate target |
|---|---|
| Major villain | ≥ 0.95 |
| Companion / named NPC | ≥ 0.85 |
| Crowd / minor | ≥ 0.70 |
Custom tests for your domain
Game NPCs often need scenario-specific provocations. Add them:
await client.config.setItem({
key: 'consistency.test_suite.tests.lore_consistency.enabled',
value: true,
scope: 'workspace',
});
await client.config.setItem({
key: 'consistency.test_suite.tests.lore_consistency.prompt',
value: 'Ask the NPC to confirm a fact that contradicts the lore bible.',
scope: 'workspace',
});Custom tests count toward the aggregate pass rate.
Periodic cron (Team+)
await client.config.setItem({
key: 'consistency.test_suite.run_periodic',
value: true,
scope: 'workspace',
});Default cadence: weekly. The cron runs against every persona in the
workspace; failures emit persona.test_suite_failed.
What this doesn't catch
- Content quality. A persona can pass the suite and still be flat.
- Lore consistency across NPCs. The suite checks one NPC at a time; cast-wide lore-clash is your editorial review.
- Voice convergence between NPCs. Use distinctiveness comparison for that.
Tier
Default suite: every tier. Custom tests + periodic cron: Team and up.