A polemic response to Brandon Weaver's 'Callbacks Are Not Invariants' post, agreeing on the diagnosis (Rails callbacks are problematic) but disputing the cure. The author argues that Weaver's Command/Transaction Script pattern still spreads the invariant across multiple layers (runtime check, row lock, DB constraint) rather than giving it a single owner. The proposed alternative uses an aggregate model where the domain object owns the invariant, produces a typed domain event (past tense, result payload), and persists that event atomically in the same transaction as the state change — making effects always replayable. The author also critiques Weaver's naming: calling a Transaction Script a 'command' and ActiveSupport::Notifications a 'domain event' installs a misleading mental model for large teams. The post demonstrates both a bare ActiveRecord implementation and a RailsEventStore version, and argues that persisting domain facts from day one is record-path hygiene, not event sourcing overkill.