واجهة المتجر الإلكتروني — أين وصلنا

لوحة تقدّم مبنية على اللِدجر وسجل git وقاعدة البيانات الحيّة، لا على الذاكرة. كل رقم هنا تم قياسه، وكل ما لم يُتحقق منه مكتوب صراحةً.

moonui4 · فرع hazemdev4 2026-07-19 لم يُدفع للريموت · لم يُدمج في main

الخلاصة في سطر

حزم الخطة: 6 من 7 مكتملة — فاضل WP6
6/7حزم الخطة
4حزم مساندة إضافية
1024منتج حيّ في القاعدة
2طلب حقيقي مُنفَّذ
385اختبار ناجح · صفر فشل
اختبار القبول الذي اتفقنا عليه تحقّق: عميل يتصفح منتجات حقيقية → يضيف للسلة → يسجّل → يتمّ طلبًا → الطلب يظهر في إدارة الـERP. تم فعليًا بطلبين: WS-20260719-6505 بإجمالي 178.000 (مدينة نصر، شحن 30) وWS-20260719-4043 بإجمالي 198.200 (برج العرب، شحن 65، كوبون 10٪). الإجمالي المعروض ساوى الإجمالي المسجَّل في الحالتين.

المعاينة: https://moonui4.elbaset.com/store/ — ⚠️ هذه معاينة نشرها المنسّق يدويًا، وليست مسار التوزيع النهائي. الربط الحقيقي بـMoonStack جزء من WP6.

١. حزم الخطة المعتمدة

#المحتوىالحالةالكوميت
WP0الأساس: تحميل الإعدادات وقت التشغيل · عميل HTTP (هيدر التوثيق، تطبيع الأرقام المالية، تفريع الأخطاء الثلاثة) · حالة السلة والدخول · i18n✅ مكتمل41e14035 · 9a04a6e8
WP1الهيكل المشترك: الهيدر والفوتر والقائمة الجانبية · شارة السلة · حالة الحساب مقابل تسجيل الدخول · مبدّل اللغة الحقيقي واتجاه الصفحة✅ مكتمل05744239
WP2الكتالوج: الرئيسية · قوائم المنتجات بالفلاتر والترتيب والبحث · صفحة المنتج · التصنيفات✅ مكتمل64742cfa
WP3السلة: سلة الزائر محليًا · دمجها عند تسجيل الدخول · الكوبون · ملخّص الطلب✅ مكتملe4cf90df
WP4الحسابات: دخول · تسجيل · نسيت كلمة المرور · الحراسات على المسارات✅ مكتملf3c7b499
WP5 FINإتمام الطلب: العناوين وتسلسل المحافظة→المدينة · حساب الإجمالي من السيرفر · تنفيذ الطلب · صفحة التأكيد · التتبّع✅ مكتمل6cfc94cc · fac7abc9
WP6الأخيرة — التفاصيل بالأسفل⬜ لم تبدأ

حزم مساندة أُضيفت أثناء التنفيذ (خارج الترقيم الأصلي)

#المحتوىالحالةالكوميت
WPSبذور كتالوج تجريبي — القاعدة كانت فارغة تمامًا وكانت تحجب WP208804f477
WPS2 FINتجهيزات الشيك أوت (وسيلة دفع، حالات، محافظات ومدن بأسعار شحن حقيقية) + إصلاح تسريب كوبون بين الشركات مع اختبار regression11e3ec2e8 · 15b4e3cf4
WP-IMG-1الإصلاح الجذري لصور المنتجات — تفاصيله في تحليل الصورfa14efdf2
WP-IMG-2استيراد ١٠٠٠ صنف بصورهم وتصنيفاتهم من قاعدة مون🔄 البيانات دخلت · لم يُعمل كوميت بعد

٢. الاستيراد — قياس حيّ من قاعدة البيانات

1024منتج (1000 مستورد + 24 تجريبي)
1018له صورة رئيسية
260تصنيف
0صف بـcompany_id ≠ 1

الدليل الحاسم — تم بواسطة المنسّق لا بكلام الوكيل: ٦ من ٦ روابط صور من الـAPI الحيّ تُرجِع 200 بنوع image/jpeg:

m1-240-f04bc1bf.jpg    HTTP/1.1 200 OK   Content-Type: image/jpeg
m1-496-fff052b6.jpg    HTTP/1.1 200 OK   Content-Type: image/jpeg
m1-753-c7e08bb5.jpg    HTTP/1.1 200 OK   Content-Type: image/jpeg
m1-1010-0e6a0612.jpg   HTTP/1.1 200 OK   Content-Type: image/jpeg
m1-247-c24c65a3.jpg    HTTP/1.1 200 OK   Content-Type: image/jpeg
m1-499-44aff5f6.jpg    HTTP/1.1 200 OK   Content-Type: image/jpeg
أخطر رقم في الجدول هو الصفر: بيانات المصدر كلها على company_id = 4 والمتجر يخدم 1. لو نُقل الرقم كما هو لدخلت الألف صنف واختفت تمامًا بلا أي خطأ — لا توجد Global Scopes في الباك-إند تمسك هذه الغلطة. التحويل ٤→١ تم صحيحًا.
ملاحظة: صفوف المعرض product_images = 10 فقط، وهذا متوقع: في المصدر ١٧٬١١٦ منتجًا له صورة واحدة و١٠ منتجات فقط لها صورتان. فالمعرض المتعدد نادر في هذه البيانات أصلًا.

٣. ماذا يتبقّى فعليًا

أ) WP6 — آخر حزمة في الخطة

البندلماذا يهم
استكمال i18n — en.json كامل وصفر نص مكتوب داخل الكودقرار D5: عربي وإنجليزي من اليوم الأول
🔴 تدقيق RTL/LTR وفخ T2ملفا style-ar/en.css يربطان كل قاعدة بـbody[dir=…] بينما dir على <html> — أي أن ~٣٨٠ سطر CSS في الثيم لم تعمل قط. نقلها بأمانة يجعلها تعمل لأول مرة ويغيّر الشكل. أخطر فخ في مطابقة التصميم
بناء Tailwind للإنتاج + تدقيق الكلاسات الديناميكيةالثيم يعمل على Tailwind CDN؛ التحويل لبناء مُجمَّع يجعل أي كلاس مبني ديناميكيًا يختفي في صمت
استضافة الخطوط والأيقونات محليًاTajawal / Inter تُحمَّل من الإنترنت حاليًا
+ ربط التوزيع الحقيقي لـ/store في MoonStack، وتثبيت baseHref في angular.jsonثغرة في الخطة الأصلية: WP6 لم تذكر التوزيع صراحةً. المعاينة الحالية نشرها المنسّق يدويًا و--base-href /store/ يُكتب باليد في كل بناء

ب) 🔴 مشاكل باك-إند مسجّلة وغير مُصلَحة — تحجب أي إطلاق حقيقي

ليست جزءًا من أي حزمة، ومسجّلة في قسم الترحيلات باللِدجر. عُرضت على المالك ثلاث مرات دون قرار بفتح تذاكر.

المشكلةالأثر
[FIN] MoneyPipe يعرض خانتين عشريتين والباك-إند يخزّن ويحصّل ثلاثًاالمعروض ≠ المحصَّل. كامنة اليوم (لا منتج برقم ثالث) لكن كوبون نسبة يصلها بسهولة
نقاط الكتالوج العامة لا تفلتر company_id إطلاقًاتسريب بين الشركات على نقطة عامة بلا توثيق
CartService::addItem يجلب المنتج بلا فلترحقن منتج شركة أخرى داخل سلة وطلب
ShippingCalculator: مدينة بلا فلتر + شحن صفر عند غياب المدينةيفشل مفتوحًا = توصيل مجاني. فلوس
الباك-إند لا يمنع إضافة صنف نافد المخزونالعميل هو الحارس الوحيد؛ أي مستهلك API يبيع أكثر من الموجود
verify-code يستهلك الكود الذي يحتاجه reset-passwordاستعادة كلمة المرور مستحيلة لأي عميل حقيقي. يعمل فقط بكود التجاوز، فالعطل غير مرئي لاختبار يستخدم التجاوز
otp_bypass_enabled مفعّل والكود 123456دخول أي حساب
لا يوجد مُرسِل SMSالأكواد لا تصل أصلًا

ج) قرارات مفتوحة تنتظر المالك

د) خارج نطاق الـMVP عمدًا — لم يُبنَ ولا يُفترض أنه موجود

صفحات الحساب · المفضلة · الروشتات · الولاء · الإشعارات · صفحات CMS · قائمة الطلبات وتقييمها · بوابة الدفع (COD فقط اليوم).

٤. ما لم يُتحقق منه — بصراحة

لم يُتحققلم يفتح أحد متصفحًا ويضغط على صفحة مرسومة. كل تحقق تم عند طبقة الـAPI وقاعدة البيانات وcurl، بالإضافة إلى بناء ناجح. الطلبان حقيقيان ومسجّلان، لكن الصفحات نفسها لم تُعايَن بصريًا
لم يُتحققلافتة «الإجمالي غير مطابق» في الشيك أوت لم تُشغَّل قط — الطلبان تطابقا، فالمسار مُستنتَج لا مُشاهَد
جزئيبوابة مراجعة WP5 عبر Codex فشلت تقنيًا (السandbox انكسر فقرأ فرع main على GitHub بدل الشغل المحلي غير المدفوع). حكمها ليس حكمًا على WP5. ملاحظة واحدة منها كانت حقيقية وتم التحقق منها: MoneyPipe
تحقّقالأرقام والاختبارات والروابط في هذه الصفحة — كلها قياسات مباشرة أعادها المنسّق بنفسه ولم يأخذها من تقارير الوكلاء

مصادر هذه اللوحة: knowledge-base/plans/webstore-storefront/LEDGER.md · git log على الريبوين · قياسات مباشرة من moonui4_dev_be والـAPI الحيّ.
لم يُدفع أي شيء للريموت، ولم يُدمج شيء في main، ولم يُسلَّم شيء لأي عميل.