f2ef97844c0973a30cbbc1afcdd01b4096143a69
lrnassar
  Wed Jun 3 10:56:07 2026 -0700
Add date-based dataVersion to composite/superTrack otto containers. refs #36455

Composite and superTrack container pages do not display 'Data last updated at
UCSC' (printUpdateTime returns early for them), so a dataVersion file is the
only freshness signal a user sees there. Add one to the dbVar (dbVarSv),
panelApp, clinGen (clinGenComp) and decipher (decipherContainer) containers.

Each otto build script writes a per-assembly 'Last updated <date>' file when it
actually updates the data, and the container stanza points to it via dataVersion.
clinGen's container date is written by its three displayed feeds (makeDosage,
makeGeneValidity, makeClinGenCspec); decipher writes hg38 only (hg19 is frozen).

diff --git src/hg/utils/otto/dbVar/checkDbVar.sh src/hg/utils/otto/dbVar/checkDbVar.sh
index 2e5d250d999..21e899a001e 100755
--- src/hg/utils/otto/dbVar/checkDbVar.sh
+++ src/hg/utils/otto/dbVar/checkDbVar.sh
@@ -119,30 +119,33 @@
         printf "Inspect vs the live release/{hg19,hg38}/ copies, then either:\n"
         printf "  - rsync each .new/ over its live dir to accept, or\n"
         printf "  - rm -rf release/{hg19,hg38}.new to reject (next cron re-downloads).\n"
         printf "lastUpdate was NOT bumped; the next cron run will retry the fetch.\n"
         exit 1
     fi
 
     # Validation passed -- promote .new/ to live via directory rename. Per-file
     # mv would give smaller inconsistency windows but per-directory mv on the
     # same filesystem is already effectively atomic, and keeping the rollback
     # as a whole-directory snapshot is simpler to reason about.
     for db in hg19 hg38; do
         rm -rf release/${db}.prev
         [ -d release/${db} ] && mv release/${db} release/${db}.prev
         mv release/${db}.new release/${db}
+        # dbVar is a superTrack, whose container page does not show "Data last
+        # updated"; this dataVersion file gives it a freshness date instead.
+        printf 'Last updated %s\n' "$today" > release/${db}/version.txt
     done
 
     # Detect new .bb files that NCBI has added to the hub since the last
     # acknowledged state (stored in knownFiles.txt). Union both assemblies
     # so a file added to only one assembly still gets flagged. If any are
     # found, the email should include the list so a human can decide whether
     # to add a trackDb stanza + gbdb symlink.
     # Use find rather than `ls *.bb` so a partial hub state (one assembly
     # missing files) doesn't blow up the script via set -e after release/
     # has already been promoted.
     currentFiles=$(find ${today}/dbVar/hg19 ${today}/dbVar/hg38 -maxdepth 1 -name '*.bb' -printf '%f\n' | sort -u)
     newFiles=$(comm -23 <(echo "$currentFiles") <(grep -v '^#' ${WORKDIR}/knownFiles.txt | grep -v '^$' | sort -u))
 
     # Print the email body: what ran, any new files, and a reminder of next
     # steps if there are additions. Everything below this point goes into