98ac3822afa0712f1897d17e5b7934c4aa742f57
braney
  Tue Aug 4 17:11:00 2026 -0700
hgConfCatalog: report only the gates that changed this release, and settle the gate/knob calls, refs #37925

Groundwork for running the sunset report from the weekly build's wrap-up.

--sunset prints the whole standing list every run, which reads as a worklist
the first week and as wallpaper by the third.  New --sunset-new reports only
the gates that went overdue or stalled since hgConfGateBacklog.txt was last
accepted, plus the ones that were cleaned up, and exits 1 when there is
something new, the same contract --reconcile already has.  --update-baseline
accepts the current state, so the file's diff becomes the release-to-release
history of the backlog.  Gates already in the backlog are marked in --sunset
too, so an unmarked row there is one this release created.

Settled all eleven gate-or-knob calls that were filed debatable, each by
reading the call site.  forceTwoBit, freeType, sleepOn429 and trustTrackDb
become knobs: what their off position describes is where a machine keeps its
sequence, whether it has the URW fonts, whether it wants to hold a process
after a 429, and whether its trackDb can be trusted.  Three of those were on
the overdue list, so the report was telling somebody to delete flags that
should stay.  autoBlatBigPsl becomes a gate: its default is the file-scope
autoBigPsl, initialised FALSE under the comment "DEFAULT VALUE change to TRUE
in future", and a flag whose own source says to flip it later is not a
permanent switch.  alwaysItemRgb and blatNewPageBanner stay gates, and
hgHubConnect.validateHub stays a gate with its note corrected: it gates the
Hub Development tab, not validation on attach.  Overdue is 18 down to 15.

Added a fourth reconcile question: does each flag's hand-written default still
match the tree's.  That field is the one part of a gate's lifecycle not read
out of git, and gate_lifecycle decides a gate has shipped from it alone, so a
flag flipped TRUE in code without the row updated sat in the stalled list
under a heading telling somebody to turn on a flag that was already on.  Zero
mismatches today.  A flag read with both TRUE and FALSE as its compiled-in
default is reported under --verbose rather than counted as a problem, since
the fix belongs to whoever owns the code: multiRegionButtonTop is read TRUE at
hgTracks.c:9126 and FALSE at config.c:990, so on a default install the button
is in the top bar while the checkbox the same flag guards is hidden.

The age cache is overridable with --cache or HGCONF_AGE_CACHE, and
hgConfCatalog.py takes --refresh, so an automated run can rebuild it without
writing into a git checkout.  Refreshed the committed cache, which dates
blatNewPageBanner and showLiftRequest: both were added after it was last
built, which is why they read as undatable.  Documented forceTwoBit and
freeType in ex.hg.conf, since calling them mirror knobs and leaving them
undiscoverable is the same mistake in the other direction.

diff --git src/product/ex.hg.conf src/product/ex.hg.conf
index 00191bbf56b..9c191b6b7d4 100644
--- src/product/ex.hg.conf
+++ src/product/ex.hg.conf
@@ -308,30 +308,35 @@
 # browser.cgiTime=no
 
 # Do not show the generic 500 Apache error, but show the browser error message
 # instead to the user. 
 showEarlyErrors=on
 # The opposite: try to suppress very early errors as far as possible as
 # show a 500 Apache error instead. This somewhat reduces the options for
 # Cross-Site-Scripting attacks but makes it harder for users to find out
 # what caused an error, e.g. in custom tracks.
 # suppressVeryEarlyErrors=on
 
 # There are additional fonts available, not all are perfect.
 # Uncomment this to see extra font selections in the configure page
 # fonts.extra=yes
 
+# Track images are drawn with FreeType, which needs the URW fonts installed
+# (see freeTypeDir/freeTypeFont). Set this to "off" on a machine without them,
+# or to use the browser's own bitmap fonts, which draw somewhat faster.
+# freeType=off
+
 # central.host is the name of the host of the central MySQL
 # database where stuff common to all versions of the genome
 # and the user database is stored.
 central.db=hgcentral
 central.host=localhost
 #
 # Be sure this user has UPDATE AND INSERT privs for hgcentral
 #	The central.domain will allow the browser cookie-cart
 #	function to work.  Set it to the domain of your Apache
 #	WEB server.  For example, if your browser URL is:
 #	http://mylab.university.edu/cgi-bin/hgTracks?db=hg19
 #	set central.domain to: mylab.university.edu
 #	An exception to this is when multiple virtual hosts share the
 #	same central database and central.cookie setting (see below).
 #	In #that case, domain should be inclusive of all virtual hosts
@@ -447,30 +452,37 @@
 #
 # Option to change the Galaxy target URL to a different site than the main 
 # Galaxy site at usegalaxy.org. The Galaxy CGI is usually called "tool_runner"
 #   galaxyUrl=http://galaxy-qld.genome.edu.au/tool_runner
 #
 # Option to "Send output to GenomeSpace" in the table browser
 #   genomeSpace.dmServer=https://dm.genomespace.org/datamanager
 #   genomeSpace.identityServerUrl=https://identity.genomespace.org/identityServer/basic
 #
 # Option to disable .nib directories. If set to "no", the
 # browser will try to use the .2bit file instead of the .nib files, even if
 # they are setup in hgcentral.dbDb and <db>.chromInfo. .nib files can then
 # be deleted from this mirror.
 #   allowNib=no
 #
+# By default the browser reads a chromosome's sequence from
+# /gbdb/<db>/<db>.2bit and nothing else. Set this to "no" on a mirror whose
+# sequence is somewhere else and recorded in <db>.chromInfo, or which still
+# has .nib files under hgcentral.dbDb.nibPath; the browser then falls back to
+# those in that order. Companion to allowNib above.
+#   forceTwoBit=no
+#
 # Base Url of links to Encode PDF files
 # When this is set as below, the ENCODE PDF files can be deleted from this 
 # mirror. They will get loaded from UCSC.
 #   hgEncodeVocabDocBaseUrl=http://genome.ucsc.edu
 
 # If this option is enabled, the browser CGIs will attempt to generate a an
 # stack traceback on error and dump it to stderr (which is normally captured
 # in the web server error log).  This requires the pstack package to be
 # installed, which is available on for unix and linux systems.  If
 # signalsHandler is enabled, the stack will also be printed when a signal
 # indicates an error occurs.
 #   browser.dumpStack=on
 # log signals
 #   signalsHandler=on