0f23d17640ca30e2c9ee456c7e15966cabd3bc57
max
  Mon Sep 7 23:32:24 2026 -0700
Position box: let a hyphen separate a range of codons, e.g. "BRCA1 100-200"

A bare number after a gene symbol has always meant a codon, and "KAT6A 495-533"
was already accepted -- it just landed on codon 495 and dropped the rest, the
same silent truncation that the underscore form had. A hyphen now separates a
range wherever the coordinates are protein: after a gene symbol with no prefix,
and after an explicit p. with a symbol or a transcript accession.

The hyphen stays out of c. and n. terms, where HGVS already uses it for an
intron offset. KAT6A c.1483-1599 is still the single base 1599 nt before
c.1483, not codons 1483 to 1599, and there are now regression tests pinning
both readings so the two do not drift into each other.

refs #38285

diff --git src/hg/lib/tests/expected/hgvs/validTerms.txt src/hg/lib/tests/expected/hgvs/validTerms.txt
index a29a90f8c10..04aae108e3a 100644
--- src/hg/lib/tests/expected/hgvs/validTerms.txt
+++ src/hg/lib/tests/expected/hgvs/validTerms.txt
@@ -1,56 +1,67 @@
 # db: hg38
 # inputFile: input/hgvs/validTerms.txt
 # A variant that is famously known as "MTHFR C677T" or "MTHFR 677C>T" -- but the 677 is incorrect (from an old sequence ~1995):
 chr1	11796320	11796321	NM_005957.4:c.665C>T	0	-
 # Same variant in LRG transcript, protein and genomic coords:
 chr1	11796320	11796321	LRG_726t1:c.665C>T	0	-
 chr1	11796319	11796322	LRG_726p1:p.Ala222Val	0	-
 chr1	11796320	11796321	LRG_726:g.14783C>T	0	+
 
 # These three are equivalent (although p. is less specific):
 chr11	112088972	112088973	NM_003002.3:c.276C>A	0	+
 chr11	112088970	112088973	NP_002993.1:p.Asp92Glu	0	+
 chr11	112088970	112088973	NP_002993.1:p.D92E	0	+
 
 # This is not HGVS but seems to be a commonly requested format and is easy to transform into the internal representation of HGVS:
 chr2	29193604	29193607	ALK G1494E	0	-
 
 # More gene symbol HGVS-ish
 chr1	8358598	8358601	RERE:Thr758Serfs	0	-
 chr1	8361232	8361235	RERE:Thr758Serfs	0	-
 chr1	155240657	155240660	GBA1:p.Leu29Alafs*18	0	-
 chr1	155239721	155239724	GBA1:p.Leu29Alafs*18	0	-
 chr1	9262237	9262240	H6PD Val320=	0	+
 chr1	9264518	9264521	H6PD Val320=	0	+
 chr1	9262270	9262273	H6PD Val320=	0	+
 chr1	9262243	9262246	H6PD Val320=	0	+
 chr1	9262249	9262252	H6PD Val320=	0	+
 chr1	11802930	11802936	MTHFR Pro101_Gly102insLeuTyrIleAspValThrTrpHisProAlaGlyAspPro	0	-
 chr1	11801329	11801335	MTHFR Pro101_Gly102insLeuTyrIleAspValThrTrpHisProAlaGlyAspPro	0	-
 chr1	11802933	11802939	MTHFR Pro101_Gly102insLeuTyrIleAspValThrTrpHisProAlaGlyAspPro	0	-
 chr1	11800245	11800251	MTHFR Pro101_Gly102insLeuTyrIleAspValThrTrpHisProAlaGlyAspPro	0	-
 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	-
+chr8	41955408	41955411	KAT6A 495	0	-
+chr8	41949362	41955411	KAT6A 495_533	0	-
+# A hyphen is a range separator in protein coordinates only, refs #38285
+chr8	41949362	41955411	KAT6A 495-533	0	-
+chr8	41949362	41955411	KAT6A p.495-533	0	-
+chr8	41949362	41955411	NM_006766.5 p.495-533	0	-
+chr8	41949362	41955411	ENST00000265713.8 p.495-533	0	-
+# ...but in c. and n. terms a hyphen is still an intron offset, not a range:
+# this one must stay a single base 1599 nt before c.1483, not codons 1483..1599
+chr8	41957009	41957010	KAT6A c.1483-1599	0	-
+chr8	42049489	42049490	KAT6A n.100-200	0	-