Support native early Basic movement promises

Price native Once Around and Silent funding in early movement forecasts, retaining full sealed donor locks and exact paid-sale boundaries. Add current zero/pass guidance, fixed non-CHOAM preopening Charity entitlement and shared owned normal-revival projection while actual counters remain pending. Preserve the mandatory Ix phase-opening continuation.

Validation: affected rules/control tests, types/lint, production build and six gameplay/control/table-rendering programmes with eight existing-profile native runs. Wider preparations, CHOAM own unresolved opening, modules/Advanced, full rules and deployed acceptance remain open. No saved-room, database, restart or deployment operation.
This commit is contained in:
Quintine committed 2026-10-24 16:05:41 +11:00
1 parent f995b6f4cd
commit c311ed4251
16 files changed
+787 -54

No files matched your search

+2 -2
View File
@@ -130,12 +130,12 @@ void test('Basic native selected families qualify, while optional modules and un
}
});
void test('earlier current-round movement questions support classic Basic while native early invoices remain unfinished', () => {
void test('earlier current-round movement question profiles include declared Basic native families', () => {
for (const phase of [0, 1, 2, 3, 4]) {
const classic = movementBoundary(); classic.phase = phase; classic.movementRemaining = [];
assert.equal(movementPromiseTargetAvailable(classic, 'target'), true);
const native = structuredClone(classic); native.players[0].faction = 'ixians'; native.expansions = ['ix'];
assert.equal(movementPromiseTargetAvailable(native, 'target'), false);
assert.equal(movementPromiseTargetAvailable(native, 'target'), true);
classic.advanced = true; assert.equal(movementPromiseTargetAvailable(classic, 'target'), false);
}
for (const phase of [-1, 6, 8]) {