One Writer, Two Views
Concurrency becomes tractable when one engine owns all lifecycle mutations. CLIs and UIs submit intentions; they do not append event files or edit database rows directly. The writer serializes claim, stage, review, pipeline, and landing transitions against one current state.
Append-only records and SQLite serve different jobs. The event stream is ground truth about what happened and in what order. SQLite projects current rows and relationships for fast queries. Treating both as independent writers creates reconciliation problems the workshop cannot audit from inside itself.
A mirror must be rebuildable. Start from an empty database, replay canonical events and durable declarations, and recover the same current state. This test exposes hidden state that slipped into ad hoc SQL updates without an event or canonical source.
Operationally, the mirror may lag or need repair. Health should report that condition explicitly. The safe response is rebuild or reconcile from truth, not write a compensating event that pretends the original history was different.
Query Fast, Explain Forever
Use SQLite for queue screens, counts, and joins; use the event stream when answering why a state exists. The projection optimizes reading without becoming a second authority.
A periodic rebuild test is more than disaster recovery. It is an architecture test that every meaningful mutation has one canonical representation.