A feature release. Two new libraries join the suite — boundary-audience for rule-based segmentation and boundary-push for mobile push notifications — alongside a new boundary-realtime connection hook and a cache eviction fix.
Added: boundary-audience
A new audience segmentation library (libs/audience/) with declarative, rule-based segment definitions.
-
defaudiencemacro for code-defined segments with seven built-in filter types: demographics, location, role, account-tenure, last-active, behavior, and feature-usage. -
Hybrid SQL + predicate evaluation pipeline — SQL-eligible filters are pushed to the database, remaining filters run as Clojure predicates over the candidate set.
-
AND/OR/NOT segment composition with circular-reference detection.
-
Dynamic (DB-persisted) segments via JSON, with schema validation that rejects fn-typed values.
-
Cached membership results in an
audience_membershipstable with configurable per-segment TTL. -
Builder UI served via HTMX with Replicant widget mount points for the filter panel and composition builder.
-
REST + web endpoints: CRUD, preview with count + sample, evaluate + cache, member listing.
-
Custom filter type extensibility via
filter→sqlandfilter→predicatemultimethods. -
Integrant wiring with
IAudienceResolver,IAudienceRepository, andIAudienceCachecomponents.
Added: boundary-push
A new push notification library (libs/push/) with multi-platform delivery via FCM (Firebase Cloud Messaging) and APNs (Apple Push Notification service).
-
defpushmacro for declarative notification definitions with i18n locale maps, deep links, priority, TTL, collapse keys, and retry configuration. -
Platform-specific provider protocols (
IFCMProvider,IAPNsProvider) behind a unifiedIPushServiceorchestrator. -
Device token management — registration, rotation, soft-deactivation, and stale token cleanup.
-
HMAC-secured analytics callback endpoint for client-reported delivery/open tracking.
-
Error classification (retryable / permanent / token-invalid / rate-limited) for intelligent retry decisions.
-
Async parallel delivery via
sendAsync+CompletableFuturefor both FCM and APNs. -
Job-based reliable delivery via a hard dependency on
boundary-jobs. -
REST endpoints: device CRUD (
/api/push/devices), callback (/api/push/callback), stats (/api/push/stats/:id). -
Database migrations for
push_device_tokens,push_send_log, andpush_analytics_eventswith multi-tenant support. -
Mock providers for dev/test and Integrant wiring for all components.
-
41 tests, 118 assertions covering unit, integration, and contract layers.
Added: realtime on-open callback
boundary-realtime’s `websocket-handler now accepts an optional :on-open callback — (fn [connection-id]) invoked after a successful connect. Use it to subscribe connections to topics based on the authenticated user’s roles. Exceptions thrown by the callback are logged and swallowed, so they do not abort the connection.
Fixed: deterministic cache eviction
boundary-cache LRU eviction now uses a monotonic access counter instead of timestamps, fixing non-deterministic eviction when entries are created within the same millisecond.
Version alignment
All 24 libraries bumped to v1.0.1-alpha-26 to maintain lockstep versioning.
Upgrade
Re-run the installer to pick up the latest release:
curl -fsSL https://get.boundary-app.org | bash
No breaking changes. The new libraries are opt-in — add boundary-audience or boundary-push to your deps to use them.