Respect Fremen group revival grant for bots
Verify and publish checkpoint container / container (push) Canceled after 0s

This commit is contained in:
Quintine committed 2026-10-29 08:46:52 +11:00
1 parent e439f3f7b6
commit f9ca7ed9a9
6 files changed
+203 -7

No files matched your search

+3 -4
View File
@@ -4670,11 +4670,10 @@ export function botActions(g: GameView): Action[] {
* finish that decision; responses and unrelated actions remain available. */
function waitsForHumanFremenGrant(g: Game, player: Game['players'][number]): boolean {
if (g.status !== 'playing' || g.advanced || g.phase !== 4 || g.revivalOrder ||
g.coalitionState || player.tanks <= 0 || revivalPrevented(g, player.id)) return false;
player.tanks <= 0 || revivalPrevented(g, player.id)) return false;
const fremen = g.players.find(seat => seat.faction === 'fremen');
if (!fremen || fremen.bot || fremen.autopilot || fremen.ally !== player.id ||
player.ally !== fremen.id || g.ready.includes(fremen.id) ||
fremenRevivalGrantBlock(g, fremen.id) !== null) return false;
if (!fremen || fremen.bot || fremen.autopilot || g.ready.includes(fremen.id) ||
fremenRevivalGrantBlock(g, fremen.id, player.id) !== null) return false;
const current = freeRevivalRemaining(g, player);
const granted = freeRevivalRemaining({ ...g, freeRevival: [...g.freeRevival, player.id] }, player);
return Math.min(player.tanks, granted) > Math.min(player.tanks, current);
+3 -2
View File
@@ -6562,7 +6562,7 @@ export const RULE_TOPICS: RuleTopic[] = [
"The original owner, ally and turn remain bound while another player may prevent the grant with Karama. All-pass commits once. Under the provisional prevention policy, cancellation denies this grant for the current Revival, preserving the ally’s intrinsic free rate, Recruits and completed returns/payments. The next native Revival clears the denial.",
"Recruits doubles the current granted rate including applicable bonuses before caps. With no other bonus, three becomes six. Provisionally accept grants before or after the card with the same calculation: deduct recorded free usage, preserve all earlier total returns and paid classifications, and give no refund. Finish a pending transaction before declaring a grant.",
"The Fremen panel keeps status and unavailable reasons visible. In concurrent Basic Revival an automated ally can wait for a useful grant until the Fremen grants it or finishes the phase; the existing Karama response still applies. Your ally’s normal revival panel supplies the actual remaining amount. Complete modes, broader combinations and final acceptance remain unfinished.",
"In the Basic group preview, Fremen can provisionally grant each ally the rate separately; each named declaration has its own Karama response. Group interactions remain incomplete."
"In the Basic group preview, Fremen can provisionally grant each ally the rate separately; each named declaration has its own Karama response. Automated allies wait individually when a human Fremen's available grant would help, until it resolves or Fremen is ready. Group interactions remain incomplete."
],
"related": [
"revival",
@@ -6596,10 +6596,11 @@ export const RULE_TOPICS: RuleTopic[] = [
{
"area": "AI",
"status": "Partial",
"detail": "Existing-profile native/Recruits paths and staged group grants use the same projected legal permissions. In concurrent Basic Revival a mutual automated ally waits for a useful human Fremen grant until it is resolved or Fremen is Ready. Strategy and strength calibration remain deferred.",
"detail": "Existing-profile native/Recruits paths and group grants use the same projected legal permissions. In concurrent Basic Revival each eligible automated pair or group ally waits for a useful human Fremen grant until it is resolved or Fremen is Ready. Strategy and strength calibration remain deferred.",
"evidence": [
"game/bots.ts",
"tests/fremen-revival-grant-bot-priority.test.ts",
"tests/coalition-fremen-bot-grant.test.ts",
"tests/recruits-controls.test.tsx",
"docs/FREMEN_REVIVAL_GRANT.md"
]