WBML-0003 — Persistence & Party Lifecycle Suite
✅ Verified — executed branches WBML-0003 PARTIAL PASS: 119 / 0 / 1
Research questions
Section titled “Research questions”WBML-0003 combined several closely related questions:
- Do kingdom and party typed addon values survive same-save reload and a full WorldBox process restart?
- Can the test prove that restart without accidentally relying on in-memory counters?
- What do party typed getters/setters do when the party ID is missing?
- Does party-private data remain available while a party is inactive?
- Can the party be reactivated without losing the tested addon state?
Environment
Section titled “Environment”WorldBox: 0.51.2build: 719git: build-719@5decNeoModLoader: 1.2.0.1PoliticalWorldAPI: 1.14.0Lab: 0.0.3-fix1Why fix1 was necessary
Section titled “Why fix1 was necessary”The first 0.0.3 harness had a methodology problem: after process restart, its final counters only represented the post-restart phases because the earlier counters had lived only in memory.
That does not prove the earlier phases disappeared, but it makes the final matrix incomplete.
fix1 therefore persisted:
Phase A gatePhase B gatepre-restart PASS countpre-restart FAIL countpre-restart SKIP countrun marker / phase stateAfter the new WorldBox process loaded the save, the Lab reconstructed the run from persisted state before continuing.
Observed resume line:
RESTORED PRE-RESTART MATRIX: PASS=76 FAIL=0 SKIP=1This is an important Lab methodology rule: proof state needed after a restart must itself survive the restart.
Phase C — full process restart verification
Section titled “Phase C — full process restart verification”After restarting WorldBox, the probe recovered the same run and verified:
Kingdom-scoped state
Section titled “Kingdom-scoped state”markerintUnicode stringboolfloataddon-private kingdom tagshared kingdom tagParty-scoped state
Section titled “Party-scoped state”party intparty Unicode stringparty boolparty floatAll executed restart assertions passed.
The probe also checked that the kingdom marker did not appear on another discovered kingdom in the same world.
Phase C ended:
PASS=93 FAIL=0 SKIP=1PHASE C RESULT: PASSInvalid party behavior
Section titled “Invalid party behavior”Phase D used a missing party ID.
Getters returned exactly the supplied fallback values:
intstringboolfloatSetters returned false for all four types.
This makes missing-party behavior predictable and prevents the test from silently inventing a party record.
Party lifecycle experiment
Section titled “Party lifecycle experiment”The suite searched the loaded kingdoms for a safe lifecycle target and selected an active, non-ruling party.
It then:
seeded typed V2 party data→ verified seed→ deactivated party→ resolved it with active=False→ read int/string/bool/float while inactive→ reactivated party→ verified active=True restoredEvery executed lifecycle assertion passed.
Final result
Section titled “Final result”PASS=119FAIL=0SKIP=1FINAL GATES: A=PASS B=PASS C=PASS D=PASSSUITE RESULT: PARTIAL PASSWhy this is still a useful Verified result
Section titled “Why this is still a useful Verified result”PARTIAL PASS here means one optional/environment-dependent branch was not executed. It does not erase evidence from the 119 executed assertions.
The missing branch was same-kingdom party-to-party isolation in the original isolation phase: the world did not provide the required second party.
Therefore the evidence boundary is:
✅ executed persistence/restart/lifecycle branches verified🧪 party-to-party isolation branch still openWhat this does not prove
Section titled “What this does not prove”- exact physical save-file layout;
- party A vs party B isolation in one kingdom;
- behavior on other WorldBox/NML/API versions;
- every possible party deletion/removal path;
- automatic safety of mutating the ruling party.