CHANGES IN VERSION 1.31.6
-------------------------

  o qualityMask()'s recommended set for HM450 and EPIC is now the five M_*
    tracks EPICv2 and MSA already use (M_1baseSwitchSNPcommon_5pt,
    M_2extBase_SNPcommon_5pt, M_mapping, M_nonuniq, M_SNPcommon_5pt), read
    from KYCG.HM450.Mask.20261008 / KYCG.EPIC.Mask.20261008 in sesameData,
    which are built from the InfiniumAnnotation v8.2 masks. The older KYCG
    tracks (mapping, channel_switch, snp5_GMAF1p, extension, sub30_copy)
    masked about twice as many probes and are still available through
    mask_names. This brings R and SeSAMe2 to the same quality mask on all
    four human arrays (zhou-lab/sesame#1). KYCG.EPICv2.Mask.20261008 and
    KYCG.MSA.Mask.20261008 are rebuilt from the same v8.2 masks.

  o getMask(), listAvailableMasks() and backgroundMask() read the newest
    KYCG.<platform>.Mask.<date> sesameData lists. They used to search every
    listed version, whose tracks share names, so which build a track came
    from depended on listing order. A track name only an older build has
    is still found there. backgroundMask() for HM450/EPIC therefore now
    uses M_nonuniq and the M_1baseSwitchSNPcommon tracks, as SeSAMe2 does.

CHANGES IN VERSION 1.31.5
-------------------------

  o Fixed readControls() building the control data.frame by positional
    assumption. It named the columns with colnames(ctl) <- c('G','R','col',
    'type') over a frame whose signal matrix has four columns, so
    Color_Channel and Type were cbind-ed past the end of that name vector and
    arrived unnamed, while `type` silently took a signal column. Downstream,
    controls(sdf)$Type was a vector of integers, so negControls()'s
    grep("negative", ...) matched nothing and detectionPnegEcdf() failed in
    ecdf() with "'x' must have 1 or more non-missing values" on EPIC and
    HM450 -- the platforms whose controls arrive through readControls() rather
    than as SigDF rows. The columns are now named explicitly.

  o qualityMask() gained `platform` and `mask` arguments, so a custom or
    combined-array mask can be supplied directly instead of being applied as a
    separate addMask() step after the fact.

CHANGES IN VERSION 1.31.4
-------------------------

  o Removed the Google Analytics tag from the vignette header. Vignette
    rendering no longer contacts an external host at build time, and installed
    vignettes no longer load a remote tracking script.

  o Documented sesame-cli, a standalone C implementation of the SeSAMe
    preprocessing workflow (IDAT to betas, QC, differential methylation, copy
    number) for large cohorts and pipeline deployment. Its betas agree with
    this package to within ~1e-3 worst case; the intentional divergences are
    documented in the sesame-cli NUMERICS.md. This package remains the
    reference implementation. See the README and
    https://zwdzwd.github.io/sesame-cli.

CHANGES IN VERSION 1.0.0
-------------------------

  o First submission of SeSAMe package.