windows.lua is the input to tests/reader_windows.lua: the reader's own windows,
sampled from real captures, in exactly the form V.sample hands the worker.

IT LIVES HERE, IN THE REPO, ON PURPOSE. The first version lived in a scratch
folder outside version control. When that folder went, the suite stopped
running and said nothing anybody was watching -- 42 checks over the one thing
no other suite covers (turning pixels into names), dark for days.

TO REBUILD OR EXTEND IT

1. Drop a script beside the mod's autorun files that samples the windows you
   want and writes them out. It has to run INSIDE the mod, because it needs
   V.sample and this mod's live calibration:

       local WINDOWS = { name_enemy = { gx = 18, gy = 18, w = 68, h = 12 }, ... }
       hook.Add("OnFrameReceived", "windump", function(f)
           local cal = PKMN.state and PKMN.state.cal
           if not cal then return end
           -- for each window: local s = PKMN.vision.sample(f, cal, win)
           -- serialise { w, h, off, sx, rows }, string.format("%q") per row
           data.write("windump.lua", ...)
       end)

   The geometries are in 40_reader.lua (NAME_WIN, SAFARI_WIN, BANNER_WIN, the
   party rows, MESSAGE_WIN).

2. Feed it a real capture:

       CC_DATA_ROOT=<a scratch root>  CC_MUTE=1
       CC_FAKE_FRAME=<battle frame>;<the frame you want>  CC_FAKE_FRAME_MS=3000

   THE FIRST FRAME IS A PRIMER, and it is not optional. A banner or a menu
   cannot calibrate on its own -- there is no 3:2 bright box to find -- so the
   calibration comes from a battle scene and persists, exactly as in play.
   Have the dump wait past the first entry before writing.

3. Use captures taken with the OVERLAY CLOSED. An open overlay dims the
   picture, and a fixture made from a dimmed frame is not the pixels the
   reader gets. Check a corner: black edges mean clean, grey edges mean the
   overlay was up.

4. Read the expected text off the screenshot WITH YOUR OWN EYES and write that
   into the suite. Never take the reader's own output as the expectation --
   that is how a suite ends up agreeing with a bug.
