fa5b31d305066e1938953374d80b3782ef87e239
max
  Mon Sep 7 23:23:40 2026 -0700
Position box: accept a bare codon number, and a range of codon numbers

"KAT6A p.495_533" used to land on codon 495 and silently drop the end of the
range, and a bare codon number after a transcript accession was not understood
at all, so "ENST00000265713.8 p.495" fell through the HGVS code and ended up on
an unrelated locus. Nucleotide ranges already worked. The pseudo-HGVS layer now
takes an optional _end on a bare codon number, and accepts a bare codon number
or range after an NM_ or ENST accession as well as after a gene symbol, looking
up the reference amino acids that HGVS wants and the user did not type.

The accession forms require a literal "p", so "NM_006766.5 1483" keeps meaning
what it meant. A hyphen is still not a range separator: c.1483-1599 is the HGVS
intronic position and stays that way.

Also fixes a read past the end of the protein sequence when the codon number
was larger than the protein, and documents codon ranges in query.html.

refs #38285

diff --git src/hg/lib/tests/expected/hgvs/validTerms.txt src/hg/lib/tests/expected/hgvs/validTerms.txt
index 558bfd83035..a29a90f8c10 100644
--- src/hg/lib/tests/expected/hgvs/validTerms.txt
+++ src/hg/lib/tests/expected/hgvs/validTerms.txt
@@ -32,15 +32,25 @@
 chr1	32781089	32781101	YARS1 p.Val153_Val156del	0	-
 chr1	32806523	32806535	YARS1 p.Val153_Val156del	0	-
 chr1	11964767	11964770	PLOD1 Glu532del	0	+
 chr1	11966259	11966262	PLOD1 Glu532del	0	+
 chr1	40092118	40092136	PPT1 p.Gln91_Cys96delinsPhe	0	-
 chr1	40080426	40080444	PPT1 p.Gln91_Cys96delinsPhe	0	-
 chr1	11964767	11964770	PLOD1:p.532	0	+
 chr1	11966259	11966262	PLOD1:p.532	0	+
 # From a user via b0b:
 chr3	38597785	38597788	NM_198056.3:pAla735Val	0	-
 chr3	38555661	38555664	NM_198056.3:pArg1512Trp	0	-
 
 chr20	33443333	33443334	NM_003098.2:c.287G>C	0	-
 chr17	43093299	43093300	NM_007294.3:c.2231C>A	0	-
 chr17	43093299	43093300	NM_007294.3(BRCA1):c.2231C>A	0	-
+
+# Bare codon numbers and ranges of codon numbers, refs #38285
+chr8	41955408	41955411	KAT6A p.495	0	-
+chr8	41949362	41955411	KAT6A p.495_533	0	-
+chr8	41949362	41955411	KAT6A p.Lys495_Ser533	0	-
+chr8	41955408	41955411	NM_006766.5 p.495	0	-
+chr8	41949362	41955411	NM_006766.5 p.495_533	0	-
+chr8	41955408	41955411	ENST00000265713.8 p.495	0	-
+chr8	41949362	41955411	ENST00000265713.8 p.495_533	0	-
+chr8	41949362	41955411	KAT6A c.1483_1599	0	-