58fa228f2f91ae8c6a5c62109e904f57e1f9a66d
braney
  Wed Sep 30 11:03:02 2026 -0700
docent regression scripts for nineteen v504 tickets, and their registry rows

Each script watches one v504 fix. Fourteen fail on v503 (ts park 38316) and
pass on genome-test (release-ab). rm38313 and rm38393 are sandbox-ab, because
no release predates their fix. rm37984, rm38233 and rm38384 are
assertion-only; each header says why.

The registry now names the script in the docent column for these tickets, and
has new rows for #38157 and #38393. #38275 stays unwatched in the table: the
script that watches it is rm37389, which is named for another ticket.

refs #20824, #27988, #36292, #37595, #37621, #37929, #37984, #38157, #38192,
#38197, #38233, #38254, #38264, #38273, #38313, #38323, #38372, #38384,
#38393, #38252, #38391

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

diff --git src/hg/utils/docent/tests/regress/rm37621.docent.yaml src/hg/utils/docent/tests/regress/rm37621.docent.yaml
new file mode 100644
index 00000000000..e2645ea1805
--- /dev/null
+++ src/hg/utils/docent/tests/regress/rm37621.docent.yaml
@@ -0,0 +1,68 @@
+# #37621 -- a quickLifted bigWig was drawn stretched to the bounds of the chain, so signal
+# was painted where nothing is aligned.
+#
+# One commit, 5dd36916814, in bigWigLoadPreDraw() (hg/hgTracks/bigWigTrack.c).  After
+# chainSubsetOnT() clips a chain to the window, each block's pixels were scaled by the span
+# of that clipped chain instead of by the window.  When the aligned blocks reach both edges
+# of the view the two are the same, which is why this went unnoticed.  When the alignment
+# stops short, the old code spread the aligned part across the whole row.
+#
+# The window here is the simplest case of that: hs1 chr7:100,001-120,000, where exactly one
+# chain (chain 7 of /gbdb/hg38/quickLift/hs1.bb) overlaps the view and its first aligned
+# block starts at 107,741.  So the left 39% of the row has nothing aligned to it.  Checked
+# with bigBedToBed on hs1.bb and hs1.link.bb on 2026-09-30.  One chain matters for a second
+# reason: a chain that overlaps the window with no block in it crashes v503 (#38236), so the
+# four-chain window the ticket used, chr7:59,300,000-59,400,000, draws an empty page on the
+# baseline and cannot tell the two builds apart for this ticket's reason.
+#
+# The track is gc5BaseBw, because GC percent has a value at nearly every base, so an empty
+# column means "not aligned" and not "no data".  hs1 has a native gc5BaseBw as well;
+# hideDefaults hides it, so the only gc5BaseBw row on the lifted view is the hub_<n>_ one.
+#
+# What is read is the wiggle tooltip, #mouseOverText, which reports the value under the
+# cursor or the words "no data".  A graph has no map boxes, so this is the one text a script
+# can read per column.
+#
+#   * chr7:104,000 and chr7:107,000, unaligned: the tooltip says "no data".  On v503 it
+#     says a number ("40" at 104,000 on 2026-09-30), because the aligned signal was spread
+#     over this part of the row.
+#   * chr7:115,000, aligned: the tooltip says a number, not "no data", and the row is drawn
+#     in black there.  This is the positive check that the lift drew anything at all.
+#
+# The checks match "data", not "no data": the space in the tooltip is not a plain space, and
+# tip: "no data" fails on the fixed build with `tooltip says "no data", wanted "no data"`.
+# The noTip: digits are what tell "no data" from a value.
+#
+# The number at 115,000 ("30" on genome-test, "26.6667" on v503) is NOT asserted.  It is a
+# mean over the bases one pixel covers, so it moves with the image width.
+#
+# NOT covered: point 2 of the ticket (the zoom level over indels), which the fix commit
+# answers as not a bug, and several chains in one window overwriting each other.
+proof:
+  - "assertion-only 2026-09-30 -- written from #37621 and 5dd36916814 after the fix shipped"
+  - "release-ab 2026-09-30 -- fails on v503 (ts 38316, v503_branch 707b184e329) and passes on genome-test and hgwbeta (v504). On v503 the tooltip at hs1 chr7:104,000, where nothing is aligned, says \"40\" where it should say \"no data\""
+
+target: genome-test
+db: hg38
+position: chr7:155799529-155812871
+reset: true
+fast: true
+steps:
+  - goto: "/cgi-bin/hgTracks?db=hg38&position=chr7:155799529-155812871&hideTracks=1&gc5BaseBw=full"
+  - expect: {rows: [ruler, gc5BaseBw], exact: true}
+
+  - convert: {to: hs1, quicklift: true, hideDefaults: true}
+  - open: lift
+  - go: chr7:100001-120000
+  - expect: {rows: [gc5BaseBw], noText: "Warning/Error"}
+
+  # Aligned: drawn, and the tooltip carries a value.
+  - expect: {color: {track: gc5BaseBw, at: "chr7:115000", is: "0,0,0"}}
+  - mouseover: {track: gc5BaseBw, at: "chr7:115000"}
+  - expect: {noTip: "data", has: '#mouseOverText:visible'}
+
+  # Not aligned: nothing there.  The old code put the aligned signal here.
+  - mouseover: {track: gc5BaseBw, at: "chr7:104000"}
+  - expect: {tip: "data", noTip: ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]}
+  - mouseover: {track: gc5BaseBw, at: "chr7:107000"}
+  - expect: {tip: "data", noTip: ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]}