Repository navigation
Add the CQRS query cache, messaging brokers, webhooks and callbacks, and harden the resilience store - #16
Merged
Conversation
added 30 commits
October 12, 2026 18:19
…andler manifest and derive cache keys from query value objects
…[InvalidatesQuery] with maps at scan time
… is keyed by value
…ic state and never key a Traversable by its empty view
…sses on the query cache key tests
…viction that never fails a query
…tion instead of caching the stale result
…evicted groups leave no forever orphans
…irefly.cqrs.query.cache.provider
…refix in the skeleton
…A envelopes via #[InvalidatesQuery]
…d with-map query key
…der and refuse to boot on a cache store without atomic locks
…ckless in the skeleton and the resilience module
…ections and Redis
…ys in the skeleton and the actuator module
…REFLY_HEALTH_*_ENABLED variables in the skeleton
…f policies, and firefly:messaging:consume
…essaging:consume in the skeleton and the messaging module
…h retries, back-off and dead-letter topics
…listener.dead-letter.enabled in the skeleton
…und-robin poll() across consumer groups
…l Kafka, dead-letter topic included
…ng with retries, back-off and a dead-letter exchange
…er-exchange and prefetch in the skeleton
…alth indicators so its backed-off panel holds only the seeded rows
…r dead-letter topic so the direct exchange never drops a dead letter as unroutable
…real RabbitMQ, dead-letter exchange included
…provider settings behind firefly.webhooks.enabled
added 19 commits
October 12, 2026 20:24
…ators with a replay window
…yed JSON signature cannot carry a forged body
… so TrimStrings and ConvertEmptyStringsToNull cannot break the signature
…ortable receipts table proven on every database
…and publishes webhooks to the event bus, refusing with problem+json
…iption registry on memory or any database
…e 36-character id columns
…database, one row per subscription and event
… retries, back-off and a circuit breaker per endpoint
…-types patterns overlap
…over the execution log
…nce store, health indicators, webhooks and callbacks
…rness so firefly:eda:consume exists
…liverer, so replay no longer reaches a deactivated endpoint without --include-inactive
…and run the destination refusal on it, recording a changed endpoint
…without --include-inactive and sends to the current URL
…Dsn, integration lanes) into feat/ports-parity Conflicts kept both sides: the [Unreleased] changelog entries under their headings, the module tables, nav rows and capability notes, and the messaging config keys, README and auto-configuration docblock. The lumen outbox harness takes main's version. The query-cache and outbox lines both leave the CQRS known-latent list. Counts recomputed from the tree: 34 component directories, 37 module guides, 22 of the 34 packages with a #[Configuration] class, and eleven firefly:* commands contributed by capability packages; docs/cli.md gains the four W4 commands it was missing. W4's integration tests move onto Firefly\Testing\Integration\IntegrationDsn: the webhooks and callbacks database tests run per IntegrationDsn::lanes() (sqlite, pgsql, mysql, mariadb, sqlsrv) and skip by skipReason(), replacing their private DSN parsers; the Kafka, RabbitMQ and Redis tests read their variables through it.
…) into feat/ports-parity
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Brings LaraFly's remaining single-adapter ports up to PyFly parity and adds inbound webhooks and outbound callbacks.
What ships
firefly.cqrs.query.cache.provider=none|cache(defaultnone).#[CachedQuery]sets a TTL per query. The cache key is derived from the query's value object; a query that can't be keyed reliably is rejected when it is scanned.#[InvalidatesQuery]evicts cached results when committed domain events or EDA envelopes arrive, using generation-based group eviction.firefly.messaging.provider=kafka|rabbitmqreuse the eda client factories. Listeners get retry/back-off policies and Kafka DLT or RabbitMQ DLX routing, andfirefly:messaging:consumeruns them.firefly.resilience.store.provider=cache|memory. A cache store without atomic locks now fails at boot. Before, it silently dropped the critical section; you can still accept that explicitly withfirefly.resilience.store.allow-lockless=true.firefly/webhooks. An inbound endpoint per provider:memory|cache|database).firefly/eda; rejections are returned as problem+json.firefly:webhooks:prunecleans up stored records.firefly/callbacks. Outbound delivery driven by#[EventListener]:memory|database) and an execution log (memory|database).firefly:callbacks:{list,replay}.Security fixes made during review
--include-inactive.Verification
Includes
origin/main(W1 and W2).composer check