kcd2_dice_solver: Balatro's joker replaces the one, confirmed
Some checks are pending
Pre-commit checks / pre-commit (push) Waiting to run
Python tests / test (push) Waiting to run
Shell tests / shell-tests (push) Waiting to run
Shell tests / arch-tests (push) Waiting to run

The mapping was marked UNVERIFIED because no published source states which pip
the grinning face covers. The player, who owns the game, confirmed it is the one
— the same face the Devil's head die replaces. So the die carries no plain single
pip at all, which is exactly why picking the joker alone counts as a 1.

Comment and README only; wildcardFaces was already [1]. The uniform side weights
stay flagged as the one remaining assumption, since nothing publishes them.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Krzysztof Rudnicki 2026-07-25 16:33:08 +02:00
parent 1b0a8dff46
commit 11ff8e6a26
3 changed files with 39 additions and 8 deletions

View File

@ -0,0 +1,32 @@
{
"intent": "Record that Balatro's die replaces its ONE pip with the joker as a settled fact rather than an open assumption. The player owns the game and confirmed the mapping, so the data and the docs should stop hedging on it.",
"scope": [
"kcd2_dice_solver/src/data/dice.ts - the comment on the Balatro entry",
"kcd2_dice_solver/README.md - the 'what the numbers are not' bullet",
"Non-goal: any behaviour change. wildcardFaces was already [1]; only the wording around it moves."
],
"changes": [
"The UNVERIFIED caveat on the joker's face is replaced with the confirmation and its consequence: the joker sits where the 1 used to be, so the die has no plain single pip, which is also why holding it alone counts as a 1.",
"The README no longer calls the mapping unverified. Uniform side weights remain flagged as the one real assumption, since no source publishes them."
],
"verification": [
{
"command": "node_modules/.bin/vitest run",
"result": "pass",
"evidence": "222 tests pass, unchanged - this commit touches a comment and a paragraph, not code paths."
},
{
"command": "node_modules/.bin/tsc --noEmit && node_modules/.bin/eslint src",
"result": "pass",
"evidence": "No type errors, no lint findings."
}
],
"risks": [
"The claim now rests on the player's confirmation rather than a citable source; no wiki page states which pip the joker replaces. If it is ever contradicted in-game, dice.ts's wildcardFaces and this wording move together.",
"The die's side weights are still assumed uniform. That assumption is unchanged and still marked in both the data and the README."
],
"rollback": [
"git revert the commit; the wording returns to UNVERIFIED and no behaviour changes either way.",
"After rollback, confirm dice.ts still has wildcardFaces: [1] for balatro - the mapping itself was never in doubt in the code, only in the prose."
]
}

View File

@ -67,10 +67,9 @@ every number here is reproducible.
- **Balatro's die** publishes no face probabilities: the wiki's dice-effect row
for it is six unfilled `d` placeholders, and Inara does not list the die at
all. Exactly **one** of its faces is the joker (Jimbo's grinning face), so it
is modelled as a fair die whose 1 is replaced by that joker. Which pip the
joker replaces is unverified — the 1 is assumed, matching the Devil's head die
the game compares it to, and matching "picking it alone will count as if you
threw 1".
is modelled as a fair die whose 1 is replaced by that joker — the same face the
Devil's head die replaces, which is why holding it alone counts as a 1. Only
the uniform weights are an assumption; the joker's face is not.
- **The two joker faces score differently**, and the scorer keeps them apart. A
Devil's head "matches any combination but never scores on its own", so it can
never be the lone 1 or 5 that lets you hold a die; Balatro's joker can. Both

View File

@ -97,10 +97,10 @@ const RAW_DICE: readonly RawDie[] = [
// as [1,1,1,1,1,1] rather than a fake "16.7" so it cannot be mistaken for a
// transcribed figure.
//
// The joker is modelled as replacing the one, like the Devil's head it is
// explicitly compared to, which is also why holding it alone counts as a 1.
// UNVERIFIED: if the die turns out to show a plain single pip in-game, the
// joker replaces some other face and this should move.
// The joker replaces the one — confirmed by the player, who owns the game —
// like the Devil's head die it is explicitly compared to. That is also why
// holding it alone counts as a 1: the joker sits where the 1 used to be, so
// the die has no plain single pip at all.
weights: [1, 1, 1, 1, 1, 1],
wildcardFaces: [1],
// "When it lands, you get to choose how it's counted!" — and, unlike the