# 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:** Stored-procedure commands are now [Handlebars](https://handlebarsjs.com/) templates. Argument values are bound as positional SQL parameters via the `{{param ...}}` helper (e.g. `CALL add_user({{param after.id}})`), replacing the previous `@field` placeholder syntax. Templates are compiled and validated when the reaction is built. ([#541](https://github.com/drasi-project/drasi-core/issues/541))
- **BREAKING:** `{{param ...}}` is now the only interpolation allowed in a command template. The `{{json ...}}` helper has been removed, and bare (`{{expr}}`) and raw (`{{{expr}}}`) interpolation, partials, and decorators are rejected when the reaction is built. This closes a SQL-injection surface where row data could be inlined into SQL text; to pass a whole object as JSONB, use `{{param after}}`. ([#541](https://github.com/drasi-project/drasi-core/issues/541))
- **BREAKING:** The builder shortcut `with_stored_procedure` has been renamed to `with_jsonb_procedure` to make its behavior explicit: it generates templates that pass the whole row as a single JSONB argument (`CALL proc({{param after}})`), so it is only suitable for procedures that accept a single `jsonb` parameter. Procedures with individual typed columns should use explicit `with_default_template`/`with_route` templates that reference each field (e.g. `CALL add_user({{param after.id}}, {{param after.name}})`). ([#541](https://github.com/drasi-project/drasi-core/issues/541))

### Fixed

- String parameter values are now bound faithfully. Previously a numeric-looking string (e.g. `"007"`) was eagerly coerced to a float, losing leading zeros and formatting when written to a `TEXT`/`VARCHAR` column. Strings are now bound verbatim for text columns and coerced to a number only when the target stored-procedure parameter is genuinely numeric. ([#541](https://github.com/drasi-project/drasi-core/issues/541))

## [0.3.4] - 2026-07-08

### Miscellaneous Tasks

- Updated the following local packages: drasi-lib

<!-- 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 -->
