CHANGES IN VERSION 0.99.4
-------------------------

USER-VISIBLE CHANGES

    o the cloud URL handlers are now registered with the exported
      `gdsfmt::gdsRegisterCloudHandler()` / `gdsfmt::gdsUnregisterCloudHandler()`
      instead of reaching into the gdsfmt namespace; gdsfmt (>= 1.49.7) is
      required

BUG FIXES

    o `.onUnload()` now actually unregisters the cloud handlers from gdsfmt;
      the hook it previously called did not exist in gdsfmt


CHANGES IN VERSION 0.99.3
-------------------------

NEW FEATURES

    o The default block-cache size can now be set persistently via the
      `gdscloud.cache_size_mb` option or the `GDSCLOUD_CACHE_SIZE_MB`
      environment variable, in addition to `gdsCloudCacheSize()`

    o Cloud requests now send a descriptive HTTP User-Agent identifying
      gdscloud instead of the default libcurl user agent

    o Added a package-level manual page (`?gdscloud`)

BUG FIXES

    o Protected the GDS file object during attribute assignment in the C
      code, addressing an rchk warning about a missing `PROTECT()`

    o Cloud URL handler registration in `.onLoad()` is now performed
      defensively, so the package can still load even if the gdsfmt
      registration hook is unavailable

USER-VISIBLE CHANGES

    o `gdsCloudOpen()` now derives the set of accepted URL schemes from
      `gdsCloudSchemes()`

    o Added a keyring-based example in the vignette for keeping
      credentials out of the R and shell history


CHANGES IN VERSION 0.99.0
-------------------------

NEW FEATURES

    o Direct support for HTTP/HTTPS URLs (`http://` and `https://`) in
      `gdsCloudOpen()`, allowing GDS files to be opened from any web server
      that supports HTTP Range requests

    o Cloud storage access for GDS files via Amazon S3 (`s3://`), Google
      Cloud Storage (`gs://`), and Azure Blob Storage (`az://`)

    o Transparent integration with `openfn.gds()` from the gdsfmt package,
      loading gdscloud enables cloud URL support automatically

    o LRU block cache (1 MB blocks, default 64 MB) for efficient random
      access with minimal HTTP requests

    o `gdsCloudConfigHTTP()` for configuring optional Bearer token
      authentication for HTTP/HTTPS endpoints; also reads the
      `GDSCLOUD_HTTP_TOKEN` environment variable as a fallback

    o Credential configuration functions: `gdsCloudConfigS3()`,
      `gdsCloudConfigGCS()`, `gdsCloudConfigAzure()`, with fallback to
      environment variables

    o `gdsCloudExportCredentials()` copies configured cloud credentials
      to child processes of a parallel cluster, for use with
      `SeqArray::seqParallel()`

    o Cache control: `gdsCloudCacheSize()`, `gdsCloudCacheClear()`,
      `gdsCloudCacheInfo()`

    o `gdsCloudList()` to list all open cloud streams with per-stream
      cache statistics
