Files
git.stella-ops.org/docs/features/unchecked/findings/ledger-projections.md

2.4 KiB

Ledger Projections

Module

Findings

Status

IMPLEMENTED

Description

Projection worker that materializes event streams into queryable read models.

Implementation Details

  • Ledger Projection Worker: src/Findings/StellaOps.Findings.Ledger/Infrastructure/Projection/LedgerProjectionWorker.cs -- background worker that consumes ledger event streams and materializes them into queryable projection read models.
  • Ledger Projection Reducer: src/Findings/StellaOps.Findings.Ledger/Services/LedgerProjectionReducer.cs -- reduces event sequences into projection state, applying each event to build the current finding state from its event history.
  • Projection Models: src/Findings/StellaOps.Findings.Ledger/Domain/ProjectionModels.cs -- read-side projection models materialized from events (finding state, VEX status, scoring state).
  • Projection Hashing: src/Findings/StellaOps.Findings.Ledger/Hashing/ProjectionHashing.cs -- computes deterministic hashes of projection state for consistency verification between replays.
  • Finding Projection Repository Interface: src/Findings/StellaOps.Findings.Ledger/Infrastructure/IFindingProjectionRepository.cs -- persistence contract for materialized projections.
  • Postgres Finding Projection Repository: src/Findings/StellaOps.Findings.Ledger/Infrastructure/Postgres/PostgresFindingProjectionRepository.cs -- PostgreSQL persistence for projection read models.
  • Tests: src/Findings/__Tests/StellaOps.Findings.Ledger.Tests/LedgerProjectionReducerTests.cs, src/Findings/StellaOps.Findings.Ledger.Tests/ProjectionHashingTests.cs

E2E Test Plan

  • Submit a sequence of finding events (create, update VEX, add attestation) and verify the projection worker materializes the final finding state with correct VEX status and attestation references
  • Verify projection consistency: replay the same event sequence twice and confirm the projection hashes match (deterministic projection)
  • Verify projection catch-up: stop the projection worker, submit events, restart the worker, and confirm it processes all missed events and reaches the correct state
  • Verify the projection reducer correctly handles out-of-order event delivery by ordering events by sequence number before applying
  • Query the materialized projection via the finding query endpoints and verify the response matches the expected state from the event history