feat(db): ObjectTag registry ratified + importer validation — resolves Q-049 (T-995)

The shipped 28-tag catalog palette is canonical (user ratification,
/whats-next refinement 2026-07-07). New machine-readable registry
wiki/economics/object_tag_vocabulary.toml (wall/roof/facade/street axes +
4 generic fallback terminals, Miri/Araminta co-owned header). Importer
validation in economy_import/traits.py: V-TT-03 (every catalog
allow/block/visual_bundle tag exists in the registry, axis-checked) and
V-TT-04 (fallback graph: non-generics declare a parent, chains acyclic,
resolve to a generic — absorbs T-1004's Phase-4 slice). Registry added to
generator_sources (stamp coverage); systems.db regenerated + stamped.
Q-049 marked Resolved — divergence is now a loud build failure.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-08 09:16:20 +02:00
co-authored by Claude Fable 5
parent a6c2ff4740
commit 766ceb436c
6 changed files with 359 additions and 2 deletions
+2 -1
View File
@@ -118,7 +118,8 @@ Narrative, NPCs, dialogue, templates, setting, worldbuilding, and storyteller me
- **Assigned to:** Tyre + Gestalt
### Q-049: ObjectTag vocabulary co-maintenance — Miri and Araminta shared dependency
- **Status:** Open
- **Status:** Resolved 2026-07-08 (T-995) → [D-235](../decisions/architecture.md#d-235-building-exterior-visual-grammar-and-material-vocabulary) (amended 2026-07-07)
- **Resolution:** The canonical tag list is the shipped catalog's 28-tag palette, ratified and formalized as a machine-readable registry at `wiki/economics/object_tag_vocabulary.toml` (a shared data file, not a Rust struct — the `HeritageGrammarOverlay` framing was retired with D-READY-9 by D-232/D-235). Ownership: Miri authors cultural meaning, Araminta the visual expression, both editing the one registry file. Coordination is enforced, not conventional: importer validation (`economy_import/traits.py` V-TT-03/V-TT-04) hard-fails the build when the catalog references a tag missing from the registry, a tag's axis mismatches, or a fallback chain fails to reach its generic parent — the "silent correctness failure" this question feared is now a loud build failure. Additions land as registry + catalog edits in one commit; deprecations fail validation until every referencing template is updated.
- **Priority:** Medium
- **Question:** The `ObjectTag` vocabulary must be co-maintained between Miri's `HeritageGrammarOverlay` (cultural grammar, Rust struct) and Araminta's asset categorization (visual expression, TOML files). What is the governance model? Who owns the canonical tag list? How are additions and deprecations coordinated? Does the vocabulary live in the Rust struct definition or in a shared data file?
- **Context:** If the vocabulary diverges, the generator will reference tags that don't exist in asset categories, or assets will be authored that the grammar never references. This is a silent correctness failure.