File Details
v3.2.6
- R
- May 14, 2026
- 5.16 MB
- 12
- 12.0.5
- Retail
File Name
WHEREDNGN-v3.2.6.zip
Supported Versions
- 12.0.5
Loot & Baloot
v3.2.6 (2026-05-14)
Full Changelog Previous Releases
- docs(CHANGELOG): add v3.2.6 release notes
v3.2.6 entry covers:- Bot Takweesh false-AKA fix (both completed-trick and
current-trick carve-outs, narrowly scoped to
illegalReason == "false AKA" — revoke/off-suit realism gate
unchanged). - Same-team Takweesh behaviour unchanged; tooltip
clarification deferred to a future UX slice. - Bundled v3.2.5 test-only coverage work (BH / BI / BJ / BK /
BL) explicitly framed as internal validation only. - Verification: harness 1295 / 0, H1=11/0, H7=9/0. Pre-fix
BM.1 FAILS at 1289/1; pre-current-trick-carve-out BM.6
FAILS at 1292/1 (both wire-discriminators). - No UI, protocol, saved-variable, scoring, .toc, or
packaging changes.
Committed locally only — no push, no tag, no release until
Codex reviews.
Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com
- Bot Takweesh false-AKA fix (both completed-trick and
- docs(v3.2.6): comment polish — final BM count + BM.6 header entry
Codex final-review polish (comment/doc-only, no logic change):- .swarm_findings/v3_2_6_aka_takweesh_investigation.md §9.3:
"BM section, 6 checks per Codex amend round 2" → "BM section,
7 test blocks emitting 15 harness checks per Codex amend
round 2" (matches the actual final shape: BM.1, BM.2A, BM.2B,
BM.3, BM.4, BM.5, BM.6 = 7 do-blocks; 3+1+2+4+1+1+3 = 15
assertions). - Same doc §9.3 item 4: "All five BM tests are deterministic
and tractable" → "All seven BM blocks are deterministic and
tractable." - tests/test_state_bot.lua BM section header docblock: added
BM.6 — current-trick false-AKA carve-out — to the bullet
list that previously stopped at BM.5.
Harness unchanged (1295 / 0). H1/H7 smokes unchanged (11/0 +
9/0). No runtime / assertion / fixture changes.
Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com
- .swarm_findings/v3_2_6_aka_takweesh_investigation.md §9.3:
- fix(Bot.lua): current-trick false-AKA carve-out (Codex amend round 2)
Codex review of the round-1 fix at 2c67a91 found that the
p.illegalReason == "false AKA"carve-out applied only to the
completed-tricks scan; the v1.5.1 "do NOT scan in-progress
trick" rule at Bot.lua:5969 still blocked current-trick catches.
That rule is correct for revoke / off-suit illegal plays —
they need a later same-suit reveal which is structurally
impossible inside the current trick — but false AKA is
different. State.ApplyPlay marks the false-AKA lead via the
public-knowledge predicate (playedCardsThisRound + AKA banner)
the moment the lead hits the table; HostBeginTakweeshReview's
own scan at Net.lua:3370-3372 already covers the current
trick. A human pressing TAKWEESH the moment after an opp's
false AKA catches it correctly; bot caller should match.
Amend: add a second carve-out that scans S.s.trick.plays for
opposing false-AKA plays only. Revoke / off-suit reasons stay
gated by the v1.5.1 rule.
Tests: BM.6 added. Pre-amend BM.6 FAILS (verified via stash
push: 1292/1); post-amend passes. BM.2A (revoke without
reveal) is the regression guard against accidentally widening
the current-trick scan to all illegal reasons.
Harness: 1280 baseline → 1292 (round 1) → 1295 (round 2).
H1/H7 smokes clean.
Doc: .swarm_findings/v3_2_6_aka_takweesh_investigation.md
updated to document both carve-outs (A: completed-tricks,
B: current-trick) and the round-2 amend rationale.
Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com - fix(Bot.lua): false-AKA carve-out in Bot.PickTakweesh
Bot.PickTakweesh's v1.5.1 realism gate at Bot.lua:5962
(laterPlayedLeadSuit) was designed for revoke / off-suit
illegal plays where the violator later reveals having had the
led suit. That gate does not fit false-AKA semantics: false-AKA
marking at State.lua:1466-1493 is public-knowledge based,
deriving the violation directly from playedCardsThisRound + the
AKA banner at the moment of the lead. No later reveal is needed.
Pre-fix the bot caller mis-gated false-AKA markers and rarely
caught noise-AKA bluffs (the SaudiMaster v1.2.1 A2 / v1.6.0 8%
deception layer), even though the host's HostBeginTakweeshReview
scan at Net.lua:3360-3372 and HostResolveTakweesh scan at
Net.lua:3543-3555 both already accept the illegal flag directly
with no realism gating. Asymmetric: human opponents clicking
TAKWEESH caught the bluff at 100% of click rate; bot opponents
near 0%.
Fix: in Bot.PickTakweesh's opposing-illegal scan, special-case
illegalReason == "false AKA" to bypass the realism gate. The
revoke-style branch is preserved verbatim. Scope: ~5 lines,
single function, single branch. Restores v1.2.1 (A2) / v1.6.0
design intent that noise-AKA is a bluff with a real probability
of being caught.
Tests: BM section in tests/test_state_bot.lua wire-proves the
fix + locks adjacent behavior:
BM.1 — false AKA is immediately bot-catchable (FAILS pre-fix,
passes post-fix). The wire-discriminator for the
carve-out.
BM.2A — non-false-AKA illegal WITHOUT later reveal still
returns nil (revoke-style realism gate preserved).
BM.2B — non-false-AKA illegal WITH later reveal catches
(revoke-style realism gate fires correctly).
BM.3 — same-team Takweesh scan rejects via
HostBeginTakweeshReview's same-team filter at
Net.lua:3362 (documents the UX hazard for the future
v3.2.6b tooltip clarification).
BM.4 — Bot.PickAKANoise deterministic emission at
SaudiMaster with math.random stub (new coverage).
BM.5 — Bot.PickAKANoise declines when bot holds actual A
(new coverage of the no-noise-opportunity carve-out).
Verified pre-fix: BM.1 FAILS (1289/1) with the runtime change
stashed. Post-fix: 1292/0. H1/H7 smokes clean.
Design + investigation docs:
.swarm_findings/v3_2_5_release_readiness_checkpoint.md
.swarm_findings/v3_2_6_aka_takweesh_investigation.md
Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com - docs: add v3.2.5 release-readiness + v3.2.6 AKA/Takweesh investigation
Two paired investigation docs:- v3_2_5_release_readiness_checkpoint.md — recommends HOLD on
a standalone v3.2.5 tag. v3.2.5 work is test-only (BH/BI/BJ/
BK/BL = 22 new harness checks, harness 1258 -> 1280) with
zero runtime/.toc/.pkgmeta/UI/protocol/scoring delta vs
v3.2.3. Bundling into v3.2.6 avoids a double-release. - v3_2_6_aka_takweesh_investigation.md — investigates a user-
reported "bot AKA -> Takweesh" incident. Findings:- A1 (human opp clicks TAKWEESH on false AKA): working as
designed; host's HostBeginTakweeshReview scan trusts the
illegal flag with no realism gate. - A2 (bot opp Bot.PickTakweesh mis-gates false AKA via the
revoke-style realism check at Bot.lua:5962): LIKELY
RUNTIME BEHAVIOUR GAP. The v1.5.1 laterPlayedLeadSuit
realism gate was designed for revoke-style violations,
not for public-knowledge false-AKA marking from
playedCardsThisRound + AKA banner. Bots therefore rarely
punish noise-AKA bluffs. - B (same-team Takweesh click penalizes caller): UX hazard,
deferred to a separate v3.2.6b round.
Proposed runtime fix: ~5-line Bot.PickTakweesh carve-out for
illegalReason == "false AKA" to bypass the realism gate.
Proposed BM test slice: BM.1 false-AKA bot catch (FAILS pre-
fix, motivates the change), BM.2A/B revoke-style realism gate
preserved, BM.3 same-team filter, BM.4/BM.5 PickAKANoise
deterministic emission + carve-out.
Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com
- A1 (human opp clicks TAKWEESH on false AKA): working as
- v3_2_5_release_readiness_checkpoint.md — recommends HOLD on
- test(Bot.lua): add T-4 Sun pos-4 Faranka regression coverage
Add BL section to tests/test_state_bot.lua for T-4 from
.swarm_findings/v3_2_5_t4_sun_pos4_faranka_design.md:
BL.1 — Sun pos-4 Faranka outer-gate positive. Advanced (NOT
M3lm) tier; Sun bidder seat 1, bot seat 3 (team A);
trick 8H/JH/9H partner-winning; hand {AH, KH, 8C, 7D}.
Outer gate at Bot.lua:3179-3181 passes; hasA + cover=KH
+ suitCount=2; TH unplayed so holdsTopTwoUnplayed=false.
Inner block enters but M3lm-gated random branches skip
(Advanced not M3lm); falls toreturn cover= KH.
BL.2 — v1.4.0 anti-trigger row 167 negative. Same fixture
except TH added to playedCardsThisRound, so
holdsTopTwoUnplayed becomes true. T-4 inner block
bypassed at L3232; falls to smother at L3366 which
returns highest point card = AH.
BL.3a — Source pin on v0.5.21 outer-gate marker at Bot.lua:3155.
BL.3b — Source pin on v1.4.0 Concern 5 audit-fix marker at
Bot.lua:3201.
Framing note (Codex review): BL.1's cover KH (RANK_PLAIN 6)
actually beats partner's JH (RANK_PLAIN 4); the bot takes the
trick rather than ducking. Test docstrings and inline comments
describe BL.1 as wire-proving branch priority + AH preservation,
NOT the canonical "duck and let partner take" v0.5.21 / video
#06 strategic outcome. Our fixture violates the cover-strictly-
lower-than-table premise to keep the wire-discriminator clean
(KH vs AH).
Tier: Advanced (NOT M3lm). Keeps the M3lm-gated 5-factor random
capture path at Bot.lua:3345 + 3352 inactive; no math.random
stub needed. Per design doc §10, the 5-factor framework's
per-factor effects are wire-invisible at the returned-card
level (deferred indefinitely).
Harness delta: 1276 -> 1280 / 0.
Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com - docs: add v3.2.5 T-4 Sun pos-4 Faranka design
Inventory pass for the v0.5.21 Sun pos-4 Faranka outer gate at
Bot.lua:3179-3181 and the v1.4.0 (Concern 5) anti-trigger row 167
carve-out at Bot.lua:3201-3225. Proposes a minimal-batch BL slice
that wire-proves both deterministic paths without math.random
stubs: Advanced (non-M3lm) keeps the M3lm-gated 5-factor random
branches inactive.
Classification A: test-only coverage backfill. The 5-factor
framework's internal probabilistic behavior is wire-invisible
(captureRate clamp + wobble + random roll), but the outer gate
and anti-trigger row 167 are both deterministic and audit-
relevant.
Framing correction per Codex review: BL.1's cover KH actually
beats partner's JH in our fixture (RANK_PLAIN K=6 > J=4); the
bot takes the trick rather than ducking. The test wire-proves
branch priority + row 167 polarity, NOT the "duck + let partner
take" canonical Saudi strategic outcome. Doc explicitly
forbids "duck under JH" / "partner keeps the trick" framing
in implementation docstrings.
Expected harness delta 1276 -> 1280 / 0 (+2 behavioural + 2
source pins on v0.5.21 outer gate and v1.4.0 row 167 markers).
Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com - test(Bot.lua): add T-2 sweep-pursuit-early regression coverage
Add BK section to tests/test_state_bot.lua for T-2 from
.swarm_findings/v3_2_5_t2_sweep_pursuit_design.md:
BK.1 — sweep-pursuit-early positive. Hokm trump=S, bot seat 3
(bidder-team), M3lm. 6 prior tricks all won by team A
→ mySwept=6 == trickNum-1. Hand {JS, 9S}: U-7
feasibility check auto-counts J+9 as 2 winners (>=
remainingNeeded=2). Boss-scan returns JS via
highestByFaceValue().
BK.2 — sweep-pursuit-early negative (one opp prior win). Same
fixture, tricks[2].winner = 2 (opp). mySwept=5 != 6 →
gate fails. All-trump hand falls to no-non-trump
fallback at Bot.lua:2937 → lowestByRank({JS, 9S}) = 9S
(trump-rank 7 < J trump-rank 8).
BK.3 — Source pin on v1.0.3 U-7 Kaboot-feasibility hand-shape
gate marker at Bot.lua:1089.
Fixture is deliberately minimal: all-trump 2-card hand at
trickNum=7 sidesteps HUR stubbing and playedCardsThisRound
seeding while wire-proving both branches of the v1.0.3 U-7
feasibility gate.
Harness delta: 1273 -> 1276 / 0.
Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com - docs: add v3.2.5 T-2 sweep-pursuit-early design
Inventory pass for the T-2 sweep-pursuit-early Kaboot lead branch
at Bot.lua:1081-1136 (the v1.0.3 U-7 Kaboot-feasibility hand-shape
gate). Proposes a minimal-batch BK slice with all-trump 2-card
hand at trickNum=7 to wire-prove the gate without HUR stubbing or
playedCardsThisRound seeding.
Classification A: already correct; needs regression coverage only.
Positive (JS) and negative (9S) wire-discriminate the sweep-pursuit
fire vs natural lowestByRank fallback. Expected harness delta
1273 -> 1276 / 0 (+2 behavioural + 1 source pin on the v1.0.3
U-7 Kaboot-feasibility hand-shape gate marker at Bot.lua:1089).
Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com - test(Bot.lua): add T-10 Tahreeb-return regression coverage
Add BJ section to tests/test_state_bot.lua for T-10 from
.swarm_findings/v3_2_5_t10_tahreeb_return_design.md:
BJ.1 — Tahreeb-receiver T-supply positive. Hokm trump=S, bot
seat 3, partner seat 1 bot, M3lm. tahreebSent.H = {"7","9"}
→ "want" flavor; hand {TH, 9H, 8H, JD}. T-10 fires at
Bot.lua:1776-1788 → returns TH.
BJ.2 — T-10 negative (flavor != want). Same fixture, signal
changed to single Ace {"A"} → "bargiya_hint" flavor.
T-10 doesn't fire; falls back to lowestByRank → 8H.
Wire-discriminator on the v1.1.0 H1 flavor restriction.
BJ.3 — Source pin on receiver-side bot-only doc marker at
Bot.lua:1278 ("relevant seat is a bot").
BJ.4 — Source pin on v1.4.5 sender/receiver asymmetry note at
Bot.lua:3580 ("Receiver-side reads of human signals are").
The partner-bot gate at Bot.lua:1294 is intentional per the v1.4.5
audit (sender removed the gate; receiver kept it because human
discards are noise, not deliberate signaling). BJ.3 + BJ.4 lock
the two doc markers anchoring this architectural asymmetry.
Harness delta: 1269 -> 1273 / 0.
Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com - docs: add v3.2.5 T-10 Tahreeb-return design
Inventory pass for the T-10 Tahreeb-receiver T-supply branch
(count>=3 + "want" flavor) at Bot.lua:1776-1788 and the upstream
partner-bot gate at Bot.lua:1294.
Conclusion: the partner-bot gate is intentional and audit-endorsed
per the v1.4.5 sender-side asymmetry note (Bot.lua:3580-3583), the
Fzloky H-12 rationale (Bot.lua:1804-1810), and the inline doc at
Bot.lua:1278-1279. Classification A: test-only coverage backfill,
no behavior bug.
Proposes a smallest-batch BJ slice: positive + negative behavioural
fixtures (TH vs 8H wire discriminator) plus two single-line source
pins on the architectural-asymmetry markers. Expected harness delta
1269 -> 1273. Round-2 amendment replaces wrapped-comment-line
anchors with verified single-line anchors at Bot.lua:1278 and 3580.
Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com - test(Bot.lua): add Faranka Exception #2 regression coverage
Add BI section to tests/test_state_bot.lua for the deferred Batch B
candidate from .swarm_findings/v3_2_5_high_pickplay_batch_b_design.md:
BI.1 — Exception #2 positive (F-16 K-cover satisfied).
Side-suit H-led must-follow with hand {AH, 7H, KD, 9D}.
myTrumpCount==2 + onBidderTeam fires E2; F-16 satisfied
by KD. Faranka returns non-trump loser 7H.
BI.2 — Exception #2 negative (F-16 vetoes via no-K).
Same trick, hand {AH, 7H, 9D, 7D}. E2 trigger fires but
F-16 vetoes (no K of trump). Natural pos-4 play returns
winner AH. Wire-discriminator on the F-16 K-cover veto.
BI.4 — Source pins on existing F-16 K-cover veto block markers
(v0.10.0 X3 anti-rule F-16, v0.10.3 audit A-Src-29,
v3.2.1 F4). No runtime markers added.
Harness delta: 1264 -> 1269 / 0.
Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com - docs(v3.2.5 batch B): switch BI.1/BI.2 to side-suit-led fixtures
The trump-led fixture proposed in the first Codex amendment turned
out to be structurally unreachable: Saudi/Belote must-overcut at
Rules.lua:175-196 strips the non-winner trump from legal whenever
the hand contains an overcut, which short-circuits Bot.PickPlay
before pickFollow's Faranka block runs.
Re-amended per Codex re-approval to the BH.2-family side-suit-led
fixture: H-led must-follow with myTrumpCount==2 counted off-legal
in hand. BI.1 returns 7H (Faranka non-trump loser); BI.2 returns
AH (natural pos-4 winner when F-16 vetoes via no-K).
Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com - docs: add v3.2.5 high pickplay batch B design
Inventory pass for the deferred Batch B candidates after the v3.2.5
BH-section merge: T-1.E2 (Hokm Faranka Exception #2 positive +
F-16 K-cover veto negative), with T-10 and T-2 documented but
deferred to later slices. Doc proposes a smallest-batch BI slice
of two behavioural + three source-pin checks, expected harness
delta 1264 -> 1269.
Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com - test(BH): comment-only polish per Codex review
Two comment-only fixes to the v3.2.5 Batch A BH section:- BH.3 trace comment: replaced "winning trump rank in led suit"
with "winning led-suit Ace" — AH is a non-trump card winning
the led suit H; calling it a "trump rank" was incorrect since
trump is D in this fixture. - BH.4b oppsVoidPath comment: removed the inaccurate reference
to the relocated F5-3 site. The oppsVoidPath flag belongs to
the Hokm Faranka Exception #4 / F-16 K-cover veto carve-out
path, not to F5-3. Reworded to: "consumed by the F-16 K-cover
veto carve-out in the Hokm Faranka exceptions block to allow
Faranka when both opps are observed-void in trump."
No test logic changes. No runtime changes. No .toc/.pkgmeta/
workflow/CHANGELOG/tag/release.
Verification:
- git diff --check main...HEAD: clean
- Full harness: 1,264 / 0 (unchanged)
- H1 smoke: 11/0; H7 smoke: 9/0
Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com
- BH.3 trace comment: replaced "winning trump rank in led suit"
- test(Bot.lua): add HIGH pickplay regression coverage
Batch A from .swarm_findings/v3_2_4_high_pickplay_coverage_design.md
(approved by Codex with 2 rounds of doc amendment). Test-only batch
covering two Saudi-canonical "Definite" branches identified as
HIGH-risk untested in the v3.2.1 audit:- BH.1 (audit T-6): Tahreeb "want, no A/no T" sender at Bot.lua
:3676-3701 (Sun pickFollow). Per signals.md §8 (Definite,
videos 01/09/10). - BH.2 + BH.3 (audit T-1.E4): Hokm Faranka Exception #4 both-opps-
void at Bot.lua:4017-4060. Per decision-trees.md §10 (Definite,
video #04). BH.2 positive returns Faranka loser 7H; BH.3 negative
(one opp void) returns winner AH. The 7H ↔ AH pair is the
wire-discriminator that proves Exception #4 fired specifically. - BH.4 (source-pin block): three sub-asserts on EXISTING in-source
markers (v0.11.18-final U-2, oppsVoidPath, v0.10.3 F-30b). No
new runtime markers added — test-only batch.
Fixture design notes: - BH.1 uses strict positive
card == "8H"assertion (not weakened
negativecard ~= "7D"). Per-suit Tahreeb scope returns 8H from
the candidate suit H; if T-6 didn't fire, fallback's
lowestByRank(legal) would return 7D from the side D suit. - BH.2/BH.3 use a Hokm-LEGAL must-follow hand {AH, 7H, JD, 8C} →
legal {AH, 7H} after must-follow H. (Earlier draft used a
void-in-led {JD, 8C, 7C} hand which would have violated Hokm
must-trump; non-trump 8C/7C are illegal when bot has trump in
hand and is void in led suit.)
All four tests are regression guards on already-correct runtime;
no pre-runtime failures expected.
Harness: 1,258 → 1,264 (+6 new BH.* checks: 3 behavioural +
3 source-pin sub-asserts). Smokes: H1 11/0, H7 9/0.
Files: tests/test_state_bot.lua only. NO Bot.lua, BotMaster.lua,
Net.lua, State.lua, Rules.lua, Cards.lua, UI*, .toc, .pkgmeta,
workflow, or packaging changes.
Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com
- BH.1 (audit T-6): Tahreeb "want, no A/no T" sender at Bot.lua
- docs: add v3.2.5 high pickplay coverage design
Design + 3 rounds of Codex review for Batch A test-only coverage
of the v3.2.1-audit-identified HIGH-risk Saudi-canonical branches.
Approved Batch A scope:- BH.1: Tahreeb "want, no A/no T" sender (Sun pickFollow)
- BH.2: Hokm Faranka Exception #4 (both opps void in trump) positive
- BH.3: Exception #4 negative-paired wire-discriminator
- BH.4: source pins on existing in-source markers ONLY (no new
runtime markers)
Key design refinements via Codex review: - BH.2/BH.3 fixtures use Hokm-legal must-follow hand
{AH, 7H, JD, 8C}(not the v0.2 illegal void-in-led{JD, 8C, 7C}). The non-trump losers 8C/7C were illegal under Hokm
must-trump in the original draft. - Wire-discriminator: both-opps-void returns loser 7H; one-opp-void
returns winner AH. - BH.1 strict positive
card == "8H"(not weakenedcard ~= "7D"). - BH.4 source-pins target EXISTING markers only; implementation
MUST NOT modify Bot.lua to add new markers for these pins.
Other 4 HIGH-risk audit candidates deferred: - T-2 (sweep-pursuit-early): MED — fixture state-setup complexity
- T-10 (Tahreeb T-supply): MED — partner-style ledger setup
- T-1.E2 (Exception #2 positive): MED — careful trump-count gating
- T-4 (Sun pos-4 5-factor Faranka): MED-HIGH — probabilistic,
same EV-gap concern as F2 deferral
Expected harness delta: 1,258 → 1,264 (+6 new BH.* checks:
3 behavioural + 3 source-pin sub-asserts).
Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com
- docs: add v3.2.4 F2 deception deferral design
F2 pos-3 Sun «تخليه يمسك» / hold-back deception relocation
design pass, approved by Codex with the recommendation to defer
F2 indefinitely.
Key findings (full reasoning in §3.3 of the doc):- v3.2.3's F5-3 relocation already implements F2's primary
"duck-low when K beats partner" behaviour deterministically
via itsnot wouldWin(c, trick, contract, seat)candidate
filter. F5-3 and F2 converge on the same low card for ~95%
of F2's intended fire window. - The F2-unique territory — Smother override at tricks 4-5
with a probabilistic 30%/40% gate — has speculative EV and
requires the riskiest placement option (Option A: before
Smother). The «تخليه يمسك» deception value diminishes as
opp's hand-distribution model improves with more observed
plays; trick-4-5 is the wrong window for it. - Deterministic fire/no-fire stubs (Strategy 1) + source pins
on rate literals (Strategy 3) would be sufficient for a
narrow implementation, but neither proves long-run rate or
EV. The EV gap, not a test-framework gap, is the primary
deferral rationale.
This commit ships the design doc only — no Bot.lua, tests,
.toc, .pkgmeta, or workflow changes. F2's existing v3.2.1
"UNREACHABLE in production" comment marker at Bot.lua:4533-
4547 stays as-is; the optional §8.1 narrow-batch comment-
marker update was not requested.
Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com
- v3.2.3's F5-3 relocation already implements F2's primary

