# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
<!-- generated by git-cliff -->

## [Unreleased]

### Changed

- **BREAKING:** Command templates now use Handlebars with the `{{param <path>}}` helper for safe positional parameter binding instead of the previous `@field` substitution syntax. `{{param ...}}` emits a `?` placeholder and binds the value positionally through the driver, so values are never interpolated into SQL. Templates using the old `@after.field` / `@before.field` syntax must be rewritten (e.g. `@after.id` becomes `{{param after.id}}`).
- The processing loop now uses `tokio::select!` with a shutdown receiver, and `stop()` delegates to the shared `stop_common` lifecycle helper.

### Added

- Compile-time template validation: every configured template is compiled when the reaction is built, so invalid templates fail fast at construction.
- Route-key validation: every `routes` key must match a subscribed query id (or its last dotted segment), otherwise `build()` fails.
- Standard template context keys: `query_id`, `query_name`, `operation`, `timestamp`, `metadata`, `before`, `after`, and `data`.
- `{{json <path>}}` helper for serializing an object or array to inline JSON.
- Last-dotted-segment route resolution (a route keyed `my_query` matches query id `source.my_query`).
- `Starting` / `Running` / `Stopped` status transitions emitted during `start()` and `stop()`.
- `from_query` builder alias.

### Fixed

- UPDATE operations now bind the query result's real `before` and `after` rows independently; previously both were derived from a single payload, producing wrong or empty `before.*` values.
- Configuration validation no longer requires a `user` when an identity provider is configured, allowing identity-provider authentication.
- A template that fails to render (e.g. references a missing field) now logs a warning and skips only that event instead of interfering with processing.

## [0.3.4] - 2026-07-08

<!-- generated by git-cliff -->

## [0.3.3] - 2026-06-18

### Miscellaneous Tasks

- Updated the following local packages: drasi-lib, drasi-plugin-sdk

<!-- generated by git-cliff -->

## [0.3.2] - 2026-05-21

### Features

- Secret store plugin system with file, keyring, and Azure Key Vault providers ([#460](https://github.com/drasi-project/drasi-core/issues/460))

### Miscellaneous Tasks

- Normalize Apache-2.0 license headers across all .rs files ([#462](https://github.com/drasi-project/drasi-core/issues/462))

<!-- generated by git-cliff -->

## [0.3.1] - 2026-05-20

### Miscellaneous Tasks

- Updated the following local packages: drasi-lib, drasi-plugin-sdk

<!-- generated by git-cliff -->

## [0.3.0] - 2026-05-12

### Bug Fixes

- Lossless config persistence — preserve ConfigValue envelopes, camelCase keys, and passwords ([#422](https://github.com/drasi-project/drasi-core/issues/422))

### Miscellaneous Tasks

- Release ([#446](https://github.com/drasi-project/drasi-core/issues/446))

<!-- generated by git-cliff -->

## [0.2.14] - 2026-05-11

### Bug Fixes

- Lossless config persistence — preserve ConfigValue envelopes, camelCase keys, and passwords ([#422](https://github.com/drasi-project/drasi-core/issues/422))

<!-- generated by git-cliff -->

## [0.2.13] - 2026-04-28

### Miscellaneous Tasks

- Updated the following local packages: drasi-plugin-sdk

<!-- generated by git-cliff -->

## [0.2.12] - 2026-04-27

### Miscellaneous Tasks

- Updated the following local packages: drasi-plugin-sdk, drasi-lib

<!-- generated by git-cliff -->

## [0.2.10] - 2026-04-23

### BUG

- Aggregating results missing in reactions ([#322](https://github.com/drasi-project/drasi-core/issues/322))

### Bug Fixes

- Upgrade dependencies to resolve cargo-audit security vulnerabilities ([#331](https://github.com/drasi-project/drasi-core/issues/331))

<!-- generated by git-cliff -->

## [0.2.8] - 2026-03-16

### Miscellaneous Tasks

- Updated the following local packages: drasi-lib, drasi-plugin-sdk

<!-- generated by git-cliff -->
## [0.2.7] - 2026-03-09

### Miscellaneous Tasks

- Updated the following local packages: drasi-plugin-sdk

<!-- generated by git-cliff -->
<!-- generated by git-cliff -->
## [0.2.5] - 2026-02-13

### Miscellaneous Tasks

- Updated the following local packages: drasi-lib

<!-- generated by git-cliff -->
## [0.2.4] - 2026-02-11

### Miscellaneous Tasks

- Updated the following local packages: drasi-lib

<!-- generated by git-cliff -->
## [0.2.3] - 2026-02-10

### Miscellaneous Tasks

- Updated the following local packages: drasi-lib

<!-- generated by git-cliff -->
## [0.2.2] - 2026-02-05

### Miscellaneous Tasks

- Updated the following local packages: drasi-lib

<!-- generated by git-cliff -->
<!-- generated by git-cliff -->
