# نسخه و پیام «چه چیزی تغییر کرد» هر بار که پنل یا اپ‌ها ساخته می‌شوند، شماره‌ی نسخه **خودش بالا می‌رود**؛ شماره همان تعداد کامیت‌های شاخه است و فایلی برای دستی بالا بردن ندارد. بعد از انتشار، هر کسی که برنامه را باز دارد حداکثر تا ۵ دقیقه، یا همان لحظه‌ای که دوباره به برنامه برمی‌گردد، پنجره‌ی «نسخه‌ی تازه آماده است» را می‌بیند: - فهرست تغییراتِ **همان بخش** نشان داده می‌شود: اپ مشتری تغییرات اپ را می‌بیند و پنل تغییرات پنل را. - پنجره بسته نمی‌شود؛ تنها راه، دکمه‌ی «به‌روزرسانی» است. - با زدن دکمه، حافظه‌ی نهان برنامه پاک و صفحه دوباره بار می‌شود. - ورود کاربر، سبد خرید و تنظیمات **پاک نمی‌شوند**. ## متن تغییرات از کجا می‌آید؟ از پیام کامیت‌ها. متن فنی و انگلیسی **هیچ‌وقت** به کاربر نشان داده نمی‌شود؛ فقط خط‌هایی که با یکی از این برچسب‌ها شروع شوند: | برچسب | کجا نشان داده می‌شود | |---|---| | `اپ:` | هر دو اپ مشتری | | `اپ۱:` | فقط اپ نسخه‌ی ۱ | | `اپ۲:` | فقط اپ نسخه‌ی ۲ | | `پنل:` | پنل مدیریت | نمونه‌ی پیام کامیت: ``` fix(cart): keep the cart when the price refreshes اپ: سبد خرید با به‌روز شدن قیمت دیگر خالی نمی‌شود. پنل: در فهرست سفارش‌ها، تاریخ ثبت دقیق نشان داده می‌شود. ``` ### چطور بنویسیم - برای **کاربر** بنویسید، نه برنامه‌نویس: «چه چیزی برای او فرق کرده». - یک خط کوتاه برای هر تغییر. - کامیتی که کاربر چیزی از آن نمی‌بیند (تمیزکاری، تست، تغییر داخلی) **برچسب نمی‌خواهد**. - اگر در یک انتشار هیچ خطِ برچسب‌داری نباشد، پنجره فقط «بهبودها و رفع اشکال‌ها» را نشان می‌دهد. ## از نظر فنی - `scripts/app-version.mjs` موقع ساخت، شماره و یادداشت‌ها را درمی‌آورد و `version.json` را کنار برنامه می‌گذارد. - `useAppUpdate.ts` در هر برنامه آن فایل را بدون حافظه‌ی نهان می‌خواند و با شماره‌ی خودش مقایسه می‌کند. - تنظیم nginx هر سه برنامه: `index.html`، `sw.js` و `version.json` هرگز در مرورگر نگه داشته نمی‌شوند. پیش‌تر `sw.js` شش ماه نگه داشته می‌شد و می‌توانست مرورگر را روی نسخه‌ی قدیمی نگه دارد.