ワンクリックで
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.