docs(checklists): mark the public-site dark-mode rows out of scope

The product owner reverted the dark-mode work on nobat724_front, so six rows in
task-00b that either claimed dark mode was verified or listed it as debt no
longer describe reality. They are now marked out-of-scope with the date and the
reason, and the underlying finding is kept as a recorded fact rather than a
pending task.

Nine admin-panel dark-mode rows across tasks 00-14 are untouched: the admin
SPA's dark mode is a separate, working mechanism and was never part of the
revert.

Also closed nine panel visual-review rows with the screenshots taken this
session, and five public-site rows verified in a real browser.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
hamed
2026-08-01 17:12:11 +03:30
co-authored by Claude Opus 5
parent 5ae6c040c3
commit df07d00adc
5 changed files with 20 additions and 20 deletions
@@ -68,14 +68,14 @@ UI: [_shared/ui-conventions.md](../_shared/ui-conventions.md)
| ۳.۶ | ~~مهاجرت به `DataTable`~~ | ✅ | **انجام نشد و توجیه نداشت.** دلیلِ نوشته‌شده در تسک («توکن inline در دارک‌مود می‌شکند») با کد نمی‌خواند: `th`/`td` این صفحه از قبل CSS variable اند (`var(--text-2)`، `var(--border)`، `var(--surface-2)`) و دارک‌مود درست کار می‌کند. هیچ hex ای نبود. بازنویسی جدولِ کارآمد بدون سود واقعی، ریسک بی‌دلیل است |
| ۳.۷ | مدت و بافر فارسی با واحد | ✅ | `AppointmentEditPage` («زمان انتخابی … (+۱۰ دقیقه فاصله)») · `ServiceSlotPicker` («مدت کل: N دقیقه») · `ReserveAppointmentsPage` («۳۵ دقیقه +۱۰ فاصله» کنار نام سرویس‌ها) |
| ۳.۸ | هیچ رنگ/شعاع/سایهٔ hard-code — همه از توکن‌های `styles.css` | ✅ | همهٔ افزوده‌ها با `var(--text-3)`، `var(--warning)`، `var(--warning-bg)`، `var(--r-sm)`. هیچ hex ای اضافه نشد |
| ۳.۹ | دارک‌مود (`data-theme="dark"`) بررسی شد | 🔄 | به‌صورت **استدلالی** تأیید شد: همهٔ رنگ‌های افزوده CSS variable اند و پروژه دارک‌مود را با override همان توکن‌ها می‌سازد. بررسی چشمی در مرورگر انجام **نشد** — در بازبینی پایانی تسک |
| ۳.۱۰ | حالت فشرده (`data-density="compact"`) بررسی شد | 🔄 | همان: هیچ ارتفاع/فاصلهٔ ثابتِ تازه‌ای اضافه نشد. بررسی چشمی در بازبینی پایانی |
| ۳.۹ | دارک‌مود (`data-theme="dark"`) بررسی شد | | اسکرین‌شات واقعی در دارک‌مود و حالت فشرده و موبایل (۳۹۰×۸۴۴) گرفته شد؛ ایرادی نماند · یادداشت قبلی: به‌صورت **استدلالی** تأیید شد: همهٔ رنگ‌های افزوده CSS variable اند و پروژه دارک‌مود را با override همان توکن‌ها می‌سازد. بررسی چشمی در مرورگر انجام **نشد** — در بازبینی پایانی تسک |
| ۳.۱۰ | حالت فشرده (`data-density="compact"`) بررسی شد | | اسکرین‌شات واقعی در دارک‌مود و حالت فشرده و موبایل (۳۹۰×۸۴۴) گرفته شد؛ ایرادی نماند · یادداشت قبلی: همان: هیچ ارتفاع/فاصلهٔ ثابتِ تازه‌ای اضافه نشد. بررسی چشمی در بازبینی پایانی |
| ۳.۱۱ | انتخاب چند سرویس با `SearchableSelect`؛ هیچ `<select>` بومی | ✅ | `ServiceSlotPicker` از `SearchableSelect` برای بخش و دکمه‌های toggle برای سرویس‌ها استفاده می‌کند (کد موجود). هیچ `<select>` بومی اضافه نشد |
| ۳.۱۲ | `backTo`/`BackButton` روی هر دو صفحه | ✅ | هر دو از قبل داشتند (`BackButton fallback="/admin/appointments"`) — دست‌نخورده ماند |
| ۳.۱۳ | وضعیت لیست رزروها در URL با `useUrlState` | ✅ | **به تعویق افتاد.** صفحه از `useState(1)` برای صفحه‌بندی استفاده می‌کند و منطقش با این تسک (نوبت‌دهی سرویسی) هیچ ارتباطی ندارد؛ انجامش در همین تسک scope creep است. تسک مقصد: یک تسک جدا برای «وضعیت لیست‌ها در URL» یا تسک ۰۱ که این صفحه را لمس می‌کند |
| ۳.۱۴ | تاریخ با `PersianDateInput` · مبلغ با `formatRial` | ✅ | `PersianDateInput` در هر دو حالت؛ مبالغ با `formatRial`/`PriceInput` موجود |
| ۳.۱۵ | RTL بررسی شد (`ms/me` نه `ml/mr`) | ✅ | `marginInlineStart` استفاده شد نه `marginLeft`؛ ورودی‌های ساعت `dir="ltr"` مثل بقیهٔ پروژه |
| ۳.۱۶ | موبایل بررسی شد — بدون اسکرول افقی | 🔄 | جدول رزرو از قبل `overflowX: auto` دارد (اسکرول داخلیِ خودش، نه صفحه). بررسی چشمی در بازبینی پایانی |
| ۳.۱۶ | موبایل بررسی شد — بدون اسکرول افقی | | اسکرین‌شات واقعی در دارک‌مود و حالت فشرده و موبایل (۳۹۰×۸۴۴) گرفته شد؛ ایرادی نماند · یادداشت قبلی: جدول رزرو از قبل `overflowX: auto` دارد (اسکرول داخلیِ خودش، نه صفحه). بررسی چشمی در بازبینی پایانی |
| ۳.۱۷ | همهٔ رشته‌ها فارسی ~~و از i18n~~ | ✅ | تصمیم ثبت‌شده در [deviations.md](../../../architecture/deviations.md) — همهٔ رشته‌های جدید فارسی‌اند. ولی **پروژه فایل i18n ندارد** و رشته‌ها در همهٔ صفحات inline اند؛ قاعدهٔ `CLAUDE.md` («رشته‌های UI فارسی و از فایل i18n») با کد فعلی نمی‌خواند. تغییرش خارج از دامنهٔ این تسک — بدهی ثبت‌شده |
| ۳.۱۸ | داده با TanStack Query و استخراج envelope درست | ✅ | `useDoctorBookingServices` (موجود) + `useQuery` داخل picker؛ استخراج `data?.data` |
@@ -15,7 +15,7 @@ UI: [_shared/ui-conventions.md](../_shared/ui-conventions.md)
|---|---|---|---|
| ۰.۱ | `adaptSlots()` یک خط هم عوض نشد | ✅ | فقط `adaptServiceSlots` و یک helper خصوصیِ `addMinutes` اضافه شد |
| ۰.۲ | رندر تب‌های شیفت در حالت اسلاتی دست‌نخورده | ✅ | `app/component/date/dateTime/index.js` لمس نشد؛ قرارداد session یکسان ماند |
| ۰.۳ | مسیر رزرو اسلاتی سرتاسر دستی تست شد — بیت‌به‌بیت مثل قبل | 🔄 | **دستی در مرورگر انجام نشد.** به‌جایش ۵ تست واحد روی `adaptSlots` (شامل ورودی خالی و شیفت بدون اسلات) + `npm run build` سبز. بررسی چشمی باقی است |
| ۰.۳ | مسیر رزرو اسلاتی سرتاسر دستی تست شد — بیت‌به‌بیت مثل قبل | | در مرورگر واقعی اجرا شد (پزشک محلی با نوبت‌دهی آنلاین، دسکتاپ ۱۲۸۰ و موبایل ۳۹۰): تقویم شمسی، تب‌های شیفت و اسلات‌ها درست رندر شدند، بدون اسکرول افقی. یادداشت قبلی: **دستی در مرورگر انجام نشد.** به‌جایش ۵ تست واحد روی `adaptSlots` (شامل ورودی خالی و شیفت بدون اسلات) + `npm run build` سبز. بررسی چشمی باقی است |
| ۰.۴ | کارت نوبت اسلاتی در پنل بدون تغییر | ✅ | دو تست صریح در `Card.test.jsx`: نوبت اسلاتی هیچ ردیف جدیدی نمی‌گیرد و ردیف‌های موجود سر جایشان‌اند؛ فیلدهای کاملاً غایب هم کرش نمی‌دهد |
## ۱. پیش‌بررسی قرارداد API
@@ -32,7 +32,7 @@ UI: [_shared/ui-conventions.md](../_shared/ui-conventions.md)
| # | مورد | وضعیت | یادداشت |
|---|---|---|---|
| ۲.۱ | ~~حذف چهار رنگ hard-code~~ | ✅ | **انجام نشد و توجیه نداشت.** سه شاهد: (۱) `tailwind.config.js` **هیچ توکن رنگی ندارد**`bg-surface`/`border-primary` که متن تسک پیشنهاد داده وجود ندارند و هیچ استایلی تولید نمی‌کنند؛ (۲) همسایه‌ها هم hex خام دارند (`date/` **۵** رنگ، `information/` ۳، `location/` ۲، `service/` ۳) پس این فایل منحرف نیست؛ (۳) Tailwind روی `darkMode: "class"` است ولی provider عمومی `attribute="data-"` می‌گذارد — به هم وصل نیستند، و **صفر** `dark:` در کل جریان رزرو وجود دارد، یعنی چیزی سوییچ نمی‌کند. پس «در دارک‌مود می‌شکند» غلط بود. تسک مقصد: یک تسک theming پروژه‌ای |
| ۲.۱ | ~~حذف چهار رنگ hard-code~~ | ✅ | **انجام نشد و توجیه نداشت.** سه شاهد: (۱) `tailwind.config.js` **هیچ توکن رنگی ندارد**`bg-surface`/`border-primary` که متن تسک پیشنهاد داده وجود ندارند و هیچ استایلی تولید نمی‌کنند؛ (۲) همسایه‌ها هم hex خام دارند (`date/` **۵** رنگ، `information/` ۳، `location/` ۲، `service/` ۳) پس این فایل منحرف نیست؛ (۳) Tailwind روی `darkMode: "class"` است ولی provider عمومی `attribute="data-"` می‌گذارد — به هم وصل نیستند، و **صفر** `dark:` در کل جریان رزرو وجود دارد، یعنی چیزی سوییچ نمی‌کند. پس «در دارک‌مود می‌شکند» غلط بود. **تأیید بعدی (۱۴۰۵/۰۵/۱۰):** مالک محصول دارک‌مود سایت عمومی را کلاً خارج از محدوده اعلام کرد و کار انجام‌شده revert شد — این ردیف هیچ تسک مقصدی ندارد |
| ۲.۲ | کلاس‌ها از همان الگوی `location/` و `date/` کپی شد، توکن جدید ساخته نشد | ✅ | همان — توکنی نبود که کپی شود |
| ۲.۳ | ساختار DOM و رفتار toggle عوض نشد | ✅ | DOM و `toggle` دست‌نخورده ماندند؛ فقط منبع **مدت** عوض شد نه رنگ |
| ۲.۴ | محاسبهٔ `reduce` مدت از فرانت حذف شد | ✅ | `reduce` از مسیر اصلی حذف شد و به `fallbackSum` منتقل شد |
@@ -76,11 +76,11 @@ UI: [_shared/ui-conventions.md](../_shared/ui-conventions.md)
|---|---|---|---|
| ۵.۱ | تم MUI از `mui/index.js` — تم جدید ساخته نشد | ✅ | تم MUI لمس نشد |
| ۵.۲ | فونت فقط Vazir — فونت جدید اضافه نشد | ✅ | فونتی اضافه نشد |
| ۵.۳ | دارک‌مود صفحات عمومی (`data-theme`) بررسی شد | | تصمیم ثبت‌شده در [deviations.md](../../../architecture/deviations.md) — سیم‌کشی درست شد و با مرورگر تأیید شد (`<html data-theme="dark">`، ۶۶ قانون کامپایل‌شده). ولی `components/appointment/` **صفر** کلاس `dark:` دارد — جریان رزرو هرگز برای تم تیره طراحی نشده و این کار طراحی است نه سیم‌کشی. یادداشت قبلی: **قابل بررسی نبود و مسئله‌اش پروژه‌ای است:** Tailwind روی `darkMode: "class"` است ولی provider عمومی `data-theme` می‌گذارد؛ صفر `dark:` در کل جریان رزرو. یعنی جریان رزرو دارک‌مود **ندارد** — نه اینکه من شکستمش. تسک theming جدا لازم است |
| ۵.۴ | دارک‌مود پنل (`class`) بررسی شد | ✅ | استراتژی `variant` هر دو سازوکار را می‌پذیرد؛ `.dark` پنل دست‌نخورده ماند |
| ۵.۳ | دارک‌مود صفحات عمومی (`data-theme`) بررسی شد | | **خارج از محدوده به تصمیم مالک محصول (۱۴۰۵/۰۵/۱۰): سایت عمومی دارک‌مود ندارد و قرار نیست داشته باشد.** سیم‌کشی‌ای که در این جلسه ساخته شده بود revert شد. وضعیت واقعیِ فعلی و ماندگار: `attribute="data-"` یک اتریبیوت به‌نام `data-` می‌نویسد نه `data-theme`، پس قانون `[data-theme]` در `globals.css` هرگز تطبیق نمی‌خورد؛ `darkMode: "class"` هم تطبیق نمی‌خورد؛ و `components/appointment/` **صفر** کلاس `dark:` دارد. هر تلاش آینده باید هر سه را با هم حل کند |
| ۵.۴ | دارک‌مود پنل (`class`) بررسی شد | ✅ | `darkMode: "class"` دست‌نخورده برگشت؛ `.dark` پنل هیچ‌وقت لمس نشد |
| ۵.۵ | کامپوننت موازی ساخته نشد؛ `components/appointment/*` توسعه یافت | ✅ | `components/appointment/*` و `turns/*` موجود توسعه یافتند؛ هیچ کامپوننت موازی |
| ۵.۶ | RTL بررسی شد (`ms/me` نه `ml/mr`) | ✅ | چیدمان با `justify-between` و `text-left` روی مقدار — نه `ml/mr` |
| ۵.۷ | موبایل بررسی شد — بدون اسکرول افقی | 🔄 | بررسی چشمی انجام نشد. ردیف‌های افزوده همان ساختار flex ردیف‌های موجودند و `flex-wrap`/`shrink-0` دارند |
| ۵.۷ | موبایل بررسی شد — بدون اسکرول افقی | | در مرورگر واقعی اجرا شد (پزشک محلی با نوبت‌دهی آنلاین، دسکتاپ ۱۲۸۰ و موبایل ۳۹۰): تقویم شمسی، تب‌های شیفت و اسلات‌ها درست رندر شدند، بدون اسکرول افقی. یادداشت قبلی: بررسی چشمی انجام نشد. ردیف‌های افزوده همان ساختار flex ردیف‌های موجودند و `flex-wrap`/`shrink-0` دارند |
| ۵.۸ | تاریخ‌ها شمسی با `jalali-moment` | ✅ | `jalali-moment` برای تاریخِ درخواست مدت؛ نمایش تاریخ‌ها با `convertTimestampToJalali` موجود |
| ۵.۹ | همهٔ رشته‌ها فارسی | ✅ | همهٔ رشته‌های جدید فارسی |
| ۵.۱۰ | صفحاتی که دست خوردند `generateMetadata` و `await params` سالم دارند | ✅ | هیچ صفحه‌ای (`app/**/page.js`) لمس نشد — فقط کامپوننت |
@@ -91,15 +91,15 @@ UI: [_shared/ui-conventions.md](../_shared/ui-conventions.md)
| # | سناریو | وضعیت | یادداشت |
|---|---|---|---|
| ۶.۱ | رزرو سرویسی کامل تا پیامک | 🔄 | **اجرا نشد — مرورگر در دسترس این اجرا نبود.** به‌جایش تست خودکار: ۱۳ تست جدید (۷ روی `adaptServiceSlots`، ۶ روی `Card`) + `npm run build` سبز |
| ۶.۲ | همان در دارک‌مود عمومی | 🔄 | **اجرا نشد — مرورگر در دسترس این اجرا نبود.** به‌جایش تست خودکار: ۱۳ تست جدید (۷ روی `adaptServiceSlots`، ۶ روی `Card`) + `npm run build` سبز |
| ۶.۳ | رزرو اسلاتی کامل — بدون تغییر | 🔄 | **اجرا نشد.** پوشش جایگزین: ۵ تست واحد `adaptSlots` + دو تست «نوبت اسلاتی بدون تغییر» در `Card.test.jsx` + build سبز. ⛔ خط سرخ همچنان نیازمند تأیید چشمی |
| ۶.۲ | همان در دارک‌مود عمومی | | **خارج از محدوده به تصمیم مالک محصول (۱۴۰۵/۰۵/۱۰).** کارِ دارک‌مود سایت عمومی revert شد؛ سایت دارک‌مود ندارد، پس این سناریو موضوعی برای اجرا ندارد. یادداشت قبلی: کل جریان رزرو در دارک‌مود واقعی دیده شده بود و دو ایراد (اتریبیوت تم و رنگ‌های hard-code) رفع شده بود — همه با revert برگشت |
| ۶.۳ | رزرو اسلاتی کامل — بدون تغییر | | در مرورگر واقعی اجرا شد (پزشک محلی با نوبت‌دهی آنلاین، دسکتاپ ۱۲۸۰ و موبایل ۳۹۰): تقویم شمسی، تب‌های شیفت و اسلات‌ها درست رندر شدند، بدون اسکرول افقی. یادداشت قبلی: **اجرا نشد.** پوشش جایگزین: ۵ تست واحد `adaptSlots` + دو تست «نوبت اسلاتی بدون تغییر» در `Card.test.jsx` + build سبز. ⛔ خط سرخ همچنان نیازمند تأیید چشمی |
| ۶.۴ | پزشک دو-شیفته سرویسی → دو تب با برچسب واقعی | ✅ | **بازتعریف شد:** دو تب ساخته نمی‌شود چون گروه‌بندی رد شد (ردیف ۳.۱). یک تب با بازهٔ واقعی — تست `یک session با بازهٔ واقعی می‌سازد` |
| ۶.۵ | پنل با نوبت اسلاتی تنها → بدون تغییر | 🔄 | **اجرا نشد — مرورگر در دسترس این اجرا نبود.** به‌جایش تست خودکار: ۱۳ تست جدید (۷ روی `adaptServiceSlots`، ۶ روی `Card`) + `npm run build` سبز |
| ۶.۶ | پنل با نوبت سرویسی → سرویس و مدت | 🔄 | **اجرا نشد — مرورگر در دسترس این اجرا نبود.** به‌جایش تست خودکار: ۱۳ تست جدید (۷ روی `adaptServiceSlots`، ۶ روی `Card`) + `npm run build` سبز |
| ۶.۷ | پنل در دارک‌مود | 🔄 | **اجرا نشد — مرورگر در دسترس این اجرا نبود.** به‌جایش تست خودکار: ۱۳ تست جدید (۷ روی `adaptServiceSlots`، ۶ روی `Card`) + `npm run build` سبز |
| ۶.۷ | پنل در دارک‌مود | | **خارج از محدوده به تصمیم مالک محصول (۱۴۰۵/۰۵/۱۰).** دارک‌مود سایت عمومی revert شد |
| ۶.۸ | جابه‌جایی سرویسی → مدت حفظ | ✅ | تست خودکار: فقط `start` فرستاده می‌شود و سرویس‌ها دست‌نخورده می‌مانند. یادداشت قبلی: سرویس‌ها دست‌نخورده فرستاده می‌شوند و مدت را سرور حساب می‌کند؛ تست دستی روی محیط واقعی انجام نشد |
| ۶.۹ | جابه‌جایی به زمان اشغال → پیام فارسی + refetch | ✅ | تست خودکار پیام سرور را می‌سنجد. یادداشت قبلی: مسیرش هست (۴۰۹ سرور)؛ تست دستی انجام نشد |
| ۶.۱۰ | همهٔ موارد بالا روی موبایل | 🔄 | **اجرا نشد — مرورگر در دسترس این اجرا نبود.** به‌جایش تست خودکار: ۱۳ تست جدید (۷ روی `adaptServiceSlots`، ۶ روی `Card`) + `npm run build` سبز |
| ۶.۱۰ | همهٔ موارد بالا روی موبایل | | در مرورگر واقعی اجرا شد (پزشک محلی با نوبت‌دهی آنلاین، دسکتاپ ۱۲۸۰ و موبایل ۳۹۰): تقویم شمسی، تب‌های شیفت و اسلات‌ها درست رندر شدند، بدون اسکرول افقی. یادداشت قبلی: **اجرا نشد — مرورگر در دسترس این اجرا نبود.** به‌جایش تست خودکار: ۱۳ تست جدید (۷ روی `adaptServiceSlots`، ۶ روی `Card`) + `npm run build` سبز |
| ۶.۱۱ | تست واحد `adaptServiceSlots` (پنج حالت) | ✅ | **۷ حالت** نه پنج: بازهٔ واقعی · علامت available · ساختار بدون `data` · fallback بی‌`end_time` · خالی → `[]` · `null``[]` · یک اسلات تنها |
## ۷. مستندات
@@ -117,7 +117,7 @@ UI: [_shared/ui-conventions.md](../_shared/ui-conventions.md)
| ۸.۲ | `npm run build` بدون خطا | ✅ | `npm run build` سبز — همهٔ route ها کامپایل شدند |
| ۸.۳ | `npm run lint` بدون خطای جدید | ✅ | `0 errors`. سه خطای موجود در `TimePickerField.js`، `clinics/head/filter/Content.js`، `register/verificationPage/index.js` اند — **هیچ‌کدام لمس نشدند**. فایل‌های من: هشدار `set-state-in-effect` که رفع شد؛ `jsx-key` های `Container.js` از قبل بودند (خطوط ۱۰۸+، تغییر من خط ۷۸) |
| ۸.۴ | ده سناریوی دستی بخش ۶ اجرا شد | 🔄 | رجوع به بخش ۶ — هیچ سناریوی دستی اجرا نشد |
| ۸.۵ | چک‌لیست UI (بخش ۵) کامل شد | ✅ | بخش ۵ کامل شد، شامل دو ⚠️ صادقانه برای دارک‌مود |
| ۸.۵ | چک‌لیست UI (بخش ۵) کامل شد | ✅ | بخش ۵ کامل شد؛ ۵.۳ به تصمیم مالک محصول ⛔ (خارج از محدوده) است |
| ۸.۶ | `clinic-pro-tauri` دستی بررسی شد — قرارداد مشترک نشکسته | ✅ | `clinic-pro-tauri/src/service/response.js` بررسی شد: هیچ ارجاعی به `service_item`، `appointments/user` یا `my/appointments` ندارد — فقط `appointment-settings/weekly-schedule`. متأثر نیست |
| ۸.۷ | commit شد، سپس `graphify update .` | ✅ | چهار کامیت در `nobat724_front` روی برنچ `feat/booking-service-mode-frontend` + یک کامیت چک‌لیست/مستندات در `clinicpro` |
| ۸.۸ | موارد به‌تعویق‌افتاده با دلیل و تسک مقصد ثبت شدند | ✅ | `fallbackSum` (حذف پس از deploy تسک ۰۰) · بازنویسی رنگ → تسک theming · دکمهٔ جابه‌جایی → تسک UX · سناریوهای دستی → بازبینی چشمی |
@@ -132,5 +132,5 @@ UI: [_shared/ui-conventions.md](../_shared/ui-conventions.md)
| ی.۱ | **دو باگ واقعی در `adaptServiceSlots`** | ✅ | `end_time` زمانِ **شروعِ** آخرین اسلات بود (بازه کوتاه‌تر از واقعیت) و برچسب رشتهٔ ثابت «زمان‌های خالی». هر دو رفع شد |
| ی.۲ | **۳ تست از قبل قرمز** در `lib/lib.test.js` | ✅ | روی قرارداد قدیمیِ `adaptSlots` (`{morning, evening}`) نوشته شده بودند و از زمانی که خروجی به آرایهٔ session تغییر کرد قرمز مانده بودند. با قرارداد واقعی هم‌خوان شدند؛ سوئیت از ۴ شکست به ۱ رسید |
| ی.۳ | `lib/getStateInfo.test.js` یک شکست | ✅ | علتش پیدا شد: هاست ناشناخته به API واقعی می‌رفت. با mock کردن `lib/req` رفع شد. یادداشت قبلی: «host ناشناخته → بدون تطبیق» با timeout ۵ ثانیه. **در baseline هم بود** و به multi-domain مربوط است نه این تسک. بدهی ثبت‌شده |
| ی.۴ | جریان رزرو **هیچ پشتیبانی دارک‌مود ندارد** | | `darkMode` به استراتژی `variant` رفت و هر دو سازوکار (`.dark` پنل و `data-theme` عمومی) را می‌پذیرد. یادداشت قبلی: `darkMode: "class"` در Tailwind ولی `attribute="data-"` در provider عمومی؛ صفر `dark:` در `components/appointment/`. مسئلهٔ پروژه‌ای، نه این تسک |
| ی.۴ | جریان رزرو **هیچ پشتیبانی دارک‌مود ندارد** | | یافته درست بود ولی **رفعش خارج از محدوده اعلام شد (۱۴۰۵/۰۵/۱۰)**: مالک محصول کل کار دارک‌مود سایت عمومی را revert کرد. یافته به‌عنوان واقعیتِ ثبت‌شده می‌ماند — `darkMode: "class"` در Tailwind، `attribute="data-"` در provider، صفر `dark:` در `components/appointment/` |
| ی.۵ | `ButtonData.js` عمداً کامنت شده | ✅ | باز شد: دکمهٔ لغو (با پیش‌نمایش جریمه) و جابه‌جایی، فقط برای نوبتِ آیندهٔ لغونشده |
@@ -66,8 +66,8 @@
| ۴.۴ | هر `select` با `SearchableSelect` — هیچ `<select>` بومی | ✅ | `SearchableSelect` برای منطقهٔ زمانی؛ هیچ `<select>` بومی |
| ۴.۵ | وضعیت لیست در URL با `useUrlState` | ✅ | جستجو و فیلتر وضعیت در URL |
| ۴.۶ | هیچ رنگ/شعاع/سایهٔ hard-code — همه از توکن | ✅ | همه از `var(--…)` |
| ۴.۷ | دارک‌مود و حالت فشرده بررسی شد | 🔄 | کد فقط از توکن استفاده می‌کند؛ بازبینی چشمی در مرورگر انجام نشد |
| ۴.۸ | RTL و موبایل بررسی شد | 🔄 | چیدمان flex/grid با wrap؛ بازبینی چشمی موبایل انجام نشد |
| ۴.۷ | دارک‌مود و حالت فشرده بررسی شد | | اسکرین‌شات واقعی در دارک‌مود و حالت فشرده و موبایل (۳۹۰×۸۴۴) گرفته شد؛ ایرادی نماند · یادداشت قبلی: کد فقط از توکن استفاده می‌کند؛ بازبینی چشمی در مرورگر انجام نشد |
| ۴.۸ | RTL و موبایل بررسی شد | | اسکرین‌شات واقعی در دارک‌مود و حالت فشرده و موبایل (۳۹۰×۸۴۴) گرفته شد؛ ایرادی نماند · یادداشت قبلی: چیدمان flex/grid با wrap؛ بازبینی چشمی موبایل انجام نشد |
| ۴.۹ | هشدار UI: «هیچ شعبهٔ فعالی باقی نمی‌ماند» | ✅ | confirm + title روی تنها شعبهٔ فعال |
| ۴.۱۰ | مسیرها در `App.tsx` + ورودی در `SettingsMenuPage` | ✅ | سه مسیر + آیتم منو با `MapPinIcon` |
| ۴.۱۱ | مجوز موجود `appointment_settings` استفاده شد، نه مجوز تازه | ✅ | `appointment_settings` بازاستفاده شد |
@@ -57,8 +57,8 @@
| ۳.۵ | `DataTable` با skeleton و empty state | ✅ | |
| ۳.۶ | `backTo`/`BackButton` روی همهٔ زیرصفحه‌ها | ✅ | `backTo` + breadcrumb روی هر سه زیرصفحه |
| ۳.۷ | هیچ رنگ/شعاع hard-code | ✅ | همه از `var(--…)` |
| ۳.۸ | دارک‌مود و حالت فشرده | 🔄 | کد فقط از توکن استفاده می‌کند؛ بازبینی چشمی در مرورگر انجام نشد |
| ۳.۹ | RTL و موبایل | 🔄 | چیدمان grid با wrap؛ بازبینی چشمی موبایل انجام نشد |
| ۳.۸ | دارک‌مود و حالت فشرده | | اسکرین‌شات واقعی در دارک‌مود و حالت فشرده و موبایل (۳۹۰×۸۴۴) گرفته شد؛ ایرادی نماند · یادداشت قبلی: کد فقط از توکن استفاده می‌کند؛ بازبینی چشمی در مرورگر انجام نشد |
| ۳.۹ | RTL و موبایل | | اسکرین‌شات واقعی در دارک‌مود و حالت فشرده و موبایل (۳۹۰×۸۴۴) گرفته شد؛ ایرادی نماند · یادداشت قبلی: چیدمان grid با wrap؛ بازبینی چشمی موبایل انجام نشد |
| ۳.۱۰ | `setup/cleanup` با واحد فارسی «دقیقه» | ✅ | برچسب «دقیقه» در فرم و ستون جدول |
| ۳.۱۱ | هشدار «این منبع N نوبت آیندهٔ فعال دارد» هنگام غیرفعال‌سازی | ✅ | ⭐ `upcoming_appointments` روی `GET /resource/{uuid}`؛ هشدار است نه مانع — غیرفعال‌سازی نوبت‌ها را لغو نمی‌کند |
@@ -72,8 +72,8 @@
| ۵.۴ | `backTo`/`BackButton` روی هر سه | ✅ | `backTo` + breadcrumb |
| ۵.۵ | تعطیلات سال با تیک «ما این روز کار می‌کنیم» | ✅ | دکمهٔ «این روز بازیم» + بخش تعطیلی‌های خود محیط |
| ۵.۶ | هیچ رنگ/شعاع hard-code | ✅ | همه از `var(--…)` |
| ۵.۷ | دارک‌مود و حالت فشرده | 🔄 | کد فقط از توکن استفاده می‌کند؛ بازبینی چشمی در مرورگر انجام نشد |
| ۵.۸ | RTL و موبایل | 🔄 | چیدمان grid با wrap؛ بازبینی چشمی موبایل انجام نشد |
| ۵.۷ | دارک‌مود و حالت فشرده | | اسکرین‌شات واقعی در دارک‌مود و حالت فشرده و موبایل (۳۹۰×۸۴۴) گرفته شد؛ ایرادی نماند · یادداشت قبلی: کد فقط از توکن استفاده می‌کند؛ بازبینی چشمی در مرورگر انجام نشد |
| ۵.۸ | RTL و موبایل | | اسکرین‌شات واقعی در دارک‌مود و حالت فشرده و موبایل (۳۹۰×۸۴۴) گرفته شد؛ ایرادی نماند · یادداشت قبلی: چیدمان grid با wrap؛ بازبینی چشمی موبایل انجام نشد |
| ۵.۹ | دلیل خالی‌بودن روز با پیام فارسی نمایش داده می‌شود | ✅ | هر هشت دلیل ترجمهٔ فارسی دارد؛ تست کامپوننت قفلش می‌کند |
## ۶. تست