diff --git a/docs/config.md b/docs/config.md index c457b65..833e2ba 100644 --- a/docs/config.md +++ b/docs/config.md @@ -375,6 +375,17 @@ selected target declares them: | **combat_turns** | Required normalized combat-turn artifact for enemy-event extraction. | | **npc_interactions** | Required normalized NPC-interaction artifact for enemy-event extraction. | +Enemy-event artifact slots have the following exact binding contract. Durable +event semantics and wire shape remain in the +[enemy-event artifact contract](integrations/dnd-enemy-event-artifacts.md). + +| Slot | Accepted artifact kind | Media type | Maximum size | Required stage | +| --- | --- | --- | --- | --- | +| `npcs` | `dnd/npc-list` | `application/json` | 1,048,576 bytes | extract and normalize | +| `scene_descriptions` | `dnd/scene-description-list` | `application/json` | 1,048,576 bytes | extract only | +| `combat_turns` | `dnd/combat-turn-list` | `application/json` | 1,048,576 bytes | extract only | +| `npc_interactions` | `dnd/npc-interaction-list` | `application/json` | 1,048,576 bytes | extract only | + Scene descriptions accept **party**, **players**, and **glossary**, but not **roster**. NPC interactions require **npcs** for both extraction and normalization. Combat turns require **scene_descriptions** for extraction; the @@ -398,7 +409,7 @@ The D&D artifact contracts define each emitted schema: [NPCs](integrations/dnd-npc-artifacts.md), [NPC interactions](integrations/dnd-npc-interaction-artifacts.md), [combat turns](integrations/dnd-combat-turn-artifacts.md), -[item events](integrations/dnd-item-event-artifacts.md), and +[item events](integrations/dnd-item-event-artifacts.md), [scene descriptions](integrations/dnd-scene-description-artifacts.md), and [enemy events](integrations/dnd-enemy-event-artifacts.md). @@ -415,7 +426,7 @@ Available validator keys are: | Item events | **extract/dnd/item-events/shape**, **extract/dnd/item-events/source_refs**, **extract/dnd/item-events/source_relatedness**, **normalize/dnd/item-events/invariants** | | NPC interactions | **extract/dnd/npc-interactions/shape**, **extract/dnd/npc-interactions/registry**, **extract/dnd/npc-interactions/source_refs**, **extract/dnd/npc-interactions/source_relatedness**, **normalize/dnd/npc-interactions/invariants** | | Scene descriptions | **extract/dnd/scene-descriptions/shape**, **extract/dnd/scene-descriptions/source_refs**, **extract/dnd/scene-descriptions/source_relatedness**, **normalize/dnd/scene-descriptions/invariants** | -| Enemy events | **extract/dnd/enemy-events/shape**, **extract/dnd/enemy-events/source_refs**, **extract/dnd/enemy-events/source_relatedness**, **normalize/dnd/enemy-events/invariants** | +| Enemy events | **extract/dnd/enemy-events/shape**, **extract/dnd/enemy-events/engagements**, **extract/dnd/enemy-events/source_refs**, **extract/dnd/enemy-events/source_relatedness**, **normalize/dnd/enemy-events/invariants** | When no override is configured, production D&D bindings use the following ordered chains. Each row lists extract then normalize; spell chains are the @@ -429,7 +440,7 @@ same at both stages. | Item events | generic/valid_json, extract/dnd/item-events/shape, extract/dnd/item-events/source_refs, generic/valid_json_schema, extract/dnd/item-events/source_relatedness | generic/valid_json, extract/dnd/item-events/shape, normalize/dnd/item-events/invariants, extract/dnd/item-events/source_refs, generic/valid_json_schema, extract/dnd/item-events/source_relatedness | | NPC interactions | generic/valid_json, extract/dnd/npc-interactions/shape, extract/dnd/npc-interactions/registry, extract/dnd/npc-interactions/source_refs, generic/valid_json_schema, extract/dnd/npc-interactions/source_relatedness | generic/valid_json, extract/dnd/npc-interactions/shape, extract/dnd/npc-interactions/registry, normalize/dnd/npc-interactions/invariants, extract/dnd/npc-interactions/source_refs, generic/valid_json_schema, extract/dnd/npc-interactions/source_relatedness | | Scene descriptions | generic/valid_json, extract/dnd/scene-descriptions/shape, extract/dnd/scene-descriptions/source_refs, generic/valid_json_schema, extract/dnd/scene-descriptions/source_relatedness | generic/valid_json, extract/dnd/scene-descriptions/shape, normalize/dnd/scene-descriptions/invariants, extract/dnd/scene-descriptions/source_refs, generic/valid_json_schema, extract/dnd/scene-descriptions/source_relatedness | -| Enemy events | generic/valid_json, extract/dnd/enemy-events/shape, extract/dnd/enemy-events/source_refs, generic/valid_json_schema, extract/dnd/enemy-events/source_relatedness | generic/valid_json, extract/dnd/enemy-events/shape, normalize/dnd/enemy-events/invariants, extract/dnd/enemy-events/source_refs, generic/valid_json_schema, extract/dnd/enemy-events/source_relatedness | +| Enemy events | generic/valid_json, extract/dnd/enemy-events/shape, extract/dnd/enemy-events/engagements, extract/dnd/enemy-events/source_refs, generic/valid_json_schema, extract/dnd/enemy-events/source_relatedness | generic/valid_json, extract/dnd/enemy-events/shape, normalize/dnd/enemy-events/invariants, extract/dnd/enemy-events/source_refs, generic/valid_json_schema, extract/dnd/enemy-events/source_relatedness | Chains are only registered for the D&D extract and normalize modules shown above; select an explicit override when a different compatible chain is diff --git a/docs/integrations/dnd-enemy-event-artifacts.md b/docs/integrations/dnd-enemy-event-artifacts.md index 444751f..969a894 100644 --- a/docs/integrations/dnd-enemy-event-artifacts.md +++ b/docs/integrations/dnd-enemy-event-artifacts.md @@ -86,10 +86,11 @@ orcs`; the artifact never invents synthetic member identities or quantities. Party members, allies, neutral observers, mentioned-but-absent enemies, hazards, traps, and environmental effects are excluded. -Normalization trims subject whitespace, canonicalizes recognized registry -names, canonicalizes and deduplicates exact source ranges, then orders events -by valid evidence chronology, normalized subject identity, display name, kind, -and reference sequence. The deterministic kind tie order is `engaged`, +Normalization collapses surrounding and repeated internal whitespace in subject +display values, canonicalizes recognized registry names, canonicalizes and +deduplicates exact source ranges, then orders events by valid evidence +chronology, normalized subject identity, display name, kind, and reference +sequence. The deterministic kind tie order is `engaged`, `incapacitated`, `captured`, `fled`, then `killed`. Only entries with the same normalized name, kind, and complete canonical evidence sequence are collapsed. Different kinds, evidence, repeated engagement in separate scenes, and later diff --git a/docs/integrations/json-output.md b/docs/integrations/json-output.md index 47d3db8..627f698 100644 --- a/docs/integrations/json-output.md +++ b/docs/integrations/json-output.md @@ -74,7 +74,7 @@ than infer a lane schema from its name. The current D&D payload contracts are [spells](dnd-spell-artifacts.md), [NPCs](dnd-npc-artifacts.md), [NPC interactions](dnd-npc-interaction-artifacts.md), [combat turns](dnd-combat-turn-artifacts.md), -[item events](dnd-item-event-artifacts.md), and +[item events](dnd-item-event-artifacts.md), [scene descriptions](dnd-scene-description-artifacts.md), and [enemy events](dnd-enemy-event-artifacts.md). diff --git a/docs/internal/dnd.md b/docs/internal/dnd.md index e286f94..896c487 100644 --- a/docs/internal/dnd.md +++ b/docs/internal/dnd.md @@ -102,6 +102,11 @@ relatedness validators report advisory evidence concerns. The configured order is documented in [Configuration](../config.md#production-validator-keys-and-default-chains). +Enemy-event extraction additionally rejects a second `engaged` observation for +the same comparison identity within one scene-scoped result. Normalization may +combine results from distinct scenes, so it intentionally does not apply that +rule. Configuration owns the exact validator key and chain position. + Normalizers are deterministic for spells, combat turns, item events, NPC interactions, scene descriptions, and enemy events. They canonicalize display values and evidence, use source-document order for stable output, and issue