diff --git a/docs/CURRENT_STATUS.md b/docs/CURRENT_STATUS.md index 7dcb0852..b14b1a48 100644 --- a/docs/CURRENT_STATUS.md +++ b/docs/CURRENT_STATUS.md @@ -29,6 +29,14 @@ optional skill bands, combinations and public expansion starts remain open. Rules implementation continues; comprehensive assurance and administration remain deferred until all rules are implemented. +**Guidance accuracy — 11 October.** Three stale player/developer records were +corrected: the card-inspector Semuta availability text now lists every connected +producer and the approved full-hand exchange; `verification.runtime` marks all ten +Richese effects as bounded `partial` (Juice of Sapho, Mirror Weapon and Semuta Drug +were wrongly `not-implemented`); and `RICHESE_COMPONENTS.md` no longer says Juice of +Sapho play is inert. A tautological test that mirrored the old runtime list was +deleted. Types/lint pass and 41 cases pass. + **Queued Truthtrance answer — 11 October.** An ordinary definite Truthtrance answer now offers its consumed card even when another question remains reserved. Only the `remaining === null` software restriction changed: claim or all-seat diff --git a/docs/RICHESE_COMPONENTS.md b/docs/RICHESE_COMPONENTS.md index 7d0bf63a..b40ef460 100644 --- a/docs/RICHESE_COMPONENTS.md +++ b/docs/RICHESE_COMPONENTS.md @@ -83,7 +83,7 @@ Current focused evidence: `tests/richese-engine.test.ts` (10), `tests/richese-au ### Runtime inheritance and reservation clarification -The physical Richese Karama has `effect: 'karama'` and inherits the existing generic handler if acquired in a development fixture. Earlier statements that all ten effects were wholly disabled should be read as the original inventory checkpoint, not the current runtime state. Remaining card-effect integration and full interaction verification are incomplete; actual Juice of Sapho card play remains inert and live expansion starts stay gated. +The physical Richese Karama has `effect: 'karama'` and inherits the existing generic handler if acquired in a development fixture. Earlier statements that all ten effects were wholly disabled should be read as the original inventory checkpoint, not the current runtime state. Remaining card-effect integration and full interaction verification are incomplete; live expansion starts stay gated. All ten effects now have at least a bounded development handler, including Juice of Sapho (first/last Once Around, bounded movement and battle-choice ordering, and aggressor during the shared pre-plan opportunity) and Semuta Drug; see the Semuta and Juice contracts for their current limits. The engine now rejects playing a Black Market card reserved for sale and prevents a donor reducing pledged funding during unfinished Silent bidding. The latter avoids probing private sealed commitments through success/error limits. Independent review, recovery and browser verification remain pending until their checks finish. Internal rule navigation now tracks query changes and controlled topic-open state, preserving the destination after filter resets; browser confirmation of that fix is pending. diff --git a/game/card-presentation.ts b/game/card-presentation.ts index 24dceb46..8967a7e7 100644 --- a/game/card-presentation.ts +++ b/game/card-presentation.ts @@ -92,7 +92,7 @@ export function cardPresentation(card: VisibleCard): CardPresentation { richese.card.effect === 'juiceOfSapho' ? 'Richese effect integration and verification are incomplete. Supported controls cover Once Around first or last while your bid remains open, bounded movement and battle-choice ordering, and aggressor during the shared pre-plan opportunity. Earlier bids stay committed. Later aggressor intervention and other phase or auction modes remain unfinished; expansion starts remain disabled.' : richese.card.effect === 'semutaDrug' - ? 'The explicit Semuta development preview offers neutral responses after clean public ordinary-card discards and completed paid Box disposal, with owner-only commitment and a conservative free-slot requirement. Other discard producers, full-hand sequencing and normal expansion starts remain unfinished.' + ? 'The explicit Semuta development preview offers neutral responses after clean public ordinary-card discards, paid Box disposal, retired Ornithopter movement (including a following Bene Gesserit Intrusion), Distrans, ordinary and queued definite Truthtrance answers, four Sapho scopes, unready pre-leader Residual Poison, printed Karama cancelling CHOAM Charity/Inflation/Bene Gesserit Charity or settling a normal-auction purchase or winning bid, a completed CHOAM sale, clean Kulon and proactive La La La/Baliset/ordinary Trip to Gamont Worthless use, accepted Jubba Cloak before storm protection, Ix-deck Thumper/Amal, three battle discard stages and private normal-auction or Black Market Ixian ally replacements. Commitment is owner-only; the approved full-hand exchange spends Semuta without increasing your completed hand. Other producers, nested responses and normal expansion starts remain unfinished.' : richese.card.effect === 'mirrorWeapon' ? 'Mirror Weapon works in bounded CHOAM/Richese-deck classic-faction battles; copied Tooth and Stone choices resolve separately, and a winning physical Mirror may be kept even after copying Tooth or Artillery. This winner-retention treatment is a user-selected interpretation, not an official clarification. Combined modes and full Richese starts remain gated.' : richese.card.effect === 'stoneBurner' diff --git a/game/richese-cards.ts b/game/richese-cards.ts index 7dd7f944..744595d1 100644 --- a/game/richese-cards.ts +++ b/game/richese-cards.ts @@ -91,7 +91,8 @@ function define( verification: Object.freeze({ inventory: 'physical-faces-verified' as const, gameplay: 'original-paraphrase-of-physical-faces' as const, - runtime: effect === 'karama' || effect === 'distrans' || effect === 'nullentropyBox' || effect === 'ornithopter' || effect === 'residualPoison' || effect === 'portableSnooper' || effect === 'stoneBurner' ? ('partial' as const) : ('not-implemented' as const), + // Every Richese effect now has at least a bounded development handler. + runtime: 'partial' as const, combinedInteractions: 'incomplete' as const, unresolved: Object.freeze(unresolved), }), diff --git a/tests/richese-cards.test.ts b/tests/richese-cards.test.ts index f0ca03e1..38c4de2a 100644 --- a/tests/richese-cards.test.ts +++ b/tests/richese-cards.test.ts @@ -140,20 +140,6 @@ void test('original guides preserve critical face restrictions and separate veri assert.match(guide('residualPoison'), /No player collects spice/); for (const definition of RICHESE_CARD_DEFINITIONS) { assert.equal(definition.verification.inventory, 'physical-faces-verified'); - assert.equal( - definition.verification.runtime, - [ - 'karama', - 'distrans', - 'nullentropyBox', - 'ornithopter', - 'residualPoison', - 'portableSnooper', - 'stoneBurner', - ].includes(definition.card.effect) - ? 'partial' - : 'not-implemented', - ); assert.equal(definition.verification.combinedInteractions, 'incomplete'); assert.ok(definition.verification.unresolved.length > 0); assert.ok(definition.gameplay.length >= 2);