Enable Basic Kull preview with Tech Tokens
Verify and publish checkpoint container / container (push) Canceled after 0s

This commit is contained in:
Quintine committed 2026-10-29 05:10:06 +11:00
1 parent 92d5c0ac2e
commit 16f10beecf
11 files changed
+375 -18

No files matched your search

+19
View File
@@ -1,6 +1,7 @@
import assert from 'node:assert/strict';
import test from 'node:test';
import { kullDefaultEligible, kullDefaultProfile, type KullDefaultProfile } from '../game/kull-default-profile';
import { nativeFactionTechProfile } from '../game/faction-module-profile';
const lobby: KullDefaultProfile = {
status: 'lobby', advanced: false, expansions: ['choam', 'ix'],
@@ -65,6 +66,24 @@ void test('public eligibility does not change when the host chooses an opt-out',
assert.equal(kullDefaultEligible({ ...lobby, lobbyOptions: selectedOn }), true);
});
void test('Basic Tech Kull has a narrow three-to-six-seat CHOAM and classic roster', () => {
const tech = { ...lobby, players: [{ faction: 'choam' }, { faction: 'atreides' }, { faction: 'guild' }], techTokens: {} };
assert.equal(kullDefaultEligible(tech), true);
assert.equal(nativeFactionTechProfile({ ...tech, kullPreview: true }), true);
for (const variant of [
{ players: tech.players.slice(0, 2) },
{ players: [{ faction: 'choam' }, { faction: 'ixians' }, { faction: 'guild' }] },
{ expansions: ['ix', 'choam', 'ecaz'] },
{ lobbyOptions: { ecazTreachery: true } },
{ lobbyModules: { ecazTreachery: true } },
{ homeworlds: {} }, { nexusCards: {} }, { leaderSkills: {} }, { advanced: true },
]) assert.equal(kullDefaultEligible({ ...tech, ...variant }), false);
assert.equal(nativeFactionTechProfile({ ...tech, kullPreview: true, sandtrout: true }), false);
assert.equal(nativeFactionTechProfile({ ...tech, kullPreview: true, ecazTreachery: true }), false);
assert.equal(nativeFactionTechProfile({ ...tech, kullPreview: true, advanced: true }), false);
assert.equal(nativeFactionTechProfile({ ...tech, kullPreview: true }, true), false);
});
void test('profile reads only public faction and configuration data, never hidden hands or spice', () => {
const player = { faction: 'choam', get hand() { throw Error('private hand read'); },
get spice() { throw Error('private spice read'); } };