# QA Memory

## 2026-07-01 — ISS-2026-0022 — 🔧 اترجعت

- العنوان: مراجعه نظام التيكت والتاسك.
- الحالة وقت المراجعة: client_review.
- الحكم: ناقصة؛ إصلاحات التذاكر/المهام العادية موجودة، لكن طلب إضافة أيقونات تاسك/تيكت داخل الشات الداخلي والجروبات لم يُنفّذ.
- مرفقات تمت مراجعتها: صور نقص اختيار الموظف، إشعارات التذاكر/المهام، إعدادات أنواع/حالات التذاكر، إنشاء تاسك من رسالة، وصورة مهام حساب الموظف.
- الموجود السليم:
  - `mohamed/client/chat/partials/modals.php:209` إلى `225` اختيار موظفين متعدد للتذكرة من الشات.
  - `mohamed/client/chat/partials/modals.php:313` إلى `324` اختيار موظف للمهمة من الشات للمدير والموظف.
  - `mohamed/client/tickets.php:308` إلى `311` و`1137` إلى `1160` صفحة التذاكر تدعم إسناد أكثر من موظف.
  - `mohamed/client/tasks.php:342` إلى `360` و`557` إلى `565` صفحة المهام في وضع الموظف تعرض قائمة الموظفين وتسجل `assigned_to`.
  - `mohamed/includes/header.php:38` إلى `45` و`694` إلى `710` بادجات التذاكر/المهام للمدير.
  - `mohamed/includes/employee_header.php:9` إلى `24` و`439` إلى `446` بادجات تذاكر/مهام الموظف.
- الكسر/النقص:
  - Step 1013 طلب: أيقونة التاسك والتيكت داخل أي شات داخلي أو جروب.
  - Step 1128 سلّم فقط إصلاح صفحة «مهامي» للموظف، ولم يسلّم تكامل الشات الداخلي.
  - `mohamed/client/team_chat.php:138` إلى `159` composer الشات الداخلي فيه مرفقات/صوت/رسالة فقط، ولا توجد أزرار تاسك أو تيكت.
  - `mohamed/assets/js/team-chat.js:289` إلى `298` أفعال الرسالة هي react/reply/forward/edit/pin/delete فقط.
  - `mohamed/assets/js/team-chat.js:323` إلى `338` يعالج نفس الأفعال فقط، ولا توجد دوال إنشاء task/ticket من رسالة داخلية.
  - البحث في `mohamed/client/team_chat.php` و`mohamed/employee/team_chat.php` و`mohamed/assets/js/team-chat.js` و`mohamed/api/endpoints/team_chat.php` لم يظهر أي تكامل task/ticket.
- اختبارات:
  - `php -l mohamed/client/team_chat.php` نجح.
  - `php -l mohamed/employee/team_chat.php` نجح.
  - `php -l mohamed/api/endpoints/team_chat.php` نجح.
  - `node --check mohamed/assets/js/team-chat.js` نجح.
  - `php -l mohamed/client/tasks.php` نجح.
  - `php -l mohamed/api/endpoints/tasks.php` نجح.
  - `php -l mohamed/client/tickets.php` نجح.
  - `php -l mohamed/api/endpoints/tickets.php` نجح.
- أكشن المنصة: `POST /reopen`، رجعت إلى `in_implementation`، step_id=`1225`.
- النسخة/الكوميت وقت المراجعة: `mohamed/VERSION` = `1.1.150`, git `9aa9fcb`.

## 2026-07-01 — ISS-2026-0025 — 🔧 اترجعت

- العنوان: متابعه الاوردرات.
- الحالة وقت المراجعة: client_review.
- الحكم: ناقصة؛ أغلب موديول الأوردرات موجود، لكن يوجد كسر مؤكد في شريحة الأوردر داخل الشات بعد الإغلاق، ونقص في قائمة أماكن الحفظ المدارة.
- مرفقات تمت مراجعتها: صور الإلغاء بدون مبلغ/أكياس، تحديث رقم العميل، تكرار الأوردر، والمتابع/المحضر في التعديل.
- الكسر/الدليل:
  - `mohamed/client/orders.php:194` إلى `198` زر «إغلاق» يستدعي `POST /orders/:id/close` بحالة `status:'shipped'`.
  - `mohamed/api/endpoints/orders.php:275` إلى `286` endpoint الإغلاق يقبل `shipped/delivered/cancelled` ويغلق المؤقت بـ`timer_closed_at`.
  - `mohamed/client/orders.php:156` يعتبر `shipped/delivered/cancelled` حالات مقفولة داخل صفحة الأوردرات.
  - `mohamed/assets/js/chat/chat-orders.js:105` يعرف الحالات النهائية لشريحة الشات كـ`closed/cancelled/delivered` فقط، ولا يشمل `shipped`.
  - `mohamed/assets/js/chat/chat-orders.js:114` إلى `117` يختار أول أوردر ليس terminal، لذلك الأوردر الذي تم إغلاقه كـ`shipped` يظل ظاهراً في هيدر الشات كأنه مفتوح.
  - Step 707 طلب قائمة حفظ ثابتة مُدارة لإضافة/حذف أماكن الحفظ؛ الموجود في `mohamed/client/orders.php:242` إلى `244` يبني `datalist` من القيم المستخدمة سابقاً فقط.
  - `mohamed/client/orders.php:380` إلى `389` حقول الحفظ مجرد inputs مع `datalist`، ولا يوجد CRUD/endpoint لإدارة أماكن الحفظ في `mohamed/api/endpoints/orders.php` أو جدول مخصص في `mohamed/auto_migrations.php`.
- الموجود السليم الذي تمت مراجعته:
  - `mohamed/api/endpoints/orders.php:27` إلى `92` إنشاء الأوردر من الشات/خارجي مع بدء المؤقت وملاحظة الشات ومنع/تأكيد التكرار.
  - `mohamed/api/endpoints/orders.php:95` إلى `170` فلاتر الحالة/المتابع/التاريخ/البحث والعرض النشط وصلاحيات الموظف المحدود.
  - `mohamed/api/endpoints/orders.php:198` إلى `255` تعديل الحالة والبيانات والمتابع/المحضر/البائع وتسجيل ملاحظة عند تغيير الحالة.
  - `mohamed/client/orders.php:66` إلى `75` فلاتر النشط/المتابع/المحافظة/التاريخ وأوردر خارجي.
  - `mohamed/client/orders.php:155` إلى `191` جدول التاريخ والهاتف والمحافظة والإجماليات وعدد الجديد/التحضير/الشحن.
  - `mohamed/client/orders.php:201` إلى `205` زر الإلغاء بدون مطالبات مبلغ/قطع/أكياس.
  - `mohamed/assets/js/chat/chat-orders.js:76` إلى `84` تحذير الأوردر المكرر.
- اختبارات:
  - `php -l mohamed/api/endpoints/orders.php` نجح.
  - `php -l mohamed/client/orders.php` نجح.
  - `php -l mohamed/employee/orders.php` نجح.
  - `php -l mohamed/client/chat/partials/chat-area.php` نجح.
  - `node --check mohamed/assets/js/chat/chat-orders.js` نجح.
- أكشن المنصة: `POST /reopen`، رجعت إلى `in_implementation`، step_id=`1223`.
- النسخة/الكوميت وقت المراجعة: `mohamed/VERSION` = `1.1.150`, git `9aa9fcb`.

## 2026-07-01 — ISS-2026-0026 — 🔧 اترجعت

- العنوان: Lastday فى التقرير وتقرير نشاط موظفين.
- الحالة وقت المراجعة: client_review.
- الحكم: ناقصة؛ جزء كبير من التقارير والداشبورد موجود، لكن Lastday في شاشة مراقبة نشاط الموظفين لا يعرض أمس فقط.
- الكسر/الدليل:
  - `mohamed/client/employee_monitoring.php:167` إلى `168` و`206` إلى `209` يضيفان زر `yesterday` / Lastday في الواجهة.
  - `mohamed/client/employee_monitoring.php:348` دالة `dateRange()` لا تتعامل مع `period === 'yesterday'`؛ أي فترة غير `today/week` تدخل فرع الشهر وترسل `date_from` أول الشهر و`date_to` اليوم.
  - `mohamed/client/employee_monitoring.php:370` يستخدم `dateRange()` لقائمة الموظفين.
  - `mohamed/client/employee_monitoring.php:450` يستخدمها لتفاصيل deep-dive/النشاط بالساعة.
  - `mohamed/client/employee_monitoring.php:568` يستخدمها لتقرير الأداء.
  - `mohamed/client/employee_monitoring.php:910` يستخدمها للـleaderboard.
  - `mohamed/client/employee_monitoring.php:983` يستخدمها لتصدير CSV.
  - `mohamed/api/endpoints/employee_monitoring.php:12` إلى `13` يعطي أولوية لـ`date_from/date_to` ويرجعها مباشرة، لذلك دعم `yesterday` في `mohamed/api/endpoints/employee_monitoring.php:16` إلى `21` لا يُستخدم من هذه الواجهة.
- الموجود السليم الذي تمت مراجعته:
  - `mohamed/api/endpoints/reports.php:15` إلى `47` يدعم `yesterday` في تقارير الأداء.
  - `mohamed/client/reports.php:39` إلى `43` يضيف زر أمس للتقارير.
  - `mohamed/api/endpoints/reports.php:137` إلى `139` و`226` إلى `267` queue uptake يدعم أمس ويحسب chats closed/customers/orders.
  - `mohamed/client/dashboard.php:474` إلى `479` يضيف أمس في queue uptake للداشبورد.
  - `mohamed/api/endpoints/dashboard.php:72` إلى `103` يحسب إحصاءات أمس.
- اختبارات:
  - `php -l mohamed/client/employee_monitoring.php` نجح.
  - `php -l mohamed/api/endpoints/employee_monitoring.php` نجح.
  - `php -l mohamed/client/reports.php` نجح.
  - `php -l mohamed/api/endpoints/reports.php` نجح.
  - `php -l mohamed/client/dashboard.php` نجح.
  - `php -l mohamed/api/endpoints/dashboard.php` نجح.
- أكشن المنصة: `POST /reopen`، رجعت إلى `in_implementation`، step_id=`1219`.
- النسخة/الكوميت وقت المراجعة: `mohamed/VERSION` = `1.1.150`, git `9aa9fcb`.

## 2026-07-01 — ISS-2026-0027 — ✅ سليمة

- العنوان: ارسال صور للعيمل لايقبل غير صوره.
- الحالة وقت المراجعة: client_review.
- الحكم: الإصلاح موجود في الكود الحقيقي، ولا يوجد سبب لإعادة فتح التذكرة.
- تحقق الكود:
  - `mohamed/client/chat/partials/modals.php:2` إلى `18` يحتوي modal معاينة الصور المتعددة.
  - `mohamed/client/chat/partials/chat-area.php:706` إلى `716` مدخل صور الموبايل داخل label أصلي، `multiple` و`data-max=6`.
  - `mohamed/client/chat/partials/chat-area.php:721` إلى `730` مدخل الفيديو والكاميرا داخل labels أصلية لتفادي مشكلة iOS.
  - `mohamed/assets/js/chat/chat-switch.js:612` إلى `638` يعيد نفس بنية labels بعد تبديل المحادثة، بدون overlay يسبب ضغطتين على Android.
  - `mohamed/assets/js/chat/chat-media.js:45` إلى `54` لا يخفي قائمة الموبايل فوراً عند الضغط على label حتى لا يلغى file picker على iOS.
  - `mohamed/assets/js/chat/chat-media.js:480` إلى `507` paste يضيف الصور إلى `selectedImages`.
  - `mohamed/assets/js/chat/chat-media.js:509` إلى `570` drag/drop يقبل عدة ملفات صور ويمررها لنفس مسار المعاينة.
  - `mohamed/assets/js/chat/chat-media.js:573` إلى `621` file picker متعدد يقبل حتى 6 صور مع HEIC وحجم 12MB.
  - `mohamed/assets/js/chat/chat-media.js:685` إلى `831` يرسل الصور المحددة بالتتابع عبر `/messages/media` مع caption للأولى فقط وحارس منع التكرار.
  - `mohamed/assets/js/chat/chat-media.js:1238` إلى `1290` fallback الكاميرا/الاستديو يرفع الصورة من أول اختيار عبر `/messages/media`.
  - `mohamed/api/endpoints/media.php:13` إلى `243` endpoint يرفع ويرسل الصور على واتساب/تليجرام/ماسنجر ويعيد `message_id/media_url`.
- اختبارات:
  - `php -l mohamed/client/chat/partials/chat-area.php` نجح.
  - `php -l mohamed/client/chat/partials/modals.php` نجح.
  - `php -l mohamed/api/endpoints/media.php` نجح.
  - `php -l mohamed/client/chat.php` نجح.
  - `node --check mohamed/assets/js/chat/chat-media.js` نجح.
  - `node --check mohamed/assets/js/chat/chat-switch.js` نجح.
  - `node --check mohamed/assets/js/chat/api-client.js` نجح.
- بصمة المنصة: `POST /qa-review` verdict=`ok`، step_id=`1217`، `qa_reviewed=true`.
- النسخة/الكوميت وقت المراجعة: `mohamed/VERSION` = `1.1.149`, git `9aa9fcb`.

## 2026-07-01 — ISS-2026-0028 — ✅ سليمة

- العنوان: نقل ايقونات الشات التاج ولان ريد فى البار فوق.
- الحالة وقت المراجعة: client_review.
- الحكم: الإصلاح والتعديلات اللاحقة موجودة في الكود الحقيقي، ولا يوجد سبب لإعادة فتح التذكرة.
- تحقق الكود:
  - `mohamed/client/chat/partials/chat-area.php:153` إلى `164` يضع Tags & Notes وMark unread والنجمة كأزرار مباشرة في البار العلوي.
  - `mohamed/client/chat/partials/chat-area.php:183` إلى `195` ينقل Search وTransfer إلى قائمة الثلاث نقاط.
  - `mohamed/assets/js/chat/chat-switch.js:262` إلى `312` يعيد نفس الترتيب بعد تبديل المحادثة ديناميكياً.
  - `mohamed/client/chat/partials/chat-area.php:796` إلى `819` يثبت أن زر Tags يفتح info panel وفيه إدارة/إضافة الوسوم.
  - `mohamed/assets/js/chat/chat-sidebar.js:70` إلى `97` زر Mark unread يعمل بتفويض event delegation.
  - `mohamed/assets/js/chat/chat-favorites.js:201` إلى `215` زر النجمة العلوي يفتح لوحة الرسائل المميزة.
  - `mohamed/assets/css/chat.css:5299` إلى `5311` يصغّر أيقونات المتعاونين إلى دوائر 22px وزر إضافة أصغر.
  - `mohamed/assets/js/chat/chat-contacts.js:670` إلى `725` تعديل اسم العميل يعمل بتفويض عام من أول فتح وبعد تبديل المحادثة.
  - `mohamed/assets/css/chat.css:5646` إلى `5691` يعالج هيدر الموبايل بسطرين ويُظهر اسم العميل والبادجات ويعيد زر multi-select.
- اختبارات:
  - `php -l mohamed/client/chat/partials/chat-area.php` نجح.
  - `php -l mohamed/client/chat.php` نجح.
  - `node --check mohamed/assets/js/chat/chat-switch.js` نجح.
  - `node --check mohamed/assets/js/chat/chat-sidebar.js` نجح.
  - `node --check mohamed/assets/js/chat/chat-favorites.js` نجح.
  - `node --check mohamed/assets/js/chat/chat-contacts.js` نجح.
- بصمة المنصة: `POST /qa-review` verdict=`ok`، step_id=`1216`، `qa_reviewed=true`.
- النسخة/الكوميت وقت المراجعة: `mohamed/VERSION` = `1.1.149`, git `9aa9fcb`.

## 2026-07-01 — ISS-2026-0029 — ✅ سليمة

- العنوان: لو عميل بعت رد وهوه فى الارشيف مش بيطلع من الارشيف لوحده.
- الحالة وقت المراجعة: client_review.
- الحكم: الإصلاح موجود في الكود الحقيقي، ولا يوجد سبب لإعادة فتح التذكرة.
- المرفقات التي تمت مراجعتها: صور بادج unread داخل الأرشيف، تعليم read/unread الجماعي، ظهور زر Select على الموبايل، واختفاء التاجات مع فلتر الموظف.
- تحقق الكود:
  - `mohamed/webhook.php:118` إلى `165` يمرر رسائل واتساب الواردة إلى `mohamed_unified_try_handle()`.
  - `mohamed/src/Domain/Messaging/bootstrap.php:104` إلى `130` يبني `UnifiedIncomingOrchestrator` وفيه `ContactStateUpdater`.
  - `mohamed/src/Domain/Messaging/UnifiedIncomingOrchestrator.php:83` إلى `100` يستدعي `ContactStateUpdater::touch()` بعد حفظ الرسالة.
  - `mohamed/src/Domain/Messaging/ContactStateUpdater.php:66` إلى `81` يحدّث آخر رسالة، يزيد unread، يخرج الشات من الأرشيف، ويعيد `chat_status` إلى `waiting` إذا كان مؤرشفاً.
  - `mohamed/api/endpoints/contacts.php:153` إلى `162` فلتر unread يحسب الرسائل الواردة غير المقروءة أو `marked_unread`.
  - `mohamed/assets/js/chat/chat-sidebar.js:598` إلى `614` بادج الأرشيف يأخذ العدد من `/contacts?archived=1&unread=1` ويتم تحديثه فورياً.
  - `mohamed/api/endpoints/contacts.php:910` إلى `925` bulk read يعلّم رسائل incoming نفسها read، وbulk unread يرفع `marked_unread/unread_count`.
  - `mohamed/assets/js/chat/chat-bulk.js:146` إلى `187` أزرار Read/Unread الجماعية تستدعي endpoint وتحدّث الـUI والبادج.
  - `mohamed/client/chat/partials/sidebar.php:17` إلى `19` زر multi-select موجود في رأس القائمة، و`488` إلى `503` أزرار bulk read/unread موجودة.
- اختبارات:
  - `mohamed/vendor/bin/phpunit -c mohamed/phpunit.xml --filter 'ContactStateUpdaterTest|UnifiedIncomingOrchestratorTest'` نجح: 25 tests / 79 assertions.
- بصمة المنصة: `POST /qa-review` verdict=`ok`، step_id=`1214`، `qa_reviewed=true`.
- النسخة/الكوميت وقت المراجعة: `mohamed/VERSION` = `1.1.149`, git `9aa9fcb`.

## 2026-07-01 — ISS-2026-0033 — 🔧 اترجعت

- العنوان: نظام تقيمات kpi للموظفين.
- الحالة وقت المراجعة: client_review.
- الحكم: ناقصة؛ نظام KPI الأساسي موجود، لكن طلبات لاحقة داخل نفس التذكرة لم تكتمل.
- الموجود في الكود:
  - `mohamed/auto_migrations.php:1095` إلى `1166` ينشئ جداول KPI والـpeer ratings.
  - `mohamed/client/employee_kpi.php:63` إلى `131` صفحة KPI بتبويبات التقييم/التقرير/تقييم الزملاء/الفرق/المعايير حسب الصلاحيات.
  - `mohamed/client/employee_kpi.php:217` إلى `260` تعديل كامل للمعايير.
  - `mohamed/client/employee_kpi.php:307` إلى `342` تقرير KPI مع المسميات والمقاييس التلقائية وتعاون الزملاء.
  - `mohamed/api/endpoints/kpi.php:17` إلى `37` و`415` إلى `496` صلاحيات المدير/القائد/الموظف العادي في API.
  - `mohamed/api/endpoints/kpi.php:44` إلى `86` المقاييس التلقائية.
  - `mohamed/api/endpoints/kpi.php:552` إلى `623` تقييم الزملاء الشهري.
- الكسر/النقص:
  - Step 893 طلب صراحة إضافة تقييم الزملاء في الشات الداخلي للتذكير؛ فحص `mohamed/client/team_chat.php` و`mohamed/employee/team_chat.php` و`mohamed/assets/js/team-chat.js` و`mohamed/api/endpoints/team_chat.php` لا يحتوي أي تكامل KPI/peer poll. البحث عن `kpi|peer|تقييم|استفتاء` في ملفات الشات الداخلي لا يعيد إلا `pollTimer` لجلب الرسائل في `team-chat.js:16` و`539` إلى `542`.
  - Step 586 اعتمد أن استفتاء الزملاء يمكن ضبطه عند الإنشاء إجباري/اختياري؛ الموجود في `mohamed/client/employee_kpi.php:98` إلى `106` و`mohamed/api/endpoints/kpi.php:586` إلى `623` تقييم شهري مباشر فقط، بدون إنشاء Poll وبدون mandatory/optional.
  - `mohamed/auto_migrations.php:1152` إلى `1166` ينشئ `kpi_peer_ratings` فقط، ولا يوجد جدول/حقل لإلزامية الاستفتاء أو تذكير الشات الداخلي.
- اختبارات:
  - `php -l mohamed/client/employee_kpi.php` نجح.
  - `php -l mohamed/employee/kpi.php` نجح.
  - `php -l mohamed/api/endpoints/kpi.php` نجح.
  - `php -l mohamed/api/v1/index.php` نجح.
  - `php -l mohamed/client/team_chat.php` نجح.
  - `php -l mohamed/employee/team_chat.php` نجح.
  - `node --check mohamed/assets/js/team-chat.js` نجح.
- أكشن المنصة: `POST /reopen`، رجعت إلى `in_implementation`، step_id=`1209`.
- النسخة/الكوميت وقت المراجعة: `mohamed/VERSION` = `1.1.149`, git `9aa9fcb`.

## 2026-07-01 — ISS-2026-0035 — ✅ سليمة

- العنوان: عمل ترتيب للتاج اقدر ارتب ايه اول وايه ثانى.
- الحالة وقت المراجعة: client_review.
- الحكم: الإصلاح موجود في مسار الشات الحالي، ولا يوجد سبب لإعادة فتح التذكرة.
- تحقق الكود:
  - `mohamed/auto_migrations.php:1065` إلى `1071` يضيف `sort_order` إلى `contact_tags`.
  - `mohamed/api/endpoints/tags.php:15` إلى `22` يعيد `/tags` مرتباً حسب `COALESCE(t.sort_order, 999999) ASC, t.name ASC`.
  - `mohamed/api/endpoints/tags.php:82` إلى `100` يدعم تحديثاً جزئياً لـ`sort_order` عبر `PUT /tags/:id`.
  - `mohamed/assets/js/chat/chat-contacts.js:73` إلى `90` يعرض أزرار أعلى/أسفل داخل إدارة الوسوم.
  - `mohamed/assets/js/chat/chat-contacts.js:181` إلى `197` يبدل ترتيب الوسم ويحفظ `sort_order` لكل الوسوم.
  - `mohamed/api/endpoints/chat_init.php:442` إلى `447` يحمل تاجات فلتر الشات بترتيب `sort_order`.
  - `mohamed/client/chat/partials/sidebar.php:237` إلى `256` يرندر فلتر التاجات بنفس ترتيب `chat_init`.
  - `mohamed/api/v1/index.php:89` إلى `94` يربط routes التاجات المستخدمة من `ChatAPI`.
- ملاحظة مراجعة: ملف `client/chat/ajax/tags.php` القديم ما زال يرتب بالاسم، لكنه ليس مصدر فلتر الشات الحالي؛ `client/chat.php` يستخدم `chat_init` للتحميل الأولي و`chat-contacts.js` يستخدم `/api/v1/tags` للإدارة.
- اختبارات:
  - `php -l mohamed/api/endpoints/tags.php` نجح.
  - `php -l mohamed/api/endpoints/chat_init.php` نجح.
  - `php -l mohamed/client/chat/partials/sidebar.php` نجح.
  - `node --check mohamed/assets/js/chat/chat-contacts.js` نجح.
- بصمة المنصة: `POST /qa-review` verdict=`ok`، step_id=`1207`، `qa_reviewed=true`.
- النسخة/الكوميت وقت المراجعة: `mohamed/VERSION` = `1.1.149`, git `9aa9fcb`.

## 2026-07-01 — ISS-2026-0036 — 🔧 اترجعت

- العنوان: احاصئيه الموظف محتاجه تعديل فى الداش بورت بتاعه.
- الحالة وقت المراجعة: client_review.
- الحكم: ناقصة وظيفياً؛ التذكرة طلبت عرض كام تاسك/تيكت الموظف نفذه وكام عليه، لكن الكود يعرض المتبقي فقط.
- تحقق التايملاين:
  - Step 726 طلب صراحة: `ونفذ كام تاسك او تيكت وعليه قد ايه`.
  - Step 846 سلّم: شاتات متأخرة، أوردرات اليوم، شاتات رُد عليها اليوم، KPI أمس، وتاسكات/تيكتات مفتوحة فقط.
- تحقق الكود:
  - `mohamed/employee/dashboard.php:62` إلى `112` يضيف إحصائيات اليوم، لكن جزء المهام/التذاكر يعرّف فقط `tasks_pending` و`tickets_open`.
  - `mohamed/employee/dashboard.php:242` إلى `263` يعرض كارتين فقط: تاسكات مفتوحة وتيكتات مفتوحة.
  - لا يوجد حساب أو عرض لـ completed/executed tasks أو closed/completed tickets داخل `employee/dashboard.php`.
  - نظام التاسكات يدعم الإكمال فعلاً في `mohamed/api/endpoints/tasks.php:312` إلى `318` و`364` إلى `371`، لذلك النقص في الداشبورد وليس استحالة بيانات.
- الموجود السليم: شاتات متأخرة >30 دقيقة، أوردرات اليوم بالتقويم، شاتات رُد عليها اليوم، وKPI أمس موجودة في `mohamed/employee/dashboard.php:68` إلى `101` و`183` إلى `240`.
- اختبارات:
  - `php -l mohamed/employee/dashboard.php` نجح.
  - `php -l mohamed/languages/ar.php` نجح.
  - `php -l mohamed/languages/en.php` نجح.
- أكشن المنصة: `POST /reopen`، رجعت إلى `in_implementation`، step_id=`1205`.
- النسخة/الكوميت وقت المراجعة: `mohamed/VERSION` = `1.1.149`, git `9aa9fcb`.

## 2026-07-01 — ISS-2026-0057 — 🔧 اترجعت

- العنوان: نظام التحضير والحجز.
- الحالة وقت المراجعة: client_review.
- الحكم: ناقصة عن المطلوب المتفق عليه داخل نفس التذكرة؛ الموجود يغطي المرحلة 1 و2 فقط، بينما الطلب الأصلي ورد العميل وافقا على استكمال المراحل داخل نفس التذكرة.
- الموجود في الكود:
  - `mohamed/client/orders.php:58` إلى `64` فلتر حالة التحضير.
  - `mohamed/client/orders.php:349` إلى `358` قسم حالة التحضير داخل تعديل الأوردر.
  - `mohamed/api/endpoints/orders.php:108` إلى `110` فلترة `prep_status/preparer`.
  - `mohamed/api/endpoints/orders.php:218` إلى `242` تحديث `prep_status` وتسجيل `prep_updated_at`.
  - `mohamed/client/preparation.php:59` إلى `128` شاشة التحضير للمحضّر/المدير مع أزرار جاري/جاهز/مشكلة وشكل موبايل.
- الناقص من نفس التذكرة حسب الوصف والتقسيم الموافق عليه:
  - طريقة الأكواد: إدخال كود ERP + عدد + لون + مقاس، وربطها بأكواد البسيط ERP.
  - طريقة الصور: رفع/عرض صور الطلب والرد على كل صورة ببديل/تصوير بديل/غير متاح + ملاحظة.
  - الأقسام: تحديد قسم/تاج التحضير للمحضّر وتوجيه الأوردرات حسب القسم أو كل الأقسام.
  - ظهور ردود المحضّر فوراً للمتابع داخل تذكرة الأوردر، وتبويب أوردرات محضّر آخر/طلب مساعدة.
- اختبارات:
  - `php -l mohamed/client/preparation.php` نجح.
  - `php -l mohamed/employee/preparation.php` نجح.
  - `php -l mohamed/client/orders.php` نجح.
  - `php -l mohamed/api/endpoints/orders.php` نجح.
  - `php -l mohamed/includes/header.php` نجح.
  - `php -l mohamed/includes/employee_header.php` نجح.
- أكشن المنصة: `POST /reopen`، رجعت إلى `in_implementation`، step_id=`1203`.
- النسخة/الكوميت وقت المراجعة: `mohamed/VERSION` = `1.1.148`, git `9aa9fcb`.

## 2026-07-01 — ISS-2026-0017 — ✅ سليمة

- العنوان: مشكله في عرض عدد الشات لا تزيد عن خمسين.
- الحالة وقت المراجعة: closed.
- الحكم: الإصلاح موجود في الكود الحقيقي، ولا يوجد سبب لإعادة فتح التذكرة.
- المطلوب الحقيقي من المرفقات والوصف: فلتر الموظف كان يعرض أول 50 فقط رغم وجود أكثر من ذلك، ولا يعمل Load More/التمرير، وعدّاد التاب يظل 50.
- تحقق الكود:
  - `mohamed/assets/js/chat/api-client.js:64` إلى `70` أبقى `get()` كما هو.
  - `mohamed/assets/js/chat/api-client.js:111` إلى `116` أضاف `getWithMeta()` لإرجاع الغلاف الكامل مع `pagination`.
  - `mohamed/assets/js/chat/chat-sidebar.js:746` إلى `754` يستخدم `ChatAPI.getWithMeta('/contacts', params)` في `loadServerFiltered()`.
  - `mohamed/assets/js/chat/chat-sidebar.js:778` إلى `788` يحدد ظهور زر Load More من `pagination.total_pages` ويضبط `data-offset` و`data-total`.
  - `mohamed/assets/js/chat/chat-sidebar.js:279` إلى `334` زر Load More يرسل الصفحة التالية مع الفلاتر النشطة ويضيف النتائج الجديدة فقط.
  - `mohamed/assets/js/chat/chat-sidebar.js:352` إلى `379` التمرير اللانهائي يضغط زر Load More قرب نهاية القائمة ويتوقف عند `loaded >= total`.
  - `mohamed/client/chat/partials/sidebar.php:721` إلى `734` يرندر حاوية Load More دائماً ويترك JS يتحكم في ظهورها حسب الفلتر النشط.
  - `mohamed/api/endpoints/contacts.php:13` إلى `19` يدعم `page/per_page`، و`211` إلى `214` يحسب `total` بعد تطبيق الفلاتر.
- اختبارات:
  - `php -l mohamed/api/endpoints/contacts.php` نجح.
  - `php -l mohamed/client/chat/partials/sidebar.php` نجح.
  - `node --check mohamed/assets/js/chat/api-client.js` نجح.
  - `node --check mohamed/assets/js/chat/chat-sidebar.js` نجح.
- بصمة المنصة: `POST /qa-review` verdict=`ok`، step_id=`1202`، `qa_reviewed=true`.
- النسخة/الكوميت وقت المراجعة: `mohamed/VERSION` = `1.1.148`, git `9aa9fcb`.

## 2026-07-01 — ISS-2026-0018 — ✅ سليمة — بصمة QA على المنصة

- العنوان: ارقام وهميه فى unread على dashboard.
- الحالة وقت المراجعة: closed.
- الحكم: الإصلاح كان متراجعاً سابقاً وموجوداً في الكود؛ تم تسجيل بصمة QA الرسمية الآن.
- تحقق الكود:
  - `mohamed/api/endpoints/dashboard.php:16` إلى `24` عداد `/dashboard/unread` يستثني المؤرشف.
  - `mohamed/api/endpoints/dashboard.php:30` إلى `44` قائمة أعلى unread في نفس endpoint تستثني المؤرشف.
  - `mohamed/api/endpoints/dashboard.php:110` إلى `118` كارت stats لقيمة `unread_conversations` يستثني المؤرشف.
  - `mohamed/api/endpoints/dashboard.php:275` إلى `291` قائمة unread contacts داخل stats تستثني المؤرشف.
- اختبارات:
  - `php -l mohamed/api/endpoints/dashboard.php` نجح.
  - `php -l mohamed/client/dashboard.php` نجح.
- بصمة المنصة: `POST /qa-review` verdict=`ok`، step_id=`1201`، `qa_reviewed=true`.
- النسخة/الكوميت وقت المراجعة: `mohamed/VERSION` = `1.1.148`, git `9aa9fcb`.

## 2026-07-01 — ISS-2026-0019 — ✅ سليمة

- العنوان: رقم وهامى فى قائمه الانتظار فى حساب الموظفين.
- الحالة وقت المراجعة: closed.
- الحكم: الإصلاح موجود في الكود الحقيقي، ولا يوجد سبب لإعادة فتح التذكرة.
- المطلوب الحقيقي من المرفقات: رقم وهمي كبير يظهر في قائمة انتظار الموظف رغم عدم وجود شاتات حقيقية منتظرة.
- تحقق التايملاين: بعد مراجعة ثانية تم تأكيد أن السبب هو احتساب الشاتات المؤرشفة غير المسندة في claim queue، وتم تنفيذ استثناء المؤرشف.
- تحقق الكود:
  - `mohamed/api/endpoints/contacts.php:38` إلى `45` مسار `queue=claim-queue` للموظف يقيّد غير المسند ويستثني المؤرشف صراحة بـ`COALESCE(c.is_archived, 0) = 0`.
  - `mohamed/assets/js/chat/chat-sidebar.js:640` إلى `647` بادج `claimQueueCount` يأخذ العدد من `/contacts` مع `queue=claim-queue` و`per_page=1`، أي من نفس الاستعلام المصحح.
  - `mohamed/client/chat/partials/sidebar.php:65` إلى `74` يعرض بادج قائمة الانتظار للموظف فقط عندما تكون claim mode.
  - `mohamed/api/endpoints/sidebar.php:41` إلى `43` و`93` إلى `102` عداد الـsidebar العام يستثني المؤرشف أيضاً.
- اختبارات:
  - `php -l mohamed/api/endpoints/contacts.php` نجح.
  - `php -l mohamed/api/endpoints/sidebar.php` نجح.
  - `node --check mohamed/assets/js/chat/chat-sidebar.js` نجح.
- بصمة المنصة: `POST /qa-review` verdict=`ok`، step_id=`1200`، `qa_reviewed=true`.
- النسخة/الكوميت وقت المراجعة: `mohamed/VERSION` = `1.1.148`, git `9aa9fcb`.

## 2026-07-01 — ISS-2026-0020 — ✅ سليمة

- العنوان: لا اقدر على تحويل رسائل من شات لشات مافيش فورد.
- الحالة وقت المراجعة: closed.
- الحكم: الإصلاح موجود في الكود الحقيقي، ولا يوجد سبب لإعادة فتح التذكرة.
- المطلوب الحقيقي من المرفقات: Forward لرسائل متعددة من شات لشات، ثم إصلاح مشكلتين: البحث عن هدف التحويل لا يجد شات مفتوح بالاسم/الرقم، ومربع التحديد كان يضغط النجمة بدل السلكت.
- تحقق الكود:
  - `mohamed/assets/js/chat/chat-messaging.js:243` إلى `245` يضيف زر Forward على الرسالة.
  - `mohamed/assets/js/chat/chat-forward.js:68` إلى `91` يدخل وضع تحديد الرسائل، يضيف checkbox كبير، ويجعل الضغط على الرسالة نفسها يحددها.
  - `mohamed/assets/css/chat.css:5314` إلى `5316` يخفي أزرار الرسالة والنجمة أثناء وضع التحديد.
  - `mohamed/assets/js/chat/chat-forward.js:145` إلى `160` يبحث في السيرفر عند كتابة اسم/رقم، وليس في أول مجموعة محملة فقط.
  - `mohamed/assets/js/chat/chat-forward.js:221` إلى `244` يرسل الرسائل المحددة إلى الأهداف المختارة عبر `/messages/:id/forward`.
  - `mohamed/api/endpoints/forward.php:61` إلى `124` يقبل أكثر من target ويعيد نتيجة لكل هدف.
  - `mohamed/api/endpoints/forward.php:130` إلى `152` يعيد إرسال النص/اللينك عبر `SendMessageUseCase`.
  - `mohamed/api/endpoints/forward.php:159` إلى `261` يعيد إرسال الصور/الصوت/الفيديو/المستندات، ويفرض نافذة واتساب المفتوحة عند الوسائط في `199` إلى `204`.
  - `mohamed/client/chat.php:343` يحمل `chat-forward.js`، والترجمات موجودة في `mohamed/languages/ar.php:1155` إلى `1162` و`mohamed/languages/en.php:1156` إلى `1163`.
- اختبارات:
  - `php -l mohamed/api/endpoints/forward.php` نجح.
  - `node --check mohamed/assets/js/chat/chat-forward.js` نجح.
  - `node --check mohamed/assets/js/chat/chat-messaging.js` نجح.
  - `php -l mohamed/client/chat.php` نجح.
- بصمة المنصة: `POST /qa-review` verdict=`ok`، step_id=`1199`، `qa_reviewed=true`.
- النسخة/الكوميت وقت المراجعة: `mohamed/VERSION` = `1.1.148`, git `9aa9fcb`.

## 2026-07-01 — ISS-2026-0021 — ✅ سليمة

- العنوان: الاوردرات الكلوبرشن من الادمن ملهاش فلتر.
- الحالة وقت المراجعة: closed.
- الحكم: الإصلاح موجود في الكود الحقيقي، ولا يوجد سبب لإعادة فتح التذكرة.
- المطلوب الحقيقي من المرفقات: إظهار فلتر/تبويب للشاتات المشتركة للمدير/الأدمن بنفس فكرة `Shared with me`، بحيث يجلب أي شات به متعاونون.
- تحقق التايملاين: العميل أكد أن الفلتر يشمل أي شات به متعاونون ويظهر للمدير والأدمن، ثم سأل عن صلاحيات الظهور؛ الرد النهائي وضح أن الموظف يرى فقط ما هو متعاون فيه، والمدير يرى كل الشاتات المشتركة.
- تحقق الكود:
  - `mohamed/client/chat/partials/sidebar.php:84` إلى `89` يبقي تبويب الموظف `shared-with-me` في employee mode فقط.
  - `mohamed/client/chat/partials/sidebar.php:91` إلى `98` يضيف تبويب المدير/الأدمن `collaboration` عندما لا يكون Employee mode.
  - `mohamed/api/endpoints/contacts.php:46` إلى `55` يقيّد `shared-with-me` للموظف على `cc.employee_id = current employee`.
  - `mohamed/api/endpoints/contacts.php:65` إلى `74` يضيف منطق المدير/الأدمن: أي شات عليه متعاون نشط `removed_at IS NULL` داخل نفس `user_id`.
  - `mohamed/assets/js/chat/chat-sidebar.js:650` إلى `658` يحسب badge تبويب `collaboration` من السيرفر.
  - `mohamed/assets/js/chat/chat-sidebar.js:1159` إلى `1168` يمرر queue المختار ويعيد تحميل القائمة فور الضغط.
  - `mohamed/languages/ar.php:2055` و`2056` و`mohamed/languages/en.php:2056` و`2057` تحتوي الترجمات.
- اختبارات:
  - `php -l mohamed/api/endpoints/contacts.php` نجح.
  - `php -l mohamed/client/chat/partials/sidebar.php` نجح.
  - `node --check mohamed/assets/js/chat/chat-sidebar.js` نجح.
- بصمة المنصة: `POST /qa-review` verdict=`ok`، step_id=`1198`، `qa_reviewed=true`.
- النسخة/الكوميت وقت المراجعة: `mohamed/VERSION` = `1.1.148`, git `9aa9fcb`.

## 2026-07-01 — ISS-2026-0023 — ✅ سليمة

- العنوان: لون الشات المحول.
- الحالة وقت المراجعة: closed.
- الحكم: الإصلاح موجود في الكود الحقيقي، ولا يوجد سبب لإعادة فتح التذكرة.
- المطلوب الحقيقي من المرفقات: تمييز الشات المحوّل/الأوردر بصرياً، وإظهار بادج أزرق بعدد التحويلات الواردة بجانب `My Chats` في حساب الموظف.
- تحقق التايملاين: الـverification قال إن بادج التحويلات يظهر بجانب `My Chats`، وإن الشات الذي عليه أوردر نشط يتلون أحمر مع أيقونة كيس، وبعد شكوى العميل عن التابات قال إن العلامة ترجع مع كل فلتر.
- تحقق الكود:
  - `mohamed/includes/employee_header.php:423` إلى `429` يضيف `sbTransferBadge` بجانب `My Chats` في هيدر الموظف.
  - `mohamed/api/endpoints/sidebar.php:111` إلى `133` يحسب `transfers_pending` من `transfer_seen = 0` للشاتات المحولة للموظف.
  - `mohamed/includes/footer.php:156` إلى `192` يحدث البادجات كل 30 ثانية ويرسم `transfers_pending` داخل `sbTransferBadge`.
  - `mohamed/api/endpoints/chat_init.php:760` إلى `774` يضيف `has_order` للتحميل الأولي من الأوردرات النشطة.
  - `mohamed/api/endpoints/contacts.php:304` إلى `318` يضيف `has_order` عند الفلاتر/إعادة تحميل القائمة.
  - `mohamed/client/chat/partials/sidebar.php:575` إلى `577` يضيف class `has-order` في الرندر الأولي.
  - `mohamed/assets/js/chat/chat-realtime.js:222` إلى `224` يحافظ على `has-order` للعناصر الديناميكية.
  - `mohamed/assets/css/chat.css:5284` إلى `5298` يطبق اللون الأحمر وأيقونة كيس الشراء.
- اختبارات:
  - `php -l mohamed/includes/employee_header.php` نجح.
  - `php -l mohamed/includes/footer.php` نجح.
  - `php -l mohamed/api/endpoints/sidebar.php` نجح.
  - `php -l mohamed/api/endpoints/chat_init.php` نجح.
  - `php -l mohamed/api/endpoints/contacts.php` نجح.
  - `node --check mohamed/assets/js/chat/chat-realtime.js` نجح.
  - `node --check mohamed/assets/js/chat/chat-sidebar.js` نجح.
- بصمة المنصة: `POST /qa-review` verdict=`ok`، step_id=`1191`، `qa_reviewed=true`.
- النسخة/الكوميت وقت المراجعة: `mohamed/VERSION` = `1.1.148`, git `9aa9fcb`.

## 2026-07-01 — ISS-2026-0024 — 🔧 اترجعت

- العنوان: ترتيب الشات قديم وجديد.
- الحالة وقت المراجعة: closed.
- الحكم: مكسورة منطقياً؛ زر الترتيب موجود في المكان المطلوب لكنه لا يطبق الترتيب العالمي الصحيح مع pagination في القوائم العادية.
- المطلوب الحقيقي من المرفقات: إضافة ترتيب تصاعدي/تنازلي حسب وقت آخر رسالة بجانب الفلاتر، والقائمة المعروضة كبيرة ومقسمة تحميل (`My Chats 50` وأعداد كبيرة)، فلا يكفي ترتيب العناصر الظاهرة فقط.
- تحقق الكود:
  - `mohamed/client/chat/partials/sidebar.php:298` إلى `307` يضيف زر `chatSortBtn` بجانب الفلاتر، وهذا الجزء موجود.
  - `mohamed/assets/js/chat/chat-sidebar.js:1214` إلى `1220` عند الضغط في غير `claim-queue` يستدعي `sortContactList()` فقط.
  - `mohamed/assets/js/chat/chat-sidebar.js:721` إلى `734` يرتب عناصر `.contact-item` الموجودة حالياً في الـDOM فقط.
  - `mohamed/api/endpoints/contacts.php:240` إلى `247` يطبق `queue_sort` فقط على `claim-queue`، وباقي القوائم ثابتة على `ORDER BY last_message_time DESC`.
  - `mohamed/api/endpoints/chat_init.php:713` إلى `715` و`730` إلى `732` التحميل الأولي لـ My Chats ثابت على الأحدث أولاً.
- أثر الكسر: عند وجود أكثر من 50 محادثة، اختيار «الأقدم أولاً» في My Chats يعرض أقدم عنصر داخل أحدث 50 فقط، وليس أقدم الشاتات فعلياً، و`Load More` يستمر من ترتيب السيرفر الأحدث أولاً.
- اختبارات:
  - `node --check mohamed/assets/js/chat/chat-sidebar.js` نجح.
  - `php -l mohamed/api/endpoints/contacts.php` نجح.
  - `php -l mohamed/api/endpoints/chat_init.php` نجح.
  - `php -l mohamed/client/chat/partials/sidebar.php` نجح.
- أكشن المنصة: `POST /reopen`، رجعت إلى `in_implementation`، step_id=`1189`.
- النسخة/الكوميت وقت المراجعة: `mohamed/VERSION` = `1.1.148`, git `9aa9fcb`.

## 2026-07-01 — ISS-2026-0030 — ✅ سليمة

- العنوان: اضهار اللغه فى حساب الموظف.
- الحالة وقت المراجعة: closed.
- الحكم: الإصلاح موجود في الكود الحقيقي، ولا يوجد سبب لإعادة فتح التذكرة.
- المطلوب الحقيقي من المرفق: صورة `اضهار اللغه فى حساب الموظف.png` تشير إلى مكان مبدّل اللغة في الهيدر، والمطلوب ظهوره في حساب الموظف مثل حساب المدير.
- تحقق التايملاين: التحليل قال إن الموظف يستخدم `includes/employee_header.php` بدون مبدّل اللغة، والـverification قال إنه تمت إضافة `getLanguageSwitcher()` لهيدر الموظف.
- تحقق الكود:
  - `mohamed/includes/employee_header.php:6` و`7` يحددان اللغة الحالية واتجاه النص.
  - `mohamed/includes/employee_header.php:505` إلى `510` يضيفان `getLanguageSwitcher()` داخل top navbar في حساب الموظف بجوار زر المساعدة.
- اختبارات:
  - `php -l mohamed/includes/employee_header.php` نجح.
  - `php -l mohamed/includes/header.php` نجح.
- بصمة المنصة: `POST /qa-review` verdict=`ok`، step_id=`1188`، `qa_reviewed=true`.
- النسخة/الكوميت وقت المراجعة: `mohamed/VERSION` = `1.1.148`, git `9aa9fcb`.

## 2026-07-01 — ISS-2026-0031 — ✅ سليمة

- العنوان: البحث الافتراضى فى الشات.
- الحالة وقت المراجعة: closed.
- الحكم: الإصلاح موجود في الكود الحقيقي، ولا يوجد سبب لإعادة فتح التذكرة.
- المطلوب الحقيقي من المرفقات:
  - صورة `البحث الافتراضى.png` توضّح أن الوضع الأخضر/Globe مع Tooltip `Contacts — all (active + archived)` هو المطلوب كافتراضي بدلاً من الرمادي `current view`.
  - صورة `البحث لسه مش شغال اخضر افتراضى.png` كانت شكوى من محاولة الإصلاح الأولى: كتابة رقم في البحث تظهر `No contacts found` رغم أن المطلوب أن يشمل البحث الأرشيف من أول مرة.
- تحقق التايملاين: الـverification الثاني قال إن القيمة كانت `1` لكن `applyScopeMode()` لم تكن تُستدعى عند التحميل، وتم إصلاح ذلك باستدعائها عند تهيئة الشات.
- تحقق الكود:
  - `mohamed/assets/js/chat/chat-sidebar.js:419` يضبط `searchScopeMode = 1` كافتراضي.
  - `mohamed/assets/js/chat/chat-sidebar.js:432` إلى `441` تجعل الوضع 1 يفعّل `searchScopeAll` ويغير الزر للأخضر/أيقونة globe والـplaceholder.
  - `mohamed/assets/js/chat/chat-sidebar.js:472` إلى `476` تستدعي `applyScopeMode()` عند التحميل، وهي نقطة الفشل التي ظهرت في شكوى العميل.
  - `mohamed/assets/js/chat/chat-sidebar.js:690` إلى `694` عند وجود بحث والوضع الأخضر مفعّل لا يرسل `archived`، فلا يقيّد النتائج بالظاهر فقط.
  - `mohamed/api/endpoints/contacts.php:16` إلى `18` و`85` إلى `88` يفلتر الأرشيف فقط إذا أُرسل `archived` صراحة؛ غيابها يعني ظاهر + أرشيف.
  - `mohamed/client/chat.php:333` يحمل `chat-sidebar.js` مباشرة مع `filemtime` لكسر الكاش، ولا يتم تحميل `assets/js/chat.js` القديم في صفحة الشات.
- اختبارات:
  - `node --check mohamed/assets/js/chat/chat-sidebar.js` نجح.
  - `php -l mohamed/api/endpoints/contacts.php` نجح.
  - `php -l mohamed/client/chat.php` نجح.
  - `php -l mohamed/client/chat/partials/sidebar.php` نجح.
- بصمة المنصة: `POST /qa-review` verdict=`ok`، step_id=`1187`، `qa_reviewed=true`.
- النسخة/الكوميت وقت المراجعة: `mohamed/VERSION` = `1.1.148`, git `9aa9fcb`.

## 2026-07-01 — ISS-2026-0032 — ✅ سليمة

- العنوان: عمل بحث فى الرد السريع.
- الحالة وقت المراجعة: closed.
- الحكم: الإصلاح موجود في الكود الحقيقي، ولا يوجد سبب لإعادة فتح التذكرة.
- المطلوب الحقيقي من المرفق: صورة `عمل بحث فى الرد السريع فى الشات.png` تعرض نافذة `Quick Replies` داخل الشات مع سهم/تحديد على مكان حقل بحث أعلى قائمة الردود السريعة.
- تحقق التايملاين: العميل وافق أن البحث يكون "بس بالظاهر من القوالب فى الرد السريع"، والـverification يقول إن البحث يفلتر بالعنوان الظاهر ويخفي التصنيفات الفارغة ويعمل بعد تبديل المحادثة.
- تحقق الكود:
  - `mohamed/client/chat/partials/chat-area.php:642` أضاف حقل `snippetsSearchInput` أعلى `snippetsList` في نافذة الردود السريعة الأساسية.
  - `mohamed/assets/js/chat/chat-switch.js:653` يعيد إضافة نفس حقل البحث عند إعادة بناء composer بعد تبديل المحادثة.
  - `mohamed/assets/js/chat/chat-media.js:156` يضع `data-search` من `s.title` فقط، مطابق لطلب البحث بالظاهر من القوالب.
  - `mohamed/assets/js/chat/chat-media.js:194` دالة `filterSnippets()` تفلتر العناصر لحظياً وتخفي عناوين التصنيفات الفارغة.
  - `mohamed/assets/js/chat/chat-media.js:212` listener مفوض على input، فيستمر بعد تبديل المحادثة.
  - `mohamed/languages/ar.php:1154` و`mohamed/languages/en.php:1155` يحتويان ترجمة placeholder للبحث.
- اختبارات:
  - `php -l mohamed/client/chat/partials/chat-area.php` نجح.
  - `node --check mohamed/assets/js/chat/chat-media.js` نجح.
  - `node --check mohamed/assets/js/chat/chat-switch.js` نجح.
  - `php -l mohamed/client/chat.php` نجح.
  - `php -l mohamed/languages/ar.php` نجح.
  - `php -l mohamed/languages/en.php` نجح.
- بصمة المنصة: `POST /qa-review` verdict=`ok`، step_id=`1182`، `qa_reviewed=true`.
- النسخة/الكوميت وقت المراجعة: `mohamed/VERSION` = `1.1.145`, git `9aa9fcb`.

## 2026-07-01 — ISS-2026-0018 — ✅ سليمة — مراجعة محدثة بعد إصلاح عرض الصور

- العنوان: ارقام وهميه فى unread على dashboard.
- الحالة وقت المراجعة: closed.
- الحكم: الإصلاح موجود في الكود الحقيقي، ولا يوجد سبب لإعادة فتح التذكرة.
- المطلوب الحقيقي من المرفق: صورة `1002359643.jpg` تعرض Dashboard وفي كارت `Unread Conversations` الرقم `591` مع سهم أحمر ووسم `Needs Attention`، أي أن المشكلة تضخم رقم unread في الداشبورد.
- تحقق التايملاين: العميل أكد "لا احسب الى فى الارشيف غير مقروء"، والـverification يقول إن `is_archived` اتضافت لاستعلامات unread في `dashboard.php`.
- تحقق الكود:
  - `mohamed/api/endpoints/dashboard.php:20` يستثني المؤرشف في `GET /dashboard/unread` count.
  - `mohamed/api/endpoints/dashboard.php:40` يستثني المؤرشف في قائمة أعلى unread contacts لنفس endpoint.
  - `mohamed/api/endpoints/dashboard.php:114` يستثني المؤرشف في `GET /dashboard/stats` لقيمة `unread_conversations`.
  - `mohamed/api/endpoints/dashboard.php:275` يستثني المؤرشف في `unread_contacts` داخل stats.
  - `mohamed/client/dashboard.php:850` يعرض `d.unread_conversations`.
  - `mohamed/client/dashboard.php:1092` يحمل `/dashboard/stats`.
  - `mohamed/client/dashboard.php:1105` يعمل polling على `/dashboard/unread`.
- اختبارات:
  - `php -l mohamed/api/endpoints/dashboard.php` نجح.
  - `php -l mohamed/client/dashboard.php` نجح.
- النسخة/الكوميت وقت المراجعة المحدثة: `mohamed/VERSION` = `1.1.145`, git `9aa9fcb`.

## 2026-07-01 — ISS-2026-0018 — ✅ سليمة — مراجعة أولى

- العنوان: ارقام وهميه فى unread على dashboard.
- الحالة وقت المراجعة: closed.
- الحكم: الإصلاح موجود في الكود الحقيقي، ولا يوجد سبب لإعادة فتح التذكرة.
- المطلوب: عداد `Unread Conversations` في dashboard لا يحسب الشاتات المؤرشفة كغير مقروءة.
- الدليل:
  - `mohamed/api/endpoints/dashboard.php:20` يستثني المؤرشف في `GET /dashboard/unread` count.
  - `mohamed/api/endpoints/dashboard.php:40` يستثني المؤرشف في قائمة أعلى unread contacts لنفس endpoint.
  - `mohamed/api/endpoints/dashboard.php:114` يستثني المؤرشف في `GET /dashboard/stats` لقيمة `unread_conversations`.
  - `mohamed/api/endpoints/dashboard.php:275` يستثني المؤرشف في `unread_contacts` داخل stats.
  - `mohamed/client/dashboard.php:850` يعرض `d.unread_conversations`.
  - `mohamed/client/dashboard.php:1087` يحمل `/dashboard/stats`.
  - `mohamed/client/dashboard.php:1100` يعمل polling على `/dashboard/unread`.
- ملاحظات: مرفق الصورة كان screenshot للعداد الوهمي، لكن أداة عرض الصور المحلية فشلت بسبب مشكلة sandbox `bwrap ENOSPC`; اعتمدت على وصف التذكرة والتايملاين والكود.
- النسخة/الكوميت: `mohamed/VERSION` = `1.1.141`, git `9aa9fcb`.
