Study-update gate
Republishing a study shouldn't silently change what its attributes mean.
cBioPortal's incremental loading moves the data, but nothing diffs a study update against the published version's semantics: v2 can rename an attribute, retype STRING to NUMBER, or drop a column, and the importer will take it. This gate is that missing semantic diff. Keep the study repository's staging files audited against governed meaning on every change: a renamed or dropped attribute surfaces as field-removed plus a coverage finding, a retype as field-type-drift, a lowercase attribute id as attribute-id-not-upper (a Warning - set the gate to errorsAndWarnings to catch it before cBioPortal's validator does). Honest scope: headers only - sample-set deltas and data-row changes are the validator's and the portal's territory, not this gate's.