d2be4681e2c8493bf9dfe755037e76d2b784e9ff
max
  Thu Sep 10 05:24:00 2026 -0700
uniprot otto: bigPslUniprot.as was missing the isMain field

The committed .as declared 46 fields while doUniprot writes 47: pslToBigPsl()
appends isMainStr as the last column (doUniprot line 1331, "primary sequence" or
"alternative isoform"), and trackDb/uniprot.ra refers to it twice as
"skipFields isMain". The field has been missing from this file since at least
2021; the copy in /hive/data/outside/otto/uniprot had been fixed by hand and
never committed, which is why runs kept working and nobody noticed.

I broke the running update by rsyncing this stale copy over the working one, and
bedToBigBed stopped with "Expecting 46 words line 1 ... got 47" after the parse
had already finished. Adding the field to the tree copy fixes both the immediate
failure and the drift.

Verified against the input that failed: bedToBigBed now writes 44142 records with
47 fields and both extra indexes, every record has exactly 47 columns, isMain
reads back as 21362 "primary sequence" and 22780 "alternative isoform", and all
eleven fields named by uniprot.ra's labelFields, mouseOver and skipFields resolve
in the result.

refs #38300

diff --git src/hg/utils/otto/uniprot/bigPslUniprot.as src/hg/utils/otto/uniprot/bigPslUniprot.as
index 8562a3d2429..9f39faddf23 100644
--- src/hg/utils/otto/uniprot/bigPslUniprot.as
+++ src/hg/utils/otto/uniprot/bigPslUniprot.as
@@ -1,58 +1,59 @@
 table bigPsl
 "bigPsl pairwise alignment"
     (
     string chrom;       "Reference sequence chromosome or scaffold"
     uint   chromStart;  "Start position in chromosome"
     uint   chromEnd;    "End position in chromosome"
     string name;        "UniProt isoform seq. ID"
     uint score;         "Score (0-1000)"
     char[1] strand;     "+ or - indicates whether the query aligns to the + or - strand on the reference"
     uint thickStart;    "Start of where display should be thick (start codon)"
     uint thickEnd;      "End of where display should be thick (stop codon)"
     uint reserved;       "RGB value (use R,G,B string in input file)"
     int blockCount;     "Number of blocks"
     int[blockCount] blockSizes; "Comma separated list of block sizes"
     int[blockCount] chromStarts; "Start positions relative to chromStart"
 
     uint    oChromStart;"Start position in other sequence (PSL qStart)"
     uint    oChromEnd;  "End position in other sequence (PSL qEnd)"
     char[1] oStrand;    "+ or -, - means that psl was reversed into BED-compatible coordinates"
     uint    oChromSize; "Size of other sequence (PSL qSize)"
     int[blockCount] oChromStarts; "Start positions in other sequence; relative to oChromStart or oChromStart+oChromSize depending on strand (PSL qStarts)"
 
     lstring  oSequence;  "Sequence on other side of alignment (or edit list, or empty)"
     string   oCDS;       "CDS in NCBI format"
 
     uint    chromSize;"Size of reference sequence (PSL tSize)"
 
     uint match;        "Number of bases matched."
     uint misMatch; " Number of bases that don't match "
     uint repMatch; " Number of bases that match but are part of repeats "
     uint nCount;   " Number of 'N' bases "
     uint seqType;    "0=empty, 1=nucleotide, 2=amino_acid"
 
     lstring transList; "Mapped to genome through these transcripts"
     string acc; "UniProt record accession"
     lstring uniprotName; "UniProt record name"
     string status; "UniProt status"
     lstring accList; "UniProt previous and alternative accessions"
     lstring isoIds; "All UniProt sequence isoform accessions"
 
     lstring protFullNames; "UniProt protein name"
     lstring protShortNames; "UniProt protein short name"
     lstring protAltFullNames; "UniProt alternative names"
     lstring protAltShortNames; "UniProt alternative short names"
     lstring geneName; "UniProt gene name"
     lstring geneSynonyms; "UniProt gene synonyms"
     lstring functionText; "UniProt function"
 
     lstring hgncSym; "HGNC Gene Symbol"
     lstring hgncId; "HGNC IDs"
     lstring refSeq; "RefSeq Transcript IDs"
     lstring refSeqProt; "RefSeq Protein IDs"
     lstring entrezGene; "NCBI Gene IDs"
     lstring ensGene; "Ensembl Gene IDs"
     lstring ensProt; "Ensembl Protein IDs"
     lstring ensTrans; "Ensembl Transcript IDs"
+    string isMain; "Whether this is the primary sequence of the UniProt record or an alternative isoform"
     )