feat(event-store): store and emit AllEvent directly
ci / JVM build + tests (push) Failing after 1m17s

Заменяет generic Event envelope (id, date, payload) на типизированный AllEvent
из :proto. EventStore теперь:

  - append(event: AllEvent)
  - events(after: Instant?): Flow<AllEvent>
  - earliestEventDate(): Instant

Изменения:
  - :event-store теперь зависит от :proto (api dependency).
  - Event.kt удалён — AllEvent уже живёт в :proto и несёт date, conversationId,
    typed envelope (Agent или Conversation variant).
  - Generic opaque payload выкинут — typesafety до самого storage.
  - append НЕ идемпотентен (AllEvent не имеет уникального id, два retry
    дадут дубликат). Документировано: для exactly-once использовать catchup
    через :message-store-api (там есть монотонный id).

В KDoc примере reconnect убран лишний null-check у earliestEventDate
(теперь всегда non-null).

Миграция (когда будем интегрировать):
  Producer в :standalone перестаёт делать двойную работу
  (MutableSharedFlow + persistAgentEvent). Вместо этого — один
  eventStore.append(allEvent). Caller'ы SSE будут делать
  store.events(after) → Flow<AllEvent>, без ручной конвертации.

Build green на JVM.
This commit is contained in:
2026-09-20 15:44:17 +03:00
parent 8bb24dab3c
commit 1f85cde1b8
3 changed files with 14 additions and 36 deletions
+4 -3
View File
@@ -5,9 +5,9 @@ plugins {
// KMP-интерфейс bounded-tail event log'а. Implementation-specific TTL/cap
// eviction — caller's responsibility НЕ вызывать cleanup() (метод не существует).
//
// Зависимости минимальные — только kotlinx-coroutines для Flow. Никаких
// :message-store-api, :proto, kotlinx-serialization — тип [Event] намеренно
// generic (payload: String), JSON-сериализацию делает producer.
// Тип [AllEvent] из :proto — typed envelope (3 AgentEvent + 9 Conversation.Event
// вариантов). :event-store отвечает за bounded-tail с auto-TTL, но не за
// сериализацию envelope'а — это делает :proto (уже @Serializable).
kotlin {
jvmToolchain(21)
@@ -18,6 +18,7 @@ kotlin {
sourceSets {
commonMain.dependencies {
api(project(":proto"))
api(libs.kotlinx.coroutines.core)
}
commonTest.dependencies {