3181982d60858062c80fd6db95294172f41525be
mspeir
  Fri Sep 4 16:21:50 2026 -0700
Add the otto cron line for cbPingHidden, the monthly reminder to submitters of
hidden Cell Browser datasets. It goes in the block whose MAILTO is
cells@ucsc.edu, next to the other Cell Browser jobs.

The run only queues one draft email per dataset that is due and mails the
report; nothing reaches an author until someone reads the queue and runs
"cbPingHidden send".

Three departures from the line suggested in the script's README. The report
address is spelled out, because a bare --mail-report falls back to
$USER@ucsc.edu and $USER here is otto. The umask keeps the drafts otto writes
into the queue group-writable, so they can still be edited by hand before they
go out. And the schedule is the 1st of the month rather than the first Monday:
"1-7 * 1" would have been read as the 1st through the 7th OR every Monday,
which is roughly ten runs a month, not one.

refs #38246

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

diff --git src/hg/utils/otto/otto.crontab src/hg/utils/otto/otto.crontab
index 54bb2491754..68549e48fd0 100644
--- src/hg/utils/otto/otto.crontab
+++ src/hg/utils/otto/otto.crontab
@@ -157,30 +157,36 @@
 #Add a new daily tip to the home page
 5 5 * * 1-5 /cluster/software/bin/python /cluster/bin/scripts/generateTipOfDay.py -s ~/kent/src/hg/htdocs/allTipsRaw.html
 
 #OMIM Upload
 HGDB_CONF=/cluster/home/otto/.hg.conf.beta
 15 05 * * *  /hive/data/outside/otto/omim/omimUploadWrapper.sh
 
 MAILTO=cells@ucsc.edu
 # Cell Browser news sec update by Matt/Brittney Sept 2022
 0 0 * * 1-5 umask 002; ~bwick/miniconda3/bin/python3.8 ~bwick/cellBrowser/ucsc/updateNewsSec -r
 
 # Update Cell Browser .json facets files using tabulate_facets.pl
 0 0 * * 1-5 cd /usr/local/apache/htdocs-cells-submit/facets && ~bwick/cellBrowser/ucsc/tabulate_facets.pl /usr/local/apache/htdocs-cells-beta/dataset.json
 0 0 * * 1-5 cd /usr/local/apache/htdocs-cells-submit/facets && /usr/local/apache/htdocs-cells-submit/facets/tsv_to_json.py 
  
+# Hidden-dataset reminders (RM #38246). Once a month, queue one draft email per
+# hidden dataset whose submitter has not been asked in a year, and mail the
+# report to cells@. Nothing reaches an author until a person reviews the queue
+# and runs "cbPingHidden send". Silent when nothing is due.
+0 8 1 * * umask 002; ~mspeir/cellBrowser/ucsc/cbPingHidden scan -q --mail-report cells@ucsc.edu
+
 # cbAnnotServer: Cell Browser login/annotation API (RM #37492). Keeps gunicorn
 # (127.0.0.1:5051, Apache proxies /api to it) alive; restarts if down / on reboot.
 * * * * * umask 002; CBANNOT_ENV_FILE=/hive/data/inside/cells/cbAnnotServer/cbAnnot.env ~mspeir/cellBrowser/src/cbAnnotServer/deploy/watchdog.sh >> /hive/data/inside/cells/cbAnnotServer/logs/watchdog.log 2>&1
 @reboot umask 002; sleep 180; CBANNOT_ENV_FILE=/hive/data/inside/cells/cbAnnotServer/cbAnnot.env ~mspeir/cellBrowser/src/cbAnnotServer/deploy/watchdog.sh >> /hive/data/inside/cells/cbAnnotServer/logs/watchdog.log 2>&1
 
 # DE worker: Cell Browser differential expression (RM #24912). Keeps deWorker.py
 # alive (reads the /hive job queue); restarts if down / on reboot.
 #
 # MOVED (2026-08-22): the DE worker now runs from the otto crontab ON
 # hgcompute-08, not here. The compute host reads exprMatrix.bin from a /hive
 # cache it fetches over HTTP (deCache.py), so it no longer needs the web host's
 # local docroot, and DE compute is off hgwdev. These two lines are left commented
 # for history; the live copy is in otto's crontab on hgcompute-08.
 #* * * * * umask 002; DE_ENV_FILE=/hive/data/inside/cells/cbAnnotServer/de.env ~mspeir/cellBrowser/src/cbAnnotServer/de/deploy/deWorkerWatchdog.sh >> /hive/data/inside/cells/cbAnnotServer/logs/deWorker-watchdog.log 2>&1
 #@reboot   umask 002; DE_ENV_FILE=/hive/data/inside/cells/cbAnnotServer/de.env ~mspeir/cellBrowser/src/cbAnnotServer/de/deploy/deWorkerWatchdog.sh >> /hive/data/inside/cells/cbAnnotServer/logs/deWorker-watchdog.log 2>&1