Install

Works with Drupal: ^11.3 || ^12

Using Composer to manage Drupal site dependencies

Alternative installation files

Download tar.gz 1.34 MB
MD5: 8ab2b25650bcf45256d9947f429c920a
SHA-1: dcdd309b45c8f04f9af0bddf72c69da02ba62882
SHA-256: bdba444cb8be745699efbd08bd5e7ebb3ac1248f68902d5edbb1327ef0cc3199
Download zip 1.65 MB
MD5: af365cc2f10e6f6fbc311b30fa23e317
SHA-1: ab9d545bb1101100ed566d96d516aaf9ffb418cf
SHA-256: 37811277048422004026e99c23165f867417c7b2b2f74f9dc1f94d284b6bc13a

Release notes

Every chained row now records the trace ID of the request or job that wrote it, and a new submodule fills it from OpenTelemetry. The two identifiers a row can carry, correlation_id and trace_id, are now transient data.

Upgrading

The audit_trail and audit_trail_outbox tables have a new trace_id column, and there is no update hook until the first beta release: reinstall the module to upgrade.

New

  • Trace ID on every chained row (#3620443). The writer asks the new audit_trail.trace_id_provider service for the current W3C trace ID and stores it in an indexed trace_id column, whatever path wrote the entry. The base module's provider returns NULL; a module that knows the current trace decorates it. The entries list has a Trace ID filter, and an entry's detail page links its trace ID to that list.
  • audit_trail_opentelemetry submodule (#3620442). Supplies the trace ID of the current OpenTelemetry span. It needs the open-telemetry/api library (composer require open-telemetry/api) and something that starts spans, such as the OpenTelemetry module. Its README explains why a trace ID continued from an incoming traceparent header is chosen by the client.
  • Account name on account events (#3620441). Every audit_trail_user_auth row about a known account names it under account_name, in the transient bucket, so a row still says whose account it was after the account is deleted.

Changed

  • correlation_id and trace_id are transient data (#3620443). Either can carry personal data: a trace ID continued from an incoming header is the client's, and a correlation ID is whatever the caller chose. Neither is signed. The transient purge clears both together with context_transient, and an archive carries them only while they are still set, so a row restored from an archive gets them back.

Fixed

  • Interface strings (#3620444). The retention-delay units and the TSA verification messages can now be translated. Strings made only of placeholders are gone. Every label writes ID in capitals, so the detail page and the filter form share one string per label. A unit test now fails on any translation call whose string an extractor cannot read.
  • Documentation (#3620445). The configuration guide documents the bundled severity filter, and lists the settings every filter shares in one place.
Created by: mably
Created on: 29 Oct 2026 at 21:16 UTC
Last updated: 29 Oct 2026 at 21:17 UTC
Bug fixes
New features

Other releases