docs(dashboard): add health-check reference section

This commit is contained in:
2026-08-24 10:18:43 +02:00
parent 08d1c44ca8
commit 12a0eca44a
2 changed files with 484 additions and 233 deletions
+427 -215
View File
@@ -1,7 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1400" height="1720" viewBox="0 0 1400 1720" font-family="sans-serif">
<rect width="1400" height="1720" fill="white"/>
<svg xmlns="http://www.w3.org/2000/svg" width="1400" height="1850" viewBox="0 0 1400 1850" font-family="sans-serif">
<rect width="1400" height="1850" fill="white"/>
<text x="700" y="32" text-anchor="middle" font-size="21" font-weight="bold">SAC-LSTM campaign dashboard - live run (current only)</text>
<text x="700" y="56" text-anchor="middle" font-size="12" fill="#555">generated 2026-08-24 09:24:45 - auto-reloads every 60 s (open this file in Chrome)</text>
<text x="700" y="56" text-anchor="middle" font-size="12" fill="#555">generated 2026-08-24 10:18:35 - auto-reloads every 60 s (open this file in Chrome)</text>
<text x="70" y="100" font-size="15" font-weight="bold">Test matches - win % vs opponents</text>
<text x="70" y="115" font-size="11" fill="#555">raw dots = single test matches, thick = rolling-mean-10</text>
<text x="70" y="133" font-size="12" font-style="italic" fill="#555">What: How often the bot wins against each opponent in test battles.</text>
@@ -17,34 +17,74 @@
<line x1="70" y1="784" x2="70" y2="184" stroke="black"/>
<line x1="70.0" y1="784" x2="70.0" y2="788" stroke="black"/>
<text x="70.0" y="801" text-anchor="middle" font-size="11">1</text>
<line x1="114.8" y1="784" x2="114.8" y2="788" stroke="black"/>
<text x="114.8" y="801" text-anchor="middle" font-size="11">2</text>
<line x1="159.6" y1="784" x2="159.6" y2="788" stroke="black"/>
<text x="159.6" y="801" text-anchor="middle" font-size="11">3</text>
<line x1="204.4" y1="784" x2="204.4" y2="788" stroke="black"/>
<text x="204.4" y="801" text-anchor="middle" font-size="11">4</text>
<line x1="249.1" y1="784" x2="249.1" y2="788" stroke="black"/>
<text x="249.1" y="801" text-anchor="middle" font-size="11">5</text>
<line x1="293.9" y1="784" x2="293.9" y2="788" stroke="black"/>
<text x="293.9" y="801" text-anchor="middle" font-size="11">6</text>
<line x1="338.7" y1="784" x2="338.7" y2="788" stroke="black"/>
<text x="338.7" y="801" text-anchor="middle" font-size="11">7</text>
<line x1="88.4" y1="784" x2="88.4" y2="788" stroke="black"/>
<text x="88.4" y="801" text-anchor="middle" font-size="11">2</text>
<line x1="106.9" y1="784" x2="106.9" y2="788" stroke="black"/>
<text x="106.9" y="801" text-anchor="middle" font-size="11">3</text>
<line x1="125.3" y1="784" x2="125.3" y2="788" stroke="black"/>
<text x="125.3" y="801" text-anchor="middle" font-size="11">4</text>
<line x1="143.8" y1="784" x2="143.8" y2="788" stroke="black"/>
<text x="143.8" y="801" text-anchor="middle" font-size="11">5</text>
<line x1="162.2" y1="784" x2="162.2" y2="788" stroke="black"/>
<text x="162.2" y="801" text-anchor="middle" font-size="11">6</text>
<line x1="180.6" y1="784" x2="180.6" y2="788" stroke="black"/>
<text x="180.6" y="801" text-anchor="middle" font-size="11">7</text>
<line x1="199.1" y1="784" x2="199.1" y2="788" stroke="black"/>
<text x="199.1" y="801" text-anchor="middle" font-size="11">8</text>
<line x1="217.5" y1="784" x2="217.5" y2="788" stroke="black"/>
<text x="217.5" y="801" text-anchor="middle" font-size="11">9</text>
<line x1="236.0" y1="784" x2="236.0" y2="788" stroke="black"/>
<text x="236.0" y="801" text-anchor="middle" font-size="11">10</text>
<line x1="254.4" y1="784" x2="254.4" y2="788" stroke="black"/>
<text x="254.4" y="801" text-anchor="middle" font-size="11">11</text>
<line x1="272.9" y1="784" x2="272.9" y2="788" stroke="black"/>
<text x="272.9" y="801" text-anchor="middle" font-size="11">12</text>
<line x1="291.3" y1="784" x2="291.3" y2="788" stroke="black"/>
<text x="291.3" y="801" text-anchor="middle" font-size="11">13</text>
<line x1="309.7" y1="784" x2="309.7" y2="788" stroke="black"/>
<text x="309.7" y="801" text-anchor="middle" font-size="11">14</text>
<line x1="328.2" y1="784" x2="328.2" y2="788" stroke="black"/>
<text x="328.2" y="801" text-anchor="middle" font-size="11">15</text>
<line x1="346.6" y1="784" x2="346.6" y2="788" stroke="black"/>
<text x="346.6" y="801" text-anchor="middle" font-size="11">16</text>
<line x1="365.1" y1="784" x2="365.1" y2="788" stroke="black"/>
<text x="365.1" y="801" text-anchor="middle" font-size="11">17</text>
<line x1="383.5" y1="784" x2="383.5" y2="788" stroke="black"/>
<text x="383.5" y="801" text-anchor="middle" font-size="11">8</text>
<line x1="428.3" y1="784" x2="428.3" y2="788" stroke="black"/>
<text x="428.3" y="801" text-anchor="middle" font-size="11">9</text>
<line x1="473.1" y1="784" x2="473.1" y2="788" stroke="black"/>
<text x="473.1" y="801" text-anchor="middle" font-size="11">10</text>
<line x1="517.9" y1="784" x2="517.9" y2="788" stroke="black"/>
<text x="517.9" y="801" text-anchor="middle" font-size="11">11</text>
<line x1="562.6" y1="784" x2="562.6" y2="788" stroke="black"/>
<text x="562.6" y="801" text-anchor="middle" font-size="11">12</text>
<line x1="607.4" y1="784" x2="607.4" y2="788" stroke="black"/>
<text x="607.4" y="801" text-anchor="middle" font-size="11">13</text>
<line x1="652.2" y1="784" x2="652.2" y2="788" stroke="black"/>
<text x="652.2" y="801" text-anchor="middle" font-size="11">14</text>
<text x="383.5" y="801" text-anchor="middle" font-size="11">18</text>
<line x1="401.9" y1="784" x2="401.9" y2="788" stroke="black"/>
<text x="401.9" y="801" text-anchor="middle" font-size="11">19</text>
<line x1="420.4" y1="784" x2="420.4" y2="788" stroke="black"/>
<text x="420.4" y="801" text-anchor="middle" font-size="11">20</text>
<line x1="438.8" y1="784" x2="438.8" y2="788" stroke="black"/>
<text x="438.8" y="801" text-anchor="middle" font-size="11">21</text>
<line x1="457.3" y1="784" x2="457.3" y2="788" stroke="black"/>
<text x="457.3" y="801" text-anchor="middle" font-size="11">22</text>
<line x1="475.7" y1="784" x2="475.7" y2="788" stroke="black"/>
<text x="475.7" y="801" text-anchor="middle" font-size="11">23</text>
<line x1="494.1" y1="784" x2="494.1" y2="788" stroke="black"/>
<text x="494.1" y="801" text-anchor="middle" font-size="11">24</text>
<line x1="512.6" y1="784" x2="512.6" y2="788" stroke="black"/>
<text x="512.6" y="801" text-anchor="middle" font-size="11">25</text>
<line x1="531.0" y1="784" x2="531.0" y2="788" stroke="black"/>
<text x="531.0" y="801" text-anchor="middle" font-size="11">26</text>
<line x1="549.5" y1="784" x2="549.5" y2="788" stroke="black"/>
<text x="549.5" y="801" text-anchor="middle" font-size="11">27</text>
<line x1="567.9" y1="784" x2="567.9" y2="788" stroke="black"/>
<text x="567.9" y="801" text-anchor="middle" font-size="11">28</text>
<line x1="586.4" y1="784" x2="586.4" y2="788" stroke="black"/>
<text x="586.4" y="801" text-anchor="middle" font-size="11">29</text>
<line x1="604.8" y1="784" x2="604.8" y2="788" stroke="black"/>
<text x="604.8" y="801" text-anchor="middle" font-size="11">30</text>
<line x1="623.2" y1="784" x2="623.2" y2="788" stroke="black"/>
<text x="623.2" y="801" text-anchor="middle" font-size="11">31</text>
<line x1="641.7" y1="784" x2="641.7" y2="788" stroke="black"/>
<text x="641.7" y="801" text-anchor="middle" font-size="11">32</text>
<line x1="660.1" y1="784" x2="660.1" y2="788" stroke="black"/>
<text x="660.1" y="801" text-anchor="middle" font-size="11">33</text>
<line x1="678.6" y1="784" x2="678.6" y2="788" stroke="black"/>
<text x="678.6" y="801" text-anchor="middle" font-size="11">34</text>
<line x1="697.0" y1="784" x2="697.0" y2="788" stroke="black"/>
<text x="697.0" y="801" text-anchor="middle" font-size="11">15</text>
<text x="697.0" y="801" text-anchor="middle" font-size="11">35</text>
<line x1="66" y1="784.0" x2="70" y2="784.0" stroke="black"/>
<text x="63" y="788.0" text-anchor="end" font-size="11">0</text>
<line x1="66" y1="664.0" x2="70" y2="664.0" stroke="black"/>
@@ -60,59 +100,119 @@
<text x="383" y="817" text-anchor="middle" font-size="12">test match number (each opponent)</text>
<text x="16" y="484" text-anchor="middle" font-size="12" transform="rotate(-90 16 484)">win rate (%)</text>
<circle cx="70.0" cy="784.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="114.8" cy="784.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="159.6" cy="784.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="204.4" cy="784.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="249.1" cy="784.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="293.9" cy="784.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="338.7" cy="784.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="88.4" cy="784.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="106.9" cy="784.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="125.3" cy="784.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="143.8" cy="784.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="162.2" cy="784.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="180.6" cy="784.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="199.1" cy="784.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="217.5" cy="784.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="236.0" cy="784.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="254.4" cy="784.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="272.9" cy="724.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="291.3" cy="784.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="309.7" cy="784.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="328.2" cy="784.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="346.6" cy="724.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="365.1" cy="784.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="383.5" cy="784.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="428.3" cy="784.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="473.1" cy="784.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="517.9" cy="784.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="562.6" cy="724.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="607.4" cy="784.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="652.2" cy="784.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="401.9" cy="784.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="420.4" cy="784.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="438.8" cy="784.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="457.3" cy="784.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="475.7" cy="724.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="494.1" cy="784.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="512.6" cy="784.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="531.0" cy="604.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="549.5" cy="784.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="567.9" cy="784.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="586.4" cy="784.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="604.8" cy="784.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="623.2" cy="604.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="641.7" cy="784.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="660.1" cy="784.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="678.6" cy="784.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="697.0" cy="784.0" r="2" fill="#d62728" opacity="0.25"/>
<polyline points="70.0,784.0 114.8,784.0 159.6,784.0 204.4,784.0 249.1,784.0 293.9,784.0 338.7,784.0 383.5,784.0 428.3,784.0 473.1,784.0 517.9,784.0 562.6,778.0 607.4,778.0 652.2,778.0 697.0,778.0" fill="none" stroke="#d62728" stroke-width="3.5" opacity="1.0"/>
<polyline points="70.0,784.0 88.4,784.0 106.9,784.0 125.3,784.0 143.8,784.0 162.2,784.0 180.6,784.0 199.1,784.0 217.5,784.0 236.0,784.0 254.4,784.0 272.9,778.0 291.3,778.0 309.7,778.0 328.2,778.0 346.6,772.0 365.1,772.0 383.5,772.0 401.9,772.0 420.4,772.0 438.8,772.0 457.3,778.0 475.7,772.0 494.1,772.0 512.6,772.0 531.0,760.0 549.5,760.0 567.9,760.0 586.4,760.0 604.8,760.0 623.2,742.0 641.7,742.0 660.1,748.0 678.6,748.0 697.0,748.0" fill="none" stroke="#d62728" stroke-width="3.5" opacity="1.0"/>
<circle cx="70.0" cy="784.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="114.8" cy="784.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="159.6" cy="784.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="204.4" cy="784.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="249.1" cy="784.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="293.9" cy="784.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="338.7" cy="784.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="88.4" cy="784.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="106.9" cy="784.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="125.3" cy="784.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="143.8" cy="784.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="162.2" cy="784.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="180.6" cy="784.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="199.1" cy="784.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="217.5" cy="784.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="236.0" cy="784.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="254.4" cy="784.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="272.9" cy="544.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="291.3" cy="304.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="309.7" cy="724.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="328.2" cy="364.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="346.6" cy="184.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="365.1" cy="784.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="383.5" cy="784.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="428.3" cy="784.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="473.1" cy="784.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="517.9" cy="784.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="562.6" cy="544.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="607.4" cy="304.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="652.2" cy="724.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="697.0" cy="364.0" r="2" fill="#1f77b4" opacity="0.25"/>
<polyline points="70.0,784.0 114.8,784.0 159.6,784.0 204.4,784.0 249.1,784.0 293.9,784.0 338.7,784.0 383.5,784.0 428.3,784.0 473.1,784.0 517.9,784.0 562.6,760.0 607.4,712.0 652.2,706.0 697.0,664.0" fill="none" stroke="#1f77b4" stroke-width="3.5" opacity="1.0"/>
<circle cx="401.9" cy="784.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="420.4" cy="724.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="438.8" cy="364.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="457.3" cy="784.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="475.7" cy="184.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="494.1" cy="664.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="512.6" cy="544.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="531.0" cy="304.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="549.5" cy="304.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="567.9" cy="484.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="586.4" cy="664.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="604.8" cy="784.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="623.2" cy="724.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="641.7" cy="784.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="660.1" cy="784.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="678.6" cy="364.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="697.0" cy="784.0" r="2" fill="#1f77b4" opacity="0.25"/>
<polyline points="70.0,784.0 88.4,784.0 106.9,784.0 125.3,784.0 143.8,784.0 162.2,784.0 180.6,784.0 199.1,784.0 217.5,784.0 236.0,784.0 254.4,784.0 272.9,760.0 291.3,712.0 309.7,706.0 328.2,664.0 346.6,604.0 365.1,604.0 383.5,604.0 401.9,604.0 420.4,598.0 438.8,556.0 457.3,580.0 475.7,568.0 494.1,562.0 512.6,580.0 531.0,592.0 549.5,544.0 567.9,514.0 586.4,502.0 604.8,508.0 623.2,544.0 641.7,544.0 660.1,604.0 678.6,574.0 697.0,598.0" fill="none" stroke="#1f77b4" stroke-width="3.5" opacity="1.0"/>
<circle cx="70.0" cy="784.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="114.8" cy="784.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="159.6" cy="784.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="204.4" cy="784.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="249.1" cy="784.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="293.9" cy="784.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="338.7" cy="784.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="383.5" cy="784.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="428.3" cy="784.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="473.1" cy="784.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="517.9" cy="784.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="562.6" cy="784.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="607.4" cy="784.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="652.2" cy="724.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="697.0" cy="544.0" r="2" fill="#2ca02c" opacity="0.25"/>
<polyline points="70.0,784.0 114.8,784.0 159.6,784.0 204.4,784.0 249.1,784.0 293.9,784.0 338.7,784.0 383.5,784.0 428.3,784.0 473.1,784.0 517.9,784.0 562.6,784.0 607.4,784.0 652.2,778.0 697.0,754.0" fill="none" stroke="#2ca02c" stroke-width="3.5" opacity="1.0"/>
<circle cx="88.4" cy="784.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="106.9" cy="784.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="125.3" cy="784.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="143.8" cy="784.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="162.2" cy="784.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="180.6" cy="784.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="199.1" cy="784.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="217.5" cy="784.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="236.0" cy="784.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="254.4" cy="784.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="272.9" cy="784.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="291.3" cy="784.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="309.7" cy="724.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="328.2" cy="544.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="346.6" cy="784.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="365.1" cy="244.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="383.5" cy="604.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="401.9" cy="784.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="420.4" cy="784.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="438.8" cy="724.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="457.3" cy="784.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="475.7" cy="784.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="494.1" cy="184.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="512.6" cy="784.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="531.0" cy="544.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="549.5" cy="784.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="567.9" cy="784.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="586.4" cy="784.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="604.8" cy="364.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="623.2" cy="784.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="641.7" cy="604.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="660.1" cy="784.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="678.6" cy="724.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="697.0" cy="784.0" r="2" fill="#2ca02c" opacity="0.25"/>
<polyline points="70.0,784.0 88.4,784.0 106.9,784.0 125.3,784.0 143.8,784.0 162.2,784.0 180.6,784.0 199.1,784.0 217.5,784.0 236.0,784.0 254.4,784.0 272.9,784.0 291.3,784.0 309.7,778.0 328.2,754.0 346.6,754.0 365.1,700.0 383.5,682.0 401.9,682.0 420.4,682.0 438.8,676.0 457.3,676.0 475.7,676.0 494.1,622.0 512.6,646.0 531.0,622.0 549.5,676.0 567.9,694.0 586.4,694.0 604.8,652.0 623.2,658.0 641.7,640.0 660.1,640.0 678.6,694.0 697.0,694.0" fill="none" stroke="#2ca02c" stroke-width="3.5" opacity="1.0"/>
<line x1="82" y1="836" x2="110" y2="836" stroke="#d62728" stroke-width="3"/>
<text x="116" y="840" font-size="12">Corners - 15 evals</text>
<text x="116" y="840" font-size="12">Corners - 35 evals</text>
<line x1="82" y1="854" x2="110" y2="854" stroke="#1f77b4" stroke-width="3"/>
<text x="116" y="858" font-size="12">Crazy - 15 evals</text>
<text x="116" y="858" font-size="12">Crazy - 35 evals</text>
<line x1="82" y1="872" x2="110" y2="872" stroke="#2ca02c" stroke-width="3"/>
<text x="116" y="876" font-size="12">Target - 15 evals</text>
<text x="116" y="876" font-size="12">Target - 35 evals</text>
<text x="747" y="100" font-size="15" font-weight="bold">Training losses (log) &amp; alpha (linear)</text>
<text x="747" y="115" font-size="11" fill="#555">training_metrics.jsonl - big early spikes are normal</text>
<text x="747" y="133" font-size="12" font-style="italic" fill="#555">What: How well the brain is learning: losses should fall; alpha sets explore/exploit.</text>
@@ -128,13 +228,13 @@
<line x1="747.0" y1="784" x2="747.0" y2="788" stroke="black"/>
<text x="747.0" y="801" text-anchor="middle" font-size="11">1</text>
<line x1="892.5" y1="784" x2="892.5" y2="788" stroke="black"/>
<text x="892.5" y="801" text-anchor="middle" font-size="11">9</text>
<text x="892.5" y="801" text-anchor="middle" font-size="11">19</text>
<line x1="1038.0" y1="784" x2="1038.0" y2="788" stroke="black"/>
<text x="1038.0" y="801" text-anchor="middle" font-size="11">16</text>
<text x="1038.0" y="801" text-anchor="middle" font-size="11">36</text>
<line x1="1183.5" y1="784" x2="1183.5" y2="788" stroke="black"/>
<text x="1183.5" y="801" text-anchor="middle" font-size="11">24</text>
<text x="1183.5" y="801" text-anchor="middle" font-size="11">54</text>
<line x1="1329.0" y1="784" x2="1329.0" y2="788" stroke="black"/>
<text x="1329.0" y="801" text-anchor="middle" font-size="11">32</text>
<text x="1329.0" y="801" text-anchor="middle" font-size="11">72</text>
<line x1="743" y1="784.0" x2="747" y2="784.0" stroke="black"/>
<text x="740" y="788.0" text-anchor="end" font-size="11">0.01</text>
<line x1="743" y1="634.0" x2="747" y2="634.0" stroke="black"/>
@@ -147,8 +247,8 @@
<text x="740" y="188.0" text-anchor="end" font-size="11">100</text>
<text x="1038" y="817" text-anchor="middle" font-size="12">metric line number</text>
<text x="16" y="484" text-anchor="middle" font-size="12" transform="rotate(-90 16 484)">loss (log)</text>
<polyline points="747.0,345.9 765.8,317.6 784.5,307.9 803.3,277.5 822.1,271.6 840.9,450.8 859.6,488.4 878.4,371.1 897.2,357.6 916.0,346.6 934.7,306.7 953.5,235.4 972.3,222.6 991.1,233.7 1009.8,255.2 1028.6,317.6 1047.4,391.8 1066.2,689.2 1084.9,570.4 1103.7,438.2 1122.5,489.9 1141.3,415.1 1160.0,421.9 1178.8,394.0 1197.6,315.4 1216.4,403.4 1235.1,395.4 1253.9,347.3 1272.7,384.4 1291.5,403.4 1310.2,359.6 1329.0,281.5" fill="none" stroke="#1f77b4" stroke-width="1.8" opacity="1.0"/>
<polyline points="747.0,412.9 765.8,371.9 784.5,348.5 803.3,325.3 822.1,308.2 840.9,299.2 859.6,300.5 878.4,305.4 897.2,334.7 916.0,356.4 934.7,442.9 953.5,366.9 972.3,341.7 991.1,328.4 1009.8,318.8 1028.6,310.5 1047.4,306.0 1066.2,315.8 1084.9,326.0 1103.7,337.4 1122.5,359.3 1141.3,391.5 1160.0,399.9 1178.8,502.0 1197.6,464.5 1216.4,564.9 1235.1,454.5 1253.9,393.2 1272.7,380.2 1291.5,375.3 1310.2,353.3 1329.0,352.2" fill="none" stroke="#ff7f0e" stroke-width="1.8" opacity="1.0"/>
<polyline points="747.0,345.9 755.2,317.6 763.4,307.9 771.6,277.5 779.8,271.6 788.0,450.8 796.2,488.4 804.4,371.1 812.6,357.6 820.8,346.6 829.0,306.7 837.2,235.4 845.4,222.6 853.6,233.7 861.8,255.2 870.0,317.6 878.2,391.8 886.4,689.2 894.5,570.4 902.7,438.2 910.9,489.9 919.1,415.1 927.3,421.9 935.5,394.0 943.7,315.4 951.9,403.4 960.1,395.4 968.3,347.3 976.5,384.4 984.7,403.4 992.9,359.6 1001.1,281.5 1009.3,479.1 1017.5,530.4 1025.7,598.4 1033.9,352.1 1042.1,326.5 1050.3,473.0 1058.5,506.0 1066.7,331.4 1074.9,746.1 1083.1,663.4 1091.3,420.9 1099.5,617.1 1107.7,361.8 1115.9,514.9 1124.1,377.6 1132.3,387.0 1140.5,361.7 1148.7,357.1 1156.9,327.5 1165.1,392.5 1173.3,519.5 1181.5,436.0 1189.6,399.4 1197.8,385.9 1206.0,493.5 1214.2,483.4 1222.4,456.3 1230.6,575.1 1238.8,672.1 1247.0,312.5 1255.2,463.3 1263.4,745.8 1271.6,554.2 1279.8,381.5 1288.0,301.5 1296.2,292.7 1304.4,241.6 1312.6,212.1 1320.8,234.2 1329.0,302.6" fill="none" stroke="#1f77b4" stroke-width="1.8" opacity="1.0"/>
<polyline points="747.0,412.9 755.2,371.9 763.4,348.5 771.6,325.3 779.8,308.2 788.0,299.2 796.2,300.5 804.4,305.4 812.6,334.7 820.8,356.4 829.0,442.9 837.2,366.9 845.4,341.7 853.6,328.4 861.8,318.8 870.0,310.5 878.2,306.0 886.4,315.8 894.5,326.0 902.7,337.4 910.9,359.3 919.1,391.5 927.3,399.9 935.5,502.0 943.7,464.5 951.9,564.9 960.1,454.5 968.3,393.2 976.5,380.2 984.7,375.3 992.9,353.3 1001.1,352.2 1009.3,342.8 1017.5,351.9 1025.7,358.7 1033.9,379.5 1042.1,402.3 1050.3,418.8 1058.5,438.0 1066.7,431.7 1074.9,426.7 1083.1,406.5 1091.3,442.8 1099.5,458.7 1107.7,415.4 1115.9,407.0 1124.1,581.8 1132.3,551.6 1140.5,459.8 1148.7,385.5 1156.9,362.4 1165.1,365.9 1173.3,376.3 1181.5,404.8 1189.6,450.3 1197.8,486.9 1206.0,443.9 1214.2,409.7 1222.4,397.8 1230.6,393.6 1238.8,374.2 1247.0,374.4 1255.2,379.7 1263.4,396.1 1271.6,477.0 1279.8,386.3 1288.0,351.8 1296.2,344.7 1304.4,319.0 1312.6,303.7 1320.8,292.7 1329.0,291.1" fill="none" stroke="#ff7f0e" stroke-width="1.8" opacity="1.0"/>
<line x1="747" y1="784.0" x2="1329" y2="784.0" stroke="#e9dcf5"/>
<line x1="747" y1="634.0" x2="1329" y2="634.0" stroke="#e9dcf5"/>
<line x1="747" y1="484.0" x2="1329" y2="484.0" stroke="#e9dcf5"/>
@@ -166,7 +266,7 @@
<line x1="1329" y1="184.0" x2="1333" y2="184.0" stroke="#9467bd"/>
<text x="1336" y="188.0" font-size="11" fill="#9467bd">1</text>
<text x="1346" y="484" text-anchor="middle" font-size="12" fill="#9467bd" transform="rotate(90 1346 484)">alpha</text>
<polyline points="747.0,184.2 765.8,184.9 784.5,185.6 803.3,186.3 822.1,187.1 840.9,187.8 859.6,188.1 878.4,188.5 897.2,189.2 916.0,189.6 934.7,190.3 953.5,190.9 972.3,190.1 991.1,189.4 1009.8,188.7 1028.6,188.0 1047.4,187.3 1066.2,186.6 1084.9,185.9 1103.7,185.2 1122.5,185.7 1141.3,186.4 1160.0,187.2 1178.8,187.9 1197.6,188.6 1216.4,190.0 1235.1,190.7 1253.9,191.4 1272.7,192.1 1291.5,192.5 1310.2,192.4 1329.0,192.1" fill="none" stroke="#9467bd" stroke-width="1.8" opacity="1.0"/>
<polyline points="747.0,184.2 755.2,184.9 763.4,185.6 771.6,186.3 779.8,187.1 788.0,187.8 796.2,188.1 804.4,188.5 812.6,189.2 820.8,189.6 829.0,190.3 837.2,190.9 845.4,190.1 853.6,189.4 861.8,188.7 870.0,188.0 878.2,187.3 886.4,186.6 894.5,185.9 902.7,185.2 910.9,185.7 919.1,186.4 927.3,187.2 935.5,187.9 943.7,188.6 951.9,190.0 960.1,190.7 968.3,191.4 976.5,192.1 984.7,192.5 992.9,192.4 1001.1,192.1 1009.3,191.7 1017.5,191.6 1025.7,192.4 1033.9,193.1 1042.1,193.4 1050.3,194.1 1058.5,194.5 1066.7,195.0 1074.9,195.4 1083.1,196.1 1091.3,196.4 1099.5,197.1 1107.7,197.8 1115.9,198.2 1124.1,198.9 1132.3,199.2 1140.5,199.9 1148.7,200.6 1156.9,200.6 1165.1,200.3 1173.3,200.8 1181.5,201.2 1189.6,201.9 1197.8,202.6 1206.0,203.3 1214.2,204.0 1222.4,204.7 1230.6,205.4 1238.8,206.1 1247.0,206.4 1255.2,207.1 1263.4,207.8 1271.6,208.7 1279.8,209.8 1288.0,209.8 1296.2,209.5 1304.4,208.8 1312.6,208.3 1320.8,207.3 1329.0,206.6" fill="none" stroke="#9467bd" stroke-width="1.8" opacity="1.0"/>
<line x1="759" y1="836" x2="787" y2="836" stroke="#1f77b4" stroke-width="3"/>
<text x="793" y="840" font-size="12">critic_loss</text>
<line x1="759" y1="854" x2="787" y2="854" stroke="#ff7f0e" stroke-width="3"/>
@@ -185,26 +285,26 @@
<line x1="70" y1="1024.0" x2="697" y2="1024.0" stroke="#dddddd"/>
<line x1="70" y1="1494" x2="697" y2="1494" stroke="black"/>
<line x1="70" y1="1494" x2="70" y2="1024" stroke="black"/>
<line x1="111.8" y1="1494" x2="111.8" y2="1498" stroke="black"/>
<text x="111.8" y="1511" text-anchor="middle" font-size="11">3</text>
<line x1="174.5" y1="1494" x2="174.5" y2="1498" stroke="black"/>
<text x="174.5" y="1511" text-anchor="middle" font-size="11">6</text>
<line x1="237.2" y1="1494" x2="237.2" y2="1498" stroke="black"/>
<text x="237.2" y="1511" text-anchor="middle" font-size="11">9</text>
<line x1="299.9" y1="1494" x2="299.9" y2="1498" stroke="black"/>
<text x="299.9" y="1511" text-anchor="middle" font-size="11">12</text>
<line x1="362.6" y1="1494" x2="362.6" y2="1498" stroke="black"/>
<text x="362.6" y="1511" text-anchor="middle" font-size="11">15</text>
<line x1="425.3" y1="1494" x2="425.3" y2="1498" stroke="black"/>
<text x="425.3" y="1511" text-anchor="middle" font-size="11">18</text>
<line x1="488.0" y1="1494" x2="488.0" y2="1498" stroke="black"/>
<text x="488.0" y="1511" text-anchor="middle" font-size="11">21</text>
<line x1="550.7" y1="1494" x2="550.7" y2="1498" stroke="black"/>
<text x="550.7" y="1511" text-anchor="middle" font-size="11">24</text>
<line x1="613.4" y1="1494" x2="613.4" y2="1498" stroke="black"/>
<text x="613.4" y="1511" text-anchor="middle" font-size="11">27</text>
<line x1="676.1" y1="1494" x2="676.1" y2="1498" stroke="black"/>
<text x="676.1" y="1511" text-anchor="middle" font-size="11">30</text>
<line x1="123.7" y1="1494" x2="123.7" y2="1498" stroke="black"/>
<text x="123.7" y="1511" text-anchor="middle" font-size="11">7</text>
<line x1="186.4" y1="1494" x2="186.4" y2="1498" stroke="black"/>
<text x="186.4" y="1511" text-anchor="middle" font-size="11">14</text>
<line x1="249.1" y1="1494" x2="249.1" y2="1498" stroke="black"/>
<text x="249.1" y="1511" text-anchor="middle" font-size="11">21</text>
<line x1="311.8" y1="1494" x2="311.8" y2="1498" stroke="black"/>
<text x="311.8" y="1511" text-anchor="middle" font-size="11">28</text>
<line x1="374.5" y1="1494" x2="374.5" y2="1498" stroke="black"/>
<text x="374.5" y="1511" text-anchor="middle" font-size="11">35</text>
<line x1="437.2" y1="1494" x2="437.2" y2="1498" stroke="black"/>
<text x="437.2" y="1511" text-anchor="middle" font-size="11">42</text>
<line x1="499.9" y1="1494" x2="499.9" y2="1498" stroke="black"/>
<text x="499.9" y="1511" text-anchor="middle" font-size="11">49</text>
<line x1="562.6" y1="1494" x2="562.6" y2="1498" stroke="black"/>
<text x="562.6" y="1511" text-anchor="middle" font-size="11">56</text>
<line x1="625.3" y1="1494" x2="625.3" y2="1498" stroke="black"/>
<text x="625.3" y="1511" text-anchor="middle" font-size="11">63</text>
<line x1="688.0" y1="1494" x2="688.0" y2="1498" stroke="black"/>
<text x="688.0" y="1511" text-anchor="middle" font-size="11">70</text>
<line x1="66" y1="1494.0" x2="70" y2="1494.0" stroke="black"/>
<text x="63" y="1498.0" text-anchor="end" font-size="11">0</text>
<line x1="66" y1="1376.5" x2="70" y2="1376.5" stroke="black"/>
@@ -218,37 +318,77 @@
<text x="383" y="1527" text-anchor="middle" font-size="12">chunk interval (10-game chunks)</text>
<text x="16" y="1259" text-anchor="middle" font-size="12" transform="rotate(-90 16 1259)">games / hour</text>
<circle cx="70.0" cy="1225.8" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="90.9" cy="1479.4" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="111.8" cy="1214.0" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="132.7" cy="1470.7" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="153.6" cy="1219.6" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="174.5" cy="1465.6" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="195.4" cy="1066.7" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="216.3" cy="1465.5" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="237.2" cy="1087.4" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="258.1" cy="1460.8" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="279.0" cy="1442.2" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="299.9" cy="1460.4" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="320.8" cy="1196.1" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="341.7" cy="1465.7" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="362.6" cy="1242.5" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="383.5" cy="1468.0" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="404.4" cy="1224.0" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="425.3" cy="1466.0" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="446.2" cy="1215.2" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="467.1" cy="1466.6" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="488.0" cy="1237.7" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="508.9" cy="1471.2" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="529.8" cy="1228.2" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="550.7" cy="1482.5" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="571.6" cy="1441.5" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="592.5" cy="1481.7" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="613.4" cy="1228.0" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="634.3" cy="1481.1" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="655.2" cy="1141.1" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="676.1" cy="1481.6" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="697.0" cy="1141.2" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<polyline points="70.0,1352.6 90.9,1342.3 132.7,1342.6 153.6,1266.1 195.4,1274.1 237.2,1451.3 258.1,1330.9 299.9,1355.2 320.8,1345.0 362.6,1340.9 383.5,1354.5 425.3,1228.2 446.2,1482.5 488.0,1441.5 508.9,1481.7 550.7,1228.0 592.5,1481.1 613.4,1141.1 655.2,1481.6 676.1,1141.2" fill="none" stroke="#2ca02c" stroke-width="3.5" opacity="1.0"/>
<circle cx="79.0" cy="1479.4" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="87.9" cy="1214.0" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="96.9" cy="1470.7" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="105.8" cy="1219.6" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="114.8" cy="1465.6" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="123.7" cy="1066.7" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="132.7" cy="1465.5" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="141.7" cy="1087.4" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="150.6" cy="1460.8" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="159.6" cy="1442.2" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="168.5" cy="1460.4" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="177.5" cy="1196.1" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="186.4" cy="1465.7" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="195.4" cy="1242.5" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="204.4" cy="1468.0" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="213.3" cy="1224.0" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="222.3" cy="1466.0" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="231.2" cy="1215.2" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="240.2" cy="1466.6" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="249.1" cy="1237.7" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="258.1" cy="1471.2" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="267.1" cy="1228.2" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="276.0" cy="1482.5" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="285.0" cy="1441.5" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="293.9" cy="1481.7" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="302.9" cy="1228.0" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="311.8" cy="1481.1" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="320.8" cy="1141.1" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="329.8" cy="1481.6" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="338.7" cy="1141.2" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="347.7" cy="1480.7" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="356.6" cy="1164.6" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="365.6" cy="1483.5" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="374.5" cy="1222.4" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="383.5" cy="1474.3" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="392.5" cy="1196.9" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="401.4" cy="1474.3" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="410.4" cy="1176.4" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="419.3" cy="1477.7" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="428.3" cy="1206.4" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="437.2" cy="1475.0" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="446.2" cy="1197.3" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="455.2" cy="1474.8" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="464.1" cy="1109.7" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="473.1" cy="1474.6" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="482.0" cy="1091.4" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="491.0" cy="1477.1" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="499.9" cy="1214.9" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="508.9" cy="1474.6" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="517.9" cy="1106.2" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="526.8" cy="1474.3" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="535.8" cy="1082.3" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="544.7" cy="1474.6" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="553.7" cy="1206.8" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="562.6" cy="1474.5" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="571.6" cy="1226.8" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="580.6" cy="1474.7" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="589.5" cy="1217.6" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="598.5" cy="1479.7" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="607.4" cy="1087.7" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="616.4" cy="1474.3" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="625.3" cy="1209.8" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="634.3" cy="1475.8" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="643.3" cy="1444.9" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="652.2" cy="1476.3" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="661.2" cy="1077.6" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="670.1" cy="1476.0" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="679.1" cy="1151.6" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="688.0" cy="1483.9" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="697.0" cy="1236.2" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<polyline points="79.0,1347.5 105.8,1304.4 141.7,1362.7 168.5,1343.1 204.4,1342.9 240.2,1354.9 267.1,1408.1 302.9,1311.1 329.8,1336.2 365.6,1331.3 392.5,1338.4 428.3,1225.2 455.2,1388.9 491.0,1220.9 517.9,1385.3 553.7,1306.4 589.5,1347.2 616.4,1376.8 652.2,1343.3 679.1,1290.6" fill="none" stroke="#2ca02c" stroke-width="3.5" opacity="1.0"/>
<text x="747" y="940" font-size="15" font-weight="bold">Max score per eval cycle</text>
<text x="747" y="955" font-size="11" fill="#555">campaign_v4_stdout.log - max of the 10 deterministic round scores per eval</text>
<text x="747" y="973" font-size="12" font-style="italic" fill="#555">What: Best single-round score the bot managed in each test cycle.</text>
@@ -261,36 +401,22 @@
<line x1="747" y1="1024.0" x2="1375" y2="1024.0" stroke="#dddddd"/>
<line x1="747" y1="1494" x2="1375" y2="1494" stroke="black"/>
<line x1="747" y1="1494" x2="747" y2="1024" stroke="black"/>
<line x1="747.0" y1="1494" x2="747.0" y2="1498" stroke="black"/>
<text x="747.0" y="1511" text-anchor="middle" font-size="11">1</text>
<line x1="791.9" y1="1494" x2="791.9" y2="1498" stroke="black"/>
<text x="791.9" y="1511" text-anchor="middle" font-size="11">2</text>
<line x1="836.7" y1="1494" x2="836.7" y2="1498" stroke="black"/>
<text x="836.7" y="1511" text-anchor="middle" font-size="11">3</text>
<line x1="881.6" y1="1494" x2="881.6" y2="1498" stroke="black"/>
<text x="881.6" y="1511" text-anchor="middle" font-size="11">4</text>
<line x1="926.4" y1="1494" x2="926.4" y2="1498" stroke="black"/>
<text x="926.4" y="1511" text-anchor="middle" font-size="11">5</text>
<line x1="971.3" y1="1494" x2="971.3" y2="1498" stroke="black"/>
<text x="971.3" y="1511" text-anchor="middle" font-size="11">6</text>
<line x1="1016.1" y1="1494" x2="1016.1" y2="1498" stroke="black"/>
<text x="1016.1" y="1511" text-anchor="middle" font-size="11">7</text>
<line x1="1061.0" y1="1494" x2="1061.0" y2="1498" stroke="black"/>
<text x="1061.0" y="1511" text-anchor="middle" font-size="11">8</text>
<line x1="1105.9" y1="1494" x2="1105.9" y2="1498" stroke="black"/>
<text x="1105.9" y="1511" text-anchor="middle" font-size="11">9</text>
<line x1="1150.7" y1="1494" x2="1150.7" y2="1498" stroke="black"/>
<text x="1150.7" y="1511" text-anchor="middle" font-size="11">10</text>
<line x1="1195.6" y1="1494" x2="1195.6" y2="1498" stroke="black"/>
<text x="1195.6" y="1511" text-anchor="middle" font-size="11">11</text>
<line x1="1240.4" y1="1494" x2="1240.4" y2="1498" stroke="black"/>
<text x="1240.4" y="1511" text-anchor="middle" font-size="11">12</text>
<line x1="1285.3" y1="1494" x2="1285.3" y2="1498" stroke="black"/>
<text x="1285.3" y="1511" text-anchor="middle" font-size="11">13</text>
<line x1="1330.1" y1="1494" x2="1330.1" y2="1498" stroke="black"/>
<text x="1330.1" y="1511" text-anchor="middle" font-size="11">14</text>
<line x1="1375.0" y1="1494" x2="1375.0" y2="1498" stroke="black"/>
<text x="1375.0" y="1511" text-anchor="middle" font-size="11">15</text>
<line x1="802.4" y1="1494" x2="802.4" y2="1498" stroke="black"/>
<text x="802.4" y="1511" text-anchor="middle" font-size="11">4</text>
<line x1="876.3" y1="1494" x2="876.3" y2="1498" stroke="black"/>
<text x="876.3" y="1511" text-anchor="middle" font-size="11">8</text>
<line x1="950.2" y1="1494" x2="950.2" y2="1498" stroke="black"/>
<text x="950.2" y="1511" text-anchor="middle" font-size="11">12</text>
<line x1="1024.1" y1="1494" x2="1024.1" y2="1498" stroke="black"/>
<text x="1024.1" y="1511" text-anchor="middle" font-size="11">16</text>
<line x1="1097.9" y1="1494" x2="1097.9" y2="1498" stroke="black"/>
<text x="1097.9" y="1511" text-anchor="middle" font-size="11">20</text>
<line x1="1171.8" y1="1494" x2="1171.8" y2="1498" stroke="black"/>
<text x="1171.8" y="1511" text-anchor="middle" font-size="11">24</text>
<line x1="1245.7" y1="1494" x2="1245.7" y2="1498" stroke="black"/>
<text x="1245.7" y="1511" text-anchor="middle" font-size="11">28</text>
<line x1="1319.6" y1="1494" x2="1319.6" y2="1498" stroke="black"/>
<text x="1319.6" y="1511" text-anchor="middle" font-size="11">32</text>
<line x1="743" y1="1494.0" x2="747" y2="1494.0" stroke="black"/>
<text x="740" y="1498.0" text-anchor="end" font-size="11">0</text>
<line x1="743" y1="1376.5" x2="747" y2="1376.5" stroke="black"/>
@@ -304,66 +430,152 @@
<text x="1061" y="1527" text-anchor="middle" font-size="12">eval cycle number</text>
<text x="16" y="1259" text-anchor="middle" font-size="12" transform="rotate(-90 16 1259)">best single-round score</text>
<circle cx="747.0" cy="1325.8" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="791.9" cy="1266.7" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="836.7" cy="1425.8" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="881.6" cy="1462.2" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="926.4" cy="1464.5" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="971.3" cy="1423.5" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1016.1" cy="1457.6" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1061.0" cy="1423.5" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1105.9" cy="1457.6" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1150.7" cy="1444.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1195.6" cy="1428.1" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1240.4" cy="1344.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1285.3" cy="1357.6" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1330.1" cy="1491.7" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="765.5" cy="1266.7" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="783.9" cy="1425.8" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="802.4" cy="1462.2" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="820.9" cy="1464.5" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="839.4" cy="1423.5" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="857.8" cy="1457.6" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="876.3" cy="1423.5" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="894.8" cy="1457.6" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="913.2" cy="1444.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="931.7" cy="1428.1" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="950.2" cy="1344.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="968.6" cy="1357.6" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="987.1" cy="1491.7" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1005.6" cy="1357.6" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1024.1" cy="1357.6" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1042.5" cy="1453.1" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1061.0" cy="1257.6" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1079.5" cy="1494.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1097.9" cy="1494.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1116.4" cy="1448.5" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1134.9" cy="1494.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1153.4" cy="1357.6" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1171.8" cy="1357.6" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1190.3" cy="1350.8" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1208.8" cy="1357.6" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1227.2" cy="1357.6" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1245.7" cy="1357.6" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1264.2" cy="1444.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1282.6" cy="1346.3" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1301.1" cy="1357.6" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1319.6" cy="1200.8" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1338.1" cy="1494.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1356.5" cy="1357.6" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1375.0" cy="1357.6" r="2" fill="#d62728" opacity="0.25"/>
<polyline points="747.0,1325.8 791.9,1266.7 836.7,1425.8 881.6,1462.2 926.4,1464.5 971.3,1423.5 1016.1,1457.6 1061.0,1423.5 1105.9,1457.6 1150.7,1444.0 1195.6,1428.1 1240.4,1344.0 1285.3,1357.6 1330.1,1491.7 1375.0,1357.6" fill="none" stroke="#d62728" stroke-width="2.5" opacity="1.0"/>
<polyline points="747.0,1325.8 765.5,1266.7 783.9,1425.8 802.4,1462.2 820.9,1464.5 839.4,1423.5 857.8,1457.6 876.3,1423.5 894.8,1457.6 913.2,1444.0 931.7,1428.1 950.2,1344.0 968.6,1357.6 987.1,1491.7 1005.6,1357.6 1024.1,1357.6 1042.5,1453.1 1061.0,1257.6 1079.5,1494.0 1097.9,1494.0 1116.4,1448.5 1134.9,1494.0 1153.4,1357.6 1171.8,1357.6 1190.3,1350.8 1208.8,1357.6 1227.2,1357.6 1245.7,1357.6 1264.2,1444.0 1282.6,1346.3 1301.1,1357.6 1319.6,1200.8 1338.1,1494.0 1356.5,1357.6 1375.0,1357.6" fill="none" stroke="#d62728" stroke-width="2.5" opacity="1.0"/>
<circle cx="747.0" cy="1469.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="791.9" cy="1473.5" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="836.7" cy="1444.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="881.6" cy="1430.4" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="926.4" cy="1439.5" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="971.3" cy="1350.8" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1016.1" cy="1396.3" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1061.0" cy="1384.9" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1105.9" cy="1391.7" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1150.7" cy="1221.3" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1195.6" cy="1425.8" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1240.4" cy="1334.9" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1285.3" cy="1337.2" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1330.1" cy="1339.5" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1375.0" cy="1341.7" r="2" fill="#1f77b4" opacity="0.25"/>
<polyline points="747.0,1469.0 791.9,1473.5 836.7,1444.0 881.6,1430.4 926.4,1439.5 971.3,1350.8 1016.1,1396.3 1061.0,1384.9 1105.9,1391.7 1150.7,1221.3 1195.6,1425.8 1240.4,1334.9 1285.3,1337.2 1330.1,1339.5 1375.0,1341.7" fill="none" stroke="#1f77b4" stroke-width="2.5" opacity="1.0"/>
<circle cx="765.5" cy="1473.5" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="783.9" cy="1444.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="802.4" cy="1430.4" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="820.9" cy="1439.5" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="839.4" cy="1350.8" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="857.8" cy="1396.3" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="876.3" cy="1384.9" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="894.8" cy="1391.7" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="913.2" cy="1221.3" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="931.7" cy="1425.8" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="950.2" cy="1334.9" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="968.6" cy="1337.2" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="987.1" cy="1339.5" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1005.6" cy="1341.7" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1024.1" cy="1323.5" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1042.5" cy="1348.5" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1061.0" cy="1346.3" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1079.5" cy="1444.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1097.9" cy="1341.7" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1116.4" cy="1337.2" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1134.9" cy="1348.5" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1153.4" cy="1344.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1171.8" cy="1353.1" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1190.3" cy="1350.8" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1208.8" cy="1348.5" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1227.2" cy="1344.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1245.7" cy="1344.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1264.2" cy="1332.6" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1282.6" cy="1353.1" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1301.1" cy="1348.5" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1319.6" cy="1353.1" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1338.1" cy="1357.6" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1356.5" cy="1339.5" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1375.0" cy="1323.5" r="2" fill="#1f77b4" opacity="0.25"/>
<polyline points="747.0,1469.0 765.5,1473.5 783.9,1444.0 802.4,1430.4 820.9,1439.5 839.4,1350.8 857.8,1396.3 876.3,1384.9 894.8,1391.7 913.2,1221.3 931.7,1425.8 950.2,1334.9 968.6,1337.2 987.1,1339.5 1005.6,1341.7 1024.1,1323.5 1042.5,1348.5 1061.0,1346.3 1079.5,1444.0 1097.9,1341.7 1116.4,1337.2 1134.9,1348.5 1153.4,1344.0 1171.8,1353.1 1190.3,1350.8 1208.8,1348.5 1227.2,1344.0 1245.7,1344.0 1264.2,1332.6 1282.6,1353.1 1301.1,1348.5 1319.6,1353.1 1338.1,1357.6 1356.5,1339.5 1375.0,1323.5" fill="none" stroke="#1f77b4" stroke-width="2.5" opacity="1.0"/>
<circle cx="747.0" cy="1284.9" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="791.9" cy="1289.5" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="836.7" cy="1284.9" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="881.6" cy="1414.5" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="926.4" cy="1466.7" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="971.3" cy="1425.8" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1016.1" cy="1066.7" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1061.0" cy="1421.3" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1105.9" cy="1434.9" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1150.7" cy="1344.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1195.6" cy="1373.5" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1240.4" cy="1375.8" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1285.3" cy="1357.6" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1330.1" cy="1264.5" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1375.0" cy="1357.6" r="2" fill="#2ca02c" opacity="0.25"/>
<polyline points="747.0,1284.9 791.9,1289.5 836.7,1284.9 881.6,1414.5 926.4,1466.7 971.3,1425.8 1016.1,1066.7 1061.0,1421.3 1105.9,1434.9 1150.7,1344.0 1195.6,1373.5 1240.4,1375.8 1285.3,1357.6 1330.1,1264.5 1375.0,1357.6" fill="none" stroke="#2ca02c" stroke-width="2.5" opacity="1.0"/>
<polyline points="747.0,1284.9 791.9,1266.7 836.7,1284.9 881.6,1414.5 926.4,1439.5 971.3,1350.8 1016.1,1066.7 1061.0,1384.9 1105.9,1391.7 1150.7,1221.3 1195.6,1373.5 1240.4,1334.9 1285.3,1337.2 1330.1,1264.5 1375.0,1341.7" fill="none" stroke="#555555" stroke-width="2.5" opacity="1.0" stroke-dasharray="6 4"/>
<circle cx="765.5" cy="1289.5" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="783.9" cy="1284.9" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="802.4" cy="1414.5" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="820.9" cy="1466.7" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="839.4" cy="1425.8" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="857.8" cy="1066.7" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="876.3" cy="1421.3" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="894.8" cy="1434.9" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="913.2" cy="1344.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="931.7" cy="1373.5" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="950.2" cy="1375.8" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="968.6" cy="1357.6" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="987.1" cy="1264.5" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1005.6" cy="1357.6" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1024.1" cy="1291.7" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1042.5" cy="1355.4" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1061.0" cy="1169.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1079.5" cy="1105.4" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1097.9" cy="1287.2" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1116.4" cy="1291.7" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1134.9" cy="1353.1" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1153.4" cy="1303.1" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1171.8" cy="1334.9" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1190.3" cy="1412.2" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1208.8" cy="1357.6" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1227.2" cy="1421.3" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1245.7" cy="1366.7" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1264.2" cy="1382.6" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1282.6" cy="1216.7" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1301.1" cy="1357.6" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1319.6" cy="1146.3" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1338.1" cy="1307.6" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1356.5" cy="1357.6" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1375.0" cy="1405.4" r="2" fill="#2ca02c" opacity="0.25"/>
<polyline points="747.0,1284.9 765.5,1289.5 783.9,1284.9 802.4,1414.5 820.9,1466.7 839.4,1425.8 857.8,1066.7 876.3,1421.3 894.8,1434.9 913.2,1344.0 931.7,1373.5 950.2,1375.8 968.6,1357.6 987.1,1264.5 1005.6,1357.6 1024.1,1291.7 1042.5,1355.4 1061.0,1169.0 1079.5,1105.4 1097.9,1287.2 1116.4,1291.7 1134.9,1353.1 1153.4,1303.1 1171.8,1334.9 1190.3,1412.2 1208.8,1357.6 1227.2,1421.3 1245.7,1366.7 1264.2,1382.6 1282.6,1216.7 1301.1,1357.6 1319.6,1146.3 1338.1,1307.6 1356.5,1357.6 1375.0,1405.4" fill="none" stroke="#2ca02c" stroke-width="2.5" opacity="1.0"/>
<polyline points="747.0,1284.9 765.5,1266.7 783.9,1284.9 802.4,1414.5 820.9,1439.5 839.4,1350.8 857.8,1066.7 876.3,1384.9 894.8,1391.7 913.2,1221.3 931.7,1373.5 950.2,1334.9 968.6,1337.2 987.1,1264.5 1005.6,1341.7 1024.1,1291.7 1042.5,1348.5 1061.0,1169.0 1079.5,1105.4 1097.9,1287.2 1116.4,1291.7 1134.9,1348.5 1153.4,1303.1 1171.8,1334.9 1190.3,1350.8 1208.8,1348.5 1227.2,1344.0 1245.7,1344.0 1264.2,1332.6 1282.6,1216.7 1301.1,1348.5 1319.6,1146.3 1338.1,1307.6 1356.5,1339.5 1375.0,1323.5" fill="none" stroke="#555555" stroke-width="2.5" opacity="1.0" stroke-dasharray="6 4"/>
<line x1="759" y1="1546" x2="787" y2="1546" stroke="#d62728" stroke-width="3"/>
<text x="793" y="1550" font-size="12">Corners - 15 evals</text>
<text x="793" y="1550" font-size="12">Corners - 35 evals</text>
<line x1="759" y1="1564" x2="787" y2="1564" stroke="#1f77b4" stroke-width="3"/>
<text x="793" y="1568" font-size="12">Crazy - 15 evals</text>
<text x="793" y="1568" font-size="12">Crazy - 35 evals</text>
<line x1="759" y1="1582" x2="787" y2="1582" stroke="#2ca02c" stroke-width="3"/>
<text x="793" y="1586" font-size="12">Target - 15 evals</text>
<text x="793" y="1586" font-size="12">Target - 35 evals</text>
<line x1="759" y1="1600" x2="787" y2="1600" stroke="#555555" stroke-width="3"/>
<text x="793" y="1604" font-size="12">combined max</text>
<rect x="0" y="1640" width="1400" height="80" fill="#f2f2f2"/>
<text x="16" y="1661" font-size="15" font-weight="bold">How to read</text>
<text x="1384" y="1660" text-anchor="end" font-size="11" fill="#666">Regenerate anytime: python3 tools/plot_progress.py</text>
<text x="16" y="1683" font-size="13">This file reloads itself in Chrome every sixty seconds.</text>
<text x="16" y="1700" font-size="13">Regenerate anytime with tools/watch_dashboard.sh or the python command.</text>
<rect x="0" y="1645" width="1400" height="205" fill="#f2f2f2"/>
<text x="16" y="1666" font-size="15" font-weight="bold">Reading the signs</text>
<text x="1384" y="1665" text-anchor="end" font-size="11" fill="#666">Regenerate anytime: python3 tools/plot_progress.py</text>
<text x="16" y="1688" font-size="13" font-weight="bold">Healthy patterns ✅</text>
<text x="16" y="1706" font-size="12">• Both critic and actor losses trending down over time</text>
<text x="16" y="1720" font-size="12">• Alpha decaying slowly from ~1.0,</text>
<text x="16" y="1734" font-size="12"> then plateauing — this is normal</text>
<text x="16" y="1748" font-size="12">• Win rates appearing and increasing in the eval panel</text>
<text x="16" y="1762" font-size="12">• Max scores rising in the max-score panel</text>
<text x="16" y="1776" font-size="12">• Alpha plateauing is NOT a problem — it means</text>
<text x="16" y="1790" font-size="12"> exploration level is stable</text>
<text x="500" y="1688" font-size="13" font-weight="bold">Warning signs ⚠️</text>
<text x="500" y="1706" font-size="12">• Losses exploding (suddenly jumping to</text>
<text x="500" y="1720" font-size="12"> millions or billions)</text>
<text x="500" y="1734" font-size="12">• Win rates staying at 0% for a long time</text>
<text x="500" y="1748" font-size="12"> after the first ~20 eval cycles</text>
<text x="500" y="1762" font-size="12">• Alpha reaching 0 — bot stops exploring entirely</text>
<text x="500" y="1776" font-size="12"> (gets stuck)</text>
<text x="500" y="1790" font-size="12">• Max scores flatlining (no improvement</text>
<text x="500" y="1804" font-size="12"> over many eval cycles)</text>
<text x="500" y="1818" font-size="12">• Any single loss value above 1e6</text>
<text x="985" y="1688" font-size="13" font-weight="bold">What each metric means (brief)</text>
<text x="985" y="1706" font-size="12">• Critic loss: how wrong the bot's value</text>
<text x="985" y="1720" font-size="12"> estimates are — should go down</text>
<text x="985" y="1734" font-size="12">• Actor loss: how well the bot's action policy</text>
<text x="985" y="1748" font-size="12"> is doing — should go down overall</text>
<text x="985" y="1762" font-size="12"> (some bumps are normal)</text>
<text x="985" y="1776" font-size="12">• Alpha: exploration-exploitation tradeoff — starts</text>
<text x="985" y="1790" font-size="12"> high, settles at a positive value (NOT zero)</text>
<text x="985" y="1804" font-size="12">• Max score: best score achieved per eval cycle —</text>
<text x="985" y="1818" font-size="12"> rising trend = learning</text>
<script type="text/javascript"><![CDATA[ setTimeout(function(){ location.reload(); }, 60000); ]]></script>
</svg>

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 47 KiB

+57 -18
View File
@@ -45,8 +45,8 @@ CRITIC_C, ACTOR_C = "#1f77b4", "#ff7f0e"
ALPHA_C = "#9467bd" # alpha line on the losses panel
RELOAD_JS = ('<script type="text/javascript"><![CDATA[ '
'setTimeout(function(){ location.reload(); }, 60000); ]]></script>')
W, H = 1400, 1720
TITLE_H, GUIDE_H = 80, 80
W, H = 1400, 1850
HEALTH_H = 205 # bottom "Reading the signs" cheat-sheet band
# rows: (header_y, panel_top_y, panel_bottom_y, x_left, x_right)
# panel_top sits low enough to leave room under header+sub for the
# per-panel how-to-read guide (3 italic lines, see panel_guide)
@@ -79,9 +79,36 @@ GUIDES = {
"X = eval cycle number; Y = best score achieved.",
"higher is better; a rising trend means the bot is improving."),
}
GUIDE_LINES = [
"This file reloads itself in Chrome every sixty seconds.",
"Regenerate anytime with tools/watch_dashboard.sh or the python command.",
# bottom health-check cheat-sheet: one column per subsection; each bullet is
# a tuple of pre-wrapped text lines (first line gets the bullet marker)
SIGNS_COLUMNS = [
("Healthy patterns ✅", [
("Both critic and actor losses trending down over time",),
("Alpha decaying slowly from ~1.0,", "then plateauing — this is normal"),
("Win rates appearing and increasing in the eval panel",),
("Max scores rising in the max-score panel",),
("Alpha plateauing is NOT a problem — it means",
"exploration level is stable"),
]),
("Warning signs ⚠️", [
("Losses exploding (suddenly jumping to", "millions or billions)"),
("Win rates staying at 0% for a long time",
"after the first ~20 eval cycles"),
("Alpha reaching 0 — bot stops exploring entirely", "(gets stuck)"),
("Max scores flatlining (no improvement",
"over many eval cycles)"),
("Any single loss value above 1e6",),
]),
("What each metric means (brief)", [
("Critic loss: how wrong the bot's value",
"estimates are — should go down"),
("Actor loss: how well the bot's action policy",
"is doing — should go down overall", "(some bumps are normal)"),
("Alpha: exploration-exploitation tradeoff — starts",
"high, settles at a positive value (NOT zero)"),
("Max score: best score achieved per eval cycle —",
"rising trend = learning"),
]),
]
@@ -280,16 +307,23 @@ def map_fn(p0, p1, vmin, vmax, log=False):
return f
def guide_block(w, h, lines):
"""Plain-English "How to read" band at the bottom of the canvas."""
y = H - GUIDE_H
s = f'<rect x="0" y="{y}" width="{w}" height="{GUIDE_H}" fill="#f2f2f2"/>\n'
s += (f'<text x="16" y="{y + 21}" font-size="15" font-weight="bold">'
f"How to read</text>\n"
f'<text x="{w - 16}" y="{y + 20}" text-anchor="end" font-size="11" '
f'fill="#666">Regenerate anytime: python3 tools/plot_progress.py</text>\n')
for i, ln in enumerate(lines):
s += f'<text x="16" y="{y + 43 + i * 17}" font-size="13">{esc(ln)}</text>\n'
def signs_block():
"""Health-check cheat-sheet band along the bottom of the canvas."""
y0 = H - HEALTH_H
s = f'<rect x="0" y="{y0}" width="{W}" height="{HEALTH_H}" fill="#f2f2f2"/>\n'
s += (f'<text x="16" y="{y0 + 21}" font-size="15" font-weight="bold">'
"Reading the signs</text>\n"
f'<text x="{W - 16}" y="{y0 + 20}" text-anchor="end" font-size="11" '
'fill="#666">Regenerate anytime: python3 tools/plot_progress.py</text>\n')
for (head, bullets), x in zip(SIGNS_COLUMNS, (16, 500, 985)):
s += (f'<text x="{x}" y="{y0 + 43}" font-size="13" font-weight="bold">'
f"{esc(head)}</text>\n")
y = y0 + 61
for lines in bullets:
for j, ln in enumerate(lines):
s += (f'<text x="{x}" y="{y}" font-size="12">'
f"{esc(('• ' if j == 0 else ' ') + ln)}</text>\n")
y += 14
return s
@@ -496,7 +530,7 @@ def build_dashboard(campaign, metrics_f, out):
s += panel_guide(geo[3], geo[0] + 33, guide)
s += drawer() or "" # panels bare-return None on their no-data path
s += guide_block(W, H, GUIDE_LINES)
s += signs_block()
s += RELOAD_JS + "\n"
s += "</svg>\n"
return write_svg(out, s)
@@ -552,8 +586,13 @@ def selftest():
for t in PANEL_TITLES:
assert esc(t) in text, f"panel title missing: {t}"
assert text.count(PANEL_TITLES[0]) == 1
assert "How to read" in text, "reading guide missing"
assert 'width="1400"' in text and 'height="1720"' in text
assert "Reading the signs" in text, "health-check section missing"
for head, bullets in SIGNS_COLUMNS:
assert esc(head) in text, f"health-check column missing: {head}"
for lines in bullets:
assert esc("• " + lines[0]) in text, f"bullet missing: {lines[0]}"
assert text.count("• ") == sum(len(b) for _, b in SIGNS_COLUMNS)
assert 'width="1400"' in text and 'height="1850"' in text
# every panel carries its own What/Axes/Better how-to-read note
assert text.count("What:") == len(PANEL_TITLES), text.count("What:")
for g in GUIDES.values():