Move persistence to Postgres and messaging to durable Wolverine - #32
Merged
Conversation
DR-009 data + messaging foundation (the "5a" slice — agents come in 5b). Persistence → Postgres: - AppHost provisions Postgres via Aspire (AddPostgres + AddDatabase); the API references it and gets the connection string injected. - Infrastructure defaults to the Npgsql provider (provider abstraction kept: postgres | sqlite | mssql swappable by config). EF Core bumped 10.0.3 → 10.0.4 (Npgsql 10.0.3 floor). Regenerated the EF migration for Postgres (uuid/timestamptz); dropped the old SQLite migration. Design-time factory switched to Npgsql. The API runs migrations at startup. Messaging → durable Wolverine: - Wolverine persists messages with Postgres (durable local queues) — DR-009's Postgres-transport-default; RabbitMQ remains an opt-in swap. Remove the dead TickerQ pipeline (~1030 LOC, verified unwired): - Deleted Jobs/* (minus the wired FileNamingService) + BackgroundServices/* — the old TickerQ-attributed download/catalog pipeline, superseded by DR-009 (agents + Wolverine) and referenced by nothing. Dropped all TickerQ packages. Salvage the ffmpeg/download logic from git history for the Downloader agent (5b). - The no-op TickerQDownloadQueue → NullDownloadQueue placeholder (real Wolverine download messaging lands with the Downloader agent). Builds green; 62 tests pass (incl. the ArchUnitNET layering tests). Runtime against a live Postgres is exercised when the Aspire fleet runs (not in CI, which builds + tests). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The DR-009 data + messaging foundation — "5a" of increment #5. Agents (crawlers + downloader) are the follow-up (5b).
Persistence → Postgres
AddPostgres+AddDatabase); the API references it and gets the connection string injected.postgres | sqlite | mssql, swap by config). EF Core bumped10.0.3 → 10.0.4(Npgsql 10.0.3's floor).timestamp with time zone); dropped the old SQLite migration; design-time factory → Npgsql. API runs migrations at startup.Messaging → durable Wolverine
Removed the dead TickerQ pipeline (~1030 LOC, verified unwired)
Jobs/*(minus the wiredFileNamingService) +BackgroundServices/*— the old[TickerFunction]download/catalog pipeline, referenced by nothing (AddTickerQJobswas commented out) and superseded by DR-009. All TickerQ packages dropped.playgroundfor the Downloader agent (5b).TickerQDownloadQueue→NullDownloadQueueplaceholder (real Wolverine download messaging lands with the Downloader agent).Verified
Builds green; 62 tests pass (incl. the ArchUnitNET layering tests — the hexagon still holds). Runtime against a live Postgres is exercised when the Aspire fleet runs locally (Docker) — CI builds + tests, it doesn't spin the fleet.
Next (5b)
Create
Presentation/Agents/{Ard,Zdf,Downloader}hosts (eachWithReference(db)+ Wolverine), then port the crawler logic intoApplication/Crawlingslices.