fix: 개인 턴 경계에 맞춰 입력기 연월을 표시한다

Ref처럼 장수와 월 실행 시각을 logical tick bucket으로 비교해 이미 실행된 장수만 다음 달부터 예약 턴을 표시한다. 12월 연도 전환과 Date-only fallback을 단위 테스트 및 production Chromium으로 검증한다.
This commit is contained in:
2026-08-21 17:17:23 +00:00
parent 5a6295f67a
commit 4c33c39506
5 changed files with 221 additions and 8 deletions
+17 -1
View File
@@ -45,6 +45,7 @@ import {
import {
resolveGeneralTypeCall,
resolveLeadershipBonus,
resolveNextTurnMonthOffset,
resolveRefreshScoreText,
resolveRemainingMinutes,
} from '../../services/generalBasicCardProjection.js';
@@ -265,6 +266,7 @@ export const getGeneralContext = async (ctx: GameApiContext) => {
dedication: true,
age: true,
turnTime: true,
turnTick: true,
recentWarTime: true,
crewTypeId: true,
personalCode: true,
@@ -333,7 +335,14 @@ export const getGeneralContext = async (ctx: GameApiContext) => {
})
: Promise.resolve(NEUTRAL_NATION_CONTEXT),
ctx.db.worldState.findFirst({
select: { currentYear: true, currentMonth: true, tickSeconds: true, config: true, meta: true },
select: {
currentYear: true,
currentMonth: true,
tickSeconds: true,
lastTurnTick: true,
config: true,
meta: true,
},
}),
officerCityId > 0
? ctx.db.city.findUnique({ where: { id: officerCityId }, select: { name: true } })
@@ -520,6 +529,13 @@ export const getGeneralContext = async (ctx: GameApiContext) => {
age: general.age,
retirementYear,
turnTime: general.turnTime.toISOString(),
nextTurnMonthOffset: resolveNextTurnMonthOffset({
turnTime: general.turnTime,
turnTick: general.turnTick,
lastExecuted: parsedLastExecuted,
lastTurnTick: worldState?.lastTurnTick,
turnSeconds: worldState?.tickSeconds ?? 0,
}),
recentWar: general.recentWarTime?.toISOString() ?? null,
defenceTrain: settings.defence_train,
killTurn: readNumber(metaRecord.killturn ?? metaRecord.killTurn, 0),