Changelog

What is new on the ToRun platform, newest first.

v@release.Version

minor
14 يونيو 2026

June 2026 — 53 changes

  • Added
    نماذج صور وفيديو أكثر للاختيار من بينها

    صار مُنتقي النماذج يضم الآن Google Imagen وGemini للصور، وOpenAI Sora وGoogle Veo للفيديو، إلى جانب النماذج التي كانت متاحة لديك. اختر تمامًا ما تريده، أو دع Auto يختار الأنسب لخطتك.

  • Added
    انطلقت سير عمل Workflow بالذكاء الاصطناعي دون كتابة كود، إلى جانب Marketplace للمبدعين

    اربط عدة خطوات ذكاء اصطناعي في Workflow تشغّله متى شئت، ثم انشره على Marketplace أو تصفّح ما شاركه المبدعون الآخرون. أصبح Workflow Editor وRunner وMarketplace متاحة الآن مباشرة من القائمة.

  • Added
    ثبّت ToRun على هاتفك

    أضِف ToRun إلى شاشتك الرئيسية وشغّله كتطبيق أصلي، بملء الشاشة وبأيقونته الخاصة، ليبقى على بُعد نقرة واحدة حتى وصول تطبيق الهاتف.

  • Added
    إطلالة جديدة منعشة لـ ToRun.ai

    شعار جديد وهوية بصرية أكثر أناقة في التطبيق بالكامل، مُحسَّنة للمظهرين الفاتح والداكن.

  • Added
    إجابات أذكى وأكثر تخصيصًا لك

    تحكّم في مدى تعمّق الذكاء الاصطناعي في التفكير، حتى في وضع Auto الآن. ويمكن لمطالبات الصور أن تستند بهدوء إلى ذاكرتك المحفوظة لتأتي النتائج متوافقة مع الأشخاص والتفاصيل التي تهمك. كما تُدمج الذكريات شبه المكرّرة تلقائيًا…

  • Fixed
    استوديو أكثر تنظيمًا للصور والفيديو والموسيقى

    يظهر تقدّم التوليد الآن بجوار النتيجة مباشرةً بدلًا من أسفل النموذج، وتُفتح كل صفحة نظيفة، ويبقى أحدث إبداعاتك في الواجهة والمركز بينما تستقر الأعمال الأقدم في Library الخاصة بك.

  • Fixed
    محفظة أوضح وLibrary أكثر سلاسة

    صار سجل محفظتك مقسّمًا إلى صفحات ويعرض المبالغ الدقيقة حتى أجزاء السنت، ولم يعد حذف العناصر من Library يسبّب أي خطأ.

  • Added
    كن معلِنًا بخدمة ذاتية

    أنشئ حساب المعلِن الخاص بك وقدّم حملاتك للمراجعة مباشرةً من حسابك، دون انتظار أي إعداد يدوي.

  • Fixed
    موثوقية أعلى ودقة في الفوترة وتعزيز للأمان

    خلف الكواليس: احتساب أعدل للرصيد المجاني، وفحوصات أقوى على مدفوعات المبدعين وصلاحياتهم، ومراقبة محتوى أكثر أمانًا، وتشغيل أكثر موثوقية لسير عمل Workflow.

  • Added
    محرّك ترجمة فورية ثانٍ، يدعم 77 لغة

    تتيح لك الترجمة الفورية الآن الاختيار بين محرّكين وانتقاء الأنسب لمحادثتك — بما في ذلك خيار جديد يتحدّث 77 لغة، من بينها التركية والروسية. يعرض كل خيار سعره مسبقًا، وبنقرة واحدة يمكنك عكس اتجاه الترجمة ليتمكّن الطرف الآخ…

  • Added
    أداة اختيار نماذج أوضح — ونماذج أكثر في الخطة المجانية

    النماذج التي لا تشملها خطتك تظهر الآن مع قفل صغير وطريقة بنقرة واحدة لترقية خطتك أو شحن محفظتك، بدلًا من أن تفشل فقط بعد أن ترسل رسالتك. كما أتحنا نماذج أكثر قدرة للخطة المجانية، فأصبحت النماذج اليومية مثل Haiku وSonnet…

  • Added
    مساعدك يتذكّر الصور التي تشاركها

    شارك صورة مرّة واحدة وسيحتفظ المساعد بما رآه طوال المحادثة — فيمكنك أن تسأل عنها بعد العديد من الرسائل، حتى بعد تبديل النماذج، دون أن يعيد رفع الصورة أو يحاسبك عليها مرّتين.

  • Added
    رسوم بيانية وجداول وتنسيق أنيق في المحادثة

    تعرض ردود المحادثة الآن الرسوم البيانية كرسوم حقيقية، وتنسّق الجداول بحدود واضحة، وتضبط حجم العناوين لتناسب الرسالة بدلًا من أن تملأ الشاشة — فتصبح الردود أسهل في القراءة بلمحة واحدة.

  • Fixed
    وضوح دائم عندما لا يكون شيء ما مشمولًا — دون أي طريق مسدود

    عندما يحتاج نموذج ما إلى ترقية أو ينخفض رصيدك، يظهر لك الآن شريط ودّي يحمل زرّي ترقية الخطة وشحن المحفظة في المكان نفسه. والردود التي يتعذّر إنشاؤها توضّح السبب بدلًا من ترك فقاعة فارغة، حتى بعد أن تبدّل المحادثات وتعود…

  • Fixed
    الأوقات تُعرض الآن حسب منطقتك الزمنية

    تظهر سجلّات الفوترة والسجل والنشاط الآن بتوقيتك المحلي بدلًا من UTC، فتتطابق الطوابع الزمنية مع الساعة أمامك.

  • Fixed
    قائمة محادثات أكثر تنظيمًا

    بدء محادثة جديدة يعيد الآن استخدام محادثة فارغة موجودة بدلًا من تراكم المحادثات الخالية، والمحادثات التي لم تتلقَّ أي ردّ لم تعد تزدحم في قائمتك، وتُستبدل العناوين المؤقتة باسم حقيقي بمجرّد أن تكتب شيئًا ذا معنى.

  • Added
    أعلن على ToRun

    يمكن للشركات الآن إنشاء حساب معلِن وإدارة حملاتها الإعلانية من البداية إلى النهاية — إنشاء الحملات، وإضافة المواد الإعلانية المرافقة لها، وإرسالها لمراجعة سريعة قبل ظهورها.

  • Added
    استخدم مفتاح API الخاص بك للصوت والترجمة المباشرة

    إحضار مفتاح مزوّدك الخاص يشمل الآن الصوت اللحظي والترجمة المباشرة والتفريغ النصّي المباشر أيضًا: يمرّ استخدام الذكاء الاصطناعي عبر مفتاحك الخاص ولا نتقاضى سوى رسم المنصّة الصغير لكل دقيقة.

  • Fixed
    موقع عام مُحدَّث، ورفع ملفات أكثر أمانًا، وتسجيل أكثر سلاسة

    أصبحت صفحاتنا العامة الآن مدعومة بمحتوى قابل للتحرير بعدّة لغات، وتُفحص الصور المرفوعة بحثًا عن أي محتوى غير آمن قبل تخزينها، ويعمل تسجيل الحسابات ورسائل التأكيد بالبريد الإلكتروني بموثوقية، كما جعلت مجموعة واسعة من الإص…

  • Added
    تستمر المحادثات في توليد الردود حتى عندما تنتقل إلى مكان آخر

    تعمل الردود الطويلة الآن على الخادم وتستمر بينما تنتقل بين المحادثات أو تفتح صفحة أخرى أو تغلق علامة التبويب. عُد في أي وقت لتجد الإجابة ما زالت تُكتب، أو جاهزة في انتظارك بالفعل.

  • Added
    المشاريع تمنح الآن كل محادثة السياق المناسب

    المحادثات التي تبدأ داخل مشروع تستعير تلقائيًا تعليماته والمعرفة المرفوعة والذاكرة الخاصة به، وتعرض شارة المشروع مع رابط سريع للعودة، وتذكر اسم المشروع في محادثاتك الأخيرة. كما يمكنك إضافة ملفات PDF وWord والنصوص إلى معر…

  • Added
    ذاكرة تفهم الزمن، ويمكنك تعديلها بنفسك

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

  • Added
    أحدث النماذج، إضافةً إلى صفحتي ترجمة وتفريغ صوتي مخصصتين

    أضفنا أحدث نماذج الصور والفيديو والتفريغ الصوتي والصوت الفوري، وأطلقنا صفحتي ترجمة وتفريغ صوتي مستقلتين لتصل إلى هذه الأدوات مباشرةً من القائمة.

  • Added
    مترجم صوتي فوري

    تحدّث لتُترجَم كلماتك فورًا تقريبًا: اختر لغتين، وبدّل بينهما بنقرة واحدة، ويلتقط المترجم صوتك ويبث الترجمة إليك أثناء حديثك.

  • Added
    استوديو فيديو أوضح وأكثر صدقًا

    أصبحت صفحة الفيديو تُبقي مربعاتها متوافقة عند الحذف من مكتبتك، وتتيح لك تحديد مدة المقطع لكل نموذج، وحذف المقاطع كلٌّ على حدة، وتُعلِّم نتائج المعاينة بوضوح لتعرف دائمًا ما الذي تنظر إليه.

  • Fixed
    مساعد داخل التطبيق أكثر إتقانًا

    أصبح المساعد داخل التطبيق يعرض الردود بتنسيق أنيق، ويُبقي أحدث رسالة ظاهرة أثناء الكتابة، ويحفظ الإجابة المكتملة بشكل موثوق، ويمنح كل محادثة عنوانًا تلقائيًا.

  • Fixed
    ردود المحادثة تظهر بموثوقية، الروابط والمعادلات والعملات

    الردود التي تحتوي على روابط أو معادلات رياضية أو مبالغ مالية لم تعد تظهر فارغة أو ناقصة، حتى بعد تحديث الصفحة، وتتضمن إجابات البحث المعمّق دائمًا ملخصها النهائي.

  • Fixed
    تعزيز الموثوقية ودقة الفوترة والأمان

    جولة واسعة من التحسينات خلف الكواليس: قياس أدق للاستخدام وإجماليات الإنفاق، ومبالغ مستردة تلقائية أكثر إنصافًا، ومراسلة فورية أكثر متانة، وحماية أقوى للخصوصية والأمان، ورسائل أوضح عن حالة الخدمة.

  • Fixed
    اقرأ محتوى المدونة والمجتمع دون تسجيل الدخول

    أصبحت مقالات المدونة العامة ونقاشات المنتدى — بما في ذلك تفاعلاتها وردودها — مرئيةً الآن للزوار غير المسجَّلين.

  • Fixed
    تسعير أوضح وقائمة نماذج أكثر تنظيمًا

    تُحتسب التكلفة الآن بهامش ربح واحد وعادل، ويعرض مقياسا إنفاقك الشهري وميزانيتك المتبقية قراءاتٍ دقيقة، وتم تنظيف قائمة النماذج — إحالة النماذج المتوقفة إلى التقاعد وإضافة نماذج رائدة جديدة.

  • Added
    تعرض قوائم السوق وحِزَمه الآن صور الغلاف

    يمكن لقوائم سير العمل والحِزَم عرض صورة غلاف مناسبة، مما يجعل تصفّح السوق أسهل وأكثر متعة.

  • Added
    أصبح بإمكان مساعدك داخل التطبيق أن يتصرف نيابةً عنك

    اطلب من المساعد وسيقوم بتعبئة النماذج والنقر على الأزرار والتنقل داخل التطبيق نيابةً عنك — مدعومًا بمجموعة أدوات أوسع تشمل الآن التواصل والأسئلة الشائعة والمنتدى والذاكرة وإنشاء سير عمل بخطوة واحدة.

  • Added
    يكتب المساعد ردّه مباشرةً، داخل فقاعة يمكنك تحريكها

    تظهر الإجابات الآن كلمةً كلمةً بدلاً من ظهورها دفعةً واحدة، ويمكنك سحب فقاعة المساعد إلى أي مكان يناسبك، مع تلميح مباشر لما يعمل عليه.

  • Fixed
    أنشئ مشاريعك ونظّمها دون أي عوائق

    أصبح إنشاء مشروع وبدء محادثة جديدة بداخله يعمل بسلاسة الآن، لتُبقي المحادثات والملفات والسياق ذات الصلة معًا.

  • Fixed
    فيديو وصور رمزية ورسائل صوتية أكثر سلاسة

    تُشغَّل مقاطع الفيديو بثبات، وتُحمَّل الوسائط الخاصة عبر وكيل آمن، وتظهر الآن الصور الرمزية للمبدعين والشخصيات للجميع، وتُحوَّل الرسائل الصوتية إلى نص دون أخطاء.

  • Fixed
    إشعارات أوضح عن حالة الخدمة

    عندما يواجه جزء من الخدمة مشكلة، أصبح الإشعار الآن أسهل فهمًا ولم يَعُد يكشف أسماء المزوّدين الداخلية.

  • Added
    اربط تطبيقاتك المفضلة بالمساعد

    اربط التطبيقات الخارجية بتسجيل دخول واحد أو بمفتاح API، ليتمكن المساعد من العمل مباشرةً مع الأدوات التي تستخدمها بالفعل.

  • Fixed
    توليد الصور وتحريرها بموثوقية أعلى

    تختار أدوات الصور الآن نموذجًا يناسب ما تقوم به، وتعرض معاينة فورية مدمجة للنتيجة، وعاد التحرير للعمل بعد تغيير نموذج المزوّد.

  • Fixed
    لم يَعُد الملف المحذوف يُعطّل محادثاتك أو معرض الصور

    عند حذف صورة أو مرفق، يعرض الآن سجل محادثاتك ومعرض الوسائط ومحرّر الصور عنصرًا نائبًا لطيفًا بدلاً من التوقف بسبب خطأ.

  • Added
    ترجم بين نحو 100 لغة

    يوفّر المترجم الآن أداة اختيار قابلة للبحث تضم نحو 100 لغة، تُعرض كل منها باسمها الأصلي واسمها الإنجليزي.

  • Added
    مقالات مدونة ونقاشات مجتمعية جديدة

    أضفنا مجموعة من مقالات المدونة وموضوعات المنتدى الجديدة — بما في ذلك أسئلة مُجاب عنها — ليكون لديك المزيد لتقرأه وتستكشفه منذ اليوم الأول.

  • Added
    أدوات دردشة جديدة: ملفات، كود، صور، كلام والمزيد

    يمكن للدردشة الآن البحث في ملفاتك المرفوعة، وتشغيل Python في بيئة معزولة، وتحرير الصور، ونسخ الصوت والتحدث به، وتشغيل سير عملك — كل ذلك دون مغادرة المحادثة.

  • Added
    البحث على الإنترنت والبحث المعمق مع الاستشهادات

    دع الدردشة تبحث في الإنترنت الحي، وتُجري بحثاً معمقاً متعدد المصادر، وتجلب الصفحات الكاملة وتقرأها — يأتي كل رد مع المصادر التي استُخدمت.

  • Added
    دردشة تتذكر — وتنسى عند الطلب

    يحتفظ مساعدك الآن بذاكرة خفيفة عبر المحادثات، ويستطيع عرض ما يتذكره، ويستجيب لطلب النسيان بأي لغة.

  • Added
    إنشاء الصور والفيديو والموسيقى في استوديو واحد

    قم بإنشاء الصور وتحريرها، وإنتاج أفلام قصيرة، وتأليف أغانٍ بكلمات — مدعوماً بمحركات صور وفيديو وموسيقى جديدة، مع منتقٍ مشترك للوسائط ومكتبتك على بُعد نقرة واحدة.

  • Added
    وضع الصوت في الوقت الفعلي

    تحدث إلى ToRun بصوت عالٍ — تُتيح قدرة الصوت الجديدة في الوقت الفعلي المحادثات الصوتية والنسخ المباشر في الدردشة.

  • Added
    سير العمل: تشغيلات ذات جودة أولى وموافقات واستئناف

    تفضّل تشغيلات سير العمل الآن نماذج عالية الجودة، وتتوقف للحصول على موافقتك عند الحاجة، ويمكن إلغاؤها وإعادة توليدها والاستئناف منها — مع حفظ كل مُخرج مباشرة في مكتبتك.

  • Added
    المشاريع: نظّم عملك

    قم بتجميع المحادثات والملفات والسياق ذات الصلة في مشاريع لكي يمتلك مساعدك دائماً الخلفية الصحيحة للمهمة في متناول اليد.

  • Added
    Canvas: مساحة عمل جنباً إلى جنب

    قم بصياغة المحتوى الطويل والكود وتكراره في لوحة قماشية مخصصة جنباً إلى جنب مع دردشتك.

  • Added
    محادثات أذكى وأطول

    تحافظ الملخصات المتجددة ونوافذ السياق الأذكى والتمرير الأسرع في السجل على المحادثات الطويلة متماسكة وسريعة الاستجابة، مع عناصر تحكم واضحة حين تتجاوز المحادثة نافذة النموذج.

  • Added
    فواتير صادقة وشفافة

    حصة مجانية إنسانية تُعبأ على مدى نافذة متجددة، ومقاييس إنفاق أوضح، واسترداد تلقائي عند فشل إنشاء الصور أو الفيديو، وعناصر تحكم في جهد التفكير تفتح فقط ما يتيحه رصيدك.

  • Added
    كتالوج نماذج أكبر وأحدث

    تمت إضافة عشرات نماذج 2026 وتقاعد القديمة منها، إضافة إلى مزامنة يومية تلقائية تحافظ على حداثة نماذج المزودين وأسعارهم — تُدار من كتالوج مشرف جديد.

  • Added
    شارك أفضل محادثاتك

    انشر محادثة على رابط عام وانمِّ المجتمع حول ما تُنشئه.

v@release.Version

minor
31 مايو 2026

May 2026 — 499 changes

  • Changed
    52-Q-SMOKE-HARNESS: مجموعة اختبار الدخان القابلة للتكرار من البداية للنهاية + أول تقرير انحدار

    حزمة تشغيل .NET مستقلة (test/ToRun.SmokeTests) تُجري مصادقة ضد المضيف قيد التشغيل (OpenIddict password grant) وتختبر كل قدرة أساسية من البداية للنهاية عبر HTTP API الفعلي: المصادقة/me، ذاكرة CRUD، المحفظة، الفواتير، المك…

  • Fixed
    52-Q-AI-MEDIA-ACCESS: قراءة Bunny المُصادق عليها لجميع عمليات جلب الوسائط في المسار

    وسائط المنصة موجودة في منطقة تخزين Bunny خاصة، لذا فإن الطلب البسيط

  • Added
    52-Q-MEMORY-CHAT: أداة memory_list + النسيان المتعدد اللغات

    يُكمل ميزة إدارة الذاكرة المدفوعة بالدردشة على رأس

  • Fixed
    52-Q-MEMORY-FORGET-I18N: مطابقة الطي متعدد اللغات + الاحتياطي الدلالي

    كانت أداة memory_forget تُعيد no_match للذكريات الموجودة فعلاً.

  • Fixed
    52-Q-GEMINI-FLASH-400: رفع الحد الأدنى لـ flash thinkingBudget من 128->512 + تسجيل نص Google 400

    بدأ gemini-2.5-flash في إرجاع HTTP 400 عند thinkingBudget=128 (الحد الأدنى المنخفض 52-N

  • Fixed
    52-Q-MODEL-MENU: تضمين كتالوج النماذج + الإعداد ضمن مجموعة تنقل ByokVault

    كانت صفحتا المشرف (/admin/model-catalog, /admin/model-onboarding)

  • Fixed
    52-Q-MODEL-SYNC-DEDUP: تخطي متغيرات النموذج ذات اللقطة القديمة في الاكتشاف

    كانت الاكتشافات تُطابق فقط باستخدام ProviderModelId/ModelKey الدقيقين، لذا كانت لقطات المزود القديمة

  • Changed
    52-Q-CHAT-EFFORT-UX-LOCALE: توزيع نسخة قفل الجهد + WalletCta إلى 28 لغة

    أصبحت بوابة جهد التفكير الآن قائمة على التمويل وليس على الطبقة.

  • Added
    52-Q-MODEL-SYNC-AI: تحليل AI لصفحة الأسعار كاحتياطي في مزامنة النماذج

    دمج أفضل-الحالتين في مزامنة 52-Q-MODEL-SYNC-JOB المكتملة: عندما يُعيد OpenRouter

  • Fixed
    52-Q-CHAT-EFFORT-UX: بوابة جهد واعية بالمحفظة/التمويل

    كان محدد جهد التفكير مقيداً بصرامة على طبقة الاشتراك مع إعفاء المشرف/المضيف من نهج سابق مرفوض.

  • Changed
    52-Q-MODEL-SYNC-JOB: بحث مزامنة المزودين + خريطة المعمارية

    مُخرج المرحلة 1: جرد قائمة/مصادر أسعار 26 مزوداً، و

  • Added
    52-Q-MODEL-ONBOARDING: إدارة كتالوج نماذج المشرف (قائمة/تعديل/حذف)

    كان معالج الإعداد (المراحل A-D) يُنشئ صفوف الكتالوج فقط؛ ولم يكن ثمة

  • Added
    52-P-SHARE: سطح المشاركة العامة + نمو المجتمع

    الواجهة الخلفية (torun.agent): اكتسبت SharedChat حقول IsListed/ListedSlug/ListedAt + حقول بطاقة مُدمجة؛ PublicCommunityAppService + PublicCommunityController (تغذية /community مجهولة + عارض بالـslug)؛ CommunityListingApp…

  • Fixed
    52-Q-CHAT-AUDIO-BRIDGE: نسخ الصوت المرفوع + إصلاح مشغل الصوت

    كانت مرفقات الصوت في الدردشة معطوبة؛ وقد اختلفت الأسباب الجذرية الفعلية عن

  • Fixed
    52-Q-CHAT-CONTEXT-SLASH: حفظ وضع تجاوز السياق + إعدادات مسبقة للـslash لتجربة مستخدم صادقة

    الجزء 1 — كانت قائمة معالجة تجاوز السياق في رأس الدردشة عالقة على

  • Fixed
    52-Q-BUDGET-BUILD: حذف مرجع IsCurrentMonth اليتيم للـ BudgetBucketCacheItem.DailyKey المُزال

    أدى حذف الحد اليومي (84178afab) إلى إزالة DailyKey/MonthlyKey من BudgetBucketCacheItem

  • Changed
    52-Q-SMOKE-INTEG: إصلاح طابق Mongo (تكرار _id في AiModels + عمر معاملة UoW) + اختبار تكامل عزل النقل في ResolveAsync

    الجزء 1 — إصلاح طابق اختبارات تكامل MongoDB.

  • Changed
    52-Q-CHAT-EFFORT-LOCALE: توزيع 7 مفاتيح ChatComposer:Effort إلى 28 لغة

    سلاسل محدد جهد التفكير (Effort:Tooltip, Effort:Locked:Tooltip,

  • Added
    52-Q-CHAT-EFFORT: محدد جهد التفكير لكل نموذج مُوصَّل من البداية للنهاية

    تحكم في جهد التفكير قياسي وغير مرتبط بالمزود في منشئ الدردشة،

  • Changed
    52-Q-BUDGET-DAILYCAP-REMOVE: إزالة الحد اليومي الخامل + الدقائق النشطة

    تمريرة الكود الميت النهائية لإعادة كتابة ميزانية نافذة الجلسة.

  • Changed
    52-Q-MONTHLY-SPEND-FIX: تصحيح تعليقات مصدر الإنفاق + توثيق XML إلى telemetry UserDailySummary

    يقرأ مقياس الإنفاق الشهري/اليومي من بيانات الاتصال UserDailySummary (ScopeKey=userId,

  • Changed
    52-Q-BUDGET-DEADCFG: إزالة مفاتيح تهيئة Allowance الميتة

    متابعة التدقيق لإعادة كتابة ميزانية نافذة الجلسة (2a33fd31f).

  • Fixed
    52-Q-BUDGET-BUCKET-GAUGE-ZERO: معاينة سعة الجلسة المُعدَّة عند فقدان ذاكرة التخزين المؤقت للحصة

    كان مقياس budget-bucket في الصفحة الرئيسية (/) + me-home يعرض "$0.00 / 0% / $0.00" في كل مرة

  • Added
    52-Q-BUDGET-HUMANE: حصة مجانية بنافذة جلسة متجددة (سعة $0.20 / 5h)

    كانت حصة الطبقة المجانية عبارة عن "$2 / 30d / 24h" بالتقطير: إعادة الملء = $2/720h و

  • Fixed
    52-Q-BUDGET-BUCKET-GAUGE-UX: مقياس الحصة المقروء — دقة 4 خانات عشرية + تلميح فترة الاندفاع المجاني

    كانت مقياس BUDGET BUCKET في الصفحة الرئيسية (/) وصفحة me-home (/me) يعرض "$0.00 (2% / $0.01)":

  • Fixed
    52-Q-CHAT-HISTORY-VISION-LEAK: حذف أجزاء الصور من السياق لنماذج النص فقط

    خطأ في الرؤية متعددة الجولات.

  • Changed
    52-Q-SMOKE: قفل تصنيف التوجيه في الوقت الفعلي + التفكير (حراس بدون DB)

    أول قفل للانحدار في طبقة الدخان.

  • Added
    52-Q-INVOCATION-PROTOCOL: عزل النقل عزلاً كاملاً عن توجيه الإكمال

    إصلاح السبب الجذري للأخطاء 404 المتكررة في توليد العناوين / الدردشة العامة / الرؤية: القدرة

  • Fixed
    52-Q-VISION-BRIDGE: استبعاد SKUs الوقت الفعلي من توجيه الرؤية المبني على الإكمال — مُتحقق

    أكد المستخدم أن وصف الصورة يعمل الآن.

  • Fixed
    52-Q-CHAT-IMG-PROXY: التحقق من انتماء المرفق عبر سلسلة ChatMessageId

    حصل نطاق المالك على خطأ 403 حتى لمالك الدردشة الشرعي: حيث أنشأ المدير

  • Fixed
    slice52-Q-CHAT-IMG-PROXY: عرض صور سجل الدردشة عبر وكيل التدفق الخلفي (إصلاح Bunny 503)

    السبب الجذري الحقيقي A3 (اكتُشف باختبار المتصفح المباشر): صورة مرفق الدردشة

  • Changed
    slice52-Q-AUDIT: سجل تدقيق أخطاء المسار الحرجة — C1 دورة DI مُصلحة، M1 Quartz موصى به، TODO لكل مسار

    Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

  • Fixed
    slice52-Q-QUEUE-DI-CYCLE: كسر دورة DI في المُرسِّل المصفوف عبر اعتماد أداة سير العمل الكسول

    كان حل IQueuedRequestDispatcher يُسبب تجاوز المكدس عند بدء التشغيل (غير قابل للاستثناء —

  • Fixed
    slice52-Q-LOG-ROLLING: تدوير + تحديد سجل Serilog (كان يتوقف صامتاً عند 1 GB)

    كلٌّ من مصرف وقت التشغيل (appsettings.json) ومسجلات Bootstrap

  • Fixed
    slice52-Q-CHANGELOG-IDEMPOTENT: ربط بذر سجل التغيير بـ Slug لا ExternalId (إصلاح دائم للخطأ E11000)

    السبب الجذري المتكرر: كان ChangelogBackfillDataSeedContributor يختبر الأثر التوحيدي على

  • Changed
    slice52-Q-CHANGELOG: استرداد سجل تغييرات السبرنت + مفاتيح 29 لغة (93 سبرنت جديد)

    تم تشغيل extract-sprint-changelog.py + propagate-changelog-locales.py من main:

  • Fixed
    slice52-Q-QUEUE-DI-CRASH: gate dispatcher resolution behind non-empty queue

    QueuedRequestRunner.DoWorkAsync resolved IQueuedRequestDispatcher at the TOP of

  • Added
    slice52-Q-CHAT-CTX-WINDOW-CLAMP: clamp context budget to model window (covers tier-budget > window gap)

    The chat overrun check compared raw history tokens against the TIER budget (ctxBudget.MaxInputTokens) only, so when the tier budget exceeded the routed model's context window the trim was skipped: e.g.

  • Changed
    slice52-Q-PROACTIVE-CONCERN/locale: fan out 29 concern-toast keys to 28 siblings

    Proactive "concern toast" (Honest-UX DNA pattern #3).

  • Changed
    slice52-Q-CHAT-WALLET-OVERRIDE/locale: fan out overrun + ContextOverrun keys to 28 siblings

    Translate the 16 Chat:Context:* (Agent resource) overrun-prompt/footer/toast keys and the 13 MySettings:ContextOverrun:* (ToRun resource) settings keys from en.json into all 28 sibling locales (en-GB verbatim).

  • Changed
    slice52-Q-HUMANE-ERRORS/locale: fan out 70 StatusBanner + Error keys to 28 siblings

    Propagate the EN-only humane-error + status-banner keys (ErrorHumanizerService

  • Added
    slice52-Q-CHAT-CANVAS/frontend: canvas proxy + side-panel surface

    Phase B surface for the chat-canvas (ChatGPT Canvas / Claude Artifacts

  • Changed
    slice52-Q-PROACTIVE-CONCERN: EN keys for concern toast + settings opt-out + admin effectiveness panel

    Honest-UX DNA pattern #3.

  • Added
    slice52-Q-CHAT-WALLET-OVERRIDE: per-chat overrun PATCH endpoint + Agent locale keys

    Completes the wallet-funded context-overrun feature.

  • Changed
    slice52-Q-LEARNING-LOOP/locale: fan out 10 Admin/Permission UserExperience keys to 28 siblings

    Propagates LEARNING-LOOP Phase 2 keys (Admin:UserExperience:ComplaintLoop:{Tab,Title,Subtitle,FixedInWindow} + Admin:UserExperience:TimeToFix:Empty) plus 5 earlier EN-only Permission:UserExperience.* strings from the sam…

  • Fixed
    slice52-Q-BUILD-GREEN: resolve cross-chip integration errors blocking main build

    Four parallel 52-Q chips landed code referencing symbols their sibling chips

  • Changed
    slice52-Q-CHAT-CANVAS/locale: fan out 28 Canvas/Artifacts + Chat:Summary keys to 28 siblings

    Closes the 29-locale parity gap for the CHAT-CANVAS / ChatSummaries slices,

  • Added
    slice52-Q-LEARNING-LOOP/phase2-dashboard: admin ComplaintLink panel

    Phase 2 Scope B of the honest-UX-DNA pattern #5 loop.

  • Added
    slice52-Q-AUTO-REFUND/frontend: refund toast + /me/billing highlight + /me/wallet badge

    Honest UX DNA pattern #2 (Reversibility) — make the auto-refund VISIBLE.

  • Added
    slice52-Q-AUTO-REFUND/dispatcher: two consumers on torun.billing.refunded.v1

    Honest UX DNA pattern #2 (Reversibility) — wire the projection layer

  • Added
    slice52-Q-AUTO-REFUND/triggers: wire RefundAsync at image/video failure points

    Honest UX DNA pattern #2 (Reversibility) — refund the user when something

  • Added
    slice52-Q-AUTO-REFUND/api: IMyRefundAppService + DTOs + 5-min cache

    Honest UX DNA pattern #2 (Reversibility) — user-facing read API for the

  • Changed
    slice52-Q-AUTO-REFUND/locale: EN strings + PublicChangelogEntry

    EN-only this commit — the paired slice52-Q-AUTO-REFUND-LOCALE chip fans

  • Added
    slice52-Q-AUTO-REFUND/entity: AutoRefundLog entity + EnAutoRefundTrigger enum

    Honest UX DNA pattern #2 (Reversibility) — append-only audit row for

  • Changed
    slice52-Q-CHAT-PROJECTS/locale: Projects keys across 29 locales + de/zh JSON hotfix

    Paired locale fan-out for the /me/projects feature (components landed in

  • Added
    52-Q-voice-realtime-catalog: EnBillingSource.RealtimeVoice + بذور قدرة voice-realtime + الربط

    EnBillingSource.RealtimeVoice + بذور قدرة voice-realtime + الربط

  • Added
    slice52-Q-HUMANE-ERRORS: humane error surfaces (honest-UX DNA #1 Şeffaflık)

    Backend exception → frontend humane message + retry hint + status banner.

  • Fixed
    slice52-Q-CHAT-CANVAS: dedup ChatSummaries collection + add Volo.Abp.Authorization using

    Consolidator landed both 52-Q-CHAT-CONTEXT-BUILDER's ChatSummaries

  • Added
    52-Q-voice-realtime-locale: توزيع 25 مفتاح وضع صوتي إلى 28 لغة شقيقة

    نسخة مطابقة من مفاتيح واجهة المستخدم لوضع الصوت في الوقت الفعلي المضافة إلى en.json في

  • Changed
    slice52-Q-USER-SENTIMENT-LOCALE: Privacy Policy Section 11 + UX dashboard keys in ar, hi, zh-Hans, zh-Hant, ja (5 locales)

    Native translations of the 40-key User Sentiment / Privacy Policy v3 Section 11 block (legal text per GDPR Art.

  • Added
    slice52-Q-CHAT-PROJECTS: Suite-managed file edits (Permissions+MongoDB+ChatPipeline)

    Suite-managed file edits (Permissions+MongoDB+ChatPipeline)

  • Changed
    slice52-Q-consolidate-2: land additional parallel-chip WIP

    land additional parallel-chip WIP

  • Changed
    slice52-Q-consolidate: land stashed parallel-chip WIP onto main

    Consolidates the working-tree state stashed during the

  • Added
    slice52-Q-CHAT-SUMMARY-SERVICE: rolling chat summary service + ChatSummary entity

    Adds IChatSummarizationService + concrete impl that compresses the dropped

  • Added
    slice52-Q-TOOL-FILE-SEARCH: file_search chat tool + chat-attachment RAG ingest pipeline

    Third of the four P0 chat tools — ChatGPT File Search parity.

  • Added
    slice52-Q-CHAT-SUMMARY-UX: rolling summary pill + ChatSummary endpoint

    Why: backend tier-budget context builder (slice52-Q-CHAT-CONTEXT-BUILDER)

  • Added
    slice52-Q-TOOL-IMAGE-EDIT: image_edit P1 chat tool + URL→MediaAsset helper

    Adds ImageEditTool (mirror of ImageGenerateTool) so the LLM can edit user-

  • Changed
    slice52-Q-ME-WEBSEARCH/locale: propagate Agent::WebSearch:* keys to 28 siblings

    Fans out the 46 Agent WebSearch + Menu:WebSearch + Permission:WebSearch.*

  • Added
    slice52-Q-TOOL-TTS-STT: P1 chat tools tts_generate + stt_transcribe

    Why: P1 voice tools listed in feedback_chat_context_management.md — text

  • Added
    slice52-Q-LEARNING-LOOP: UserComplaintLink + nightly fix matcher (pattern #5 honest-UX DNA)

    Closes the user-complaint → shipped-fix loop automatically so we never make

  • Added
    slice52-Q-EPISTEMIC-HONESTY: chip + system prompt for Honest-UX DNA pattern #4

    Backend:

  • Added
    slice52-Q-ME-WEBSEARCH/shared-enum: add missing EnWebSearchKind enum

    The /me/web-search slice landed almost entirely via Serkan's recent

  • Added
    slice52-Q-CODE-INTERPRETER/runner: Pyodide host orchestrator + Web Worker

    Post-streaming runner that drives Pyodide in a Web Worker and feeds

  • Added
    slice52-Q-CODE-INTERPRETER/upload: chat-attachment MIME whitelist + EN keys

    MyMediaUploadAppService.PurposeChatAttachment validation extended to

  • Added
    slice52-Q-CODE-INTERPRETER/bridge: pending + completion endpoints + flat-fee billing

    Two-endpoint AppService that bridges the server-side code_interpreter

  • Added
    slice52-Q-CODE-INTERPRETER/backend: code_interpreter tool + scoped tool context

    Ship the ADR-043 Pyodide v1 backend slice — the LLM-facing IAgentTool

  • Added
    slice52-Q-CHAT-VIRTUALIZATION: cursor-paginated chat history + render-window pattern

    Why: long chats (100+ turns) bloat browser memory + slow ngx-markdown re-renders

  • Added
    slice52-Q-TOOL-WORKFLOW-RUN/backend: add workflow_run chat tool (list/describe/run modes)

    Fourth of 4 P0 chat tools per feedback_chat_context_management.md roadmap and

  • Changed
    slice52-Q-CODE-INTERPRETER/adr: ADR-043 Pyodide v1 sandbox + 5MB attachment scope

    Phase 1 design spike for code_interpreter chat tool (second P0 tool after

  • Added
    slice52-Q-PUBLIC-CHAT-TURNSTILE/frontend: mount Cloudflare widget + ship token in stream POST

    Public-chat launcher now boots a Cloudflare Turnstile widget at view

  • Changed
    slice52-Q-PUBLIC-CHAT-TURNSTILE/locale: Public:Chat:Error:BotChallenge EN + TR master

    Locale key for the new Cloudflare Turnstile rejection banner shipped

  • Added
    slice52-Q-PUBLIC-CHAT-TURNSTILE/backend: Cloudflare Turnstile bot-protection for anon homepage chat

    The [AllowAnonymous] PublicChatAppService now verifies a Cloudflare

  • Added
    slice52-Q-PUBLIC-CHAT-STREAMING: SSE streaming variant for anon homepage chat

    Marketing landing's anon chat now streams the assistant reply

  • Changed
    slice52-Q-WEBSEARCH-PROVIDER/appsettings: expose DeepResearch + FetchUrl cost knobs + ExtractCacheMinutes

    Surface the three new WebSearchOptions knobs in appsettings.json so the

  • Added
    slice52-Q-WEBSEARCH-PROVIDER/tools: dual-tier chat web-search — web_search / deep_research / fetch_url

    Three tools wired to the canonical authoring-tier IWebSearchProviderFactory.

  • Added
    slice52-Q-WEBSEARCH-PROVIDER/seed: tavily provider + tavily-search model + 2 capabilities + 3 pricing meters

    Catalog seed for the dual-tier chat web-search tooling.

  • Added
    slice52-Q-WEBSEARCH-PROVIDER/tavily-client: IWebSearchProvider.ExtractAsync + Tavily /extract + raw_content

    Adds the second half of the provider contract needed by the dual-tier chat

  • Fixed
    slice52-Q-PUBLIC-CHAT-HARDEN: tighten output cap + rate caps + prompt length for anon vitrin

    User report 2026-05-27 — public chat marketing surface 60s+ bekleyip

  • Fixed
    slice52-Q-PUBLIC-CHAT-MD: markdown render + bigger output cap for anon homepage reply

    User: "ana sayfada neden markdown renderer yok, direk markdown olarak

  • Added
    slice52-Q-DEEP-RESEARCH-EXEC: wire DeepResearchExecutor to Tavily advanced search

    Bridges the gap between DeepResearchSession CRUD (sat at default state forever)

  • Changed
    slice52-Q-PUBLIC-CHAT-FALLBACK/locale-fanout: 3 Error keys × 27 siblings

    Propagate Public:Chat:Error:NoModel / CallFailed / EmptyPrompt

  • Fixed
    slice52-Q-PARTNER-CTA-URL: pricing-grid Partner CTA drops legacy /company/ prefix

    User report 2026-05-27: pricing sayfasındaki Partner card'ın

  • Fixed
    slice52-Q-PUBLIC-CHAT-FALLBACK: tiered routing fallback + actionable error codes for anon homepage chat

    User: "burayı geçen gün yaptık sağlamdı, yine bozuldu.

  • Added
    slice52-Q-WEBSEARCH-UNIFY: bridge chat web_search to authoring provider registry

    Slice 452-fu already shipped first-class Brave + Tavily IWebSearchProvider

  • Added
    slice52-Q-WEBSEARCH-PROVIDER: wire Brave + Tavily as real web-search tool backend

    Replaces the stub web_search tool with a config-selectable provider:

  • Fixed
    slice52-Q-STREAM-PERSIST: persist user + partial assistant turn on stream cancel / provider error

    User: "deepseek response geldi ekran 2'de, sayfayı refresh edince

  • Changed
    slice52-Q-TOOL-ONLY-TURN/locale-fanout: ToolOnlyTurn 27 sibling locales

    Native-quality translations for "Action completed.

  • Fixed
    slice52-Q-TOOL-ONLY-TURN: friendly localized rendering for tool-only assistant turns

    User şikayet: "gpt 4o mini response boş geldi.

  • Fixed
    slice52-Q-CHAT-ORDER: defensive chronological sort on chat history hydration

    User: "her sayfa refresh ettiğimde chatlerin yerleri ve sıraları

  • Fixed
    slice52-Q-UTC-PARSE-fu: chat history load also parses UTC defensively

    Önceki commit (e2a74db8) sadece relativeTime/fullTimestamp helper'ını

  • Fixed
    slice52-Q-UTC-PARSE: defensive UTC parse on chat timestamps — refresh no longer shifts "just now" → "3h ago"

    Sprint 50-S backend fix made the wire format emit `Z`-suffixed ISO

  • Changed
    slice52-Q-PROVIDER-NOTES: three provider API truth-tables + 2 latent regression fixes

    User direktif: "arkada iş kalmasın".

  • Fixed
    slice52-Q-ANTHROPIC-1M-BETA-REVERT: drop retired beta header — was the actual cause of Opus 4.7 / Sonnet 4.6 400s

    Önceki "fix" (a56449db) Opus 4.7 / Sonnet 4.6 için preemptive olarak

  • Fixed
    slice52-Q-CHAT-UX4: error bubble icon + text inline alignment

    Pre-fix rendered the warning triangle as an inline <i> followed by

  • Fixed
    slice52-Q-AUTO-DEFAULT: "Auto" dropdown pick → resolve to deepseek-v4-flash, not null

    Önceki rev (a56449db) sadece ilk-mount fallback'i çözüyordu —

  • Fixed
    slice52-Q-IMG-PRICING-GUARD: three-layer defense against image-gen overcharge ($22.50/image gpt-image-2)

    Third regression of the same bug class in three sessions.

  • Fixed
    slice52-Q-CHAT-MODEL-QUARTET: default picker / focus restore / single error / opus-4.7 + flash-lite

    User reported four issues in a single round of chat smoke-testing:

  • Fixed
    slice52-Q-FINANCIAL-AUDIT-3: UserBillingDailyBackfill now overwrites existing rows — true idempotency

    Atladığım şey buydu.

  • Fixed
    slice52-Q-HOME-SPEND-CANONICAL: aggregate BillingRecord directly for /home Monthly Spend, not derived summary

    Three iterations of the same bug (Monthly Spend $0 → $0.33 → $0.15) had

  • Fixed
    slice52-Q-MIME-PARAM-FIX: defensive MediaTypeHeaderValue.Parse for caller-supplied Content-Type with codec parameters

    Mic-capture via MediaRecorder (chat composer Whisper STT, Sprint 52-O)

  • Added
    slice52-Q-MODEL-SEED-RETIRE-AUDIT/openai-deepseek: retire gpt-4.1 family + DeepSeek aliases (force-cut from active rotation per user directive, 2026-05-27)

    OpenAI gpt-4.1 family (Deprecated → Retired, isActive:false, version 3→4):

  • Added
    slice52-Q-MODEL-SEED-RETIRE-AUDIT/pricing: EffectiveTo dates for retired pricing rows

    Close 10 pricing rows for the 5 retired models:

  • Added
    slice52-Q-MODEL-SEED-RETIRE-AUDIT/anthropic-google: retire claude-3.5 + gemini-2.0/1.5 SKUs

    Anthropic (DeprecatedAt 2025-09-29, RetiresAt 2026-05-01):

  • Fixed
    slice52-Q-PICKER-DEPRECATED-v2: hide Deprecated + Retired + realtime + computer-use from chat model picker

    User reported a wide swath of dropdown rows error on send:

  • Fixed
    slice52-O-REASONING-UX: legible thinking-pane indicator while gpt-5 reasons server-side

    User report: "reason yapar gibi baya bekliyor ama hareket yok, reason

  • Fixed
    slice52-Q-FINANCIAL-AUDIT-2: kill double-count of chat spend in UserBillingDailySummary

    Audit continuation after slice52-Q-FINANCIAL-AUDIT-1.

  • Changed
    slice52-Q-USER-BILLING-DAILY/handoff: log progress + defer admin UI to Suite session

    - PROGRESS.md: Sprint 52-Q-USER-BILLING-DAILY entry with all 4 commits,

  • Fixed
    slice52-Q-FINANCIAL-AUDIT-1: UserDailySummary consumer subscribes torun.billing.recorded.v1 — closes universal-spend leak

    User report: "monthly spend 0.33 olamaz, burada bir hata var, muhtemelen

  • Added
    slice52-Q-USER-BILLING-DAILY/backfill: seed UserBillingDailySummary from BillingRecord history

    - New IDataSeedContributor: UserBillingDailyBackfillDataSeedContributor

  • Added
    slice52-Q-USER-BILLING-DAILY/consumer: UserBillingDailySummaryConsumer micro-batch projection

    - New IInboxConsumer: GroupId "torun-user-billing-daily-summary"

  • Added
    slice52-Q-USER-BILLING-DAILY/entity: UserBillingDailySummary entity + Mongo wiring + indexes

    - Suite entity JSON: modules/torun.subscription/.suite/entities/UserBillingDailySummary.json

  • Fixed
    slice52-O-HOME-SPEND-V3: swap BillingRecord aggregate for UserDailySummary read

    User: "TelemetryUserDailySummaries tablomuz var gördüğün gibi içide dolu.

  • Fixed
    slice52-O-HOME-SPEND-V2: tenant filter bypass + cache write-back for monthly spend

    User report (continued from slice 52-O-NIGHT-TODO-IMPL/home-spend-fallback):

  • Fixed
    slice52-O-NIGHT-TODO-IMPL/home-spend-fallback: DB fallback for monthly/daily spend when Redis bucket is stale

    User report: "monthly spend her gün sıfırlanıyor — redis recycle ettiğimden,

  • Changed
    slice52-O-NIGHT-TODO-IMPL/progress: activity routes done + remaining TODO inventory

    activity routes done + remaining TODO inventory

  • Added
    slice52-O-NIGHT-TODO-IMPL/activity-routes: wire 4 missing UserActivityKind → router URL mappings

    User feedback: "kod içerisine daha önce yazdığımız TODO lara hiç

  • Changed
    slice52-O-NIGHT-TODO/progress: TODO cleanup audit ledger

    TODO cleanup audit ledger

  • Changed
    slice52-O-NIGHT-TODO: TODO/FIXME comment cleanup — project-wide grep zero

    User directive: "TODO ve benzeri yorumları ara, sonraya bırakılmış iş

  • Changed
    slice52-O-NIGHT-LOCALE/progress: morning report for Serkan — overnight locale + changelog ledger

    morning report for Serkan — overnight locale + changelog ledger

  • Changed
    slice52-O-NIGHT-LOCALE/scripts: preserve overnight locale-fill + translation scripts for reference

    These four ad-hoc scripts drove the overnight locale recovery:

  • Changed
    slice52-O-NIGHT-CHANGELOG: backfill 2 days of sprint commits to PublicChangelogEntry seed

    extract-sprint-changelog.py wrote 364 sprint rows to

  • Changed
    slice52-O-NIGHT-LOCALE/translate: native translations for core user-facing keys (14 locales)

    Followed up the placeholder fill (commit a3834ea4) with native-language

  • Changed
    slice52-O-NIGHT-LOCALE/fill: backfill 1311 missing locale keys with EN placeholder across 28 locales × 17 resources

    Audit found 1311 missing keys spread across 27 sibling locales (en-GB

  • Changed
    slice52-O-CHAT-WHISPER-FALLBACK/locale: ChatTranscript keys across 28 sibling locales

    Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

  • Changed
    slice52-O-CHAT-LIBRARY/locale: EN master keys for /me/library source chip strip

    Adds the 11 EN-master entries the new SourceContext chip strip

  • Added
    slice52-O-CHAT-LIBRARY/library-ui: SourceContext chip strip in /me/library

    Surfaces the new SourceContext metadata as a user-facing filter so

  • Added
    slice52-O-CHAT-LIBRARY/composer: pre-upload pendingAttachments → Attachments[] + history-replay hydration

    Closes the chat-attachment data-loss bug: previously the composer

  • Added
    slice52-O-CHAT-WHISPER-FALLBACK/frontend: inline transcript caption + collapse on user message turn

    ChatTurn interface gains audioTranscripts[] with an expanded flag.

  • Added
    slice52-O-CHAT-WHISPER-FALLBACK/backend: capability check + Whisper transcript inject pre-call

    Add CapabilityKeys.AudioInput ("audio-input") so the fallback condition is

  • Added
    slice52-O-CHAT-LIBRARY/backend: chat-attachment purpose presign + GetMyLibrary SourceContextFilter

    The chat composer's prior path inlined image attachments as base64 data

  • Fixed
    slice52-O-BILLING-AUDIT/token-drift: costProjection includes conversation history

    Pre-fix, the composer cost badge only sized the draft text via

  • Fixed
    slice52-O-BILLING-AUDIT/gemini-stream: append alt=sse on streamGenerateContent

    `:streamGenerateContent` without `alt=sse` returns a JSON-array transport

  • Fixed
    slice52-O-BILLING-AUDIT/o3-cost: model-level pricing fallback when capability tag drifts

    GetActivePricingAsync now falls back to model-level pricing rows when the

  • Changed
    slice52-O-CHAT-CONTINUE/locale: fan-out Chat:Continue:* keys to 27 sibling locales

    Adds 9 new Chat:Continue:* keys (Button, Tooltip, Loading, Error, MaxReached,

  • Added
    slice52-O-CHAT-CONTINUE/frontend: Continue button + handler + en+tr locale master keys

    Angular proxy: +wasTruncated/continuedFromMessageId/hasContinuation on both DTOs;

  • Added
    slice52-O-OPENAI-REASONING: Responses API path for gpt-5 reasoning panel

    OpenAI Chat Completions silently consumes reasoning tokens for the

  • Added
    slice52-O-CHAT-CONTINUE/backend: finish_reason persist + ContinueAsync endpoint

    PersistAssistantMessageAsync now sets FinishReason/WasTruncated/ContinuedFromMessageId

  • Added
    slice52-O-CHAT-CONTINUE/entity: ChatMessage WasTruncated + FinishReason + ContinuedFromMessageId + HasContinuation fields

    Extend ChatMessage.Extended.cs with 4 new virtual properties (FinishReason,

  • Fixed
    slice52-O-CHAT-BUDGET-BANNER: hide when wallet has balance

    User reported the "Daily free limit reached — Charge wallet" yellow

  • Changed
    slice52-O-CHAT-MIC-WHISPER-locale: mic + Whisper keys across 28 sibling locales

    Propagate the new MediaRecorder + Whisper STT composer keys from en.json to all 28

  • Added
    slice52-O-CHAT-MIC-WHISPER: MediaRecorder + Whisper STT for chat composer mic

    Why: legacy Web Speech path produced transcript-only with no audio artifact

  • Fixed
    slice52-O-CHAT-UX2: default DeepSeek model + dismissable budget banner

    User reported two chat UX papercuts after the chat-footer fix landed:

  • Fixed
    slice52-O-CHAT-FOOTER: reasoning badge overlap + mic timer + Charge wallet 404 trio

    User-reported chat composer trio:

  • Changed
    slice52-O-CHANGELOG-locale: 38-sprint fan-out across 28 sibling locales

    Propagated Changelog:Sprint:<slug>:Title and :Body keys for the 38 new sprints

  • Changed
    slice52-O-VERSION-BUMP: 1.0.0 → 1.1.0-phase1-launch

    Minor bump for the Phase 1 feature wave summarized in the changelog backfill

  • Changed
    slice52-O-CHANGELOG-BACKFILL: absorb 38 new sprints into PublicChangelogEntry seed

    Ran extract-sprint-changelog.py against HEAD.

  • Added
    slice52-O-WORKFLOW-QUALITY: GenerateTextAsync + PreferQuality routing for workflow runners

    - New IChatPipelineAppService.GenerateTextAsync endpoint (creative-writer

  • Added
    slice52-O-LOCALE-FANOUT: WorkflowRuns:CancelRun keys → 27 sibling locales

    Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

  • Fixed
    slice52-O-BUNDLE-ROUTE/template-literal: escape backticks in My Bundles empty-state HTML comment

    Comment introduced in 57c15021 used backticks around '/marketplace' which

  • Fixed
    slice52-O-LOCALE-SWEEP/workflow-template-keys: backend prefix workaround + missing Birthday Audio/Cinema/ProvidedLyrics/EstimatedCost keys

    **Bug 1 — Card titles render raw `WorkflowTemplate:foo:Title` keys:**

  • Added
    slice52-O-RESUME-APPROVAL: add OutputsJson to WorkflowStepExecution extension

    Per-step output variable snapshot so the resume-aware wave loop can

  • Fixed
    slice52-O-APPROVAL-PAUSE-REMOVE: drop lyrics-approval HumanApproval node from birthday trio

    In-memory wait loop in WorkflowExecutorAppService.RunWaveLoopOnRowAsync (line 1797) is

  • Changed
    slice52-O-LYRICS-APPROVAL-locale: LyricsApproval 26-locale fan-out

    Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

  • Added
    slice52-O-LYRICS-APPROVAL: preview/approve/edit/regenerate gate between gen-lyrics and gen-music

    Inject HumanApproval (kind=12) node into all three birthday catalog

  • Changed
    slice52-O-CINEMA-locale: BirthdayCinema 26-locale fan-out

    WorkflowTemplate:BirthdayCinema:Title + :Description propagated to all 26

  • Added
    slice52-O-CINEMA: VideoCapabilityRunner (Sora-2 sync poll) + birthday-cinema template (premium tier ~$12)

    User wanted the third leg of the birthday trio: "isteyen kullanıcı video

  • Added
    slice52-O-LYRICS-OVERRIDE: optional user-provided lyrics short-circuits AI gen-lyrics step

    Birthday workflows expose a textarea field 'provided_lyrics'; when filled

  • Changed
    slice52-O-TEMPLATE-TRIO-A-locale: BirthdayAudio + EstimatedCost 26-locale fan-out

    Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

  • Changed
    slice52-O-UPLOAD-GUARD-locale: WorkflowWizard:WaitingForUploads 26-locale fan-out

    Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

  • Fixed
    slice52-O-UPLOAD-GUARD: wizard Run/Preview buttons gated on hasActiveUploads() so character photo race no longer ships filenames as Guids

    THE photo-binding bug.

  • Fixed
    slice52-O-MEDIACOMPOSITE-LIBRARY: register composite mp4 as MediaAsset at merge time so it lands in /me/library even if QC escalates or persist cancels

    User observation: "library bakınca sadece image görüyroum ne ses var ne

  • Fixed
    slice52-O-FFMPEG-SLIDESHOW/D19: build proper concat filter + drop -shortest for image-only slideshows so merge produces a real mp4, not a 46 KB empty container

    User report: merge step "Succeeded" but composite_url_duration_seconds

  • Fixed
    slice52-O-RUN-STATUS-TRUTH/D12: run-detail truthfulness — parent RunStatus computed from worst step status, not just abortReason

    User report: "succeeded yazıyor da bunlar success degil ki hata veriyor

  • Fixed
    slice52-O-BUNNY-AUTH-fu/no-region-prefix: drop regional prefix from Bunny storage URL — 401 cause

    User directive 2026-05-25 — region prefix produced 401 Unauthorized on

  • Fixed
    slice52-O-BUNNY-AUTH/merge-storage-read: route Bunny CDN URLs through Storage API with AccessKey header so merge can actually read its inputs

    Root cause (from Note column added in 0a9e941f):

  • Fixed
    slice52-O-MERGE-FANOUT/multi-url-tracks: split comma-joined sourceVar into per-URL tracks so birthday-song-video merge stops cancelling

    Root cause: ImageCapabilityRunner with n>1 packs all generated URLs as a

  • Added
    slice52-O-MEDIA-PICKER-UNIVERSAL/workflow-wizard: add "From Library" path next to file inputs

    Adds an "Or pick from your library" link/button beneath the workflow-wizard

  • Added
    slice52-O-MEDIA-PICKER-UNIVERSAL/me-audio: wire STT source to two-tab MediaPicker

    Replaces the /me/audio direct file input (audio.component.html line 17 —

  • Added
    slice52-O-MEDIA-PICKER-UNIVERSAL/me-image-mask: swap bespoke mask picker for universal MediaPicker

    Replaces the /me/image Edit-tab mask widget (bespoke library-only modal +

  • Added
    slice52-O-MEDIA-PICKER-UNIVERSAL/me-video: swap PC-only refs for two-tab picker

    Replaces the inline "Drop an image or click to upload" widget for character

  • Added
    slice52-O-MEDIA-PICKER-UNIVERSAL/scaffold: shared MediaPickerComponent with PC + Library tabs

    Universal two-tab picker that replaces PC-only uploads across /me/* surfaces.

  • Fixed
    slice52-O-GOOGLE-VIDEO-CLIENT/veo-3-veo-3-1-async-adapter: register IAiVideoClient for providerKey "google" so Veo-3 + Veo-3.1 stop silent-dropping from /me/video catalog

    Pre-fix VideoPipelineAppService.GetCapabilitiesAsync (commit 5e39d434)

  • Fixed
    slice52-O-REPLICATE-VIDEO-SEED/kling-hunyuan-ltx: seed 3 Replicate video models with pinned SHAs + 2.0x margin pricing

    Pre-fix /me/video catalog query returned only sora-2 + sora-2-pro because no

  • Fixed
    slice52-O-MUSIC-SLIDER-SYNC-i18n/duration-max-hint: add Music:Form:DurationMaxHint to 28 sibling locales (en already present)

    Native translation per locale (prefix only; the numeric seconds cap

  • Fixed
    slice52-O-MUSIC-SLIDER-SYNC/duration-cap-aware-slider: bind /me/music + /me/video duration slider max to the selected model's real ceiling

    Pre-fix the duration slider on /me/music was hardcoded max=120s.

  • Fixed
    slice52-O-VIDEO-CATALOG/dynamic-model-picker: drive /me/video model dropdown from AiModel+AiModelCapability catalog instead of hardcoded sora-2 stub

    Pre-fix VideoPipelineAppService.GetCapabilitiesAsync returned a single

  • Fixed
    slice52-O-MUSIC-DURATION-CAP/per-model-billing-truth: cap requested duration at the model's real ceiling, bill only for delivered seconds

    User generated music with `requestedDuration=120s` against Riffusion

  • Fixed
    slice52-O-RIFFUSION-OBJOUT/replicate-object-output: handle Object-shaped Replicate output (riffusion multi-stream + future schemas)

    User got

  • Fixed
    slice52-O-RIFFUSION-PIN/replicate-version-sha: pin riffusion/riffusion model version SHA so picks past musicgen route cleanly

    User got the UFE

  • Fixed
    slice52-O-REPLICATE-401-fu/actionable-error: distinguish 401 / 402 / 429 / other in Replicate prediction failure UFE

    User got HTTP 401 from Replicate after triggering musicgen and the

  • Added
    slice52-O-MUSIC-MODELS-SEED/replicate-music-trio: seed musicgen-medium + musicgen-large + riffusion via Replicate

    User reported the /me/music model dropdown stayed empty even with

  • Fixed
    slice52-O-MUSIC-ROUTE-fu/models-endpoint-404: correct music model picker URL — /api/byokvault/my-available-models/by-capability

    Console showed:

  • Fixed
    slice52-O-MENU-VISIBILITY-fu/route-guards: drop route-level permissionGuard for /me/video + /me/music

    Carry-forward from 05999c1c.

  • Fixed
    slice52-O-MENU-VISIBILITY/video-music-sidebar: drop requiredPolicy gates from /me/video + /me/music — match Image/Voice/Audio pattern

    User reported video + music menus missing from My Account sidebar even

  • Added
    slice52-O-MUSIC-MENU/locale-fanout: propagate 43 Music keys to 28 sibling locales

    Mirrors fc625886 EN seeding into ar/cs/de/de-DE/en-GB/es/fi/fr/hi/hr/

  • Added
    slice52-O-MUSIC-MENU/angular: /me/music component + sidebar entry + EN locale

    Angular standalone component mirrors /me/voice + /me/image shape:

  • Added
    slice52-O-MUSIC-MENU/backend: MyMusicPipelineAppService for /me/music

    User-facing music generation pipeline mirroring ImagePipeline pattern:

  • Fixed
    slice52-O-VIDEO-MENU-FIX: default-grant VideoPipeline.MyGenerate to user role

    The AuthoringPermissions.VideoPipeline.MyGenerate comment says the

  • Fixed
    slice52-O-MERGE-RESILIENCE/ffmpeg-defensive-trio: track-attributed errors + skip-empty + Bunny CDN retry

    Second-pass merge failure after b9dm94er4 + 21983ef0 still surfacing

  • Added
    slice52-Q-MODEL-ONBOARDING/locale-fanout: propagate 60 ModelOnboarding keys to 28 sibling locales

    Adds the Sprint 52-Q ModelOnboarding admin UI strings (Menu:ModelOnboarding +

  • Added
    slice52-O-MARGIN-AUDIT-LOCALE-FANOUT/cost-markup-i18n: 32 keys × 28 sibling locales for AI cost markup admin page

    Fans out the 32 EN keys added in commit be0190b2 (admin /cost-markup

  • Added
    slice52-O-REAL-COST-AUDIT/locale-fanout: propagate margin-reconciliation labels to 28 locales

    39 MR keys (Menu:Admin:MarginReconciliation, Permission:MarginReconciliation, MarginReconciliation:*) added to every sibling locale under src/ToRun.Domain.Shared/Localization/ToRun/.

  • Added
    slice52-Q-MODEL-ONBOARDING/phase-D-bulk-import-export: JSON snapshot round-trip for providers + models + stubs

    Sprint 52-Q-MODEL-ONBOARDING Phase D — round-trip bulk-import / bulk-export

  • Added
    slice52-Q-MODEL-ONBOARDING/phase-C-admin-ui: /admin/model-onboarding wizard for providers, models, stubs

    Sprint 52-Q-MODEL-ONBOARDING Phase C — host-admin Angular UI at

  • Fixed
    slice52-O-MARGIN-AUDIT/dto-leak-jsonignore: [JsonIgnore] ResolvedModelDto.AppliedMarkupMultiplier

    Guardrail sweep finding from Phase D of the 52-O-MARGIN-AUDIT sprint.

  • Added
    slice52-Q-MODEL-ONBOARDING/phase-B2-generic-rest-client: GenericRestClient (chat path) + RegisterClientStubAsync

    Sprint 52-Q-MODEL-ONBOARDING Phase B.2 — adds the GenericRestClient that

  • Added
    slice52-O-MARGIN-AUDIT/admin-cost-markup-ui: Angular page for runtime markup tweak

    Phase C UI of the 52-O-MARGIN-AUDIT sprint.

  • Added
    slice52-O-REAL-COST-AUDIT/phase-C-pipelines: pipeline AppService plumbing for ops ledger

    Sprint 52-O-REAL-COST-AUDIT phase C — each pipeline AppService that wraps

  • Added
    slice52-Q-MODEL-ONBOARDING/phase-B1-stub-entity: AiProviderClientStub aggregate + Mongo repo

    Sprint 52-Q-MODEL-ONBOARDING Phase B.1 — scaffolds the AiProviderClientStub

  • Added
    slice52-O-MARGIN-AUDIT/admin-cost-markup: host-admin AppService + ISettingProvider bridge

    Phase C of the 52-O-MARGIN-AUDIT sprint.

  • Added
    slice52-Q-MODEL-ONBOARDING/phase-A-onboarding-AppService: host-admin composer for AiProvider/AiModel/Capability/Pricing

    Sprint 52-Q-MODEL-ONBOARDING Phase A — adds AdminModelOnboardingAppService

  • Added
    slice52-O-REAL-COST-AUDIT/phase-B-providers: ProviderUsageSnapshot + 6 client parsers

    Sprint 52-O-REAL-COST-AUDIT phase B — every IAi*Client now stamps a

  • Added
    slice52-O-REAL-COST-AUDIT/phase-A-schema: add 4 ops-only columns to BillingRecord

    Sprint 52-O-REAL-COST-AUDIT phase A — parallel server-side-only ledger so

  • Added
    slice52-O-MARGIN-AUDIT/markup-options: AiCostMarkupOptions + routing snapshot multiplier

    Phase B of the 52-O-MARGIN-AUDIT sprint.

  • Fixed
    slice52-O-MARGIN-AUDIT/seed-bake-margin: 268 AiModelPricing rows bumped to ≥1.5x/2.0x real cost

    Phase A of the 52-O-MARGIN-AUDIT sprint.

  • Fixed
    slice52-P-SHARE-fu/slug-partial-index-operator: swap \$ne for \$type in unq_MediaAsset_Slug partial filter — DbMigrator unblocked

    Error from DbMigrator on every restart:

  • Fixed
    slice52-O-MARGIN-fu/runner-fallback-sweep: bump Image / ImageEdit / TTS fallback rates +50% per margin-baked-in rule

    Carry-forward from b4ab9daf music_v1 seed bump + feedback_pricing_

  • Fixed
    slice52-O-MARGIN/music-v1-bake-margin: bump Eleven Music v1 seed from \$0.002 to \$0.0035 per-second (+110% margin) per user directive

    User feedback after 21983ef0 landed: looked at ElevenLabs analytics

  • Fixed
    slice52-P-SHARE/locale-fanout: 37 keys × 28 sibling locales for shared-media + library-share dialog

    - ToRun resource: 36 keys (Library:Share:* dialog + SharedMedia:* public page)

  • Added
    slice52-O-LIBRARY-ARTIFACT/workflow-output-to-library: ArtifactSave registers MediaAsset row → /me/library surfaces workflow outputs

    Pre-fix: workflow ArtifactSave nodes uploaded blobs to Bunny and stuffed

  • Fixed
    slice51-M-fu2/legal-v2-natives-full: close the last 2 placeholder locales — ar v2.0 + vi native

    Sprint 51-M-fu2 completion pass.

  • Fixed
    slice52-O-IMG-SRC/workflow-edit-image: route uploaded photos through image-edit pipeline

    Birthday-song-video template's `photos` multiphoto field reached Bunny CDN

  • Fixed
    slice51-M-fu2/legal-v2-natives: 23 native v2.0 legal translations replace placeholders

    Drops native v2.0 About/Terms/Privacy/Contact for 10 brand-new locales

  • Fixed
    slice52-A-M5/enhance-prompt-outbox: publish chat-message-recorded.v1 from EnhancePromptAsync so UsageDailySummary counts prompt-enhance token usage

    EnhancePromptAsync wrote a BillingRecord and settled the budget but never

  • Fixed
    slice52-O-PRICING-fu/image-gen-overcharge: kill the 500x gpt-image-1-mini per-image overcharge

    Root cause (two layers, one bug):

  • Fixed
    slice52-A-H4/load-history-graph-lookup: collapse the N+1 ParentMessageId walk into a single $graphLookup aggregation

    LoadHistoryAsync previously walked the leaf → ancestor chain by issuing one

  • Changed
    52-O-NIGHT/progress-ledger: إضافة إدخال مسح 52-O الليلي إلى PROGRESS.md

    وفقاً لقاعدة 10 في CLAUDE.md.

  • Changed
    52-O-NIGHT/locale-validation-report: تقرير التوازن لكل مورد × كل لغة بعد توزيع المترجمين الـ6 المتوازيين

    ناتج تشغيل `python platform-plan/scripts/_validate-29-locales.py` بعد اكتمال جميع دُفعات المترجمين الـ27 + تمريرة إزالة BOM:

  • Changed
    52-O-NIGHT/translator-batches: 25 دُفعة ترجمة محلية مكتملة — إجمالي ~7,800+ مفتاح في 52 ملفاً

    دُفعات من 6 عوامل Sonnet مترجمة متوازية (جميعها مُدرجة في المستودع من الجولات السابقة + المجموعة النهائية المُفرغة):

  • Added
    slice52-O-NIGHT-fu/image-edit-progress-bar: bring Edit tab's staged-progress UI up to Generate-tab parity

    Serkan caught this — the Generate tab on /me/image has a card-shaped progress bar that walks through Preparing → Requesting → Generating → Fetching with a striped animated `progress-bar bg-info`, phase-specific icon + la…

  • Fixed
    slice52-O-NIGHT-fu/workflow-runner-principal-scope: restore triggering user's principal at wave-loop entry so background workers don't trip AbpAuthorizationException on every [Authorize]-gated capa...

    The bug Serkan surfaced from /me/workflow-runs (Detail click on a Failed run): every workflow step that delegates to an ApplicationService with class-level [Authorize] (ImagePipelineAppService, all the pipelines) termina…

  • Fixed
    slice52-O-12-locale-2/workflow-select-option-remaining-19-locales: populate native-language translations for the 19 sibling locales that shipped as empty stubs in 0da3c077

    Completes the locale-fanout begun in 0da3c077 (Sprint 52-O-12-locale).

  • Changed
    52-A/audit: نتائج مراجعة الكود لمسار الدردشة + InAppAssistant — 4 حرجة + 8 متوسطة + 5 منخفضة

    مراجعة قراءة فقط على ChatPipelineAppService + InAppAssistant + عملاء المزودين + ProviderFallbackChain.

  • Changed
    slice52-O-12-locale-2: partial native-language translations for 7 sibling locales (nl, sv, fi, is, en-GB, ru, pl-PL)

    7 of 19 stub locales populated; 12 remaining (cs, sk, hu, ro-RO, hr, sl, ko, zh-Hans, zh-Hant, hi, ar, vi).

  • Changed
    slice52-O-18-fu/lifecycle-legacy-available-28-locales: propagate "Legacy Available" enum translation to the 28 sibling locales

    Sprint 52-O-18 added ModelLifecycleStatus.LegacyAvailable (used to mark Claude 4.5/4.1/Opus 4.6/Sonnet 4.5 etc.

  • Changed
    slice52-O-19-G/sprint-wrap: point SunoMusicClient stub's "use the live music provider instead" guidance at ReplicateGenericClient ('replicate') rather than the deprecated MusicgenMusicClient ('musi...

    Sprint 52-O-19 (provider runtime hardening) complete — 7 commits land:

  • Added
    slice52-O-19-F/credential-normalization: close the per-model ProviderKey trap by adding a providerKey → canonical-providerKey normalization map to CredentialResolver.GetApiKeyAsync — exact-match lo...

    Concrete unblock: AiModel rows whose ProviderKey was set to "musicgen" / "ltx-video" / "flux-1.1-pro" / "hunyuan-video" / "sd3.5-large" / "xtts-v2" / "bark" all route credential lookups through "replicate" when no per-mo…

  • Added
    slice52-O-19-E/resilience-circuit-breaker: introduce per-(providerKey, capabilityKey) circuit breaker + intra-provider 429 backoff + chain length cap + 4xx-bad-shape carve-out so a thrashing upstre...

    New IProviderCircuitBreaker (Application.Contracts/AiClient/Resilience/) + default ProviderCircuitBreaker impl backed by IDistributedCache<CircuitState,string> keyed by torun:byok:circuit:{providerKey}:{capabilityKey} wi…

  • Changed
    slice52-O-18-rollout: integrate 25-provider AI catalog seed refresh — 8 commits covering AiProvider/CapabilityKeys/EnPricingUnit/EnProviderTier/ModelLifecycleStatus expansions + ~60 new 2026 models...

    # Conflicts:

  • Added
    slice52-O-19-D/elevenlabs-client: introduce ElevenLabsClient — single adapter that covers TTS (eleven_multilingual_v2/eleven_flash_v2_5/eleven_v3), text-to-music (music_v1 GA endpoint), and Scribe...

    ProviderKey="elevenlabs".

  • Added
    slice52-O-19-C/replicate-generic-client: introduce ReplicateGenericClient — single adapter that serves every Replicate-hosted modality (image, video, music, TTS) through the uniform /v1/predictions...

    ProviderKey=\"replicate\".

  • Added
    slice52-O-18-rollout/payload-grammar-2026: seed PayloadGrammarJson on the 2026 image / video / audio / 3D capability rows so resolver picks DB row over static fallback

    PayloadGrammarJson column declared on AiModelCapability.Extended.cs — backports the Sprint 52-O-17 chip's column that the worktree branched off main without (worktree base is 16 commits behind local main, so 52-O-17 wasn…

  • Added
    slice52-O-18-rollout/pricing-2026-refresh: seed pricing for the ~60 new 2026 models so AiModelPricing reflects the May 2026 research roster

    Adds ~60 new pricing rows in the 520180XX-...

  • Added
    slice52-O-19-B/wire-protocol-resolver: introduce IWireProtocolResolver + cache-resilient default impl that maps an AiProvider.ProviderKey → wire-level metadata (Protocol enum, BaseUrl, IsActive/IsD...

    ResolvedAiProvider DTO carries the read-only snapshot that generic adapters consume at request time — protocol drives which adapter class handles the request, BaseUrl is forwarded into the outbound HttpRequestMessage so…

  • Added
    slice52-O-18-rollout/capability-joins: wire the ~60 new 2026 models to their capability sets + bind the new capability anchors to existing flagships

    SeedSlice52O18Async() runs at the end of SeedAsync regardless of count gate (idempotent EnsureCapabilityRowAsync calls, deterministic XOR-based GUIDs so reruns are no-ops).

  • Added
    slice52-O-18-rollout/aimodels-2026-refresh: patch lifecycle statuses + add ~60 new flagship models so the catalog reflects the May 2026 25-provider research roster

    Existing 108 rows: status / deprecatedAt / retiresAt patched per the deprecation calendar in 00-MASTER-SUMMARY.md §"Major Deprecation Calendar" — gpt-4o / 4.1 / 4.1-mini / 4.1-nano / o1 / o3-mini / gpt-image-1 land 2026-…

  • Added
    slice52-O-19-A/aiprovider-wire-protocol-enum: introduce EnWireProtocol (12 values: OpenAiCompat | AnthropicNative | GeminiNative | Replicate | ElevenLabs | StabilityNative | BedrockConverse | Bedro...

    Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

  • Added
    slice52-O-19/aiprovider-wire-protocol-enum: tag each AiProvider with its wire-level HTTP family so the adapter factory resolves the right IAi*Client from a DB row instead of a hand-rolled per-provi...

    New shared enum EnWireProtocol (11 named + Custom catch-all) covers the realistic provider population: OpenAiCompat (OpenAI/xAI/DeepSeek/Mistral/Groq/Cerebras/Together/Perplexity/Azure-OpenAI/Fireworks/DeepInfra/OpenRout…

  • Added
    slice52-O-16-a/workflow-async-queue: convert workflow execution from synchronous HTTP to queued + worker-processed so a multi-minute DAG no longer blocks the request

    EnqueueRawSpecAsync inserts a Pending WorkflowExecution row, stamps QueuedAt + Activity Center row, emits torun.authoring.workflowexecution.queued.v1 via transactional outbox (Rule 8), and returns the DTO so the wizard n…

  • Added
    slice52-O-18-rollout/lifecycle-legacy-available: add LegacyAvailable to ModelLifecycleStatus so still-callable-but-not-recommended models can be marked correctly

    Claude 4.5 / Opus 4.1 / Sonnet 4.5 / earlier Gemini 2.0 / xAI Grok 3 are all examples of models that stay on the API surface but the provider is steering new traffic to a newer release.

  • Added
    slice52-O-18-rollout/pricing-tier-enums: add PerCitationToken/PerReasoningToken/PerRun units + Priority/OffPeak/SelfHost tiers for the May 2026 catalog

    EnPricingUnit grows 12 → 15 to model 2026 billing meters the legacy enum couldn't represent.

  • Added
    slice52-O-18-rollout/capability-keys-36: expand CapabilityKeys + Capabilities seed to cover the 22 new 2026 capabilities surfaced by the May research roster

    The 2026 model generation introduced capabilities that the old 18-key vocabulary couldn't address: Claude's adaptive vs.

  • Added
    slice52-O-18-rollout/aiproviders-25: re-add stability + add fireworks/deepinfra so the catalog reflects the May 2026 25-provider research roster

    23 → 25 providers (stability re-introduced after slice 4xx removal, two OSS-serving newcomers fireworks + deepinfra added).

  • Added
    slice52-O-17-fu/openai-image-grammar-admin-form: expose PayloadGrammarJson (and the previously hidden InputBoundsJson) on the AiModelCapability create/edit modal — textarea + "Validate JSON" button...

    Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

  • Added
    slice52-O-17-fu/openai-image-grammar-seed: seed PayloadGrammarJson on the image-generation join rows for dall-e-3 and gpt-image-1 — mirrors the existing static OpenAiImageModelGrammar entries so fr...

    Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

  • Changed
    slice52-O-17/openai-image-grammar-db-resolver: migrate the OpenAI image-model payload grammar (sizes, quality vocab, accept/reject lists) from the static OpenAiImageModelGrammar.ByPrefix dispatch o...

    Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

  • Changed
    slice52-O-15-fu/openai-image-grammar-registry: replace inline model-quirk branching with a data-driven OpenAiImageModelGrammar table — new models = one dictionary row, no client code touched

    Pre-52-O-15-fu the OpenAiImageClient hand-coded every model-specific quirk inline.

  • Added
    slice52-O-14-fu/budget-preview-wizard-modal: wire pre-flight budget preview + LeptonX confirm modal in the workflow wizard so users consent before the daily-cap-closed wallet charge

    Backend (fu1): new POST /api/subscription/budget-preview/preview wraps IBudgetGuard.CheckAsync read-only.

  • Fixed
    slice52-O-15/openai-image-size-snap: snap arbitrary WxH to the closest model-supported preset by aspect ratio — workflow 1280x720 no longer hits HTTP 400

    OpenAI image API rejects unknown sizes outright with HTTP 400 + "Invalid size 'WxH'.

  • Fixed
    slice52-O-12-locale/workflow-select-option-28-locales: seed native-language translations across the platform's 28 sibling locales

    WorkflowSelectOptionsDataSeedContributor now does an idempotent per-(option, locale)

  • Added
    slice52-O-14/budget-banner-wallet-after-daily-cap: emit Budget:UsingWalletAfterDailyCap so chat banner warns user the free-tier daily slot closed + wallet is funding the call

    User feedback on Sprint 52-O-13: "tabi bunun için kullanıcıyı bi popup ile uyarmalıyoz." Letting the wallet bypass the daily cap is the right behaviour for paid credit (52-O-13 fixed the silent reject), but the user stil…

  • Fixed
    slice52-O-13/budget-daily-cap-wallet-bypass: daily cap gates bucket path only — wallet credit is paid spend, never throttled by cap

    The Free-tier $0.10/day cap exists to spread $2/month allowance across days so a single user can't front-load the host's AI-cost reimbursement.

  • Added
    slice52-O-12d/workflow-select-option-admin: host-admin CRUD UI for the workflow input-form catalog (add categories without code deploy)

    Sprint 52-O-12d completes the catalog story started by 52-O-12a (entity)

  • Fixed
    slice52-O-12c/workflow-template-spec-lookup-backfill: align backend seeded templates with the new spec lookup/multiSelect syntax

    Hygiene-only follow-up to 52-O-12a/b.

  • Fixed
    slice52-O-12-translations-stub/build-break: add empty WorkflowSelectOptionTranslations.Map so contributor compiles

    User added a per-locale enrichment block to

  • Fixed
    slice52-O-12-di/workflow-select-option-localization-aggregate-root: change to FullAuditedAggregateRoot so ABP auto-registers IRepository

    Sprint 52-O-12a follow-up — DI bootstrap fail

  • Added
    slice52-O-12b/workflow-wizard-lookup-render: wizard fetches catalog options via lookup + Language category seed + 7 template inputs migrated

    Phase B (Angular wizard) for the 52-O-12a data-driven dropdowns.

  • Added
    slice52-O-12a/workflow-select-options-backend: catalog entity + ~430-option English seed + spec lookup/multi-select fields

    Phase 1 backend stack for data-driven workflow wizard dropdowns.

  • Fixed
    slice52-O-10/cache-manager-abp-key-wrap: substring SCAN + drop cache: gate so admin UI surfaces every category + Browse finds keys

    Backend bug — Cache Manager shows 3 categories of ~10+, every Browse empty

  • Fixed
    slice52-O-9/bunny-stream-library-message: rewrite missing-config error as admin-actionable copy

    UX bug — cryptic exception copy on /media/video-stream

  • Fixed
    slice52-O-8/wallet-recent-tx-empty: drop redundant IsActive predicate + add observability — recent transactions list now surfaces history

    Backend bug — empty Recent transactions list with non-zero balance

  • Fixed
    slice52-O-3/workflow-editor-theme-tokens: drop hardcoded #fff / hex / fixed rgba in favour of Bootstrap 5.3 theme tokens

    UI bug — multi-theme breakage

  • Fixed
    slice52-O-2/workflow-editor-i18n-en: merge 134 missing Workflow* keys into ToRun resource

    Backend bug — entire workflow editor surface ships raw keys

  • Fixed
    slice52-O-1/workflow-spec-polymorphic-default: accept number/bool tokens on string Default + map int/float legacy types

    Backend bug — every workflow template run failed

  • Fixed
    slice52-M/title-gen-reasoning-effort: gate reasoning_effort field on isReasoningOrGpt5 — close 8th regression

    Exception screenshot from Serkan (2026-05-23):

  • Changed
    slice52-L/provider-quirks: formalise OpenAI-compat subclass extension contract — every provider owns its own quirks

    Serkan's motto (2026-05-23): "biz 25 farklı AI provider destekliyoruz...

  • Fixed
    slice52-K/title-gen-max-tokens: split max_completion_tokens/max_tokens by client class — title-gen finally lands on DeepSeek

    THE ACTUAL ROOT CAUSE of the seven "title-gen yine bozdun" reports —

  • Fixed
    slice52-J/title-gen-budget: bump title-gen MaxOutputTokens 1024→4096 — close 7th regression on reasoning-only deployments

    52-I excluded DeepSeek V4 from cheap-model picks, but on a deployment

  • Fixed
    slice52-I/title-gen-deepseek-v4: extend reasoning-class filter to deepseek-v4-pro/flash — close 6th title-gen regression

    50-LLL-2 added an ExcludeReasoningModels filter so the cost-saving

  • Fixed
    slice52-D-7-fu/audit-chain-named-args: named-arg call site for ExecuteServerToolsAsync to clear stale Roslyn binding cache

    User reported VS Error List showing CS1501 "No overload for method

  • Fixed
    slice52-D-7/audit-chain: hash-chained AgentAuditEntry per server-tool invocation

    F15 (root cause: AgentAuditEntry table unused for the bubble's

  • Fixed
    slice52-D-6/turn-svc-correctness: real daily-turn cap + anon graceful degrade + localized approval fallback + token-budget history truncate

    Four backend regressions in InAppAssistantTurnAppService surfaced

  • Fixed
    slice52-C-6/chat-reasoning-indicator: surface reasoning-class model selection in the composer

    Audit #14 — confirm Sprint 51-A's reasoning opt-in path is per-request,

  • Fixed
    slice52-F/console-noise-2: suppress NG0505 dev-only hydration warning + bump SignalR server timeout 30s→60s

    Two more console warnings flagged in /me/chat after 52-E:

  • Fixed
    slice52-C-5/chat-composer-polish: persisted model+tone + real-rate cost projection + locale-aware voice + SSE assert

    Bundles four small chat-pipeline polish fixes from the audit (#10, #11,

  • Fixed
    slice52-D-5/sse-controller-recovery: guard SSE recovery write against double-fault swallowing original exception

    F10 (root cause: bare WriteSseEventAsync in the controller's outer

  • Fixed
    slice52-D-4/bubble-ux-a11y: pretty-print approval args + USD currency-code pill + dialog a11y

    Three UX / a11y polish items from the sprint 52-D code-review pass.

  • Fixed
    slice52-D-3/bubble-dom-guards: broaden modal click-guard + skip bubble inputs in page-context

    Two DOM-side hygiene fixes from the sprint 52-D code-review pass:

  • Fixed
    slice52-D-2/bubble-races: serialise session start + close-cleanup dropdown bookkeeping

    Three concurrency / state-coherence regressions in the bubble component

  • Fixed
    slice52-D-1/bubble-sse-resilience: token refresh + typed 401 banner + parseSseFrame robustness

    Three SSE-stream regressions in the InAppAssistant bubble shipped with

  • Fixed
    slice52-C-4/chat-i18n: extract hardcoded UI strings to Agent locale keys

    Three chat-pipeline surfaces were emitting hardcoded strings in violation

  • Fixed
    slice52-E/console-noise: suppress ABP localization separator warnings at bootstrap

    Serkan flagged ~148 identical "The localization source separator (::)

  • Fixed
    slice52-C-3/chat-backend: real fallback provider lookup + title-gen SourceEntityId + LoadHistory N+1 doc

    C5: ResolveFallbackProviderKey returned the literal string "google"

  • Fixed
    slice52-C-2/chat-onpush: switch chat-pipeline component to OnPush change detection

    Every state write in chat-pipeline.component.ts goes through a Signal

  • Fixed
    slice52-C-1/chat-lifecycle-leaks: plug route + history subscribe leaks + harden streamTurn re-entry

    Three lifecycle / concurrency defects in the chat-pipeline component, all

  • Fixed
    slice52-B/chat-bottom-gap: tighten chat shell chrome budget + switch vh→dvh

    Serkan flagged a visible dead band between the composer card and the

  • Fixed
    slice51-Z/changelog-manifest: sync embedded DbMigrator manifest with extract script output

    ChangelogBackfillDataSeedContributor reads from the embedded resource

  • Fixed
    slice51-X/contact-form: new ContactSubmission entity + sweep all public email exposure

    > "bu contact formunda bütün maillerimizi açık açık yazdık spammerlara mail

  • Fixed
    slice51-V-fu/i18n-pricing-v2: propagate Subscription pricing copy across 28 SupportedLanguages

    Follow-up to Sprint 51-V (commit 373d84d9) which rewrote en.json only.

  • Fixed
    slice51-W/persona-seed: retire demo personas entirely — kill ghost-click on /p/echo

    Smoke at 2026-05-22 showed `/personas` listing "Echo the Storyteller"

  • Fixed
    slice51-V/pricing-alignment: features render + price-row alignment + 51-R/51-P-compliant copy

    Three compounding bugs from 51-S → 51-U all visible in the same screenshot:

  • Fixed
    slice51-U/pricing-catalog: rebuild /pricing 1:1 against canonical LeptonX pricing.html

    51-S / 51-T drifted from the catalog-first vocabulary and shipped a

  • Fixed
    slice51-T/pricing-fix: entity-driven contact-sales + revert to 4-col grid + Partner strip

    Cleanup of regressions introduced by 51-S.

  • Fixed
    slice51-S-fu/i18n-pricing-plan-custom: propagate Pricing:Plan:Custom across 28 SupportedLanguages

    Sprint 51-S (28e76a7d) shipped lib-pricing-grid with a contact-sales price cell that

  • Fixed
    slice51-S/pricing-unification: single <lib-pricing-grid> for /pricing + /me/subscription/upgrade + Web.Public

    ONE pricing surface for all 6 plans (Free / Starter / Pro / Business /

  • Fixed
    slice51-R/plan-descriptions: rewrite SubscriptionPlan descriptions — value-first copy, no token counts, no share %, no specific limits

    User mandate (2026-05-22): "Bu description'ları biraz zenginleştir.

  • Fixed
    slice51-R/external-links: target=_blank + rel=noopener noreferrer on every off-origin anchor

    User mandate (2026-05-22): public surfaces leaked the visitor to a new

  • Fixed
    slice51-Q/pricing-render-from-dto: mirror authed /me/subscription/upgrade pattern — render plan.title + plan.audience directly, drop the broken locale-key indirection

    User report (2026-05-22): "Login durumdayken pricing geliyor, public

  • Fixed
    slice51-P/pricing-trial-removed: kill the trial vector + fix planKey case mismatch on title localisation

    Two user-flagged issues on the same screenshot (2026-05-22, anon

  • Fixed
    slice51-O/pricing-public: public /pricing now actually shows plan cards (URL action suffix + BillingCycle case match)

    User report (2026-05-22): "Login durumdayken pricing geliyor ama public

  • Fixed
    slice51-N-fu/languages-reconcile: custom seed contributor reconciles 20→29 Languages on every DbMigrator run

    User report after 51-N landed: "DbMigrator çalıştırdım, proje yeniden

  • Fixed
    slice51-N/abp-languages-29: expand AbpLocalizationOptions.Languages 20→29 to match canonical SupportedLanguages

    User report (2026-05-22): "ABP bunu hala 20 dil görüyor ve dilleri açtığımızda 20 dil çıkıyor.

  • Fixed
    slice51-M-fu1/legal-29locales: expand legal-doc matrix to all 29 SupportedLanguages with localized v2.0-pending banners

    User correction (2026-05-22): "bizim platformumuz 29 dilde." Legal seeds

  • Fixed
    slice51-M/legal-v2: comprehensive About/Terms/Privacy/Contact v2.0 with version-upgrade seed logic

    User directive (2026-05-22): About too thin, Terms must hold up against

  • Fixed
    slice51-I/51-J/51-K: torun.app→torun.ai sweep + workflow-template 404 + InAppAssistant /start 500

    Three connected anasayfa bugs landed in the same commit because they all

  • Changed
    slice51-changelog: pre-release changelog seed refresh — extract + propagate 51-* sprints

    User mandate from 2026-05-22: "release çıkmadan önce change loglarının seed

  • Fixed
    slice51-F/51-H/legal-pricing-mvc: public routes + slug parity — BUG-6, 7, 9 closeout

    Three connected bugs from the anasayfa list (platform-plan/BUG_LIST_ANASAYFA_2026-05-22.md):

  • Fixed
    slice51-E/personas: View profile button + Persona: key prefix + trim seed to 1 demo (Echo)

    BUG-3+4+5 from anasayfa list closed.

  • Fixed
    slice51-D-fu/legal-locale: rename Legal:: → Legal: keys + use ToRun resource

    Follow-up to 51-C — my own mistake.

  • Fixed
    slice51-D/anon-billing: seed UnAuthenticatedUser + wire public chat + Public::Chat + Profile::NotFound locale keys

    BUG-1 closeout from anasayfa bug list (platform-plan/BUG_LIST_ANASAYFA_2026-05-22.md).

  • Fixed
    slice51-C/homepage-shell: public sidebar menus + Legal:: keys + scroll fix + reasoning opt-in across normal chat

    BUG-2 closeout (3-part user report + 1 rule refinement):

  • Fixed
    slice51-B/iaa-thinking: per-second SSE thinking event + bubble elapsed-time label

    BUG-1 part 2.

  • Changed
    slice50-RRRR/other: translate authoring placeholders — 149 keys × 3 locales (ar, hi, vi)

    - Workflow editor, wizard, templates, validation, preview, run history strings

  • Changed
    slice50-RRRR/cjk: translate authoring placeholders — 149 keys × 4 locales (ja, ko, zh-Hans, zh-Hant)

    - Workflow editor, wizard, templates, validation, preview, run history strings

  • Changed
    slice50-RRRR/slavic-south-hu: translate authoring placeholders — 149 keys × 3 locales (hr, sl, hu)

    - Workflow editor, wizard, templates, validation, preview, run history strings

  • Changed
    slice50-RRRR/iberian-romance: translate authoring placeholders — 149 keys × 3 locales (pt, pt-BR, ro-RO)

    - Workflow editor, wizard, templates, validation, preview, run history strings

  • Changed
    slice50-RRRR/english-nordic: translate authoring placeholders — 149 keys x 3 locales (en-GB, sv, fi)

    - Workflow editor, wizard, templates, validation, preview, run history strings

  • Changed
    slice50-RRRR/romance: translate authoring placeholders — 149 keys × 3 locales (fr, es, it)

    - Workflow editor, wizard, templates, validation, preview, run history strings

  • Changed
    slice50-RRRR/slavic-east: translate authoring placeholders — 149 keys × 4 locales (ru, pl-PL, cs, sk)

    - Workflow editor, wizard, templates, validation, preview, run history strings

  • Changed
    slice50-RRRR/germanic-north: translate authoring placeholders — 149 keys × 4 locales (de, de-DE, nl, is)

    - Workflow editor, wizard, templates, validation, preview, run history strings

  • Added
    slice50-QQQQ/changelog-auto-emit: post-commit hook + append-sprint-row script (ADR-042 implementation)

    Closes ADR-042 — previously Proposed, now Accepted.

  • Fixed
    slice50-G-fu2: personas-index clear-all button auto-width + right-align on md+

    `col-md-1 text-end` clipped the localized "Clear all" label at

  • Fixed
    slice50-PPPP/outbox-idempotency: HashChainAuditJob MessageKey bucketised by hour + tampered-ids hash

    Sprint 50-PPPP audit — most MessageKey expressions across the codebase

  • Changed
    slice50-OOOO/capability-keys: consolidate capability key strings into ToRun.ByokVault.Capabilities.CapabilityKeys

    TEST_PLAN §4 deferred — capability key string literals (text-chat,

  • Fixed
    slice50-G-fu: persona-profile/-index touch-ups (linter + wrapper)

    - persona-profile.component.ts: drop outer `lpx-content-container py-4` wrapper

  • Changed
    slice50-workflow-engine/closeout: progress doc — final pass

    Three deferred items landed (or were dismissed) since the previous closeout

  • Added
    slice50-workflow-engine/qgate-audit: emit append-only audit row per QualityGate loop-back iteration (Rule 11)

    Completes the slice50-workflow-engine audit pass for the QualityGate

  • Changed
    slice50-media/locale-sweep: translate Phase1Note storage-provider keys across 6 more locales

    Continues the slice50-media Phase1Note translation pass started by

  • Changed
    slice50-media/ar: translate Phase1Note storage-provider keys to Arabic

    Replaces 8 [en] placeholder Admin:StorageProviders:Phase1Note:* and

  • Changed
    slice50-media/locale-maintenance: clean machine-translation artifacts + propagate Admin:* placeholders across 12 locales

    Sweeps the torun.media Localization resource for the 12 non-EN locales

  • Changed
    slice50-workflow/tr: translate workflow editor + wizard + templates to Turkish

    Replaces ~110 [en] placeholder values in the Authoring resource's

  • Added
    slice50-workflow/cursor-insert-and-edge-findings: variable chip auto-inserts at cursor + edge-level validator markers

    [Cursor-aware var insert (slice50-S)]

  • Added
    slice50-workflow/preflight-budget-estimator: IBudgetEstimator + DefaultBudgetEstimator + executor pre-flight check

    Closes the loop on slice50-I's per-node budgetUsd intent layer with

  • Added
    slice50-media/admin-polish: Open-in-dashboard link + Phase 1 posture banner on storage providers

    User-driven polish on the /media/storage-providers surface:

  • Added
    slice50-media/optimizer-config: scaffold Bunny Optimizer config block (disabled by default)

    Adds OptimizerOptions sub-block under BunnyCdnOptions for Pull-Zone-level

  • Added
    slice50-MMMM/template-sync: backend WorkflowTemplate ↔ TS catalog enrichment + CI audit

    Closes chip #118 last deferred item:

  • Added
    slice50-G/public-personas: /personas browse + /p/:handle detail + 29-locale prop

    Backend (modules/torun.persona):

  • Added
    slice50-LLLL/validation-overlay: edge markers + node corner badge + finding tooltips

    Closes the deferred item from chip #118 wrap doc:

  • Added
    slice50-workflow/inspector-vars-and-model: capability-filtered model dropdown + available variables chip strip

    Two inspector enhancements that close the gap between author intent

  • Added
    slice50-workflow/canvas-interactivity: pan/zoom + node-drag-to-reposition on the visual editor canvas

    WorkflowGraphComponent:

  • Added
    slice50-workflow/wizard-photos: real Bunny multipart upload + per-file progress

    Closes the deferred item from chip #118 wrap doc:

  • Added
    slice50-workflow/preview-only: cheap-proxy executor override for RequestPreviewAsync

    Closes the deferred item from the workflow-editor wrap (chip #118):

  • Added
    slice50-workflow/inspector-enhancements: inline validation markers + per-node budget cap + max-retries

    Two related extensions to the advanced editor surface:

  • Added
    slice50-workflow-engine/outbox: emit workflow.completed / workflow.failed v1

    Rule 8 (transactional outbox) — after the executor's RunSpecAsync returns

  • Changed
    slice50-media/complete: drop stale 'Coming soon' from landing descriptions — all 6 surfaces live

    StorageBrowse and UploadAsset landing card descriptions had leftover

  • Fixed
    slice50-workflow-engine/loopback: align template QGate configs with executor

    The existing executor's QualityGate node (Slice 449/449b) already implements

  • Added
    slice50-workflow-engine/template-run: preview + run-from-template AppService

    Single AppService surfaces three endpoints:

  • Added
    slice50-workflow-engine/resolver: IWorkflowModelResolver wrapper

    Workflow-node-shaped wrapper over Sprint 50-LLL's IModelRoutingService.

  • Added
    slice50-workflow-engine/public-template: catalogue read AppService

    User-facing wizard-catalogue endpoint.

  • Changed
    slice50-workflow: progress log + deferred work for the workflow editor rebuild

    Captures what landed this sprint (library landing + simple-mode wizard

  • Changed
    slice50-media/admin: propagate 80 Media:Admin:* keys to 28 sibling locales as [en] placeholders

    Auto-propagated from the en.json additions in 9b95c79c (admin panel

  • Added
    slice50-workflow/advanced-palette: draggable node palette + drop-on-canvas for the visual editor

    Replaces the existing add-node dropdown with a permanent left-rail

  • Added
    slice50-workflow/library-landing: user-facing template gallery + simple-mode wizard

    Replaces the /me/workflow-editor entry that dropped users straight into

  • Added
    slice50-workflow-engine/seed: seed 3 canonical workflow templates

    Idempotent host-pass DataSeedContributor that materialises the three wizard

  • Added
    slice50-media/scaffolding: activate /media admin panel — perms + DTOs + AppService backends

    Foundation for the six host-admin /media surfaces.

  • Added
    slice50-workflow-engine/entity: add WorkflowTemplate aggregate + permissions

    Catalog entity for wizard-surfaced workflow presets.

  • Added
    slice50-pub-wire: replace 4 view-adapter stubs with real DB reads

    Public-site MVC Razor pages were rendering hardcoded fixture data

  • Fixed
    slice50-pub-blog-seed: BlogPost unique index — (TenantId, Slug, Locale) compound

    DbMigrator hit E11000 on BlogPostsDataSeedContributor: the legacy

  • Added
    slice50-content-seed: seed 6 marketing blog posts × 29 locales (174 rows)

    BlogPostsDataSeedContributor adds the initial public marketing blog catalog

  • Added
    slice50-pub-scaffold: _Header.cshtml 29-lang locale switcher

    PublicWebsite layout header override:

  • Added
    slice50-pub-marketplace: IPublicMarketplaceBrowseAppService — [AllowAnonymous] rate-limited

    - Anonymous browse for /marketplace (paged listings)

  • Added
    slice50-pub-seo: sitemap.xml + robots.txt + LeptonX 404/500 overrides

    - Pages/Sitemap.cshtml (route /sitemap.xml) — returns sitemaps.org urlset

  • Added
    slice50-pub-legal-company-support: /legal/{slug}, Company quad, Support FAQ

    - Pages/Legal/Detail.cshtml (route /legal/{slug}) — Markdig-rendered long

  • Added
    slice50-pub-pricing: 5-plan grid with billing-cycle + channel toggle

    - Pages/Pricing/Index.cshtml (route /pricing) — Monthly/Yearly toggle (real

  • Added
    slice50-pub-docs: tree sidebar + markdown detail with prev/next nav

    - Pages/Docs/Index.cshtml (route /docs) — section grid landing + sidebar

  • Added
    slice50-pub-persona: IPublicPersonaBrowseAppService — [AllowAnonymous] rate-limited

    - Anonymous browse for /personas (paged catalog)

  • Added
    slice50-pub-landing: Index page LeptonX rewrite

    Pull landing data from IPublicLandingAppService stub + pricing teaser from

  • Changed
    slice50-pub-shared: public-site infra (Markdig + SEO + stub AppServices)

    - ToRun.Web.Public.csproj — add Markdig 0.37.0 for markdown rendering

  • Added
    slice50-pub-legal: IPublicLegalAppService — [AllowAnonymous] rate-limited

    - Anonymous read for /legal/{slug} — Terms, Privacy, Cookie, Refund,

  • Added
    slice50-pub-faq: IPublicFaqAppService — [AllowAnonymous] rate-limited

    - Anonymous read for /faq

  • Added
    slice50-pub-doc: IPublicDocAppService — [AllowAnonymous] rate-limited

    - Anonymous read for /docs (tree + by-slug)

  • Added
    slice50-pub-changelog: IPublicChangelogAppService — [AllowAnonymous] rate-limited

    - Anonymous read for /changelog (paged, PublishedAt DESC)

  • Added
    slice50-pub-forum: IPublicForumAppService — [AllowAnonymous] rate-limited

    - Threads list (paged, optional CategoryKey tag match against ForumThread.Tags)

  • Added
    slice50-pub-blog: IPublicBlogAppService — [AllowAnonymous] rate-limited

    - Anonymous read surface for /blog (list + by-slug)

  • Fixed
    slice50-smoke: MySettings — سمة [HttpPut] لمسار صريح

    رصد smoke-backend.py مشكلة VERB_MISMATCH: Angular يستدعي PUT المُجرَّد بدون مسار صريح.

  • Added
    slice50-F/task#30: PublicChatAppService — دور مجهول ترويجي، حد معدل لكل IP، فوترة MarketingDemo

    النصف الخلفي من Sprint 50-F: دور محادثة ترويجية مجهولة في صفحة الهبوط مع حد لكل IP.

  • Changed
    slice50-RRR-fu: BillingDailySummaryConsumer — استنتاج نوع تفكيك الزوج

    لم يستطع المترجم استنتاج نوع القاموس Dictionary<(DateTime Date, Guid? TenantId), ...>.

  • Fixed
    slice50-UU-fu/task#73: KeywordSettlement — فهرس متفرق فريد على ExternalId + معالجة خسارة السباق

    يُغلق نافذة السباق الوحيدة في KeywordSettlementJob التي قد تُسبب تسويات مكررة.

  • Changed
    slice50-SS-task67: ja.json الدُفعة 1/4 — أول ~140 مفتاح بأعمال صينية → يابانية أصيلة

    استمرار task#67 (مسح 50-SS).

  • Added
    slice50-RRR-2: ImageEdit المركب — واجهة رقاقات متعددة المصادر + فرع المزود

    يُغلق أساس 50-RRR (الالتزامات A/B/C) بربط المركب الفعلي بالواجهة والمزود.

  • Changed
    slice50-NNN-fu: ترحيل مفاتيح Sessions:* في InAppAssistant (10 مفاتيح × 28 لغة)

    أُعيد ترحيل Toggle / Heading / New / Untitled / Empty / Load:Failed / JustNow / MinAgo / HourAgo / DayAgo عبر جميع اللغات الـ28 غير الإنجليزية.

  • Added
    slice50-RRR-fu/task#74: MarketplacePurchase — أعمدة FK لـ BundleId/CreatorProfileId/BuyerUserId + فهارس

    يُطبّق نمط Sprint 50-LL (Post.CreatorProfileId) + Sprint 50-VV-2 (AdAuction) على MarketplacePurchase.

  • Added
    slice50-RRR/C: ImageEditPipeline — توجيه طبولوجيا مفتاح القدرة

    يستنتج خط الأنابيب الآن مفتاح القدرة من طبولوجيا المدخلات ويُوجِّه الطلب وفقًا لذلك.

  • Added
    slice50-RRR/B: IAiImageClient.EditCompositeAsync + POCO لـ InputBounds

    عقد المحوّل لمسار المركب متعدد المدخلات.

  • Added
    slice50-RRR/A: نموذج شكل القدرة — المفاتيح + InputBoundsJson + دلتا التهيئة

    التزام أساسي لإعادة هيكلة تحرير الصور متعددة المدخلات (الخيار C — نهج القدرة).

  • Added
    slice50-QQQ: استمرارية ChatAttachment — مراقبة لغز الإدراج الصفري

    نتيجة الفحص: الربط في ChatPipelineAppService.cs:1415 يستدعي الطريقة بالفعل لكن لا يُدرج أي سجلات.

  • Added
    slice50-SSS: مسح تسجيل المراقبة — Bunny + OpenAI + ChatPipeline

    5 إضافات تسجيل منظمة لكي تُظهر أعطال الإنتاج سياقها الكامل.

  • Added
    slice50-NNN: جلسة InAppAssistant — تنظيف تلقائي للجلسات الفارغة + زر حذف X لكل صف

    إصلاح ثنائي المحاور لتراكم الفقاعة على جلسات فارغة أو غير مرغوبة.

  • Added
    slice50-YY-2: فقاعة InAppAssistant — تسجيل صوتي بالميكروفون Whisper STT في المحرر

    يُغلق التأجيل -2 من 50-YY حيث أُقتطع إرفاق الميكروفون لإطلاق الالتزام الأساسي.

  • Added
    slice50-JJJJ: ربط مُسجِّل UserActivity — خطوط أنابيب ImageEdit + Translator + Video

    يُغلق الفجوة عبر خطوط الأنابيب التي تركها 50-AAA في تسجيل نشاط المستخدم.

  • Added
    slice50-IIII: منتقي صور المكتبة في /me/image — دفق Blob + بحث + ترتيب + ترقيم الصفحات

    أبلغ المستخدم عن فشل 'Pick a source image' و'Pick a mask image' في تحميل صور المكتبة.

  • Fixed
    slice50-HHHH: OpenAI DALL-E 3 — حذف معامل `style` (مهجور، يُعيد 400)

    سجل الإنتاج أظهر خطأ 400 بسبب معامل style المهجور في DALL-E 3.

  • Fixed
    slice50-GGGG: تحرير الصورة PUT — ترويسة Bearer في XHR + مفتاح لغة القناع المفقود

    أبلغ المستخدم عن فشل رفع المصدر والقناع في /me/image Edit بسبب غياب ترويسة Bearer.

  • Added
    slice50-FFFF: تجميع المكتبة بالتاريخ + ربط قالب عرض الشبكة/القائمة

    الشريحة الأخيرة لوحدة المكتبة — يُكمل تجميع الملفات بالتاريخ وربط عروض الشبكة والقائمة.

  • Changed
    slice50-EEEE: رفع المكتبة الجماعي — لافتة نجاح واحدة بدون وميض لكل ملف

    ملاحظة المستخدم: كانت لافتة 'Upload complete.' الخضراء تومض داخلًا/خارجًا لكل ملف على حدة.

  • Fixed
    slice50-DDDD: حذف وحدة AbpStudioClient — السبب الجذري لعطل دفق الرفع

    حاول Sprint 50-CCCC إصلاح ObjectDisposedException في خط أنابيب الرفع بطرق مختلفة.

  • Fixed
    slice50-CCCC: دفق رفع المكتبة + تقارير أخطاء لكل ملف

    السبب الجذري للرسالة المستمرة 'Upload failed' — رغم وصول الملفات إلى الخادم بنجاح.

  • Added
    slice50-BBBB: تجربة وضع سلة المهملات + ارتفاع قصوى للفيديو + ترحيل .md + عرض Markdown + عدّ الرفع

    أبلغ المستخدم عن خمس مشكلات منفصلة في جلسة اختبار واحدة.

  • Added
    slice50-AAAA: صندوق صادر تنقية CDN + عامل الشواهد + واجهة سلة المهملات

    أبلغ المستخدم أن part_001.wav / part_002.wav حُذفا من المكتبة لكنهما لا يزالان مرئيَّين عبر رابط CDN.

  • Added
    slice50-ZZZ: إصلاح مؤشر معاينة المكتبة + واجهة الحذف الجماعي

    ترك 50-YYY انحدارًا: كان openAssetDetail يُشغّل تحميل النص فقط دون إظهار المؤشر بشكل صحيح.

  • Added
    slice50-YYY: نوع Document في المكتبة + معاينة نصية مضمَّنة + تنظيف النافذة المنبثقة

    أبلغ المستخدم عن فراغ تبويب Documents بعد رفع ملفات .md / .txt في المكتبة.

  • Added
    slice50-XXX: قراءة المكتبة الخاصة عبر بروكسي دفق الخلفية

    كان نمط URL العام لـ CDN خاطئًا في /me/library — المحتوى خاص بالمستخدم وليس عامًا.

  • Fixed
    slice50-WWW: مزامنة تجاوز Bunny للتطوير + دقة عدّ رفع المكتبة

    خطآن في دُفعة واحدة — كلاهما ظهر في اختبار مستخدم رُفعت فيه 4 ملفات لكن صفحة المكتبة بقيت على 0 عناصر.

  • Added
    slice50-VVV: واجهة تقدم غنية لرفع المكتبة الدُفعي

    المستخدم: 'ضع شريط تقدم لعمليات الرفع، أظهر عدد الثواني، أعلم المستخدم بما تم رفعه، الواجهة الحالية سادة جدًا.'

  • Fixed
    slice50-UUU: بديل octet-stream لـ .md + تسجيل مطوَّل لرفع Bunny

    مشكلتان تمنعان المستخدم من استخدام /me/library بشكل صحيح.

  • Fixed
    slice50-TTT: قبول MIME لرفع المكتبة — وعي بالغرض (صور فقط مقابل خليط المكتبة)

    أبلغ المستخدم عن خطأ رفع المكتبة 400 'Only image/* MIME types are accepted on this endpoint.' عند رفع ملف غير صوري من تبويب الكل.

  • Fixed
    slice50-RRR: مهلة Redis من 5 ثوانٍ إلى 15 ثانية — إصلاح تسلسل HMGET في ABP localization

    أبلغ المستخدم عن خطأ 500 'Internal error' في مسؤول Message Citations.

  • Fixed
    slice50-PPP: بيانات اعتماد تخزين Bunny Media — مزامنة مع لوحة التحكم

    أبلغ المستخدم عن خطأ رفع المكتبة 'Bunny storage upload failed with HTTP 401'.

  • Fixed
    slice50-OOO: توليد صور DALL-E 3 — خطأ 400 عند حذف معامل response_format (مهجور)

    أبلغ المستخدم عن عطل /me/image Generate بخطأ من مزود توليد الصور.

  • Fixed
    slice50-MMM: overflow:visible لـ InAppAssistant + إصلاح قطع القائمة المنسدلة + نظافة ربط الموضع

    أبلغ المستخدم أن إعادة هيكلة موضع لوحة Sprint 50-III لا تزال لا تعمل بشكل صحيح.

  • Fixed
    slice50-JJJ: رسالة ترحيب InAppAssistant فارغة — انحدار مصدر رسالة 50-CCC-2

    السبب الجذري (البديل B): `openSession()` يستدعي `messages.set(mapped)` ما يمسح الرسالة الأولى.

  • Added
    slice50-LLL: توليد العنوان يُوجَّه إلى أرخص نموذج محادثة نصي (Rule 2 capability-first)

    المستخدم: 'لا حاجة لاستخدام النموذج ذاته للعناوين، هذه مهام بسيطة.'

  • Fixed
    slice50-III: إعادة هيكلة الربع الواعية بالموضع لـ FAB+Panel في InAppAssistant

    أبلغ المستخدم عن استمرار انفصال اللوحة عن FAB رغم سبرنتات الإصلاح السابقة.

  • Fixed
    slice50-KKK: توليد عنوان المحادثة — ReasoningEffort=low + حد 1024 رمزًا (متابعة 50-CCC)

    رفع Sprint 50-CCC MaxOutputTokens من 24 إلى 128 توقعًا لعناوين أطول من 100 حرف.

  • Added
    slice50-AAA: مُسجِّل IUserActivityRecorder عبر الوحدات — ملء /me/activity-history من أدوار المحادثة

    أبلغ المستخدم عن فراغ /me/activity-history رغم ساعات من المحادثة والصور والصوت.

  • Fixed
    slice50-CCC: انحدار عنوان المحادثة + ظهور زر التمرير لآخر رسالة

    رُصد انحداران في اختبار المستخدم وأُصلحا؛ أُرجئت المخاوف الثالثة.

  • Fixed
    slice50-BBB: تدقيق قوائم مسؤول InAppAssistant + Agent — تهيئة صلاحية وحدة لدور المسؤول (1 إصلاح مُشحن، 14/14 قائمة متاحة)

    | # | القائمة | المجموعة | مسار Angular | مسار الخلفية | الحالة | السبب الجذري |

  • Fixed
    slice50-GGG: /me/library رفع دُفعي — تحديد ملفات متعددة

    المستخدم: 'لماذا يجب إضافة الملفات يدويًا واحدًا تلو الآخر في المكتبة؟'

  • Fixed
    slice50-FFF: تبويب التحرير في /me/image — رفع Mask عبر PC بتوقيع Bunny المسبق

    المستخدم: 'المصدر يدعم الرفع من PC لكن القناع لا يدعمه، لماذا؟'

  • Fixed
    slice50-EEE: مزودو Bunny يُظهرون واجهات IMediaStorageProvider + IVideoStreamProvider

    خطأ حرج أبلغ عنه المستخدم: كل محاولة رفع عبر PC تُثير استثناءً فوريًا.

  • Fixed
    slice50-DDD: تفضيلات الإشعارات 404 — إضافة اللاحقة /my-preferences المفقودة

    أبلغ المستخدم مرارًا منذ أمس أن /me/notifications/preferences تُعيد خطأ 404.

  • Fixed
    slice50-ZZ: z-index قائمة الشريط الجانبي للمحادثة — الهروب من تكديس فاصل الأيام

    كانت قائمة المحادثات الأخيرة في /agent/chat-pipeline تحتوي على قوائم إعادة تسمية/حذف لكل صف تختفي خلف فاصل الأيام.

  • Fixed
    slice50-YY: FAB في InAppAssistant يعود لأعلى يسار + جرس يعود لأعلى يمين + موافقة تخفيض النموذج

    كشف اختبار المستخدم 5 مخاوف؛ عولجت 4 منها في هذا الالتزام، وبقيت واحدة.

  • Added
    slice50-WW: MarketplaceRoyaltyPayoutCalculator — توزيع عائد المبدع اليومي (Plan §2.1 #7)

    يمسح AsyncPeriodicBackgroundWorker اليومي (دورة 24 ساعة) المدفوعات الناجحة ويوزع العائد.

  • Added
    slice50-XX: أعمدة FK مكتوبة + فهارس لـ AdAuction Bid/Impression/Click/Conversion (Plan §2.2 / 50-VV-2)

    أنشأ Sprint 47-O كيانات AdAuction مسطحة بدون أعمدة FK مكتوبة للربط.

  • Added
    slice50-UU: KeywordSettlementJob — تسوية يومية لـ Spot/Reserve/Futures (Plan §2.1 #6)

    يمسح AsyncPeriodicBackgroundWorker اليومي لـ ABP (دورة 24 ساعة) المعاملات المعلقة ويُسوِّيها.

  • Added
    slice50-VV: مشغل مستهلك RTB لـ AdAuction + تصفية بأول سعر (Plan §2.1 #5)

    أُرسل Sprint 50-TT لهذا الهدف لكنه خرج عن المسار المحدد.

  • Added
    slice50-OO: نظام الحصة في /me/library — تتبع التخزين + رفع PC + استنزاف المحفظة

    طلب المستخدم: مؤشر الحجم في أعلى المكتبة، رفع PC، حصة الخطة، واستنزاف المحفظة عند التجاوز.

  • Added
    slice50-TT: أقفال موزعة لكل صف في العامل الدوري — أمان متعدد الحاويات

    يمتد نمط 50-RR (VideoJobPollingWorker IAbpDistributedLock) إلى بقية العمال الدوريين.

  • Added
    slice50-NN: رفع PC في تبويب التحرير بـ /me/image عبر رفع Bunny المسبق

    أرجأ Sprint 50-P رفع PC لأن الخلفية كانت تفتقر إلى نقطة نهاية التوقيع المسبق في Bunny.

  • Changed
    slice50-SS: ja.json الدُفعة 1/N — أول 300 مفتاح بأعمال صينية → يابانية أصيلة

    أُلغي 50-AA خلال المسح الكامل؛ يستأنف هذا السبرنت المسح على دُفعات.

  • Added
    slice50-RR: قفل Redis الموزع لـ VideoJobPollingWorker — أمان متعدد الحاويات

    ربط Sprint 50-U + 50-EE الاستطلاع وتدفق الاسترداد لكنهما افترضا تشغيل حاوية واحدة فقط.

  • Added
    slice50-QQ: نقل جرس الإشعارات والنشاط من يمين عائم إلى جانب الشريط الجانبي

    توجيه المستخدم (دور Sprint 50-E): نقل جرس الإشعارات ومركز النشاط بجوار أيقونات القائمة اليمنى.

  • Changed
    slice50-PP: تم تخطي إعادة توليد البروكسي — الخلفية غير شاغلة

    الخلفية غير متاحة على https://localhost:44304 خلال هذا السبرنت؛ تم تأجيل إعادة التوليد.

  • Added
    slice50-MM: إلغاء تطبيع Creator/Post.CreatorProfileId — تصحيح نطاق 50-LL

    بنى Sprint 47-H فهرسًا مركبًا متدهورًا لخلاصة Creator/Post يفتقر إلى CreatorProfileId.

  • Added
    slice50-LL: إلغاء تطبيع PersonaPost.PersonaId + CreatorProfileId (Plan §2.2 — استعلام الخلاصة)

    بنى Sprint 47-H فحصًا متدهورًا (TenantId، CreationTime) لـ PersonaPost بدون PersonaId في المفتاح المركب.

  • Added
    slice50-JJ: IBillingRecorder.RecordPaddleTransactionAsync — إصلاح تلقائي للتسوية

    رصد BillingReconciliationJob في Sprint 50-W ثغرات في سجلات Paddle تحتاج إصلاحًا تلقائيًا.

  • Fixed
    slice50-KK: انجراف مُنشئ مساحة عمل Angular للوحدة (شذوذ Sprint 50-M)

    كان كل ملف modules/torun.*/angular/angular.json يشير إلى إصدار قديم من حزمة Angular.

  • Fixed
    slice50-II: استبدال حرفيات «sample-X» في Suite *DataSeedContributor بعناصر نائبة صالحة

    كشفت اختبارات عزل المستأجر في Sprint 50-CC عن خطأ قائم مسبقًا في بيانات الأولية.

  • Changed
    slice50-HH: سكريبت حذف فهارس MongoDB القديمة (Plan §2.1 #8)

    أضاف مسح MT في Sprint 47-A..47-P فهارس مركبة مُسبوقة بـ TenantId لكل وحدة؛ الفهارس القديمة تُبطئ الكتابة.

  • Fixed
    slice50-FF: ترحيل مجموعات وحدات InAppAssistant + Telemetry + EventBus + Persona

    استكمال سلسلة Sprint 49.

  • Changed
    slice50-GG: سكريبتات DBA لترحيل بيانات المستأجرين يوم الإطلاق (Plan §2.4)

    خطر R2 قبل الإطلاق: مسح Sprint 47-A..47-P لأكثر من 219 كيانًا أضاف TenantId لكن البيانات التاريخية تحتاج ترحيلًا.

  • Added
    slice50-EE: توسعة IBillingRecorder.RefundAsync بسجل شقيق سالب

    كشف Sprint 50-U فجوة: كانت IBillingRecorder تحتوي على RecordAsync فقط دون دعم الاسترداد.

  • Changed
    slice50-CC: اختبارات عزل المستأجر لـ subscription + agent + persona

    تدقيق Plan §2.3 / R1 — مسح Sprint 47-A...47-P لأكثر من 219 كيانًا لتطبيق IMultiTenant.

  • Changed
    slice50-DD: خط أنابيب ImageEdit + خاصية موافقة الفقاعة في InAppAssistant

    متأخرات Plan §2.5: نشر 22 مفتاحًا لخط أنابيب ImageEdit (من Sprint السابق).

  • Fixed
    slice50-BB: مسح تعارض MessageKey في outbox عبر 7 مواقع إصدار

    رصد Sprint 50-K تعارضًا واحدًا (إعداد Paddle لخطة الاشتراك)؛ هذا المسح يُغطي المواقع السبعة المتبقية.

  • Added
    slice50-W: BillingReconciliationJob — تدقيق يومي للانحراف بين Paddle والسجلات المحلية

    Phase 1.5 §2.1 #3 — عامل الخلفية الثالث.

  • Added
    slice50-X: PaddleSyncWorker — تكرار دوري لحالة الاشتراك

    Phase 1.5 §2.1 #4 — عامل الخلفية الرابع والأخير قبل الإطلاق.

  • Fixed
    slice50-Z: فجوة TypePredicate في RunInputUploadAppService (متابعة 49-B)

    أعادت /api/app/run-input-upload خطأ 404 لأن AppService لم يُسجَّل بشكل صحيح.

  • Added
    slice50-Y: تهيئة قدرة تحرير الصور + AiModelCapability لـ gpt-image-1 + روابط التسعير

    أنشأ Sprint 50-P واجهة تبويب التحرير في /me/image + الربط بالخلفية ولكن بقي تهيئة قاعدة البيانات معلقًا.

  • Fixed
    slice50-S: طوابع الوقت UTC تُصدر Z — مُسلسِل الخلفية + اتفاقية Mongo

    الواجهة الأمامية (Angular | date pipe + Date constructor) تتولى التحويل من UTC إلى التوقيت المحلي.

  • Added
    slice50-U: VideoJobPollingWorker — تصليب IHostedService لـ Sora-2

    Phase 1.5 §2.1 — عامل الخلفية ذو الأولوية القصوى.

  • Added
    slice50-V: DunningAttemptScheduler — مرايا إعادة محاولة Paddle لحالة past_due

    Phase 1.5 §2.1 #2 — عامل الخلفية الثاني.

  • Fixed
    slice50-Q: مستهلك SSE في InAppAssistant + تجربة الإلغاء + حارس إعادة المحاولة

    أبلغ المستخدم أن طلب المتابعة 'form doldurma' أعاد 'Message failed'.

  • Fixed
    slice50-T: لصق الحافظة في المحادثة + جسم memory_forget الفارغ

    خطأ A: كان محرر المحادثة يتجاهل Ctrl+V على صور الحافظة.

  • Fixed
    slice50-R: تخطيط /marketplace — حذف lpx-content-container الخارجي

    كانت صفحة تصفح Marketplace (angular/src/app/marketplace/) تستخدم lpx-content-container خارجيًا زائدًا.

  • Fixed
    slice50-P: تكافؤ تبويب التحرير في /me/image + أسطر الأزرار المتجاوبة

    كان تبويب التحرير يفتقر إلى اختيار النموذج (Auto/Manual) وإعدادات الجودة.

  • Fixed
    slice50-N: الموضع الافتراضي لـ FAB في InAppAssistant → أسفل يسار + إصلاح ارتساء اللوحة

    أبلغ المستخدم أن الإعداد الافتراضي لـ Sprint 50-I (bottom:96 right:24) يتداخل مع عناصر الواجهة.

  • Fixed
    slice50-O: ترحيل مسار /me/notifications + التفضيلات (فاته Sprint 49-B)

    أدى اختبار المستخدم لـ /me/notifications إلى خطأ 404.

  • Fixed
    slice50-M: إزالة WalletTopUpPriceIds — استخدام السعر المُدرَج دائمًا دون الفهرس

    كان PaddleOptions.WalletTopUpPriceIds قاموسًا Dictionary<string,string> مُهيَّأ يدويًا.

  • Fixed
    slice50-L: سداد Paddle — تسجيل الحالة والمحتوى عند أخطاء 4xx/5xx

    أبلغ المستخدم 'paddle.js popup açması lazım, hata veriyor' عند تجربة الدفع.

  • Fixed
    slice50-I: سحب FAB في InAppAssistant (التراجع عن سحب اللوحة) + محاذاة قائمة الإشعارات المنسدلة

    يعالج Sprint 50-I انحدارَين في UX ظهرا بعد Sprint 50-B + 50-E.

  • Fixed
    slice50-K: تعارض MessageKey في outbox عند الحفظ الثاني لإعداد Paddle للخطة

    حفظ المسؤول إعداد Paddle لـ SubscriptionPlan؛ نجح الحفظ الأول ولكن فشل الثاني.

  • Fixed
    slice50-J: تفصيل الفوترة — $ فقط في حقول المبالغ

    كان جدول تفصيل التكاليف في /me/billing يُسبق كل حقل ببادئة $ بشكل اعتباطي.

  • Fixed
    slice50-H: ترحيل مسار chat-pipeline + إضافة Chat في قائمة /me

    ترك Sprint 49-B عنواني URL مُضمَّنَين /api/app/* في chat-pipeline.

  • Changed
    slice50-Fi: نشر موحَّد — سحب/إرساء 50-B + نوافذ Workflow الخاصة بـ 50-D + مركز الإشعارات/النشاط لـ 50-E عبر 29 ملف لغة

    - 50-B (InAppAssistant:Bubble:Dock/Undock/DragHint): أُضيف إلى en.json + جميع اللغات الـ28 الأخرى بترجمات أصيلة.

  • Fixed
    slice50-D: مسح confirm/alert/prompt الأصلي من JS على مستوى المشروع → ABP ConfirmationService + نوافذ LeptonX

    المستخدم: 'عند الضغط على حذف في صفحة الذاكرة يظهر confirm من JS، لماذا لا نستخدم LeptonX'.

  • Fixed
    slice50-B: ترتيب tool_calls في InAppAssistant + فقاعة قابلة للسحب والإرساء (CRITICAL)

    الإصلاح A (خطأ حرج في الخادم):

  • Fixed
    slice50-C: عرض قائمة /me/billing + محتوى التبويب فارغ (CRITICAL UX)

    أبلغ المستخدم: ظهرت قائمة SourceKind بكتل وردية/زرقاء غريبة (عطل في العرض).

  • Fixed
    slice50-A: جرسَا الإشعارات ومركز النشاط لم يعودا يتداخلان مع تسمية المسؤول

    ملاحظة مستخدم: الجرسان العائمان (notification-bell + activity-center) كانا يتداخلان مع تسمية المسؤول.

  • Fixed
    slice47-J: إصلاح MT لـ subscription الجزء #2 النهائي — Subscription/Invoice/BYOK/QueuedRequest تصبح IMultiTenant (Phase 2 CRITICAL)

    تطبيق نمط Sprint 47-I + 45-M.

  • Added
    slice48-B: ربط تكلفة التضمين بلقطة AiModelPricing (متابعة Sprint 46-A)

    أضاف Sprint 46-A واجهة IBillingRecorder عبر الوحدات وأصدر سجلات BillingRecords.

  • Fixed
    slice48-A: ترجمة وحدة translation للغات ja/ko/pt/sv (~272 مدخلاً)

    أكمل Sprint 46-F التوحيد الهيكلي lowercase→PascalCase لكنه ترك 4 لغات بمحتوى إنجليزي مُولَّد من Suite.

  • Fixed
    slice47-I: إصلاح تدقيق MT لـ subscription الجزء #1 — Wallet/BillingRecord/Refund/Dispute تصبح IMultiTenant (Phase 2 CRITICAL MONEY)

    تطبيق نمط Sprint 45-M + 47-A حتى 47-N.

  • Fixed
    slice47-N: إصلاح تدقيق MT لـ agent الجزء #2 — Council/DeepResearch/CodeSandbox/Voice/Translator تصبح IMultiTenant (Phase 2)

    تطبيق نمط Sprint 47-M.

  • Fixed
    slice47-L: إصلاح تدقيق MT لـ authoring الجزء #2 — GenJobs/BlogPost/الحصص تصبح IMultiTenant (Phase 2)

    تطبيق نمط Sprint 45-M + 47-K.

  • Fixed
    slice47-M: إصلاح تدقيق MT لـ agent الجزء #1 — Chat/ChatMessage/Assistant تصبح IMultiTenant (Phase 2 HIGH RISK)

    تطبيق نمط Sprint 45-M + 47-A حتى 47-K.

  • Fixed
    slice47-K: إصلاح تدقيق MT لـ authoring الجزء #1 — منظومة Workflow تصبح IMultiTenant (Phase 2 HIGH RISK)

    تطبيق نمط Sprint 45-M + 47-A حتى 47-H.

  • Fixed
    slice47-P: إصلاح تدقيق MT لـ marketplace — 15 كيانًا IMultiTenant (Phase 2)

    تطبيق نمط Sprint 45-M + 47-A/B/C/D/E/F/G/O.

  • Fixed
    slice47-H: إصلاح تدقيق MT لـ creator الجزء #2 — كيانات Posts/Teams/Payouts تصبح IMultiTenant (Phase 2 HIGH RISK)

    تطبيق نمط Sprint 45-M + 47-G.

  • Fixed
    slice47-O: إصلاح تدقيق MT لـ advertising — 16 كيانًا IMultiTenant (Phase 2)

    تطبيق نمط Sprint 45-M + 47-A/B/C/D/E/F.

  • Fixed
    slice47-G: إصلاح تدقيق MT لـ creator الجزء #1 — كيانات Profile/Account/Org تصبح IMultiTenant (Phase 2 HIGH RISK)

    تطبيق نمط Sprint 45-M + 47-A/B/C/D/E.

  • Fixed
    slice47-F: إصلاح تدقيق MT لـ forum — 19 كيانًا IMultiTenant + توزيع الإشعارات بوعي المستأجر (Phase 2)

    تطبيق نمط Sprint 45-M + 47-A/B/C/E.

  • Fixed
    slice47-D: إصلاح تدقيق MT لـ telemetry — 18 كيانًا IMultiTenant + نطاق المستأجر لكتّاب عبر الوحدات (Phase 2 HIGH RISK)

    تطبيق نمط Sprint 45-M + 47-A + 47-B.

  • Fixed
    slice47-E: إصلاح تدقيق MT لـ persona — 16 كيانًا IMultiTenant (Phase 2)

    تطبيق نمط Sprint 45-M + 47-A/B/C.

  • Fixed
    slice47-C: إصلاح تدقيق MT لـ moderation — 11 كيانًا IMultiTenant (Phase 2)

    تطبيق نمط Sprint 45-M + 47-A/B.

  • Fixed
    slice47-B: إصلاح تدقيق MT لـ byokvault + knowledge — 7 كيانات IMultiTenant (Phase 2)

    تطبيق نمط Sprint 45-M + 47-A.

  • Fixed
    slice47-A: إصلاح تدقيق MT لـ eventbus + translation — 8 كيانات IMultiTenant (Phase 2)

    تطبيق نمط Sprint 45-M: لم تُصدر Suite واجهة IMultiTenant على الفئات الأساسية رغم تعيين IsMultiTenant: true في JSON.

  • Added
    slice56-57-58: capability-first routing + Authoring stub fix

    Slice 56 — IModelRoutingService (ByokVault.Application + Contracts):