Connect Advanced Auditor repeated revival and provisional native cycles
This commit is contained in:
1 parent
85729f9819
commit
869412bebd
10 files changed
+113
-24
No files matched your search
@@ -4229,6 +4229,9 @@ export function GameTable({
|
||||
spice.
|
||||
</p>
|
||||
)}
|
||||
{g.revival.auditorCyclePolicy && (
|
||||
<p className="notice">{g.revival.auditorCyclePolicy}</p>
|
||||
)}
|
||||
{g.revival.leaders.length > 0
|
||||
? (() => {
|
||||
const selectedRevival = g.revival.leaders.find(
|
||||
|
||||
+27
-4
@@ -1,12 +1,35 @@
|
||||
# CHOAM Auditor implementation
|
||||
|
||||
7 September 2026. This checkpoint implements the directly specified inspection, component identity and custody rules. It does not certify the complete CHOAM faction or all expansion combinations; public Advanced and expansion starts remain gated.
|
||||
7 September 2026 checkpoint, with an 8 October Advanced revival follow-up. Inspection, component identity and custody rules are connected. This does not certify the complete CHOAM faction or all expansion combinations; public Advanced and expansion starts remain gated.
|
||||
|
||||
## Advanced revival follow-up — 8 October 2026
|
||||
|
||||
The authorized supplied PDF, physical **p29 CHOAM E**, says the Auditor is
|
||||
eligible to be revived **each turn**, regardless of how many leaders are in
|
||||
Tanks. Native ordinary revival now applies that permission after repeated
|
||||
deaths as well as the first death, with printed cost2 before discounts,
|
||||
the existing one-leader allowance and unchanged Tleilaxu prevention.
|
||||
Death history is retained, not reset; own Ghola remains independent.
|
||||
|
||||
**Provisional ordinary-cycle policy:** only the five ordinary CHOAM discs
|
||||
determine the normal cohort. A living or repeatedly killed Auditor neither
|
||||
delays nor opens that cohort. This is the content-first implementation
|
||||
choice, not a numerical user ruling or publisher clarification. It is
|
||||
shown in CHOAM's owned Revival panel and recorded in the rules checklist.
|
||||
Non-CHOAM cohorts and exceptional Duke custody retain their existing rules.
|
||||
|
||||
Two before/after native smoke positions now let Easy revive a second-death
|
||||
Auditor for two spice and open an ordinary five-disc cycle despite a living
|
||||
Auditor. Exact death history, price and single allowance are preserved.
|
||||
Chromium observed actual GameTable SSR options and the provisional warning.
|
||||
No broad suite, recovery campaign or deployed acceptance was run.
|
||||
|
||||
|
||||
## Authority
|
||||
|
||||
The [GF9 CHOAM & Richese rulebook](https://www.gf9games.com/dune/wp-content/uploads/2021/11/CHOAM-Rulebook-low-res.pdf), printed pp.3, 8, 10 and 12, establishes the strength-2 extra disc, matching traitor, survival-based optional inspection, actual-card cancellation cost, revival permission, custody restrictions and Karama prevention. The publisher-authored mirror and its provenance are recorded in [CHOAM_RICHESE_LEADERS.md](CHOAM_RICHESE_LEADERS.md). The [earlier source/engine audit](CHOAM_AUDITOR_ENGINE_AUDIT.md) and independent `/tmp/dune-auditor-source-review.md` record searches and unresolved boundaries. Base ordinary revival is on printed p.9, correcting the earlier audit's p.7 citation.
|
||||
|
||||
Printed publisher rules and official clarifications take precedence. No tournament rules, fan amendments or rules from another edition were substituted.
|
||||
For Advanced, the [authorized supplied PDF amendment](RULE_DECISIONS.md#authorized-source-amendment--1-october-2026) governs source precedence. Printed publisher components and official clarifications remain sources for omitted details; the five-disc cohort policy above is explicitly provisional.
|
||||
|
||||
## Runtime and information
|
||||
|
||||
@@ -24,9 +47,9 @@ Pending-state checks bind the current turn, last battle participants, real terri
|
||||
|
||||
## Revival boundary
|
||||
|
||||
The first normal Auditor return explicitly bypasses the all-in-Tanks prerequisite, costs two before existing discounts, and consumes CHOAM's ordinary one-leader allowance. Tleilaxu prevention and allied discount cancellation use the shared revival pipeline. CHOAM's own Ghola card can revive it through the independent card path.
|
||||
Ordinary Auditor return bypasses cohort eligibility on any death count, costs two before existing discounts, and consumes CHOAM's ordinary one-leader allowance. Tleilaxu prevention and allied discount cancellation use the shared revival pipeline. CHOAM's own Ghola card can revive it through the independent card path.
|
||||
|
||||
Two material source questions remain pending with the user: whether Auditor can ignore the separate repeated-death restriction, and whether a living sixth Auditor delays the ordinary five leaders' revival cycle. The implementation adds only the unambiguous first-return exception and retains existing cycle behavior otherwise. This is an unresolved boundary, not a claim that this fallback is publisher-certified. No new user interpretation has yet been accepted.
|
||||
The 8 October source cutover and provisional ordinary-cohort policy supersede the earlier first-return-only implementation. The ordinary-cycle publisher question remains unresolved; the first version does not claim the user answered it.
|
||||
|
||||
## Presentation and verification
|
||||
|
||||
|
||||
@@ -2,6 +2,13 @@
|
||||
|
||||
Audit: 2026-09-07 local date. Documentation-only review of the current engine; no runtime, component, test, or start-gate change is claimed here.
|
||||
|
||||
**Historical audit.** Current runtime and the supplied Advanced p29 each-turn
|
||||
revival cutover are in [CHOAM Auditor](CHOAM_AUDITOR.md). Its 8 October
|
||||
follow-up also records the visibly provisional five-ordinary-disc cohort
|
||||
policy. Absence claims and publisher-only boundaries below are dated evidence,
|
||||
not current runtime status.
|
||||
|
||||
|
||||
## Authority and component identity
|
||||
|
||||
The [GF9 CHOAM & Richese rulebook](https://www.gf9games.com/dune/wp-content/uploads/2021/11/CHOAM-Rulebook-low-res.pdf), printed pp.3, 8, 10 and 12, supplies the component, power, payment clarification and Karama entry. The publisher-authored local mirror is `/tmp/dune-rules/choam-lelekan-mirror.pdf`, with extracted text alongside it. Its provenance, hash and independent full-page visual inspection are recorded in [CHOAM_RICHESE_LEADERS.md](CHOAM_RICHESE_LEADERS.md). Fresh publisher-targeted searches recovered the indexed p.8 text but no separate Auditor erratum. Unrelated editions, fan compilations and forum answers were not used as authority.
|
||||
|
||||
@@ -113,6 +113,13 @@ boundaries remain; no broad suite or deployed acceptance was run.
|
||||
The preceding supplied p34 cutover excludes Ixian Technology from Richese
|
||||
auctions; ordinary Technology and allied post-purchase replacement remain.
|
||||
|
||||
**Advanced Auditor revival connected.** Supplied p29 each-turn permission now
|
||||
works after repeat deaths. The separate ordinary-cycle prototype excludes
|
||||
Auditor from the five ordinary discs, visibly marked as provisional.
|
||||
Two native Easy smokes, two cycle regression cases, owned GameTable SSR
|
||||
Chromium choices and types/lint pass. No broad suite or deployed acceptance
|
||||
was run; prevention, price, death history and one-leader allowance remain.
|
||||
|
||||
**7 October 2026 — five pending rulings resolved by the user.** The user
|
||||
answered five recorded questions; each is now recorded in
|
||||
[the decision index](RULE_DECISIONS.md#user-rulings--7-october-2026) and
|
||||
|
||||
@@ -51,6 +51,12 @@ not publisher clarifications. [Ecaz combat](ECAZ_OCCUPY_RULES.md) and
|
||||
[distinct Moritani special disposal](MORITANI_ALLY_RETENTION_RULES.md) retain
|
||||
their exact scope and observed evidence.
|
||||
|
||||
Supplied **p29 CHOAM E** permits native Auditor revival each turn, including
|
||||
repeat deaths. Ordinary price, one-leader allowance and prevention remain.
|
||||
The separate five-ordinary-disc cycle exclusion is a visibly provisional
|
||||
implementation policy, not a numerical user ruling or publisher answer.
|
||||
[Source, policy and runtime evidence](CHOAM_AUDITOR.md).
|
||||
|
||||
## User rulings — 7 October 2026
|
||||
|
||||
Five previously pending questions were answered directly by the user. These are
|
||||
|
||||
@@ -32683,6 +32683,7 @@ export function viewGame(state: Game, id: string) {
|
||||
leaders: leaderSkillRevivalBlocked(g, id) ? [] : leaderRevivals.leaders,
|
||||
kwisatz: leaderRevivals.kwisatz,
|
||||
cycleBlock: leaderRevivals.cycleBlock,
|
||||
...(leaderRevivals.auditorCyclePolicy ? { auditorCyclePolicy: leaderRevivals.auditorCyclePolicy } : {}),
|
||||
dukeBlocked: leaderRevivals.dukeBlocked,
|
||||
prevented: revivalPrevented(g, me.id),
|
||||
eliteRemaining: eliteRevivalRemaining(me, g.advanced),
|
||||
|
||||
@@ -22,6 +22,7 @@ export const FACTION_RULES: Record<
|
||||
'Reserve spice to pay for some or all of your ally’s battle support. Each sealed plan records its own and allied shares. A Karama response may prevent this alliance benefit for one battle; unused funding returns at the end of Battle.',
|
||||
'Receive half of each other player’s actual force-support payment, rounded down, unless any traitor is revealed. Your own payments, including support paid for your ally, go to the bank. A separate Karama response can cancel this battle’s income. See CHOAM combat for examples and outstanding interaction audits.',
|
||||
'The Auditor is an additional strength-two leader. After using it in battle, CHOAM may inspect two randomly selected unused opposing Treachery Cards if it survives, or one if it dies, limited by the unused cards available. The opponent may pay CHOAM one spice per card that would be inspected to prevent the whole inspection; Karama can also cancel the power. Use the Auditor guide for the exact private choices and limits. Setup and inspection are supported in development games; complete combined play remains unfinished.',
|
||||
'Supplied Advanced p29 permits Auditor revival each turn even after repeat deaths, for two spice before discounts and using the ordinary one-leader allowance. The five-ordinary-disc cycle policy excludes Auditor and is visibly provisional; it neither opens nor delays ordinary revival.',
|
||||
],
|
||||
},
|
||||
ixians: {
|
||||
|
||||
+9
-8
@@ -3626,6 +3626,7 @@ export const RULE_TOPICS: RuleTopic[] = [
|
||||
title: 'CHOAM Auditor',
|
||||
category: 'Advanced & expansions',
|
||||
coverage: 'Partial',
|
||||
developmentStage: 'Prototyped',
|
||||
summary:
|
||||
'An additional strength-2 leader inspects unused opposing hand cards after battle.',
|
||||
steps: [
|
||||
@@ -3635,8 +3636,8 @@ export const RULE_TOPICS: RuleTopic[] = [
|
||||
'Karama cancellation resolves first. If the power remains active, the opponent can pay CHOAM one spice per actually viewable card to cancel the entire inspection. A surviving Auditor with only one eligible card costs one spice to stop. There is no partial payment.',
|
||||
'If the opponent cannot afford the full payment, inspection proceeds automatically. An empty eligible hand needs no decision. Sampling happens once after cancellation choices; no card is transferred or discarded.',
|
||||
'Only CHOAM receives the inspected faces. Its private snapshot survives refresh and the transition out of Battle, and expires at the next battle or turn. It does not track later changes in the opposing hand and needs no confirmation to continue.',
|
||||
'The Auditor cannot be captured, acquired as a foreign ghola by Tleilaxu, or receive a leader skill. CHOAM’s own Ghola card can revive it. Its first ordinary revival can occur before the other leaders die, costs two spice before any discount, and consumes the usual one-leader allowance.',
|
||||
'Repeated Auditor revival and the effect of its sixth disc on ordinary CHOAM death cycles await a ruling. Full expansion starts remain disabled until all required powers and interactions are complete.',
|
||||
'The Auditor cannot be captured, acquired as a foreign ghola by Tleilaxu, or receive a leader skill. CHOAM’s own Ghola card can revive it. Supplied Advanced p29 permits ordinary revival each turn even after repeated deaths, for two spice before discounts, using the usual one-leader allowance.',
|
||||
'The ordinary-cycle first version explicitly excludes Auditor from the five ordinary CHOAM discs: its life or repeated deaths neither delay nor open that cohort. This is a visibly provisional policy, not a publisher clarification or numerical user ruling. Full expansion starts remain disabled.',
|
||||
],
|
||||
example:
|
||||
'CHOAM loses a battle but its Auditor survives. The opponent keeps a played Shield and has one unplayed Crysknife. Only Crysknife is eligible: the opponent can pay one spice to CHOAM or let CHOAM inspect it.',
|
||||
@@ -3652,7 +3653,7 @@ export const RULE_TOPICS: RuleTopic[] = [
|
||||
area: 'Implementation',
|
||||
status: 'Partial',
|
||||
detail:
|
||||
'Setup identity, inspection, payment, Karama, capture/foreign-ghola exclusions and first revival are integrated; repeat cycles and full combinations remain open.',
|
||||
'Setup identity, inspection, payment, Karama and capture/foreign-ghola exclusions are integrated. Supplied each-turn Auditor revival and provisional five-ordinary-disc cycles are connected; wider combinations remain open.',
|
||||
evidence: [
|
||||
'game/choam-auditor.ts',
|
||||
'game/engine.ts',
|
||||
@@ -3663,8 +3664,8 @@ export const RULE_TOPICS: RuleTopic[] = [
|
||||
area: 'Player controls',
|
||||
status: 'Implemented',
|
||||
detail:
|
||||
'Auditor offer, exact cancellation payment and private inspectable card results have dedicated controls.',
|
||||
evidence: ['components/choam-auditor.tsx'],
|
||||
'Auditor offer, exact cancellation payment and private inspectable card results have dedicated controls. Owned Revival lists repeat-death Auditor and eligible ordinary discs with an explicit provisional cycle warning.',
|
||||
evidence: ['components/choam-auditor.tsx', 'components/game-table.tsx'],
|
||||
},
|
||||
{
|
||||
area: 'AI',
|
||||
@@ -3684,8 +3685,8 @@ export const RULE_TOPICS: RuleTopic[] = [
|
||||
area: 'Verification',
|
||||
status: 'Partial',
|
||||
detail:
|
||||
'Identity, uniform sampling and focused engine/lifecycle/recovery scenarios are being verified; full expansion combinations remain uncertified.',
|
||||
evidence: ['tests/choam-auditor.test.ts'],
|
||||
'Two before/after native Easy revival smokes, two focused cycle regressions and isolated GameTable SSR Chromium surfaces pass. Earlier identity/sampling evidence remains; full expansion combinations and deployed acceptance remain uncertified.',
|
||||
evidence: ['tests/choam-auditor.test.ts', 'tests/choam-auditor-lifecycle.test.ts'],
|
||||
},
|
||||
],
|
||||
},
|
||||
@@ -3702,7 +3703,7 @@ export const RULE_TOPICS: RuleTopic[] = [
|
||||
'A canceled request within the new allowance uses the new price. If it is too large or cannot be paid, no forces or spice move; choose another request. Completed earlier revivals remain intact.',
|
||||
'Fremen may grant their allied CHOAM three free revivals. The free allowance is tracked across requests. Tleilaxu may separately offer its ally half price, rounded up on the total payment; canceling that discount retains CHOAM’s native price if it is still active.',
|
||||
'Emperor-funded extra revivals keep their separate allowance and price. Advanced Tleilaxu special Karama can prevent the normal request before either pricing response. Revival payments go to Tleilaxu when present, with a separate income response.',
|
||||
'Force revival has tested support. Auditor’s first normal return and separate inspection power are described in its topic; repeated death cycles, combined-expansion pricing and the complete faction audit remain unfinished. CHOAM starts stay disabled.',
|
||||
'Force revival has tested support. Auditor’s each-turn return and provisional five-ordinary-disc cycles are described in its topic. Combined-expansion pricing and the complete faction audit remain unfinished; CHOAM starts stay disabled.',
|
||||
],
|
||||
related: [
|
||||
'revival',
|
||||
|
||||
+22
-12
@@ -131,11 +131,18 @@ export function forceRevivalRemaining(
|
||||
);
|
||||
}
|
||||
export function normalRevivalCycle(
|
||||
p: Pick<Player, 'leaders' | 'revivalCycle'>,
|
||||
p: Pick<Player, 'faction' | 'leaders' | 'revivalCycle'>,
|
||||
) {
|
||||
return p.leaders.every((l) => l.dead || l.capturedBy || l.gholaBy)
|
||||
? Math.min(...p.leaders.map((l) => (l.dead ? l.deaths : l.deaths + 1)))
|
||||
: p.revivalCycle;
|
||||
let cycle = Infinity;
|
||||
for (const leader of p.leaders) {
|
||||
// Provisional CHOAM policy: the independently revivable extra Auditor
|
||||
// does not open or delay the ordinary five-disc cohort.
|
||||
if (p.faction === 'choam' && isAuditorLeader(leader)) continue;
|
||||
if (!leader.dead && !leader.capturedBy && !leader.gholaBy)
|
||||
return p.revivalCycle;
|
||||
cycle = Math.min(cycle, leader.dead ? leader.deaths : leader.deaths + 1);
|
||||
}
|
||||
return cycle;
|
||||
}
|
||||
|
||||
/** The five-disc Ecaz opening is recorded in revivalCycle on the first
|
||||
@@ -184,16 +191,15 @@ export function leaderRevivalOptions(
|
||||
const leaders = p.leaders.flatMap((leader) => {
|
||||
if (!enabled || !leader.dead || leader.capturedBy || leader.gholaBy)
|
||||
return [];
|
||||
// Auditor's first return expressly waives the all-in-Tanks prerequisite.
|
||||
// Repeat-death and sixth-disc cycle interpretations remain separately unverified.
|
||||
const auditorFirstReturn =
|
||||
// Supplied Advanced p29 E permits Auditor revival each turn regardless
|
||||
// of the other leaders in Tanks; retain the ordinary one-leader allowance.
|
||||
const auditorReturn =
|
||||
g.advanced &&
|
||||
p.faction === 'choam' &&
|
||||
isAuditorLeader(leader) &&
|
||||
leader.deaths === 1;
|
||||
isAuditorLeader(leader);
|
||||
const normal =
|
||||
!p.leaderRevived &&
|
||||
(auditorFirstReturn || (cycle > 0 && leader.deaths === cycle));
|
||||
(auditorReturn || (cycle > 0 && leader.deaths === cycle));
|
||||
if (
|
||||
!normal &&
|
||||
(p.faction !== 'tleilaxu' ||
|
||||
@@ -233,8 +239,12 @@ export function leaderRevivalOptions(
|
||||
cycle >= (p.kwisatz.revivalCycle ?? 1)
|
||||
? { cost: kwisatzCost, affordable: p.spice >= kwisatzCost }
|
||||
: null;
|
||||
return { cycle, leaders, kwisatz, dukeBlocked, cycleBlock: repeatHistory
|
||||
? 'Ecaz six-disc repeated revival cycles are not yet resolved.' : null };
|
||||
return { cycle, leaders, kwisatz, dukeBlocked,
|
||||
...(g.advanced && p.faction === 'choam' && p.leaders.some(isAuditorLeader)
|
||||
? { auditorCyclePolicy: 'Supplied Advanced p29 permits Auditor revival each turn. Provisional ordinary-cycle policy: only the five ordinary CHOAM discs determine revival cycles; a living or repeatedly killed Auditor neither delays nor opens them. Auditor still uses the normal one-leader allowance.' }
|
||||
: {}),
|
||||
cycleBlock: repeatHistory
|
||||
? 'Ecaz six-disc repeated revival cycles are not yet resolved.' : null };
|
||||
}
|
||||
export type PendingRevival = {
|
||||
player: string;
|
||||
|
||||
@@ -190,6 +190,36 @@ void test('first Auditor revival works while five native leaders are alive and c
|
||||
assert.throws(() => revive(occupied), /one leader/);
|
||||
});
|
||||
|
||||
void test('supplied each-turn Auditor return preserves repeated death history and the ordinary allowance', () => {
|
||||
const start = fixture();
|
||||
const auditor = player(start, 'c').leaders.at(-1)!;
|
||||
auditor.deaths = 2;
|
||||
const g = allow(revive(start));
|
||||
assert.equal(player(g, 'c').leaders.at(-1)!.dead, false);
|
||||
assert.equal(player(g, 'c').leaders.at(-1)!.deaths, 2);
|
||||
assert.equal(player(g, 'c').revivalCycle, 0);
|
||||
assert.equal(player(g, 'c').spice, 18);
|
||||
assert.equal(player(g, 'c').leaderRevived, true);
|
||||
assert.throws(() => revive(g), /one leader/);
|
||||
});
|
||||
|
||||
void test('provisional five-disc CHOAM cycle ignores a living Auditor and its independent death history', () => {
|
||||
const start = fixture();
|
||||
const choam = player(start, 'c');
|
||||
for (const leader of choam.leaders.slice(0, 5)) {
|
||||
leader.dead = true;
|
||||
leader.deaths = 1;
|
||||
}
|
||||
const auditor = choam.leaders.at(-1)!;
|
||||
auditor.dead = false;
|
||||
auditor.deaths = 3;
|
||||
const g = allow(applyAction(start, 'c', { type: 'reviveLeader', leader: choam.leaders[0].id }));
|
||||
assert.equal(player(g, 'c').revivalCycle, 1);
|
||||
assert.equal(player(g, 'c').leaders[0].dead, false);
|
||||
assert.equal(player(g, 'c').spice, 20 - choam.leaders[0].strength);
|
||||
assert.deepEqual(player(g, 'c').leaders.at(-1), auditor);
|
||||
});
|
||||
|
||||
void test('first Auditor revival uses the existing allied discount and pays the actual Tleilaxu revival income', () => {
|
||||
let g = fixture(true);
|
||||
player(g, 'c').ally = 't';
|
||||
|
||||
Reference in new issue
Block a user