Add feature roadmap and implementation plan for D&D spell normalization module

This commit is contained in:
2026-07-20 15:31:57 -05:00
parent d2eb763b9b
commit 2c98763b9b
2 changed files with 447 additions and 0 deletions

View File

@@ -2,9 +2,14 @@
## Status
<<<<<<< HEAD
Proposed as the next D&D pipeline milestone. This feature completes the first
domain-specific normalize stage for the spell pipeline before work begins on
NPC and combat-turn artifacts.
=======
Accepted target state. Implementation details are maintained separately in
`docs/roadmap/implementation.md`.
>>>>>>> 6fbdf6b (Add feature roadmap and implementation plan for D&D spell normalization module)
## Objective
@@ -13,8 +18,13 @@ that emits canonical catalog names, removes only clearly identical duplicate
casts, preserves source provenance, and makes every mutation visible through
scoped warnings.
<<<<<<< HEAD
The milestone should improve the consistency of durable spell output without
adding another LLM call or introducing fuzzy repair policy.
=======
The normalizer improves the consistency of durable spell output without adding
another LLM call or introducing fuzzy repair policy.
>>>>>>> 6fbdf6b (Add feature roadmap and implementation plan for D&D spell normalization module)
## Target Behavior
@@ -33,14 +43,24 @@ depend on extractor-private state.
The normalizer contributes its effective catalog digest through
`pipeline.CheckpointFingerprintProvider`. Changing the embedded catalog,
composition policy, or normalize-stage overlay therefore invalidates reusable
<<<<<<< HEAD
normalize checkpoints.
=======
normalize checkpoints. It also records catalog base ID, digest, and overlay IDs
as manifest metadata. Neither identity surface includes catalog contents or
reference paths.
>>>>>>> 6fbdf6b (Add feature roadmap and implementation plan for D&D spell normalization module)
### Canonical spell names
For every spell cast, look up the extracted name using the effective catalog's
existing case, whitespace, apostrophe, and alias rules. Replace a recognized
value with its canonical display name. This is the only spell-name repair in
<<<<<<< HEAD
the initial feature.
=======
this feature.
>>>>>>> 6fbdf6b (Add feature roadmap and implementation plan for D&D spell normalization module)
Do not use edit distance, phonetic matching, model judgment, or another fuzzy
heuristic. If a value does not resolve, retain it unchanged and emit a scoped
@@ -49,7 +69,12 @@ acceptance or rejection.
Emit a warning for each changed spell name. Diagnostics should identify the
artifact index and the original and canonical values without modifying other
<<<<<<< HEAD
fields.
=======
fields. Diagnostics are deterministic and bounded: user-controlled spell names
are truncated to 128 Unicode code points before display.
>>>>>>> 6fbdf6b (Add feature roadmap and implementation plan for D&D spell normalization module)
### Source-reference normalization
@@ -59,7 +84,12 @@ overlapping ranges, because doing so could broaden the evidence attributed to
an event.
The normalizer must not synthesize source references, alter source-unit
<<<<<<< HEAD
boundaries, or use auxiliary references as evidence.
=======
boundaries, or use auxiliary references as evidence. Reordering references or
removing exact duplicates emits a scoped warning for the affected input cast.
>>>>>>> 6fbdf6b (Add feature roadmap and implementation plan for D&D spell normalization module)
### Conservative duplicate collapse
@@ -68,7 +98,12 @@ event only when all of the following match:
- canonical spell name;
- caster after case folding and whitespace normalization; and
<<<<<<< HEAD
- the complete canonical source-reference set.
=======
- the complete canonical source-reference set, which must be non-empty and
valid against the source document.
>>>>>>> 6fbdf6b (Add feature roadmap and implementation plan for D&D spell normalization module)
Collapse each such group into its first occurrence, preserving stable pipeline
order. Retain the first cast's caster, effect, and narrative description. Do
@@ -81,6 +116,14 @@ the removed indices. Casts with different evidence remain distinct even when
their spell and caster match. In particular, adjacency at a chunk or scene
boundary is not sufficient evidence of duplication.
<<<<<<< HEAD
=======
Unknown spell names, empty evidence sets, and invalid source references cannot
establish duplicate identity. They remain in the artifact for the configured
normalize validators to accept or reject. A duplicate warning displays at most
20 removed input indices and reports the exact omitted count.
>>>>>>> 6fbdf6b (Add feature roadmap and implementation plan for D&D spell normalization module)
### Production composition and validation
Register the typed spell normalizer in the D&D family and make it the default
@@ -102,9 +145,17 @@ without a catalog reference.
- Unknown names are never guessed, deleted, or silently changed.
- Source references are deterministically sorted and exactly deduplicated.
- Only casts with matching canonical spell, normalized caster, and identical
<<<<<<< HEAD
evidence sets collapse; near or adjacent events remain separate.
- Normalization preserves the first cast's non-name fields and stable order.
- Every name change and duplicate collapse emits a scoped warning.
=======
non-empty valid evidence sets collapse; near, invalid, unknown, or adjacent
events remain separate.
- Normalization preserves the first cast's non-name fields and stable order.
- Every name change, unresolved name, source-reference mutation, and duplicate
collapse emits a scoped warning.
>>>>>>> 6fbdf6b (Add feature roadmap and implementation plan for D&D spell normalization module)
- Extract, normalize, and catalog-validation catalog identities agree for the
same bound references, and catalog changes invalidate normalize checkpoints.
- The maintained production pipeline and current-behavior documentation use
@@ -119,7 +170,11 @@ claim that LLM extraction is deterministically correct.
Record cases where likely duplicates remain because their evidence differs.
Those examples should inform later LLM-assisted deduplication work rather than
<<<<<<< HEAD
causing this deterministic milestone to adopt broader heuristics.
=======
causing this deterministic feature to adopt broader heuristics.
>>>>>>> 6fbdf6b (Add feature roadmap and implementation plan for D&D spell normalization module)
## Deferred Work
@@ -131,6 +186,10 @@ causing this deterministic milestone to adopt broader heuristics.
- Repair-aware extraction retries or LLM-backed semantic validation.
- Changes to the spell artifact schema, including stable cast IDs.
<<<<<<< HEAD
An LLM-backed normalizer is explicitly outside this milestone. If later
=======
An LLM-backed normalizer is explicitly outside this feature. If later
>>>>>>> 6fbdf6b (Add feature roadmap and implementation plan for D&D spell normalization module)
evaluation justifies one, shared spell-catalog prompt material should be
designed at that time around the actual normalization or repair request.