All notable changes to X-Signal will be documented in this file.
The format is based on Keep a Changelog ,
and this project adheres to Semantic Versioning .
Core domain — Value objects (TweetId, AuthorId, MonitorId, RunId, Cursor, Sentiment, Intent, Confidence), entities (Tweet, Author, EnrichedTweet, Monitor, Signal), policies (DedupPolicy, FilterPolicy).
Monitoring use case (RunMonitor ) — Stateful cursor-based dedup with recent-ID window + Bloom filter supplement; load → fetch → dedup → enrich → filter → cap → sink → persist → meter lifecycle.
Search use case (SearchAndEnrich ) — Stateless search + enrich, no dedup/state.
Analysis use case (AnalyzeBatch ) — Aggregate sentiment/intent/entity/language counts over a batch.
Thread use case (GetThread ) — Reconstruct ordered parent chain with depth cap and truncation.
Data acquisition — ApifyUpstreamActorProvider with apidojo mapper, FallbackProvider with circuit breaker, retry/backoff with full/decorrelated jitter.
Enrichment pipeline — LexiconEnricher (fast deterministic path), LlmEnricher (OpenAI adapter with batching, JSON schema constraint, prompt injection safety), CachingEnricher (KV-based per-tweet cache with version-aware keys).
State & storage — KvStateRepository (cursor + recent-IDs + Bloom), DatasetSink (stable schema row), WebhookSink (HMAC, SSRF guard, idempotency, retry).
Billing — ApifyPpeMeter with 5 events (actor_start, monitor_run, new_item, enrichment_llm, alert_delivered).
MCP server — 5 tools (x_search, x_monitor_run, x_analyze, x_get_thread, x_find_intent) with compact/verbose projection and field selection.
Actor entrypoint — interfaces/actor/main.ts reads input, resolves config, builds container, executes RunMonitor.
Composition root — DI wiring with strict import boundaries (0 depcruiser violations).
CI pipeline — GitHub Actions: typecheck, lint, format, dependency-cruiser, test with coverage gates, schema parity check.
Test suite — 161 tests (unit, integration, MCP, property, snapshot) with domain/application coverage ≥ 90%.
Pricing is provisional ([PROVISIONAL] tag). Final prices pending E2E cost measurement (Task 8.2).
E2E deployment verification pending (Task 8.3).