Part of #270
For each detected conflict: generate a narrative description that accounts for both influences and produces a coherent canonical resolution. Output: (resolved_state, narrative_description) pairs.
Acceptance Criteria
- NarrativeArbitrator.resolve(conflict_record, world_context) → (resolved_state, narrative_text)
- Prompt includes: both conflicting states, entity history, world rules
- LLM output parsed into structured resolved_state dict + narrative paragraph
- Batch processing for multiple conflicts in single LLM call where possible
- Unit tests with mocked LLM; narrative quality reviewed manually
Part of #270
For each detected conflict: generate a narrative description that accounts for both influences and produces a coherent canonical resolution. Output: (resolved_state, narrative_description) pairs.
Acceptance Criteria