# راهبر اجرای تسک‌های موتور نوبت‌دهی — یک تسک در هر اجرا ## پروژه `clinicpro` (بک‌اند + پنل ادمین) پرامپت همتا برای سایت عمومی: `nobat724_front/.claude/prompt/booking-engine-task-00b-service-mode.md` (همین راهبر وقتی به تسک ۰۰ب برسد، تحویلش می‌دهد و می‌ایستد.) --- ## زمینه `docs/new_feture/taskes/` شانزده تسک برای پیاده‌سازی [مستند موتور نوبت‌دهی](../../docs/new_feture/clinic-pro-mostanad-sade.md) دارد. هر تسک یک پوشه با شش فایل است و **خودش یک پرامپت کامل است**: `task.md` (دامنه و معیار پذیرش)، `architecture.md` (فایل‌ها و سرویس‌ها)، `database.md` (جداول و migration)، `implementation_notes.md` (نکات و edge case و تست)، `checklist.md` (وضعیت)، و برای تسک‌های پیچیده `user_flow.md`. جمع زمان تخمینی ۲۱۴ تا ۲۵۶ ساعت است. هیچ اجرایی نمی‌تواند همه را در یک نشست تمام کند. **پس این پرامپت خودش قابلیت نیست — راهبر است.** هر اجرا: ``` وضعیت را از checklist.md ها بخوان → تسک بعدی واجد شرایط را انتخاب کن → همان یک تسک را کامل انجام بده (پیاده‌سازی + تست + مستند + چک‌لیست) → commit + graphify update → بایست و بگو تسک بعدی چیست ``` همین پرامپت را دوباره اجرا کن تا تسک بعدی برود. تا وقتی همهٔ چک‌لیست‌ها ✅ نشده‌اند، کار تمام نیست. --- ## مشکل / هدف **هدف:** یک مسیر اجرای تکرارشونده و ایمن که شانزده تسک را به ترتیب وابستگی، یکی‌یکی و بدون از دست دادن وضعیت پیش ببرد — طوری که هر اجرا مستقل باشد و قطع شدن وسط کار، کار انجام‌شده را از بین نبرد. **چرا این شکل و نه یک پرامپت غول:** وضعیت در `checklist.md` روی دیسک زندگی می‌کند، نه در context. اجرای بعدی همان فایل را می‌خواند و می‌فهمد کجا مانده. هزینهٔ این طراحی یک مرحلهٔ «خواندن وضعیت» در ابتدای هر اجراست؛ سودش این است که هیچ اجرایی به context اجرای قبلی وابسته نیست. --- ## معیار پذیرش معیار پذیرش این راهبر، **رفتار خودِ راهبر** است. معیار پذیرش هر تسک در `task.md` همان تسک است و اینجا تکرار نمی‌شود. - ✅ **موفق:** اجرا با شناسایی وضعیت شروع می‌شود (جدول ۱۶ تسک با ✅/🔄/⏳)، دقیقاً یک تسک انتخاب می‌شود، همهٔ ردیف‌های `checklist.md` آن تسک به ✅ می‌رسند، `bin/phpunit` و `--group=slot-mode-frozen` سبزند، `docs/api/*` به‌روز است، یک commit زده می‌شود، `graphify update .` اجرا می‌شود، و اجرا با اعلام تسک بعدی تمام می‌شود. - ✅ **موفق (ازسرگیری):** اجرای دوم روی همان مخزن، تسک تمام‌شده را **دوباره انجام نمی‌دهد** و مستقیم سراغ تسک بعدی می‌رود. - ✅ **موفق (نیمه‌کاره):** اگر چک‌لیستی ردیف 🔄 دارد، همان تسک ادامه داده می‌شود، نه تسک بعدی. - ❌ **خطا:** اگر تسکی وابستگی‌اش ✅ نیست → اجرا شروع نمی‌شود؛ پیام روشن با نام تسک پیش‌نیاز و توقف. - ❌ **خطا:** اگر `--group=slot-mode-frozen` قرمز شد → **توقف کامل**، rollback تغییرات آن مرحله، گزارش دقیق کدام fixture شکست. fixture هرگز به‌روز نمی‌شود. - ❌ **خطا:** اگر تستی سبز نشد → تسک `completed` نمی‌شود؛ ردیف چک‌لیست 🔄 می‌ماند و اجرا با گزارش خطا تمام می‌شود. تسک بعدی شروع نمی‌شود. - ⚠️ **مرزی:** همهٔ ۱۶ چک‌لیست ✅ → پیام «همهٔ تسک‌ها تمام شده‌اند» و توقف بدون تغییر. - ⚠️ **مرزی:** تسک انتخاب‌شده ۰۰ب است (پروژهٔ دیگر) → اجرا **کد نمی‌زند**؛ دستور اجرای پرامپت `nobat724_front` را می‌دهد و می‌ایستد. - ⚠️ **مرزی:** کاربر شمارهٔ تسک را صریح داد (`/run-prompt … --task=05`) → همان تسک، ولی وابستگی‌ها همچنان بررسی می‌شوند و اگر ناقص بودند توقف. - ⚠️ **مرزی:** ردیفی از چک‌لیست به دلیل موجه قابل انجام نیست → ⏳ می‌ماند **با دلیل مکتوب و تسک مقصد** در ستون یادداشت. ⏳ بی‌دلیل = تسک تمام نشده. --- ## فایل‌های مرتبط | فایل | نقش | |------|-----| | `docs/new_feture/taskes/README.md` | فهرست ۱۶ تسک، وابستگی‌ها، ترتیب اجرا | | `docs/new_feture/taskes/00-current-state-report.md` | تحلیل شکاف وضعیت فعلی در برابر مستند | | `docs/new_feture/taskes/_shared/red-lines.md` | ⛔ قواعد قفل‌شده — منطق اسلاتی دست‌کاری نمی‌شود | | `docs/new_feture/taskes/_shared/ui-conventions.md` | 🎨 توکن‌ها و کامپوننت‌های اجباری | | `docs/new_feture/taskes/_shared/definition-of-done.md` | ☑️ نمادها و بازبینی پایانی | | `docs/new_feture/taskes/task-XX-*/task.md` | دامنه و معیار پذیرش هر تسک | | `docs/new_feture/taskes/task-XX-*/architecture.md` | فایل‌ها، سرویس‌ها، قواعد UI | | `docs/new_feture/taskes/task-XX-*/database.md` | جداول، ایندکس، migration، backfill | | `docs/new_feture/taskes/task-XX-*/implementation_notes.md` | edge case و فهرست تست | | `docs/new_feture/taskes/task-XX-*/checklist.md` | **وضعیت پایدار — منبع حقیقت پیشرفت** | | `docs/new_feture/taskes/task-XX-*/user_flow.md` | جریان کاربری (۰۰، ۰۰ب، ۰۵، ۰۶، ۰۷، ۱۲) | | `CLAUDE.md` · `docs/architecture/tenancy.md` | قواعد ثابت پروژه | --- ## وضعیت فعلی هر شانزده `checklist.md` ساخته شده و **همهٔ ردیف‌هایشان `⏳` است**. هیچ تسکی شروع نشده. ساختار ثابت هر چک‌لیست: ```markdown # چک‌لیست — تسک XX (عنوان) **وضعیت کلی:** ⏳ شروع نشده · **آخرین بازبینی:** — ## ۰. خط سرخ | # | مورد | وضعیت | یادداشت | |---|---|---|---| | ۰.۱ | `--group=slot-mode-frozen` سبز | ⏳ | | ... ## ۱. بک‌اند ## ۲. دیتابیس ## ۳. UI ## ۴. تست ## ۵. مستندات ## ۶. بازبینی پایانی ``` نمادها (از `_shared/definition-of-done.md`): | نماد | معنی | اجازهٔ باقی‌ماندن در پایان تسک | |---|---|---| | ✅ | انجام‌شده و تأییدشده | بله | | 🔄 | در حال انجام | **نه** | | ⏳ | انجام‌نشده | **نه** — مگر با دلیل مکتوب و تسک مقصد | | ⚠️ | نیازمند بررسی یا تست | **نه** — باید تعیین تکلیف شود | ترتیب و وابستگی (از `README.md`): ``` ۰۰ ── ۰۰ب │ ├─ ۰۱ ─┬─ ۰۲ ── ۰۳ ─┐ │ └─ ۰۴ ── ۰۵ ─┴─ ۰۶ ── ۰۷ ─┬─ ۰۸ ─┬─ ۰۹ ── ۱۰ │ │ └─ ۱۱ ── ۱۲ │ ├─ ۱۳ │ └─ ۱۴ ``` | تسک | پروژه | وابستگی | |---|---|---| | ۰۰ تکمیل نوبت‌دهی سرویسی | `clinicpro` | — | | ۰۰ب سازگارسازی سایت | `nobat724_front` | ۰۰ | | ۰۱ شعبه و اتاق | `clinicpro` | ۰۰ | | ۰۲ منبع، مهارت، استخر | `clinicpro` | ۰۱ | | ۰۳ تقویم منبع | `clinicpro` | ۰۱، ۰۲ | | ۰۴ کاتالوگ خدمات v2 | `clinicpro` | ۰۱ | | ۰۵ بخش‌های نوبت | `clinicpro` | ۰۲، ۰۴ | | ۰۶ جستجوی وقت چندمنبعی | `clinicpro` | ۰۳، ۰۵ | | ۰۷ رزرو موقت و ثبت | `clinicpro` | ۰۶ | | ۰۸ قیمت و snapshot | `clinicpro` | ۰۴، ۰۷ | | ۰۹ موتور قوانین | `clinicpro` | ۰۵، ۰۶، ۰۸ | | ۱۰ فرم و sandbox قانون | `clinicpro` | ۰۹ | | ۱۱ پکیج و دفتر اعتبار | `clinicpro` | ۰۸ | | ۱۲ دوره درمان | `clinicpro` | ۰۷، ۱۱ | | ۱۳ لغو، عدم حضور، انتظار | `clinicpro` | ۰۷ | | ۱۴ رویدادها و بهره‌وری | `clinicpro` | ۰۷ | --- ## وظایف > ⚠️ این هفت وظیفه **مراحل یک اجرا**ی راهبرند، نه هفت قابلیت مستقل. `todo` را از روی > ردیف‌های `checklist.md` تسکِ انتخاب‌شده بساز، نه از روی این هفت مرحله. ### ۱. خواندن قواعد حاکم — پیش از هر چیز سه سند را کامل بخوان و در همین اجرا اعمال کن: ``` docs/new_feture/taskes/_shared/red-lines.md docs/new_feture/taskes/_shared/ui-conventions.md docs/new_feture/taskes/_shared/definition-of-done.md ``` در تناقض با متن هر تسک، **این سه برنده‌اند**. مهم‌ترین بندشان: - ⛔ منطق اسلاتی (`booking_mode = 'slot'`) در **هیچ تسکی** دست‌کاری نمی‌شود. فهرست فایل‌ها و متدهای قفل‌شده در `red-lines.md` است. - 🎨 هر صفحه یا کامپوننت جدید عیناً با دیزاین‌سیستم موجود — توکن‌های `assets/admin/styles.css`، کامپوننت‌های `assets/admin/components/ui/`، پنج قاعدهٔ غیرقابل‌مذاکره. - ☑️ هیچ تسکی بدون تکمیل چک‌لیستش تمام نیست. **نحوه تست:** بعد از خواندن، در گزارش شروع بنویس کدام سه سند خوانده شد و مهم‌ترین قید مربوط به تسک انتخاب‌شده چیست (یک جمله). --- ### ۲. شناسایی وضعیت و انتخاب تسک همهٔ چک‌لیست‌ها را بخوان و وضعیت هر تسک را از **ردیف‌هایش** استنتاج کن، نه از خط «وضعیت کلی» (که ممکن است به‌روز نشده باشد): ```bash # فهرست چک‌لیست‌ها به ترتیب ls -1 docs/new_feture/taskes/*/checklist.md | sort # شمارش نمادها per تسک — دیدِ سریع وضعیت for f in docs/new_feture/taskes/*/checklist.md; do echo "$(dirname "$f" | xargs basename): ✅=$(grep -c '| ✅ |' "$f") 🔄=$(grep -c '| 🔄 |' "$f") ⏳=$(grep -c '| ⏳ |' "$f") ⚠️=$(grep -c '| ⚠️ |' "$f")" done ``` قاعدهٔ استنتاج: ``` تمام‌شده = هیچ ردیف 🔄 · هیچ ردیف ⚠️ · هیچ ردیف ⏳ بدون یادداشتِ دلیل در جریان = حداقل یک ردیف 🔄 یا ⚠️ شروع نشده = همهٔ ردیف‌ها ⏳ و هیچ یادداشتی ``` قاعدهٔ انتخاب، به همین ترتیب: 1. اگر تسکی **در جریان** است → همان. (تسک نیمه‌کاره رها نمی‌شود.) 2. وگرنه اولین تسکِ **شروع نشده** که همهٔ وابستگی‌هایش **تمام‌شده** اند. 3. اگر کاربر `--task=XX` داد → همان، ولی وابستگی‌ها همچنان بررسی می‌شوند. 4. اگر همه تمام‌شده‌اند → پیام و توقف. 5. اگر تسک انتخاب‌شده وابستگی ناقص دارد → توقف با نام تسک پیش‌نیاز. جدول وضعیت را به کاربر نشان بده و تسک انتخاب‌شده را اعلام کن: ``` 📊 وضعیت تسک‌ها ۰۰ تکمیل سرویسی ✅ تمام‌شده ۰۰ب سازگارسازی سایت ✅ تمام‌شده ۰۱ شعبه و اتاق 🔄 در جریان (۱۲/۳۸) ۰۲ منبع و مهارت ⏳ شروع نشده … 🎯 تسک انتخاب‌شده: ۰۱ — شعبه و اتاق (ادامهٔ کار نیمه‌کاره) ``` **نحوه تست:** دستور شمارش بالا را اجرا کن و خروجی واقعی‌اش را در گزارش بگذار. جدول نمایش‌داده‌شده باید با آن خروجی بخواند. --- ### ۳. تحویل به پرامپت همتا اگر تسک ۰۰ب انتخاب شد تسک ۰۰ب روی `nobat724_front` است و در این پروژه هیچ کدی ندارد. اگر انتخاب ۰۰ب شد، **هیچ فایلی را تغییر نده** و این را چاپ کن و بایست: ``` 🔀 تسک ۰۰ب روی پروژهٔ nobat724_front است. اجرا کن: /run-prompt nobat724_front/.claude/prompt/booking-engine-task-00b-service-mode.md بعد از تمام شدنش، همین راهبر را دوباره اجرا کن تا تسک ۰۱ برود. ``` **نحوه تست:** موقتاً همهٔ ردیف‌های `task-00-service-mode-completion/checklist.md` را ✅ کن، راهبر را اجرا کن، و ببین همین پیام چاپ می‌شود و هیچ فایلی در `src/` عوض نمی‌شود. بعد تغییر موقت را برگردان. --- ### ۴. اجرای تسک انتخاب‌شده — یکی، کامل چهار (یا پنج) فایل تسک را **کامل** بخوان: ``` task-XX-*/task.md ← دامنه، endpoint ها، معیار پذیرش task-XX-*/architecture.md ← فایل‌ها، سرویس‌ها، الگوها، قواعد UI task-XX-*/database.md ← جداول، ایندکس، migration، backfill task-XX-*/implementation_notes.md ← edge case ها، فهرست تست، تله‌های مشخص task-XX-*/user_flow.md ← اگر وجود دارد ``` بعد کد واقعی مرتبط را بخوان — **هیچ فرضی از حافظه** (guidelines §۱). سپس `todo` بساز: **یک آیتم به ازای هر ردیفِ غیر-✅ چک‌لیست**، مرتب بر اساس بخش (۰ خط سرخ → ۱ بک‌اند → ۲ دیتابیس → ۳ UI → ۴ تست → ۵ مستندات → ۶ بازبینی پایانی). اجرای هر ردیف با همان هفت‌مرحلهٔ `run-prompt`: ``` ① تحلیل ② طراحی ③ پیاده‌سازی ④ تست ⑤ رفع خطا ⑥ مستندسازی ⑦ چک‌لیست + گزارش ``` قواعدی که در این مرحله شکستنی نیستند: - **بخش ۰ چک‌لیست اول از همه.** خط سرخ‌ها پیش از هر کد بررسی می‌شوند. در تسک ۰۰ این یعنی ساختن `SlotModeFrozenTest` و سه fixture **قبل** از هر تغییر — وگرنه snapshot وضعیت تغییریافته گرفته می‌شود و چیزی را تضمین نمی‌کند. - **یک ردیف در هر لحظه `in_progress`.** - **ردیف فقط با هر سه ✅ می‌شود:** پیاده‌سازی + تست سبز + مستند به‌روز. - **خطا = توقف کامل.** هیچ ردیفی روی خرابهٔ ردیف قبلی ساخته نمی‌شود. - **کشف کار جدید** (باگ جانبی، وابستگی پنهان) → ردیف جدید به همان `checklist.md` **اضافه کن** و به کاربر بگو. انجام بی‌صدا ممنوع. **نحوه تست:** دستورهای هر پروژه بعد از هر ردیفِ منطق‌دار: ```bash ddev exec php bin/console cache:clear ddev exec php bin/console doctrine:migrations:diff --no-interaction # اگر entity عوض شد ddev exec php bin/console doctrine:migrations:migrate --no-interaction ddev exec php bin/phpunit tests/ # تست همان تسک ddev exec php bin/phpunit --group=slot-mode-frozen # ⛔ بعد از هر ردیف ddev exec php vendor/bin/phpstan analyse src/ npx tsc --noEmit --project tsconfig.json # اگر tsx عوض شد yarn dev # بررسی خطای build yarn test ``` برای هر endpoint، تست واقعی با داده واقعی — نه فقط `php -l`. کاربر تست: `09390039833 / 09390039833` (اگر کار نکرد، اعتبارهای per-نقش با `QaTest@1234`). --- ### ۵. به‌روزرسانی زندهٔ `checklist.md` چک‌لیست **حافظهٔ بین‌اجرایی** است. اگر به‌روز نشود، اجرای بعدی کار انجام‌شده را دوباره انجام می‌دهد. قواعد نوشتن: - ردیف را **همان لحظه** که شروع می‌کنی `⏳ → 🔄` کن، نه در پایان تسک - تمام شد → `🔄 → ✅` با یادداشت کوتاه اگر چیزی برای گفتن هست (مسیر فایل، عدد اندازه‌گیری‌شده) - شکست خورد یا بلاک شد → `⚠️` با **دلیل** در ستون یادداشت - به تعویق افتاد → `⏳` با **دلیل + تسک مقصد** در یادداشت. `⏳` بی‌دلیل = تسک تمام نشده. - خط سربرگ را هم به‌روز کن: ```markdown **وضعیت کلی:** 🔄 در حال انجام · **آخرین بازبینی:** ۱۴۰۵/۰۵/۰۳ ``` پیش از رفتن به وظیفهٔ ۶، **بخش ۶ (یا ۷/۸ بسته به تسک) بازبینی پایانی** را ردیف‌به‌ردیف اجرا کن. ردیف‌های مشترک همهٔ تسک‌ها: ``` همهٔ ردیف‌های بالا وضعیت نهایی دارند (هیچ 🔄 و ⏳ بی‌دلیل) ddev exec php bin/phpunit کامل سبز ddev exec php bin/phpunit --group=slot-mode-frozen سبز ddev exec php vendor/bin/phpstan analyse بدون خطای جدید npx tsc --noEmit بدون خطا yarn test سبز TenantSchemaCoverageTest + TenantLookupInventoryTest سبز docs/api/* به‌روز شد چک‌لیست UI کامل شد (اگر تسک صفحه دارد) nobat724_front و clinic-pro-tauri دستی بررسی شدند commit شد، سپس graphify update . موارد به‌تعویق‌افتاده با دلیل و تسک مقصد ثبت شدند ``` ردیف «دو کلاینت دیگر» در build هیچ‌کدام خطا نمی‌دهد — بررسی **فقط دستی** ممکن است (guidelines §۳). نتیجه را با ذکر فایل‌های بررسی‌شده گزارش بده، نه با «بررسی شد». **نحوه تست:** بعد از به‌روزرسانی، دستور شمارش وظیفهٔ ۲ را دوباره اجرا کن. تسک باید `✅=<همه> 🔄=0 ⏳=0 ⚠️=0` بدهد. --- ### ۶. Commit و به‌روزرسانی گراف **ترتیب مهم است:** اول commit، بعد `graphify update` — وگرنه گراف وضعیت کامیت‌نشده را ایندکس می‌کند. ```bash git add -A git commit -m "$(cat <<'EOF' feat(booking): <عنوان انگلیسی تسک> <دو-سه خط: چه چیزی اضافه شد، چه چیزی عمداً دست‌نخورده ماند> Task: docs/new_feture/taskes/task-XX-/ Slot-mode contract: unchanged (--group=slot-mode-frozen green) Co-Authored-By: Claude Opus 5 (1M context) EOF )" graphify update . ``` پیام کامیت انگلیسی (قاعدهٔ پروژه). خط `Slot-mode contract` اجباری است — رد مکتوبِ اینکه خط سرخ رعایت شده. اگر روی برنچ `main` هستی، **اول برنچ بساز**: ```bash git checkout -b feat/booking-engine-task-XX ``` **نحوه تست:** `git log --oneline -1` و `git status` را در گزارش بگذار. --- ### ۷. گزارش پایانی و اعلام تسک بعدی اجرا با این قالب تمام می‌شود و **تسک بعدی شروع نمی‌شود**: ``` ✅ تسک XX — <عنوان> تمام شد پیاده‌سازی • <سه تا پنج خط: چه ساخته شد، با مسیر فایل> تست • bin/phpunit : تست، سبز • --group=slot-mode-frozen : سبز • phpstan / tsc / yarn test : سبز • تست‌های جدید این تسک : <فهرست کوتاه> مستندات • <فایل‌های docs/api/* و docs/architecture/* که عوض شدند> خط سرخ • منطق اسلاتی دست‌نخورده — <یک جمله شاهد، مثلاً: هیچ متد SlotCalculatorService عوض نشد> کلاینت‌های دیگر • nobat724_front : <چه بررسی شد و نتیجه> • clinic-pro-tauri: <همان> به تعویق افتاد (اگر هست) • <ردیف> — دلیل: <…> — تسک مقصد: commit: · graphify: به‌روز شد ──────────────────────────────── 🎯 تسک بعدی: XX — <عنوان> (وابستگی‌ها: ✅) اجرا کن: /run-prompt clinicpro/.claude/prompt/booking-engine-task-runner.md ``` اگر تسک ناتمام ماند، به‌جای `✅` بنویس: ``` ⛔ تسک XX ناتمام ماند بلاک‌کننده: <چه چیزی و کجا> ردیف‌های باقی: <فهرست با وضعیت> چک‌لیست به‌روز شد؛ اجرای بعدی از همین‌جا ادامه می‌دهد. ``` **نحوه تست:** گزارش باید با خروجی واقعی دستورها بخواند. عدد تست ساختگی ننویس. --- ## نکات مهم ### خط سرخ — تنها چیزی که هیچ تسکی نمی‌تواند نقض کند `booking_mode = 'slot'` منطق تولیدیِ زنده است. `_shared/red-lines.md` فهرست دقیق دارد؛ خلاصه‌اش: | قفل | یعنی | |---|---| | هفت متد عمومی `SlotCalculatorService` | امضا و رفتار عوض نمی‌شود | | `GET /api/v1/appointment-slots` | قرارداد request/response | | `GET /api/v1/appointment-settings/month-availability/{doctorUuid}` | قرارداد | | `Appointment::active_slot_key` و `refreshActiveSlotKey()` | مکانیزم یکتایی موجود | | `AppointmentRepository::isSlotTaken` | امضا و معنا | | `WeeklySchedule::DEFAULT_META['booking_mode']` | مقدار `slot` می‌ماند | **مجاز:** افزودن متد جدید · کلاس موازی · ستون تهی‌پذیر · کلید جدید در `meta` با حفظ پیش‌فرض **ممنوع:** تغییر امضای متد موجود · refactor «یکدست‌سازی» · اعمال قوانین جدید روی حالت `slot` fixture های `tests/Appointment/fixtures/slot-mode-contract.json` و `month-availability-contract.json` و `slot-calculator-signatures.php` **read-only** اند. اگر تست قرمز شد، **کد برمی‌گردد، نه fixture**. تسک ۰۰ آن‌ها را می‌سازد؛ هیچ تسک دیگری اجازهٔ به‌روزرسانی‌شان را ندارد. ### فاز ۰ اختیاری نیست تسک ۰۰ و ۰۰ب پیش‌نیاز واقعی‌اند، نه توصیه. حالت `service` امروز پنج شکاف در چرخهٔ عمر نوبت دارد (ویرایش، جابه‌جایی، رزرو، پنل بیمار، دیزاین‌سیستم سایت — جزئیات در `00-current-state-report.md` بخش ۲-۵ب). اگر حالت `resource` (تسک ۰۶) روی این پایه ساخته شود، هر باگ موجود به موتور جدید ارث می‌رسد و تشخیص منبعش غیرممکن می‌شود. ### دیزاین‌سیستم — هر صفحهٔ جدید `_shared/ui-conventions.md` کامل است. پنج قاعده‌ای که رعایت نکردنشان یعنی رد شدن ردیف: 1. `SearchableSelect`، هرگز `