بنقرة واحدة
automation-slice
Generate event-driven automation processors for AUTOMATION slices using Wolverine message handlers
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
Generate event-driven automation processors for AUTOMATION slices using Wolverine message handlers
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
Transform slice definitions from config.json into C# code using Wolverine + Marten (Critter Stack)
Generate commands, events, aggregates, Wolverine HTTP endpoints (POST), and tests for STATE_CHANGE slices
Generate Marten read models, projections, and Wolverine HTTP GET endpoints for STATE_VIEW slices
Generate translators that map external events (from other bounded contexts or systems) into internal domain events using Wolverine handlers
| name | automation-slice |
| description | Generate event-driven automation processors for AUTOMATION slices using Wolverine message handlers |
An AUTOMATION slice contains processors that react to events and trigger commands automatically. Automation processors appear in the processors array of a STATE_CHANGE slice.
Source Event → Wolverine IHandler → IMessageBus.PublishAsync() → Target Command
| Java / Axon | C# / Critter Stack |
|---|---|
@EventHandler + @DisallowReplay | Wolverine handler method (event subscription) |
@ProcessingGroup | Wolverine subscription/routing |
CommandGateway.send() | Return cascaded command from handler |
implements Processor | implements IProcessor |
@DisallowReplay | Wolverine handles replay safety via outbox |
Look at processor dependencies:
Location: <Context>/Slices/<SliceName>/Internal/<ProcessorName>Processor.cs
using SlicingWorkshop.Common;
using SlicingWorkshop.Domain.Commands;
using SlicingWorkshop.Events;
namespace SlicingWorkshop.<Context>.Slices.<SliceName>.Internal;
public class <ProcessorName>Processor : IProcessor
{
// Wolverine discovers this by convention — no attributes needed
public static <TargetCommand> Handle(<SourceEvent> @event)
{
return new <TargetCommand>(
@event.AggregateId
// Map event fields to command fields
);
}
}
When field mapping is needed:
public static <TargetCommand> Handle(<SourceEvent> @event)
{
return new <TargetCommand>(
@event.AggregateId,
UserId: @event.Owner // mapping: owner → userId
);
}
When async or side effects are needed:
public static async Task<<TargetCommand>> Handle(
<SourceEvent> @event,
IDocumentSession session)
{
// Optional: load additional data
return new <TargetCommand>(@event.AggregateId);
}
Location: <Context>/Slices/<SliceName>/Tests/<ProcessorName>ProcessorTests.cs
using SlicingWorkshop.Domain.Commands;
using SlicingWorkshop.Events;
using Xunit;
namespace SlicingWorkshop.<Context>.Slices.<SliceName>.Tests;
public class <ProcessorName>ProcessorTests
{
[Fact]
public void ShouldEmitCommandWhenEventReceived()
{
var aggregateId = Guid.NewGuid();
var @event = new <SourceEvent>(aggregateId);
var result = <ProcessorName>Processor.Handle(@event);
Assert.Equal(aggregateId, result.AggregateId);
}
}
Handle() rather than injecting IMessageBus. Wolverine publishes it transactionally via the outbox.Handle() methods are preferred for pure processors with no dependencies.@DisallowReplay, Wolverine's outbox pattern is safe by default.