992aeef92fea7be25a2acd916578898649212a32 braney Mon Sep 7 11:31:07 2026 -0700 quickLift: gate the alignment lift behind an hg.conf flag, refs #38249 Add browser.quickLiftAlignments, default FALSE, so the alignment lift ships dark and a machine turns it on with browser.quickLiftAlignments=on. It sits beside browser.quickLift, the gate on the rest of the feature. quickLiftAlignmentsEnabled() in hg/lib/quickLift.c is the one read, and validateOneTdb in hg/lib/trackHub.c is the one place that asks it, before an alignment track may enter a quickLift hub. That is the only door: quickLiftUrl and quickLiftDb, the pair every lift path keys off, are written by the quickLift hub writer and by nothing else, so with the flag off an alignment track never gets them and the lifting, drawing and details code behind them cannot be reached. pslTrack.c, chainTrack.c, wigMafTrack.c, bigBedTrack.c and hgc.c are unchanged. With the flag off hgConvert lists psl, bigPsl, chain, bigChain, maf, bigMaf and wigMaf tracks in its "type is not supported by QuickLift" table, which is what it did before this work. A hub built while the flag was on keeps working after it is turned off, since its stanzas are already in the hub file in trash, so this holds the feature back from people who have not used it rather than switching off a session that has. Read the hg.conf half with a literal cfgOptionBooleanDefault rather than cartOrCfgOption so harvestHgConf.py can see it; a cart variable of the same name still overrides it. Register the flag in hgConfCatalog.py with role="gate" so the sunset report tracks it, and turn it on in confs/hgwdev.hg.conf. diff --git src/hg/utils/hgConfCatalog/hgConfCatalog.py src/hg/utils/hgConfCatalog/hgConfCatalog.py index 5956fbd2bda..e688e72b0a4 100755 --- src/hg/utils/hgConfCatalog/hgConfCatalog.py +++ src/hg/utils/hgConfCatalog/hgConfCatalog.py @@ -348,30 +348,49 @@ "e6ddf60465d after v502 and on no release branch yet, so the " "deadline has not started. On in hgwdev's cgi-bin hg.conf. " "The introducing commit carries no refs #38151 on purpose, " "under the security-incident policy, so the ticket here is " "hand-written and the sunset report's git-derived ticket " "column will show it blank.", debatable="A knob if the policy ends up being set once in the Apache " "config instead, which #38151 lists as its open question. " "Then this switch survives as the way a mirror avoids " "emitting a second, conflicting policy, since two CSP " "headers intersect and both are enforced, and a proxy " "setup is a property of the machine. Filed as a gate " "because the CGI emits the header today, and because " "calling a gate a knob hides it from the sunset report " "for good."), + h("browser.quickLiftAlignments", "flag", "hg/lib/quickLift.c", + default="FALSE", role="gate", verified=True, ticket="38249", + note="Let quickLift lift alignment tracks: psl, bigPsl, chain, " + "bigChain, maf, bigMaf and wigMaf. Read once, in " + "quickLiftAlignmentsEnabled(), and asked once, by " + "validateOneTdb in trackHub.c, which is the only door: the " + "quickLiftUrl and quickLiftDb pair that every lift path keys " + "off is written by the quickLift hub writer and by nothing " + "else, so with the flag off an alignment track never enters a " + "quickLift hub and the lifting, drawing and details code behind " + "it is unreachable. A hub built while it was on keeps working, " + "since its stanzas are already in the hub file in trash. On in " + "confs/hgwdev.hg.conf. Named browser.quickLiftAlignments to " + "sit beside browser.quickLift, the gate on the rest of the " + "feature, but read with a literal cfgOptionBooleanDefault " + "rather than cartOrCfgOption: the harvester only sees the " + "cfgOption* accessors, which is why browser.quickLift is not in " + "this catalog. A cart variable of the same name still " + "overrides it, so both answers can be had on one machine."), # Gates whose default has flipped TRUE. These are the deletable ones: # the feature is public and the flag is now only an off switch. h("showTutorial", "flag", "hg/hgCustom/hgCustom.c", default="TRUE", role="gate", verified=True, note="The interactive tutorials. Public since v466, five call " "sites across four CGIs. Nothing is gating any more."), h("canDupTracks", "flag", "hg/lib/dupTrack.c", default="TRUE", role="gate", verified=True, note="Duplicate-track feature. Public since v443."), h("canSnake", "flag", "hg/hgc/hgc.c", default="TRUE", role="gate", verified=True, note="Snake display for chain and alignment tracks. Public since " "v467."), h("showDownloadUi", "flag", "hg/hgTracks/hgTracks.c", default="TRUE", role="gate", verified=True,