3.2 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.
When evidence supports a semantically duplicate group, the canonical display name is one of that group's supplied candidates. A complete, stable proper name is preferred over an abbreviation. An unadorned proper name is preferred over the same name plus a contextual class, role, title, or relationship descriptor unless the transcript establishes that descriptor as part of the person's name. A longer candidate is not preferred solely because it includes such a descriptor.
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.