966c49bdf93dada183133e06522bfb0152de6168 braney Wed Sep 23 13:38:34 2026 -0700 docent: the nightly writes a status page, refs #38252 nightlyStatus.py reads the nightly logs, flips.log and each committed script's proof: lines, and writes one page with a row per script, anchored by its name so a ticket can link to one row. Each row has the current state and the date it has held since, the last 14 days, the strongest proof: level in plain words, and links to the script, the ticket and any before/after picture. Each row also has a link to try it on genome-test and on hgwbeta: the script's steps as far as one URL can rebuild them, with track: steps resolved by DOCENT_DERIVE. Every link is fetched with a fresh cart first, and the page calls it verified only when the fetch draws what the expect: step names. A night is a log written by an --update run, which is what cron does, not a log named _0410: the 09-14 and 09-15 runs started late and a name match dropped them. nightly.sh runs it after the log is complete and adds one line to the mail, the page URL or the error. It changes nothing else about the night's verdict or exit status. diff --git src/hg/utils/docent/tests/regress/README.txt src/hg/utils/docent/tests/regress/README.txt index fb95210727e..2fdd7eaaaa9 100644 --- src/hg/utils/docent/tests/regress/README.txt +++ src/hg/utils/docent/tests/regress/README.txt @@ -148,30 +148,51 @@ existed. Two attempts to force it through a wholesale file restore did not even compile, both times in code unrelated to the ticket. Take the conflict as the answer and use a release instead. server-flip is the one this directory gets for free, and it is better evidence, because nothing about the server changed except the build. Commit a script for an unshipped fix as an .xfail. `make test` fails when an xfail PASSES, so the morning the fix reaches genome-test the nightly goes red and says so. nightly.sh appends that to /hive/users/braney/docentNightly/flips.log one line per script ever, outside the checkout because --update resets the tree. Then drop the .xfail from the name and add the server-flip line to the script's proof: key. rm38272, rm36212 and rm38310 all arrived that way. +The status page +--------------- + +After each run nightly.sh calls nightlyStatus.py, which rewrites + + https://hgwdev.gi.ucsc.edu/~braney/docentStatus/ + +from the logs, flips.log and the proof: lines. One row per committed script, anchored by +its name, so a ticket can link to docentStatus/#rm38236: the state and the date it has +held since, the last 14 days, the strongest proof: level in plain words, and a link to +try it on genome-test and on hgwbeta. The mail says whether the page was written; a +failure there changes nothing else. + +The try-it link is the script's steps as far as one URL can rebuild them, with track: +steps resolved by DOCENT_DERIVE. It stops at the first step that needs the page itself +(convert:, click:, login: and the like), so for most quickLift scripts it reaches the +view before the convert and not the bug. Every link is fetched with a fresh cart before +it is offered, and the page says "Verified" only when that fetch draws the rows the +expect: step names. A reader's own cart is not fresh, so leftover settings can change +what they see; a toggle such as hgt.toggleRevCmplDisp flips again on every load. + rm36212 is still the one to read before writing another -------------------------------------------------------- It is the worked example of both routes: sandbox-ab on 2026-09-09 against parked #36212 on port 48099, then server-flip the same morning when cbb406cd96e reached genome-test. It is also the first script to assert a COLOR, using `expect: {color: ...}`, because it is the first bug here that leaves the page identical -- same rows, same height, same item names, same tooltips. When rows:, height:, text: and has: are all blind to a bug, the pixels are what is left. See tests/colorchecks.docent.yaml for the check itself. rm38310 is the second color check, and the second script watched both ways --------------------------------------------------------------------------- Same recipe as rm36212, and worth reading for the reason it needs pixels, which is