feat: add guidelines for prompt-writer and run-prompt skills

This commit is contained in:
hamed
2026-07-27 11:35:53 +03:30
parent 153ecd3108
commit ec6a4d7a85
3 changed files with 211 additions and 63 deletions
+59 -54
View File
@@ -3,6 +3,8 @@ name: run-prompt
description: اجرای یک فایل پرامپت .md به صورت گام‌به‌گام و ایمن. هر قابلیت را جداگانه پیاده‌سازی، تست و مستند می‌کند. استفاده کن وقتی کاربر می‌گوید "اجرای پرامپت"، "پرامپت را اجرا کن"، "run prompt"، یا مسیر یک فایل .md می‌دهد.
---
> **قبل از شروع، فایل `.claude/guidelines.md` را بخوان و همهٔ بخش‌های آن را اعمال کن** (اگر روت جلسه workspace است: `clinicpro/.claude/guidelines.md`). آن فایل «چگونه کار کردن» (درک مسئله، todo، تعریف «تمام شد»، مستندات، SOLID، رفتار تحلیل‌گر، چک‌لیست پایانی §۷) را تعیین می‌کند؛ این skill فقط قواعد stack، دستورهای تست و مسیرها را دارد. در تناقض با متن پرامپت، guidelines برنده است — مگر کاربر صریحاً خلافش را بگوید.
## نحوه دریافت ورودی
اگر کاربر مسیر فایل داد → آن را بخوان.
@@ -12,18 +14,20 @@ description: اجرای یک فایل پرامپت .md به صورت گام‌ب
## قبل از شروع — تحلیل پرامپت و ساخت Todo
۱. فایل پرامپت را کامل بخوان
۲. مستندات موجود را بررسی کن: `docs/api/`
۳. کد مرتبط در `src/` و `assets/admin/` را مرور کن
۴. لیست قابلیت‌ها را از پرامپت استخراج کن
۵. **با `TodoWrite` یک todo کامل بساز** — یک آیتم به ازای هر قابلیت
۶. به کاربر نمایش بده:
۱. فایل پرامپت را **کامل** بخوان
۲. مستندات موجود را بررسی کن: `docs/api/`
۳. کد واقعیِ مرتبط در `src/` و `assets/admin/` را بخوان — هیچ فرضی از حافظه
۴. **نقد پرامپت (guidelines §۶):** اگر راه‌حل پرامپت اشتباه، ناقص یا پرریسک است، همین‌جا صریح و با دلیل بگو و منتظر تعیین تکلیف بمان. اجرای بی‌چون‌وچرای پرامپت غلط، خطای agent است.
۵. لیست قابلیت‌ها را استخراج کن؛ اگر پرامپت «معیار پذیرش» ندارد، خودت برای هر قابلیت بساز (موفق + خطا + مرزی) و به کاربر نشان بده
۶. **با `TodoWrite` todo کامل بساز** — یک آیتم قابل‌تست به ازای هر قابلیت
۷. به کاربر نمایش بده — تحلیل با **بازگویی مسئله و معیار پذیرش** تمام می‌شود، نه فقط لیست قابلیت‌ها:
```
📋 قابلیت‌های شناسایی‌شده:
۱. [نام قابلیت اول]
۲. [نام قابلیت دوم]
...
🧭 بازگویی مسئله: مشکل X است؛ رفتار درست Y؛ محدودهٔ تغییر فایل‌های Z.
📋 قابلیت‌ها + معیار پذیرش:
۱. [نام] — ✅ [موفق] / ❌ [خطا] / ⚠️ [مرزی]
۲. ...
⚠️ ایرادهای پرامپت (اگر هست): ...
🚀 شروع با قابلیت ۱ — آیا ادامه دهم؟
```
@@ -32,48 +36,40 @@ description: اجرای یک فایل پرامپت .md به صورت گام‌ب
## قوانین اجرا (اجباری — هیچ استثنایی ندارد)
### ۱. Todo — ستون فقرات اجرا
### ۱. Todo — ستون فقرات اجرا (guidelines §۲)
**در ابتدای هر اجرا** یک todo کامل با `TodoWrite` بساز:
- یک آیتم به ازای هر قابلیت با وضعیت `pending`
- هر آیتم **قابل تست** با خروجی مشخص («endpoint X با response Y کار می‌کند»)، نه فعل مبهم («بررسی سیستم نوبت»)
- آیتم‌های زیر-مجموعه اضافه کن اگر قابلیت چند بخش مستقل دارد
**در طول اجرا:**
- هر قابلیت را که شروع می‌کنی → وضعیتش را `in_progress` کن
- هر قابلیت را که تست و تأیید شد → فوری `completed` کن
- هرگز دو آیتم را همزمان `in_progress` نگذار
- هر قابلیت را که شروع می‌کنی → `in_progress`؛ در هر لحظه فقط یک آیتم `in_progress`
- آیتم فقط وقتی `completed` می‌شود که هر سه انجام شده باشد: **پیاده‌سازی + تست سبز + مستندات به‌روز**
- اگر خطا داری که قابلیت را block کرده → یک آیتم `in_progress` باقی بماند تا رفع شود
**نمونه todo اولیه:**
```
[ ] قابلیت ۱: Stats Bar backend endpoint
[ ] قابلیت ۲: Stats Bar frontend component
[ ] قابلیت ۳: PersianCalendar popup
[ ] قابلیت ۴: AppointmentStatusDropdown
[ ] قابلیت ۵: بازطراحی AppointmentsPage
```
- کشف کار جدید وسط اجرا (باگ جانبی، وابستگی پنهان) → آیتم جدید به todo + اطلاع به کاربر؛ انجام بی‌صدا ممنوع
### ۲. یک قابلیت در هر مرحله
- هرگز دو قابلیت را همزمان پیاده‌سازی نکن
- هرگز بدون تأیید موفقیت مرحله قبل به مرحله بعد نرو
- هرگز بدون تأیید موفقیت مرحله قبل به مرحله بعد نرو — خطا یعنی توقف کامل
### ۳. ترتیب اجرای هر قابلیت
```
① تحلیل ② طراحی ③ پیاده‌سازی ④ تست ⑤ رفع خطا ⑥ مستندسازی ⑦ Todo + گزارش
① تحلیل ② طراحی ③ پیاده‌سازی ④ تست ⑤ رفع خطا ⑥ مستندسازی ⑦ چک‌لیست + Todo + گزارش
```
### ۴. سازگاری با پروژه
- همه تغییرات باید با Symfony 7 + React 19 سازگار باشند
- از الگوهای موجود پروژه پیروی کن (BaseController، TanStack Query، Zod، ...)
- اگر Entity تغییر کرد: `doctrine:migrations:diff` و `doctrine:migrations:migrate` اجرا کن
- اگر API تغییر کرد: همه بخش‌های وابسته (frontend types، api calls، ...) را اصلاح کن
- اگر قرارداد API تغییر کرد: همه کلاینت‌های وابسته را اصلاح کن — admin frontend (types، api calls) **و** اگر endpoint عمومی است، مصرف آن در `nobat724_front/services/` را دستی دنبال کن؛ این تغییرات در build خطا نمی‌دهند و در رانتایم می‌شکنند. نتیجه بررسی را گزارش بده.
### ۵. اصول کدنویسی
- SOLID و Clean Code
- هیچ کامنت غیرضروری اضافه نکن
- نام‌گذاری معنادار
- error handling فقط در boundaries واقعی (نه defensive programming اضافی)
### ۵. اصول کدنویسی (تفصیل در guidelines §۵)
- SOLID: Controller نازک، منطق در Service، کوئری در Repository؛ رفتار جدید با extension نه if روی نوع؛ وابستگی با constructor injection نه `new`
- سبک کد جدید = سبک فایل‌های مشابه موجود در پروژه
- هیچ کامنت بدیهی؛ نام‌گذاری معنادار؛ هیچ abstraction بدون مصرفِ الان
- error handling فقط در boundaries واقعی (Controller، فراخوانی API، I/O)
---
@@ -83,9 +79,9 @@ description: اجرای یک فایل پرامپت .md به صورت گام‌ب
قبل از هر چیز:
- فایل‌های مرتبط را بخوان
- endpoint های موجود را بررسی کن: `php bin/console debug:router | grep api`
- endpoint های موجود را بررسی کن: `php bin/console debug:router | grep api` — API جدید فقط وقتی هیچ موجودی، حتی با توسعه، کافی نباشد
- Entity های مرتبط را شناسایی کن
- اگر سوال یا ابهامی هست → همین‌جا بپرس، نه وسط پیاده‌سازی
- **ابهام = توقف**: سوال را همین‌جا بپرس، نه وسط پیاده‌سازی
### مرحله ② — طراحی
@@ -94,6 +90,8 @@ description: اجرای یک فایل پرامپت .md به صورت گام‌ب
- چه API endpoint هایی اضافه/تغییر می‌کنند
- چه migration لازم است (اگر Entity تغییر کرد)
اگر بیش از یک راه‌حل جدی وجود دارد: مزایا، معایب، ریسک و حداقل یک گزینهٔ جایگزین را مقایسه کن و دلیل انتخاب را بنویس (guidelines §۶). قبل از ساختن چیز جدید: اول بگرد، بعد توسعه بده، در آخر بساز — و دلیلش را بنویس.
### مرحله ③ — پیاده‌سازی
- قابلیت را در todo روی `in_progress` بگذار
@@ -103,7 +101,7 @@ description: اجرای یک فایل پرامپت .md به صورت گام‌ب
### مرحله ④ — تست
بعد از هر قابلیت این چک‌لیست را اجرا کن:
Definition of Done: syntax/build سبز **و** پوشش سه سناریوی معیار پذیرش (موفق، خطا، مرزی). دستورهای زیر حداقل‌اند نه سقف — اگر قابلیت منطق دارد، همان منطق را واقعاً اجرا کن (curl به endpoint با داده و توکن واقعی، نه فقط `php -l`). اگر پرامپت «نحوه تست» داده، همان را اجرا کن.
```bash
# PHP syntax
@@ -121,6 +119,11 @@ ddev exec yarn dev
# Route وجود دارد؟
ddev exec php bin/console debug:router | grep "new-route-name"
# تست واقعی endpoint — سه سناریو:
# ✅ curl با توکن معتبر و داده واقعی → response مطابق معیار پذیرش
# ❌ بدون توکن / بدون permission / ورودی نامعتبر → status و error code درست
# ⚠️ حالت مرزی معیار پذیرش
```
اگر frontend تغییر کرد، TypeScript errors را بررسی کن:
@@ -130,13 +133,13 @@ ddev exec npx tsc --noEmit --project tsconfig.json 2>&1 | head -30
### مرحله ⑤ — رفع خطا
- اگر خطا بود → **همین‌جا** رفع کن، به مرحله بعد نرو
- اگر خطا بود → **همین‌جا** رفع کن، به مرحله بعد نرو؛ هیچ قابلیتی روی خرابهٔ قابلیت قبلی ساخته نمی‌شود
- اگر خطا در فایل دیگری بود → آن را هم رفع کن
- بعد از رفع خطا → دوباره تست را اجرا کن
### مرحله ⑥ — مستندسازی
بعد از موفقیت تست، مستندات را به‌روزرسانی کن:
سند در **همین جلسه** به‌روز می‌شود — «بعداً» یعنی هرگز. اگر سند موجود با رفتار فعلی فرق دارد، اول سند را اصلاح کن، بعد قابلیت جدید را اضافه کن.
| تغییر | فایل مستندات |
|-------|-------------|
@@ -157,36 +160,37 @@ ddev exec npx tsc --noEmit --project tsconfig.json 2>&1 | head -30
الزامات مستندسازی:
1. endpoint جدید با method، path، permission
2. Request body با تمام فیلدها و نوع داده
3. Response format با مثال واقعی JSON
3. Response با **JSON واقعی از اجرای واقعی** (خروجی curl مرحله تست، نه دست‌ساز)
4. تمام status codes و error codes
5. اگر پارامتر query داشت → همه را مستند کن
### مرحله ⑦ — Todo + گزارش
### مرحله ⑦ — چک‌لیست + Todo + گزارش
بعد از موفقیت تست و مستندسازی:
۱. **آیتم todo را `completed` کن** با `TodoWrite`
۲. گزارش کوتاه نمایش بده:
۱. **چک‌لیست پایان قابلیت — guidelines §۷** را کامل مرور کن؛ فقط اگر همهٔ آیتم‌ها تیک خورد، ادامه بده
۲. **آیتم todo را `completed` کن** با `TodoWrite`
۳. گزارش کوتاه نمایش بده:
```
✅ قابلیت [شماره]: [نام] — تکمیل شد
معیار پذیرش: ✅ موفق / ❌ خطا / ⚠️ مرزی — هر سه تست شد (نتیجه واقعی، نه ادعا)
فایل‌های تغییر یافته:
• src/...
• assets/admin/...
• docs/api/...
مستندات: docs/api/... به‌روز شد | نیاز نداشت (دلیل)
📊 پیشرفت کلی:
✅ قابلیت ۱: [نام] — تکمیل
قابلیت ۲: [نام] — تکمیل
⏳ قابلیت ۳: [نام] — در صف
قابلیت ۲: [نام] — در صف
...
─────────────────────────────────
▶ قابلیت بعدی: [شماره] — [نام]
آیا ادامه دهم؟
```
در گزارش، بین **واقعیت** (خروجی تست واقعی)، **فرضیه** و **حدس** تفاوت بگذار و برچسبش را مشخص کن؛ اگر چیزی تست نشده، همان را بگو — قطعی جا نزن.
---
## قوانین خاص این پروژه
@@ -194,6 +198,7 @@ ddev exec npx tsc --noEmit --project tsconfig.json 2>&1 | head -30
### Backend
- همه controller ها از `BaseController` ارث می‌برند
- پاسخ‌ها: `$this->success($data)` | `$this->paginated(...)` | `$this->error(...)`
- خطاها با `AppException(ErrorCodes::ERR_XXX)`؛ کدها و پیام فارسی در `src/Shared/Constant/ErrorCodes.php`
- لیست‌های admin از DQL array hydration (`.getArrayResult()`) استفاده کنند
- تاریخ‌ها Unix timestamp صحیح (نه DateTime object)
- بعد از هر تغییر Entity: حتماً migration بساز و اجرا کن
@@ -219,16 +224,16 @@ ddev exec npx tsc --noEmit --project tsconfig.json 2>&1 | head -30
```
کاربر: /run-prompt .claude/prompt/appointments-redesign.md
فایل را می‌خوانم...
تحلیل می‌کنم...
guidelines.md خوانده شد
فایل پرامپت را می‌خوانم...
→ کد مرتبط را می‌خوانم و پرامپت را نقد می‌کنم...
📋 قابلیت‌های شناسایی‌شده:
۱. Stats Bar — آمار امروز (backend + frontend)
۲. تقویم شمسی Popup (PersianCalendar component)
۳. بازطراحی Toolbar با date navigator
۴. نمای جدولی با inline status change
۵. نمای زمانبندی (Schedule View)
۶. ثبت نوبت از slot خالی
🧭 بازگویی مسئله: صفحه نوبت‌ها آمار روز و تغییر وضعیت inline ندارد؛ رفتار درست، toolbar با آمار و تقویم شمسی است؛ محدوده AppointmentsPage + یک endpoint آمار.
📋 قابلیت‌ها + معیار پذیرش:
۱. Stats Bar (backend + frontend) — ✅ آمار امروز درست / ❌ بدون توکن 401 / ⚠️ روز بدون نوبت → صفر
۲. تقویم شمسی Popup — ✅/❌/⚠️ ...
۳. بازطراحی Toolbar با date navigator — ...
۴. نمای جدولی با inline status change — ...
🚀 شروع با قابلیت ۱ (Stats Bar) — آیا ادامه دهم؟
```