fix: Ref 게임 로직과 시나리오 풀 호환을 보정

월 경계, 전투 기술 상한, 연감과 베팅·설문·경매 정산 순서를 Ref 계약에 맞춘다.\n\n시나리오 일반 풀을 ENGINE mutation과 logical tick 기반으로 직렬화하고 914·915 catalog 및 조건부 100기 pool 실행 경계를 추가한다.\n\n경매 worker는 세대별 durable event만 만들고 ENGINE이 row lock 후 상태 전이와 정산을 단일 transaction으로 소유한다.
This commit is contained in:
2026-08-23 16:26:14 +00:00
parent bf6b7be7b0
commit 85591c68ad
114 changed files with 13327 additions and 901 deletions
@@ -320,6 +320,24 @@ describe('tournament worker (in-memory)', () => {
).toEqual({ payouts: [], total: 300, refundAll: false });
});
it('coalesces duplicate legacy rows before one winner payout and rounding', () => {
expect(
buildBettingPayouts(10, [
{ generalId: 1, targetId: 10, amount: 101 },
{ generalId: 1, targetId: 10, amount: 99 },
{ generalId: 2, targetId: 10, amount: 100 },
{ generalId: 3, targetId: 11, amount: 100 },
])
).toEqual({
payouts: [
{ generalId: 1, amount: 267 },
{ generalId: 2, amount: 133 },
],
total: 400,
refundAll: false,
});
});
it('locks 64 applicants into eight groups of eight', async () => {
const redis = new MemoryRedis();
const store = new TournamentStore(redis, buildTournamentKeys('test-groups'));