443d7aad57553f2606be41a934cb4dab46019e09
braney
  Fri Sep 4 12:10:00 2026 -0700
docent: first eleven regression tests, one per fixed bug, refs #38252

Ten assert the behavior their ticket says is correct; the eleventh is an xfail.
All eleven pass against genome-test, 40s for the set.

rm35333  bigBed schema vs trackDb type mismatch, no SEGFAULT
rm35920  wrong bigBed type in a hub, no crash and no garbage item label
rm36029  a MAF displays after several phyloP tracks are on
rm36331  quickLift of the GENCODE Archive container, no "Unknown database"
rm36514  a chromosome search after a quickLift hop
rm36702  quickLift hg19 to hs1, no "Unknown database"
rm36798  the two OMIM tracks survive a configure submit
rm37388  hgc on a quickLifted hub item, no connect to the source assembly
rm37520  lifted tracks survive a hop to another genome and back
rm37906  Neandertal tracks draw data in a narrow window on hg18

rm36540 is the xfail, and it is worth reading. The ticket is Closed, but the
symptom is present on genome.ucsc.edu (v502), hgwbeta (v503) and genome-test
(v503), measured with the reporter's own hub URL as well as with our copy of it:
genome= instead of db= for a hub-backed assembly still reaches a query against a
chromInfo table that does not exist. There is no fixed behavior to assert, so it
is pinned as an xfail and the run fails if it ever starts passing.

Six of these build their own state rather than loading the session their ticket
names, which is deliberate: a session on someone's account can be renamed or
deleted, and hgTracks answers a missing session with a 200 and an early-error
page that every noText: assertion passes on. Where a session is genuinely the
cheapest way to a state (rm37388), the script also asserts noText: "Could not
find session" so that a deleted session fails loudly instead of quietly.

Four traps cost a run each and are written into the scripts that hit them, since
the next twenty-nine will hit them too: a container never gets an img_data_ row
(the rows carry its children's names); a leaf track with no features at the
ticket's position has no row either, so a lifted view is better checked by its
own quickLiftChain; `track:` sends a plain name and cannot turn on a track in an
ATTACHED hub, whose cart variable carries the hub prefix; and asking for one view
of a composite turns its sibling views on as well.

diff --git src/hg/utils/docent/tests/regress/rm35920.docent.yaml src/hg/utils/docent/tests/regress/rm35920.docent.yaml
new file mode 100644
index 00000000000..40e59746939
--- /dev/null
+++ src/hg/utils/docent/tests/regress/rm35920.docent.yaml
@@ -0,0 +1,39 @@
+# #35920 -- a hub declaring the wrong bigBed type crashed hgTracks or drew garbage item
+# names, and gave no warning until an item of the track came into view. What the reader
+# then saw was a "jsEmbedded" dialog titled with the server's hostname, which says nothing
+# about the real problem.
+#
+# The hub has one track for each half of the problem: ultras says `type bigBed 12 +` over
+# a file with 4 fields, ultraZoos says `type bigBed 4 +` over a file with 3.
+#
+# The hub is our own copy of the reporter's, at
+# ~/public_html/docentFixtures/Auto-generated_hub/, with bigDataUrl pointing at the local
+# files so nothing outside this repository can change what the test loads. hubCheck
+# reports the two type mismatches and a missing description page, which is correct: those
+# are what the hub is for. It is the crash and the garbage labels that must be gone, not
+# the malformed hub.
+#
+# The position is where ultras.bb has its first item (uc.1 at chr1:10,537,639-10,537,846),
+# because the ticket is explicit that nothing goes wrong until an item is in view.
+target: genome-test
+db: hg38
+position: chr1:10537000-10538500
+reset: true
+fast: true
+steps:
+  - hub: {url: "https://hgwdev.gi.ucsc.edu/~braney/docentFixtures/Auto-generated_hub/hub.txt", db: hg38}
+  - go: chr1:10537000-10538500
+  - track: {ultras: pack, ultraZoos: pack}
+
+  # Only `ultras` is required to draw. ultraZoos declares `type bigBed 4 +` over a
+  # three-field file and produces no row at all, which is a defensible outcome for a file
+  # that cannot be read as declared -- the ticket asks for no crash and no garbage labels,
+  # not for a malformed track to render. Requiring its row would be asserting a behavior
+  # nobody promised. The row for `ultras` is what catches the crash, since the failure
+  # produced a dialog and no image; jsEmbedded is the string from that dialog.
+  - expect: {rows: [ultras], noText: "jsEmbedded"}
+
+  # And the item label has to be the name from the file rather than a garbage string, which
+  # is the other half of the ticket. uc.1 is ultras.bb's first item.
+  - mouseover: {track: ultras, item: "uc.1"}
+  - expect: {tip: "uc.1"}