Persistence и migration rules для ИИ
🤖 AI-critical ✅ Political World source-backed
Persistence — область, где правдоподобный AI code способен тихо повредить saves.
Здесь правила должны быть строже обычного runtime helper.
Rule 1 — сначала public storage API
Заголовок раздела «Rule 1 — сначала public storage API»Для Political World addon использовать:
Get/SetKingdomIntGet/SetKingdomStringGet/SetKingdomBoolGet/SetKingdomFloataddon-private tagsparty-private typed dataНе реконструировать вручную:
pw_api2_data_...ukiol_api_data_...__private_tagsЭти formats документированы для research/migration understanding, а не как supported addon contract.
Rule 2 — имя Persistence не доказывает round-trip
Заголовок раздела «Rule 2 — имя Persistence не доказывает round-trip»Папка:
Persistenceили запись в Kingdom.data показывают persistence intent.
Но это ещё не фактический:
save → process restart → loadruntime test.
Без результата писать:
source-verified storage path; runtime persistence test pendingRule 3 — stable IDs являются данными
Заголовок раздела «Rule 3 — stable IDs являются данными»Не переименовывать persistent ID только ради:
- нового author name;
- нового namespace;
- cleaner style;
- rebranding.
Сначала migration consequences.
Political World специально сохраняет ukiol_*, хотя public identity — Lous12.PoliticalWorld.
Rule 4 — new и legacy пути могут жить вместе
Заголовок раздела «Rule 4 — new и legacy пути могут жить вместе»Если code делает:
v2 keyfallback old v1 keyне удалять old path как «лишний» без explicit migration policy.
Backward compatibility code часто выглядит redundant, но является critical.
Rule 5 — copy-forward перед destructive migration
Заголовок раздела «Rule 5 — copy-forward перед destructive migration»Безопасный default:
read newif missing: read legacy if found: write new keep legacyНе генерировать delete old data, пока не рассмотрены rollback/compatibility.
Rule 6 — private by default
Заголовок раздела «Rule 6 — private by default»Если state нужен одному addon:
addon-private data/tagа не shared.
Shared string convention уже является API между mods и требует документации.
Rule 7 — typed helpers сохраняют semantics
Заголовок раздела «Rule 7 — typed helpers сохраняют semantics»Использовать:
SetKingdomBoolSetKingdomFloatа не вручную кодировать bool/float.
Framework уже определяет representation и culture behavior.
Rule 8 — party state по stable party ID
Заголовок раздела «Rule 8 — party state по stable party ID»Не привязывать party data к:
list indexdisplay namecurrent orderесли есть stable party ID.
Rule 9 — не выдумывать migration result
Заголовок раздела «Rule 9 — не выдумывать migration result»Если save/load probe не выполнен, нельзя писать:
"verified to persist"Сохраняйте настоящий status.
Rule 10 — persistence claim всегда version-bound
Заголовок раздела «Rule 10 — persistence claim всегда version-bound»Результат должен включать:
WorldBoxNeoModLoaderparent mod/APIprobe versionSave behavior слишком важен для versionless claims.
Rule 11 — не расширять probe за пределы проверенного transition
Заголовок раздела «Rule 11 — не расширять probe за пределы проверенного transition»Two-save same-process isolation result не доказывает автоматически full-restart isolation, party storage или будущие versions.
Независимые claims должны оставаться независимыми, пока отдельный probe явно их не объединит.
Текущие Verified Lab records
Заголовок раздела «Текущие Verified Lab records»WBML-0001 повысил один claim до runtime Verified:
WorldBox 0.51.2 build 719NeoModLoader 1.2.0.1PoliticalWorldAPI 1.14.0После полного process restart подтверждены:
kingdom intkingdom Unicode stringkingdom boolkingdom floataddon-private kingdom tagshared kingdom tagНельзя автоматически распространять WBML-0001 на party-private data, другие versions или legacy migration без отдельного evidence.
WBML-0002 отдельно подтвердил на том же WorldBox/NML/API stack two-save same-process sequence:
A → B → A → Bдля marker + kingdom int/string/bool/float + addon-private/shared kingdom tags. Каждый мир отверг current-run signature другого мира и вернул свои values.
Нельзя переписывать это как full-process-restart isolation или party-private isolation — это более широкие claims.