64d40b9204a60274a49330c6b61d146e5cdc6d87 max Wed Sep 9 05:54:34 2026 -0700 Faceted composite: a container's max display mode must clamp a pinned child, not drop it Selecting only CpG methylation on the Fiber-seq compendium and hitting submit drew nothing at all, with no message to say why. Two things combined. The children of a faceted composite can be pinned to one display mode with onlyVisibility, and five of the six Fiber-seq data types are pinned to full because they are signal tracks. The container's own "Maximum display mode" is a ceiling over those children, and it was set to pack. tdbVisLimitedByAncestors() then took a pinned child that sat above the ceiling and returned hide for it, so every pinned-to-full track disappeared and only the peaks, pinned to dense, came through. With every data type but peaks unchecked, that left an empty image. A ceiling should limit a child, not delete it, so use tvMin the same way the unpinned case a line below already did. A bigWig draws the same at pack as at full, minus the horizontal grid, so nothing is lost here. The page was also asking for the wrong ceiling. On a faceted composite the dropdown is a ceiling rather than a display mode, since each child carries its own, so taking the container out of hide should ask for full, the one value that clips nothing. Pack was chosen on the reasoning that it suits a mix of signal and feature tracks, which is the right instinct for a plain composite and the wrong one here. refs #36210 diff --git src/hg/lib/hui.c src/hg/lib/hui.c index 41aba5d4191..29ebdd124c6 100644 --- src/hg/lib/hui.c +++ src/hg/lib/hui.c @@ -10068,32 +10068,34 @@ // subtracks without explicit (cart) vis but are selected, should get inherited vis else if (!subtrackOverride) vis = tvFull; // subtracks with checkbox that says no, are stopped cold if (checkBoxToo && !fourStateVisible(subtrackFourStateChecked(tdb,cart))) vis = tvHide; // Checkbox says no } if (facetedChild) { // Note this skips the subtrackOverride shortcut below on purpose: escaping the // parent's limit is exactly the behavior a faceted composite doesn't want. if (vis == tvHide) return tvHide; enum trackVisibility maxVis = tdbVisLimitedByAncestors(cart,tdb->parent,checkBoxToo, foldersToo); - if (onlyVis != NULL) // A pinned child either fits under the maximum or doesn't draw - return (tvCompare(vis,maxVis) >= 0 ? vis : tvHide); + // The container's vis is a ceiling, so it limits a pinned child the same way it + // limits any other one. It must not drop the child instead: a container sitting at + // pack over children pinned to full then draws nothing at all, with nothing on the + // page to say why. return tvMin(vis,maxVis); } if (subtrackOverride) return vis; // aka superTrack if (vis == tvHide || tdb->parent == NULL || (!foldersToo && tdbIsFolder(tdb->parent))) return vis; // end of line return tvMin(vis,tdbVisLimitedByAncestors(cart,tdb->parent,checkBoxToo,foldersToo)); } char *compositeViewControlNameFromTdb(struct trackDb *tdb) // Returns a string with the composite view control name if one exists { char *stView = NULL;