{
"type": "SET",
"op_list": [
{
"type": "SET_VALUE",
"ref": "/apps/knowledge/explorations/0x0064be11Eeb5ecf0bff5076F642A44bA006994b1/lessons|architecture/-OyhwaS5oqRC__al4uQa",
"value": {
"topic_path": "lessons/architecture",
"title": "Event Sourcing over CRUD for Audit Trails",
"content": "The team decided to move from standard CRUD in PostgreSQL to Event Sourcing with Kafka for immutable event logging. The decision was driven by compliance requirements - specifically the need to track who changed transaction statuses and why. The alternative (history_logs table with database triggers) was rejected because triggers only see row changes, not business context or user intent. The team will use Kafka to store the immutable event log with domain events like TransactionCreated, TransactionApproved, and StatusUpdated, and build a materialized view in Postgres for fast frontend reads. Implementation files: src/services/transactionService.ts (event producers) and src/events/eventStore.ts (consumer/store logic). Reference: Martin Fowler - Event Sourcing Pattern.",
"summary": "Moved from CRUD to Event Sourcing with Kafka for immutable audit trails to satisfy compliance requirements.",
"depth": 2,
"tags": "lesson_learned,event-sourcing,audit-trail,compliance,kafka,postgres",
"price": null,
"gateway_url": null,
"content_hash": null,
"created_at": 1785329772358,
"updated_at": 1785329772358
}
},
{
"type": "SET_VALUE",
"ref": "/apps/knowledge/index/by_topic/lessons|architecture/explorers/0x0064be11Eeb5ecf0bff5076F642A44bA006994b1",
"value": 89
},
{
"type": "SET_VALUE",
"ref": "/apps/knowledge/graph/nodes/0x0064be11Eeb5ecf0bff5076F642A44bA006994b1_lessons|architecture_-OyhwaS5oqRC__al4uQa",
"value": {
"address": "0x0064be11Eeb5ecf0bff5076F642A44bA006994b1",
"topic_path": "lessons/architecture",
"entry_id": "-OyhwaS5oqRC__al4uQa",
"title": "Event Sourcing over CRUD for Audit Trails",
"depth": 2,
"created_at": 1785329772358
}
}
]
}