diff --git a/docs/GROWTH-COACH-SCHEDULER-CONTRACT.md b/docs/GROWTH-COACH-SCHEDULER-CONTRACT.md new file mode 100644 index 0000000..44c4380 --- /dev/null +++ b/docs/GROWTH-COACH-SCHEDULER-CONTRACT.md @@ -0,0 +1,9 @@ +# Growth Coach Scheduler Contract + +- `cmd/scheduler` یک سرویس خصوصی و مستقل از API/worker است و endpoint عمومی ندارد. +- هر ساعت بیدار می‌شود؛ قبل از ساعت ۰۷:۰۰ تهران job روزانه نمی‌سازد. +- گزارش روزانه برای هر پروفایل جاری، برنامه هفتگی در شنبه و برنامه ماهانه در روز اول ماه جلالی enqueue می‌شود. +- fingerprint یکتای PostgreSQL از merchant، terminal، cadence، شروع دوره و profile version ساخته می‌شود؛ اجرای هم‌زمان scheduler job تکراری ایجاد نمی‌کند. +- scheduler فقط enqueue می‌کند. generation در worker انجام می‌شود و هر render صرفاً state ذخیره‌شده را می‌خواند. +- rollback با خاموش‌کردن `AI_COACH_ENABLED` انجام می‌شود؛ داده‌های profile، plan و «قدم‌های زرین» حفظ می‌شوند. +- signals عملیاتی: queue age، generation latency، provider/validation failure، token/cost، stale plan و evaluation lag. prompt و متن profile نباید log شوند. diff --git a/docs/decisions/0004-ai-growth-coach-boundary.md b/docs/decisions/0004-ai-growth-coach-boundary.md new file mode 100644 index 0000000..fede369 --- /dev/null +++ b/docs/decisions/0004-ai-growth-coach-boundary.md @@ -0,0 +1,11 @@ +# ADR 0004: مرز AI در مربی رشد + +## تصمیم + +AvalAI فقط توضیح فارسی، اولویت‌بندی و انتخاب یک metric و سطح اقدام از allowlist را انجام می‌دهد. محاسبه baseline، target، sample threshold، deadline، پیشرفت، تکمیل و تغییر سطح دشواری در موتور قطعی Go انجام می‌شود. مدل اجازه پذیرش، رد، تکمیل یا اجرای اقدام را ندارد. + +حافظه هر درخواست از نسخه جاری پروفایل پایانه، برنامه‌های ذخیره‌شده، ردها و نتایج ساخته می‌شود. provider memory خاموش و `store:false` است. پروفایل داده غیرقابل‌اعتماد محسوب می‌شود و دستورهای احتمالی داخل آن اجرا نمی‌شوند. داده تراکنش خام، payer key، secret و شناسه‌های داخلی وارد prompt یا log نمی‌شوند. + +## پیامد عملیاتی + +`AI_COACH_ENABLED` و `AI_PAGE_INSIGHTS_ENABLED` مستقل‌اند. production فقط با model، key و بودجه مثبت فعال می‌شود. outage برنامه معتبر قبلی و metricهای قطعی را حفظ می‌کند و failure را به‌عنوان پاسخ تازه AI نمایش نمی‌دهد. diff --git a/docs/decisions/0005-payment-watermark-ingestion.md b/docs/decisions/0005-payment-watermark-ingestion.md new file mode 100644 index 0000000..c585f8a --- /dev/null +++ b/docs/decisions/0005-payment-watermark-ingestion.md @@ -0,0 +1,7 @@ +# ADR 0005: قرارداد ورود داده و watermark + +## تصمیم + +مربی رشد به منبع خاصی از پرداخت وابسته نیست. importer فعلی پس از commit موفق، checksum نسخه داده را از طریق `PaymentUpdateListener` اعلام می‌کند. adapter آینده webhook یا API همین قرارداد را پیاده می‌کند و به منطق coach دست نمی‌زند. + +هر ارزیابی metric با watermark یکتا در PostgreSQL ثبت می‌شود. اجرای تکراری idempotent است. وقتی داده ثابت باشد، محصول «آخرین داده موجود» را نمایش می‌دهد و پیشرفت یا completion شبیه‌سازی نمی‌کند.