Commits for braney
switch to files view, user index
v504_base to v505_preview (2026-09-21 to 2026-10-05) v505
Show details
385cb594dbd4ff14124a64816d0a649458bff44d Wed Sep 2 12:15:29 2026 -0700
- pngLevelBench: measure what each png compression level costs and saves, refs #38109
The compression level decision needs two numbers per level: the bytes the track
image grows by, and the encode time it saves. A reader gains from a lower
level only above B/S, which is a speed, so the two numbers turn each level into
one break-even link speed to compare against the reader throughput the log
reader reports.
The encode matches lib/pngwrite.c exactly, RGBA with the row filter pinned to
UP, and nothing is written to disk, so the time is the encode alone. The check
that makes an offline measurement stand for what the CGI does is -check: at
level 6, which is what libpng's default resolves to, this has to reproduce the
file hgTracks wrote, byte for byte. It does, for every image tried.
Also here are the three scripts around it: picking a traffic weighted corpus of
real hgTracks URLs out of an access log, rendering them against a parked
hgTracks, and aggregating the result into per level bytes, ms and break-even
speed. The README gives the order they run in and the one known weakness, that
a replayed URL renders the trackDb default track set rather than the reader's
own.
- src/hg/oneShot/pngLevelBench/README - lines changed 67, context: html, text, full: html, text
- src/hg/oneShot/pngLevelBench/levelReport.py - lines changed 128, context: html, text, full: html, text
- src/hg/oneShot/pngLevelBench/makefile - lines changed 19, context: html, text, full: html, text
- src/hg/oneShot/pngLevelBench/pickUrls.py - lines changed 79, context: html, text, full: html, text
- src/hg/oneShot/pngLevelBench/pngLevelBench.c - lines changed 280, context: html, text, full: html, text
- src/hg/oneShot/pngLevelBench/render.sh - lines changed 15, context: html, text, full: html, text
9b9dc9590258144d7b7f17d1ecafb674d2d86956 Wed Sep 2 13:26:40 2026 -0700
- pngLevelBench: sweep the row filter as well as the level, refs #38109
The filter and the level interact, and #38107 picked the filter at the default
level only, so measuring one with the other pinned answers half a question.
pngLevelBench now takes -filters and -baseFilter, its -tab output carries a
filter column, and everything is compared against the pair the browser ships,
up at level 6. levelReport.py reads the new column and still accepts rows
written before it existed.
Two scripts around it grew what a second, larger corpus needed. pickUrls.py
takes --seed and --exclude, so a later sample does not repeat an earlier one.
render.sh takes its arguments rather than a hardcoded directory, and renders
several at once; six in parallel is about seven a second against a ticket
sandbox, against one every eight seconds one at a time, and it changes nothing
that is measured, since the encode is timed offline afterwards.
- src/hg/oneShot/pngLevelBench/README - lines changed 18, context: html, text, full: html, text
- src/hg/oneShot/pngLevelBench/levelReport.py - lines changed 114, context: html, text, full: html, text
- src/hg/oneShot/pngLevelBench/pickUrls.py - lines changed 20, context: html, text, full: html, text
- src/hg/oneShot/pngLevelBench/pngLevelBench.c - lines changed 162, context: html, text, full: html, text
- src/hg/oneShot/pngLevelBench/render.sh - lines changed 31, context: html, text, full: html, text
8f8455798f19c20cfabbf11e16c21f8352a02e9c Sat Sep 19 07:04:47 2026 -0700
- set ft_min_word_len=3 in browserSetup.sh so three-letter assembly names can be found in the assembly search box, refs #38387
The assembly search box asks hubApi for assemblies matching what was typed, and
that lookup is a MySQL FULLTEXT search over hgcentral.assemblyList. The table is
MyISAM, so ft_min_word_len decides the shortest word that gets into the index.
Mariadb defaults to 4, which leaves out every three-letter assembly name, so hs1,
rn7 and dm6 could not be found in a mirror or in a released docker image. hgwdev
has always run with 3, which is why the same search worked here.
updateBlatServers now sets the value, restarts Mariadb and then loads
hgcentral.sql. That order matters: the new value is only live after a restart,
and the FULLTEXT index is rebuilt by the DROP TABLE, CREATE and INSERT of
assemblyList in that dump, so no REPAIR is needed. updateBlatServers is the one
place hgcentral is reloaded, reached from mysqlDbSetup on install and from
cgiUpdate on both cgiUpdate and update, so one call site covers every path and
every OS.
An error from the init script is tolerated around the restart. In the docker
image Mariadb runs under runit, so a stop shuts the server down, the supervisor
starts it again a second later, and the init script reports a failure although
the restart worked. The running value is checked afterwards, and a warning names
the REPAIR command if it did not take.
Tested in a stock container that had ft_min_word_len=4 and no assemblyList table
at all. Afterwards hs1, rn7 and dm6 are all found through
hubApi/findGenome?browser=mustExist, with hs1 first for a search of hs1.
- src/product/installer/browserSetup.sh - lines changed 45, context: html, text, full: html, text
e0002dfd343ef6768b23d4ae4e54ed88f2553669 Sun Sep 20 14:39:55 2026 -0700
- registry: three tickets now have docent scripts
rm38086, rm38253 and rm38317 landed on #38252 this morning, from this
registry's own list of tickets that nothing was watching. Their rows said
there was no docent script, which stopped being true.
The check written yesterday for exactly this found all three on its first day,
by name, without anybody thinking to look. That is what the "-" half of the
docent column is for.
The unwatched list is four now, not seven.
refs #38391, refs #38252
- src/utils/testRegistry/registry.tsv - lines changed 3, context: html, text, full: html, text
b1a4f0619269b4c813036fc592c97471de310515 Sun Sep 20 17:53:28 2026 -0700
- registry: hold every v504 ticket, including the ones a unit test is wrong for
The table held only the tickets that want a unit test, 37 of the release's 66.
That cannot answer "how much of v504 is tested", because the 29 it left out are
indistinguishable from tickets nobody has looked at: both are absent.
So all 66 are here now, and the 29 carry a new why, "page" -- what changed is
what a page says or does, so the docent suite is the right test and no unit test
is wanted. Each says what changed and where the fix is, so the claim is
checkable rather than asserted; "this one does not need a unit test" was a
judgement living in one head, and now it is a row somebody can argue with.
A page row may not name a unit test, which check enforces. `needed` leaves them
out, since they are not waiting for anything. `unwatched` does not: a ticket
with no test of any kind is worth seeing whichever kind it should have had, and
that list is 19 now rather than 4 -- the four blocked ones plus fifteen that
nothing watches and nobody had recorded.
refs #38391
- src/utils/testRegistry/README - lines changed 11, context: html, text, full: html, text
- src/utils/testRegistry/registry.tsv - lines changed 39, context: html, text, full: html, text
- src/utils/testRegistry/testRegistry - lines changed 24, context: html, text, full: html, text
- src/utils/testRegistry/tests/expected/check.out - lines changed 2, context: html, text, full: html, text
- src/utils/testRegistry/tests/input/bad.tsv - lines changed 1, context: html, text, full: html, text
a4caffa71aa9775117f5da25038d5ca5dadcd47a Mon Sep 21 14:29:12 2026 -0700
- tests: name trashDirTester once in the hg/lib/tests all: target
859bc749b05 added the line twice. make no-ops the second one, so nothing
was broken, but the list should name it once. Found in code review.
refs #38303, refs #37623, refs #38391
- src/hg/lib/tests/makefile - lines changed 1, context: html, text, full: html, text
0855c081b7178591b4d1548ec822ce4ea329ec37 Mon Sep 21 14:29:21 2026 -0700
- tests: stop a comment dropping four testers out of hg/lib/tests all:
The all: target listed annoGratorTester on a commented line in the middle
of the list. The line above it ends in a backslash, so make joins the two
lines and the "#" then comments out the rest of the joined line. The
continuations carry that comment to the end, so binTest, customTrackTester,
hgvsTester and sqlCheck were never built by "make all". True since
b30a73b6c5f in 2021.
make test still built all four, because customTrackTest:, hgvsTest: and
binTest: each name their binary as a prerequisite. Only a bare "make all"
in this directory skipped them.
Moved the commented line below the list. All ten testers now build and
make test still passes.
refs #38391
- src/hg/lib/tests/makefile - lines changed 4, context: html, text, full: html, text
6f3f3596f3dc61a8a738717b9701e69a86b5bb0b Mon Sep 21 17:24:33 2026 -0700
- docent: wait: {gone:} for a selector to leave, and rm38257 stops racing itself
rm38257 went red in the 2026-09-21 nightly with the #38257 fix still live on
genome-test. The script was waiting on the wrong half of the click.
hgHubConnect.js switches the tab synchronously inside the click dispatch, while
topLinks.js closes the Account popup from a setTimeout(..., 0). So the tab is
the half that settles FIRST, and waiting for it returned a tick early: the
expect after it read a page that still had the popup on it. Measured with a
MutationObserver over the click, the tab goes active at t=43ms and the popup
goes on the next task.
wait: now also takes {gone: <selector>}, which waits for a selector to leave the
DOM, so a script can wait on the vanishing half of an answer. rm38257 uses it.
Six runs each way on genome-test, same build, only the script differing: 6 of 6
green with the new wait:, 3 of 6 red with the old one, failing at the same step
with the same message the nightly printed. The whole directory is green, 98 of
98.
refs #37892, refs #38252
- src/hg/utils/docent/README.md - lines changed 9, context: html, text, full: html, text
- src/hg/utils/docent/docent.js - lines changed 16, context: html, text, full: html, text
- src/hg/utils/docent/tests/regress/rm38257.docent.yaml - lines changed 12, context: html, text, full: html, text
67cf0a3977040d7f607149d36479886e3e9d12a3 Mon Sep 21 17:24:39 2026 -0700
- redmineCli: let a comment say who wrote it. No RM.
A comment Claude posts carries a "From Claude:" line, which is wrong when the
words are the developer's own and Claude only sent them. The comment
subcommand takes --written-by NAME now, and writes "Written by NAME, posted by
Claude:" instead. With no NAME it reads the name off the API key.
prepend_attribution recognises both lines, so text that already begins with
either one is posted unchanged, and a draft file can carry its own header.
5a7def973c68f61040fbc2328f83ebe6834b2a1b Mon Sep 21 17:25:44 2026 -0700
- Merge branch 'docentTests37892'
d6c216fa6a01dbd47ae3a8848d0b6456adf31a4b Mon Sep 21 17:31:58 2026 -0700
- hubApi: serve bigNarrowPeak tracks, refs #38395
initSupportedTypes() advertises bigNarrowPeak but allowedBigBedType() left
it out, so bigFileOpen() returned NULL for a type the API says it supports.
Three endpoints were affected: /getData/track and /list/schema reported the
bigDataUrl as missing although the file was there, and /list/chromosomes
killed the CGI, because bigFileChromInfoOutput() passed the null bbi
straight to bbiChromList().
Add bigNarrowPeak to allowedBigBedType(), guard the null in
bigFileChromInfoOutput() so a future divergence between the two lists is a
415 rather than a crash, and note in each list that they have to agree.
Adds a bigNarrowPeak test to the supportedTypes group covering all three
endpoints.
- src/hg/hubApi/apiUtils.c - lines changed 4, context: html, text, full: html, text
- src/hg/hubApi/tests/expected/bigNarrowPeak.gz - lines changed 0, context: html, text, full: html, text (a binary file or whitespace-only change or file-permission change shows no diff)
- src/hg/hubApi/tests/makefile - lines changed 14, context: html, text, full: html, text
d48a1f1935917a45b20ae782f4a0ab53da13e6a9 Tue Sep 15 12:53:04 2026 -0700
- hgTablesTest: skip an oversized page instead of dying inside the allocator, refs #38359
A dense file-backed track can hand back hundreds of megabytes for a single
five-megabyte test region. hg38 hgdp returned 602MB, which took carefulAlloc
past its 500MB ceiling, and carefulAlloc exits the process where it stands
rather than errAborting, on the grounds that errAbort itself allocates. So the
run ended with one line on stderr, nothing in the log, and every table still to
come forfeited. The arm in quickSubmit meant to catch exactly this and name the
track had never once run.
htmlPage now takes an optional ceiling on the response it will read into memory.
Past it the fetch frees what it has read and errAborts naming the url, which the
robot's errCatch turns back into an ordinary return of no page. The ceiling
defaults to none, which leaves hgNearTest, hgBlatTest and htmlCheck exactly as
they were. hgTablesTest sets it to 100MB, a fifth of the allocator ceiling: the
dyString roughly doubles as it grows and the old buffer is still live while the
new one fills, and the parsed page then sits alongside its text.
An oversized page is logged and skipped, not counted as an error. A track that
answers a 5Mb region with 600MB is one this robot cannot test, which is the same
situation the row count screen already catches before submitting; counting it
would put a failure in every weekly run and leave the summary as useless a gate
as the one that never failed.
The log is line buffered now as well. Finding out that a run died partway
through is what this robot is for, and a block of buffered lines lost on the way
out is part of how the old failure left no trace of which track it was on.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- src/hg/hgTablesTest/hgTablesTest.c - lines changed 37, context: html, text, full: html, text
a9054011188cb975a65a7d9767096a0ffdceb366 Mon Sep 21 17:34:46 2026 -0700
- netSlurpMaxTest: cover the response size ceiling, refs #38359
The fix this defends changes nothing on any page. Its only caller is the
hgTablesTest robot, and the failure it prevents is the process exiting from
inside carefulAlloc with nothing written to the log, so a unit test is the only
test there can be.
Four parts. netSlurpFileMax on a plain file, both sides of the boundary,
including a ceiling exactly at the file size, which has to read it. The same
calls under pushCarefulMemHandler, where carefulTotalAllocated() says whether
the abandoned buffer was really freed: a buffer left behind would stay counted
against the ceiling and the cap would buy one oversized page and no more. A
matched pair of forked children on a file past the allocator ceiling, one read
capped and one not, since exit(1) from inside the allocator cannot be seen any
other way. And htmlPageSetMaxSize reaching htmlSlurpWithCookies against a
server on the loopback interface, because the ceiling travels through a
module-wide static and that wiring can rot with no caller changing.
Backed the fix out three ways and watched each go red for its own reason.
Removing the size check fails 9 of the 18 assertions. Keeping the check and
dropping only the dyStringFree fails 3, and only the three that count
allocation. Reverting htmlSlurpWithCookies to a plain netSlurpFile fails 2,
and only the two that reach through htmlPage. Recorded as sandbox-ab.
The registry row carries "-" for the release: the ticket has no target version.
- src/lib/tests/expected/netSlurpMaxTest - lines changed 19, context: html, text, full: html, text
- src/lib/tests/netSlurpMaxTest.c - lines changed 362, context: html, text, full: html, text
- src/utils/testRegistry/registry.tsv - lines changed 1, context: html, text, full: html, text
4cc508894c798f9c27a347b7801b0215e15cfba7 Tue Sep 22 02:31:08 2026 -0700
- hgConfCatalog: register hgGateway.showRefBadge, refs #37925
Written by nightlyRegister.sh, which records the settings the tree
reads that the catalog was missing. Only facts copied off the call
site are filled in. No classification is guessed: a new boolean gets no
role=, because calling a release gate a knob would hide it from the
sunset report for good, and every row lands in the 'Awaiting review'
section until somebody reads the call site.
hgGateway.showRefBadge hg/hgGateway/hgGateway.c:1102 (38401)
wrote 1 row to the 'Awaiting review' section of hgConfCatalog.py; classify it and move it out
- src/hg/utils/hgConfCatalog/hgConfCatalog.py - lines changed 8, context: html, text, full: html, text
1f5a5224a1eae411c945406c4e1adb2d5b18ebcb Tue Sep 22 10:46:35 2026 -0700
- genarkLiftOverTest: set genarkLiftOver in the test's own conf, refs #38328
genarkLiftOverDbs returns NULL before it looks at anything when
genarkLiftOver is not set, so the test read as "0 back" on every line
and went red on an hg.conf that does not have the option. The build
account's conf does not have it. The test now writes its own conf and
sets the option, the same way geoMirrorSelfTest sets browser.node.
- src/hg/lib/tests/makefile - lines changed 6, context: html, text, full: html, text
99e615846246a19fdb5d01fcea5dce49179dd2ba Tue Sep 22 10:52:28 2026 -0700
- htmlPage: parse valueless tag attributes such as SELECTED
The attribute name scanner read everything up to the next equals sign, so
<OPTION SELECTED value='any'> became a single attribute named "SELECTED
value". A lookup for SELECTED then found nothing and the SELECT fell back
to its first option. The same happened to CHECKED on a checkbox, and to the
src in <script async src=...>. A name now ends at white space as well, with
a look-ahead so that spaces around the equals sign still work.
This is what put 21 soft errors in every hgNearTest robot run since v495.
refs #38413
- src/lib/tests/expected/valuelessAttrs.out - lines changed 15, context: html, text, full: html, text
- src/lib/tests/input/valuelessAttrs.html - lines changed 40, context: html, text, full: html, text
9f9322df2814b5b025ad6e41ecee500c3a0a6a81 Tue Sep 22 10:53:08 2026 -0700
- Merge branch 'htmlPageValuelessAttr'
aeb4691c5f621712c9918e5a6e6a58c8b2de837d Wed Sep 23 09:32:26 2026 -0700
- hgConfCatalog: hgGateway.showRefBadge and denseClick are release gates, refs #37925
Both came in through --auto-register. showRefBadge (#38401) gates the
reference badge in the gateway search results; denseClick (#38364) gates
per-item map boxes in a dense row, with a trackDb opt-in under it.
- src/hg/utils/hgConfCatalog/hgConfCatalog.py - lines changed 33, context: html, text, full: html, text
05c7e605c01e595561c32690eb44a7512041e540 Wed Sep 23 09:34:08 2026 -0700
- hubCheck: reject a bigBed type line that declares fewer than three fields, refs #36940
hgc already stops on "type bigBed 1" or "type bigBed 2", but hubCheck
passed both, so a hub author only found out when a user clicked an item.
Check the declared count against the minimum of three next to the
existing check against the file's field count. A bare "type bigBed"
does not reach this code and is unchanged.
Adds a fieldCountTooFew test with bigBed 1 and bigBed 2 tracks.
- src/hg/utils/hubCheck/tests/expected/fieldCountTooFew.output.txt - lines changed 4, context: html, text, full: html, text
- src/hg/utils/hubCheck/tests/input/fieldCountTooFew.txt - lines changed 21, context: html, text, full: html, text
- src/hg/utils/hubCheck/tests/makefile - lines changed 5, context: html, text, full: html, text
eb4042bf96a8a37ea613e7c0860c6a49d210bc24 Wed Sep 23 09:38:32 2026 -0700
- hgConfCatalog: rebuild the age cache at v504, refs #37925
Built at v503, so gates added since had no date. Rebuilt with
harvestHgConf.py --age --refresh after v504_branch was cut.
- src/hg/utils/hgConfCatalog/hgConfAges.json - lines changed 115, context: html, text, full: html, text
7cadd1e0531239dac79b60e741e8ba3221a32cac Wed Sep 23 09:48:31 2026 -0700
- hgConfCatalog: nightlyRegister.sh rebuilds the age cache once a release, refs #37925
Nothing refreshed the committed hgConfAges.json: the wrap-up rebuilds a
private copy in the build's logs, so the committed one went stale at
every release and new gates showed as 'age unknown'. When CGI_VERSION
is newer than the cache, fetch all release branches, rebuild the cache
once the new v*_branch exists, and commit it with the catalog.
- src/hg/utils/hgConfCatalog/nightlyRegister.sh - lines changed 77, context: html, text, full: html, text
bcfcb704e8296f881896ee6197365ae719ea61d6 Wed Sep 23 11:06:11 2026 -0700
- docent: rm38283 finds the container link by its text and a delimiter, refs #38252 #38283
Since 09f26ed9a7d (#38380) the page adds &hgsid= to every cgi-bin link, so the
description page's link no longer ends with the track name and the $= check failed.
A plain *= would pass without the substitution, because hgc prints its own hgTrackUi
and hgTables links that name the composite. So the check now requires the fixture's
link text, and "&" or the end of the href after the name. The delimiter matters
because _rm38283Super is a prefix of _rm38283SuperKid.
Passes on genome-test. Fails at step 5 on the v503 docker image, and fails when either
check is pointed at a wrong name or a prefix of the right one.
- src/hg/utils/docent/tests/regress/rm38283.docent.yaml - lines changed 13, context: html, text, full: html, text
347d7590b576fa145bfd0d73cee612536158ed60 Wed Sep 23 11:06:11 2026 -0700
- docent: rm38298 expects the reworded codon note, refs #38252 #38298
d459a7a421c changed the note from "at this codon" to "before this codon", because the
indel lies upstream of the shifted codon. The check now carries the whole new clause,
and the header makes the same correction.
Passes on genome-test. Fails at step 4 on hgwbeta (v503), which has no note.
- src/hg/utils/docent/tests/regress/rm38298.docent.yaml - lines changed 5, context: html, text, full: html, text
966c49bdf93dada183133e06522bfb0152de6168 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.
- src/hg/utils/docent/tests/regress/README.txt - lines changed 21, context: html, text, full: html, text
- src/hg/utils/docent/tests/regress/nightly.sh - lines changed 14, context: html, text, full: html, text
- src/hg/utils/docent/tests/regress/nightlyStatus.py - lines changed 435, context: html, text, full: html, text
722e46a2cca739fb7abe042315e8ca3c5e55f8f5 Wed Sep 23 14:25:15 2026 -0700
- Run the hg/utils tests from make test, and fix the two that had gone red, no redmine
make test never reached hg/utils. hg/makefile only descends into an app that
has a tests/makefile, and hg/utils has none, so the hubCheck, vcfToHgvs and
other hg/utils tests were skipped without a message. Added utils to TEST_DIRS.
hubCheck stopped warning about a track with no description page after
1258d7f65e7. A track with no page now keeps the empty string that
trackDbCustom.c sets, and hubCheck tested for NULL. It now uses isEmpty().
badType gained a real error when 571aecdf42c stopped dropping tracks, and its
expected output was never updated. vcfToHgvs stopLoss reads the live hg38
ncbiRefSeq tables, which now have 32 more transcripts and NM_153819.2.
- src/hg/utils/hubCheck/hubCheck.c - lines changed 1, context: html, text, full: html, text
- src/hg/utils/hubCheck/tests/expected/badType.output.txt - lines changed 3, context: html, text, full: html, text
- src/hg/utils/vcfToHgvs/tests/expected/stopLoss.tab - lines changed 34, context: html, text, full: html, text
91008f116877a4ac9de458dec4abb98ca3249dbf Wed Sep 23 17:15:55 2026 -0700
- docent status page: try-it links for sessions loaded by URL, none on hgwbeta for named ones, refs #38252
A named session lives in one machine's hgcentral, so its hgwbeta link only answered
"Could not find session"; those rows now offer genome-test alone and say why. A
session loaded from a text file by URL works on any server, so a script that loads one
now gets a link, with both servers.
- src/hg/utils/docent/tests/regress/nightlyStatus.py - lines changed 12, context: html, text, full: html, text
4bf8479a43a493e2899953b7358c9464abbc3959 Wed Sep 23 17:15:55 2026 -0700
- docent: regression scripts load sessions from text files, not from one machine's hgcentral, refs #38252
A named session runs only on the machine whose hgcentral holds it, so hgwbeta and the RR
answered "Could not find session". The sessions are now text files in
regress/sessionFiles, saved with hgSession's own save to file, and the scripts load them
by raw GitHub URL. rm36805, rm35580 and rm36340 pass on genome-test and hgwbeta.
rm36340's session held its custom tracks as a customTrash table on genome-test. The
track source is a file of its own now, loaded through hgt.customText, without two
commented-out tracks whose URLs carry a password. Its first check now asks for a custom
track row and the hub's row, and fails when the session file does not load.
A lifted session cannot be a file: it names its quickLift hub by a path on the server
that made it, and re-pointing it does not work (#38046). rm37388, rm37389 and rm38272
build that lift in steps instead, the GenArk GCA_018466835.2 mitochondrion lifted to hg38,
and pass on genome-test and hgwbeta. rm38272 also fails on genome.ucsc.edu (v503) at its
settings page, with the bug's own error, so it gains a release-ab proof line.
- src/hg/utils/docent/tests/regress/rm35580.docent.yaml - lines changed 3, context: html, text, full: html, text
- src/hg/utils/docent/tests/regress/rm36340.docent.yaml - lines changed 14, context: html, text, full: html, text
- src/hg/utils/docent/tests/regress/rm36805.docent.yaml - lines changed 4, context: html, text, full: html, text
- src/hg/utils/docent/tests/regress/rm37388.docent.yaml - lines changed 14, context: html, text, full: html, text
- src/hg/utils/docent/tests/regress/rm37389.docent.yaml - lines changed 13, context: html, text, full: html, text
- src/hg/utils/docent/tests/regress/rm38272.docent.yaml - lines changed 12, context: html, text, full: html, text
- src/hg/utils/docent/tests/regress/sessionFiles/README.txt - lines changed 34, context: html, text, full: html, text
- src/hg/utils/docent/tests/regress/sessionFiles/RM_35326_bug.txt - lines changed 250, context: html, text, full: html, text
- src/hg/utils/docent/tests/regress/sessionFiles/RM_36805_TOGA_hangs.txt - lines changed 87, context: html, text, full: html, text
- src/hg/utils/docent/tests/regress/sessionFiles/quickLift_CT_hub.ct.txt - lines changed 207, context: html, text, full: html, text
- src/hg/utils/docent/tests/regress/sessionFiles/quickLift_CT_hub.txt - lines changed 281, context: html, text, full: html, text
1fbda5badde574c10884e5339fdda1f5b7495990 Thu Sep 24 13:45:30 2026 -0700
- docent: regression script for the Sessions page Replace keeping who can load it, refs #38311
rm38311 saves a private session from the save card, saves over it with the
private box unticked, and checks that the row still has its lock. It passes on
hgwbeta (v504) and genome-test, and fails on hgw0 (v503).
Docent changes it needed:
- a fill: verb, to type into any form field
- login: no longer dies when a navigation is still under way during its
bad-password check, which is what broke it on ticket parks
- a park is driven on its https port, because hgLogin posts its form to
https:// on the port it was reached on; the parks' self-signed certificate
is accepted on loopback targets only
- hgw0 maps to hgcentral, and a park's https port finds its hg.conf
- src/hg/utils/docent/README.md - lines changed 3, context: html, text, full: html, text
- src/hg/utils/docent/docent.js - lines changed 32, context: html, text, full: html, text
- src/hg/utils/docent/targetConf.js - lines changed 4, context: html, text, full: html, text
- src/hg/utils/docent/tests/regress/README.txt - lines changed 4, context: html, text, full: html, text
- src/hg/utils/docent/tests/regress/rm38311.docent.yaml - lines changed 68, context: html, text, full: html, text
896eb991fff50f44f18811a05171e36fa111163d Thu Sep 24 17:13:20 2026 -0700
- quickLift: leave empty blocks out of a protein alignment before lifting it, refs #38249
The UniProt bigPsl files store block sizes in bases, and pslFromBigPsl divides them by
three, so a block shorter than a codon loads with size 0. pslTransMap rejects such an
alignment and aborts, which replaced the whole lifted SwissProt track with a BUG message.
About one alignment in eight has a block like this. quickLiftPsl now lifts a copy with
the empty blocks removed. quickLiftTester has a new case in the shape of Q96ME1-2.
- src/hg/lib/quickLift.c - lines changed 53, context: html, text, full: html, text
- src/hg/lib/tests/expected/quickLiftTest - lines changed 9, context: html, text, full: html, text
- src/hg/lib/tests/quickLiftTester.c - lines changed 25, context: html, text, full: html, text
0ef19267989fe032759da765ca5475bebf2803bd Thu Sep 24 17:13:21 2026 -0700
- hgTracks: no codon translation on a quickLifted maf track at base level, refs #38249
The base-level view opened its connections for codon translation on the reference
assembly and read the frames table there. For a lifted track both belong to the other
assembly. When the reference is a hub assembly such as hs1 there is no database of that
name, and the page aborted. A lifted maf now shows bases without codon translation.
- src/hg/hgTracks/wigMafTrack.c - lines changed 9, context: html, text, full: html, text
8de67388be9a67cb94ba95615b7643b4ddc385da Thu Sep 24 17:48:19 2026 -0700
- quickLift: give a lifted maf block the reference's own bases, refs #38249
Inside a chain block the two assemblies run in step but need not agree base for base, and
the first row of a lifted block still carried the other assembly's letters. The details
page showed hg19's base in the human row of a block lifted onto hg38. quickLiftMafs now
reads the reference sequence once over the span of the lifted blocks and writes it into
that row, leaving the gaps where they are.
The lifted blocks are also sorted by position now. On a chain that turns the alignment
over they came back last to first, and the details page listed them in that order.
- src/hg/hgTracks/wigMafTrack.c - lines changed 1, context: html, text, full: html, text
- src/hg/lib/quickLift.c - lines changed 49, context: html, text, full: html, text
ac540bf096a2398161cc910bf4fd965541469e06 Fri Sep 25 08:47:53 2026 -0700
- registry: 38311 now has a docent script, fixes the nightly make test rot check, refs #38391
- src/utils/testRegistry/registry.tsv - lines changed 1, context: html, text, full: html, text
284ccd608f06ac8c0222b56011aaf22bc7889d77 Sat Sep 26 12:12:04 2026 -0700
- hg/lib tests: VCF INFO filters and colors, and trackHubSkipHubName on names with no second underscore, refs #37617, #37618, #38414
vcfInfoFilterTester reads a five-line VCF and builds each filter and color map from a
hand-made trackDb and cart: filter.*, filterText.* and filterValues.* on INFO fields and
on vep sub-fields, colorByInfo with the first-declared value winning, and the warning for
each setting the VCF header cannot support. trackHubSkipHubNameTester checks where the
returned pointer lands before reading through it.
- src/hg/lib/tests/expected/trackHubSkipHubNameTest - lines changed 18, context: html, text, full: html, text
- src/hg/lib/tests/expected/vcfInfoFilterTest - lines changed 117, context: html, text, full: html, text
- src/hg/lib/tests/input/vcfInfoFilter/test.vcf - lines changed 14, context: html, text, full: html, text
- src/hg/lib/tests/makefile - lines changed 14, context: html, text, full: html, text
- src/hg/lib/tests/trackHubSkipHubNameTester.c - lines changed 56, context: html, text, full: html, text
- src/hg/lib/tests/vcfInfoFilterTester.c - lines changed 219, context: html, text, full: html, text
4e33b15085b7cd23fe95256b9d2e9911751aa598 Sat Sep 26 12:12:04 2026 -0700
- lib tests: htmlEncode and attributeEncode on NULL, and the tag strippers on labels with no tags, refs #38226, #37617
Runs under the careful allocator, whose marker straight after each block makes a missing
terminator show up on every run.
- src/lib/tests/expected/htmlEncodeTest - lines changed 29, context: html, text, full: html, text
- src/lib/tests/htmlEncodeTest.c - lines changed 71, context: html, text, full: html, text
9bd1a5356bcf1a68ea715e5b0d9c3731203f6d88 Sat Sep 26 12:12:14 2026 -0700
- docent: hubUpload: verb, which drops files into the Hub Upload dashboard, and a value: check in expect: for what a form field holds, refs #37892, #38398
Nothing is uploaded by hubUpload:, so a run leaves nothing on the server. value: exists
because a selector cannot read a field that a framework draws: it sets the value property,
and [value=...] reads only the attribute.
- src/hg/utils/docent/README.md - lines changed 2, context: html, text, full: html, text
- src/hg/utils/docent/docent.js - lines changed 64, context: html, text, full: html, text
- src/hg/utils/docent/tests/README.txt - lines changed 3, context: html, text, full: html, text
521a3f76eebab0854aa5c46374356cadddd6ef7d Sat Sep 26 12:12:14 2026 -0700
- docent regression scripts for the hgTracks tooltip text and the Hub Upload file card, refs #38252, #38226, #38398
Both fail on hgwbeta (v504) and pass on genome-test; the proof lines say what each failure
was.
- src/hg/utils/docent/tests/regress/rm38226.docent.yaml - lines changed 62, context: html, text, full: html, text
- src/hg/utils/docent/tests/regress/rm38398.docent.yaml - lines changed 60, context: html, text, full: html, text
4ac2738c397a05c257e089715017f76c619b2634 Sat Sep 26 12:12:14 2026 -0700
- testRegistry: rows for #37617, #37618, #38226, #38398 and #38414, refs #38391
- src/utils/testRegistry/registry.tsv - lines changed 6, context: html, text, full: html, text
e533c670a2b61d3451a8d0da46e032f147fc7a19 Sat Sep 26 12:12:21 2026 -0700
- Merge branch 'docentTests37892'
beb596d6144e0deb9ce96c5955c71e6d5f4eaec9 Sat Sep 26 13:01:02 2026 -0700
- trackHub: add an hg.conf switch for hub description page handling, refs #38126
hubHtmlSanitizeOn() in trackHub.c reads the hg.conf setting hubHtmlSanitize,
default off, and the description page code in lib and cgilib asks it. With
the setting off, that code behaves as it did in v503. hubCheck follows the
same setting.
- src/hg/cgilib/cartJson.c - lines changed 5, context: html, text, full: html, text
- src/hg/lib/customFactory.c - lines changed 5, context: html, text, full: html, text
- src/hg/lib/customTrack.c - lines changed 2, context: html, text, full: html, text
7a356d85dba1647c6d918b315e075da7e31ab7cb Sat Sep 26 12:10:36 2026 -0700
- htmlSanitize: keep simple svg drawings in hub description pages, refs #38428
Description pages that draw small svg shapes, such as a colour legend, came
out empty. svg, g, circle, ellipse, rect, line, polyline, polygon and path
now come through with their size, position, fill and stroke attributes.
Other svg elements are left out.
Over the 5390-page hub corpus only the 32 pages that contain an svg
change, and no page's text changes.
- src/lib/htmlSanitize.c - lines changed 88, context: html, text, full: html, text
- src/lib/tests/expected/htmlSanitizeTest - lines changed 28, context: html, text, full: html, text
- src/lib/tests/htmlSanitizeTest.c - lines changed 22, context: html, text, full: html, text
99eb74885ff5bce42cadafee93274df7039dcab5 Sat Sep 26 17:34:11 2026 -0700
- unit tests for four v503 tickets, refs #38391, #37262, #38120, #38107, #38125, #38154
cgiDecodeTest prints what malformed and cut-short %hh escapes decode to, and
checks that cgiDecode never reads past the length it is given. udcDotsTest
prints the cache directory udc makes for remote URLs with "." and ".." in
them, including the ones that must abort. pngWriteTest writes a memGfx image
as a PNG, reads it back with libpng, compares every pixel, and checks the row
filter of every row. pgSnpManyAllelesTester builds per-allele counts from a
VCF record with 150 ALT alleles.
Each test fails with its fix backed out, except that zlib-ng was not swapped
out for #38125. The test registry gets a row for each ticket.
- src/hg/lib/tests/expected/pgSnpManyAllelesTest - lines changed 9, context: html, text, full: html, text
- src/hg/lib/tests/input/pgSnpManyAlleles/test.vcf - lines changed 8, context: html, text, full: html, text
- src/hg/lib/tests/makefile - lines changed 8, context: html, text, full: html, text
- src/hg/lib/tests/pgSnpManyAllelesTester.c - lines changed 60, context: html, text, full: html, text
- src/lib/tests/cgiDecodeTest.c - lines changed 107, context: html, text, full: html, text
- src/lib/tests/expected/cgiDecodeTest - lines changed 33, context: html, text, full: html, text
- src/lib/tests/expected/pngWriteTest - lines changed 6, context: html, text, full: html, text
- src/lib/tests/expected/udcDotsTest - lines changed 26, context: html, text, full: html, text
- src/lib/tests/makefile - lines changed 21, context: html, text, full: html, text
- src/lib/tests/pngWriteTest.c - lines changed 169, context: html, text, full: html, text
- src/lib/tests/udcDotsTest.c - lines changed 70, context: html, text, full: html, text
- src/utils/testRegistry/registry.tsv - lines changed 7, context: html, text, full: html, text
9cdd7a15f40c41874620a7d2bc907d77489f7746 Sat Sep 26 17:43:32 2026 -0700
- docent: setVis:, rightClick:, and drag: then: none / dialog: auto, refs #37892, #38035, #38071, #38087
setVis: sets a track's visibility with its own dropdown under the image. The change
event fires and the page's handler runs, with no navigation. track: asks for the mode in
a URL, so it cannot see what that handler does to the page.
rightClick: opens the track right-click menu and picks an entry by its text. An exact
match wins over a substring. A miss fails the run and lists the entries on offer.
drag: then: none leaves the drag-select dialog open for later click: steps. dialog: auto
hands the selection to dragSelect.selectEnd(), so the page decides between the dialog
and a straight zoom instead of the verb forcing the dialog on.
A track name ending in * now matches a row id by prefix, for custom tracks. shot: also
captures an open right-click menu.
- src/hg/utils/docent/README.md - lines changed 4, context: html, text, full: html, text
- src/hg/utils/docent/docent.js - lines changed 135, context: html, text, full: html, text
- src/hg/utils/docent/tests/README.txt - lines changed 6, context: html, text, full: html, text
2daf01cbbc39c63db64caccf4a87f20a7f2f5f97 Sat Sep 26 17:43:37 2026 -0700
- docent regression scripts for the v503 tickets, refs #38252, #37972, #37987, #37990, #38027, #38033, #38035, #38039, #38071, #38072, #38082, #38087, #38120, #38154, #38155, #38231
One script per ticket. Each one passes on genome-test. Twelve also fail on a v502_branch
build for the reason the script exists, and carry a release-ab proof line. rm38072,
rm38120 and rm38231 can never fail on a released build, and their headers say why.
- src/hg/utils/docent/tests/regress/rm37972.docent.yaml - lines changed 96, context: html, text, full: html, text
- src/hg/utils/docent/tests/regress/rm37987.docent.yaml - lines changed 67, context: html, text, full: html, text
- src/hg/utils/docent/tests/regress/rm37990.docent.yaml - lines changed 47, context: html, text, full: html, text
- src/hg/utils/docent/tests/regress/rm38027.docent.yaml - lines changed 32, context: html, text, full: html, text
- src/hg/utils/docent/tests/regress/rm38033.docent.yaml - lines changed 53, context: html, text, full: html, text
- src/hg/utils/docent/tests/regress/rm38035.docent.yaml - lines changed 61, context: html, text, full: html, text
- src/hg/utils/docent/tests/regress/rm38039.docent.yaml - lines changed 38, context: html, text, full: html, text
- src/hg/utils/docent/tests/regress/rm38071.docent.yaml - lines changed 51, context: html, text, full: html, text
- src/hg/utils/docent/tests/regress/rm38072.docent.yaml - lines changed 34, context: html, text, full: html, text
- src/hg/utils/docent/tests/regress/rm38082.docent.yaml - lines changed 51, context: html, text, full: html, text
- src/hg/utils/docent/tests/regress/rm38087.docent.yaml - lines changed 88, context: html, text, full: html, text
- src/hg/utils/docent/tests/regress/rm38120.docent.yaml - lines changed 53, context: html, text, full: html, text
- src/hg/utils/docent/tests/regress/rm38154.docent.yaml - lines changed 53, context: html, text, full: html, text
- src/hg/utils/docent/tests/regress/rm38155.docent.yaml - lines changed 68, context: html, text, full: html, text
- src/hg/utils/docent/tests/regress/rm38231.docent.yaml - lines changed 41, context: html, text, full: html, text
9cc5eeb88ad0d6bea3449fcc1de1fbe54d79dafd Sat Sep 26 17:47:52 2026 -0700
- docent regression scripts for hgLogin and a batch of page fields, refs #38252, #38011, #38057
- src/hg/utils/docent/tests/regress/rm38011.docent.yaml - lines changed 68, context: html, text, full: html, text
- src/hg/utils/docent/tests/regress/rm38057.docent.yaml - lines changed 57, context: html, text, full: html, text
d5dd2e676327434c209118ba222b50d1b4ef3b00 Sat Sep 26 17:58:10 2026 -0700
- registry: #38120 and #38154 now have docent scripts, so testRegistry check passes again, refs #38391, #38252
- src/utils/testRegistry/registry.tsv - lines changed 2, context: html, text, full: html, text
d4e9b27ceb9fe5be2e6c121d7cc74adccf23a7f1 Sun Sep 27 02:30:51 2026 -0700
- hgConfCatalog: register hubHtmlSanitize, refs #37925
Written by nightlyRegister.sh, which records the settings the tree
reads that the catalog was missing. Only facts copied off the call
site are filled in. No classification is guessed: a new boolean gets no
role=, because calling a release gate a knob would hide it from the
sunset report for good, and every row lands in the 'Awaiting review'
section until somebody reads the call site.
hubHtmlSanitize hg/lib/trackHub.c:1013 (38126)
wrote 1 row to the 'Awaiting review' section of hgConfCatalog.py; classify it and move it out
- src/hg/utils/hgConfCatalog/hgConfCatalog.py - lines changed 7, context: html, text, full: html, text
ce29202faf7a2b48e62a6e3f579ba09000d00c0b Sun Sep 27 15:51:36 2026 -0700
- docent: put the server's warning text in a failure message, refs #38252
A run that failed on noText: "Warning/Error", or on a custom track that
never loaded, said only that the server complained. The reason was left
in the Apache error log. The new serverWarnings() reads the hgTracks
warning list and hgCustom's Error/Warning line. A failed expect: and a
failed addCustomTrack now print each one as a "server said:" line.
- src/hg/utils/docent/docent.js - lines changed 29, context: html, text, full: html, text
8be28d5bfd35a87dda68baa948a71463026d2b6d Sun Sep 27 15:51:48 2026 -0700
- Merge branch 'docentTests37892'
59acd9ed55905b9bb06229c1547374df9f8196d8 Mon Sep 28 09:39:41 2026 -0700
- Merge branch 'rm-38387'
dba11b63364870388011d5f04c6563ed440eb2a1 Thu Sep 24 13:49:56 2026 -0700
- quickLift: a container set back to show no longer stays hidden on the target, refs #38198
When hgTracks arrives from a lift (hideTracks), it read a quickLifted
superTrack's state from the cart. It copied the source's bare cart value, such
as wgEncodeReg4, to hub_NNN_wgEncodeReg4 and then removed the bare one. That
had two effects. A container hidden before one lift kept the stored hide after
every later lift. This happened because hgTracks prunes a container value that
equals its default, so a container set back to show left nothing to carry
over. Visiting the target also deleted the source's own setting.
The cart read was added for #37535, when the lifted stanza still ended with
the source's "superTrack on hide". #37969 removed that line, so the stanza is
now correct. On a lift the stanza decides again: any hub_ value for the
container is dropped, and the source's value is left alone.
Also write "visibility show" for the container rather than "visibility hide".
walkTree passed "tvShow" to hTvFromString, which does not know that string and
returns hide.
With this change, a container hidden on the source keeps its earlier stanza on
the target, the same as a hidden track.
- src/hg/hgTracks/hgTracks.c - lines changed 9, context: html, text, full: html, text
b1d1b8806245f651bfa6c41230c77797c324d16d Mon Sep 28 09:50:59 2026 -0700
- docent rm38198: cover the reopen, a container set back to show stayed hidden on the target, refs #38198
Adds Jairo's three-lift recipe to the existing script: show wgEncodeReg4 with
H3K27ac, lift; hide the container, lift; show it again, lift. It checks that
H3K27ac is on the target after lift 3, that the source container is still
hidden after the lift 2 target visit, and that H3K27ac stays on the target
after lift 2. Each check fails on its own on a build without dba11b63364.
- src/hg/utils/docent/tests/regress/rm38198.docent.yaml - lines changed 56, context: html, text, full: html, text
2bdcf31450f998eff8aaf558eabdae8aa949f3af Mon Sep 28 10:07:57 2026 -0700
- hgConfCatalog: classify hubHtmlSanitize as a release gate, refs #37925 #38126
The nightly auto-register had written the row but left it unclassified,
so the reconcile flagged it. It ships off in v504 and is meant to flip on
in v505, so it is a gate.
- src/hg/utils/hgConfCatalog/hgConfCatalog.py - lines changed 16, context: html, text, full: html, text
bb609239f772f20c20da2ff5e67276a92e26f5e5 Mon Sep 28 14:52:30 2026 -0700
- Merge branch 'pngLevel38109', refs #38109
27ded228b74091b4d9bf1bccfcc98b11eac32483 Mon Sep 28 15:04:56 2026 -0700
- trackCheckRobot: skip hub-backed assemblies and wait longer for slow pages, refs #37424
The robot lists tracks from each assembly's MySQL trackDb table. Hub-backed
assemblies (dbDb nibPath "hub:...") have no such table, so 17 GenArk
assemblies failed with "Unknown database" every week. They are now left out.
The 30 second timeout was too short for seven tracks that fail every release.
The wuhCor1 phylogenetic tree tracks take about 40 seconds in hgTracks. The hg38
470-way and 241-way alignment details pages take 2 to 6 minutes in hgc. hgTracks
requests now wait 120 seconds and hgc requests wait 600 seconds.
- src/utils/qa/weeklybld/trackCheckRobot.py - lines changed 9, context: html, text, full: html, text
fed2e9c1d310026a998c2212a2e2508670a16373 Mon Sep 28 15:16:04 2026 -0700
- trackCheckRobot: probe faceted subtracks again, keep hub-backed dbs that have tables, show HGERROR text, refs #37424
Since #37662 a subtrack of a faceted composite can no longer override its
hidden ancestors, so "<subtrack>=full" after hideAll drew nothing. hg38 fell
from 19608 checked tracks to 9927, and mm10 from 8095 to 6182. For those
subtracks the robot now sets the parent composite and superTrack to full and
adds <subtrack>_sel=1. The other default-selected subtracks draw too, so only
hgc links with g=<subtrack> are kept.
The hub-backed skip also dropped hs1, rn8 and mpxvRivers. They have a "hub:"
nibPath but also a MySQL database, and they were checked before. Only
hub-backed assemblies without a database are skipped now.
HGERROR lines now include the message from the page, for example
"No chainAnoCar1 track in database hg38 for chr7".
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- src/utils/qa/weeklybld/trackCheckRobot.py - lines changed 71, context: html, text, full: html, text
1a2f5a5b07855da8d191c0b9358c945d6abe9f74 Mon Sep 28 15:17:28 2026 -0700
- trackDb: fix the netThaSir1 chain table and drop missing hg18 pgSnp prediction tables, refs #37424
The hg38 netThaSir1 stanza was copied from netAnoCar1 and kept its type line, so
hgc looked for chainAnoCar1 and every click failed. It now names thaSir1 and
chainThaSir1.
The hg18 pgKb1Comb, pgNb1, pgMd8, pgTk1 and pgAbtSolid tracks named SIFT and
PolyPhen tables that exist only on hgwdev and were never released. The details
page warned on every click on beta and the RR. The two settings are removed.
- src/hg/makeDb/trackDb/human/chainNetVertebrate.ra - lines changed 1, context: html, text, full: html, text
- src/hg/makeDb/trackDb/human/hg18/trackDb.ra - lines changed 21, context: html, text, full: html, text
3607635bd5f7e1f690f7a93ef30e9530387f817b Tue Sep 29 10:58:30 2026 -0700
- cart: keep hgPcrResult_imgOrd, the PCR track's place after a drag, refs #38442
The check on hgPcrResult_<db> matches the hgPcrResult_ prefix, and hgPcrResult
is also the name of the track that shows the result. So when a user dragged
any track, the cart dropped hgPcrResult_imgOrd on the next load, and the PCR
track went back to the bottom of the image on every zoom or scroll. Exclude
that name exactly, the way hgPcrResult_targetStyle is already excluded.
da449b4fe2039f200a2f93d5209c48fe98c0a534 Tue Sep 29 10:58:30 2026 -0700
- cartPcrVarTester: which hgPcrResult_ cart variables survive a cart load, refs #38442
Feeds hgPcrResult_ variables through cartParseOverHash() and says which are
kept. With the cart.c fix backed out it shows hgPcrResult_imgOrd dropped and
nothing else changes. Registry row and catalog note added.
- src/hg/lib/tests/cartPcrVarTester.c - lines changed 74, context: html, text, full: html, text
- src/hg/lib/tests/expected/cartPcrVarTest - lines changed 13, context: html, text, full: html, text
- src/hg/lib/tests/makefile - lines changed 8, context: html, text, full: html, text
- src/hg/utils/cartFileVarCatalog/cartFileVarCatalog.py - lines changed 3, context: html, text, full: html, text
- src/utils/testRegistry/registry.tsv - lines changed 1, context: html, text, full: html, text
f3bec731c93f26f8f1984fd727c6ee55ebf99f85 Tue Sep 29 13:00:12 2026 -0700
- docent regression scripts for three v505 tickets, and registry updates, refs #37617, #37618, #38442, #38249, #38252
rm37617 checks that filter.AF on a VCF INFO field hides the variants below the
trackDb minimum, and rm37618 that colorByInfo colors each item by its INFO value.
Both use a four-variant fixture hub, docentFixtures/rm37617. rm38442 runs the
ticket's PCR search, sets the places a drag saves, and checks that the PCR track
keeps its place after a zoom. All three fail on hgwbeta (v504) and pass on
genome-test.
registry.tsv names the three scripts, adds a row for #38387, and raises the
#38249 quickLiftTester row to sandbox-ab: backing out either quickLift fix by
hand turns the test red.
- src/hg/utils/docent/tests/regress/rm37617.docent.yaml - lines changed 47, context: html, text, full: html, text
- src/hg/utils/docent/tests/regress/rm37618.docent.yaml - lines changed 35, context: html, text, full: html, text
- src/hg/utils/docent/tests/regress/rm38442.docent.yaml - lines changed 54, context: html, text, full: html, text
- src/utils/testRegistry/registry.tsv - lines changed 6, context: html, text, full: html, text
9e346e2f237e080a265998bc07155abc28c341f2 Tue Sep 29 13:23:37 2026 -0700
- Merge branch 'svg38428'
7b3bd7a453e354dc0d4003bc7c65b073866f16f4 Tue Sep 29 13:35:06 2026 -0700
- hgGateway: read a hub assembly's description the way other hub pages are read, refs #38430
- src/hg/hgGateway/hgGateway.c - lines changed 8, context: html, text, full: html, text
3842ba31ab0b697b0d4026b5751da7dac7c84e35 Tue Sep 29 13:49:49 2026 -0700
- htmlSanitize: keep the stdTbl and copyLinkSpan class names, refs #38126
GenArk description pages use these two classes from our own stylesheet and
scripts: stdTbl for bordered tables, and copyLinkSpan with data-target for
the Copy button next to the share link. They now come through, and
data-target gets the same prefix as the id it names.
Style values are now read the same way on every pass, so a page that is
saved again comes out unchanged.
Over the 5390-page hub corpus, 278 pages change, all in class or
data-target only, and no page's text changes.
- src/lib/htmlSanitize.c - lines changed 173, context: html, text, full: html, text
- src/lib/tests/expected/htmlSanitizeTest - lines changed 25, context: html, text, full: html, text
- src/lib/tests/htmlSanitizeTest.c - lines changed 15, context: html, text, full: html, text
df4449e992e7607d8f038dbbceadd61e274cd8d9 Tue Sep 29 13:49:55 2026 -0700
- Merge branch 'descFix38126'
27e27b2c53090276a82fa8a4a8ae89f8db288263 Tue Sep 29 14:13:18 2026 -0700
- docent rm38198 release-ab proof line, and registry rows for #38428 and #38430, refs #38198, #38428, #38430, #38252
rm38198's container reopen section fails on hgwbeta (v504, which lacks
dba11b63364) and passes on genome-test. htmlSanitizeTest goes red when the svg
allowlist of 7a356d85dba is backed out by hand, so #38428 gets a sandbox-ab row.
#38430 gets a page row with no test yet. Both changes sit behind the
hubHtmlSanitize gate.
- src/hg/utils/docent/tests/regress/rm38198.docent.yaml - lines changed 1, context: html, text, full: html, text
- src/utils/testRegistry/registry.tsv - lines changed 2, context: html, text, full: html, text
49e53454d32ce13f5af4ece42112423534102fdd Tue Sep 29 14:30:20 2026 -0700
- docent regression scripts for #38428 and #38430, and the #38387 registry note, refs #38428, #38430, #38387, #38252
rm38428 checks that a hub track's svg color legend survives the description
filter and the script inside it does not. rm38430 checks that hgGateway filters
a hub assembly's description page. Both need hubHtmlSanitize=on, and both fail
on a v504_branch build with the gate on and pass on genome-test. Fixtures in
docentFixtures/rm38428 and rm38430.
The #38387 registry note records the docker QA instances: kent-tip, built after
the fix, runs ft_min_word_len=3 and finds hs1; kent-beta, built before it, runs 4
and does not.
- src/hg/utils/docent/tests/regress/rm38428.docent.yaml - lines changed 41, context: html, text, full: html, text
- src/hg/utils/docent/tests/regress/rm38430.docent.yaml - lines changed 31, context: html, text, full: html, text
- src/utils/testRegistry/registry.tsv - lines changed 3, context: html, text, full: html, text
0d147408e678df6e37e2a7e0a24934b80d0826e4 Wed Sep 30 06:51:55 2026 -0700
- docent rm38279: follow the window-size density note to its new wording, "window too large, zoom in", from 32eec44ad31. The nightly went red at step 2 on the old string. Steps 1 and 2 now check the new string, and the header no longer describes the prefix overlap that the reword removed. refs #38279, #38252
- src/hg/utils/docent/tests/regress/rm38279.docent.yaml - lines changed 18, context: html, text, full: html, text
3a5d6583ad4aea08655f9e1408baa712c6339cd1 Wed Sep 30 09:47:52 2026 -0700
- ottoMonitor: compare each otto track on hgwdev with genome.ucsc.edu, refs #38101, #38436
A job can run on time while its output never reaches the RR, because the push
is a separate root cron that the otto run does not see. DECIPHER rebuilt its
track every week from 2022 while decipherAutoPush was commented out, and the
monitor called it on time.
The monitor now reads the "Data last updated at UCSC" line from hgTrackUi on
both hosts. It reports a track whose public copy has stayed behind hgwdev for
more than 8 days. It finds the tracks itself, from the /gbdb links into the
otto area and the trackDb bigDataUrl that names them. ottoMonitorPublic.tsv
lists only the few it cannot find that way, mostly SQL tables. --no-public
skips the check.
- src/hg/utils/otto/ottoMonitor/README - lines changed 63, context: html, text, full: html, text
- src/hg/utils/otto/ottoMonitor/ottoMonitor.py - lines changed 289, context: html, text, full: html, text
- src/hg/utils/otto/ottoMonitor/ottoMonitorPublic.tsv - lines changed 25, context: html, text, full: html, text
58fa228f2f91ae8c6a5c62109e904f57e1f9a66d 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>
- src/hg/utils/docent/tests/regress/rm20824.docent.yaml - lines changed 63, context: html, text, full: html, text
- src/hg/utils/docent/tests/regress/rm27988.docent.yaml - lines changed 76, context: html, text, full: html, text
- src/hg/utils/docent/tests/regress/rm36292.docent.yaml - lines changed 95, context: html, text, full: html, text
- src/hg/utils/docent/tests/regress/rm37595.docent.yaml - lines changed 69, context: html, text, full: html, text
- src/hg/utils/docent/tests/regress/rm37621.docent.yaml - lines changed 68, context: html, text, full: html, text
- src/hg/utils/docent/tests/regress/rm37929.docent.yaml - lines changed 88, context: html, text, full: html, text
- src/hg/utils/docent/tests/regress/rm37984.docent.yaml - lines changed 66, context: html, text, full: html, text
- src/hg/utils/docent/tests/regress/rm38157.docent.yaml - lines changed 69, context: html, text, full: html, text
- src/hg/utils/docent/tests/regress/rm38192.docent.yaml - lines changed 96, context: html, text, full: html, text
- src/hg/utils/docent/tests/regress/rm38197.docent.yaml - lines changed 94, context: html, text, full: html, text
- src/hg/utils/docent/tests/regress/rm38233.docent.yaml - lines changed 82, context: html, text, full: html, text
- src/hg/utils/docent/tests/regress/rm38254.docent.yaml - lines changed 63, context: html, text, full: html, text
- src/hg/utils/docent/tests/regress/rm38264.docent.yaml - lines changed 71, context: html, text, full: html, text
- src/hg/utils/docent/tests/regress/rm38273.docent.yaml - lines changed 129, context: html, text, full: html, text
- src/hg/utils/docent/tests/regress/rm38313.docent.yaml - lines changed 66, context: html, text, full: html, text
- src/hg/utils/docent/tests/regress/rm38323.docent.yaml - lines changed 66, context: html, text, full: html, text
- src/hg/utils/docent/tests/regress/rm38372.docent.yaml - lines changed 47, context: html, text, full: html, text
- src/hg/utils/docent/tests/regress/rm38384.docent.yaml - lines changed 52, context: html, text, full: html, text
- src/hg/utils/docent/tests/regress/rm38393.docent.yaml - lines changed 36, context: html, text, full: html, text
- src/utils/testRegistry/registry.tsv - lines changed 20, context: html, text, full: html, text
1ef17710a703f8c1a1004bd6d2c8bd8bd78aa103 Wed Sep 30 11:03:08 2026 -0700
- Merge branch 'docent504'
35c5facfb9e64030b6eeb70aadd2026bd9296c21 Wed Sep 30 17:11:59 2026 -0700
- hgSession: a Save request without the share flag or the name no longer ends in a stack dump, refs #38456
doNewSession() read the session name with cartString() and the share flag with
cartBoolean(), and both abort when the variable is missing. The Save form always
sends both, so only a hand-made request reached this. doReSaveSession() read the
name the same way, and outDefaultTracks() read db the same way, which a brand-new
cart does not have.
The name and db now have defaults, and a missing name gets the existing "without a
name" message. For the share flag the code asks the request, not the cart, because
the cart keeps hgS_newSessionShare on purpose. When the request carries neither the
flag nor the checkbox's shadow, an existing session keeps its own sharing level and a
new one is saved private.
- src/hg/hgSession/hgSession.c - lines changed 22, context: html, text, full: html, text
ebf73550fcb8e858388755a7d34541d510209bae Wed Sep 30 17:12:00 2026 -0700
- docent rm38456: a Save request without the share flag or the name, and its registry row, refs #38456
Three checks: a fresh cart with no share flag, a cart that still holds a stored share
value while the request has none, and a request with no name. Committed as an xfail
until the fix reaches genome-test. Each check was seen to fail on a build without its
part of the fix.
- src/hg/utils/docent/tests/regress/rm38456.xfail.docent.yaml - lines changed 65, context: html, text, full: html, text
- src/utils/testRegistry/registry.tsv - lines changed 1, context: html, text, full: html, text
384180e37487b4818cf7a98ca43479dda0bb282d Wed Sep 30 18:11:33 2026 -0700
- backupParseTest, mallocTopPadTest: the off run sets its gate off by name, refs #38185, #38225
Each off conf only included ~/.hg.conf. A developer whose conf chain reaches one
that sets the gated variable got the gate on in both runs, and the test failed.
- src/hg/hgSession/tests/makefile - lines changed 3, context: html, text, full: html, text
- src/hg/lib/tests/expected/mallocTopPadTest - lines changed 1, context: html, text, full: html, text
- src/hg/lib/tests/makefile - lines changed 2, context: html, text, full: html, text
f8a1b70516b4cb68471cf5fda1f25fe5a06e034e Thu Oct 1 07:04:33 2026 -0700
- docent rm38456: the fix reached genome-test, so the script is no longer an xfail, refs #38456
It failed on genome-test at check 1 before 35c5facfb9e arrived and passed there after
the same day's make alpha. Renamed from rm38456.xfail.docent.yaml, with a server-flip
proof line, and the registry row now names the new file.
- src/hg/utils/docent/tests/regress/rm38456.docent.yaml - lines changed 1, context: html, text, full: html, text
- src/utils/testRegistry/registry.tsv - lines changed 1, context: html, text, full: html, text
a945138a550db38e817ea9fe9da16096e0f0ab45 Thu Oct 1 08:31:35 2026 -0700
- ottoMonitor: remember the ticket it files, and add the ottoWatchers people to every ticket, refs #38101, #38436
fileTicket() now returns the new ticket number, and both callers store it,
so the "ticket is already open" check works and a failure that persists is
not filed again every night. The number is cleared when the job or track
is back to ok. A new "# ottoWatchers:" header line in ottoOwners.tsv names
people to add as watchers to every ticket.
- src/hg/utils/otto/ottoMonitor/ottoMonitor.py - lines changed 30, context: html, text, full: html, text
c8f3ef912f63007961da179e06f2d6d96ea4cf34 Thu Oct 1 08:31:35 2026 -0700
- docent rm38456: name the share checkbox's shadow variable in full, refs #38456
- src/hg/utils/docent/tests/regress/rm38456.docent.yaml - lines changed 2, context: html, text, full: html, text
5f6b4fa86cd975502de93a57756260ea22f15a22 Thu Oct 1 09:45:34 2026 -0700
- bedItemRgbTest: the on run sets alwaysItemRgb on by name, refs #36212, #38185
The on conf only included ~/.hg.conf and relied on the default. A developer whose
conf chain turns alwaysItemRgb off got it off in both runs, and the test failed.
- src/hg/cgilib/tests/expected/bedItemRgbTest - lines changed 1, context: html, text, full: html, text
- src/hg/cgilib/tests/makefile - lines changed 2, context: html, text, full: html, text
e3084c1bf7cea3aa7f2bbe90d298adbae603b5e2 Fri Oct 2 09:33:46 2026 -0700
- hgTracks: keep the fraction when negateValues swaps a pixel's min and max, refs #38462
preDrawWindowFunction swapped min and max through an int, so the old min
lost its fraction on the way into the new max. With mean+whiskers the top
whisker, and the autoscale upper limit, were then drawn at a whole number.
- src/hg/hgTracks/wigTrack.c - lines changed 1, context: html, text, full: html, text
fcc4da57b6aa6aabe40dce88cb8b67e4a5508aff Fri Oct 2 09:35:00 2026 -0700
- docent rm38462 xfail script for negateValues whiskers, and its registry row, refs #38462, #38252
- src/hg/utils/docent/tests/regress/rm38462.xfail.docent.yaml - lines changed 73, context: html, text, full: html, text
- src/utils/testRegistry/registry.tsv - lines changed 1, context: html, text, full: html, text
fb5921dc918983ecc5182b1ef23a9fc64b556114 Fri Oct 2 10:00:42 2026 -0700
- docent rm38462 out of xfail after genome-test built the fix, refs #38462, #38252
- src/hg/utils/docent/tests/regress/rm38462.docent.yaml - lines changed 4, context: html, text, full: html, text
- src/utils/testRegistry/registry.tsv - lines changed 1, context: html, text, full: html, text
bd1a1caa044f8b0e65d4f558831c83c1b8807d2e Sat Oct 3 17:02:05 2026 -0700
- docent rm38444: a db name with its own dbDb row stays that assembly instead of its asmAlias accession, and its registry row, refs #38444, #38252
- src/hg/utils/docent/tests/regress/rm38444.docent.yaml - lines changed 46, context: html, text, full: html, text
- src/utils/testRegistry/registry.tsv - lines changed 1, context: html, text, full: html, text
affd45994680abc5a5b4fbbeeacda1c0047ec63e Mon Oct 5 10:00:26 2026 -0700
- v505 preview1 (automated)
- src/utils/qa/weeklybld/buildEnv.csh - lines changed 2, context: html, text, full: html, text
switch to files view, user index