장수 55종과 수뇌 35종의 상태, 로그, 메시지, 예약 턴 비교를 닫습니다. 실제 시나리오 프로필과 대표 PostgreSQL 수명주기, 즉시 외교와 출병 회귀를 추가하고 발견된 Ref 로그 및 생성 장수 저장 차이를 교정합니다.
56 lines
1.8 KiB
TypeScript
56 lines
1.8 KiB
TypeScript
import {
|
|
closeTurnSnapshotSelectorOverCreatedEntities,
|
|
type CanonicalTurnCommandTrace,
|
|
type TurnSnapshotSelector,
|
|
} from './canonical.js';
|
|
import { readCoreDatabaseEntityIds, readCoreDatabaseSnapshot } from './databaseSnapshot.js';
|
|
|
|
export interface CoreTurnTraceRequest {
|
|
kind: 'general' | 'nation';
|
|
actorGeneralId: number;
|
|
action: string;
|
|
args: unknown;
|
|
observe: TurnSnapshotSelector;
|
|
}
|
|
|
|
export const captureCoreDatabaseTurnTrace = async (
|
|
databaseUrl: string,
|
|
request: CoreTurnTraceRequest,
|
|
execute: () => Promise<{
|
|
outcome?: unknown;
|
|
rng?: CanonicalTurnCommandTrace['rng'];
|
|
}>
|
|
): Promise<CanonicalTurnCommandTrace> => {
|
|
const [before, entityIdsBefore] = await Promise.all([
|
|
readCoreDatabaseSnapshot(databaseUrl, request.observe),
|
|
readCoreDatabaseEntityIds(databaseUrl),
|
|
]);
|
|
const result = await execute();
|
|
const entityIdsAfter = await readCoreDatabaseEntityIds(databaseUrl);
|
|
const afterSelector = closeTurnSnapshotSelectorOverCreatedEntities(
|
|
request.observe,
|
|
entityIdsBefore,
|
|
entityIdsAfter
|
|
);
|
|
const after = await readCoreDatabaseSnapshot(databaseUrl, {
|
|
...afterSelector,
|
|
logAfterId: request.observe.logAfterId ?? before.watermarks.logId,
|
|
messageAfterId: request.observe.messageAfterId ?? before.watermarks.messageId,
|
|
});
|
|
return {
|
|
schemaVersion: 1,
|
|
engine: 'core2026',
|
|
execution: {
|
|
kind: request.kind,
|
|
actorGeneralId: request.actorGeneralId,
|
|
action: request.action,
|
|
args: request.args,
|
|
seedDomain: request.kind === 'general' ? 'generalCommand' : 'nationCommand',
|
|
outcome: result.outcome,
|
|
},
|
|
before,
|
|
after,
|
|
rng: result.rng ?? [],
|
|
};
|
|
};
|