audit_chain 1.11.0

New features
Unsupported

## [1.11.0] - 2026-10-05

### Added
- Optional OpenTimestamps and XRPL witness clients for a persisted checkpoint digest (#3628689). Both are inactive until `witness_backend` names one of them. OpenTimestamps confirmation requires a checked Bitcoin header. The XRPL client holds no seed, refuses mainnet, and confirms only from a separate validated read. Receipts stay off the audit chain.

audit_chain 1.10.9

Unsupported

## [1.10.9] - 2026-10-03

### Changed
- Scheduled verification and the hash-key status report now use
`AuditChainLogger::signingStatus()` for key resolution instead of
opening `key.repository` themselves.

audit_chain 1.10.8

Bug fixes
Unsupported

### Fixed
- The reports dashboard Settings quick-action is omitted unless the
viewer can administer site configuration. Reports-only users no
longer receive an href they cannot open.

audit_chain 1.10.7

Bug fixes
Unsupported

### Fixed
- The dashboard's single "Keyed vs unkeyed" chart no longer fills the page. The chart grid uses fixed-width tracks, the Charts API element sets a 200px height, and canvas and SVG charts are capped at 200px tall.

audit_chain 1.10.6

Bug fixes
Unsupported

### Changed
- A disclosed historical fork with a verifying successor segment is a
documented status-report warning. Whole-history verification stays
unsuccessful and rows are not rewritten. A missing successor or a
successor that no longer verifies remains an error. Unsigned-prefix
and foreign-seal warnings are unchanged.

audit_chain 1.10.5

Bug fixes
Unsupported

### Fixed
- `hook_help()` accepts the two-argument core contract and builds settings
and dashboard hrefs from routes instead of hardcoded paths.

audit_chain 1.10.4

Bug fixes
Unsupported

Fixed

  • Settings form no longer claims encryption-profile rotation makes existing rows stop verifying. The chain is over plaintext; hashes stay valid while the old profile remains loadable. Cron export now refuses an empty destination or off-host http:// at save time, matching EvidenceExporter.

audit_chain 1.10.3

Bug fixes
Unsupported

### Changed
- A leading unsigned prefix followed by signed rows is a documented status-report warning. Those rows stay in the log and are not re-signed or deleted. Whole-history verification stays unsuccessful. An edited signed row, a missing signing key, and an unsigned row after the signed successor remain errors. A foreign seal is unchanged.

audit_chain 1.10.2

Bug fixes
Unsupported

### Fixed
- MCP successor allowlist includes `awaiting_verification` so status and
verify-now report the post-activate pending key instead of `other`. The
dashboard successor card no longer labels that pending state as
Verification failed.

audit_chain 1.10.1

Bug fixes
Unsupported

### Fixed
- Uninstall deletes module-owned state (`audit_chain.seal`,
`audit_chain.scheduled_verification`, `audit_chain.retention_refused`,
and `audit_chain.export_checkpoint.*`). Schema tables already drop; a
leftover seal made a later empty-chain `verify()` report `seal_broken`.

audit_chain 1.10.0

New features
Unsupported

Audit Chain 1.10.0

Added

  • Versioned global archive checkpoints and independently verifiable archive bundles. Contract v1 commits to a deterministic Merkle root over row IDs and stored hash-chain columns, the window chain head, and bounded commitments to any existing prefix seal or successor record.

audit_chain 1.8.3

Bug fixes
Unsupported

Fixed

  • Scheduled-verification integrity classification is shared by the dashboard and status report. Date formatting is skipped unless the integrity state shows a run time.

audit_chain 1.8.2

Bug fixes
Unsupported

Completes the Drush confirmation fix for audit-chain:seal. The command now uses the global --yes option rather than declaring it twice. Explicit --no refuses the operation without creating a seal.

Includes 1.8.1’s recovery-activation and parseable JSON fixes. Installed-site CLI tests cover discovery, refusal, activation, retry, verification, export and refusal to reseal frozen successor history across supported Drupal versions.

audit_chain 1.8.1

Bug fixes
Unsupported

Fixes recovery activation in 1.8.0, which stopped with An option named "yes" already exists. The command now uses Drush’s global confirmation options. --no refuses activation; --yes confirms it and returns parseable JSON.

An installed-site CLI regression covers discovery, refusal, activation, retry, verification and export across supported Drupal versions. This patch does not change signing, storage, access permissions or the historical verification verdict.

audit_chain 1.8.0

Bug fixes
New features
Unsupported

Audit Chain 1.8.0 adds explicit signed successor segments for investigated historical failures and prevents destructive pruning of the shared audit history.

audit_chain 1.7.1

Bug fixes
Unsupported

Changed

  • verify() and sealPrefix() share one stored-row canonical helper. Hashing of existing rows for verification and prefix sealing now goes through a single canonicalFromRecord() path so the two cannot drift. Hash format, locking, and schema are unchanged.

audit_chain 1.7.0

New features
Unsupported

Adds a read-only reports page at /admin/reports/audit-chain: the last scheduled-verification integrity verdict and a keyed-vs-unkeyed split over 24 hours, 7 days, or 30 days. Optional Charts API upgrade when a library plugin is present, with an inline SVG fallback otherwise. See #3622590.

audit_chain 1.6.0

New features
Unsupported

Audit Chain 1.6.0 is a backward-compatible minor release.

Added

audit_chain 1.5.1

Bug fixes
Unsupported

Audit Chain 1.5.1 is a backward-compatible bug-fix release.

Fixed

audit_chain 1.5.0

Unsupported

Adds the off-system evidence export (part 2 of #3616535; part 1 shipped in 1.4.0).

  • Versioned, data-minimized NDJSON. Exported rows carry identifiers and hash-chain columns only — metadata, IP addresses, user agents and entity labels never leave the system. Every row is stamped with contract_version.
  • Destinations. An HTTPS ingest endpoint (one application/x-ndjson POST per batch, bounded by timeouts) or a server file path (appended under an exclusive lock). Plain HTTP off-host is refused; loopback collectors stay allowed. Ingest URLs are logged and checkpointed with credentials stripped.
  • At-least-once delivery. Per-destination checkpoints advance only after a successful delivery: outages retry, limited runs are resumable, replays never move a checkpoint backwards. Consumers deduplicate on the row id.
  • Verification-gated. Export refuses while the last scheduled verification is failing, so unverified rows are never presented as evidence.
  • Surfaces. drush audit-chain:export (destination, replay, channel and limit options) and an optional cron leg.

No schema changes and no update hooks. Full details in the CHANGELOG.

audit_chain 1.3.0

Bug fixes
New features
Unsupported

Prefix seal for unverifiable history (audit-chain:seal); verify reports sealed_through / seal_intact / verified_from.

audit_chain 1.2.0

Bug fixes
New features
Unsupported

Re-encrypt command and decode/verify by row encryption profile.

audit_chain 1.1.0

Bug fixes
New features
Unsupported

Audit Chain 1.1.0 adds a request-scoped collector, fail-loud signing-key handling, and clearer verification when history was written unkeyed.

audit_chain 1.0.2

Bug fixes
Unsupported

Declares the PHP floor in composer.json. No code change; nothing to do on update.

Changed

composer.json now declares "php": ">=8.1". It previously specified no PHP constraint at all, so the effective floor came only from whatever core happened to require — the supported surface was implied rather than stated, and a reader had to trace Drupal's own requirements to find it.

audit_chain 1.0.1

Bug fixes
Unsupported

Patch release. Fixes one regression introduced by the extraction in 1.0.0.

Fixed

The streamed SIEM record carries bundle again. 1.0.0 dropped it in the move out of MCP Sentinel, where it had always been emitted. Nothing failed and nothing warned — a SIEM rule keyed on bundle would simply have stopped matching, which is the worst way for an audit stream to regress: the consumer keeps receiving records and only the rule stops firing.

audit_chain 1.0.0

Unsupported

First stable release of Audit Chain: tamper-evident, hash-chained audit logging that any Drupal module can write to.

Each entry's hash covers its own content and the previous entry's hash, so a later insertion, deletion or edit breaks the chain and is detectable by an independent verification pass. With an HMAC key configured, forging a repair also requires the key — an edit made straight in the database cannot be quietly papered over.

audit_chain 1.x-dev

New features

First published snapshot of Audit Chain. This is a development release, not a stable one — see the caveats below before using it on a site you care about.

Tamper-evident, hash-chained audit logging that any module can write to. Each entry's hash covers its own content and the previous entry's hash, so a later insertion, deletion or edit breaks the chain and is detectable by an independent verification pass. With an HMAC key configured, forging a repair also requires the key.

Subscribe with RSS Subscribe to Releases for Audit Chain