Skip to content
CAI
Software that uses CAICheck a score

lucabriguglia/Memoria

53.5

Adequate · 6 October 2026

20k

lines of production code

C#

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 platform built on the Memoria.EventSourcing framework, providing a web interface for managing and visualizing store activities. Recent development has focused on refining the user experience through custom branding, improved navigation, and responsive loading feedback, while simultaneously hardening the underlying event append mechanisms against transient failures. The architecture leverages caching, a message bus, and relational databases to support these projections, with ongoing efforts to expand test coverage and stabilize the seeding and testing infrastructure.

Narrated so far: 2026-09-18 – 2026-09-21; 2 days pending; history before 2026-09-18 not narrated yet; history after 2026-09-21 not narrated yet.

Architecture

  • Container: Cache (cache)
  • Container: Database (database)
  • Container: Message bus (queue)
  • Bounded contexts: Memoria.EventSourcing, Memoria.EventSourcing.Dcb, benchmarks, examples

How it got here

Week 38 of 2026 (14 Sep – 20 Sep) — not summarised yet

  • Added test coverage for auto-refresh preference — Added a test assertion to verify that the preferences page includes the 'auto-refresh' data attribute, ensuring the new auto-refresh feature is correctly rendered in the UI. (tests)
  • Add manual refresh and auto-refresh controls to data pages — Data pages in the Dcb and Streamed sections now include a manual refresh link and an auto-refresh setting. The manual refresh link allows users to reload the current table view without navigating away, while the auto-refresh setting, available in Preferences and on each data page, lets users configure an interval (via RefreshInterval.Offered) for the table to automatically re-query the store. This preference is stored locally and applies across all data pages, with the timer pausing when the tab is hidden and catching up upon visibility return. (src/Memoria.Web)
  • Added tests for home page details, menu ordering, branding, caching, and test infrastructure — This update adds and updates tests to verify specific product behaviors and infrastructure. Tests confirm that the Home page displays store details (such as engine name) under the service name line, and that the menu order places 'Data' before 'Types'. Tests verify that the '/branding/logo' endpoint is publicly accessible and that the overview pages correctly label counts as 'stream types'. Tests for the caching system ensure that totals are kept for the duration specified by the Administrator in the Caching settings. Additionally, test infrastructure was extended to support a configurable clock for time-sensitive assertions and to provide directories for branding and settings configuration. (tests)
  • Custom branding, store activity visibility, and navigation refinements — Administrators can now customize the application header with their own name and logo (or remove them entirely) via the Settings branding tab, and the About page displays the deployment's branded name. The Home page now shows each service's store activity, including the time of the last event and the total event count. Navigation menus have been reordered so that Data appears before Types, and data tables now include anchors to improve keyboard focus and scrolling behavior. Additionally, data rows are marked if they are behind their history, and the About page now links to the Licence and Pricing documentation. (src/Memoria.Web)
  • Event appends now retry on transient failures — The DCB event store now wraps append operations in an execution strategy that automatically retries on transient database failures. This ensures that deployments configured with retry policies (such as \EnableRetryOnFailure\) can successfully append events and snapshots without failing due to connection issues or other temporary errors, while correctly handling transaction boundaries and change tracker state between attempts. (src/Memoria.EventSourcing.Dcb.Store.EntityFrameworkCore)
  • Added tests for event append retries under EF Core execution strategies — Added test coverage to verify that event appends and aggregate saves succeed when the database provider is configured with a retrying execution strategy (simulating cloud database transient failures). The changes include a new SQLite-based test suite that uses a custom \RetryingExecutionStrategy\ and \FailsTheFirstAppendInterceptor\ to simulate transient errors and confirm the append logic retries from the start, as well as updated container tests for SQL Server and PostgreSQL that configure \EnableRetryOnFailure\ to ensure appends work under the providers' native retry strategies. (tests/Memoria.EventSourcing.Dcb.Store.EntityFrameworkCore.Relational.Tests, tests/Memoria.EventSourcing.Store.EntityFrameworkCore.Containers.Tests)
  • Expose internals to test project — The sample project now exposes its internal members to the \Memoria.Web.Samples.Tests\ assembly via \InternalsVisibleTo\, enabling the test suite to access implementation details required for testing menu interactions without a physical keyboard. ((dependencies))
  • Seeding tool now supports repeatable runs with configurable item counts and unique identifiers — The sample data seeding tool now allows users to specify exactly how many items to write, rather than relying on random amounts, and supports running multiple operations in a single session without restarting the tool. To prevent identifier collisions when running the tool repeatedly, identifiers are now generated using a time-based run mark and a per-run counter instead of random four-digit hex strings. The tool also now accepts an Esc key to quit during interactive use. (src/Memoria.Web.Samples)
  • Updated tests to use injected answers instead of console input redirection — The test suite for the sample data scope menu has been refactored to pass answers directly via an \Answers\ collection rather than redirecting \Console.In\. This change simplifies the test setup by removing the need to manage standard input streams and aligns the testing approach with the underlying implementation's shift towards injected dependencies for input handling. (tests/Memoria.Web.Samples.Tests)
  • Simplified caching and improved page navigation — The application now uses a single unified cache for service activity figures, replacing the previous separate caches for counts and recent figures; this is reflected in the Settings page where the configuration is now a single field for how long figures are kept. Additionally, paging behavior has changed so that navigating to a new page scrolls the user to the very top of the page rather than the data table, ensuring context headers remain visible, and a 'Back to Top' link is now available on data pages for easy return. (src/Memoria.Web)
  • Test infrastructure updates for DCB projections and SQLite pool isolation — Added test samples for a DCB read model (SampleSummarisingDcbProjection and SampleSummarisingId) to ensure projection detail pages are testable alongside write models. Replaced global SQLite connection pool clearing with scoped cleanup (SqliteStore.LetGo) to prevent test interference. Added tests for transient network failure retry behavior and updated the test harness to support per-scope reads and configurable store warm-up settings. (tests/Memoria.Web.Tests)

Week 39 of 2026 (21 Sep – 27 Sep) — not summarised yet

  • Improved responsiveness and loading feedback in the web interface — The main navigation bar now folds into a menu on narrow screens to prevent horizontal scrolling, and data pages (DCB and Streamed) use streaming rendering to show a loading indicator immediately while the store responds. Buttons now display a spinner and disable themselves during submission to prevent double-clicks, and tables are wrapped in scrollable containers to keep wide data within the viewport. (src/Memoria.Web)
  • Added tests for markup parsing and store gate interception — Updated the test suite to verify that the header menu item parser excludes the bar-fold control alongside the brand, and introduced a StoreGate mechanism in the test web application factory to allow tests to intercept and hold database store reads during page rendering. (tests)

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

Baseline

  • First survey — no prior run to compare against. CAI 54.

Lenses

  • Code Health 75
  • Architecture 93
  • Maturity 66
  • Readiness 45
  • Security 61
  • Event-Driven 100
  • Performance 52

Changes since last survey

  • 300 commits — 296 feature/other, 4 fixes

By area

  • (root) — 94 commits
  • src/Memoria.Web — 81 commits
  • src/OpenCqrs.EventSourcing.Store.EntityFrameworkCore — 12 commits
  • examples/Memoria.Examples.Ecommerce.Dcb — 10 commits
  • src/Memoria.EventSourcing.Store.EntityFrameworkCore — 10 commits
  • docs/guides — 7 commits
  • src/OpenCqrs.EventSourcing — 7 commits
  • tests/Memoria.Web.Tests — 7 commits
  • .github/workflows — 6 commits
  • docs/Release-Notes.md — 6 commits
  • docs/tools — 5 commits
  • docs/index.md — 4 commits
  • src/OpenCqrs.EventSourcing.Store.Cosmos — 4 commits
  • docs/reference — 3 commits
  • src/Memoria.EventSourcing.Dcb.Store.EntityFrameworkCore — 3 commits
  • src/OpenCqrs — 3 commits
  • tests/Memoria.EventSourcing.Store.EntityFrameworkCore.Containers.Tests — 3 commits
  • docs/Domain-Service.md — 2 commits
  • docs/pricing.md — 2 commits
  • docs/release-notes.md — 2 commits

Notable commits

  • fix: Fix duplicate entry in README for OpenCQRS 7.1.0
  • fix: Fix filter (#185)
  • fix: Fix tests
  • fix: Update version to 7.1.0 in project files and README; fix release date in release notes
  • change: 179 event type versioning (#180)
  • change: 2.0.0-beta (#206)
  • change: Add 'Result pattern' to README features
  • change: Add CLAUDE.md with detailed guidance on repository usage, architecture, and key patterns.
  • change: Add DCB Support (#195)
  • change: Add EventSourcingDB store provider to README
  • change: Add GetAggregate method with read mode to IDomainService
  • change: Add GitHub Actions workflow for Azure deployment
  • change: Add Json tab to aggregate and projection detail pages
  • change: Add Memoria Web Tool (#202)
  • change: Add Projection read model with snapshot persistence (#189)
  • change: Add ReadMode enum
  • change: Add XML documentation for GetAggregate method in IDomainService and implementations
  • change: Add a Json column to every table of events
  • change: Add a Types column to the installed archives table
  • change: Add a View Type pop-up to the aggregate and projection detail pages
  • …and 280 more

API surface

  • 1 HTTP endpoints (baseline)

Architecture

  • 3 containers · 4 bounded contexts · 5 dependency edges (baseline)

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

Survey your own repository

lucabriguglia/Memoria 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 6 October 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit d1a732890ac6be6feaf7e782c0f7c6aa789819e6 — the exact code this score is about.
  • Scored under rubric-2026.10.1 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-1f9c535fa862.