5cff98cffaac2ec822a4489660df20959a48912e
max
  Fri Sep 18 09:34:37 2026 -0700
hgSession: name tooltip's URL example was swallowing "<sessionName>"

#Preview2 week - bugs introduced now will need a build patch to fix
refs #38311

diff --git src/hg/js/hgSession.js src/hg/js/hgSession.js
index 5709080017a..537151601a4 100644
--- src/hg/js/hgSession.js
+++ src/hg/js/hgSession.js
@@ -671,34 +671,36 @@
 function sessSaveCardHtml(C) {
     if (!C.loggedIn) { return ''; }
     // Assembly and position separated by a colon (e.g. "hg38: chr7:1-1,000"); assembly is already
     // the accession for hubs (trackHubSkipHubName on the server).
     var loc = '';
     if (C.db && C.position) { loc = sessEnc(C.db) + ': ' + sessEnc(C.position); }
     else if (C.db) { loc = sessEnc(C.db); }
     else if (C.position) { loc = sessEnc(C.position); }
     if (loc && C.trackCount) {
         loc += ', ' + sessNum(C.trackCount) + ' track' + (C.trackCount === 1 ? '' : 's') + ' shown';
     }
     var what = loc ? '<span class="sessSaveWhat">' + loc + '</span>' : '';
     // Ghost text for the name field is a real generated name, not an explanation of the feature -
     // the info bubble already says what it is.
     var randName = sessEnc(sessRandomShareName());
+    // "[sessionName]", not "<sessionName>": the tooltip is inserted via innerHTML (addMouseover in
+    // utils.js), so a literal "<...>" is parsed as an (invisible) tag instead of shown as text.
     var nameTip = 'Optional. Leave this blank and your session will be saved under an ' +
         'automatically generated random name, like the one shown here. The session name ' +
         'becomes part of the session’s URL, e.g. https://genome.ucsc.edu/s/' +
-        sessEnc(C.userName) + '/<sessionName>.';
+        sessEnc(C.userName) + '/[sessionName].';
     var descTip = 'Shown when the session is loaded, in the table below on mouseover, and in ' +
         'the Public Sessions gallery if this session is made public.';
     return '<div class="sessSaveCard">' +
         '<div class="sessSaveHead"><span class="sessSaveTitle">' +
         'Save the current view as a stable session link</span>' + what + '</div>' +
         '<div class="sessSaveRow">' +
         '<div class="sessSaveField">' +
         '<input id="sessSaveName" class="sessSaveInput" type="text" maxlength="255" ' +
         'placeholder="Session name, default ' + randName + '">' +
         '<span class="sessInfo" title="' + nameTip + '">&#9432;</span></div>' +
         '<label class="sessSaveCheck"><input type="checkbox" id="sessSavePrivate"> ' +
         'Private: Session can only be loaded by myself</label>' +
         '<button type="button" class="gbPill primary" id="sessSaveBtn" ' +
         'title="Save your current browser view as a named session">Save session</button>' +
         '</div>' +