problem: ستون date نمایشی دستی پر میشد و از لحظهٔ واقعی انتشار جدا میافتاد.
- ستون published_at (timestamptz) + مهاجرت idempotent؛ مقالات منتشرشدهٔ قدیمی
از updated_at عقبگرد پر میشوند
- _apply_publish_timestamp در PUT و PATCH: در گذار draft→published مقدار
published_at ثبت میشود؛ ستون date/date_en فقط اگر خالی باشد از آن پر میشود
(تاریخ درستِ موجود را خراب نمیکند)
- پنل: فیلد «تاریخ انتشار» فقطخواندنی شد (نمایش شمسی؛ پیش از انتشار: «در لحظهٔ
انتشار ثبت میشود»)
- ArticleOut: published_at نمایان شد