Motoshub · Delivery Plan · Front

تسک‌های تیم Front — با جزئیات پیاده‌سازی

همه‌ی تسک‌های فرانت با subtask، تخمین، User Story و معیار پذیرش. مرجع رفتار: demo.shub.ir · خط لوله‌ی الزامی تحویل: فرآیند تحویل و کیفیت · تسک‌های Backend

راهنمای پیاده‌سازیزمان‌بندیتصمیم‌های الزام‌آورفاز ۰فاز ۱فاز ۲فاز ۳فاز ۴فاز ۵فاز ۶دامنه‌ی کشف‌شدههم‌ترازی با دموی نهاییپیام‌رسان کاملجمع‌بندی تخمین‌هاقرارداد دامنه‌بندیمشخصات پیام‌رسانوضعیت زنده

راهنمای پیاده‌سازی تیم Front

استک و قراردادها. Next.js App Router + TypeScript strict + TanStack Query (server-state) + Zustand (client-state) + RHF+Zod (فرم). همه‌ی درخواست‌ها فقط از libs/axios.ts با baseURL=/api/v1؛ فرانت نباید بداند پاسخ از PHP است یا Django.
الگوی هر ماژول. service (توابع خالص axios) ← hookهای query/mutation (کلیدهای cache استاندارد: [module, list, params] / [module, id]) ← کامپوننت. invalidation بعد از هر mutation. حالت‌های loading=اسکلتون، empty=EmptyState، error=پیام+retry برای هر فهرست الزامی است.
ظاهر. توکن‌های طراحی پروتوتایپ (ink/brand/navy + دارک‌مود توکنی + Vazirmatn) مبنای F2 است — از demo.shub.ir به‌عنوان مرجع پیکسلی استفاده کنید؛ RTL و aria و فوکوس کیبورد در DoD است.
مرجع پذیرش. رفتار هر صفحه = همان صفحه در demo.shub.ir؛ معیارهای پذیرش هر تسک در همین سند، و عبور از خط لوله‌ی تحویل و کیفیت الزامی است.
Σ

خلاصه‌ی زمان‌بندی و فازها

دو مسیرِ موازی. Front از فاز ۱ به‌بعد به قراردادِ api/v1 روی PHP وصل می‌شود و منتظرِ Django نمی‌ماند؛ Backend به‌موازات همان قرارداد را در Django بازمی‌سازد و Gateway هر مسیرِ آماده را سوییچ می‌کند.

تصحیحِ ۱۴۰۵/۰۵/۱۱ — چه چیزی امروز واقعاً پاسخ می‌دهد. پیش‌تر اینجا نوشته شده بود «PHP همین حالا هر ۲۹۳ عملیات را پاسخ می‌دهد». اندازه‌گیریِ زنده نشان می‌دهد آن ۲۹۳ عملیات در برنچِ API مخزن هست ولی روی production مستقر نیست؛ امروز ۱۱ منبع از ۵۵ پاسخ می‌دهند: auth · users · blogs · news · groups · events · photos · albums · videos · forum · files.
یعنی F8، F9، F10، F11، F12، F13، F14 همین امروز دادهٔ واقعی دارند؛ اما F7 (فید)، F15 (چت)، F20.1 (اعلان)، F20.2 (جستجو) فعلاً داده ندارند و باید با لایه‌ی mockِ قابل‌تعویض ساخته شوند. فهرستِ کامل و روشِ اندازه‌گیری: وضعیت زنده.
فازمحتواFrontBackendموازی
۰پایه: axios/design-system · REST-infra/auth-JWT/deploy/data-model۵.۵ روز۹ روز~۹ روز
۱احراز هویت، پوسته و ناوبری، لایه‌ی داده · endpointهای auth + مدل‌ها۹.۵ روز۶ روز~۱۰ روز
۲هسته: داشبورد، تازه‌ها، بلاگ، کاربران/پروفایل۱۷ روز۱۳ روز~۱۷ روز
۳اجتماعی: گروه‌ها، اخبار، رویدادها، رسانه، فروم۱۸.۵ روز۲۵ روز~۲۵ روز
۴ارتباط: چت، دانش، پروژه · پیام‌رسان، دوستان/اعلان، دانش/پروژه۱۵.۵ روز۱۶ روز~۱۶ روز
۵سازمانی: قرارداد/صندوق/پژوهش/آموزش · نظرسنجی/مسابقات۸ روز۱۳ روز~۱۳ روز
۶راهبری، ظاهر، گزارش، اعلان، جستجو، راهنما، دستیار، پولیش، تست۱۶ روز۴ روز~۱۶ روز
مجموع (تک‌نفره، بدون همپوشانی)~۹۰ روز~۸۶ روز~۱۰۶ روز
اصلاحِ جمع‌بندی (۱۴۰۵/۰۵/۱۱). جمعِ ستون‌های این جدول با مجموعِ تخمینِ تک‌تکِ تسک‌ها هم‌خوان نبود (Front ~۹۶ در برابر ۹۰ واقعی، Backend ~۹۲ در برابر ۸۶). اعدادِ جدول با مجموعِ واقعی هم‌خوان شد. هیچ تخمینی در هیچ تسکی تغییر نکرده است — فقط خطای جمع رفع شد. برآوردهای هفتگی و سناریوهای اندازه‌ی تیم نیز دست‌نخورده مانده‌اند، چون آن‌ها بر پایه‌ی مسیر بحرانی محاسبه شده‌اند نه جمعِ ساده.
تفسیرِ زمان. با ۲ توسعه‌دهنده‌ی Front + ۲ Backend و اجرای موازیِ فازها، بازه‌ی واقع‌بینانه‌ی رسیدن به پروتوتایپِ کامل حدود ۱۳ تا ۱۶ هفته‌ی کاری است. «حداقلِ محصولِ قابل‌نمایش» (فاز ۰ تا ۲) در حدود ۵ تا ۶ هفته به‌دست می‌آید. این اعداد تخمینی‌اند و باید در Planningِ هر Sprint دوباره کالیبره شوند.

سناریوهای اندازه‌ی تیم

ترکیب تیمMVP (فاز ۰-۲)پروتوتایپ کاململاحظات
۱ Front + ۱ Backend~۹-۱۰ هفته~۲۲-۲۶ هفتهارزان‌ترین؛ ریسک گلوگاه تک‌نفره و ریزش. توصیه نمی‌شود.
۲ Front + ۲ Backend (خط پایه)۵-۶ هفته۱۳-۱۶ هفتهترکیب فعلی. هر فاز دو workstream موازی؛ review متقابل ممکن است.
۲F + ۲B + ۱ نفر QA/تست‌خودکار۵-۶ هفته۱۲-۱۴ هفتهزمان زیاد کم نمی‌شود اما دوباره‌کاری و باگِ برگشتی به‌شدت کم می‌شود؛ پیشنهاد PO.
۳ Front + ۳ Backend + QA۴-۵ هفته۹-۱۱ هفتهبازده نزولی: مسیر بحرانی (auth→چت realtime→گزارش) کوتاه‌تر از این نمی‌شود.
تیم واقعی: ۴F + ۳B + ۱QA + ۱DevOps~۴ هفته~۹-۱۱ هفتهترکیب فعلی ما. DevOps تسک‌های B3/استقرار/CI را برمی‌دارد و Backend خالص فیچر می‌زند؛ QA از هفته‌ی ۱ گیت‌های ۸ و ۹ پایپ‌لاین را مالک است.
مسیر بحرانی مستقل از تعداد نفرات: فاز ۰ (زیرساخت) ← auth ← لایه‌ی داده ← ماژول‌های وابسته به فایل/اعلان ← چتِ بی‌درنگ ← پولیش. حداقل تقویمیِ عبوری از این زنجیره ~۹ هفته است؛ نفرِ اضافه فقط پهنای موازی را زیاد می‌کند، نه عمق زنجیره را. با تیم ۹ نفره، گلوگاه = Backend (۳ نفر / ~۸۰ روزنفرِ باقی‌مانده پس از واگذاری استقرار به DevOps).

تقسیم کار پیشنهادی تیم واقعی (workstreamهای پایدار — هر نفر مالک یک رشته)

نقشمالکیت (رشته‌ی کاری ثابت)تسک‌ها به ترتیب
Front ۱ (لید)زیرساخت فرانت، auth، لایه‌ی داده، سپس چتF1 → F3 → F5 → F15 → F20.5
Front ۲پوسته/ناوبری + هسته‌ی محتواF2 → F4 → F6 → F7 → F8
Front ۳فضاهای اجتماعیF9 → F10 → F11 → F12 → F13 → F14
Front ۴دانش/پروژه + ماژول‌های سازمانی + راهبریF16 → F17 → F18 → F19 → F20.1-3
Backend ۱ (لید)زیرساخت REST + auth مشترک + پیام‌رسانB1 → B2 → B4 → B5 → B14
Backend ۲هسته‌ی محتوا: کاربران/فید/بلاگ/اخبارB6 → B7 → B8 → B9 → B15
Backend ۳اجتماعی + سازمانی: گروه/رویداد/رسانه/فروم → دانش/پروژه → سازمانیB10 → B11 → B12 → B13 → B16 → B17 → B18
QAمالک گیت‌های ۸-۹ پایپ‌لاین: کالکشن Postman هر ماژول، تست قرارداد، E2E (Playwright) مسیرهای حیاتی، رگرسیون هفتگیاز هفته ۱ موازی با همه؛ B19.2 و F20.6 با اوست
DevOpsB3 کامل + CI enforcement + staging دو سرویس + مانیتورینگ/لاگ + بکاپ + سوییچ GatewayB3 → CI هر دو ریپو → B19.3 → پایداری production
ریسک برنامه و پادزهر: (۱) Front چهارنفره زودتر از Backend تمام می‌کند (~هفته ۷) — از آن نقطه Front ۳ و ۴ به E2E/پولیش/دواپسِ فرانت شیفت می‌شوند، نه فیچرِ جدید. (۲) وابستگی همه به فاز ۰: هفته‌ی اول همه‌ی تمرکز دو لید + DevOps روی B1/B2/B3/F1/F2 است؛ بقیه در همان هفته کالکشن تست و شناخت قرارداد API را آماده می‌کنند. (۳) هر workstream مالک ثابت دارد تا context-switching حذف شود؛ جابه‌جایی فقط با تصمیم PO.
!

تصمیم‌های معماریِ الزام‌آور

پیش‌فرض‌هایی که هر دو تیم باید رعایت کنند تا کارها به هم برسند.

۱) مبدأ داده‌ی Front مستقل از پیاده‌ساز است. Front فقط با قراردادِ api/v1 کار می‌کند؛ نباید بداند پاسخ از PHP می‌آید یا Django. همه‌ی مسیرها از libs/axios.ts با baseURL=/api/v1 و rewrite در next.config.ts.
۲) auth واحد. استانداردِ توکن = JWT HS256 با رازِ مشترک OW_PASSWORD_PEPPER و claims {iat, exp, sub:userId}. Django باید همین را verify (و در فاز بعد صادر) کند، نه صرفاً خواندنِ ow_base_user_auth_token.
۳) قراردادِ پاسخ ثابت است. فهرست‌ها همیشه پاکتِ {data, links, meta} با meta.current_page/per_page/total؛ خطاها با کدهای 401/403/404/422 و بدنه‌ی یکسان. مرجعِ فیلدها: Swagger روی motonext.shub.ir/api/v1/docs/index — که در راستی‌آزماییِ ۱۴۰۵/۰۵/۱۱ پاسخِ ۴۰۴ داد و باید بازگردانده شود (جزئیات). تا آن زمان مرجعِ فیلدها = کنترلرها و Resourceهای ow_plugins/*/src/Http در برنچ API..
۴) دامنه‌بندی الزام‌آور است (الحاقیه ۱۴۰۵/۰۵/۱۴). هر موجودیت محتوایی سه فیلد scope/holdingId/companyId دارد؛ دامنه‌ی دید از عضویتِ کاربر محاسبه می‌شود نه از انتخاب او؛ و فیلتر/اعتبارسنجی باید سمت سرور باشد. مشخصات کامل و سناریوهای پذیرش: قرارداد دامنه‌بندی و دسترسی.
۰

پایه و زیرساخت

پیش‌نیازِ هر چیزِ دیگر. بدون این‌ها هر تسکِ بعدی روی شن ساخته می‌شود. دو تیم موازی کار می‌کنند.

◆ تیم Front
F1یکپارچه‌سازی HTTP client و پاک‌سازی بدهیِ فنیP1ناقص۱.۵ روز

دو client موازی هست: libs/axios.ts (زنده) و services/apiClient.ts (مرده). باید یکی بماند، منبعِ همه‌ی درخواست‌ها شود و کدهای بلااستفاده حذف شوند.

Subtaskها
#کارجزئیات فنیتخمین
F1.1حذف client مردهحذف services/apiClient.ts؛ انتقالِ ارجاع‌ها به libs/axios.ts۲ ساعت
F1.2حذف کد/وابستگیِ بلااستفادهحذف jsonwebtoken، social/homepage/*، social/menu/*، libs/routes.ts کهنه۳ ساعت
F1.3پیکربندی پایه‌ی axiosتثبیت baseURL/timeout، هدرهای پیش‌فرض، اتصالِ توکن از store در request interceptor۳ ساعت
F1.4ESLint/type-check سبزرفعِ importهای شکسته، اجرای tsc --noEmit و lint۴ ساعت
تعریف انجام (DoD)
  • یک HTTP client فعال به‌عنوان تنها منبع درخواست‌ها؛ کد/وابستگی مرده حذف؛ tsc --noEmit و ESLint سبز.
  • عبور از خط لولهٔ تحویل: تست سه‌لایه + CI سبز + پذیرش PO روی staging (لایت/دارک، دسکتاپ و ۳۷۵px) — فرآیند؛ بدون TODO/console.log و مستندسازی به‌روز.
وابستگی: ندارد (نقطه‌ی شروعِ Front).
F2سیستم طراحی، توکن‌های ظاهری و تمِ روشن/تیرهP1نساخته۴ روز
User Storyبه‌عنوان کاربر، می‌خواهم رابط با ظاهرِ یکدست، فارسی/RTL و قابلِ‌تعویض بین روشن/تیره ببینم، تا تجربه‌ی حرفه‌ای و خوانا داشته باشم.

themeی Tailwind خالی است. توکن‌های طراحیِ برگرفته از پروتوتایپ (رنگ/فاصله/شعاع/سایه/تایپ) و کامپوننت‌های پایه ساخته شوند. طبقِ اصولِ طراحی: مقیاسِ تایپِ مشخص و هویتِ منطبق بر دامنه‌ی سازمانی، نه پیش‌فرضِ جنریک.

EARS: هرگاه کاربر تمِ نمایش را تغییر دهد، سامانه باید کلِ رابط را بدون بارگذاری مجدد به تمِ انتخابی درآورد و انتخاب را ماندگار کند.

Subtaskها
#کارجزئیات فنیتخمین
F2.1استخراج توکن‌هااستخراج پالت رنگ/فاصله/تایپ از پروتوتایپ → CSS variables + tailwind.config۶ ساعت
F2.2تایپوگرافی و فونتمقیاس تایپ (وزن/عرض/فاصله)، فونت IRANYekan، RTL سراسری۴ ساعت
F2.3کامپوننت‌های پایهButton/Input/Select/Modal/Card/Badge/Toast/Skeleton/Table با variantها۱۲ ساعت
F2.4تمِ روشن/تیرهmountِ next-themes، دو تم، سوییچرِ ماندگار، اجتناب از flash۶ ساعت
F2.5حالت‌های وضعیتالگوهای loading/empty/error استاندارد۴ ساعت
معیار پذیرش
  • Given تمِ تیره فعال، When صفحه رندر شود، Then همه‌ی کامپوننت‌ها رنگِ درست و کنتراستِ AA دارند.
  • Given تعویضِ تم، When رفرش شود، Then تمِ قبلی بدون پرشِ رنگ بازیابی شود.
تعریف انجام (DoD)
  • توکن‌های طراحی و کامپوننت‌های پایه ساخته و مستند؛ سوییچ تم روشن/تیره ماندگار و بدون flash؛ کنتراست AA در هر دو تم.
  • عبور از خط لولهٔ تحویل: تست سه‌لایه + CI سبز + پذیرش PO روی staging (لایت/دارک، دسکتاپ و ۳۷۵px) — فرآیند؛ بدون TODO/console.log و مستندسازی به‌روز.
وابستگی: F1.
۱

احراز هویت، پوسته و لایه‌ی داده

دروازه‌ی ورود و اسکلتِ همه‌ی صفحه‌های بعدی. تا اینجا تمام نشود، هیچ صفحه‌ی محتوایی قابلِ‌اتکا نیست.

◆ تیم Front
F3جریان کاملِ احراز هویت: refresh، محافظتِ مسیر، logoutP1ناقص۳.۵ روز
User Storyبه‌عنوان عضو سازمان، می‌خواهم یک‌بار وارد شوم و نشستم بی‌آنکه مدام بیرون بیفتم حفظ شود، و مسیرهای خصوصی بدونِ ورود در دسترس نباشند، تا کارم امن و بی‌وقفه باشد.

login/register هست ولی response interceptor در libs/axios.ts no-op است، logout در useAuth.ts صرفاً stub است و هیچ middleware.tsای مسیرها را محافظت نمی‌کند.

EARS: هرگاه یک درخواستِ API با ۴۰۱ برگردد و refresh معتبر باشد، سامانه باید توکن را نو و همان درخواست را یک‌بار تکرار کند؛ در غیر این‌صورت کاربر را به ورود هدایت کند.

Subtaskها
#کارجزئیات فنیتخمین
F3.1منطق refreshinterceptor: بر ۴۰۱ فراخوانیِ POST /auth/refresh، صف‌بندیِ همزمان، retry یک‌باره، خروج بر شکست۸ ساعت
F3.2middleware مسیرmiddleware.ts گاردِ /workspace/* و /social/*؛ ریدایرکتِ مهمان به /login?next=۵ ساعت
F3.3logout واقعیابطالِ سمتِ سرور، پاک‌سازیِ store و توکن‌ها، ریدایرکت۳ ساعت
F3.4هیدریشنِ نشستبازخوانیِ کاربر از GET /auth/me در بوت، همگام‌سازی با store پایدار۴ ساعت
F3.5ثبت‌نام و خطاهااتصالِ فرمِ register، نمایشِ خطاهای ۴۲۲ فیلدی، loading۴ ساعت
F3.6تغییر رمزUIِ PATCH /auth/change-passwordتوجه: این endpoint در api/v1 وجود ندارد (فقط auth/login، auth/me، auth/permissions موجود است)؛ پیش‌نیازش B4 است۴ ساعت
معیار پذیرش
  • Given نشستِ منقضی، When کاربر عملی انجام دهد، Then توکن بی‌صدا نو و عمل بدونِ خروج ادامه یابد.
  • Given مهمان، When /workspace باز شود، Then به /login با پارامترِ بازگشت هدایت شود.
تعریف انجام (DoD)
  • ورود/خروج واقعی؛ refresh خودکار روی ۴۰۱ با صف و retry یک‌باره؛ middleware مسیرهای خصوصی؛ هیدریشن نشست از auth/me؛ خطای ۴۲۲ فیلدی.
  • عبور از خط لولهٔ تحویل: تست سه‌لایه + CI سبز + پذیرش PO روی staging (لایت/دارک، دسکتاپ و ۳۷۵px) — فرآیند؛ بدون TODO/console.log و مستندسازی به‌روز.
وابستگی: F1؛ داده: B4 (تا آماده‌شدن به PHP /auth/* وصل شود).
الحاقیه‌ی ۱۴۰۵/۰۵/۱۴ (این تسک را تغییر نمی‌دهد): در نسخه‌ی نهایی، پاسخ auth/me عضویت و تخصیص نقش را هم می‌آورد و نشستِ دامنه از همان ساخته می‌شود ← F25 و قرارداد دامنه‌بندی.
F4پوسته‌ی برنامه: چیدمان، سایدبار، هدر و ناوبریP1ناقص۳ روز
User Storyبه‌عنوان کاربر، می‌خواهم منوی کناریِ همه‌ی بخش‌ها، نوارِ بالا با پروفایل/اعلان/جستجو و مسیرِ فعال را ببینم، تا در ~۲۰ بخشِ محصول به‌راحتی جابه‌جا شوم.

پروتوتایپ سایدباری با ~۲۰ برچسب دارد (components/Sidebar.tsx). پوسته‌ی واکنش‌گرا با active-state، حالتِ موبایل و اسلاتِ محتوا ساخته شود تا صفحه‌های بعدی داخلش بنشینند.

Subtaskها
#کارجزئیات فنیتخمین
F4.1Layout و گریدlayoutِ سه‌بخشی (سایدبار/هدر/محتوا)، اسکرول مستقل، RTL۴ ساعت
F4.2سایدبار~۲۰ آیتم منطبق بر پروتوتایپ، گروه‌بندی، آیکن، active-state از مسیر۶ ساعت
F4.3هدرمنوی پروفایل، زنگِ اعلان (badge)، جستجوی سراسری، سوییچرِ تم۵ ساعت
F4.4ناوبریِ موبایلdrawer/بستنِ خودکار، breakpointها، focus trap۴ ساعت
F4.5Breadcrumb و عنوانعنوانِ صفحه‌ی پویا و مسیر بر اساس روت۳ ساعت
تعریف انجام (DoD)
  • پوسته/سایدبار/هدر ریسپانسیو تا ۳۷۵px بدون سرریز افقی؛ آیتم فعالِ مسیر هایلایت؛ ناوبری موبایل کامل.
  • عبور از خط لولهٔ تحویل: تست سه‌لایه + CI سبز + پذیرش PO روی staging (لایت/دارک، دسکتاپ و ۳۷۵px) — فرآیند؛ بدون TODO/console.log و مستندسازی به‌روز.
وابستگی: F2، F3.
F5لایه‌ی داده‌ی استاندارد (سرویس + hookهای Query/Mutation)P1ناقص۳ روز

الان فقط useAuth و useBlogs واقعی‌اند؛ بقیه روی آرایه‌ی mock با useState کار می‌کنند و حتی mock را mutate می‌کنند. یک الگوی تکرارپذیر (سرویس + hook) و ابزارهای مشترکِ TanStack Query ساخته شود تا هر بخشِ بعدی سریع و یکدست وصل شود.

Subtaskها
#کارجزئیات فنیتخمین
F5.1پیکربندی QueryClientdefaultها (staleTime/retry)، devtools، مرزهای خطا۳ ساعت
F5.2الگوی سرویسقالبِ services/api/<resource>.ts بر پایه‌ی blogs.ts؛ typeها از قرارداد۴ ساعت
F5.3hookهای عمومیuseList/useDetail/useCreate/useUpdate/useDelete با کلیدِ کش و invalidation۶ ساعت
F5.4ابزارِ صفحه‌بندی/فیلترهوکِ مشترکِ pagination/filter منطبق بر meta؛ infinite/صفحه‌ای۵ ساعت
F5.5مدیریت خطا و توستنگاشتِ ۴۲۲ به خطای فیلدی، توستِ سراسری، optimistic اختیاری۴ ساعت
تعریف انجام (DoD)
  • الگوی service+hook با کلید کش استاندارد؛ حالت loading=اسکلتون / empty=EmptyState / error=retry برای هر فهرست؛ invalidation پس از هر mutation.
  • عبور از خط لولهٔ تحویل: تست سه‌لایه + CI سبز + پذیرش PO روی staging (لایت/دارک، دسکتاپ و ۳۷۵px) — فرآیند؛ بدون TODO/console.log و مستندسازی به‌روز.
وابستگی: F1. پیش‌نیازِ همه‌ی تسک‌های محتوایی (F6 به بعد).
۲

هسته‌ی محتوا

پرتکرارترین بخش‌هایی که کاربر روزانه می‌بیند: داشبورد، تازه‌ها، بلاگ، کاربران/پروفایل. رسیدن تا اینجا = «محصولِ قابلِ‌نمایش».

◆ تیم Front
F6داشبورد فعالیت‌هاP1ناقص۴ روز
User Storyبه‌عنوان عضو، می‌خواهم در ورود، فیدِ فعالیت، رویدادهای پیشِ‌رو، اعلان‌ها و میان‌برهای کاری‌ام را یک‌جا ببینم، تا وضعیت روزم را سریع بفهمم.

/workspace و /social الان literalِ ثابت‌اند. ویجت‌های واقعی از چند endpoint ساخته شوند. مرجع: pages/Dashboard.tsx.

Subtaskها
#کارجزئیات فنیتخمین
F6.1ویجت فیدخلاصه از GET /feed، خالی/loading۶ ساعت
F6.2ویجت رویداد/اعلانGET /events، GET /notifications۶ ساعت
F6.3ویجت آمار/میان‌برکارت‌های آمار و میان‌برهای سریع منطبق بر پروتوتایپ۵ ساعت
F6.4چیدمان واکنش‌گراگریدِ ویجت‌ها، ترتیب موبایل، اسکلتون۴ ساعت
تعریف انجام (DoD)
  • داشبورد با دادهٔ واقعی API (بدون mock)؛ حالت خالی/loading؛ ویجت‌ها deep-link‌پذیر.
  • عبور از خط لولهٔ تحویل: تست سه‌لایه + CI سبز + پذیرش PO روی staging (لایت/دارک، دسکتاپ و ۳۷۵px) — فرآیند؛ بدون TODO/console.log و مستندسازی به‌روز.
وابستگی: F4، F5. داده: B7/B11/B15.
F7تازه‌ها / فید سازمانی (Channels)P1ناقص۶ روز
User Storyبه‌عنوان عضو، می‌خواهم مطلب (متن/عکس/فایل PDF/Word) منتشر کنم، آن را «انتشار عمومی» با یک «دسته‌بندی» بزنم و مطالبِ دیگران را لایک/نظر بدهم، تا جریانِ اطلاعاتِ سازمان زنده بماند.

/social/channels mock است. پیچیده‌ترین بخشِ فاز: کامپوزرِ انتشار با پیوست، دسته‌بندیِ انتشارِ عمومی (همان فیچرِ افزوده‌شده به پلاگین iisnewsfeedpin)، لایک/نظر/فوروارد و اسکرولِ بی‌نهایت.

EARS: هرگاه کاربر مطلبی را «انتشار عمومی» کند، سامانه باید امکانِ انتخابِ دسته‌بندیِ درختی را بدهد و مطلب را با آن دسته در فیدِ عمومی نمایش دهد.

Subtaskها
#کارجزئیات فنیتخمین
F7.1فهرست فیداسکرول بی‌نهایت از GET /feed، رندرِ انواع آیتم، اسکلتون۸ ساعت
F7.2کامپوزر انتشارPOST /feed: متن، منشن، پیش‌نمایشِ لینک۶ ساعت
F7.3پیوست فایلآپلودِ PDF/Word/عکس، نوار پیشرفت، اعتبارسنجیِ نوع/اندازه۶ ساعت
F7.4انتشار عمومی + دسته‌بندیfloatboxِ انتخابِ دسته‌ی درختی، اتصال به endpointِ دسته‌بندیِ انتشار۸ ساعت
F7.5تعامل‌هالایک/نظر/فوروارد با optimistic و invalidation۸ ساعت
F7.6فیلترِ دستهفیلترِ فیدِ عمومی بر اساس دسته‌بندی۴ ساعت
معیار پذیرش
  • Given فایلِ PDF پیوست، When مطلب منتشر شود، Then در فید با لینکِ دانلود نمایش داده شود.
  • Given انتشارِ عمومیِ دسته‌دار، When فیدِ عمومی با آن دسته فیلتر شود، Then فقط مطالبِ همان دسته دیده شوند.
تعریف انجام (DoD)
  • اسکرول بی‌نهایت فید؛ کامپوزر با پیوست PDF/Word/عکس و نوار پیشرفت؛ دسته‌بندی انتشار عمومی؛ لایک/نظر/فوروارد optimistic با invalidation.
  • عبور از خط لولهٔ تحویل: تست سه‌لایه + CI سبز + پذیرش PO روی staging (لایت/دارک، دسکتاپ و ۳۷۵px) — فرآیند؛ بدون TODO/console.log و مستندسازی به‌روز.
وابستگی: F5. داده: B7.
F8بلاگ (تکمیل: جزئیات و ساخت)P2ناقص۳ روز
User Storyبه‌عنوان نویسنده، می‌خواهم پستِ بلاگ بنویسم، ویرایش/حذف کنم و پست‌ها را کامل بخوانم، تا محتوای بلندِ سازمانی تولید و مصرف شود.

فهرست به /blogs وصل است. باقی‌مانده: صفحه‌ی جزئیات، ساخت/ویرایش با ادیتور، و رفعِ تگِ ساختگیِ blogsList.tsx:30.

Subtaskها
#کارجزئیات فنیتخمین
F8.1صفحه‌ی جزئیات/social/blogs/[id] از GET /blogs/:id، نظرات، متادیتا۶ ساعت
F8.2ساخت/ویرایشPOST/PATCH /blogs با ادیتورِ غنی، پیش‌نمایش، کاور۸ ساعت
F8.3حذف و رفعِ mockDELETE /blogs/:id با تأیید؛ حذفِ تگِ ساختگیِ blogsList.tsx:30۴ ساعت
F8.4فهرست و فیلترصفحه‌بندی، جستجو، فیلترِ نویسنده/تاریخ۴ ساعت
تعریف انجام (DoD)
  • بلاگ کامل: فهرست/جزئیات/ساخت/ویرایش/حذف متصل به API؛ حالت‌های خالی/خطا.
  • عبور از خط لولهٔ تحویل: تست سه‌لایه + CI سبز + پذیرش PO روی staging (لایت/دارک، دسکتاپ و ۳۷۵px) — فرآیند؛ بدون TODO/console.log و مستندسازی به‌روز.
وابستگی: F5. داده: B8 (قرارداد PHP آماده است).
F9کاربران، پروفایل و تنظیماتِ حسابP2ناقص۴ روز
User Storyبه‌عنوان کاربر، می‌خواهم پروفایلم را ببینم و ویرایش کنم، آواتار بگذارم و کاربرانِ دیگر را بیابم؛ و به‌عنوان مدیر، فهرستِ کاربران را مدیریت کنم.

جدولِ کاربران mock است و دکمه‌های Add/Edit مرده‌اند. فهرست، پروفایلِ عمومی، ویرایشِ پروفایلِ خود و آواتار ساخته شود.

Subtaskها
#کارجزئیات فنیتخمین
F9.1فهرست کاربرانGET /users با جستجو/صفحه‌بندی/فیلتر۵ ساعت
F9.2پروفایلِ عمومیصفحه‌ی پروفایل، تب‌های فعالیت/دوستان/رسانه۶ ساعت
F9.3ویرایش پروفایلPATCH /users/me، فیلدهای پویا، اعتبارسنجی۶ ساعت
F9.4آواتارآپلود/برش آواتار /users/me/avatar۵ ساعت
F9.5تنظیمات حسابیکپارچه‌سازی با تغییرِ رمز (F3.6)، حریمِ خصوصی، مسدودها۴ ساعت
تعریف انجام (DoD)
  • فهرست کاربران با جستجو/صفحه‌بندی؛ پروفایل عمومی؛ ویرایش پروفایل + آپلود/برش آواتار؛ تنظیمات حساب (رمز/حریم/مسدودها).
  • عبور از خط لولهٔ تحویل: تست سه‌لایه + CI سبز + پذیرش PO روی staging (لایت/دارک، دسکتاپ و ۳۷۵px) — فرآیند؛ بدون TODO/console.log و مستندسازی به‌روز.
وابستگی: F5. داده: B6.
۳

فضاهای اجتماعی

بخش‌های تعاملیِ سازمان: گروه‌ها، اخبار، رویدادها، رسانه، فروم. الگوهای فاز ۲ اینجا تکرار و مقیاس‌پذیر می‌شوند.

◆ تیم Front
F10گروه‌های تعاملیP2ناقص۶ روز
User Storyبه‌عنوان عضو، می‌خواهم گروه بسازم/عضو شوم، در دیوارِ گروه مطلب بگذارم، فایل به اشتراک بگذارم و اعضا را ببینم، تا کارِ تیمی حولِ موضوع شکل بگیرد.

/social/groups mock با handlerهای خالی است. نیازمندِ فهرست، جزئیاتِ گروه (دیوار/اعضا/فایل)، عضویت و ساخت.

Subtaskها
#کارجزئیات فنیتخمین
F10.1فهرست + ساختGET /groups، POST /groups، فیلتر/جستجو۶ ساعت
F10.2جزئیات + دیوار/groups/:id، فیدِ اختصاصیِ گروه۸ ساعت
F10.3اعضا و عضویت/members، /join، /invites، نقش‌ها۸ ساعت
F10.4فایل‌های گروه/files با آپلود/دانلود۶ ساعت
F10.5تنظیمات گروهویرایش/حریمِ خصوصی/حذف با مجوز۴ ساعت
تعریف انجام (DoD)
  • CRUD گروه؛ عضویت/خروج؛ تب‌های پست/انجمن/اعضا/اسناد؛ تغییر حریم خصوصی.
  • عبور از خط لولهٔ تحویل: تست سه‌لایه + CI سبز + پذیرش PO روی staging (لایت/دارک، دسکتاپ و ۳۷۵px) — فرآیند؛ بدون TODO/console.log و مستندسازی به‌روز.
وابستگی: F5، F7 (الگوی دیوار). داده: B10.
الحاقیه‌ی ۱۴۰۵/۰۵/۱۴ (این تسک را تغییر نمی‌دهد): نقش «ناظم گروه» در نسخه‌ی نهایی فقط در گروه خودش اکشن مدیریتی دارد ← F26.3.
F11اخبار سازمانP2نساخته۲.۵ روز
User Storyبه‌عنوان عضو، می‌خواهم اخبارِ رسمیِ سازمان را با جزئیات بخوانم؛ و به‌عنوان مدیرِ محتوا خبر منتشر کنم، تا اطلاع‌رسانیِ رسمی متمرکز باشد.

روتِ /social/news اصلاً وجود ندارد (۴۰۴). مرجع: News.tsx, NewsItemDetail.tsx.

Subtaskها
#کارجزئیات فنیتخمین
F11.1فهرست اخبارروتِ جدید، GET /news، دسته‌بندی/صفحه‌بندی۶ ساعت
F11.2جزئیات خبر/news/[id] از GET /news/:id، رسانه/گالری۵ ساعت
F11.3انتشار/ویرایشPOST/PATCH /news با مجوزِ مدیر۶ ساعت
F11.4ویجت داشبورداتصالِ آخرین اخبار به داشبورد۳ ساعت
تعریف انجام (DoD)
  • CRUD خبر با دامنهٔ انتشار (سراسری/هلدینگ/شرکت)؛ فقط نقش مدیر محتوا منتشر می‌کند.
  • عبور از خط لولهٔ تحویل: تست سه‌لایه + CI سبز + پذیرش PO روی staging (لایت/دارک، دسکتاپ و ۳۷۵px) — فرآیند؛ بدون TODO/console.log و مستندسازی به‌روز.
وابستگی: F5. داده: B9.
الحاقیه‌ی ۱۴۰۵/۰۵/۱۴ (این تسک را تغییر نمی‌دهد): خبر در نسخه‌ی نهایی فیلد topic (۵ مقدار) دارد ← F27.2.
F12رویدادها و جلساتP2نساخته۳.۵ روز
User Storyبه‌عنوان عضو، می‌خواهم رویداد بسازم، دیگران را دعوت کنم و حضورم را اعلام کنم و تقویمِ رویدادها را ببینم، تا جلساتِ سازمان هماهنگ شوند.

روتِ /social/events وجود ندارد. مرجع: Events.tsx, EventItemDetail.tsx. قراردادِ Backend از قبل تست‌شده است (Pest).

Subtaskها
#کارجزئیات فنیتخمین
F12.1فهرست/تقویمGET /events، لیست + تقویم، فیلترِ زمان۸ ساعت
F12.2ساخت/ویرایشPOST/PATCH /events با زمان/مکان/سطحِ دید۶ ساعت
F12.3دعوت و RSVP/invites، اعلامِ حضور، فهرستِ شرکت‌کنندگان۶ ساعت
F12.4جزئیات + پیوستجزئیات، فایل‌ها، حذف با مجوز۵ ساعت
تعریف انجام (DoD)
  • CRUD رویداد؛ تقویم شمسی/میلادی؛ دعوت اعضا.
  • عبور از خط لولهٔ تحویل: تست سه‌لایه + CI سبز + پذیرش PO روی staging (لایت/دارک، دسکتاپ و ۳۷۵px) — فرآیند؛ بدون TODO/console.log و مستندسازی به‌روز.
وابستگی: F5. داده: B11 (آماده).
الحاقیه‌ی ۱۴۰۵/۰۵/۱۴ (این تسک را تغییر نمی‌دهد): رویداد در نسخه‌ی نهایی category و capacity دارد ← F27.1.
F13تصاویر و ویدیو (رسانه)P2نساخته۳.۵ روز
User Storyبه‌عنوان عضو، می‌خواهم آلبومِ عکس و ویدیو بسازم، رسانه آپلود کنم و گالریِ سازمان را مرور کنم، تا محتوای بصری به اشتراک گذاشته شود.

روتِ /social/media وجود ندارد. مرجع: Media.tsx, MediaItemDetail.tsx.

Subtaskها
#کارجزئیات فنیتخمین
F13.1گالری عکس/آلبوم/photos، /albums، لایت‌باکس، صفحه‌بندی۸ ساعت
F13.2آپلود عکسآپلودِ چندتایی، پیش‌نمایش، انتخابِ آلبوم۶ ساعت
F13.3ویدیو/videos، پخش، آپلود/embed۶ ساعت
F13.4مدیریت آلبومساخت/ویرایش/حذف، کاور، مجوزِ مالکیت۵ ساعت
تعریف انجام (DoD)
  • آپلود/ویرایش/حذف رسانه؛ آلبوم؛ حریم خصوصی per-آیتم.
  • عبور از خط لولهٔ تحویل: تست سه‌لایه + CI سبز + پذیرش PO روی staging (لایت/دارک، دسکتاپ و ۳۷۵px) — فرآیند؛ بدون TODO/console.log و مستندسازی به‌روز.
وابستگی: F5. داده: B12 (آماده، با اصلاحاتِ IDOR).
الحاقیه‌ی ۱۴۰۵/۰۵/۱۴ (این تسک را تغییر نمی‌دهد): ویدیو در نسخه‌ی نهایی نشانِ duration روی بندانگشتی دارد ← F27.3.
F14انجمن (فروم)P2نساخته۳ روز
User Storyبه‌عنوان عضو، می‌خواهم موضوع بسازم، پاسخ بدهم و بحث‌های دسته‌بندی‌شده را دنبال کنم، تا گفتگوهای ماندگارِ سازمان شکل بگیرد.

روتِ /social/forums وجود ندارد. مرجع: Forum.tsx و نوعِ ForumTopic.

Subtaskها
#کارجزئیات فنیتخمین
F14.1دسته‌ها/بخش‌هافهرستِ بخش‌ها و موضوع‌ها GET /forum/topics۶ ساعت
F14.2موضوع + پست‌ها/topics/:id/posts، صفحه‌بندیِ پاسخ‌ها، نقل‌قول۸ ساعت
F14.3ساخت موضوع/پاسخادیتور، پیوست، اعلانِ اشتراک۶ ساعت
F14.4مدیریتقفل/پین/انتقال با مجوزِ ناظر۴ ساعت
تعریف انجام (DoD)
  • CRUD موضوع و پاسخ؛ علامت «حل‌شده»؛ پذیرش پاسخ.
  • عبور از خط لولهٔ تحویل: تست سه‌لایه + CI سبز + پذیرش PO روی staging (لایت/دارک، دسکتاپ و ۳۷۵px) — فرآیند؛ بدون TODO/console.log و مستندسازی به‌روز.
وابستگی: F5. داده: B13.
۴

ارتباط و همکاری

ابزارهای کارِ روزمره: پیام‌رسان، مدیریت دانش، مدیریت پروژه (کانبان).

◆ تیم Front
F15گفتگو (پیام‌رسان)P3ناقص۶ روز
User Storyبه‌عنوان عضو، می‌خواهم گفتگوی خصوصی/گروهی داشته باشم، پیام و فایل بفرستم و پیامِ جدید را بی‌درنگ ببینم، تا هماهنگیِ سریع ممکن شود.

در پروتوتایپ و تبِ چتِ پروژه UIِ کاملِ mock هست. اتصال به پیام‌رسانِ واقعی؛ به‌روزرسانیِ بی‌درنگ (polling یا WebSocket).

#کارجزئیات فنیتخمین
F15.1فهرست گفتگوهاGET /conversations، شمارشِ نخوانده، جستجو۶ ساعت
F15.2پنجره‌ی پیام/messages، ارسال، بارگذاریِ تاریخچه (اسکرول معکوس)۸ ساعت
F15.3بی‌درنگpolling/WebSocket، وضعیتِ خوانده، تایپینگ۸ ساعت
F15.4پیوستارسالِ فایل/عکس، پیش‌نمایش۶ ساعت
تعریف انجام (DoD)
  • کانال/DM/رشتهٔ پاسخ/reaction/پین/ذخیره/دستور اسلش در سطح فعلی دمو، همگی کارکردی.
  • عبور از خط لولهٔ تحویل: تست سه‌لایه + CI سبز + پذیرش PO روی staging (لایت/دارک، دسکتاپ و ۳۷۵px) — فرآیند؛ بدون TODO/console.log و مستندسازی به‌روز.
وابستگی: F5. داده: B14.
الحاقیه‌ی ۱۴۰۵/۰۵/۱۴ (این تسک را تغییر نمی‌دهد): کانال‌ها در نسخه‌ی نهایی موجودیتِ دامنه‌دارند و فهرست با نشست فیلتر می‌شود (DM بدون تغییر) ← F25.3.
الحاقیه‌ی ۱۴۰۵/۰۵/۱۴ (این تسک را تغییر نمی‌دهد): خواسته‌ی نهایی، هم‌ترازی کامل با تلگرام است — ادامه‌ی این تسک در چهار تسک F29–F32 و مرجع کاملش مشخصات پیام‌رسان است.
F16مدیریت دانشP3نساخته۲.۵ روز
User Storyبه‌عنوان عضو، می‌خواهم اسناد و راهنماهای سازمانی را در یک کتابخانه‌ی دسته‌بندی‌شده بیابم و بخوانم، تا دانشِ سازمان حفظ و بازیابی شود.
#کارجزئیات فنیتخمین
F16.1کتابخانهGET /knowledge/documents، درختِ دسته، جستجو۶ ساعت
F16.2نمای سندنمایشگر/دانلود، متادیتا، نسخه۶ ساعت
F16.3افزودن سندآپلود/دسته‌بندی با مجوز۵ ساعت
تعریف انجام (DoD)
  • آپلود/دسته‌بندی/جستجو/نسخه‌گذاری سند؛ سطل بازیافت ۳۰ روزه.
  • عبور از خط لولهٔ تحویل: تست سه‌لایه + CI سبز + پذیرش PO روی staging (لایت/دارک، دسکتاپ و ۳۷۵px) — فرآیند؛ بدون TODO/console.log و مستندسازی به‌روز.
وابستگی: F5. داده: B16.
F17مدیریت پروژه (کانبان + چت پروژه)P3ناقص۷ روز
User Storyبه‌عنوان عضوِ تیم، می‌خواهم پروژه بسازم، وظایف را روی بردِ کانبان بکشم‌و‌رها کنم، اعضا را تخصیص دهم و در چتِ پروژه گفتگو کنم، تا کارِ تیمی مدیریت شود.

/workspace/projects (فهرست/جزئیات/کانبان/چت) کامل ولی mock است. اتصالِ همه به API واقعی، از جمله drag-and-drop با persist.

#کارجزئیات فنیتخمین
F17.1فهرست/ساخت پروژهGET/POST /projects، اعضا، وضعیت۶ ساعت
F17.2بردِ کانبانستون‌ها/کارت‌ها، drag-and-drop، persistِ ترتیب/وضعیت۱۲ ساعت
F17.3وظیفهجزئیاتِ وظیفه، تخصیص، سررسید، چک‌لیست، پیوست۸ ساعت
F17.4چتِ پروژهاستفاده‌ی مجددِ کامپوننتِ چت (F15) در بستر پروژه۶ ساعت
F17.5نماهالیست/کانبان/تقویم، فیلترِ عضو/وضعیت۴ ساعت
تعریف انجام (DoD)
  • بورد کانبان با CRUD تسک؛ گانت؛ چت پروژه؛ بودجه.
  • عبور از خط لولهٔ تحویل: تست سه‌لایه + CI سبز + پذیرش PO روی staging (لایت/دارک، دسکتاپ و ۳۷۵px) — فرآیند؛ بدون TODO/console.log و مستندسازی به‌روز.
وابستگی: F5، F15. داده: B16.
۵

ماژول‌های سازمانی

بخش‌های تخصصیِ سازمان: قراردادها، صندوقِ نوآوری، پژوهش، آموزش، نظرسنجی/مسابقات/ارزیابی.

◆ تیم Front
F18ماژول‌های سازمانی (قرارداد/صندوق/پژوهش/آموزش)P3نساخته۸ روز
User Storyبه‌عنوان کاربرِ سازمانی، می‌خواهم قراردادها، فراخوان‌های صندوقِ نوآوری، پروژه‌های پژوهشی و دوره‌های آموزشی را ببینم و در آن‌ها اقدام کنم، تا فرایندهای سازمانی دیجیتال شوند.

چهار بخشِ مجزا با روت‌های موجودنبوده. مرجع: Contracts/Funds/Research/Training. هر بخش الگوی فهرست/جزئیات/فرم دارد.

#کارجزئیات فنیتخمین
F18.1قراردادهاروت، فهرست/جزئیات، وضعیت/گردش‌کار۱۰ ساعت
F18.2صندوقِ نوآوریفراخوان‌ها /cfps، ثبتِ درخواست /grants۱۲ ساعت
F18.3پژوهشفهرست/جزئیاتِ پروژه‌های پژوهشی، فناوری‌ها۱۰ ساعت
F18.4آموزشدوره‌ها، ثبت‌نام، پیشرفت۱۰ ساعت
F18.5یکپارچه‌سازی منوافزودن به سایدبار/داشبورد، مجوزها۴ ساعت
تعریف انجام (DoD)
  • چهار بخش قرارداد/صندوق/پژوهش/آموزش با فهرست/جزئیات/فرم و گردش‌کار وضعیت.
  • عبور از خط لولهٔ تحویل: تست سه‌لایه + CI سبز + پذیرش PO روی staging (لایت/دارک، دسکتاپ و ۳۷۵px) — فرآیند؛ بدون TODO/console.log و مستندسازی به‌روز.
وابستگی: F5. داده: B17.
۶

راهبری، جستجو، پولیش و تحویل

بخش‌های مدیریتی و پایانی که محصول را «کامل» و آماده‌ی تحویل می‌کنند.

◆ تیم Front
F19پنل راهبری، ظاهر/برندسازی و گزارش‌گیریP3نساخته۸ روز
User Storyبه‌عنوان مدیرِ سامانه، می‌خواهم کاربران/محتوا/تنظیمات را مدیریت کنم، ظاهر و برندِ سازمان را تغییر دهم و گزارش‌های کاربری بگیرم، تا سامانه را اداره کنم.
#کارجزئیات فنیتخمین
F19.1داشبوردِ راهبریآمار کلی، مدیریتِ کاربران/نقش‌ها /admin/*۱۰ ساعت
F19.2ظاهر/برندلوگو/رنگ/نامِ سازمان (per-tenant)، پیش‌نمایشِ زنده۱۰ ساعت
F19.3گزارش‌گیریگزارش‌های کاربری/محتوایی، نمودار، خروجی۱۰ ساعت
F19.4مدیریتِ محتوا/مجوزابزارهای مدیریتِ محتوا و نقش/دسترسی۶ ساعت
تعریف انجام (DoD)
  • پنل راهبری: مدیریت کاربر/نقش، ظاهر/برند per-tenant با پیش‌نمایش زنده، گزارش‌گیری.
  • عبور از خط لولهٔ تحویل: تست سه‌لایه + CI سبز + پذیرش PO روی staging (لایت/دارک، دسکتاپ و ۳۷۵px) — فرآیند؛ بدون TODO/console.log و مستندسازی به‌روز.
وابستگی: F5، F9. داده: endpointهای admin.
الحاقیه‌ی ۱۴۰۵/۰۵/۱۴ (این تسک را تغییر نمی‌دهد): پنل راهبری در نسخه‌ی نهایی «سیستم و ورود یکپارچه»، CRUD هلدینگ/شرکت و تخصیص (کاربر، نقش، دامنه) دارد ← F28.
F20اعلان، جستجوی سراسری، راهنما، دستیار و پولیشِ نهاییP3ناقص۸ روز
User Storyبه‌عنوان کاربر، می‌خواهم اعلان‌هایم را ببینم، در کلِ سامانه جستجو کنم، راهنما بگیرم و از دستیارِ هوشمند کمک بخواهم، و رابطی روان و بی‌نقص داشته باشم.
#کارجزئیات فنیتخمین
F20.1مرکز اعلانGET /notifications، خواندن/تنظیمات، هدرِ زنگ۶ ساعت
F20.2جستجوی سراسریGET /search، نتایجِ چنددسته، صفحه‌ی نتایج۸ ساعت
F20.3راهنما و دستیارصفحه‌ی راهنما، دستیارِ هوشمند (طبقِ پروتوتایپ)۶ ساعت
F20.4پولیشِ a11y/RTLپیمایشِ کیبورد، aria، کنتراست، بازبینیِ RTL همه‌ی صفحه‌ها۶ ساعت
F20.5عملکردcode-splitting، بهینه‌ی تصویر، بازبینیِ کش، Lighthouse۶ ساعت
F20.6تستِ E2Eسناریوهای کلیدی با Playwright۶ ساعت
تعریف انجام (DoD)
  • مرکز اعلان؛ جستجوی سراسری؛ راهنما/دستیار؛ پولیش a11y/RTL؛ Lighthouse سبز؛ E2E مسیرهای حیاتی.
  • عبور از خط لولهٔ تحویل: تست سه‌لایه + CI سبز + پذیرش PO روی staging (لایت/دارک، دسکتاپ و ۳۷۵px) — فرآیند؛ بدون TODO/console.log و مستندسازی به‌روز.
وابستگی: همه‌ی تسک‌های Front.
+

دامنه‌ی کشف‌شده — افزوده‌ی ۱۴۰۵/۰۵/۱۱

تطبیقِ کاملِ صفحه‌های demo.shub.ir با فهرستِ F1–F20 نشان داد چند بخشِ ساخته‌شده‌ی پروتوتایپ هیچ تسکی ندارند. برای این‌که برنامه‌ی در حالِ اجرا به‌هم نخورد، این‌ها با شماره‌های تازه آمده‌اند و در جمعِ فازهای ۰ تا ۶ حساب نشده‌اند. زمان‌بندی‌شان تصمیمِ PO است.

◆ تیم Front
F21نمای عمومی: لندینگ، ویترینِ محتوای عمومی و صفحه‌ی جزئیاتP2نساخته۵ روز
User Storyبه‌عنوان بازدیدکننده‌ی بدونِ حساب، می‌خواهم معرفیِ سازمان و محتوای عمومیِ آن (اخبار، رویداد، بلاگ، رسانه، انجمن) را ببینم، تا پیش از ثبت‌نام با سازمان آشنا شوم — و به‌عنوان تیمِ فروش، بتوانم همین صفحه را در جلسه نشان دهم.

تنها سطحِ بدونِ ورودِ محصول. در پروتوتایپ ~۱۴۷۰ خط است (Landing، PublicShowcase، PublicItemDetail) و در «سناریوی دموی فروش» ایستگاهِ پایانی است، ولی در F1–F20 نیامده. داده‌اش همان محتوایی است که visibility=عمومی دارد.

EARS: هرگاه محتوایی «عمومی» علامت بخورد، سامانه باید آن را بدونِ نیاز به ورود در ویترینِ عمومی نمایش دهد و بقیه را پنهان نگه دارد.

Subtaskها
#کارجزئیات فنیتخمین
F21.1لندینگصفحه‌ی معرفی، SSR برای SEO، CTAِ ورود/ثبت‌نام۸ ساعت
F21.2ویترینِ عمومیتب‌های اخبار/رویداد/بلاگ/رسانه/انجمن با فیلترِ عمومی، بدونِ توکن۱۲ ساعت
F21.3جزئیاتِ آیتمِ عمومیصفحه‌ی deep-link‌پذیر هر آیتم + متادیتای اشتراک‌گذاری۱۰ ساعت
F21.4گاردِ مهمانهدایتِ اقدام‌های نیازمندِ ورود به /login?next=۴ ساعت
F21.5SEO و کاراییعنوان/توضیح هر صفحه، sitemap، Lighthouse سبز۶ ساعت
معیار پذیرش
  • Given کاربرِ بدونِ حساب، When آدرسِ آیتمِ عمومی را باز کند، Then محتوا بدونِ ورود دیده شود.
  • Given محتوای غیرِعمومی، When مهمان تلاش به دیدنش کند، Then به ورود هدایت شود و محتوا لو نرود.
تعریف انجام (DoD)
  • لندینگ + ویترین عمومی + جزئیات آیتم، همگی بدون ورود؛ گاردِ اقدامِ نیازمند ورود؛ SEO و sitemap.
  • عبور از خط لولهٔ تحویل: تست سه‌لایه + CI سبز + پذیرش PO روی staging (لایت/دارک، دسکتاپ و ۳۷۵px) — فرآیند؛ بدون TODO/console.log و مستندسازی به‌روز.
وابستگی: F5. داده: endpointهای عمومیِ محتوا (نیازمندِ حالتِ بدونِ توکن — امروز همه‌ی مسیرها ۴۰۱ می‌دهند؛ تسکِ Backend متناظر باید تعریف شود).
F22دوستان و دنبال‌کردن (صفحه‌ی مستقل)P3نساخته۲ روز
User Storyبه‌عنوان عضو، می‌خواهم درخواست‌های دوستی‌ام را مدیریت کنم و افراد را دنبال کنم، تا شبکه‌ی ارتباطی‌ام در سازمان شکل بگیرد.

Backend این ماژول را دارد (B15)، اما در برنامه‌ی Front فقط به‌صورت «تبِ دوستان» داخلِ F9.2 آمده؛ پروتوتایپ یک صفحه‌ی مستقل با درخواست‌ها/پیشنهادها دارد. قرارداد: GET /friends، GET /friends/requests، POST /friends/{id}/accept، POST|DELETE /users/{id}/follow.

Subtaskها
#کارجزئیات فنیتخمین
F22.1فهرست دوستانGET /friends با جستجو/صفحه‌بندی۴ ساعت
F22.2درخواست‌هاپذیرش/رد با optimistic و invalidation۵ ساعت
F22.3دنبال‌کردندکمه‌ی follow/unfollow در پروفایل و فهرستِ کاربران۴ ساعت
F22.4اتصال به F9هم‌راستایی با تبِ دوستانِ پروفایل، حذفِ دوباره‌کاری۳ ساعت
تعریف انجام (DoD)
  • صفحهٔ مستقل دوستان: فهرست/درخواست/دنبال‌کردن؛ هم‌راستا با تب پروفایل (F9) بدون دوباره‌کاری.
  • عبور از خط لولهٔ تحویل: تست سه‌لایه + CI سبز + پذیرش PO روی staging (لایت/دارک، دسکتاپ و ۳۷۵px) — فرآیند؛ بدون TODO/console.log و مستندسازی به‌روز.
وابستگی: F5، F9. داده: B15. وضعیتِ امروز: /friends روی production مستقر نیست.
F23نظرسنجی و آزمون · مسابقات و چالش‌هاP3نساخته۴ روز
User Storyبه‌عنوان عضو، می‌خواهم در نظرسنجی‌ها و آزمون‌های سازمان شرکت کنم و مسابقات و چالش‌ها را ببینم و ثبت‌نام کنم، تا در برنامه‌های سازمان مشارکت داشته باشم.

در سرفصلِ فاز ۵ نام برده شده‌اند («نظرسنجی/مسابقات») و Backend تسکِ B18 را دارد، اما هیچ subtaskِ Frontی برایشان تعریف نشده بود. مرجع: Polls و Competitions در پروتوتایپ. قرارداد: /polls (+{id}/vote/quizzes، /competitions، /challenges.

Subtaskها
#کارجزئیات فنیتخمین
F23.1نظرسنجیفهرست/جزئیات، رأی‌دهی، نمایشِ نتیجه پس از رأی۸ ساعت
F23.2آزموننمایشِ سوال‌ها، ثبتِ پاسخ، نتیجه۸ ساعت
F23.3مسابقات و چالش‌هافهرست/جزئیات، ثبت‌نام، ارسالِ اثر، جدولِ امتیاز۱۰ ساعت
F23.4یکپارچه‌سازی منو و مجوزسایدبار، دسترسیِ نقش‌محور۴ ساعت
تعریف انجام (DoD)
  • نظرسنجی (رأی+نتیجه)، آزمون، مسابقه/چالش با ثبت‌نام و جدول امتیاز.
  • عبور از خط لولهٔ تحویل: تست سه‌لایه + CI سبز + پذیرش PO روی staging (لایت/دارک، دسکتاپ و ۳۷۵px) — فرآیند؛ بدون TODO/console.log و مستندسازی به‌روز.
وابستگی: F5. داده: B18. وضعیتِ امروز: هیچ‌کدام از این مسیرها روی production مستقر نیستند.
F24تیکت پشتیبانیP3نساخته۲ روز
User Storyبه‌عنوان کاربر، می‌خواهم برای مشکلاتم تیکت ثبت کنم و روندِ پاسخ را دنبال کنم، تا پشتیبانی قابلِ پیگیری باشد.

صفحه‌ی Tickets در پروتوتایپ وجود دارد و PHP هم ۱۲ عملیاتِ آماده دارد (/tickets، /ticket-categories، /ticket-orders)، ولی در برنامه‌ی هیچ‌کدام از دو تیم نیامده بود.

Subtaskها
#کارجزئیات فنیتخمین
F24.1فهرست و فیلترGET /tickets با وضعیت/دسته/صفحه‌بندی۵ ساعت
F24.2ثبت تیکتPOST /tickets، انتخابِ دسته، پیوست۵ ساعت
F24.3گفتگوی تیکتجزئیات، پاسخ‌ها، تغییرِ وضعیت۶ ساعت
تعریف انجام (DoD)
  • تیکت: فهرست/ثبت با پیوست/گفتگو/تغییر وضعیت.
  • عبور از خط لولهٔ تحویل: تست سه‌لایه + CI سبز + پذیرش PO روی staging (لایت/دارک، دسکتاپ و ۳۷۵px) — فرآیند؛ بدون TODO/console.log و مستندسازی به‌روز.
وابستگی: F5. داده: B20.
جمعِ دامنه‌ی افزوده: ~۱۳ روزِ Front (F21–F24) + ~۲ روزِ Backend (B20). این عدد عمداً در جدولِ «خلاصه‌ی زمان‌بندی» بالا وارد نشده تا تخمین‌های در حالِ اجرا دست‌نخورده بمانند. جایزه‌ی نوآوری (/dashboard/award) نیز پس از نگارشِ تسک‌ها صفحه‌ی مستقل شد و به‌عنوان زیرکارِ F18.5 پوشش داده می‌شود.

هم‌ترازی با نسخه‌ی نهایی demo.shub.ir — الحاقیه ۱۴۰۵/۰۵/۱۴

از نگارش قبلی این سند، مرجعِ پذیرش (demo.shub.ir) جلو رفته است: دامنه‌بندی «سیستم ← هلدینگ ← شرکت»، ناوبری نقش‌محور، ناظم گروه، فیلدهای محتوایی جدید و پایه‌ی دسترس‌پذیری WCAG. هیچ تسک قبلی تغییر نکرده — همه‌ی این دلتاها تسک‌های تازه‌اند تا کارهای در جریان مختل نشود؛ مرجع فنی کامل: قرارداد الزام‌آور دامنه‌بندی.

◆ تیم Front
F25نشست و دامنه‌بندی سمت کاربرP1نساخته۴ روز
User Storyبه‌عنوان عضو سازمان، بدون هیچ انتخابی فقط محتوای دامنه‌ی عضویتم را ببینم؛ و اگر عضو چند شرکتم، با سوییچر هدر فقط بین همان‌ها جابه‌جا شوم.

دامنه از auth/me می‌آید (عضویت + تخصیص نقش) و کاربر آن را انتخاب نمی‌کند. مرجع رفتار: سوییچر هدر، نشان دامنه روی ردیف‌ها، و انتخاب‌گر دامنه‌ی انتشارِ مجوزمحور در دمو.

Subtaskها
#کارجزئیات فنیتخمین
F25.1مدل نشستخواندن memberCompanyIds و grant از auth/me؛ context مشترک (معادل TenancyContext دمو)۶ ساعت
F25.2سوییچر هدرتک‌عضویتی: برچسب خواندنی؛ چندعضویتی: فقط شرکت‌های عضو؛ راهبر: «مشاهده به‌عنوان»؛ در موبایل آیکنی۶ ساعت
F25.3نشان و فیلتر فهرست‌هاScopeBadge روی ردیف/کارت همه‌ی ماژول‌ها + پارامتر دامنه در queryها۸ ساعت
F25.4انتشار مجوزمحورScopePicker فقط دامنه‌های مجاز نشست؛ عضو عادی: بدون گزینه («منتشر می‌شود برای: X»)۶ ساعت
F25.5مدیریت خطای دامنه۴۰۴ آیتم خارج از دامنه، ۴۲۲ انتشار نامجاز — پیام روشن + بازگشت۴ ساعت
معیار پذیرش (سناریوهای مرجع در قرارداد، بخش ۶)
  • Given کاربر عضو یک شرکت، When وارد شود، Then سوییچر نبیند و فهرست‌ها فقط سراسری+شرکتش باشند.
  • Given عضو ۳ شرکت، When سوییچر را باز کند، Then دقیقاً همان ۳ شرکت را ببیند و محتوای فهرست با سوییچ عوض شود.
تعریف انجام (DoD)
  • نشست از auth/me ساخته می‌شود؛ سوییچر فقط برای چندعضویتی/راهبر؛ نشان دامنه روی همهٔ ردیف‌ها؛ انتشار مجوزمحور؛ پنج سناریوی پذیرشِ قرارداد (u1/u3/u4/u7/u12) عبور می‌کنند.
  • عبور از خط لولهٔ تحویل: تست سه‌لایه + CI سبز + پذیرش PO روی staging (لایت/دارک، دسکتاپ و ۳۷۵px) — فرآیند؛ بدون TODO/console.log و مستندسازی به‌روز.
وابستگی: F3، F5. داده: B21، B22.
F26ناوبری و اکشن‌های نقش‌محور + ناظم گروهP1نساخته۲ روز
User Storyبه‌عنوان عضو عادی، «پنل راهبری» را نه در منو ببینم و نه با آدرس مستقیم باز کنم؛ و به‌عنوان ناظم گروه فقط در گروه خودم اکشن مدیریتی داشته باشم.
Subtaskها
#کارجزئیات فنیتخمین
F26.1فیلتر ناوبریآیتم‌های adminOnly در سایدبار/منوی پروفایل/منوی موبایل بر اساس مجوز مؤثر۴ ساعت
F26.2گارد مسیرمسیر admin برای نقش بدون اختیار: صفحه‌ی «دسترسی ندارید» (نه ریدایرکت خاموش)۳ ساعت
F26.3ناظم گروهویرایش/حذف گروه، اخراج عضو و تغییر حریم فقط برای canModerateGroup — مثبت و منفی (g1/g2) تست شود۵ ساعت
تعریف انجام (DoD)
  • آیتم‌های adminOnly بر اساس مجوز مؤثر پنهان؛ مسیر admin برای نقش بدون اختیار «دسترسی ندارید»؛ ناظم گروه فقط در گروه خودش (مثبت g1 / منفی g2).
  • عبور از خط لولهٔ تحویل: تست سه‌لایه + CI سبز + پذیرش PO روی staging (لایت/دارک، دسکتاپ و ۳۷۵px) — فرآیند؛ بدون TODO/console.log و مستندسازی به‌روز.
وابستگی: F25. داده: B21.
F27فیلدهای محتوایی جدید در فرم‌ها، فهرست‌ها و فیلترهاP2نساخته۲ روز

مطابق «قرارداد دامنه‌بندی، بخش ۵»: دسته‌ی رویداد (۵ مقدار) + ظرفیت، موضوع خبر (۵ مقدار)، مدت ویدیو. در نمای عمومی چیپ فیلتر، در داشبورد فیلد فرم + ستون/نشان.

Subtaskها
#کارجزئیات فنیتخمین
F27.1رویدادselect دسته + ورودی ظرفیت در فرم؛ «X از Y ظرفیت»؛ چیپ «دسته:» در نمای عمومی۶ ساعت
F27.2خبرselect موضوع در فرم؛ تگ موضوع روی هیرو/کارت/ردیف؛ چیپ «موضوع:» در نمای عمومی۵ ساعت
F27.3رسانهنشان مدت (mm:ss) روی بندانگشتی ویدیوها در هر دو نما۳ ساعت
تعریف انجام (DoD)
  • select دسته+ظرفیت رویداد، select موضوع خبر، نشان مدت ویدیو در فرم و فهرست؛ چیپ فیلتر «دسته/موضوع» در نمای عمومی.
  • عبور از خط لولهٔ تحویل: تست سه‌لایه + CI سبز + پذیرش PO روی staging (لایت/دارک، دسکتاپ و ۳۷۵px) — فرآیند؛ بدون TODO/console.log و مستندسازی به‌روز.
وابستگی: F11، F12، F13 (تحویل‌شده‌ی همان‌ها را گسترش می‌دهد — بازکاری نیست). داده: B24.
F28پنل راهبری نسخه‌ی نهایی: هویت سیستم، SSO و ساختار سازمانیP2نساخته۴ روز
User Storyبه‌عنوان مدیر، هویت و روش ورود این نصب را تنظیم کنم؛ هلدینگ/شرکت بسازم و نقش را با دامنه به کاربر بدهم — هر کدام فقط در حد اختیار خودم.

دلتای F19 نسبت به دموی نهایی — F19 دست‌نخورده می‌ماند. بخش «سازمان‌های مشتری» در دمو حذف و جایگزین شده است.

Subtaskها
#کارجزئیات فنیتخمین
F28.1سیستم و ورود یکپارچهفرم هویت (نام/دامنه/برند) + پیکربندی SSO (LDAP/SAML/OIDC/OTP) + تست اتصال + سوییچ‌های provisioning۸ ساعت
F28.2هلدینگ‌ها و شرکت‌هاCRUD دو سطح + فعال/غیرفعال — محدود به زیرمجموعه‌ی مدیرِ واردشده (زنجیره‌ی واگذاری)۱۰ ساعت
F28.3تخصیص (کاربر، نقش، دامنه)دو انتخاب‌گر کنار هم: نقش + دامنه (سیستم/هلدینگ/شرکت/گروه)؛ فهرست کاربران محدود به دامنه‌ی مدیر۸ ساعت
F28.4عضویت کاربرانافزودن/حذف کاربر به شرکت توسط مدیر شرکت؛ نمایش عضویت‌ها در فهرست۶ ساعت
تعریف انجام (DoD)
  • فرم هویت+SSO با تست اتصال؛ CRUD هلدینگ/شرکت محدود به زیرمجموعهٔ مدیر؛ تخصیص (کاربر،نقش،دامنه) و عضویت — زنجیرهٔ واگذاری رعایت شود.
  • عبور از خط لولهٔ تحویل: تست سه‌لایه + CI سبز + پذیرش PO روی staging (لایت/دارک، دسکتاپ و ۳۷۵px) — فرآیند؛ بدون TODO/console.log و مستندسازی به‌روز.
وابستگی: F19، F25، F26. داده: B21، B23.
جمعِ الحاقیه‌ی Front: ~۱۲ روز (F25–F28) — جدا از جمع فازهای ۰ تا ۶ و جدا از F21–F24، تا تخمین‌های در حال اجرا دست‌نخورده بمانند. یادآوری کیفیت: خطِ پایه‌ی دسترس‌پذیریِ دمو «صفر نقض WCAG A/AA در axe» است — توکن‌های رنگ اصلاح‌شده (ink-400 #5d6b81، ink-500 #5b6678، navy-950 #0b1220) مبنای F2 هستند و نباید به مقادیر کم‌کنتراست قبلی برگردند.

پیام‌رسان کامل — هم‌ترازی با تلگرام (الحاقیه ۱۴۰۵/۰۵/۱۴)

خواسته‌ی نهایی محصول: پیام‌رسان باید تمام قابلیت‌های تلگرام را (به‌جز موارد حذف عمدی) به‌علاوه‌ی قابلیت‌های سازمانی داشته باشد. فهرست کامل قابلیت‌ها، جزئیات هر کدام و وضعیتشان در دمو: مشخصات کامل پیام‌رسان. F15 دست‌نخورده است — این چهار تسک ادامه‌ی آن‌اند و پس از تحویل F15 شروع می‌شوند.

◆ تیم Front
F29هسته‌ی پیام‌رسانی در سطح تلگرامP1نساخته۸ روز
User Storyبه‌عنوان عضو، همان روانی و کاملی که از تلگرام انتظار دارم را در گفتگوی سازمانی داشته باشم: ویرایش/حذف با قاعده، نقل‌قول بخشی از متن، فوروارد چندتایی، پیام زمان‌بندی‌شده و قالب‌بندی کامل.
Subtaskها (مرجع جزئیات: مشخصات پیام‌رسان، بخش ۱ و ۲)
#کارجزئیات فنیتخمین
F29.1چرخه‌ی پیامحذف برای من/همه با پنجره؛ ویرایش با پنجره و برچسب؛ انتخاب چندتایی → فوروارد/حذف/کپی گروهی۱۰ ساعت
F29.2پاسخ و نقل‌قولQuote بخشی از متن (انتخاب متن → نقل‌قول)، پرش به پیام اصل با هایلایت۶ ساعت
F29.3فوروارد پیشرفتهچند مقصد، با/بدون نام فرستنده؛ مقصدها محدود به دامنه‌ی مجاز۶ ساعت
F29.4زمان‌بندی و بی‌صداSchedule picker شمسی + صف پیام‌های زمان‌بندی‌شده‌ی قابل‌ویرایش؛ ارسال بی‌صدا۶ ساعت
F29.5قالب‌بندی کاملbold/italic/underline/strike/mono/code-block/quote/spoiler/لینک با متن — منوی انتخاب متن + میانبرها۱۰ ساعت
F29.6پیش‌نمایش لینک + منشن/ایموجیکارت پیش‌نمایش با حذف قبل از ارسال؛ کارت اختصاصی لینک‌های داخلی؛ @all/@here ناظم؛ پیکر ایموجی با جستجو۸ ساعت
F29.7پین چندتایی + واکنش کاملنوار پیمایش بین پین‌ها؛ فهرست واکنش‌دهنده‌ها؛ مجموعه‌ی واکنش راهبری۶ ساعت
معیار پذیرش
  • Given پیام ارسال‌شده، When پنجره‌ی ویرایش بگذرد، Then گزینه‌ی ویرایش غیرفعال شود و «حذف برای همه» طبق قاعده رفتار کند.
  • Given انتخاب سه پیام، When فوروارد به دو مقصد شود، Then هر شش رونوشت با ترتیب درست و برچسب فرستنده ثبت شود.
تعریف انجام (DoD)
  • ویرایش/حذف با پنجرهٔ زمانی؛ نقل‌قول جزئی؛ فوروارد چندتایی/چندمقصدی؛ پیام زمان‌بندی‌شده و بی‌صدا؛ قالب‌بندی کامل (تا اسپویلر)؛ پین چندتایی؛ واکنش با فهرست کاربران.
  • عبور از خط لولهٔ تحویل: تست سه‌لایه + CI سبز + پذیرش PO روی staging (لایت/دارک، دسکتاپ و ۳۷۵px) — فرآیند؛ بدون TODO/console.log و مستندسازی به‌روز.
وابستگی: F15. داده: B25، B26.
F30رسانه، فایل و صوت در سطح تلگرامP1نساخته۷ روز
Subtaskها (مرجع: مشخصات، بخش ۳)
#کارجزئیات فنیتخمین
F30.1آلبوم و کپشنچند عکس/ویدیو = یک آلبوم گروه‌شده؛ کپشن؛ انتخاب فشرده/اصل۸ ساعت
F30.2نمایشگر تمام‌صفحهورق‌زدن بین رسانه‌های چت، زوم، ذخیره، اطلاعات فرستنده۸ ساعت
F30.3پیام صوتی کاملقفل ضبط، شکل موج، سرعت ۱×/۱.۵×/۲×، پخش پیوسته بین چت‌ها۱۰ ساعت
F30.4فایل با آپلود مقاومپیشرفت قابل‌لغو، ازسرگیری، سقف حجم از تنظیمات راهبر، خطای روشن۶ ساعت
F30.5گالری اشتراکیتب‌های رسانه/فایل/لینک/صوت در پروفایل چت۶ ساعت
F30.6اختیاری‌هاپیام ویدیویی دایره‌ای، استیکر سازمانی، اشتراک کارت کاربر — پشت پرچم قابلیت۸ ساعت
تعریف انجام (DoD)
  • آلبوم گروه‌شده با کپشن؛ نمایشگر تمام‌صفحه؛ ویس با شکل موج و سرعت ۲×؛ آپلود قابل‌ازسرگیری؛ گالری اشتراکی چهار-تبی.
  • عبور از خط لولهٔ تحویل: تست سه‌لایه + CI سبز + پذیرش PO روی staging (لایت/دارک، دسکتاپ و ۳۷۵px) — فرآیند؛ بدون TODO/console.log و مستندسازی به‌روز.
وابستگی: F29. داده: B27.
F31گروه‌ها، کانال‌ها، تاپیک‌ها و سازماندهیP2نساخته۸ روز
Subtaskها (مرجع: مشخصات، بخش ۴ و ۵)
#کارجزئیات فنیتخمین
F31.1تاپیک‌ها (Forum Groups)فهرست تاپیک‌های گروه، ساخت/بستن تاپیک، اعلان per-تاپیک۱۲ ساعت
F31.2کانال کاملامضای نویسنده، بازدید پست، نظرات ذیل پست (گروه بحث متصل)۸ ساعت
F31.3مدیریت ناظمانمجوزهای ریزدانه per-ناظم؛ محدودسازی/بن عضو با مدت؛ UI گزارش اقدامات۱۰ ساعت
F31.4دعوت و عضویتلینک+QR با انقضا/سقف، درخواست عضویت با صف تایید ناظم، Slow Mode۸ ساعت
F31.5پوشه‌های چتپوشه‌ی سفارشی با قواعد + پیش‌ساخته‌های سازمانی؛ آرشیو/سنجاق/خوانده‌نشده‌ی دستی۱۰ ساعت
F31.6Poll درون‌چت + auto-delete + بلاک/گزارشنظرسنجی/آزمون تلگرامی؛ تایمر حذف خودکار per-چت؛ بلاک در DM و گزارش تخلف۱۰ ساعت
تعریف انجام (DoD)
  • تاپیک‌های گروه؛ کانال با امضا/بازدید/نظرات؛ مجوز ریزدانهٔ ناظم؛ لینک دعوت+Join Request+Slow Mode؛ پوشهٔ چت؛ Poll و auto-delete.
  • عبور از خط لولهٔ تحویل: تست سه‌لایه + CI سبز + پذیرش PO روی staging (لایت/دارک، دسکتاپ و ۳۷۵px) — فرآیند؛ بدون TODO/console.log و مستندسازی به‌روز.
وابستگی: F29. داده: B28.
F32جستجو، اعلان و همگام‌سازیP2نساخته۵ روز
Subtaskها (مرجع: مشخصات، بخش ۵ و ۶)
#کارجزئیات فنیتخمین
F32.1جستجوی کاملسراسری + درون‌چت با پیمایش نتایج، فیلتر نوع/فرستنده، پرش به تاریخ شمسی، هشتگ کلیک‌پذیر۱۰ ساعت
F32.2اعلان پیشرفتهبی‌صدا با مدت، «فقط منشن»، پیش‌نمایش، Badge تفکیکی @ در چت/پوشه/کل۸ ساعت
F32.3خوانده‌نشده و رسیدهاجداکننده‌ی خوانده‌نشده + اسکرول به آن؛ seen-by گروه‌های کوچک۶ ساعت
F32.4آفلاین و syncصف ارسال آفلاین با retry، بازگردانی خطای optimistic، sync وضعیت بین تب‌ها۸ ساعت
تعریف انجام (DoD)
  • جستجوی سراسری و درون‌چت با پرش به تاریخ شمسی؛ اعلان پیشرفته (بی‌صدا/فقط‌منشن)؛ جداکنندهٔ خوانده‌نشده و seen-by؛ صف آفلاین و sync بین تب‌ها.
  • عبور از خط لولهٔ تحویل: تست سه‌لایه + CI سبز + پذیرش PO روی staging (لایت/دارک، دسکتاپ و ۳۷۵px) — فرآیند؛ بدون TODO/console.log و مستندسازی به‌روز.
وابستگی: F29. داده: B26.
F33تماس صوتی/تصویری و جلسات زندهP3اختیاری — منتظر تصمیم PO≈۶ روز*

طبق تصمیم معماری، ادغام SDK آماده (Jitsi/LiveKit self-host) نه ساخت از صفر: تماس ۱:۱، گفتگوی صوتی گروهی روی کانال (دست‌بلندکردن، ضبط)، اشتراک صفحه.

تخمین مشروط (*به‌فرض SDK آماده — هر دو گزینه تخمین مشابه دارند)
#کارتخمین
F33.1صفحه‌ی تماس ۱:۱ (صوتی/تصویری): زنگ‌خوردن، پاسخ/رد، کنترل‌ها (میوت/دوربین/بلندگو)۱۲ ساعت
F33.2گفتگوی صوتی گروهی روی کانال: فهرست حاضران، دست‌بلندکردن، دعوت، نشانگر ضبط۱۴ ساعت
F33.3اشتراک صفحه + چیدمان بینندگان۸ ساعت
F33.4ادغام با چت: دکمه‌ی شروع از هدر چت، پیام سیستمی «تماس شروع/پایان یافت»، تاریخچه‌ی تماس‌ها۸ ساعت
F33.5تست دو-مرورگر + کیفیت اتصال ضعیف۶ ساعت
تعریف انجام (DoD)
  • تماس ۱:۱ صوتی/تصویری، گفتگوی صوتی گروهی با دست‌بلندکردن و ضبط، اشتراک صفحه؛ ادغام با هدر چت و تاریخچهٔ تماس؛ تست دو-مرورگر.
  • عبور از خط لولهٔ تحویل: تست سه‌لایه + CI سبز + پذیرش PO روی staging (لایت/دارک، دسکتاپ و ۳۷۵px) — فرآیند؛ بدون TODO/console.log و مستندسازی به‌روز.
وابستگی: تصمیم PO + B29. خارج از جمع الحاقیه.
جمعِ الحاقیه‌ی پیام‌رسان (Front): ~۲۸ روز (F29–F32) — جدا از همه‌ی جمع‌های قبلی. ترتیب: F29 ← F30/F32 موازی ← F31. F33 فقط با تایید PO.
Σ+

جمع‌بندی تخمین‌ها — همه‌ی بلوک‌ها (الحاقیه ۱۴۰۵/۰۵/۱۴)

جمعِ روزنفرِ تک‌تک تسک‌ها، به تفکیک بلوک. اعداد روز-نفر (person-day) اند و مستقل از تعداد تیم؛ تبدیل به تقویم در انتهای جدول.

بلوکتسک‌هاFront (روزنفر)Backend (روزنفر)وضعیت
هسته‌ی قرارداد (فاز ۰–۶)F1–F20 · B1–B19۹۰۸۶در حال اجرا
دامنه‌ی کشف‌شدهF21–F24 · B20۱۳۲منتظر تصمیم PO
هم‌ترازی دامنه‌بندیF25–F28 · B21–B24۱۲۱۷الحاقیه — الزام‌آور
پیام‌رسان کامل (تلگرام)F29–F32 · B25–B28۲۸۲۳الحاقیه — خواسته‌ی محصول
مجموع الزامی (بدون تماس)۱۴۳۱۲۸۲۷۱ روزنفر
تماس صوتی/تصویری (اختیاری — F33/B29)پس از تصمیم PO
مجموع با تماس۱۴۹۱۳۵۲۸۴ روزنفر
تبدیل به تقویم (ترکیب فعلی: ۴F + ۳B + QA + DevOps، اجرای موازی دو رشته). با بهره‌وریِ واقع‌بینانه‌ی ~۸۰٪ (جلسه/ریویو/رگرسیون):
سناریوFrontBackendپروژه (موازی)
فقط هسته (فاز ۰–۶) — خط پایه‌ی قبلی~۹ هفته~۹ هفته~۹–۱۱ هفته
الزامی کامل (هسته + دامنه‌بندی + پیام‌رسان)~۹ هفته~۱۱ هفته~۱۱–۱۳ هفته
+ دامنه‌ی کشف‌شده (F21–F24/B20)+~۱ هفته~۱۲–۱۴ هفته
+ تماس (F33/B29)+~۰.۵ هفته+~۰.۵ هفته~۱۳–۱۵ هفته
گلوگاه = Backend (۱۲۸ روزنفر ÷ ۳ نفر). تسک‌های الزام‌آورِ مسیر بحرانی: B21→B22 (دامنه) و B25→B26 (بلادرنگ چت). اعداد تخمینی‌اند و در Planning هر Sprint دوباره کالیبره می‌شوند.
§

مرجع الزام‌آور — قرارداد دامنه‌بندی و دسترسی (سیستم ← هلدینگ ← شرکت)

مشخصات دقیقِ مدل چندسطحی، همان‌طور که در نسخه‌ی نهایی demo.shub.ir پیاده و راستی‌آزمایی شده. مبنای الزام‌آورِ تسک‌های F25–F28 / B21–B24. مرجع کد: src/data/tenancy.ts و src/context/TenancyContext.tsx در مخزن پروتوتایپ.

مهم‌ترین قاعده: فیلتر باید سمت سرور باشد. در پروتوتایپ فیلتر در فرانت انجام می‌شود چون داده mock است؛ در محصول واقعی اگر فیلتر فقط در فرانت باشد یعنی داده‌ی شرکت‌های دیگر واقعاً به مرورگر کاربر رسیده و فقط نمایش داده نشده — این نشتی داده است. سرور موظف است بر اساس نشستِ برآمده از توکن، هم «خواندن» را فیلتر و هم «نوشتن» را اعتبارسنجی کند.
۱

موجودیت‌ها

موجودیتفیلدهاتوضیح
SystemIdentityname, shortName, domain, color, ssoProvider, ssoEndpoint, ssoDomainHint, autoProvision, allowLocalLoginهر نصب = یک مشتری. ssoProvider ∈ {بدون SSO, LDAP/AD, SAML 2.0, OIDC, OTP موبایل}
Holdingid, name, color, lead?, activen هلدینگ زیر هر نصب
Companyid, name, holdingId, field?, users, activen شرکت زیر هر هلدینگ
UserProfile (افزوده)companyIds?: string[]عضویت — کاربر خودش انتخاب نمی‌کند؛ مدیر شرکت او را اضافه می‌کند
RoleGrantroleId, level ∈ {سیستم, هلدینگ, شرکت, گروه}, holdingId?, companyId?, groupId?تخصیص نقش = (کاربر، نقش، دامنه). groupId فقط برای سطح «گروه» (ناظم گروه)
Scoped (میکس‌این همه‌ی محتواها)scope? ∈ {سراسری, هلدینگ, شرکت}, holdingId?, companyId?روی همه‌ی موجودیت‌های محتوایی/کاری. نبودِ scope = «سراسری» (سازگاری با داده‌ی قدیمی)
پوشش Scoped — الزامی روی این موجودیت‌ها: خبر، بلاگ، رویداد، رسانه، انجمن (موضوع)، گروه، سند دانش، کانال گفتگو، پروژه، قالب فرآیند*، قرارداد، پروپوزال/طرح صندوق (هر دو نوع)، فراخوان پژوهشی، دوره‌ی آموزشی، تیکت، نظرسنجی، آزمون، مسابقه، چالش. (* قالب فرآیند و «جایزه نوآوری» سراسری‌اند — جایزه ذاتاً رویداد سطح بنیاد است.) پیام مستقیم (DM) دامنه‌بندی نمی‌شود — عضویت‌محور است.
۲

نشست (Session) — دامنه از «کاربر» محاسبه می‌شود، نه از انتخاب او

در لحظه‌ی ورود، سرور از روی عضویت‌ها و تخصیصِ نقش، نشست را می‌سازد. کاربر هیچ سوالی درباره‌ی هلدینگ/شرکتش نمی‌بیند.

سطح نشستچه می‌بیندسوییچر هدردامنه‌های مجاز انتشار
سیستم (بدون عضویت + نقش سیستمی)همه‌چیز«مشاهده به‌عنوان» — همه‌ی دامنه‌هاسراسری، هلدینگ، شرکت
هلدینگ (نقش سطح هلدینگ)سراسری + کل هلدینگ خودشکل هلدینگ + شرکت‌های همان هلدینگهلدینگ، شرکت
شرکت — عضو ۱ شرکتسراسری + همان شرکتندارد — فقط برچسب خواندنیفقط شرکت (بدون گزینه: «منتشر می‌شود برای: X»)
شرکت — عضو چند شرکتسراسری + شرکت‌های عضوفقط همان شرکت‌های عضوفقط شرکت (بین عضویت‌ها)
قانون دیده‌شدن (مرجع: isVisibleForSession) — آیتم دیده می‌شود اگر: scope=سراسری (همیشه) · scope=هلدینگ و هلدینگ آیتم ∈ هلدینگ‌های کاربر · scope=شرکت و شرکت آیتم ∈ شرکت‌های عضو. وقتی کاربر روی یک دامنه‌ی مشخص ایستاده (سوییچر)، همان تنگ‌تر اعمال می‌شود. نشستِ سطح سیستم بدون دامنه‌ی فعال، همه‌چیز را می‌بیند.
۳

زنجیره‌ی واگذاری اختیار

نقشمی‌تواندنمی‌تواند
مدیر سیستمساخت/حذف هلدینگ؛ انتصاب مدیر هلدینگ؛ همه‌چیز
مدیر هلدینگساخت/مدیریت شرکت‌های هلدینگ خودش؛ انتصاب مدیر شرکتحذف هلدینگ؛ هر کاری بیرون از هلدینگ خودش
مدیر شرکتافزودن/حذف کاربرانِ شرکت خودش؛ تخصیص نقش در دامنه‌ی خودشهر کاری بیرون از شرکت خودش
ناظم گروه (level=گروه + groupId)ویرایش/حذف گروهِ خودش؛ اخراج عضو همان گروهمدیریت هر گروه دیگر؛ پنل راهبری
عضو عادیمصرف و تولید محتوا در دامنه‌ی عضویتشپنل راهبری (منو پنهان و مسیر گارد‌شده)؛ انتشار خارج از شرکتش
دسترسی مؤثر از نقشِ تخصیص‌یافته محاسبه می‌شود (کاربر بدون تخصیص = «عضو عادی» r4). دسترسی راهبری = سطح سیستم/هلدینگ، یا نقشی که یکی از مجوزهای users.create / users.edit / roles.edit / settings.system را دارد. گاردِ سمت سرور برای مسیرهای admin الزامی است — پنهان‌کردن منو کافی نیست.
۴

الزامات API (برای هر دو بک‌اند)

#الزامجزئیات
۱نشست در توکن/پاسخ auth/mememberCompanyIds[]، grant {roleId, level, holdingId?, companyId?, groupId?} و مجوزهای مؤثر باید از auth/me برگردد؛ فرانت هیچ‌چیز را خودش استنتاج نمی‌کند.
۲فیلتر خواندنهمه‌ی endpointهای فهرست/جزئیات، قانون دیده‌شدن بخش ۲ را روی داده اعمال می‌کنند. آیتم خارج از دامنه = 404 (نه 403، تا وجودش لو نرود).
۳اعتبارسنجی نوشتنscope/holdingId/companyIdی ارسالی باید داخل «دامنه‌های مجاز انتشار» نشست باشد؛ در غیر این صورت 422. مقدار پیش‌فرض = دامنه‌ی فعال نشست.
۴زنجیره‌ی واگذاریAPIهای مدیریت هلدینگ/شرکت/عضویت/تخصیص نقش، قواعد بخش ۳ را سمت سرور اجرا می‌کنند.
۵سازگاری داده‌ی قدیمیرکوردهای بدون scope = «سراسری». مهاجرت اولیه می‌تواند همه را سراسری بگذارد و به‌تدریج دامنه‌دار شود.
۵

فیلدهای محتوایی جدید (قرارداد داده)

این فیلدها در نسخه‌ی نهایی دمو وجود دارند و باید در مدل و قرارداد هر دو بک‌اند بیایند (تسک B24).

موجودیتفیلدنوع/مقادیرمصرف در UI
رویدادcategoryجلسه | کارگاه | وبینار | همایش | آموزشچیپ فیلتر + نشان روی ردیف (عمومی و داشبورد)
رویدادcapacitynumber«X از Y ظرفیت» + وضعیت «در حال ثبت‌نام»
خبرtopicاقتصادی | اجتماعی | فرهنگی | عمرانی | سازمانیچیپ فیلتر + تگ روی هیرو/کارت/ردیف
رسانهduration"mm:ss" — فقط ویدیونشان روی بندانگشتی
کاربرcompanyIdsstring[]مبنای کل نشست — بخش ۲
۶

سناریوهای مرجع پذیرش (داده‌ی seed دمو)

این پنج سناریو معیار پذیرش پیاده‌سازی بک‌اند است — با «ورود به‌عنوان» در demo.shub.ir قابل مشاهده‌اند.

کاربرعضویت / نقشرفتار مورد انتظار
u1 — پایگاه اطلاع‌رسانیبدون عضویت + r1 (سیستم)همه‌چیز؛ سوییچر ۱۷ گزینه؛ هر سه دامنه‌ی انتشار؛ پنل راهبری کامل
u3 — عضو ۱ شرکت (بهنوش)[c-behnoush]سوییچر ندارد؛ فقط سراسری+بهنوش؛ فرم انتشار بدون گزینه («منتشر می‌شود برای: بهنوش»)؛ بدون پنل راهبری
u4 — عضو ۲ شرکت + r2 هلدینگ فردوس[c-dashtnaz, c-ferdows-agri]سوییچر: کل هلدینگ + ۲ شرکت؛ انتشار هلدینگ/شرکت؛ راهبریِ محدود به هلدینگ خودش
u7 — ناظم گروه g1[c-ferdows-agri] + r3/گروه/g1دکمه‌های مدیریتی فقط در گروه g1؛ در g2 هیچ اکشن مدیریتی ندارد
u12 — عضو ۳ شرکت[c-pak, c-behnoush, c-zamzam]سوییچر دقیقاً همین ۳ شرکت؛ محتوای فهرست‌ها با سوییچ واقعاً عوض می‌شود

مرجع الزام‌آور — مشخصات کامل پیام‌رسان (هم‌ترازی با تلگرام)

پیام‌رسانِ موتوشاب باید تمام قابلیت‌های تلگرام (به‌جز موارد حذف عمدی) به‌علاوه‌ی قابلیت‌های سازمانی را داشته باشد. مبنای الزام‌آورِ تسک‌های F29–F33 / B25–B29. برای هر قابلیت: جزئیات، وضعیت فعلی در دمو، و تسک متناظر.

سه قاعده‌ی برش (Scope Cut): (۱) هر قابلیت تلگرام که به «هویت شخصی/شبکه‌ی عمومی» گره خورده (شماره‌تلفن عمومی، People Nearby، استوری، Premium) در بستر سازمانی حذف عمدی است و در جدول با «—حذف» مشخص شده. (۲) استیکر/GIF به‌صورت «مجموعه‌ی سازمانیِ مدیریت‌شده» می‌آید نه فروشگاه باز. (۳) تماس صوتی/تصویری طبق تصمیم معماری موجود (برون‌سپاری/ادغام، نه ساخت از صفر) تسک اختیاریِ جداست (F33/B29).
۱

پیام‌رسانی پایه

قابلیتجزئیات الزام‌آوردر دموتسک
ارسال متنارسال با Enter، خط جدید با Shift+Enter، پیش‌نویس هر گفتگو جدا ذخیره و بین دستگاه‌ها sync شود✅ (بدون draft-sync)F29 · B25
ویرایش پیامپنجره‌ی ویرایش قابل‌تنظیم (پیش‌فرض ۴۸ ساعت)، برچسب «ویرایش‌شده»، تاریخچه‌ی ویرایش برای انطباق✅ (بدون پنجره/تاریخچه)F29 · B25
حذف پیام«حذف برای من» / «حذف برای همه» (پنجره‌ی قابل‌تنظیم)؛ در کانال: فقط ناظمنیمه (حذف ساده)F29 · B25
پاسخ (Reply)نقل‌قول پیام با پرش به اصل؛ نقل‌قول بخشی از متن (Quote انتخابی — تلگرام ۲۰۲۳)✅ reply · ❌ quote انتخابیF29
رشته‌ی پاسخ (Thread)پنل رشته کنار گفتگو، شمارنده‌ی «N پاسخ در رشته»، دنبال‌کردن رشته
فورواردتکی و چندتایی، با/بدون نامِ فرستنده، به چند مقصد هم‌زمان؛ احترام به مرز دامنه (فوروارد به کانالِ خارج از دامنه ممنوع)✅ تکیF29 · B25
انتخاب چندتاییانتخاب چند پیام → فوروارد/حذف/کپی گروهیF29
پیام زمان‌بندی‌شدهارسال در زمان معین + «ارسال بی‌صدا» (بدون نوتیف گیرنده)F29 · B25
واکنش (Reaction)چند واکنش روی هر پیام، شمارنده + فهرست واکنش‌دهنده‌ها؛ مجموعه‌ی مجاز توسط راهبر✅ پایهF29 · B25
پین پیامچند پین هم‌زمان با نوار پیمایش بین پین‌ها (مثل تلگرام)، پین با/بدون اعلان✅ تک‌پینF29
ذخیره‌شده‌هاSaved Messages شخصی + ذخیره از هر گفتگو
رسید خواندنتیک ✓ (رسیده) / ✓✓ (خوانده)؛ در گروه‌های کوچک «چه کسانی خواندند»✅ تیک‌ها · ❌ seen-byF32 · B26
در حال تایپ…نشانگر تایپ per-چت؛ در گروه با نام افراد✅ در DMB26
جداکننده‌ی خوانده‌نشدهخط «پیام‌های خوانده‌نشده» هنگام بازکردن چت + اسکرول به همان‌جاF32
تایمر حذف خودکارAuto-delete per-چت (۱ روز/۱ هفته/۱ ماه/سفارشی) — برای گفتگوهای حساس سازمانیF31 · B28
۲

قالب‌بندی و محتوای غنی

قابلیتجزئیات الزام‌آوردر دموتسک
قالب‌بندی متنپررنگ، مورب، زیرخط، خط‌خورده، مونو/کد، بلوک کد، نقل‌قول، اسپویلر (متن پنهان تا لمس)، لینک با متن دلخواه — با میانبر کیبورد و منوی انتخاب متنF29
پیش‌نمایش لینککارت پیش‌نمایش (عنوان/تصویر/توضیح) + امکان حذف پیش‌نمایش قبل از ارسال؛ لینک‌های داخلی سامانه کارت اختصاصی (خبر/سند/رویداد)F29 · B27
منشن@نام با پیشنهاد خودکار، هایلایت و شمارنده‌ی منشن روی چت؛ @all/@here فقط ناظم✅ پایهF29
هشتگکلیک‌پذیر → جستجوی همان برچسب در گفتگوF32
ایموجیپیکر ایموجی با جستجو و پرکاربردها؛ ایموجی تکی بزرگ‌نمایی شود✅ پایهF29
استیکر سازمانیمجموعه‌های استیکرِ تأییدشده توسط راهبر (برند سازمان)؛ بدون فروشگاه باز❌ (اختیاری)F30 · B27
نظرسنجی درون‌چتPoll تلگرامی: چندگزینه‌ای، ناشناس/آشکار، چندانتخابی، حالت آزمون (Quiz) — جدا از ماژول نظرسنجی سازمانیF31 · B28
۳

رسانه، فایل و صوت

قابلیتجزئیات الزام‌آوردر دموتسک
عکس و ویدیوارسال با کپشن، چندتایی به‌صورت آلبوم گروه‌شده، فشرده/اصل، ویرایشگر ساده (برش/چرخش/قلم)نیمه (تک‌عکس)F30 · B27
نمایشگر رسانهتمام‌صفحه با ورق‌زدن بین رسانه‌های همان چت، زوم، ذخیره، نمایش فرستنده/زمانF30
پیام صوتیضبط با نگه‌داشتن + قفل ضبط، شکل موج، پخش با سرعت ۱×/۱.۵×/۲×، ادامه‌ی پخش هنگام جابه‌جایی بین چت‌ها✅ ضبط پایهF30 · B27
پیام ویدیویی (دایره‌ای)ضبط ویدیوی کوتاه دایره‌ای (video message تلگرام)❌ (اختیاری)F30
فایل/سندهر نوع فایل تا سقف تنظیم‌شده‌ی راهبر، نوار پیشرفت آپلود/دانلود قابل‌لغو، ازسرگیری آپلود قطع‌شدهنیمه (UI پیوست)F30 · B27
گالری اشتراکی چتتب‌های «رسانه / فایل / لینک / صوت» در پروفایل هر چت — مثل Shared Media تلگرام✅ رسانه (پایه)F30 · B27
تنظیم دانلود خودکارper-نوع و per-شبکه (داده/وای‌فای) — برای کاربر موبایلF32
اشتراک مخاطب/موقعیتاشتراک کارت کاربر سازمانی؛ موقعیت زنده «—حذف» (کاربرد سازمانی ندارد، ریسک حریم خصوصی)❌ / —حذفF30
۴

گروه‌ها، کانال‌ها و تاپیک‌ها

قابلیتجزئیات الزام‌آوردر دموتسک
کانال (Broadcast)فقط ناظم‌ها می‌نویسند؛ امضای نویسنده، شمارنده‌ی بازدید هر پست، نظرات ذیل پست از طریق گروه بحث متصلنیمه (کانال ساده)F31 · B28
گروهاعضا، توضیحات، قوانین پین‌شده؛ ظرفیت بالا✅ پایهB28
تاپیک‌ها (Forum Groups)گروه‌های تاپیک‌دار تلگرام: هر گروه چند تاپیک مجزا با فهرست، آیکن و اعلان جدا — برای گروه‌های بزرگ سازمانی حیاتیF31 · B28
مجوزهای ریزدانه‌ی ناظممثل تلگرام: تفکیک حق حذف پیام / بن / دعوت / پین / تغییر اطلاعات / افزودن ناظم — per-ناظم❌ (ناظم واحد)F31 · B28
محدودیت اعضامحدودکردن عضو خاص (فقط‌خواندن، بدون رسانه) با مدت؛ بن با پاک‌سازی پیام‌هاF31 · B28
لینک دعوتلینک + QR، با انقضا/سقف استفاده، درخواست عضویت با تایید ناظم (Join Request)F31 · B28
حالت آهسته (Slow Mode)فاصله‌ی اجباری بین پیام‌های هر عضو (۱۰ث تا ۱س)F31 · B28
گزارش اقدامات ناظمانAdmin Log ۴۸ساعته‌ی تلگرام → در نسخه‌ی سازمانی: دائمی و متصل به Audit Log انطباقB28
دامنه‌بندی کانالکانال‌ها Scoped‌اند (سراسری/هلدینگ/شرکت) — قرارداد دامنه‌بندیB21
۵

سازماندهی، جستجو و اعلان

قابلیتجزئیات الزام‌آوردر دموتسک
پوشه‌های چتChat Folders تلگرام: پوشه‌های سفارشی با قواعد شمول/استثنا + شمارنده‌ی خوانده‌نشده per-پوشه؛ پوشه‌های پیش‌ساخته‌ی سازمانی (هلدینگ من/شرکت من)نیمه (۳ دسته‌ی ثابت)F31
آرشیوآرشیو چت با سوایپ، خروج خودکار از آرشیو با پیام جدید (قابل‌تنظیم)✅ پایهF31
پین چت / علامت خوانده‌نشدهسنجاق گفتگو بالای فهرست؛ mark-as-unread دستی✅ علاقه‌مندی · ❌ unread دستیF31
جستجوی سراسری چتروی همه‌ی گفتگوها + پرش به پیام در بستر خودش؛ فیلتر بر اساس نوع (رسانه/فایل/لینک/صوت) و فرستنده✅ فیلتر نام چتF32 · B26
جستجوی درون‌چت + پرش به تاریخجستجو داخل یک گفتگو، پیمایش بین نتایج، Jump to Date با تقویم شمسیF32 · B26
اعلان per-چتبی‌صدا با مدت (۱س/۸س/۲روز/همیشه)، استثناها، پیش‌نمایش روشن/خاموش، «فقط منشن‌ها» برای کانال شلوغ✅ بی‌صدا سادهF32 · B26
شمارنده‌هاBadge خوانده‌نشده per-چت/پوشه/کل؛ تفکیک منشن (@) از پیام عادی✅ پایهF32
۶

همگام‌سازی، حریم خصوصی و سازمانی

قابلیتجزئیات الزام‌آوردر دموتسک
چنددستگاهیوضعیت خوانده/پیش‌نویس/ارسال بین تب‌ها و دستگاه‌ها sync؛ فهرست نشست‌ها و خروج از راه دور (به «امنیت و نشست‌ها»ی موجود وصل می‌شود)❌ syncB26
آفلاینصف ارسال آفلاین با retry، کش تاریخچه، حالت optimistic با برگشت در خطانیمه (optimistic)F32 · B26
حضور (Presence)چهار وضعیت (آنلاین/غایب/مزاحم نشوید/نامرئی) + «آخرین بازدید» با سطوح حریم خصوصی تلگرامی (همه/اعضای سازمان/هیچ‌کس)✅ چهار وضعیتB26
مسدودسازی/گزارشبلاک کاربر در DM؛ گزارش پیام/کاربر به راهبر با دسته‌ی تخلفF31 · B28
بات و وب‌هوکحساب بات با ارسال از API، وب‌هوک ورودی/خروجی، دکمه‌های اینلاین زیر پیامِ بات (inline keyboard)✅ تعریف در راهبریB28
دستور اسلش/command با منوی پیشنهاد و پارامتر — اجرا از طریق همان بات‌ها
حساب مهماندسترسی محدود به کانال‌های مشخص با انقضا (پیمانکاران)✅ تعریف در راهبریB28
خروجی انطباقCompliance Export گفتگوها با فیلتر بازه/کاربر/کانال + تاریخچه‌ی ویرایش/حذف — فقط نقش انطباق✅ UI در راهبریB28
—حذف عمدیاستوری، People Nearby، شماره‌تلفن عمومی، Premium/هدیه، کیف پول — در بستر سازمانی بی‌معنا
۷

تماس صوتی/تصویری و جلسات زنده (اختیاری — تصمیم PO)

طبق تصمیم معماری موجود، ساخت موتور تماس از صفر ممنوع است؛ گزینه‌ها: ادغام SDK آماده (Jitsi/LiveKit self-host) پشت همان هویت. دامنه‌ی هدف: تماس ۱:۱ صوتی/تصویری، گفتگوی صوتی گروهی (Voice Chat تلگرام) روی کانال/گروه با دست‌بلندکردن و ضبط جلسه، اشتراک صفحه. تسک‌های F33/B29 فقط پس از تایید PO فعال می‌شوند و در جمع الحاقیه حساب نشده‌اند.