Files
notarius/docs/integrations/dnd-npc-artifacts.md

2.8 KiB

D&D NPC Artifact

This contract defines the durable NPC registry produced by dnd/npcs. It is a minimal, source-grounded identity registry for other D&D artifacts, not a character sheet or a relationship summary.

Identity and compatibility

Property Value
Artifact kind dnd/npc-list
Schema ID notarius.dnd.npcs
Schema name notarius_dnd_npcs_v1
Schema version v1
Media type application/json
Identity policy dnd.npcs.identity.v1

v1 accepts one strict JSON object with required npcs; the array may be empty. NPC and source-reference objects reject unknown fields. An incompatible artifact shape or identity-policy change uses a new version or policy.

Wire shape and identity

Each NPC has these required fields:

Field Contract
id npc:sha256: followed by 64 lowercase hexadecimal characters.
name Non-empty canonical display name.
source_refs One or more transcript evidence ranges for the identity.

A source reference has exactly source_id, start_unit_id, and end_unit_id. The source ID identifies the transcript, unit IDs are positive inclusive unit identifiers, and the start may not follow the end.

{
  "npcs": [
    {
      "id": "npc:sha256:99a16589618a04f535a7d21fdcc71a0b1c05d22f752cd492065b1086d97bc3d7",
      "name": "Mira Thorn",
      "source_refs": [
        {"source_id": "session-7", "start_unit_id": 4, "end_unit_id": 5}
      ]
    }
  ]
}

The ID is deterministic: normalize the name to Unicode NFKC, normalize the supported apostrophe forms, collapse whitespace, case-fold it, SHA-256 the result, then prefix the lowercase hexadecimal digest with npc:sha256:. Each canonical identity and ID appears at most once. Normalization collapses records with the same canonical identity, retains their earliest position, and merges their canonicalized evidence; it does not add aliases, roles, descriptions, or relationship fields.

Scope and consumers

Only individually identifiable NPC names with transcript evidence belong in this artifact. Groups, generic roles, invented labels, and descriptive enrichment are excluded. Its source references prove registry provenance; they do not become evidence for a spell, interaction, combat, or enemy-event occurrence.

This registry can ground actor or caster names in the spell and combat-turn artifacts. It is required to resolve the canonical name in an NPC interaction. The enemy-event artifact also uses it only for subject grounding and canonical display names. The JSON output contract defines publication, and D&D module internals owns pipeline mechanics.