Skip to content
CAI
Software that uses CAICheck a score

thefabric-io/eventsourcing

61.1

Adequate · 21 September 2026

2.1k

lines of production code

Go

primary language

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is an event-sourcing library that provides the core infrastructure for building reliable, distributed applications. It manages the storage and retrieval of domain events while offering robust mechanisms for consuming them, including both asynchronous and FIFO-ordered processing with at-least-once delivery semantics. The framework supports PostgreSQL-backed offset tracking and cross-aggregate event streaming to ensure consistent state reconstruction and processing.

Features

Event sourcing core: new interfaces, metadata, and event consumer mechanism

The library introduces several new capabilities for building event-sourced applications. You can now record inception and modification timestamps on aggregates by implementing the new \InceptionRecorder\ and \ModificationRecorder\ interfaces, which are automatically invoked during event application. Aggregates can now carry arbitrary metadata, and the \Aggregate\ type exposes a \Metadata()\ accessor. For storage, the \StorageNamer\ interface allows aggregates to define custom storage names, while the \AggregateStateEventMapper\ interface enables explicit mapping of event types. The \Event\ struct now tracks and exposes an \Offset\ for reliable processing. Additionally, the \eventconsumer\ package provides a robust mechanism for consuming events with FIFO ordering, at-least-once delivery semantics, and PostgreSQL-backed offset storage, including an \AsyncSequentialSubscriber\ and \FIFOSubscriber\. The \EventStore\ interface has been updated to support saving multiple aggregates in a single call and querying events by offset and type.

(repo-wide) · high confidence

Introduce event consumer framework with async and FIFO subscribers

The \eventconsumer\ package now provides a robust framework for consuming events with at-least-once delivery semantics and offset tracking. Users can choose between two execution models: \AsyncSequentialSubscriber\ for non-transactional processing (ideal for IO-heavy or long-running handlers) and \FIFOSubscriber\ for transactional processing (ideal for projections that must commit with offset updates). The API has been updated to use parameter objects and functional options for configuration. A PostgreSQL-backed \ConsumerStore\ is provided in \eventconsumer/pgeventconsumer\ for durable offset tracking. Existing handlers that previously received a transaction must be split into \Handler\[S\]\ (non-transactional) or \TxHandler\[S\]\ (transactional) interfaces.

eventconsumer · high confidence

PostgreSQL event store gains cross-aggregate streaming and consumer tracking

The pgeventstore package now supports cross-aggregate event streaming via a new 'offset' column and an 'Events' API that allows consumers to query events by offset and type. This enables efficient, in-order consumption of events across all aggregates. Additionally, the store now creates an 'events\_consumers' table to track consumer group offsets, supporting robust event consumption patterns. The 'Init' function has been updated to handle schema and table creation for these new features, and the 'Storage' function no longer requires a parse event type function, relying instead on the 'AggregateStateEventMapper' interface for event parsing.

pgeventstore · high confidence

Dependencies

Updated Go dependencies and added Docker test support

The project's Go module dependencies have been updated. Notably, the \github.com/thefabric-io/transactional\ library was added at version 1.1.0. Additionally, \github.com/ory/dockertest/v3\ was added to support Docker-based testing, along with a range of indirect dependencies including \logrus\ and various Docker-related packages.

(dependencies) · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Score

  • CAI 53 → 61 (+7.6)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 81 → 89 (+8.2)
  • Architecture 100 → 100 (+0.0)
  • Maturity 69 → 69 (+0.0)
  • Readiness 24 → 38 (+13.6)
  • Security 89 → 91 (+2.4)
  • Domain Modelling 100 → 100 (+0.0)

Resolved (18)

  • Coverage not included — suite not readable by the collector
  • Critical CVE: [GHSA redacted] (go.mod)
  • Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
  • Duplicated block (11 lines × 2) (eventconsumer/subscriber.asyncseq.go)
  • Duplicated block (13 lines × 2) (pgeventstore/storage.go)
  • Duplicated block (9 lines × 2) (eventconsumer/subscriber.asyncseq.go)
  • Duplicated block (9 lines × 2) (eventconsumer/subscriber.asyncseq.go)
  • High CVE: [GHSA redacted] (go.mod)
  • High CVE: [GHSA redacted] (go.mod)
  • LLM evaluation failed
  • Medium CVE: GO-2024-2598 (go.mod)
  • Medium CVE: GO-2026-5024 (go.mod)
  • No exposed public API
  • Test reliability not included
  • early-stage repository — too few commits for a meaningful bus factor
  • early-stage repository — too little history to judge knowledge freshness
  • git history depth insufficient
  • git history depth insufficient

New (18)

  • ClassTooLong: AsyncSequentialSubscriber (eventconsumer/subscriber.asyncseq.go)
  • Critical CVE: [GHSA redacted] (go.mod)
  • Duplicated block (11–12 lines × 2) (eventconsumer/subscriber.asyncseq.go)
  • Duplicated block (12 lines × 2) (eventconsumer/subscriber.asyncseq.go)
  • Duplicated block (15 lines × 2) (pgeventstore/storage.go)
  • Duplicated block (8 lines × 2) (eventconsumer/subscriber.asyncseq.go)
  • Duplicated block (9 lines × 3) (eventconsumer/subscriber.asyncseq.go)
  • High CVE: [GHSA redacted] (go.mod)
  • High CVE: [GHSA redacted] (go.mod)
  • Medium CVE: GO-2024-2598 (go.mod)
  • Medium CVE: GO-2026-5024 (go.mod)
  • Medium CVE: GO-2026-6179 (go.mod)
  • MethodTooLong: AsyncSequentialSubscriber.processLoop (eventconsumer/subscriber.asyncseq.go)
  • Near-duplicate member pair (31 shared lines) (eventconsumer/subscriber.asyncseq.go)
  • Outdated: github.com/jmoiron/sqlx
  • Outdated: github.com/lib/pq
  • Outdated: github.com/ory/dockertest/v3
  • Outdated: github.com/sirupsen/logrus

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

thefabric-io/eventsourcing was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 21 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 4ea44f21f8d041b8afd9476c17032824f788cdcf — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-fa71c66cabd8.