6831b39717c5f1b1c4c6e605916396c8b0890f7a
max
  Sat Sep 26 17:51:45 2026 -0700
uniprot otto: a help string cannot mix %default with python formatting

The --allowFailures help text ended with a python % substitution while also
containing optparse's %default placeholder, so python tried to read %d out of
%default and every invocation died before parsing arguments:

TypeError: %d format: a real number is required, not str

Spell the directory out instead. Checked that no other help string in the file
combines the two.

refs #38300

diff --git src/hg/utils/otto/uniprot/doUniprot src/hg/utils/otto/uniprot/doUniprot
index 0ac83f3e0e0..422749f44a0 100755
--- src/hg/utils/otto/uniprot/doUniprot
+++ src/hg/utils/otto/uniprot/doUniprot
@@ -359,32 +359,32 @@
             default=20,
             help="how many taxa to process at the same time, default %default. Raising this "
             "keeps the cluster busy: one taxon at a time leaves it idle during the long "
             "single-threaded steps between batches. Around 20 is a reasonable working value. Assemblies "
             "of the same taxon always run one after the other, they share a fasta file.")
     parser.add_option("", "--genArkList", dest="genArkList", action="store",
             help="build the plan from this GenArk assembly list instead of from dbDb, e.g. "
             "/hive/data/genomes/asmHubs/UCSC_GI.assemblyHubList.txt or a fresh copy of "
             "https://hgdownload.soe.ucsc.edu/hubs/UCSC_GI.assemblyHubList.txt . Use with "
             "--minProteins, which decides how much of GenArk is worth running.")
     parser.add_option("", "--allowFailures", dest="allowFailures", action="store", type="int",
             default=0,
             help="carry on and publish if no more than this many taxa fail, default %default. "
             "A run across hundreds of assemblies will always have a few organisms that cannot "
             "be built, and without this a handful of them stops the other hundreds from being "
-            "published. Every failure is still reported and gets its own log under %s/." %
-            taxonFailDir)
+            "published. Every failure is still reported and gets its own log under "
+            "the failedTaxa directory.")
     parser.add_option("", "--skipList", dest="skipList", action="store",
             help="file of assemblies to leave alone, one name or accession per line, with "
             "# comments. Entries may carry the full asmId, so a GenArk orderList works as "
             "is: --skipList=kent/src/hg/makeDb/doc/hprcAsmHub/hprc.orderList.tsv drops the "
             "464 HPRC haplotype assemblies, which take human from 572 assemblies to 108.")
     parser.add_option("", "--minProteins", dest="minProteins", action="store", type="int",
             default=1,
             help="skip a taxon with fewer than this many UniProt proteins, default %default, "
             "i.e. skip only the empty ones. UniProt annotates most species barely at all: of "
             "the 3974 taxa that have a GenArk assembly and a SwissProt entry, the median has "
             "four proteins and only 558 have more than a hundred. Raise this when running "
             "across many assemblies, to skip the ones that cannot produce a useful track.")
     parser.add_option("", "--mapQa", dest="mapQa", action="store_true", \
             help="output some QA stats for the maps")
     parser.add_option("", "--db", dest="db", action="store_true", \