059927383e72afe59202535b4863fc016463127a
max
  Thu Sep 3 15:04:05 2026 -0700
Document that cdsStart == cdsEnd marks a non-coding transcript in genePred format, refs #38245

This convention was previously only documented indirectly, as a SQL
filtering tip on the Gene tracks FAQ page. Add it next to the
cdsStart/cdsEnd field declarations in genePred.as, genePredExt.as,
sangerGene.as, ensGene.as, knownGene.as, refFlat.as, genePred.h and
sangerGene.h, and mention it in FAQformat.html and bigGenePred.html
(via the equivalent thickStart == thickEnd check).

diff --git src/hg/inc/sangerGene.h src/hg/inc/sangerGene.h
index 77e1626fe86..4dbd4c39ad1 100644
--- src/hg/inc/sangerGene.h
+++ src/hg/inc/sangerGene.h
@@ -7,32 +7,32 @@
 
 #ifndef SANGERGENE_H
 #define SANGERGENE_H
 
 #define SANGERGENE_NUM_COLS 11
 
 struct sangerGene
 /* GenePred table with proteinID field for WormBase Genes. */
     {
     struct sangerGene *next;  /* Next in singly linked list. */
     char *name;	/* Name of gene */
     char *chrom;	/* Chromosome name */
     char strand[2];	/* + or - for strand */
     unsigned txStart;	/* Transcription start position */
     unsigned txEnd;	/* Transcription end position */
-    unsigned cdsStart;	/* Coding region start */
-    unsigned cdsEnd;	/* Coding region end */
+    unsigned cdsStart;	/* Coding region start; cdsStart == cdsEnd for non-coding transcripts */
+    unsigned cdsEnd;	/* Coding region end; cdsStart == cdsEnd for non-coding transcripts */
     unsigned exonCount;	/* Number of exons */
     unsigned *exonStarts;	/* Exon start positions */
     unsigned *exonEnds;	/* Exon end positions */
     char *proteinID;	/* Swiss-Prot protein ID */
     };
 
 struct sangerGene *sangerGeneLoad(char **row);
 /* Load a sangerGene from row fetched with select * from sangerGene
  * from database.  Dispose of this with sangerGeneFree(). */
 
 struct sangerGene *sangerGeneLoadAll(char *fileName);
 /* Load all sangerGene from whitespace-separated file.
  * Dispose of this with sangerGeneFreeList(). */
 
 struct sangerGene *sangerGeneLoadAllByChar(char *fileName, char chopper);