Add Claude Code skills for Eventuous library users#495
Add Claude Code skills for Eventuous library users#495alexeyzimarev wants to merge 1 commit intodevfrom
Conversation
Add a core skill file covering domain model, command services, persistence, subscriptions, and HTTP API patterns, plus infrastructure-specific skill files for KurrentDB, PostgreSQL, MongoDB, SQL Server, RabbitMQ, Kafka, Google Pub/Sub, Azure Service Bus, and Gateway. Uses progressive disclosure so users only load the infrastructure guides relevant to their stack. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Review Summary by QodoAdd Claude Code skill files and CLAUDE.md for Eventuous library users WalkthroughsDescription• Add CLAUDE.md with repository-level guidance for Claude Code contributors • Add core skills/eventuous.md covering domain model, command services, serialization, HTTP API, subscriptions, producers, and DI patterns • Add 9 infrastructure-specific skill files for KurrentDB, PostgreSQL, MongoDB, SQL Server, RabbitMQ, Kafka, Google Pub/Sub, Azure Service Bus, and Gateway • Skill files use progressive disclosure so users load only infrastructure-relevant guides Diagramflowchart LR
CLAUDE["CLAUDE.md\n(repo guidance)"]
core["skills/eventuous.md\n(core skill)"]
kurrentdb["eventuous-kurrentdb.md"]
postgres["eventuous-postgres.md"]
mongodb["eventuous-mongodb.md"]
sqlserver["eventuous-sqlserver.md"]
rabbitmq["eventuous-rabbitmq.md"]
kafka["eventuous-kafka.md"]
pubsub["eventuous-google-pubsub.md"]
azure["eventuous-azure-servicebus.md"]
gateway["eventuous-gateway.md"]
core -- "references" --> kurrentdb
core -- "references" --> postgres
core -- "references" --> mongodb
core -- "references" --> sqlserver
core -- "references" --> rabbitmq
core -- "references" --> kafka
core -- "references" --> pubsub
core -- "references" --> azure
core -- "references" --> gateway
File Changes1. CLAUDE.md
|
Code Review by Qodo
1. RabbitMQ queue override misbind
|
Test Results 57 files 57 suites 33m 4s ⏱️ Results for commit e2959cf. |
| | Property | Type | Default | Description | | ||
| |----------|------|---------|-------------| | ||
| | `Queue` | `string?` | `null` | Queue name; defaults to `SubscriptionId` if null | | ||
| | `Durable` | `bool` | `true` | Survive broker restart | | ||
| | `Exclusive` | `bool` | `false` | Exclusive to this connection | | ||
| | `AutoDelete` | `bool` | `false` | Delete when last consumer disconnects | | ||
| | `Arguments` | `IDictionary<string, object>?` | `null` | Additional queue arguments (e.g., dead-letter exchange) | |
There was a problem hiding this comment.
1. Rabbitmq queue override misbind 🐞 Bug ✓ Correctness
The new RabbitMQ skill file documents overriding the queue name via RabbitMqQueueOptions.Queue, but the implementation binds the exchange to Options.SubscriptionId instead of the resolved queue name, so overriding the queue will break consumption.
Agent Prompt
## Issue description
RabbitMQ subscription declares a queue using `QueueOptions.Queue ?? SubscriptionId`, but binds the exchange to `Options.SubscriptionId` instead of the declared queue. This breaks message delivery when users override the queue name (as suggested by the new skill docs).
## Issue Context
The PR adds docs that encourage using `RabbitMqQueueOptions.Queue` to override the queue name.
## Fix Focus Areas
- src/RabbitMq/src/Eventuous.RabbitMq/Subscriptions/RabbitMqSubscription.cs[115-133]
- skills/eventuous-rabbitmq.md[123-129]
ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools
| Access original context in a custom producer via `ProducedMessageExtensions`: | ||
| ```csharp | ||
| message.GetOriginalStream() | ||
| message.GetOriginalMessage() | ||
| message.GetOriginalMetadata() | ||
| message.GetOriginalStreamPosition() | ||
| message.GetOriginalGlobalPosition() | ||
| message.GetOriginalMessageId() | ||
| message.GetOriginalMessageType() |
There was a problem hiding this comment.
2. Gateway getoriginalstream broken 🐞 Bug ✓ Correctness
The gateway skill file recommends ProducedMessageExtensions.GetOriginalStream(), but the implementation retrieves the header as System.IO.Stream while the gateway stores StreamName, so this method will always return null.
Agent Prompt
## Issue description
`ProducedMessageExtensions.GetOriginalStream()` is effectively unusable: the gateway stores `OriginalStream` as `StreamName`, but the extension retrieves it as `System.IO.Stream`, so it returns null.
## Issue Context
The new gateway skill file explicitly recommends using `message.GetOriginalStream()`.
## Fix Focus Areas
- src/Gateway/src/Eventuous.Gateway/GatewayMetaHelper.cs[15-35]
- src/Core/src/Eventuous.Subscriptions/Context/IMessageConsumeContext.cs[13-33]
- skills/eventuous-gateway.md[193-208]
ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools
Summary
skills/eventuous.md) covering Eventuous domain model, command services (aggregate-based and functional), event serialization, stream naming, HTTP API patterns, subscriptions, producers, and DI registrationeventuous-kurrentdb.md- KurrentDB/EventStoreDB event store, subscriptions, producereventuous-postgres.md- PostgreSQL event store, subscriptions, projectionseventuous-mongodb.md- MongoDB projections and checkpoint storeeventuous-sqlserver.md- SQL Server event store, subscriptionseventuous-rabbitmq.md- RabbitMQ producer and subscriptioneventuous-kafka.md- Kafka producer and subscriptioneventuous-google-pubsub.md- Google Pub/Sub producer and subscriptioneventuous-azure-servicebus.md- Azure Service Bus producer and subscriptioneventuous-gateway.md- Event gateway for cross-context routingCLAUDE.mdwith repository-level instructions for contributorsTest plan
🤖 Generated with Claude Code