287583e8d72b4abc90ac33694147f604e1238e93 braney Sat Sep 5 08:17:39 2026 -0700 cartTrackVarCatalog: walk the 31 names left in the baseline, catalog 23. The baseline's own header said that a name in it was not evidence anybody had looked at it, because the first version was accepted wholesale. Every remaining name has now been read at its call site. Twenty-three turned out to be real cart variables and get rows; the other 31 are not cart variables at all, and the header now says which five things they are instead. The 23: My Variants edit form, 18 rows, a new group in OTHER_CGIS. The hgc details page prints a form named <track>_<field>, the form posts so the values land in the cart like any request variable, and hgTracks reads them out of the cart on the next render, writes the row to SQL and removes them. Cart variables by mechanism, one-shot commands by intent, which is why _id is the trigger and nothing has a default. <field>FilterLabel, <field>FilterValuesDefault, <field>HighlightType. Each of these settings is read through cartOrTdbString in three spellings: filterLabel.<field>, <field>.FilterLabel, <field>FilterLabel. The catalog had the first and, for four sibling settings, the third; for these three it had neither, which is the only reason they showed up as unknown while <field>FilterType did not. <container>.defaults, the track UI reset button, read with cartUsualInt for a composite or a superTrack and then used to clear that track's cart variables and its children's. <track>.minAc, the VCF minimum allele count, so a reader can hide singletons with 2 instead of a frequency cutoff. What the other 31 are: gvfItemName's item labels (_unk, _dnovo and six more appended to an item's name for display, which is not a variable at all), HTML element ids, table and db.table names, one submit button read with cgiOptionalString rather than from the cart, and one printf artifact. projectSelect is an id, not a name: the <select> that writes it carries no name attribute, so nothing is ever submitted. One cost, measured rather than guessed, and written into the new group's note. The My Variants suffixes are BED field names, so they collide with hgTables' per-field cart variables, whose last component is also a column name. In the 6,620 saved sessions that moves 24 names out of sessionCartAudit's "matched only by a catch-all" bucket and into the known one. The real cause is in that audit: peel() only tries suffixes beginning after a separator, so a left-anchored row such as hgta_fs.check.<db>.<table>.<field> can never match the name it describes, which is why 4,299 hgta_ names are in that bucket already. Fixing it would make the longer match win and take the 24 back. Not fixed here; it is the audit's own bug and its numbers are published. Catalog 341 rows to 364, baseline 54 names to 31. refs #37838 #37979 diff --git src/hg/utils/cartTrackVarCatalog/cartVarsNotCataloged.txt src/hg/utils/cartTrackVarCatalog/cartVarsNotCataloged.txt index 8e96aee1400..8ba4646ee1d 100644 --- src/hg/utils/cartTrackVarCatalog/cartVarsNotCataloged.txt +++ src/hg/utils/cartTrackVarCatalog/cartVarsNotCataloged.txt @@ -1,82 +1,70 @@ # cartVarsNotCataloged.txt - names that harvestCartVars.py finds at a # cart*ClosestToHome() or safef("%s.%s") call site but that cartTrackVarCatalog.py # does not describe as a track-scoped cart variable. Refs #37838. # -# Most are not cart variables at all: the scan cannot tell one from a table -# name or an SQL fragment, so _gold comes out of it too. Some are cart -# variables that simply have not been cataloged yet. +# None of them is a cart variable: the scan cannot tell one from a table name +# or an SQL fragment, so _gold comes out of it too. See the walk below for +# the five classes they fall into. # # Filenames are NOT in here. A "%s.tmp" built from a filename has the same # shape as a "%s.heightPer" built from a track name, and 15 names of that kind # used to sit below with a new one arriving every few weeks. The harvester now # reads them from the trailing extension instead: harvestCartVars.py # --filenames lists what that rule claims and explains it. # # cartTrackVarCatalog.py --reconcile complains about any harvested name in # neither the catalog nor this file, so this is what keeps a nightly run quiet # until something actually changes. Regenerate with --update-baseline, then read # the diff before committing: a name appearing here is a decision that it is not # a cart variable worth cataloging, and a name disappearing means its call site # went away. # # The first version of this file was accepted wholesale, as a snapshot of the -# gap on the day reconcile learned to fail. So a name being in here is not -# evidence that anybody has looked at it; only the ones added since, which -# arrive a few at a time in a reviewable diff, carry that weight. +# gap on the day reconcile learned to fail, so for a year a name being in here +# was not evidence that anybody had looked at it. That is no longer true: on +# 2026-09-05 every remaining name was read at its call site, and what was left +# falls into five classes. Item labels that only look like variables +# (gvfItemName appends _unk, _dnovo and six more to an item's name for +# display). HTML element ids, built the same way a cart name is and never +# sent to the server, which is most of them. Table and db.table names. One +# submit-button name that is read with cgiOptionalString and never from the +# cart (snp125Defaults_coloring). And one printf artifact, "\n". +# +# So a name in here now means somebody decided it is not a cart variable. A +# name that arrives later does not: read its call site before believing this +# file about it. Twenty-three names left in that walk and are described in +# cartTrackVarCatalog.py, eighteen of them the My Variants edit form's. # # Names are stored with the leading separator stripped, which is how reconcile # compares them. -FilterLabel # hg/lib/hui.c -FilterValuesDefault # hg/lib/hui.c -HighlightType # hg/hgTracks/bigBedTrack.c \n # hg/hgc/hgc.c add # hg/lib/hui.c -alt # hg/hgc/myVariantsClick.c bin # hg/cgilib/annoStreamDb.c bip # hg/hgTracks/gvfTrack.c -blockCount # hg/hgTracks/myVariantsTrack.c -blockSizes # hg/hgTracks/myVariantsTrack.c -cancel # hg/hgTracks/myVariantsTrack.c chainSelf # hg/hgc/hgc.c -chromEnd # hg/hgc/myVariantsClick.c -chromStart # hg/hgc/myVariantsClick.c -chromStarts # hg/hgTracks/myVariantsTrack.c clr # hg/lib/hui.c -cnvType # hg/hgc/myVariantsClick.c coloring # hg/hgTrackUi/hgTrackUi.c confSet # hg/hgTracks/searchTracks.c -defaults # hg/hgTrackUi/hgTrackUi.c delAll # hg/hgTracks/hgTracks.c -delete # hg/hgTracks/myVariantsTrack.c -description # hg/hgc/myVariantsClick.c dispFndTrk # hg/hgTracks/searchTracks.c dnovo # hg/hgTracks/gvfTrack.c drag # hg/lib/vcfUi.c fileSortOrder # hg/cgilib/fileUi.c first # hg/lib/tablesTables.c germ # hg/hgTracks/gvfTrack.c gold # hg/lib/hdb.c -id # hg/hgTracks/myVariantsTrack.c -itemRgb # hg/hgc/myVariantsClick.c kgAlias # hg/lib/findKGAlias.c kgProtAlias # hg/lib/findKGProtAlias.c knownGene # hg/lib/hgFind.c last # hg/lib/tablesTables.c mat # hg/hgTracks/gvfTrack.c -minAc # hg/lib/vcfUi.c -mouseover # hg/hgc/myVariantsClick.c -name # hg/hgc/myVariantsClick.c next # hg/lib/tablesTables.c pfamDesc # hg/hgc/hgc.c prev # hg/lib/tablesTables.c -project # hg/hgc/myVariantsClick.c projectSelect # hg/hgc/myVariantsClick.c prot # hg/hgc/hgc.c -ref # hg/hgc/myVariantsClick.c sel_id # hg/hgTracks/searchTracks.c som # hg/hgTracks/gvfTrack.c -thickEnd # hg/hgc/myVariantsClick.c -thickStart # hg/hgc/myVariantsClick.c unip # hg/hgTracks/gvfTrack.c unk # hg/hgTracks/gvfTrack.c wikiTrack # hg/hgTables/hgTables.c