The bleeding edge Stockfish seems to have a tactical improvement

Discussion of anything and everything relating to chess playing software and machines.

Moderator: Ras

Dann Corbit
Posts: 12856
Joined: Wed Mar 08, 2006 8:57 pm
Location: Redmond, WA USA

Re: The bleeding edge Stockfish seems to have a tactical improvement

Post by Dann Corbit »

I make a couple small changes. I turn off buffering so that the string I/O won't go wrong in Windows (which has the wrong sort of default for stdin/stdout/stderr). I also profile about ten times longer with a search several plies deeper than the default. The first change probably costs a fraction of an Elo, because it slows down I/O but I hate it when the engines get decoupled in Arena (it still happens sometimes because I am convinced Arena uses buffered I/O). The second change probably gives me a fraction of an Elo, but I would expect the net change to be zero. I also compile with the bleeding edge GCC, though I see that others say certain older versions of GCC are best.
Taking ideas is not a vice, it is a virtue. We have another word for this. It is called learning.
But sharing ideas is an even greater virtue. We have another word for this. It is called teaching.
chrisw
Posts: 4835
Joined: Tue Apr 03, 2012 4:28 pm
Location: Midi-Pyrénées
Full name: Christopher Whittington

Re: The bleeding edge Stockfish seems to have a tactical improvement

Post by chrisw »

Dann Corbit wrote: Fri Mar 20, 2026 6:16 am I make a couple small changes. I turn off buffering so that the string I/O won't go wrong in Windows (which has the wrong sort of default for stdin/stdout/stderr). I also profile about ten times longer with a search several plies deeper than the default. The first change probably costs a fraction of an Elo, because it slows down I/O but I hate it when the engines get decoupled in Arena (it still happens sometimes because I am convinced Arena uses buffered I/O). The second change probably gives me a fraction of an Elo, but I would expect the net change to be zero. I also compile with the bleeding edge GCC, though I see that others say certain older versions of GCC are best.
A windows compiler, such as VS, won’t allow the old C I/o stuff because it insists on defensive coding where the max size of buffer is DEFINED at compile time, and checked for overflow at run time. Other C compilers don’t insist and hence are prone to buffer overflow and subsequent unpredictable results. Like crash back to system etc.
Dann Corbit
Posts: 12856
Joined: Wed Mar 08, 2006 8:57 pm
Location: Redmond, WA USA

Re: The bleeding edge Stockfish seems to have a tactical improvement

Post by Dann Corbit »

You can change cin, cout, cerr too, which also default to buffered in Windows (or they used to, I did not check the standard recently). Line buffered is good enough, you don't have to turn buffering off completely.
Taking ideas is not a vice, it is a virtue. We have another word for this. It is called learning.
But sharing ideas is an even greater virtue. We have another word for this. It is called teaching.
Dann Corbit
Posts: 12856
Joined: Wed Mar 08, 2006 8:57 pm
Location: Redmond, WA USA

Re: The bleeding edge Stockfish seems to have a tactical improvement

Post by Dann Corbit »

this is the stuff I use for fooling around with my idea. This particular version is only for "stuck in a draw"

Code: Select all

int stagnation(Stack* ss) { 
    int maxprobe = ss->ply; 
    A = int(Options["A"]);
    if (maxprobe <= A)
        return 0;
    int  stagnant_length   = 0;
    bool improving;
    bool opponentWorsening;

    for (int i = 0; i < maxprobe; i+=2)
    {
        improving = ss->staticEval > (ss - (2 + i))->staticEval;
        opponentWorsening = ss->staticEval > -(ss - 1)->staticEval;
        if (improving == false && opponentWorsening == false)
        {
            stagnant_length++;
        }
        else 
        {
        	break;
        }
    }
    return stagnant_length;
}	
Calm down null move like this:

Code: Select all

           if (improving == false)
           {
       	       B = int(Options["B"]);
       	       C = int(Options["C"]);
       	       D = int(Options["D"]);
               int horror = stagnation(ss);
               if (horror >= B)
               {
                   R -= std::min((horror - C)/D, 1);
               }
           
added this to uci.h

Code: Select all

Option(int v, int minv, int maxv, OnChange = nullptr);
and this to ucioption.cpp

Code: Select all

   o["A"]                     << Option(8, 1, 50);
   o["B"]                     << Option(14, 1, 50);
   o["C"]                     << Option(9, 1, 50);
   o["D"]                     << Option(2, 1, 50);
I think double would probably be better than int and I should widen the ranges. The only real restriction is that the divisor D should not be zero.
Taking ideas is not a vice, it is a virtue. We have another word for this. It is called learning.
But sharing ideas is an even greater virtue. We have another word for this. It is called teaching.
Dann Corbit
Posts: 12856
Joined: Wed Mar 08, 2006 8:57 pm
Location: Redmond, WA USA

Re: The bleeding edge Stockfish seems to have a tactical improvement

Post by Dann Corbit »

For Crystal 5, I currently have:
A=7
B=3
C=4
D=5
I should probably also allow negative values to test, since I am dyxlexic and often get things backwards.
Taking ideas is not a vice, it is a virtue. We have another word for this. It is called learning.
But sharing ideas is an even greater virtue. We have another word for this. It is called teaching.
User avatar
Nordlandia
Posts: 2833
Joined: Fri Sep 25, 2015 9:38 pm
Location: Sortland, Norway

Re: The bleeding edge Stockfish seems to have a tactical improvement

Post by Nordlandia »

Test position: White draws | r5k1/ppbNP1pb/3pR1p1/P1p1p1PK/1P2p3/1P2P3/6PP/2B5 w - - 0 1

[pgn][Event "?"]
[Site "?"]
[Date "????.??.??"]
[Round "?"]
[White "New game"]
[Black "?"]
[Result "*"]
[WhiteFideId "-1"]
[BlackFideId "-1"]
[SetUp "1"]
[FEN "r5k1/ppbNP1pb/3pR1p1/P1p1p1PK/1P2p3/1P2P3/6PP/2B5 w - - 0 1"]
[PlyCount "0"]
[GameId "2289682850335518"]

{[#]} *[/pgn]
peter
Posts: 3559
Joined: Sat Feb 16, 2008 7:38 am
Full name: Peter Martan

Re: The bleeding edge Stockfish seems to have a tactical improvement

Post by peter »

Nordlandia wrote: Fri Mar 20, 2026 8:43 am Test position: White draws | r5k1/ppbNP1pb/3pR1p1/P1p1p1PK/1P2p3/1P2P3/6PP/2B5 w - - 0 1
This Didukh- study is even some harder for engines, if 0.00- eval is demanded too, not only best first move(s), e.g Lc0 needs so "see" 10.Bh4 in main line to get drawing eval, even if 1.Kg4 is up at once, similiar case with SF dev (260307), this one getting it at 8.Nf8+, but then at least keeping 0.00 in hash jumping backwards to root position at once again.
[pgn][Event "sp.hm 12th World Cup FIDE 2025"]
[Site "; World Cup FIDE 2025"]
[Date "2025.??.??"]
[Round "?"]
[White "Didukh=S"]
[Black "(=0471.88h5g8) MR"]
[Result "1/2-1/2"]
[WhiteFideId "-1"]
[BlackFideId "-1"]
[SetUp "1"]
[FEN "r5k1/ppbNP1pb/3pR1p1/P1p1p1PK/1P2p3/1P2P3/6PP/2B5 w - - 0 1"]
[PlyCount "28"]
[GameId "2289692712260369"]
[EventDate "2025.??.??"]

{source: World Cup FIDE 2025} 1. Kg4 $1 (1. Rxg6 $2 Kf7 $1) (1. Kh4 $2 Kf7 $1 2. Nf8 cxb4 3. Bd2 Bxa5 4. Rxd6 Kxe7 5. Rd5 b6 6. Nxh7 Ke6 7. Rb5 a6) 1... Kf7 2. Nf8 cxb4 (2... Rxf8 3. exf8=Q+ Kxf8 4. bxc5 dxc5 5. Bb2 Kg8 6. Rxe5 $1) 3. Bd2 $1 (3. e8=Q+ $2 Rxe8 4. Rxe8 Kxe8 5. Nxh7 Kf7 6. h4 Kg8) 3... Bxa5 4. Rxd6 Kxe7 5. Rd5 $1 b6 6. Nxh7 Ke6 $1 7. Rb5 a6 8. Nf8+ $1 (8. Be1 $2 axb5 9. Nf8+ Kf7) 8... Rxf8 9. Be1 $1 axb5 (9... Rc8 {<main>} 10. Bh4 Rc2 11. g3 axb5 (11... Rxh2 12. Rxb6+ $1 Bxb6) 12. h3 Rc4 13. bxc4 b3 14. cxb5 Be1) 10. Bh4 $1 (10. h3 $2 Kd5 $1 11. Bh4 Rf4+ $1 12. exf4 exf4 13. Kxf4 Kd4 14. Be1 Kd3) 10... Rd8 (10... Kd5 11. g3 $1) 11. h3 $1 (11. g3 $2 Rd4 $1 12. exd4 Kd5 13. dxe5 (13. h3 e3 14. Kf3 Kxd4) 13... Kxe5) 11... Rd3 12. g3 Rd4 13. exd4 Kd5 14. dxe5 Kxe5 1/2-1/2
[/pgn]
Crystal 9 with 30 threads of 16x4.3GHz CPU, Syzygy ProbeLimit=0

r5k1/ppbNP1pb/3pR1p1/P1p1p1PK/1P2p3/1P2P3/6PP/2B5 w - - 0 1

Code: Select all

Analysis by Crystal 9:

1.Kg4 Kf7 2.Sf8 cxb4 3.Ld2 Lg8 4.Lxb4 Te8 5.h4 Txe7 6.Txe7+ Kxe7 7.Sxg6+ Ke8 8.Kf5 Lxb3 9.Sh8 b6 10.a6 Kf8 11.g4 
  Die Stellung ist ausgeglichen.  
  = (0.05)  Tiefe: 10/27   00:00:00
1.Kg4 Kf7 2.Sf8 cxb4 3.Ld2 Te8 4.Lxb4 Lg8 5.h4 Txe7 6.Txe7+ Kxe7 7.Sxg6+ Ke8 8.h5 Le6+ 9.Kh4 Kf7 10.Sh8+ Kg8 11.Sg6 
  Die Stellung ist ausgeglichen.  
  = (0.00)  Tiefe: 11/28   00:00:00
1.Kg4 Kf7 2.Sf8 cxb4 3.Ld2 Lg8 4.Lxb4 Te8 5.h4 Txe7 6.Txe7+ Kxe7 7.Sxg6+ Ke8 8.h5 Le6+ 9.Kh4 Kf7 10.Sh8+ Kg8 11.Sg6 
  Die Stellung ist ausgeglichen.  
  = (0.05)  Tiefe: 12/28   00:00:00
1.Kg4 Kf7 2.Sf8 cxb4 3.Ld2 Lg8 4.Lxb4 Te8 5.h4 Txe7 6.Txe7+ Kxe7 7.Sxg6+ Ke8 8.h5 Le6+ 9.Kh4 Kf7 10.Sh8+ Kf8 11.Sg6+ 
  Die Stellung ist ausgeglichen.  
  = (0.00)  Tiefe: 13/29   00:00:00  2718kN
1.Kg4 Kf7 2.Sf8 cxb4 3.Ld2 Lxa5 4.h4 Lg8 5.Txg6 Te8 6.Kh5 Txe7 7.Se6 Txe6 8.Txe6 Kxe6 9.Kg6 Ld8 10.Kxg7 Lf7 11.g4 Le8 12.Lxb4 d5 13.Lc5 
  Schwarz steht deutlich besser.  
  -+ (-2.45)  Tiefe: 14/36   00:00:00  30280kN
...
1.Kg4 Kf7 2.Sf8 cxb4 3.h4 Lg8 4.Ld2 Lxa5 5.Kh3 Ke8 6.Txg6 Kxe7 7.Txg7+ Kxf8 8.Txb7 Ld5 9.Th7 Tb8 10.h5 Tb7 11.Th8+ Kg7 12.Th6 Lf7 13.Kg4 Td7 14.Kh4 Td8 
  Schwarz hat entscheidenden Vorteil.  
  -+ (-2.85)  Tiefe: 16/42   00:00:01  93587kN
1.Kg4 Kf7 2.Sf8 cxb4 3.h4 Lg8 4.Txg6 Te8 5.Se6 Kxg6 6.h5+ Kf7 7.Sxc7 Txe7 8.Sb5 Td7 9.Sxa7 Ke6 10.Ld2 d5 11.Lxb4 d4 12.exd4 exd4 13.Kf4 Kd5 
  Schwarz hat entscheidenden Vorteil.  
  -+ (-3.00)  Tiefe: 17/42   00:00:02  126MN
...
1.Kg4 Kf7 2.Sf8 cxb4 3.h4 Lg8 4.h5 gxh5+ 5.Kf5 Lxa5 6.Sg6 Lh7 7.Txd6 Lc7 8.Te6 Te8 9.Lb2 Lxg6+ 10.Txg6 Txe7 11.Lc1 a6 12.Lb2 a5 13.La1 Kg8 14.g4 hxg4 15.Kxg4 
  Schwarz steht deutlich besser.  
  -+ (-2.25 ++)  Tiefe: 21/59   00:00:14  741MN
1.Kg4 Kf7 2.Sf8 cxb4 3.h4 Lg8 4.h5 gxh5+ 5.Kf5 Lxa5 6.Sg6 Lh7 7.Txd6 Lc7 8.Te6 Te8 9.Lb2 Lxg6+ 10.Txg6 Txe7 11.Lc1 a6 12.Lb2 a5 13.La1 Kg8 14.g4 hxg4 15.Kxg4 
  Schwarz steht deutlich besser.  
  -+ (-1.75 ++)  Tiefe: 21/59   00:00:14  742MN
1.Kg4 Kf7 2.Sf8 cxb4 3.h4 Lg8 4.h5 gxh5+ 5.Kf5 Lxa5 6.Sg6 Lh7 7.Txd6 Lc7 8.Te6 Te8 9.Lb2 Lxg6+ 10.Txg6 Txe7 11.Lc1 a6 12.Lb2 a5 13.La1 Kg8 14.g4 hxg4 15.Kxg4 
  Schwarz steht besser.  
  -/+ (-1.00 ++)  Tiefe: 21/59   00:00:14  743MN
1.Kg4 Kf7 2.Sf8 cxb4 3.Ld2 Lxa5 4.Txd6 Kxe7 5.Td5 b6 6.Sxh7 Ke6 7.Tb5 a6 8.Sf8+ Txf8 9.Le1 axb5 10.Lh4 Td8 11.h3 Td4 12.exd4 Kd5 13.dxe5 Kxe5 14.Lf2 e3 15.Lxe3 Ke4 16.Lf4 Kd3 17.h4 Kc3 18.h5 gxh5+ 19.Kxh5 Kxb3 20.Le5 Kc2 21.g6 b3 22.Lxg7 Lb4 23.g4 La3 24.Le5 b2 
  Die Stellung ist ausgeglichen.  
  = (-0.15)  Tiefe: 21/59   00:00:14  747MN
1.Kg4 Kf7 2.Sf8 cxb4 3.Ld2 Lxa5 4.Txd6 Kxe7 5.Td5 b6 6.Sxh7 Ke6 7.Tb5 a6 8.Sf8+ Txf8 9.Le1 axb5 10.Lh4 Td8 11.h3 Td4 12.exd4 Kd5 13.dxe5 Kxe5 14.Lf2 e3 15.Lxe3 Ke4 16.Lf4 Kd3 17.h4 Kc3 18.h5 gxh5+ 19.Kxh5 Kxb3 20.Le5 Kc2 21.g6 b3 22.Lxg7 Lb4 23.g4 La3 24.Le5 b2 
  Schwarz steht besser.  
  -/+ (-0.85 ++)  Tiefe: 22/33   00:00:14  749MN
...
1.Kg4 Kf7 2.Sf8 b6 3.axb6 axb6 4.La3 Lg8 5.bxc5 bxc5 6.h4 Tc8 7.b4 Ke8 8.Txg6 Kxe7 9.bxc5 Kxf8 10.cxd6 Kf7 11.h5 Ld8 12.d7 Tc2 13.Ta6 Txg2+ 14.Kh3 Txg5 15.Ta8 Tg1 
  Die Stellung ist ausgeglichen.  
  = (-0.05 ++)  Tiefe: 30/67   00:00:24  1169MN
1.Kg4 Kf7 2.Sf8 b6 3.axb6 axb6 4.La3 Lg8 5.bxc5 bxc5 6.h4 Tc8 7.b4 Ke8 8.Txg6 Kxe7 9.bxc5 Kxf8 10.cxd6 Kf7 11.h5 Ld8 12.d7 Tc2 13.Ta6 Txg2+ 14.Kh3 Txg5 15.Ta8 Tg1 
  Die Stellung ist ausgeglichen.  
  = (0.00 ++)  Tiefe: 30/67   00:00:25  1212MN
...
1.Kg4 Kf7 2.Sf8 b6 3.La3 Lg8 4.axb6 axb6 5.h4 Txf8 6.exf8D+ Kxf8 7.Txg6 Lh7 8.bxc5 Lxg6 9.cxd6 Ld8 10.d7+ Kg8 11.b4 Kf8 12.b5+ Kg8 13.Ld6 Lf7 14.Kf5 Lc4 15.g6 Lxb5 16.Ke6 Le2 17.Kf5 
  Die Stellung ist ausgeglichen.  
  = (0.00)  Tiefe: 39/43   00:00:45  1960MN
Deviating from main line with 2...b6 at latest output. A second one try took 9" and a third one 18" till 0.00 arrived for the first time, yet then as above needing some more time till staying stable on this one best eval, regards
Peter.
Dann Corbit
Posts: 12856
Joined: Wed Mar 08, 2006 8:57 pm
Location: Redmond, WA USA

Re: The bleeding edge Stockfish seems to have a tactical improvement

Post by Dann Corbit »

chrisw wrote: Fri Mar 20, 2026 6:26 am A windows compiler, such as VS, won’t allow the old C I/o stuff because it insists on defensive coding where the max size of buffer is DEFINED at compile time, and checked for overflow at run time. Other C compilers don’t insist and hence are prone to buffer overflow and subsequent unpredictable results. Like crash back to system etc.
It's not buffer overflow I am worried about. It is full buffering causing reads to be incorrectly interpreted. See the video "Understanding Buffer Flushing in C/C++: Preventing Incorrect File Outputs" for instance as an explanation of what I am trying to communicate.

If you run analysis of 1000 EPD positions in Arena at rapid speed (e.g. 10 seconds or less per position) somewhere in the output the engine and the GUI will become disconnected and the output becomes useless.
Here is sample output at a speed higher than I ever run, but it demonstrates the problem more easily:

Code: Select all

Analysis of G:\hardest.epd   
3/20/2026 3:35:28 AM Level: 1 Second
Analyzing engine: Stockfish_26031819_x64_avx2

 1 g6; id "TTT2.014";   
    Searching move: g5-g6
    Best move (Stockfish_26031819_x64_avx2): Kb1-b2
    Not found in: 00:01
   Found 747 WDL and 741 DTZ tablebase files (up to 7-man).
   Available processors: 0-31
   Using 31 threads
   NNUE evaluation using nn-9a0cc2a62c52.nnue (105MiB, (82672, 1024, 31, 32, 1))
   NNUE evaluation using nn-47fc8b7fff06.nnue (6MiB, (22528, 128, 15, 32, 1))
   Network replica 1: Shared memory.
     2/6	00:00	          6k	2,051k	-0.41	Kb2  Bxh5
     3/6	00:00	          8k	2,611k	-0.46	Kb2  Bxh5  Bxe5+  Kg8
     4/8	00:00	         10k	3,264k	-0.24	Kb2
     5/10	00:00	         19k	6,395k	-1.08	g6  Bxg6+  Kb2  Bxh5  Bxe5+  Ng7
     6/24	00:00	        274k	8,299k	-1.99	Kb2  Bxh5  Bxe5+  Ng7  Ne7  hxg5  Bxb3  Be8  Bc2  Qh6  Bd4  Qxh2  Ne4  Qe2  Bc3  g4  Kb1  Bf7
     7/21	00:00	        276k	8,356k	-1.93	Kb2  Bxh5  Bxe5+  Ng7  Ne7  hxg5  Bxb3  Be8  Bc2  Qh6  Bd4  Qxh2  Ne4  Qe2  Bc3  g4  Kb1  Qb5+  Ka2
     8/18	00:00	        279k	8,216k	-1.86	Kb2  Bxh5  Bxe5+  Ng7  Ne7  hxg5  Bxb3  Qh6
     9/21	00:00	        291k	8,557k	-2.02	Kb2  Bxh5  Bxe5+  Ng7  Ne7  hxg5  Bxb3  Be8  Bc2  Qh6  Bd4  Qxh2  Ne4  Qe2  Bc3  g4  Kb1  g3  Nxg3
    10/30	00:00	        787k	14,852k	-2.03	Kb2  Bxh5  Bxe5+  Ng7  Ne7  hxg5  Bxb3  Be8  h3  Bh5
    11/34	00:00	      1,525k	19,548k	-2.03	Kb2  Bxh5  Bxe5+  Ng7  Ne7  hxg5  Bxb3  g4  Bc3  Be8  Nxg4  Qe4  Ne5  Qb7  Ng8  Qg2+  Ka3  Qf2  Ng4  Qa7+  Kb2  Bf7  Bxf7  Qxf7
    12/31	00:00	      1,574k	19,674k	-2.11	Kb2  Bxh5  Bxe5+  Ng7  Ne7  hxg5  Bxb3  g4  Bc3  Be8  Nxg4  Qe4  Ne5  Qb7  Nd5  Ba4  Ng6+  Kh7  Nf8+  Kg8  Nf6+  Kxf8
    13/35	00:00	      2,933k	22,392k	-2.38	Kb2  Bxh5  Bxe5+  Ng7  Ne7  hxg5  Bxb3  g4  Bc3  Be8  Nxg4  Qe4  Ne5  Qa8
   3/20/2026 3:35:34 AM, Time for this analysis: 00:00:01, Rated time: 00:01

 2 b6; id "ACT1-B.157"; 
    Searching move: b5-b6
    Best move (Stockfish_26031819_x64_avx2): Be2-f1
    Not found in: 00:01
   Found 747 WDL and 741 DTZ tablebase files (up to 7-man).
   Available processors: 0-31
   Using 31 threads
   NNUE evaluation using nn-9a0cc2a62c52.nnue (105MiB, (82672, 1024, 31, 32, 1))
   NNUE evaluation using nn-47fc8b7fff06.nnue (6MiB, (22528, 128, 15, 32, 1))
   Network replica 1: Shared memory.
     2/6	00:00	         10k	4,937k	-2.27	Bf3
     3/4	00:00	         11k	5,605k	-2.02	Bf3  Bb6  Bd1
     4/8	00:00	         14k	6,820k	-2.15	Bd1  Bb6  Bh2  Bd8
     5/5	00:00	         16k	5,172k	-1.54	Bh2
     6/10	00:00	         18k	6,164k	-1.73	Bf1+  Kxg4  Be2+  Kxf5  Bd3+  Kxe6  Bxh7
     7/9	00:00	         21k	6,870k	-1.73	Bf1+  Kxg4  Be2+  Kxf5  Bd3+  Kxe6  Bxh7
     8/14	00:00	         45k	14,967k	-2.03	b6  Bxb6  Bxa7  Bd8  Bf2  Nh6  Be1  Nxg4
     9/15	00:00	         57k	14,305k	-1.79	Bf1+  Kxg4  Be2+  Kxf5  Bd3+  Kxe6  Bxh7  Nh6  Bxa7
    10/17	00:00	         84k	16,759k	-1.54	Bf1+  Kxg4  Be2+  Kxf5  Bd3+  Kxe6  Bxh7  Nh6  Bxa7  Nf7
    11/29	00:00	        149k	13,578k	-1.57	Bf1+  Kxg4  Be2+  Kxf5  Bd3+  Kxe6  Bxh7  Nh6  Bxa7  Kxd7  b6  f5  b7  Bc7  Be3  e6  Bxg5  Nf7  Bxh4  Nd6  Bf2  Nxb7  Bg8  Ke7
    12/34	00:00	        412k	16,471k	-1.59	Bf1+  Kxg4  Be2+  Kxf5  Bd3+  Kxe6  Bxh7  Nh6  Bxa7  f5  Be3  f4  b6  Kxd7  b7  Kc7  Bc5  e5  Be4  Kb8  Be7  g4  Bxh4  Bc7  Bf2
    13/32	00:00	        423k	16,918k	-1.68	Bf1+  Kxg4  Be2+  Kxf5  Bd3+  Kxe6  Bxh7  Nh6  Bxa7  Kxd7  b6  f5  b7  Bc7  Be3  e6  Bxg5  Nf7  Bf6
    14/33	00:00	        428k	17,120k	-1.61	Bf1+  Kxg4  Be2+  Kxf5  Bd3+  Kxe6  Bxh7  Nh6  Bxa7  Kxd7  b6  f5  b7  Bc7  Be3  e6  Bxg5  Nf7  Bxh4  Nd6  Kg2  Nxb7  Kf3
    15/45	00:00	      1,267k	19,795k	-1.63	Bf1+  Kxg4  Be2+  Kxf5  Bd3+  Kxe6  Bxh7  Nh6  Bxa7  Kxd7  b6  f5  b7  Bc7  Be3  e6  Bxg5  Nf7  Bxh4  Nd6  Bg5
   3/20/2026 3:35:36 AM, Time for this analysis: 00:00:01, Rated time: 00:02

 3 Ka7; id "ACT4.053";  
    Searching move: Kb8-a7
    Best move (Stockfish_26031819_x64_avx2): Kb8-a8
    Not found in: 00:01
   Found 747 WDL and 741 DTZ tablebase files (up to 7-man).
   Available processors: 0-31
   Using 31 threads
   NNUE evaluation using nn-9a0cc2a62c52.nnue (105MiB, (82672, 1024, 31, 32, 1))
   NNUE evaluation using nn-47fc8b7fff06.nnue (6MiB, (22528, 128, 15, 32, 1))
   Network replica 1: Shared memory.
     2/4	00:00	         560	560k	+3.85	Kxb7  Bd4  Kxb6
     3/6	00:00	          2k	2,356k	+3.34	Kxb7  Be5  Kxb6  Bh2  Kb7
     4/6	00:00	          4k	3,852k	+3.77	Kxb7  Be5  Kxb6  Bg3
     5/10	00:00	         18k	9,097k	+4.19	Kxb7  Be5  Kxb6  Bc7+  Kb7
     6/9	00:00	         20k	10,089k	+3.79	Kxb7  Be5  Kxb6  Bh2
     7/10	00:00	         23k	11,440k	+4.51	Kxb7  Be5  Kxb6  Bb8  Kb7  Bc7  Kc6  Bh2
     8/13	00:00	         49k	16,168k	+4.55	Kxb7  Bd4  Kxb6  Bb2  Ka6  Be5  b6
     9/14	00:00	         64k	21,338k	+4.24	Kxb7  Be5  Kc6  Bf6  Kxb6
    10/20	00:00	         98k	24,616k	+4.44	Kxb7  Bb2  Kxb6  Be5  Kc6  Bh2  Kb7  Bf4  b6
    11/12	00:00	        140k	27,982k	+4.26	Kxb7  Bc3  Kxb6  Be5
    12/22	00:00	        199k	28,476k	+4.25	Kxb7  Bc3  Kxb6  Ba5+  Kc6  Bc7  Kd5  Bh2  b6  Bb8  Kc6
    13/14	00:00	        320k	35,569k	+4.08	Kxb7  Be5  Kxb6  Bh2  Kc6  Bg3  Kd5
    14/22	00:00	        390k	35,422k	+4.02	Kxb7  Be5  Kxb6  Bc7+  Kc6  Bf4  b6
    15/27	00:00	      1,737k	44,536k	+3.55	Kxb7  Be5  Kxb6  Bd6  Ka6  Bb8  b6  Bc7  b7  Bb8  Kb6  Bc7+  Kb5
    16/32	00:00	      1,947k	45,276k	+3.51	Kxb7  Be5  Kxb6  Bc7+  Ka6  Be5  b6  Bc7
    17/29	00:00	      2,817k	46,954k	+3.41	Kxb7  Bd4  Kxb6  Be5  Kc6  Bg3  b6  Bc7  b7  Bh2  Kb6  Bc7+  Ka6  Bg3
    18/24	00:00	      3,105k	47,769k	+3.40	Kxb7  Bc3  Kxb6  Bf6  Ka7  Bc3  Ka6  Be5  b6  Bc7  b7  Bd6  g4
    19/37	00:00	      6,029k	47,101k	+4.15	Ka8  Bd4  Kxb7  Be5  Kxb6  Bc7+  Kxc5  Bf4  Kc6  Bg3  c5  Be5  Kd7  Bg3  c6  Bh2
    20/38	00:00	      6,840k	46,848k	+4.13	Ka8  Bd4  Kxb7  Be5  Kxb6  Bc7+  Kc6  Bg3  Kxc5  Bb8  Kd5  Bg3  c5  Bf4  Ke6  Bh2  c6  Bc7  g4
    21/40	00:00	      6,900k	46,938k	+4.13	Ka8  Bd4  Kxb7  Be5  Kxb6  Bd6  Kc6  Be5  Kxc5  Bb8  Kd5  Bd6  c5  Be5  c6  Bb8  Ke6  Bc7  Kf7  Bd6
    22/37	00:00	      7,311k	46,864k	+4.12	Ka8  Bd4  Kxb7  Be5  Kxb6  Bc7+  Kb7  Bh2  Kc6  Bd6  Kd5  Be5  Kxc5  Bh2  Kc6  Bg3  c5  Be5  Kb6  Bh2  Kb7  Bc7
    23/31	00:00	      7,632k	46,821k	+4.12	Ka8  Be5  Kxb7  Bg3  Kxb6  Bd6  Kc6  Be5  Kxc5  Bg3  Kd5  Bd6  c5  Be5  c6  Bb8  Ke6  Bc7  Kf7
    24/42	00:00	      8,600k	46,996k	+4.12	Ka8  Bd4  Kxb7  Be5  Kxb6  Bd6  Ka6  Bg3  Ka7  Bd6  Kb6  Bg3  Kb7  Be5  Kc6  Bg3  Kxc5  Bd6+  Kc6  Be5  c5  Bb8  Kd5
    25/41	00:00	      9,292k	46,930k	+4.12	Ka8  Bd4  Kxb7  Be5  Kxb6  Bd6  Kc6  Bg3  Kxc5  Bd6+  Kd5  Bc7  c5  Be5  c6  Bb8  Ke6  Bc7  Kd7  Be5  b6  Bc7  c4
    26/45	00:00	     10,032k	47,097k	+4.11	Ka8  Be5  Ka7  Bc7  Kxb7  Bg3  Kxb6  Bc7+  Kxc5  Bf4  Kc6  Bc7  Kd7  Bb8  c5  Be5  g4  Bh2  c6  Bb8  b6  Bg3  Ke6  Bc7  Kf7  Bb8  c4  Be5
   3/20/2026 3:35:38 AM, Time for this analysis: 00:00:01, Rated time: 00:03

 4 Rc2; id "TTT2.031";  
    Searching move: Rc5-c2
    Best move (Stockfish_26031819_x64_avx2): Kb8-a8
    Not found in: 00:01
   Stockfish_26031819_x64_avx2 by the Stockfish developers (see AUTHORS file), Italy
   3/20/2026 3:35:43 AM, Time for this analysis: 00:00:01, Rated time: 00:04

 5 Nd7; id "TTT2.086";  
    Searching move: Nc5-d7
    Best move (Stockfish_26031819_x64_avx2): Kb8-a8
    Not found in: 00:01
   Stockfish_26031819_x64_avx2 by the Stockfish developers (see AUTHORS file), Italy
   3/20/2026 3:35:48 AM, Time for this analysis: 00:00:01, Rated time: 00:05

 6 Qf3; id "ACT3.089";  
    Searching move: Qa3-f3
    Best move (Stockfish_26031819_x64_avx2): Kb8-a8
    Not found in: 00:01
   Stockfish_26031819_x64_avx2 by the Stockfish developers (see AUTHORS file), Italy
   3/20/2026 3:35:53 AM, Time for this analysis: 00:00:01, Rated time: 00:06

 7 Re4; id "TTT1.050";  
    Searching move: Re1-e4
    Best move (Stockfish_26031819_x64_avx2): Kb8-a8
    Not found in: 00:01
   Stockfish_26031819_x64_avx2 by the Stockfish developers (see AUTHORS file), Italy
   3/20/2026 3:35:58 AM, Time for this analysis: 00:00:01, Rated time: 00:07

By the 4th problem, we have lost our connection.
Now, the problem is exaggerated by using one second. If it were ten seconds, the disconnection is less probable, and by one minute it rarely happens, but does still happen on occasion. The big problem this creates is that I can't just stitch the problems set and the analysis together and use it. No matter what the time control, I have to analyze the pvs to ensure that they contain legal moves because sometimes the analysis is not just missing, it is connected to the prior problems.

I am often not very good at explaining myself, and I apologize for that.
Taking ideas is not a vice, it is a virtue. We have another word for this. It is called learning.
But sharing ideas is an even greater virtue. We have another word for this. It is called teaching.