Integrate Smuggler companion with owned Richese No-Field
Connect the GF9 FAQ combination: one free physical reserve force accompanies an owned concealed No-Field at its unchanged one-marker price. Preserve zero/three/five token values, actual supply at later reveal, optional human choice and all four legal AI paths. Genuine CHOAM & Richese Leader Skills development setup adds the two sourced battle cards without duplicating their Ix identities. Public mode and publication gates stay closed; allied and remaining combined routes are unfinished. Bind the private declaration across initial No-Field cancellation and later Advanced Guild interception, including saved interruptions. Validate before projection/actions/normalization, hide the internal proof, reject altered declarations immutably, and withdraw the companion once only on successful commitment. Independent rules/privacy/persistence review found no blocker. Preserve other audit setup gates despite expanded deck assembly. Repair the existing randomized recovery test with a genuine seeded Rihani offer and explicit human choice, replacing an inappropriate AI-policy call on a human seat. Initial Karama and later Guild stop retain their distinct existing opportunity outcomes. Validation: 72 focused regressions plus 10 deck tests; typecheck, lint, 4520 offline tests, production build and 43 HTTP tests passed. SQLite restart, concurrent allowance/cancellation and exact physical custody passed. Browser genuine assignment, private token selection, opt-in, one-spice shipment, refresh, five-force reveal and final refresh preserved six physical Arrakeen forces, 14 reserves, zero Tanks, four spice, Crysknife and Soo-Soo Sook. Genuine four-profile Basic/Advanced games completed in 77/116 actions with 3/4 JSON restores and no rejected candidates; Advanced exercised one companion shipment and later reveal. After the outage the existing server was healthy. Preserved all 529 opening rooms and original seat/recovery records (563 after QA/HTTP). SQLite integrity and foreign keys passed. No restart, database reset or automation. Verified source tree: c2aee4138bcb46a05814a340d62eadace3470247ca620844eb0375e78ea4d6c4
This commit is contained in:
1 parent
bf8036dfc1
commit
788453e07e
20 files changed
+1213
-51
No files matched your search
+8
-3
@@ -55,11 +55,16 @@ export function ixStandardCards(): Card[] {
|
||||
export function ixDeck(): Card[] {
|
||||
return [...ixBattleCards(), ...ixSpecialCards(), ...ixStandardCards()];
|
||||
}
|
||||
/** Complete currently implemented deck sets. Other expansion decks remain gated. */
|
||||
/** CHOAM & Richese p. 4 replaces these Ix cards, or adds them when Ix is absent.
|
||||
* Preserve one physical identity per card across either expansion combination. */
|
||||
export function choamDeck(): Card[] {
|
||||
return ixBattleCards().filter(c => c.kind === 'poisonTooth' || c.kind === 'artillery');
|
||||
}
|
||||
/** Deck assembly does not open the separate faction/module release gates. */
|
||||
export function treacheryDeck(expansions: readonly string[] = []): Card[] {
|
||||
if (expansions.some((id) => id !== 'ix'))
|
||||
if (expansions.some((id) => id !== 'ix' && id !== 'choam'))
|
||||
throw new Error('This expansion treachery deck is not implemented yet.');
|
||||
return [...baseDeck(), ...(expansions.includes('ix') ? ixDeck() : [])];
|
||||
return [...baseDeck(), ...(expansions.includes('ix') ? ixDeck() : expansions.includes('choam') ? choamDeck() : [])];
|
||||
}
|
||||
export type Leader = {
|
||||
/** Explicit projected custody for a shared disc; null means set aside. */
|
||||
|
||||
Reference in new issue
Block a user