Audit NPC item and location registries
This commit is contained in:
@@ -20,8 +20,9 @@ change only roadmap audit documents do not change that production target.
|
||||
|
||||
Pending final synthesis. The initial baseline is healthy. The architecture,
|
||||
configuration/CLI, pipeline composition, reference/handoff, runtime, state,
|
||||
LLM, generic/Seriatim, and shared D&D reviews have found three High findings,
|
||||
four Medium findings, and sixteen Low findings, with no production dependency
|
||||
LLM, generic/Seriatim, shared D&D, and registry-family reviews have found three
|
||||
High findings, four Medium findings, and twenty Low findings, with no
|
||||
production dependency
|
||||
inversion, unbounded framework worker pool, completion-order-dependent result
|
||||
assembly, debug-to-cache coupling, model-visible credential material in the
|
||||
embedded LLM assets, or domain leakage across the Seriatim and generic module
|
||||
@@ -56,6 +57,10 @@ Final cross-area ordering is pending synthesis.
|
||||
| MOD-002 | Low | Efficiency | Reuse compiled response schemas within a prepared validator |
|
||||
| MOD-003 | Low | Simplicity | Remove unreachable JSON metadata clone helpers |
|
||||
| DND-CORE-001 | Low | Simplicity | Remove the unused lossy unit-reference constructor |
|
||||
| DND-REG-001 | Low | Correctness | Reject reversed evidence ranges at the registry codec boundary |
|
||||
| DND-REG-002 | Low | Correctness | Keep NPC extraction evidence inside the current chunk |
|
||||
| DND-REG-003 | Low | Efficiency | Index item and location duplicate groups |
|
||||
| DND-REG-004 | Low | Efficiency | Select location identity anchors without sorting |
|
||||
|
||||
## Findings
|
||||
|
||||
@@ -849,6 +854,147 @@ Final cross-area ordering is pending synthesis.
|
||||
`go test ./internal/modules/dnd/shared/...`.
|
||||
- **Grouping:** Independent.
|
||||
|
||||
### NPC, Item, And Location Registries
|
||||
|
||||
### DND-REG-001 — Reject reversed evidence ranges at the registry codec boundary
|
||||
|
||||
- **Severity:** Low
|
||||
- **Category:** Correctness
|
||||
- **Evidence:** All three registry integration contracts require that a source
|
||||
range's start not follow its end
|
||||
(`docs/integrations/dnd-npc-registry-artifacts.md:32`–`34`,
|
||||
`dnd-item-registry-artifacts.md:33`–`35`, and
|
||||
`dnd-location-registry-artifacts.md:34`–`36`). The three durable codec
|
||||
validators check only that both endpoints are positive
|
||||
(`internal/modules/dnd/codec/npcregistry/codec.go:96`–`106`,
|
||||
`codec/itemregistry/codec.go:97`–`107`, and
|
||||
`codec/locationregistry/codec.go:97`–`107`). Direct registry references are
|
||||
decoded and identity-checked by `npcs/registry.loadRegistry`,
|
||||
`items/registry.loadRegistry`, and `locations/registry.loadRegistry`, but do
|
||||
not pass through the generated-output source-reference validators. A durable
|
||||
artifact with `{start_unit_id: 2, end_unit_id: 1}` and otherwise valid
|
||||
identity is therefore accepted; for locations, `validIdentityReference` at
|
||||
`internal/modules/dnd/locations/identity/identity.go:170`–`171` also treats
|
||||
that reversed range as a valid identity anchor.
|
||||
- **Impact:** An externally supplied registry can be accepted as approved even
|
||||
though its evidence cannot denote the documented forward source interval.
|
||||
NPC and item prompt projections then hide the malformed provenance, while a
|
||||
location can derive and retain a durable ID from it; only later consumers
|
||||
that happen to construct contextual grounding against the same source may
|
||||
reject it. Generated pipeline outputs remain protected by their source-
|
||||
reference validator chains, which limits current exposure.
|
||||
- **Recommendation:** Add the order-independent structural condition
|
||||
`start_unit_id <= end_unit_id` to each registry codec's durable validation,
|
||||
and make location identity reject reversed anchors as a defense in depth.
|
||||
Keep document membership and current-chunk coverage in the existing
|
||||
validators, where the source document is available.
|
||||
- **Preserve:** Retain positive exact source-unit identifiers, strict unknown-
|
||||
field/trailing-value rejection, location identity's earliest canonical
|
||||
anchor policy, and the separation between source-independent durable shape
|
||||
validation and source-dependent evidence validation.
|
||||
- **Validation:** Add codec encode/decode cases for reversed ranges in all three
|
||||
registry families, a location identity case that refuses a reversed-only
|
||||
anchor, and direct registry resolver cases proving malformed referenced JSON
|
||||
is rejected; run the three codec, identity, and registry package suites.
|
||||
- **Grouping:** Independent.
|
||||
|
||||
### DND-REG-002 — Keep NPC extraction evidence inside the current chunk
|
||||
|
||||
- **Severity:** Low
|
||||
- **Category:** Correctness
|
||||
- **Evidence:** The NPC, item, and location extractors receive only the current
|
||||
chunk and all three default extract chains run their family source-reference
|
||||
validator. Item and location validators require a non-nil extraction chunk
|
||||
and reject references whose endpoints are not in it
|
||||
(`internal/modules/dnd/validate/itemregistry/source_refs/validator.go:37`–`55`
|
||||
and `validate/locationregistry/source_refs/validator.go:37`–`55`). The NPC
|
||||
validator at `validate/npcregistry/source_refs/validator.go:36`–`53` checks
|
||||
only that a reference is valid somewhere in the complete source document; it
|
||||
neither requires `req.Chunk` during extraction nor checks chunk membership.
|
||||
Its focused tests include reversed, foreign, and out-of-document ranges but
|
||||
no off-chunk range or missing-chunk case.
|
||||
- **Impact:** If an NPC extraction response supplies a valid unit ID from
|
||||
another chunk, the candidate can pass evidence validation despite the model
|
||||
never receiving that passage. A name that also appears at the off-chunk range
|
||||
can pass advisory relatedness without proving the current candidate, causing
|
||||
duplicated or misattributed registry provenance across chunk results. The
|
||||
model usually copies visible unit IDs, which limits the likelihood.
|
||||
- **Recommendation:** Match the item/location extraction contract: require the
|
||||
current chunk when `req.Stage` is extract and reject NPC references outside
|
||||
that chunk. Keep whole-document validation for normalize and other non-
|
||||
extraction validation calls.
|
||||
- **Preserve:** Retain full-document source-ID/range validation, shape deferral,
|
||||
bounded aggregate diagnostics, normalization without a chunk, direct factual
|
||||
third-party mentions, and source-relatedness as an advisory check rather than
|
||||
an identity gate.
|
||||
- **Validation:** Add NPC source-reference cases for an existing off-chunk
|
||||
range, a missing extraction chunk, an accepted in-chunk range, and normalize-
|
||||
stage validation without a chunk; run the NPC registry validator, extractor,
|
||||
and assembled pipeline tests.
|
||||
- **Grouping:** Independent.
|
||||
|
||||
### DND-REG-003 — Index item and location duplicate groups
|
||||
|
||||
- **Severity:** Low
|
||||
- **Category:** Efficiency
|
||||
- **Evidence:** NPC preprocessing indexes normalized comparison names in a map,
|
||||
but `comparisonNameGroups` in
|
||||
`internal/modules/dnd/normalize/itemregistry/normalizer.go:242`–`259` scans
|
||||
every previously formed group for each item and recomputes the first member's
|
||||
comparison key. `exactDuplicateGroups` in
|
||||
`normalize/locationregistry/normalizer.go:229`–`246` repeats that nested scan
|
||||
and performs `reflect.DeepEqual` over canonical source-reference slices for
|
||||
each candidate group. With distinct records, both paths are quadratic before
|
||||
any LLM reconciliation request is built.
|
||||
- **Impact:** Large merged registries spend avoidable deterministic CPU in
|
||||
normalization, with the location cost also proportional to citation-list
|
||||
comparisons. Normal registry sizes and the later LLM request dominate today,
|
||||
so the issue is low severity.
|
||||
- **Recommendation:** Preserve first-seen group order while maintaining a local
|
||||
index from the complete duplicate identity to its group position. Use the
|
||||
existing comparison key for items and an exact, collision-safe key over the
|
||||
comparison name plus canonical source-reference sequence for locations;
|
||||
verify equality on any hash collision rather than using lossy concatenation.
|
||||
- **Preserve:** Item duplicates remain name-identity duplicates regardless of
|
||||
evidence; locations collapse only equal comparison names with exactly equal
|
||||
canonical evidence; group/member order, input-index provenance, warning
|
||||
scopes, and later proposal-only semantic reconciliation remain unchanged.
|
||||
- **Validation:** Add many-distinct and repeated-key cases that compare output
|
||||
groups and warning order with current fixtures, plus a focused benchmark or
|
||||
comparison-count hook demonstrating linear expected grouping work; run the
|
||||
item and location normalizer tests.
|
||||
- **Grouping:** Independent.
|
||||
|
||||
### DND-REG-004 — Select location identity anchors without sorting
|
||||
|
||||
- **Severity:** Low
|
||||
- **Category:** Efficiency
|
||||
- **Evidence:** Location identity depends only on the least valid source
|
||||
reference. `earliestReference` nevertheless calls `canonicalReferences`,
|
||||
which allocates a full copy, sorts it, and deduplicates it
|
||||
(`internal/modules/dnd/locations/identity/identity.go:137`–`167`).
|
||||
`ValidateRegistry` calls `earliestReference` once to check evidence and then
|
||||
calls `DeriveID`, which invokes it again for every syntactically valid record
|
||||
(lines 106–121). Normalization has already canonicalized each location's
|
||||
references before deriving its ID, but pays the same second ordering pass.
|
||||
- **Impact:** Each validation performs two `O(r log r)` allocations/sorts per
|
||||
location to obtain one minimum, and normalization adds another sort after
|
||||
source-order canonicalization. Citation counts are bounded in ordinary
|
||||
transcripts, so this is a localized allocation and CPU issue.
|
||||
- **Recommendation:** Implement `earliestReference` as a non-mutating linear
|
||||
minimum selection using the exact current source-ID/start/end comparator, and
|
||||
compute that anchor once per record during identity validation before ID
|
||||
comparison. Do not reuse document-position `SourceRefOrder`, whose ordering
|
||||
contract differs from durable location identity.
|
||||
- **Preserve:** Keep order-independent IDs, filtering of malformed anchors,
|
||||
lexicographic source-ID then numeric start/end selection, same-name/different-
|
||||
anchor distinction, exact compact JSON hash input, and input non-mutation.
|
||||
- **Validation:** Retain the permuted-reference and same-name/different-anchor
|
||||
identity fixtures, add mixed valid/invalid and tie-order cases, and use an
|
||||
allocation or benchmark assertion to demonstrate one linear pass per record;
|
||||
run the location identity, registry, and normalizer tests.
|
||||
- **Grouping:** Independent.
|
||||
|
||||
<!--
|
||||
Finding template for later audit stages:
|
||||
|
||||
@@ -883,14 +1029,14 @@ evidence projector.
|
||||
| Family | Durable kind / Go type | Modules and execution class | Default validator chains (E / N) | Reference dependencies (E / N) | Codec, prompt, and schema ownership | Documented exception and later confirmation |
|
||||
| --- | --- | --- | --- | --- | --- | --- |
|
||||
| Spells | `dnd/spell-list` / `dnd.SpellList` | `dnd/spells` (LLM) → typed `appendorder` (deterministic) → `dnd/spells` (deterministic) | `B + catalog` / `B + catalog` | `C` plus optional `spell_catalog` and `npc_registry` / optional `spell_catalog` | `codec/spells`; extractor owns its prompt and private response schema; normalizer has no prompt | Catalog overlay and NPC caster grounding are optional and never evidence; confirm spell/catalog and scene-family behavior in the spells/scenes review. |
|
||||
| NPC registry | `dnd/npc-registry` / `dnd.NPCRegistry` | `dnd/npc-registry` (LLM) → typed `appendorder` (deterministic) → `dnd/npc-registry` (LLM) | `B` / `B + identity` | `C` / none | `codec/npcregistry`; extractor and normalizer own prompts; extractor owns its response schema, while normalize uses the shared private entity-reconciliation schema | Normalization is proposal-only LLM reconciliation; confirm identity, merge safety, and same-name policy in the registry review. |
|
||||
| NPC registry | `dnd/npc-registry` / `dnd.NPCRegistry` | `dnd/npc-registry` (LLM) → typed `appendorder` (deterministic) → `dnd/npc-registry` (LLM) | `B` / `B + identity` | `C` / none | `codec/npcregistry`; extractor and normalizer own prompts; extractor owns its response schema, while normalize uses the shared private entity-reconciliation schema | Confirmed: normalized comparison-name identity, deterministic exact duplicate consolidation, proposal-only semantic groups, collision-safe application, retry/fallback, and immutable name/identity projections; DND-REG-001 and DND-REG-002 record evidence-boundary gaps. |
|
||||
| Combat turns | `dnd/combat-turn-list` / `dnd.CombatTurnList` | `dnd/combat-turns` (LLM) → typed `appendorder` (deterministic) → `dnd/combat-turns` (deterministic) | `B` / `B + invariants` | `C`, optional `npc_registry`, required `scene_descriptions` / optional `npc_registry` | `codec/combatturns`; extractor owns its prompt and private response schema; normalizer has no prompt | Scene descriptions gate LLM execution and NPC grounding is not evidence; confirm gate and empty-result semantics in the combat/enemy review. |
|
||||
| Item occurrences | `dnd/item-occurrence-list` / `dnd.ItemOccurrenceList` | `dnd/item-occurrences` (LLM) → typed `appendorder` (deterministic) → `dnd/item-occurrences` (deterministic) | `B + registry` / `B + registry + invariants` | `C` plus required `item_registry` / required `item_registry` | `codec/itemoccurrences`; extractor owns its prompt and private response schema; normalizer has no prompt | Registry identity grounds current-transcript facts but never supplies evidence; confirm quantities, holders, and registry projection in the occurrence review. |
|
||||
| Item registry | `dnd/item-registry` / `dnd.ItemRegistry` | `dnd/item-registry` (LLM) → typed `appendorder` (deterministic) → `dnd/item-registry` (LLM) | `B` / `B + identity` | `C` / none | `codec/itemregistry`; extractor and normalizer own prompts; extractor owns its response schema, while normalize uses the shared private entity-reconciliation schema | Normalization is proposal-only and preserves denominations/types rather than inventing instances; confirm identity and merge policy in the registry review. |
|
||||
| Item registry | `dnd/item-registry` / `dnd.ItemRegistry` | `dnd/item-registry` (LLM) → typed `appendorder` (deterministic) → `dnd/item-registry` (LLM) | `B` / `B + identity` | `C` / none | `codec/itemregistry`; extractor and normalizer own prompts; extractor owns its response schema, while normalize uses the shared private entity-reconciliation schema | Confirmed: name identity, exact duplicate evidence union, proposal-only aliases, collision safety, and denomination/type-preserving currency gate; DND-REG-001 and DND-REG-003 record boundary/grouping gaps. |
|
||||
| NPC occurrences | `dnd/npc-occurrence-list` / `dnd.NPCOccurrenceList` | `dnd/npc-occurrences` (LLM) → typed `appendorder` (deterministic) → `dnd/npc-occurrences` (deterministic) | `B + registry` / `B + registry + invariants` | `C` plus required `npc_registry` / `C` plus required `npc_registry` | `codec/npcoccurrences`; extractor owns its prompt and private response schema; normalizer has no prompt | Registry provenance cannot become occurrence evidence and `mentioned` remains a factual category; confirm category/identity handling in the occurrence review. |
|
||||
| Scene descriptions | `dnd/scene-description-list` / `dnd.SceneDescriptionList` | `dnd/scene-descriptions` (LLM) → typed `appendorder` (deterministic) → `dnd/scene-descriptions` (deterministic) | `B` / `B + invariants` | optional `glossary`, `party`, and `players` / none | `codec/scenedescriptions`; extractor owns its prompt and private response schema; normalizer has no prompt | Each record has one `source_ref` rather than a slice; the separate `dnd/scenes` LLM chunker owns the full-transcript scene prompt. Confirm scene IDs, ordering, and classification in the spells/scenes review. |
|
||||
| Enemy events | `dnd/enemy-event-list` / `dnd.EnemyEventList` | `dnd/enemy-events` (LLM) → typed `appendorder` (deterministic) → `dnd/enemy-events` (deterministic) | `B + engagements` / `B + invariants` | `C` plus required `npc_registry`, `scene_descriptions`, `combat_turns`, and `npc_occurrences` / required `npc_registry` | `codec/enemyevents`; extractor owns its prompt and private response schema; normalizer has no prompt | Four generated artifacts ground extraction without becoming event evidence; durable decode separately proves required JSON-field presence. Confirm combat gating, engagement uniqueness, and observation ordering in the combat/enemy review. |
|
||||
| Location registry | `dnd/location-registry` / `dnd.LocationRegistry` | `dnd/location-registry` (LLM) → typed `appendorder` (deterministic) → `dnd/location-registry` (LLM) | `B` / `B + identity` | `C` / none | `codec/locationregistry`; extractor and normalizer own prompts; extractor owns its response schema, while normalize uses the shared private entity-reconciliation schema | Normalization is proposal-only and same-name locations require contextual evidence; confirm identity and merge policy in the registry review. |
|
||||
| Location registry | `dnd/location-registry` / `dnd.LocationRegistry` | `dnd/location-registry` (LLM) → typed `appendorder` (deterministic) → `dnd/location-registry` (LLM) | `B` / `B + identity` | `C` / none | `codec/locationregistry`; extractor and normalizer own prompts; extractor owns its response schema, while normalize uses the shared private entity-reconciliation schema | Confirmed: comparison name plus earliest canonical evidence identity, same-name/different-anchor preservation, proposal-only aliases, and immutable context-qualified selectors without durable IDs; DND-REG-001, DND-REG-003, and DND-REG-004 record bounded gaps. |
|
||||
| Location occurrences | `dnd/location-occurrence-list` / `dnd.LocationOccurrenceList` | `dnd/location-occurrences` (LLM) → typed `appendorder` (deterministic) → `dnd/location-occurrences` (deterministic) | `B + registry` / `B + registry + invariants` | `C` plus required `location_registry` / required `location_registry` | `codec/locationoccurrences`; extractor owns its prompt and private response schema; normalizer has no prompt | Registry grounding cannot become evidence and speculation remains distinct from unsupported inference; confirm category and identity handling in the occurrence review. |
|
||||
|
||||
Shared convention review classified the codec surface as safe typed adapters,
|
||||
@@ -932,9 +1078,10 @@ cache identity, and semantic identity while retaining owned loaded values. The
|
||||
entity-reconciliation helper keeps durable IDs out of prompts, rejects invalid
|
||||
or colliding selectors and overlapping groups, bounds transcript context, and
|
||||
returns owned safe groups. Shared comparison policy is versioned, and shared
|
||||
diagnostics bound displayed issues and warning counts. Domain-specific identity,
|
||||
merge, category, and eligibility decisions remain assigned to the subsequent
|
||||
registry, occurrence, scene/spell, and combat/enemy reviews.
|
||||
diagnostics bound displayed issues and warning counts. The registry review now
|
||||
confirms the three noun-family identity and merge decisions; occurrence
|
||||
categories and eligibility, scene/spell policy, and combat/enemy behavior remain
|
||||
assigned to their subsequent reviews.
|
||||
|
||||
Finally, repeated `ManifestMetadata` and `CheckpointFingerprints` methods remain
|
||||
module-local because their exact policy names, prompt/schema hashes, reference
|
||||
@@ -1629,13 +1776,70 @@ mechanics that recur without erasing those distinctions.
|
||||
helpers already consolidate prompt assets, candidate JSON, reference slots,
|
||||
comparison, diagnostics, resolution, and reconciliation. No additional
|
||||
callback- or reflection-driven helper reduced demonstrated drift.
|
||||
- **Deferred lane questions:** Registry identity and reconciliation policy is
|
||||
assigned to the registry review; occurrence categories and registry
|
||||
projections to the occurrence review; spell catalog, scene chunking, scene
|
||||
IDs, and scene classification to the spells/scenes review; and combat gates,
|
||||
engagement uniqueness, collective labels, and enemy observation ordering to
|
||||
the combat/enemy review. This area therefore remains `Revisit` until those
|
||||
reviews confirm the matrix's documented exceptions.
|
||||
- **Deferred lane questions:** Registry identity, reconciliation, and immutable
|
||||
projection policy is now confirmed, with DND-REG-001 through DND-REG-004
|
||||
recording the bounded gaps. Occurrence categories and registry projections
|
||||
remain assigned to the occurrence review; spell catalog, scene chunking,
|
||||
scene IDs, and scene classification to the spells/scenes review; and combat
|
||||
gates, engagement uniqueness, collective labels, and enemy observation
|
||||
ordering to the combat/enemy review. This area therefore remains `Revisit`
|
||||
until those reviews confirm the remaining matrix exceptions.
|
||||
|
||||
### NPC, Item, And Location Registries
|
||||
|
||||
- **End-to-end artifact path:** Each LLM extractor decodes a private
|
||||
name/evidence response, injects the current source ID, canonicalizes direct
|
||||
citations, orders candidates by earliest evidence, and derives family-owned
|
||||
IDs before the typed append-order merger. Normalizers own display cleanup,
|
||||
exact duplicate consolidation, proposal-only semantic reconciliation,
|
||||
deterministic fallback, final identity derivation, and owned output. Shape,
|
||||
identity, current-source reference, schema, and advisory relatedness checks
|
||||
remain ordered in the declared chains before canonical codec publication.
|
||||
Generated references cross the strict typed codec boundary; external
|
||||
approved references use the immutable family registry loaders. DND-REG-001
|
||||
records the structural rule missing from that direct path, and DND-REG-002
|
||||
records the NPC extractor's missing current-chunk evidence gate.
|
||||
- **Identity and lookup policy:** NPC and item identity is the versioned Unicode
|
||||
comparison name hashed through compact JSON, with duplicate comparison names
|
||||
rejected after normalization. Location identity adds the lexicographically
|
||||
earliest valid source anchor, intentionally permitting equal display names at
|
||||
distinct anchors. Family registries validate IDs, clone retained records and
|
||||
citations, build exact ID/name lookups where supported, publish semantic
|
||||
durable and projection digests, and return defensive copies. DND-REG-004
|
||||
concerns only repeated work in selecting the location anchor.
|
||||
- **Reconciliation safety:** All three normalizers render source-free candidate
|
||||
keys with bounded transcript context, invoke the shared strict reconciliation
|
||||
schema only when at least two eligible candidates exist, reject unknown,
|
||||
colliding, duplicate, or overlapping groups, apply only disjoint safe groups,
|
||||
and retry discarded proposals before deterministic warning-bearing fallback.
|
||||
NPCs consolidate aliases under the selected canonical name; items additionally
|
||||
refuse groups that mix currency with non-currency or conflicting
|
||||
denominations; locations union citations and recompute anchored identity.
|
||||
DND-REG-003 records only the pre-reconciliation exact-group scan.
|
||||
- **Proper-name and currency behavior:** NPC extraction requires a proper name,
|
||||
stable title, or individually identifying alias and excludes players,
|
||||
generic roles, groups, and hypotheticals. Location extraction requires a
|
||||
stable physical proper or uniquely identifying designation and excludes
|
||||
generic, relative, transient, and merely descriptive references. Item
|
||||
extraction keeps named/unique concrete reusable objects, materially distinct
|
||||
stable types, and each currency denomination while excluding generic or
|
||||
vague mentions. Normalization proposes equivalence but cannot invent records,
|
||||
source evidence, or unsupported canonical names.
|
||||
- **Location grounding:** Immutable location grounding groups comparison names,
|
||||
exposes name-only selectors for unique names, and exposes exact canonical
|
||||
ranges plus cited context only when same-name records need disambiguation.
|
||||
Durable IDs and source IDs remain model-invisible, selectors resolve by exact
|
||||
contextual identity, collisions and invalid contextual citations fail
|
||||
construction, and prompt/resolved values are defensively copied.
|
||||
- **Test ownership:** Extractor tests own prompt manifests, strict response
|
||||
decoding, citation adaptation, order, and fingerprints; identity/registry
|
||||
tests own compact hash inputs, same-name behavior, lookup/digest projections,
|
||||
direct resolution, empty placeholders, grounding, and mutation isolation;
|
||||
normalizer tests own exact/semantic consolidation, currency and location
|
||||
safety gates, diagnostics, retry/exhaustion fallback, context, and prompt
|
||||
fingerprints; validator tests own shape deferral, identity diagnostics,
|
||||
current-source/chunk evidence, relatedness warnings, and bounded messages.
|
||||
The prescribed package suite passes.
|
||||
|
||||
## Validation Record
|
||||
|
||||
@@ -1683,6 +1887,9 @@ mechanics that recur without erasing those distinctions.
|
||||
| 2026-08-08 | Audit target integrity before shared D&D review | `git diff --quiet 92e89076a268089e703978fb9d7176200e93344c..HEAD -- . ':(exclude)docs/roadmap/**'` | Pass; production target unchanged |
|
||||
| 2026-08-08 | Shared D&D graph/code review | Scoped architecture, exact symbol reads, inbound traces, and complete implementation/test inspection across ten durable types/codecs, candidate JSON, source-reference utilities, resolver/reconciliation/diagnostics, typed mergers, evidence, registration, default chains, shared assets, and representative family prompt/schema owners | DND-CORE-001 recorded; family registration, codec ownership, reference/evidence separation, shared reconciliation safety, and typed adapter boundaries otherwise confirmed |
|
||||
| 2026-08-08 | Required shared D&D tests | `go test ./internal/modules/dnd/codec/... ./internal/modules/dnd/shared/... ./internal/modules/dnd/register` | Pass |
|
||||
| 2026-08-08 | Audit target integrity before registry-family review | `git diff --quiet 92e89076a268089e703978fb9d7176200e93344c..HEAD -- . ':(exclude)docs/roadmap/**'` | Pass; production target unchanged |
|
||||
| 2026-08-08 | Registry-family graph/code review | Exact symbol reads, complexity queries, and call traces across NPC, item, and location extraction, canonicalization, identity, immutable registries and projections, reconciliation eligibility/application/retry/fallback, normalization, validation, codecs, prompt assets, schemas, and focused tests | DND-REG-001 through DND-REG-004 recorded; name/anchor identity, same-name location, currency, proposal safety, diagnostics, fallback, and immutable projection policies otherwise confirmed |
|
||||
| 2026-08-08 | Required NPC, item, and location registry tests | `go test ./internal/modules/dnd/extract/npcregistry ./internal/modules/dnd/extract/itemregistry ./internal/modules/dnd/extract/locationregistry ./internal/modules/dnd/npcs/... ./internal/modules/dnd/items/... ./internal/modules/dnd/locations/... ./internal/modules/dnd/normalize/npcregistry ./internal/modules/dnd/normalize/itemregistry ./internal/modules/dnd/normalize/locationregistry ./internal/modules/dnd/validate/npcregistry/... ./internal/modules/dnd/validate/itemregistry/... ./internal/modules/dnd/validate/locationregistry/...` | Pass |
|
||||
|
||||
## Coverage Matrix
|
||||
|
||||
@@ -1697,7 +1904,7 @@ mechanics that recur without erasing those distinctions.
|
||||
| LLM runtime, prompt filesystems, and assets | Reviewed | LLM internal/integration/configuration/operations docs and related ADRs; scheduled client, scheduler, PromptKit adapter/profile inspector, profile/source fingerprints, redaction, debug, asset registry, schema loader, promptfs implementations and focused tests; root assets, fallback profile, all fourteen module manifests and prompt YAML files, shared/model-visible fragments, private response schemas, and representative composed loaders | Target-integrity check, graph architecture/symbol/call review, content scan and exact prompt-order comparison, focused race tests, composed CLI and D&D prompt-cache tests | LLM-001, LLM-002, LLM-003, LLM-004 |
|
||||
| Generic and Seriatim modules | Reviewed | Internal module guide; Seriatim, JSON output, chunk-map, and evidence-context integration contracts; all implementation/tests under `internal/modules/generic/` and `internal/modules/seriatim/`; framework evidence preparation/output paths and focused tests; maintained CLI example and production output contracts | Target-integrity check, graph architecture/symbol/call/caller review, direct import map, required module and codec tests, focused composed evidence/output tests | MOD-001, MOD-002, MOD-003 |
|
||||
| Shared D&D types, codecs, and family mechanics | Revisit | D&D internal/module docs and all D&D integration contracts; root durable types; all ten codec packages and candidate JSON; shared references, ordering, citations, inputs, comparison, diagnostics, registry resolver, entity reconciliation, and assets; typed merger/evidence/default-chain/fallback/family registration; representative module asset declarations and focused tests | Target-integrity check, scoped graph architecture/search/traces, ten-family convention matrix, required codec/shared/register tests | DND-CORE-001 |
|
||||
| NPC, item, and location registries | Pending | — | — | — |
|
||||
| NPC, item, and location registries | Reviewed | NPC/item/location registry integration contracts and relevant identity/evidence ADRs; extractors, candidate models and response schemas; identity, immutable registry, prompt/identity projection, location grounding, reconciliation, normalizer, validators, codecs, prompt assets, and focused tests for all three families | Target-integrity check, scoped graph architecture/complexity/search/traces, full family comparison, required extractor/identity/registry/normalizer/validator tests | DND-REG-001, DND-REG-002, DND-REG-003, DND-REG-004 |
|
||||
| NPC, item, and location occurrences | Pending | — | — | — |
|
||||
| Spells, scene chunking, and scene descriptions | Pending | — | — | — |
|
||||
| Combat turns and enemy events | Pending | — | — | — |
|
||||
|
||||
Reference in New Issue
Block a user