Stable IDs are data, not branding
✅ Real Political World migration policy 💾 Compatibility
Political World changed its public project identity to:
Lous12.PoliticalWorldbut deliberately kept many historical identifiers beginning with:
ukiol_Why?
Because persistent IDs are data compatibility, not branding.
Real migration example
Section titled “Real migration example”The 1.6 → 1.7 migration document tells addon developers to update:
old dependency / namespace → new public identitywhile explicitly warning:
do not rename old ukiol_* content/save IDsThe internal identity document gives the same rationale: old gameplay assets, localization keys, traits, powers, ideology IDs, currents, map IDs and saved values already used those strings.
Changing the author’s public name does not make those save references disposable.
Separate three identities
Section titled “Separate three identities”Do not mix:
Project/dependency identity
Section titled “Project/dependency identity”Lous12.PoliticalWorldUsed by the mod loader and addons.
C# namespace
Section titled “C# namespace”Lous12.PoliticalWorldUsed by source code.
Persistent gameplay/save IDs
Section titled “Persistent gameplay/save IDs”ukiol_...Historical strings that may already exist in saves.
All three can have different migration rules.
New IDs should use the new namespace
Section titled “New IDs should use the new namespace”Legacy compatibility does not mean new public addons should copy the old prefix.
New addon identity should look like:
someauthor.DragonPoliticsand owned content:
someauthor.DragonPolitics.ideology_dragonismRename checklist
Section titled “Rename checklist”Before renaming any ID, ask:
Can this string exist in an old save?Can another mod persist or reference it?Can it exist in player configuration?Can it appear in localization/content registry links?Can it be part of an external API?If any answer is yes, the rename may require a migration.
Prefer copy-forward migrations
Section titled “Prefer copy-forward migrations”For data keys, a safe pattern is often:
read newif missing: read old if old exists: write new = old keep oldreturn valueThis is exactly the strategy Political World’s addon-data v2 migration uses for legacy int/string state.
Keeping old data during the migration window makes rollback and mixed-version recovery safer.
General rule
Section titled “General rule”A refactor changes source organization.
A migration changes data identity.
Never assume those are the same operation.