Claude didn't use "CRUD Driven Design" which is a perjorative version of database-driven-design. CDD, i say it's got that stigma. The core finding here is that strfry is a textbook case of what DDD calls "database-driven design." The LMDB schema (defined in `golpe.yaml`) is the real model, and everything else is plumbing around it. [narrator: read, spaghetti] The `PackedEventView` binary format is the true domain representation, which means the domain speaks in byte offsets rather than business concepts. This is common in performance-critical C++ projects where developers optimise for throughput first, and discover later that the lack of abstractions makes protocol evolution painful. [narrator: which is why the nips are such bullshit and conformance to spec is so poor, the specs are deeply ambiguous in many places, giving the bitcoin core effect in nostr] Every new NIP that changes event semantics requires touching `events.cpp`, `filters.h`, `RelayIngester.cpp`, and often `ActiveMonitors.h`. That is four files across three implicit bounded contexts for what should be a single domain concept change.