You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Fenced 60-second delivery leases (lease_token, lease_until) with pre-channel fencing (CHANNEL_ATTEMPT_STARTED), append-only per-channel attempt observations (CHANNEL_ATTEMPT_RESULT), LEASE_LOST recording, exponential retry backoff, and automatic follower settlement (DEDUP_SATISFIED on leader delivery; OBLIGATION_HANDED_OFF, DEDUP_OWNER_PROMOTED, and DEDUP_RELINKED on leader exhaustion).
Durable successor lineage (dedup_successor_id) and guarded replay (replay_blocked_by, replay_block_reason) preventing duplicate delivery when a successor obligation is pending or already satisfied (F-01, F-02).
Deadline/cancellation-aware SMTP admission and UNKNOWN provider outcome recording for timed-out in-flight sends (F-04a, F-04b).
Immutable ACTIVE policy snapshots (notification_policy_revisions, notification_policy_snapshots) locked at intake and read in a single lock-free SELECT during warm simulation/inspection (F-05).
Strict enforcement blocking producer overrides from weakening ACTIVE policies and blocking reserved adapter-steering metadata keys (slack_channel, email_to, pagerduty_severity, websocket_user_id).
Unified HTTP, Console Read-Model, & WebSocket Service (uns / uns.app:create_app):
Consolidated FastAPI service mounting /api/v1/notifications/*, /api/v1/runtime/*, /api/v1/policies/reload, /ui/*, /ws/agents/{agent_id}, public /healthz, and authenticated /readyz and /metrics.
Pre-accept WebSocket authentication supporting native Authorization: Bearer headers and browser uns.v1 + bearer.<base64url> subprotocols with closed-list Origin validation.
Trusted-Local MCP Server (uns-mcp):
Read-only default mode (stdio-local) and explicit --enable-writes mode (stdio-persistent) requiring UNS_DATABASE_URL, UNS_API_PRINCIPAL, and UNS_MCP_DELIVERY_CONFIRMATION_TOKEN with an owned lifespan recovery worker and runtime-bound read helpers (F-07).
Live PostgreSQL 16 Operational Acceptance & Sustained Load Validation (tests/uns/test_postgres_and_load.py):
Out-of-the-box PostgreSQL driver support (psycopg[binary]>=3.2.0 in uns[sql] / uns[full]) verified in CI against postgres:16-alpine across schema migrations (uns-migrate), policy snapshot revision locking, deduplication leader/follower promotion, lease-fenced delivery, ACK/timeout callbacks, and SQLAlchemyReadModelAdapter queries.
Sustained concurrency and load suite validating 100-request burst intake and deduplication storm coalescing, 4-worker racing Runtime.dispatch(limit=...) lease contention with zero duplicate external sends, and concurrent policy reload interleaved with active intake.
Optional delivery_service and dlq_service dispatch integration on uns.signaling.send_signal().
Comprehensive Documentation Suite (docs/):
Production Deployment reference (docs/DEPLOYMENT.md), complete API reference (docs/API.md), Support State Machine & Schema guide (docs/support/STATE-MACHINE-AND-SCHEMA.md), Troubleshooting Guides (docs/tsg/TSG-01 through TSG-06), User/Integrator Manuals (docs/user-guides/), and MkDocs Material GitHub Pages configuration (mkdocs.yml, .github/workflows/docs.yml).
Linked dedup_successor_id and emitted OBLIGATION_HANDED_OFF when a new request replaces a failed solo leader within the same deduplication window, and preserved uns_dedup generation state while any retained notification shares dedup_key.
Refreshed per-callback lease timestamps (self.clock()) inside deliver_callbacks() and cleared callback_pending on 3rd-attempt exhaustion so exhausted callbacks do not block uns-maintain retention pruning.
Escaped HTML entities (html.escape) in EmailAdapter._build_html_body() and sanitized CR/LF characters from MIME header fields.
Keyed HTTP rate-limiter buckets by SHA-256 digests of verified API keys only, falling back to client IP for unauthenticated or invalid headers.
Constrained POST /api/v1/policies/reload to reject path traversal (..), enforce UNS_POLICY_DIR root boundaries when configured, and reject empty policy directories (loaded_count == 0).
Pushed event_type filtering and total_count computation into SQL WHERE / COUNT(*) clauses in SQLAlchemyReadModelAdapter.get_audit_events().
Bounded MetricsCollector sample storage with ring buffers (deque(maxlen=10_000)), validated X-Request-ID headers, capped serialized request metadata at 64 KiB, isolated RedisWebSocketSubscriber onto a dedicated thread pool, and hardened .github/workflows/python-tests.yml with strict mypy verification.