diff --git a/plan/candidates.md b/plan/candidates.md index fd6370e..251f762 100644 --- a/plan/candidates.md +++ b/plan/candidates.md @@ -216,6 +216,37 @@ rather than a test, because wall-clock assertions are flaky under load. the number of states or survivors fails loudly and has to be explained rather than absorbed +## Seeing what the estimator thinks + +Every inspection tool here prints scalars, and a scalar cannot be judged by +somebody who knows BattleTech. A heatmap can: put it on a board and a player can +say "nobody would stand there" in a second, which is a class of bug no test +catches and no win rate localises. + +One sheet, two sides, nobody has moved. For each stand in our `L`, the estimator +gives two numbers aggregated over the enemy's `M`: what we deal from it, and +what we take at it. Colour the hex by both. A hex we can hurt them from and they +cannot answer reads one way; a hex where both sides trade heavily reads another. +That second kind is where a match is decided and it currently has no name in any +output we produce. + +- [ ] Render the two channels per hex over one board, from the scenario + fixtures, with no MegaMek and no match. Encode total as lightness and the + offence-to-defence ratio as hue: an additive blend of two colours puts + "high in both" and "middling in both" on the lightness axis alone, which + is the one the eye compares worst +- [ ] **The same board at three power-mean exponents**, since that is the + argument for the operator existing. `p -> -inf` is the enemy finding our + worst case and should pull the good hexes toward cover; `p = 1` is the + enemy moving without regard to us. The scenario test asserts this + relationship as a number - the render is the same claim made visible +- [ ] At least three enemies on one side, so the `N` aggregation is not + degenerate. Against a single enemy, offence-takes-best and + defence-takes-sum are the same number, and the case worth seeing - good + against one, exposed to three - cannot occur +- [ ] Test what is asserted rather than what is drawn: the hex ordering the + render produces, not its pixels. A colour is not a regression target + ## Deferred **Jump** is a second pathfinding pass, not a variant of the first: a jump cannot