a0a3411bca2fdd6d704ce2be7c9c8fca7682913a
braney
  Sat Sep 19 18:19:36 2026 -0700
bedItemRgbTester: pin the order of the itemRgb and color tests

bedItemRgb() decides whether a BED track draws its items in the colors its file
carries or in the one color its stanza names.  The rule has four steps, and the
order of the first three is the whole of #36212: an explicit "itemRgb off"
wins, then an explicit "itemRgb on" wins, and only then does the presence of a
"color" setting turn item colors off by default.  88d620e6c82 folded those
tests together, so a stanza saying both "itemRgb on" and "color" -- which means
items from the file and labels from color -- lost its item colors.

The pairs are what matter here.  Every single-setting case passed while the bug
was live, so a test that exercised one setting at a time would have proved
nothing.  A child that says "itemRgb on" under a parent that says "color" is
the same case reached through trackDbSettingClosestToHome.

Two runs, with and without hg.conf's alwaysItemRgb, since the last step of the
rule reads it and a mirror that turns it off must still honour a stanza that
asks for item colors explicitly.

The test lives in hg/lib/tests because hg/cgilib has no tests directory; its
link line adds jkhgapcgi.a.

Watched to fail and then pass: with the color test moved back in front of the
itemRgb test, three lines flip, and they are the three that pair the two
settings.  Recorded as sandbox-ab in utils/testRegistry.

refs #36212, refs #38391

diff --git src/utils/testRegistry/registry.tsv src/utils/testRegistry/registry.tsv
index 9ad333d6854..6083f597936 100644
--- src/utils/testRegistry/registry.tsv
+++ src/utils/testRegistry/registry.tsv
@@ -39,31 +39,31 @@
 #             so the two tables can be read on one scale.  Every row starts at unrecorded
 #             and earns its way up by measurement, not by argument.
 #   note      what the test holds down.  On a row with no test, what it would have to hold
 #             down, which is the first thing the person who writes it needs.
 #
 # One ticket can have several rows and one test can defend several tickets; both happen
 # here already.  A ticket cannot be both covered and waiting.
 #
 # `testRegistry check` reads every row and fails when one has rotted, so a test cannot be
 # renamed or deleted without coming here.
 #
 #ticket	release	test	docent	why	evidence	note
 10138	504	-	rm10138.docent.yaml	invisible	-	needs one: the session data directory hash went from 8 to 10 hex characters
 20824	504	hg/utils/netToBigNet/tests/makefile::simpleTest	-	library	unrecorded	a net converted to bigNet and back, byte compared
 27988	504	-	-	invisible	-	needs one: a server that is not the node hg.conf names has to recognise itself
-36212	504	-	rm36212.docent.yaml	library	-	needs one: an explicit itemRgb on has to beat the presence of a color setting
+36212	504	hg/lib/tests/bedItemRgbTester.c	rm36212.docent.yaml	library	sandbox-ab	an explicit itemRgb on beats the presence of a color setting, in the stanza and from a parent
 37263	504	lib/tests/pathSimplifyTest.c	-	library	unrecorded	dot-dot collapsing, checked against the right answer rather than against the old one
 37969	504	-	rm37969.docent.yaml	library	-	needs one: a quickLifted container must not hide the tracks inside it
 37984	504	lib/tests/hmacTest.c	-	library	sandbox-ab	the pending social identity is signed with hmacMd5, not a plain md5 of salt plus fields
 38086	504	-	-	invisible	-	needs one: a stale cart visibility variable must not hide a new BLAT result track
 38126	504	lib/tests/htmlSanitizeTest.c	rm38126.docent.yaml	library	unrecorded	the allowlist that hub and custom track description HTML is filtered through
 38184	504	-	rm38184.docent.yaml	invisible	-	needs one: db= resolving to the assembly already loaded must keep the session position
 38185	504	hg/hgSession/tests/backupParseTest.c	rm38185.docent.yaml	invisible	unrecorded	an empty pair in a session backup must not eat the variable in front of it
 38185	504	lib/tests/cgiParseTest.c	rm38185.docent.yaml	invisible	unrecorded	an empty CGI pair must not abort the request
 38198	504	-	rm38198.docent.yaml	library	-	needs one: a second lift has to update a track already in the hub
 38225	504	hg/lib/tests/mallocTopPadTester.c	-	perf	sandbox-ab	the hg.conf step size reaches the C library: the heap grows in one 16 MB jump, not the default one
 38233	504	-	-	perf	-	needs one: RefSeq status is asked once per track, not once per gene; the test has to count the queries, not the seconds
 38236	504	-	rm38236.docent.yaml	library	-	needs one: a quickLift chain with no aligned block in the window must not crash
 38248	504	-	rm38248.docent.yaml	library	-	needs one: a deprecated versioned NP_ accession has to resolve to RefSeq Historical
 38249	504	hg/lib/tests/quickLiftTester.c	rm38249.docent.yaml	library	unrecorded	the target strand of a reverse complemented protein, found in the #38349 review
 38253	504	-	-	perf	-	needs one: item coverage is built from feature runs, not one counter per base; the test has to go red if a per-base pass comes back