feat(schema): D-237 specialization columns + specialization_vocabulary table

Ticket #1011. system_economy gains economic_specialization +
cultural_specialization (TEXT, NULL = heuristic fallback); new
specialization_vocabulary table (specialization_id PK, commodity_id
FK->commodities, production_ubiquity_override, projected BulkClass +
ProductionUbiquity for D-233, description) + commodity index. Columns
mirrored into COLUMN_MIGRATIONS for idempotent migration; table rides
systems-schema.sql. dominant_faction already exists on system_factions
(populate-only). Validated: importer parses; schema applies to scratch DB;
idempotent migration ran 2x on a copy of live systems.db, 301 rows preserved.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-31 21:04:00 +02:00
co-authored by Claude Opus 4.8
parent a4541bde18
commit 4f53793755
5 changed files with 442 additions and 2 deletions
+18 -1
View File
@@ -98,7 +98,10 @@ CREATE TABLE IF NOT EXISTS system_economy (
economic_base_primary TEXT,
economic_base_secondary TEXT,
distribution_index TEXT,
imprint_access TEXT
imprint_access TEXT,
-- D-237 authored specialization layer (build-time; NULL = heuristic fallback)
economic_specialization TEXT, -- value in specialization_vocabulary.specialization_id
cultural_specialization TEXT -- activity- or heritage-type value; drives D-232 template pool (distinct from system_culture.cultural_register)
);
-- Faction presence
@@ -269,6 +272,20 @@ CREATE TABLE IF NOT EXISTS commodities (
updated_at TEXT DEFAULT (datetime('now'))
);
-- D-237 authored specialization layer: economic-specialization vocabulary.
-- Each value maps to a commodity + projected (BulkClass, ProductionUbiquity) for D-233.
-- Scale is encoded in the value (breadbasket vs estate_farming); no separate scale column.
-- Compiled from wiki/economics/specialization_vocabulary.toml by import_economics.py.
CREATE TABLE IF NOT EXISTS specialization_vocabulary (
specialization_id TEXT PRIMARY KEY,
commodity_id TEXT NOT NULL REFERENCES commodities(commodity_id),
production_ubiquity_override TEXT, -- NULL = use the commodity's catalog default
bulk_class_projected TEXT NOT NULL, -- pre-computed BulkClass for D-233
production_ubiquity_projected TEXT NOT NULL, -- pre-computed ProductionUbiquity for D-233
description TEXT NOT NULL
);
CREATE INDEX IF NOT EXISTS idx_spec_vocab_commodity ON specialization_vocabulary(commodity_id);
-- Leontief production chain recipes (D-178)
-- Source: wiki/economics/production_chains.toml
CREATE TABLE IF NOT EXISTS production_chains (