feat: resume exploration exactly and harden campaign saves

This commit is contained in:
2026-07-28 17:39:20 +09:00
parent a08d251098
commit 8a6c8c2cd7
24 changed files with 8958 additions and 413 deletions

View File

@@ -82,15 +82,15 @@ try {
verifyValidSetterPersistence(fixture);
verifyNormalizationFailures(fixture);
verifyCampaignStepClearsVisit(fixture);
verifyBattleRecordUpdateClearsVisit(fixture, 'victory');
verifyBattleRecordUpdateClearsVisit(fixture, 'defeat');
verifySettledBattleReplayPreservesVisit(fixture, 'victory');
verifySettledBattleReplayPreservesVisit(fixture, 'defeat');
}
verifyCityMutualExclusion();
verifyLegacySaveWithoutCampVisitField();
console.log(
'Verified camp-visit resume state for all three visits: setter validation, base/active-slot persistence, reload retention, resume summaries, invalid-state normalization, campaign-step and battle-record clearing, city mutual exclusion, and legacy-save compatibility.'
'Verified camp-visit resume state for all three visits: setter validation, base/active-slot persistence, reload retention, resume summaries, invalid-state normalization, campaign-step clearing, settled battle replay preservation, city mutual exclusion, and legacy-save compatibility.'
);
function verifyValidSetterPersistence(fixture) {
@@ -271,23 +271,31 @@ try {
);
}
function verifyBattleRecordUpdateClearsVisit(fixture, outcome) {
function verifySettledBattleReplayPreservesVisit(
fixture,
outcome
) {
storage.clear();
campaign.setCampaignState(validCampVisitState(fixture, 2));
campaign.setActiveCampVisitId(fixture.visitId);
campaign.setFirstBattleReport(
const replayedReport = campaign.setFirstBattleReport(
battleReport(fixture.sourceBattleId, outcome)
);
assert.equal(
replayedReport.outcome,
'victory',
`${fixture.visitId}: a settled ${outcome} replay must resolve to the existing victory.`
);
assert.equal(
campaign.getCampaignState().activeCampVisitId,
undefined,
`${fixture.visitId}: a ${outcome} battle-record update must clear the active visit.`
fixture.visitId,
`${fixture.visitId}: a settled ${outcome} replay must preserve the active visit.`
);
assertPersistedVisit(
undefined,
fixture.visitId,
2,
`${fixture.visitId}: ${outcome} battle-record persistence`
`${fixture.visitId}: settled ${outcome} replay persistence`
);
}