Skip to content
CAI
Software that uses CAICheck a score

j5ik2o/event-store-adapter-rs

70.4

Strong · 21 September 2026

4.4k

lines of production code

Rust

primary language

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a Rust library for event sourcing that provides adapters for storing domain events and snapshots in DynamoDB, Google Bigtable, SQLite, or in-memory storage. It utilizes a v3 envelope-based API to manage event metadata and optimistic locking, allowing users to opt into specific backends via Cargo features. The library also includes test utilities for local backend emulation and example implementations for user account management.

Features

New SQLite user-account example demonstrating v3 envelope API

Added a new example in \examples/user-account-sqlite\ that demonstrates the v3 envelope API using an in-memory SQLite database. The example implements a user-account domain model where event metadata (aggregate ID, sequence number, timestamp, manifest) is carried in envelopes rather than aggregate fields, and optimistic locking is handled via explicit expected versions passed to the event store.

examples/user-account-sqlite · high confidence

New test utilities for Bigtable, DynamoDB, and ID generation

The test-utils crate now provides helper modules to support testing against Bigtable and DynamoDB backends. It includes a Bigtable admin helper to create tables with specific column families, Docker helpers to spin up LocalStack (for DynamoDB) and the Bigtable emulator, and DynamoDB utilities to create journal and snapshot tables (with TTL enabled for snapshots) and configure a client pointing to a local port. Additionally, a monotonic ULID generator is added to ensure deterministic, ordered IDs across test runs.

test-utils · high confidence

Behavioural changes

AI-DLC workflow now supports skipping the operation phase

The AI-DLC adaptive workflow composer has been updated to allow the operation phase to be skipped during workflow composition. This change enables the system to compose minimal viable workflows that stop after the construction phase when the operation stage is not required for the specific task, reducing unnecessary process overhead for tasks that do not need operational planning or deployment configuration.

.claude · medium confidence

Event Store v3: Envelope API replaces traits and enforces opt-in backends

This release introduces a major API overhaul for the event store library. The \Event\ and \Aggregate\ traits have been removed; domain events and aggregates are now plain \serde\ types, with metadata (aggregate ID, sequence number, timestamp) carried by new \EventEnvelope\ and \SnapshotEnvelope\ types. The \EventStore\ API now requires explicit \expected\_version\ for optimistic locking and no longer injects metadata into stored payloads. Additionally, storage backends (DynamoDB, Bigtable, SQLite) are no longer compiled by default; users must explicitly enable them via Cargo features (e.g., \features = \["dynamodb"\]\). Data written by v2 is not readable by v3, requiring manual migration.

(repo-wide) · high confidence

Event store backends migrate to envelope-based SPI with explicit versioning and retention

The DynamoDB, Bigtable, SQLite, and in-memory event store backends have been refactored to use a new envelope-based storage SPI (\StorageBackend\) that passes \EventEnvelope\ and \SnapshotEnvelope\ types instead of raw payloads. This change introduces explicit version tracking in snapshots (via \SnapshotEnvelope.version\) and adds configurable snapshot retention policies (\keep\_snapshot\_count\ and \delete\_ttl\) to all backends, allowing users to limit historical snapshot storage. The migration also standardizes optimistic locking behavior across backends, ensuring that updates to absent aggregates are treated as optimistic lock conflicts, and enforces contract violations for invalid inputs such as zero shard counts or zero snapshot retention counts.

lib/src · high confidence

User account example migrated to v3 envelope API

The user-account example has been updated to use the v3 envelope API, where event metadata (aggregate ID, sequence number, timestamp) is carried in envelopes rather than embedded in the domain event or aggregate state. This change introduces explicit optimistic locking via an expected\_version parameter on writes and requires the repository to manage replay positions and versions from the envelope data instead of relying on aggregate fields.

examples/user-account · high confidence

Dependencies

Initial release of event-store-adapter-rs v3.0.2 with multi-backend support

This change introduces the initial version (v3.0.2) of the \event-store-adapter-rs\ library, establishing a Rust workspace that provides event-sourcing adapters for DynamoDB, Google Bigtable, SQLite, and in-memory storage. The library gates backend implementations behind Cargo features (e.g., \dynamodb\, \bigtable\, \sqlite\), requiring users to opt into specific backends. It sets a Minimum Supported Rust Version (MSRV) of 1.94.1 and includes example projects for user-account management using both SQLite and DynamoDB backends.

(dependencies) · high confidence

Housekeeping

AI-DLC workflow artifacts and audit records for SQLite EventStore initiative

This change records the AI-DLC (AI-Driven Lifecycle) workflow artifacts for the SQLite EventStore intent, including reverse-engineering analysis of the existing Rust event-store-adapter library (DynamoDB, Bigtable, Memory backends), code quality assessments, dependency audits, and build/test verification results. It also adds audit logs tracking the workflow stages (initialization, ideation, inception, construction) and state tracking for the 26-stage plan, confirming that the SQLite backend implementation, feature splitting, and Memory backend contract alignment have been generated and verified via local builds and tests.

aidlc · 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

This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.

Score

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

Lenses

  • Code Health 100 → 97 (-2.9)
  • Architecture 95 → 100 (+5.2)
  • Maturity 53 → 77 (+24.4)
  • Readiness 61 → 78 (+17.3)
  • Security 38 → 56 (+17.6)
  • Domain Modelling 100 → 100 (+0.0)

Resolved (15)

  • Change coupling: event_store_for_dynamodb.rs ↔ dynamodb.rs (lib/src/event_store_for_dynamodb.rs)
  • Coverage not included — suite not readable by the collector
  • Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • No exposed public API
  • Off-boarding risk: anonymized user #1
  • Test reliability not included

New (44)

  • Consistent usage of maintenance across all implementations. No inconsistency.
  • Consistent usage of with_delete_ttl across all implementations. No inconsistency.
  • Consistent usage of with_event_serializer across all implementations. No inconsistency.
  • Consistent usage of with_keep_snapshot_count across all implementations. No inconsistency.
  • Consistent usage of with_key_resolver across all implementations. No inconsistency.
  • Consistent usage of with_snapshot_serializer across all implementations. No inconsistency.
  • Duplicated block (12 lines × 2) (lib/src/event_store_for_bigtable.rs)
  • Duplicated block (13 lines × 2) (lib/src/event_store_for_bigtable.rs)
  • Duplicated block (15 lines × 2) (lib/src/event_store_for_dynamodb.rs)
  • Duplicated block (5 lines × 2) (lib/src/event_store_for_sqlite.rs)
  • Duplicated block (58 lines × 2) (test-utils/src/dynamodb.rs)
  • Duplicated block (8 lines × 2) (lib/src/event_store_for_dynamodb.rs)
  • FileTooLong: src/event_store_for_bigtable.rs (lib/src/event_store_for_bigtable.rs)
  • FileTooLong: src/event_store_for_dynamodb.rs (lib/src/event_store_for_dynamodb.rs)
  • High IaC: WD-COMPOSE-0002 (tools/docker-compose.yaml)
  • High IaC: WD-COMPOSE-0002 (tools/docker-compose.yaml)
  • High IaC: WD-COMPOSE-0002 (tools/docker-compose.yaml)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • …and 24 more

Changes since last survey

  • 62 commits — 59 feature/other, 3 fixes

By area

  • lib/src — 18 commits
  • (repo) — 11 commits
  • lib/Cargo.toml — 8 commits
  • (root) — 7 commits
  • .github/workflows — 7 commits
  • aidlc/spaces — 2 commits
  • docs/DATABASE_SCHEMA.ja.md — 2 commits
  • .claude/CLAUDE.md — 1 commit
  • .claude/hooks — 1 commit
  • .claude/knowledge — 1 commit
  • .claude/scopes — 1 commit
  • docs/MIGRATION_GUIDE_v3.ja.md — 1 commit
  • examples/user-account — 1 commit
  • examples/user-account-sqlite — 1 commit

Notable commits

  • fix: fix(sqlite): handle zero snapshot retention and reject zero shard count
  • fix: fix: treat updates on absent aggregates as optimistic lock conflicts
  • fix: test: fix the ContractViolation reason template with a regression test
  • change: BREAKING CHANGE(features): gate backends behind cargo features with empty default
  • change: BREAKING CHANGE(types): replace SDK-leaked error type with neutral OptimisticLockError(String)
  • change: BREAKING CHANGE: replace the Event/Aggregate traits with the EventEnvelope API for v3
  • change: Merge branch 'bolt-1-envelope-core' into feature/v3-event-envelope
  • change: Merge branch 'bolt-2-bigtable-backend' into feature/v3-event-envelope
  • change: Merge branch 'bolt-3-dynamodb-backend' into feature/v3-event-envelope
  • change: Merge branch 'bolt-4-sqlite-backend' into feature/v3-event-envelope
  • change: Merge branch 'bolt-5-release-prep' into feature/v3-event-envelope
  • change: Merge branch 'main' into sqlite
  • change: Merge pull request #224 from j5ik2o/renovate/actions-checkout-7.x
  • change: Merge pull request #227 from j5ik2o/renovate/actions-setup-python-7.x
  • change: Merge pull request #230 from j5ik2o/chore/add-aidlc-assets
  • change: Merge pull request #231 from j5ik2o/sqlite
  • change: Merge pull request #232 from j5ik2o/feature/v3-event-envelope
  • change: chore(aidlc): append review-loop audit entries
  • change: chore(aidlc): record SQLite event-store workflow artifacts
  • change: chore(ci): run library tests with --all-features
  • …and 42 more

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

Survey your own repository

j5ik2o/event-store-adapter-rs 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 98eb30d761dba45599aa05567e4aed6f2d8a3b83 — 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.