> ## Documentation Index
> Fetch the complete documentation index at: https://knowledge.cloudquant.com/llms.txt
> Use this file to discover all available pages before exploring further.

# What's New in Liberator 2.4

> Release notes for the CloudQuant Data Liberator 2.4 release — symbol pattern filters, usage_log, clearer entitlement errors, dataset health cards, Excel plugin in the UI, and more reliable queries

# What's new in Liberator 2.4

Liberator 2.4 centers on **more precise queries**, **clearer dataset health**, and **safer limits**. Headline capabilities include wildcard / pattern filters on the symbol (key) parameter, a Super-Admin-only `usage_log` dataset of per-query records, and descriptive entitlement-limit errors. The release also adds a per-dataset cap on how many days a single query can span, Concordance-backed dataset catalog cards, the CloudQuant Excel plugin in the Liberator UI, and a round of connection and time-range reliability fixes.

## Highlights

<CardGroup cols={2}>
  <Card title="Symbol and key pattern filters" icon="filter" href="/python-guide/symbols-and-key-fields#pattern-filters-24">
    Use `%` wildcards on `symbols` / `keys` to pull a product family or naming pattern without listing every contract.
  </Card>

  <Card title="Clear entitlement errors" icon="message" href="/administration/fine-grained-permissions#how-restrictions-are-enforced">
    Limit violations say which cap was hit and what to change, instead of a generic "not entitled."
  </Card>

  <Card title="Query day-range cap" icon="calendar" href="/administration/fine-grained-permissions#limits-and-settings">
    Admins can set a maximum number of days a single query may span on a dataset, so one wide request cannot stall everyone else.
  </Card>

  <Card title="Dataset health cards" icon="chart-line" href="/api-reference/concepts/listing-datasets#include-schema-and-column-details">
    Catalog cards show date range, symbol count, status, and last updated — in the UI and via `liberator.datasets(details=True)`.
  </Card>

  <Card title="Excel plugin in Liberator" icon="file-csv" href="/api-reference/excel-plugin/configuring-account">
    Download and access the CloudQuant Excel plugin from the Liberator client, without a separately shared installer.
  </Card>

  <Card title="Combined user creation" icon="users" href="/administration/managing-users-and-entitlements#creating-a-new-user">
    Create and enroll a user in one flow. Invite emails include the username to sign in with.
  </Card>

  <Card title="Per-query usage log" icon="list" href="/administration/usage-log">
    Super Admins query `usage_log` like any other dataset — who queried what, which window, rows returned, and outcome.
  </Card>
</CardGroup>

## Symbol and key pattern filters

`symbols` (and the `keys` synonym) accept SQL `LIKE` patterns. An unescaped `%` is a wildcard for any sequence of characters:

```python theme={null}
df = liberator.get_dataframe(liberator.query(
    name='energy_contracts',
    symbols='PWR%',          # every key that starts with PWR
    back_to='2026-08-01',
    as_of='2026-08-02',
))
```

You can mix exact keys and patterns in one list. To match a literal percent character in a key, escape it as `\%`.

See [Symbols and key fields](/python-guide/symbols-and-key-fields#pattern-filters-24) and the [query parameters reference](/api-reference/concepts/query-parameters#dataset--symbol-parameters).

## Clearer entitlement errors and query day-range limits

When a query is rejected because of an entitlement or usage limit, Liberator now returns a **specific message**: which limit applied, the configured value, and what to change. A row-limit miss no longer looks the same as a missing entitlement.

Super Admins can also set a **maximum number of days** a single query may span on a given dataset (or dataset group). Use this on high-volume sources so a misconfigured `back_to` / `as_of` window cannot pin query workers. If a query exceeds the cap, the caller gets the same class of descriptive error.

See [Fine-grained permissions](/administration/fine-grained-permissions).

## Dataset health cards and symbol discovery

The dataset catalog now surfaces Concordance-backed health on each dataset:

* Date range covered
* Symbol count
* Status (for example, Ready)
* Last updated

The same fields are included when you call `liberator.datasets(schema=True, details=True)`. Administrators can configure how often symbol discovery refreshes, so newly added keys appear on cards without waiting for a fixed backend job.

See [Listing datasets](/api-reference/concepts/listing-datasets) and [Checking dataset access](/python-guide/dataset-access).

## Excel plugin in the Liberator UI

The CloudQuant Excel plugin is available from the Liberator client experience. Users can find and download it in the UI instead of waiting on a separately shared installer. Account setup (User ID, token, Base URL) is unchanged.

See [Configuring your account](/api-reference/excel-plugin/configuring-account).

## User onboarding

* **Combined create-and-enroll** — Super Admins create a user and add them to Liberator permissions in one step, instead of Create User followed by Add Users.
* **Username in invite and verification email** — new-account mail includes the username the recipient should sign in with.
* **Search by company** — the Users list finds people by their company field.

See [Managing users and entitlements](/administration/managing-users-and-entitlements).

## Per-query usage log

Super Admins can query **`usage_log`**, a private Liberator dataset of one row per query per dataset. Each row records the user, the dataset they asked for, the `as_of` / `back_to` they passed, rows returned, and an outcome of `success`, `limit_exceeded`, `not_entitled`, or `error`.

Query it with the standard client (`liberator.query(name='usage_log', ...)`). The log's own `back_to` / `as_of` select **when the usage happened**; the `as_of` / `back_to` **columns** are the window the original caller requested. The symbol / key is the dataset that was queried. Records are retained for at least 30 days.

See [Query usage log](/administration/usage-log).

## Connection and query reliability

* **S3 request style** — during Test Connection, Liberator detects whether the endpoint needs path-style or virtual-hosted addressing (including MinIO, Ceph, and other S3-compatible stores), so you no longer have to set `request_style` by provider. See [Amazon S3](/datasource-config/s3).
* **Database port is required** on Test Connection for PostgreSQL, MySQL, SQL Server, and Oracle.
* **Passwords with special characters** (`%`, `?`, `#`, `@`, `/`, `:`, `&`) connect successfully on database sources.
* **Fixed / manual timestamps** — datasets onboarded with a fixed date-time (no date column) query the correct partition after discovery.
* **Time-range queries** resolve partitions more reliably across the requested window.
* **Future `as_of` on live-append datasets** no longer holds query workers in an empty-fetch loop. Prefer `as_of` at or before "now" unless you intentionally query forward-dated records. See [Usage of the as\_of parameter](/python-guide/as-of-parameter).
* **HubSpot rate limits** — HubSpot-backed queries wait and retry when the CRM API returns a rate-limit error. See [HubSpot](/datasource-config/hubspot).
* **Date-format ranking** — onboarding suggestions prefer ordinary calendar formats over day-of-year when the column contains month/day/year values.

## Compatibility

There are no breaking changes to the client libraries (Python, REST, JavaScript, Excel, etc.) or to the dataset query surface. Existing exact-symbol queries continue to work. Pattern filters, day-range caps, catalog-card fields, and `usage_log` are additive.
