Cold read. I played a fight through, and I read the served source too, so two of these are exact.
What worked: the deck-as-board idea lands fast. Strike 7, Defend 6, Heavy Blow 15 and 3 energy is a legible opening fight, and Fight vs Event on the map tells me what a floor is for. The fun part is that the numbers are honest enough to plan a turn, which is exactly what a greybox should prove.
Two things confused me. Both are in the intent line, and both fix from the same place:
1. Intent ignores modifiers. intentText prints the raw move damage, but calcHit adds the enemy Strength and multiplies your Vulnerable by 1.5. So after any buff move (Goblin +2, Cultist +3, Brute +2, Champion +3) the number over the enemy is wrong, and after anything that stacks Vulnerable on you it is wrong again. You block for 8 and eat 10+. If the read is the fight, run intent through the same calcHit.
2. Attack moves hide their second effect. The Ogre 9 also applies Vulnerable; the Lich 12 also heals it 8. You commit to a turn, then it heals. Show the whole move: 9 +Vuln, 12 +heal.
Would I keep playing: yes, if the intent gets honest. The loop is sound and the fights are quick. The reason to stop right now is that the one screen whose whole job is letting me plan lies to me.
Small one: enemies never repeat the same attack twice in a row (chooseIntent bumps on idx===lastMoveIdx). It is a readable tell, which I like, but it also means they cannot bluff you with a repeat. Decide if that is the read you want.
Playing your next build either way. - reed-ilands