ff-engine 0.15.0

FlowFabric cross-partition dispatch and background scanners
Documentation
[package]
name = "ff-engine"
version.workspace = true
edition.workspace = true
license.workspace = true
authors.workspace = true
repository.workspace = true
homepage.workspace = true
keywords.workspace = true
categories.workspace = true
description = "FlowFabric cross-partition dispatch and background scanners"

[features]
# PR-94: opt in to OTEL-backed scanner cycle metrics. OFF by default.
# The `ff-observability` dep is always present (no-op shim compiles to
# zero cost); the feature flips its backend to real OTEL.
observability = ["ff-observability/enabled"]
# Wave 5a: enable the Postgres dispatch branch in `partition_router`.
# Pulls `ff-backend-postgres` as a direct dep. OFF by default; the
# Valkey-only build stays lean. Wave 6d extends this feature to gate
# the Postgres completion_listener drain loop; PR-7b Cluster 4 moved
# the event_id resolution (which needed `uuid` for the ExecutionId
# suffix parse) into ff-backend-postgres::resolve_event_id, so only
# `sqlx` remains here for the back-compat shim signature.
postgres = ["dep:ff-backend-postgres", "dep:sqlx"]

[dependencies]
ff-core = { version = "0.15.0", path = "../ff-core", default-features = false, features = ["core"] }
ff-observability = { workspace = true }
# v0.12 PR-7a transitional: `Engine::start_*` accepts
# `Arc<dyn EngineBackend>` on the boundary but scanners still speak
# ferriskey, so `start_internal` downcasts the backend to
# `ValkeyBackend` and reaches for the embedded client. v0.13 (PR-7b)
# trait-ifies the scanner surface and drops this dep.
#
# `default-features = false` is load-bearing: `ff-backend-valkey`'s
# default feature set enables `ff-core/streaming`, which would
# silently defeat the explicit `ff-core` anchor on line 26
# (`default-features = false, features = ["core"]`) and re-expose
# streaming-gated trait methods on `ff-engine`.
ff-backend-valkey = { version = "0.15.0", path = "../ff-backend-valkey", default-features = false }
ferriskey = { workspace = true }
futures = { workspace = true }
serde_json = { workspace = true }
tokio = { workspace = true }
tracing = { workspace = true }
# Wave 5a: Postgres dispatch delegate. Activated by `postgres`
# feature only; stays out of the Valkey-only dep graph.
ff-backend-postgres = { workspace = true, optional = true }
# Wave 6d: Postgres completion_listener outbox drain. `sqlx` for the
# back-compat shim signature; flips on with the `postgres` feature
# only.
sqlx = { workspace = true, features = ["postgres", "runtime-tokio-rustls"], optional = true }

[dev-dependencies]
# Unit-test mock `EngineBackend` impls need `#[async_trait]` to match
# the trait shape defined in `ff-core::engine_backend`.
async-trait = { workspace = true }
tokio = { workspace = true, features = ["macros", "rt"] }