The #1015 V-SES-03 edit replaced the vocabulary validation loop body and dropped the trailing vocab_rows.append(), so specialization_vocabulary was inserted with 0 rows even though per-system UPSERTs (which read the dict directly via valid_spec_ids) still succeeded. regen-db reported 'vocab 0 | economic 27 | ...'. Restored the append at the end of the loop. Verified: regen-db now writes 27 vocab rows + 27/27 economic/cultural; spot checks financial_hub=NonPhysical/Specialist, Ran=breadbasket. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>