782bdb2e04aa2724f33c328bb080bedf52c976e5 braney Fri May 8 12:03:28 2026 -0700 Hide QuickLift groups from hgIntegrator track list, refs #37519 QuickLift remaps tracks from another assembly on the fly for display, but the underlying data is in the source assembly's coordinates, so output queries against the destination assembly don't make sense. In hgIntegrator this surfaced two ways for QuickLifted tracks: the "Choose fields" pop-up hung, and Get output errored with "Unrecognized type 'genePred' for hub track". Match the hgTables fix by skipping groups whose label starts with "QuickLift" in cartJsonGetGroupedTrackDb (the only consumer is hgIntegrator's React UI). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> diff --git src/hg/cgilib/cartJson.c src/hg/cgilib/cartJson.c index 43bdd46d203..51ad8ea526a 100644 --- src/hg/cgilib/cartJson.c +++ src/hg/cgilib/cartJson.c @@ -618,30 +618,35 @@ struct hash *fieldHash = hashFromCommaString(fields); char *excludeTypes = cartJsonOptionalParam(paramHash, "excludeTypes"); struct hash *excludeTypesHash = hashFromCommaString(excludeTypes); // Also check for optional parameter 'maxDepth': int maxDepth = -1; char *maxDepthStr = cartJsonOptionalParam(paramHash, "maxDepth"); if (isNotEmpty(maxDepthStr)) maxDepth = atoi(maxDepthStr); jsonWriteObjectStart(jw, "groupedTrackDb"); jsonWriteString(jw, "db", cartString(cj->cart, "db")); jsonWriteListStart(jw, "groupedTrackDb"); int nonEmptyGroupCount = 0; struct grp *grp; for (grp = fullGroupList; grp != NULL; grp = grp->next) { + // QuickLift remaps tracks from another assembly on the fly for display, but the + // underlying data is in the source assembly's coordinates, so output queries against + // the destination assembly don't make sense. Hide QuickLift groups from the UI. + if (startsWith("QuickLift", grp->label)) + continue; struct slRef *tdbRefList = hashFindVal(groupedTrackRefList, grp->name); if (writeGroupedTrack(jw, grp->name, grp->label, fieldHash, excludeTypesHash, maxDepth, tdbRefList)) { nonEmptyGroupCount++; } } if (nonEmptyGroupCount == 0) { // Catch-all for assembly hubs that don't declare groups for their tracks: add All Tracks struct slRef *allTracks = sortedAllTracks(fullTrackList); (void)writeGroupedTrack(jw, "allTracks", "All Tracks", fieldHash, excludeTypesHash, maxDepth, allTracks); } jsonWriteListEnd(jw);