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);