TimestampMixin (created_at) + UpdatedAtMixin (updated_at) replace the repeated column blocks across 9 + 3 models. Models that index created_at or default it Python-side keep their own column on purpose. Verified zero schema drift via an identical alembic-check diff before/after.