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
+8
View File
@@ -81,6 +81,13 @@ ARCHITECTURE_TRAIT_CATALOG_TOML: Path = (
ARCHITECTURE_TRAIT_BIAS_TOML: Path = (
REPO_ROOT / "wiki" / "economics" / "architecture_trait_bias.toml"
)
# ObjectTag vocabulary registry (T-995, Q-049): read by traits.py alongside the
# catalog above to validate allow_tags/block_tags/visual_bundle references and
# the fallback-graph (V-TT-03/V-TT-04), so a registry edit must flip the stamp
# exactly like a catalog edit does.
OBJECT_TAG_VOCABULARY_TOML: Path = (
REPO_ROOT / "wiki" / "economics" / "object_tag_vocabulary.toml"
)
def _economy_import_modules() -> tuple[Path, ...]:
@@ -116,6 +123,7 @@ IMPORT_ECONOMICS_SOURCES: tuple[Path, ...] = (
SYSTEM_SPECIALIZATION_TOML,
ARCHITECTURE_TRAIT_CATALOG_TOML,
ARCHITECTURE_TRAIT_BIAS_TOML,
OBJECT_TAG_VOCABULARY_TOML,
)
# ---------------------------------------------------------------------------