لوحة تقدّم مبنية على اللِدجر وسجل git وقاعدة البيانات الحيّة، لا على الذاكرة. كل رقم هنا تم قياسه، وكل ما لم يُتحقق منه مكتوب صراحةً.
moonui4 · فرع hazemdev4 2026-07-19 لم يُدفع للريموت · لم يُدمج في mainWS-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 | بذور كتالوج تجريبي — القاعدة كانت فارغة تمامًا وكانت تحجب WP2 | ✅ | 08804f477 |
| WPS2 FIN | تجهيزات الشيك أوت (وسيلة دفع، حالات، محافظات ومدن بأسعار شحن حقيقية) + إصلاح تسريب كوبون بين الشركات مع اختبار regression | ✅ | 11e3ec2e8 · 15b4e3cf4 |
| WP-IMG-1 | الإصلاح الجذري لصور المنتجات — تفاصيله في تحليل الصور | ✅ | fa14efdf2 |
| WP-IMG-2 | استيراد ١٠٠٠ صنف بصورهم وتصنيفاتهم من قاعدة مون | 🔄 البيانات دخلت · لم يُعمل كوميت بعد | — |
الدليل الحاسم — تم بواسطة المنسّق لا بكلام الوكيل: ٦ من ٦ روابط صور من الـ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 فقط، وهذا متوقع: في المصدر ١٧٬١١٦ منتجًا له صورة واحدة و١٠ منتجات فقط لها صورتان. فالمعرض المتعدد نادر في هذه البيانات أصلًا.| البند | لماذا يهم |
|---|---|
استكمال 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 | الأكواد لا تصل أصلًا |
صيدليتي في الهيدر مقابل الصيدلاني/صيدليات في صفحات الحساب)، وأحد الوكلاء اخترع اسمًا إنجليزيًا Saydaliyti دون موافقةصفحات الحساب · المفضلة · الروشتات · الولاء · الإشعارات · صفحات 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، ولم يُسلَّم شيء لأي عميل.