acc-event-sourcing-knowledge
Event Sourcing knowledge base. Provides patterns, antipatterns, and PHP-specific guidelines for Event Sourcing architecture audits.
Best use case
acc-event-sourcing-knowledge is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Event Sourcing knowledge base. Provides patterns, antipatterns, and PHP-specific guidelines for Event Sourcing architecture audits.
Teams using acc-event-sourcing-knowledge should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/acc-event-sourcing-knowledge/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How acc-event-sourcing-knowledge Compares
| Feature / Agent | acc-event-sourcing-knowledge | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Event Sourcing knowledge base. Provides patterns, antipatterns, and PHP-specific guidelines for Event Sourcing architecture audits.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# Event Sourcing Knowledge Base
Quick reference for Event Sourcing architecture patterns and PHP implementation guidelines.
## Core Principles
### Event Sourcing Fundamentals
```
Traditional Storage: Event Sourcing:
┌─────────────────┐ ┌─────────────────┐
│ Current State │ │ Event Stream │
│ ───────────── │ │ ───────────── │
│ Order #123 │ │ 1. OrderCreated│
│ Status: Paid │ │ 2. ItemAdded │
│ Total: $150 │ │ 3. ItemAdded │
└─────────────────┘ │ 4. OrderPaid │
↓ └────────┬────────┘
Direct update │
▼
┌─────────────────┐
│ Current State │
│ (Rebuilt from │
│ events) │
└─────────────────┘
```
**Rule:** Store events, derive state. Never modify events.
### Key Concepts
| Concept | Description |
|---------|-------------|
| **Event** | Immutable record of something that happened |
| **Event Store** | Append-only storage for events |
| **Event Stream** | Ordered sequence of events for one aggregate |
| **Aggregate** | Consistency boundary, rebuilt from events |
| **Projection** | Read model built by processing events |
| **Snapshot** | Cached aggregate state for performance |
## Quick Checklists
### Event Checklist
- [ ] Named in past tense (OrderCreated, ItemAdded)
- [ ] Immutable (readonly class)
- [ ] Contains all data needed to apply change
- [ ] Has metadata (timestamp, causation, correlation IDs)
- [ ] No business logic
- [ ] Versioned for schema evolution
### Aggregate Checklist
- [ ] State rebuilt from events only
- [ ] apply*() methods modify state from events
- [ ] record*() methods create and apply events
- [ ] No direct state modification
- [ ] Returns uncommitted events for persistence
### Event Store Checklist
- [ ] Append-only (no updates, no deletes)
- [ ] Ordered within stream
- [ ] Supports optimistic concurrency
- [ ] Events never modified
- [ ] Stream position tracking
### Projection Checklist
- [ ] Idempotent event handlers
- [ ] Can be rebuilt from scratch
- [ ] Handles event ordering
- [ ] Tracks processed position
## Common Violations Quick Reference
| Violation | Where to Look | Severity |
|-----------|---------------|----------|
| Mutable event | Event with setters | Critical |
| Direct state mutation | Aggregate bypassing events | Critical |
| Missing event data | Event without full state info | Critical |
| Event with logic | Event doing calculations | Warning |
| Non-idempotent projection | Projection with side effects | Warning |
| Missing metadata | Event without timestamp/IDs | Warning |
## PHP 8.5 Event Sourcing Patterns
### Domain Event
```php
final readonly class OrderConfirmedEvent
{
public function __construct(
public string $orderId,
public int $totalCents,
public string $currency,
public DateTimeImmutable $confirmedAt,
public EventMetadata $metadata
) {}
}
final readonly class EventMetadata
{
public function __construct(
public string $eventId,
public DateTimeImmutable $occurredAt,
public ?string $causationId = null,
public ?string $correlationId = null,
public int $version = 1
) {}
}
```
### Event-Sourced Aggregate
```php
final class Order extends EventSourcedAggregate
{
private OrderStatus $status;
private Money $total;
public static function create(OrderId $id, CustomerId $customerId): self
{
$order = new self($id);
$order->recordThat(new OrderCreatedEvent(
orderId: $id->value,
customerId: $customerId->value,
createdAt: new DateTimeImmutable()
));
return $order;
}
public function confirm(): void
{
if ($this->status !== OrderStatus::Draft) {
throw new InvalidStateException();
}
$this->recordThat(new OrderConfirmedEvent(
orderId: $this->id->value,
totalCents: $this->total->cents(),
currency: $this->total->currency(),
confirmedAt: new DateTimeImmutable()
));
}
protected function applyOrderCreatedEvent(OrderCreatedEvent $event): void
{
$this->status = OrderStatus::Draft;
$this->total = Money::zero('USD');
}
protected function applyOrderConfirmedEvent(OrderConfirmedEvent $event): void
{
$this->status = OrderStatus::Confirmed;
}
}
```
### Projection
```php
final class OrderListProjection
{
public function __construct(
private Connection $connection
) {}
public function applyOrderCreatedEvent(OrderCreatedEvent $event): void
{
$this->connection->insert('order_list', [
'id' => $event->orderId,
'customer_id' => $event->customerId,
'status' => 'draft',
'created_at' => $event->createdAt->format('Y-m-d H:i:s'),
]);
}
public function applyOrderConfirmedEvent(OrderConfirmedEvent $event): void
{
$this->connection->update('order_list', [
'status' => 'confirmed',
'total_cents' => $event->totalCents,
'confirmed_at' => $event->confirmedAt->format('Y-m-d H:i:s'),
], ['id' => $event->orderId]);
}
}
```
## References
For detailed information, load these reference files:
- `references/event-store-patterns.md` — Event persistence, streams, concurrency
- `references/projection-patterns.md` — Read model projections
- `references/snapshot-patterns.md` — Performance optimization with snapshots
- `references/versioning-patterns.md` — Event schema evolution
- `references/antipatterns.md` — Common violations with detection patternsRelated Skills
acc-outbox-pattern-knowledge
Outbox Pattern knowledge base. Provides patterns, antipatterns, and PHP-specific guidelines for transactional outbox, polling publisher, and reliable messaging audits.
synthetic-event-system-internals
Leverage React's event delegation system for optimization and custom event behavior.
notion-knowledge-capture
Transforms conversations and discussions into structured documentation pages in Notion. Captures insights, decisions, and knowledge from chat context, formats appropriately, and saves to wikis or databases with proper organization and linking for easy discovery.
newsletter-events-write
Generate markdown newsletters from stored events. Use when the user wants to create, write, or generate a newsletter from scraped events.
knowledge-synthesis
知识合成 — 将多来源信息融合为结构化知识,生成摘要、报告和知识图谱
generate-knowledge-base
Generate a product knowledge base from a codebase. Analyzes source code to create an Obsidian vault with architecture docs, API references, domain logic, data models, and infrastructure documentation. Use when the user asks to document a codebase, create a knowledge base, or generate product docs.
enterprise-search-knowledge-synthesis
Combines search results from multiple sources into coherent, deduplicated answers with source attribution. Handles confidence scoring based on freshness and authority, and summarizes large result sets effectively.
azure-eventhub-ts
Build event streaming applications using Azure Event Hubs SDK for JavaScript (@azure/event-hubs). Use when implementing high-throughput event ingestion, real-time analytics, IoT telemetry, or event...
azure-eventhub-java
Build real-time streaming applications with Azure Event Hubs SDK for Java. Use when implementing event streaming, high-throughput data ingestion, or building event-driven architectures.
azure-eventgrid-java
Build event-driven applications with Azure Event Grid SDK for Java. Use when publishing events, implementing pub/sub patterns, or integrating with Azure services via events.
azure-eventgrid-dotnet
Azure Event Grid SDK for .NET. Client library for publishing and consuming events with Azure Event Grid. Use for event-driven architectures, pub/sub messaging, CloudEvents, and EventGridEvents.
adding-persistent-event
Adds a new type of event that gets persisted to the event log. Use this when adding new kinds of write operations to the system or when adding new events to existing code.