Repository navigation
Releases: CTO-DRS/VioletChat
Release list
Violet Chat v0.1.14
Violet Chat v0.1.14 — «الترجمة والجدولة والقفل»
فايلويت شات — مراسلة مشفرة طرف-لطرف بهوية بنفسجية داكنة فاخرة،
مع Firebase Authentication وCloud Firestore.
أولاً — ما الجديد في هذه الإصدارة؟
ثلاث ميزات جديدة — وبنفس المعيار الدائم: المحتوى لا يغادر التشفير
إلا بلمسة صريحة منك.
1) الترجمة داخل المحادثة
- كيف: ضغط مطول على أي رسالة نصية (أو تسمية وسائط) ← بلاطة
«ترجمة». لا ترجمة تلقائية صامتة إطلاقاً — أنت من يطلب، رسالة
برسالة. - الهدف الذكي: النص العربي يُترجم إلى الإنجليزية، وكل لغة أخرى
إلى العربية (كشف بنسبة الحروف العربية في النص). - العرض: النتيجة في لوحة شفافة داخل الفقاعة نفسها، مع لغة
المصدر/الهدف وزر إخفاء. اللمسة الثانية على بلاطة «إخفاء الترجمة»
تطويها. الكاش في الذاكرة حصراً — أغلق المحادثة فيختفي. - الخصوصية (إفصاح صادق): عند اللمسة فقط يُرسل نص تلك الرسالة عبر
HTTPS إلى خدمة الترجمة العامة (Google Translate). لا ترجمة خلفية،
لا تخزين للترجمات عندنا ولا عند الخادم، والتطبيق ينبّه بكذا أول
استخدام.
2) رسائل مجدولة
- كيف: اكتب رسالتك ثم اضغط مطولاً على زر الإرسال ← منتقَي
تاريخ ← منتقَي وقت. (الضغط المطول والميكروفون فارغ الحقل يعطي
تلميحاً يشرح الميزة.) - التنفيذ الصادق: الرسالة تُخزن محلياً على جهازك (تخزين Keystore
مشفر) ولا يُرفع شيء للخادم قبل وقته. حين يحين الوقت يُرسل عبر مسار
التشفير طرف-لطرف المعتاد تماماً — كأنك أرسلتها بيدك في تلك اللحظة. - التوقيت: نبضة كل 15 ثانية أثناء عمل التطبيق (مفتوحاً أو بالخلفية)؛
ما فات أثناء إغلاق التطبيق يُرسل عند أول فتح له. هذا موثق في
رسالة التأكيد نفسها — بلا وعود سحابية كاذبة. - الإدارة: شريط فوق حقل الكتابة يعرض مجدولات هذه المحادثة (الوقت
- المعاينة) مع إلغاء بلمسة. الرد المفعّل وقت الجدولة يسافر مع
الرسالة.
- المعاينة) مع إلغاء بلمسة. الرد المفعّل وقت الجدولة يسافر مع
3) قفل التطبيق برمز PIN
- كيف: الإعدادات ← الخصوصية ← «تعيين رمز PIN» — من 4 إلى 6 أرقام
بإدخال مزدوج للتأكيد. ثم فعّل «قفل التطبيق (بصمة أو رمز)». - التخزين: الهاش مملح (SHA-256 + ملح عشوائي 8 بايت لكل تعيين)
داخل Keystore الجهاز المشفر — لا يُزامَن مع الخادم ولا يغادر
الجهاز أبداً، وكل تعيين جديد يولّد ملحاً جديداً. - شاشة القفل الجديدة: لوحة أرقام دائرية بنمط التطبيقات الكبرى —
نقاط تعبئة، إرسال تلقائي عند اكتمال الطول، اختزال بصمة على اللوحة
إن وُجدت بصمة مسجلة، وتهدئة قسرية 30 ثانية بعد 5 محاولات خاطئة. - تغيير/إزالة الرمز: من الإعدادات، وكلاهما يتطلب إدخال الرمز
الحالي أولاً. - فشل-آمن كما هو: القفل لا يشتغل إلا بعامل متاح فعلاً (PIN أو
بصمة) — عطل في أي مكون لا يقفل النظام أبداً. وعلاوة: مفتاح القفل
كان سابقاً معطلاً كلياً على الأجهزة بلا بصمة — الآن يعمل بالـPIN
وحده.
ثانياً — الخادم
- صفر تغييرات خادمية في هذه الإصدارة: لا جداول جديدة، لا توسعة
قيود، لا رقع حية. الجدولة طابور جهاز-محلي، والترجمة والقفل لا
يلمسان الخادم أصلاً.
ثالثاً — الأذونات (شفافية كاملة)
- لا صلاحيات أندرويد جديدة إطلاقاً. الترجمة تستخدم اتصال الإنترنت
الموجود، والجدولة والقفل فوق قدرات الجهاز المحلية الموجودة.
رابعاً — الترقية
- ثبّت APK الإصدارة فوق أي إصدار سابق مباشرة (versionCode 21).
- لا هجرة بيانات: PIN وترجمة وجدولة كلها قيم جديدة معزولة.
- رسائل الإصدارات الأقدم تُعرض طبيعياً؛ بلاطة الترجمة وزر الجدولة
يظهران في هذه الإصدارة فقط.
خامساً — ملاحظات
- الجدولة محلية بطبيعتها (مثل «الإرسال عند الساعة» في تطبيقات
المراسلة دون بنية خادم مخصصة): إن أُطفئ الهاتف قبل الموعد تذهب
الرسالة عند أول تشغيل تالٍ — صدقاً كاملاً بدل وهم الدقة. - سلامة القفل: الهاش المملح لا يُعاد حسابه إلا محلياً؛ 5 محاولات
خاطئة = 30 ثانية تهدئة (لكل عملية، في الذاكرة). النسيان يعني
إعادة تثبيت التطبيق فقط (الرسائل تبقى مشفرة بالجهاز كما هي). - الاختبارات: ملف
test/v0114_features_test.dartيغطي هاش PIN
وتدوير الملح وخنق المحاولات، تحليل استجابة gtx وذكاء اللغة
الهدف، ودورة جدولة JSON كاملة (إضافة/فرز/إلغاء/مسح عند الخروج)
— يُنفذ عبر CI مع الحزمة الكاملة.
Violet Chat v0.1.13
Violet Chat v0.1.13 — «الخصوصية والتحكم»
فايلويت شات — مراسلة مشفرة طرف-لطرف بهوية بنفسجية داكنة فاخرة،
مع Firebase Authentication وCloud Firestore.
أولاً — ما الجديد في هذه الإصدارة؟
ثلاث ميزات جديدة تحت مظلة «الخصوصية والتحكم» — وبنفس المعيار الدائم:
الخادم لا يرى المحتوى أبداً.
1) وسائط الرؤية الواحدة
- كيف: قائمة المرفقات ← فعّل «وسائط بمشاهدة واحدة» ← أرسل صورة أو
فيديو أو رسالة صوتية. المفتاح سريان لمرة واحدة (يُستهلك بالإرسال
التالي) حتى لا تُرسل وسائط عادية بغير قصد. - عند المستلم: تصل الوسائط كبلاط مقفل (أيقونة + «اضغط للمشاهدة
مرة واحدة» + «تختفي بعد أول مشاهدة») — بلا أي تنزيل مسبق حتى
للمعاينة المصغرة، فالبلاط نص خالص ولا يلمس البصمة المشفرة. - المشاهدة: اللمسة تفتح عارضاً خاصاً — الصورة ملء الشاشة، الفيديو
يعمل تلقائياً مرة واحدة، والصوتي يُحتسب مشاهداً عند اكتماله أو
إيقافه. عند إغلاق العارض تُطوى الفقاعة إلى شاهد «وسائط المشاهدة
الواحدة — تمت المشاهدة» نهائياً. - المنع الشامل: تُمحى حمولة الوسائط المفكوكة (ومن ضمنها مفتاح
فك بصمة التخزين المشفرة) من قاعدة الجهاز المحلية، ويُحظر إعادة
التوجيه (في القائمة وخارجها)، وتُستبعد كلياً من معرض وسائط
المحادثة — لدى المرسل والمستلِم معاً. سجل «تمت المشاهدة» يصمد
أمام إعادة تشغيل التطبيق. - الخصوصية: علم
onceيسافر داخل التشفير طرف-لطرف حصراً —
الخادم يرى رسالة وسائط عادية ولا يعرف أنها رؤية-واحدة. عملاء
الإصدارات الأقدم يتجاهلون المفتاح المجهول ويعرضون الوسائط عادية
(تدهور رشيق بلا انهيار). المرسل يحتفظ بمعاينة عادية مع شارة
«رؤية واحدة».
2) البحث داخل المحادثة
- كيف: أيقونة البحث في شريط المحادثة ← اكتب استعلامك — يظهر عداد
«س / ع» وأزرار أحدث/أقدم للتنقل بين النتائج بنمط تطبيقات المراسلة
الكبرى. أول قفزة تهبط على أحدث ورود ثم تتقدم نحو الأقدم. - الذكاء: القفز يعيد استخدام نفس آلية الردود — ترحيل التاريخ
تلقائياً حتى العثور على الرسالة، تمرير سلس، وإبراز وميض. - المطابقة: تطبيع عربي متسامح (همزات، ألف صور، ياء/ألف مقصورة،
تاء مربوطة، تشكيل، حالة أحرف لاتينية) يغطي: نص الرسالة، التسمية
التوضيحية، اسم ملف الوسائط، سؤال الاستطلاع وخياراته، وسم الموقع،
واسم بطاقة الاتصال. - الخصوصية: البحث محلي صرف فوق الكاش المفكوك على جهازك — يفحص
كل السجل المخزن لا النافذة الظاهرة فقط، والخادم لا يشارك
لأنه لا يقرأ.
3) سرعات تشغيل الرسائل الصوتية
- كيف: شريحة «1×» داخل فقاعة الرسالة الصوتية — لمسة تدور
1× ← 1.5× ← 2× ← 1×. - الجودة: السرعة عبر
setSpeedالحافظة للطبقة الصوتية (لا
نخرساً ولا صراخ)، وتُطبق على المصدر الجديد عند كل تشغيل، والعرض
مختصر دائماً (1× لا «1.0×»).
ثانياً — الخادم
- صفر تغييرات خادمية في هذه الإصدارة: لا جداول جديدة، لا توسعة
لقيدmessages.kind، لا رقع حية. كل الحمولات الجديدة (علم once
ونتائجه) تسافر داخل عمودbodyالمشفر الموجود منذ v0.1.0 —
أخف دفعة على الخادم منذ التأسيس.
ثالثاً — الأذونات (شفافية كاملة)
- لا صلاحيات جديدة إطلاقاً: الرؤية الواحدة والبحث والسرعات كلها
فوق قدرات موجودة (تخزين محلي، تنزيل وسائط، مشغل صوتي).
رابعاً — الترقية
- ثبّت APK الإصدارة فوق أي إصدار سابق مباشرة (versionCode 20).
- لا هجرة بيانات محلية: الرؤية الواحدة تستخدم جدول
kvالموجود
منذ v0.1.0، والبحث يقرأmessages_cacheكما هو. - رسائل الإصدارات الأقدم تُعرض طبيعياً كما هي، ووسائط الرؤية الواحدة
الواردة من عملاء الإصدارة الجديدة تظهر للعملاء القدامى كوسائط
عادية (بلا بوابة المشاهدة الواحدة).
خامساً — ملاحظات
- ضمانة «تختفي بعد المشاهدة» هي عقد تطبيق صادق: التطبيق لا يحتفظ
ولا يعيد عرض الوسائط بعد المشاهدة الأولى إطلاقاً — والخادم لا
يملك المفاتيح أصلاً. ظاهرياً يمكن لأي جهاز تصوير الشاشة؛ هذا طبيعة
كل أنظمة المشاهدة الواحدة في تطبيقات المراسلة دون استثناء. - الاختبارات: ملف
test/v0113_features_test.dartيغطي ذهاباً-وإياباً
لعلمonce(ورسائل التراث ونظافة الwire)، تمريرtoMediaInfo،
مسارInnerPayload، مفاتيحViewOnce، ثماني حالات بحث عربي
(نص/تشكيل/ملفات/استطلاعات/مواقع/بطاقات)، سلم السرعات وتسمياته،
ومعاينة once — يُنفذ عبر CI مع الحزمة الكاملة.
Violet Chat v0.1.12
Violet Chat v0.1.12 — «الموقع وجهات الاتصال»
فايلويت شات — مراسلة مشفرة طرف-لطرف بهوية بنفسجية داكنة فاخرة،
مع Firebase Authentication وCloud Firestore.
أولاً — ما الجديد في هذه الإصدارة؟
ثلاث ميزات جديدة تحت مظلة «الوسائط الذكية» — بنفس معيار الخصوصية
الصارم: الخادم لا يرى المحتوى أبداً.
1) مشاركة الموقع المشفرة
- كيف: قائمة المرفقات ← «الموقع» ← إما «الموقع الحالي» (GPS بدقة
عالية مع عرض هامش الدقة بالمتر) أو «على الخريطة» (خريطة حية بدبوس
ثابت في الوسط — حرّكها تحت الدبوس، كبّر/صغّر، اكتب وسماً اختيارياً
مثل «المنزل» ثم شارك). - الخصوصية: الإحداثيات والوسم يسيران داخل التشفير طرف-لطرف
حصراً (kind='location') — الخادم يرى كلمة «موقع» فقط ولا يعرف
أين أنت. بلاطات المعاينة تُجلب مجهولة من OpenStreetMap (بلا مفاتيح
API ولا حسابات). - العرض: فقاعة بمعاينة خريطة ساكنة مركزها نقطتك + الوسم +
الإحداثيات. لمسة واحدة تفتح الموقع في تطبيق الخرائط على جهازك
(geo: على أندرويد) — التطبيق نفسه لا يرسل أي شيء لأي خدمة خرائط.
2) بطاقات جهات الاتصال المشفرة
- كيف: قائمة المرفقات ← «جهة اتصال» ← اختر صديقاً من القائمة ←
تُرسل بطاقة مشفرة تحمل اسمه واسم مستخدمه. - اللمسة: من يستلم البطاقة يضغط عليها فتُفتح محادثته المباشرة مع
ذلك الصديق فوراً (نفس مسار إضافة QR لكن بلا كاميرا). بطاقتك أنت
تُعرف فوراً برسالة لطيفة. - الخصوصية: الاسم واسم المستخدم داخل التشفير (
kind='contact')
— الخادم يرى بطاقة، لا يرى مَن فيها.
3) تنسيق نص الرسائل
- الصيغ:
**غامق**،*مائل*،~~شطب~~، و`كود`— تعمل
في الرسائل النصية والردود على الحالات والتسميات التوضيحية للوسائط. - الخصوصية: التحليل محلي صرف على جهاز المستقبل بعد فك التشفير —
النص يُرسل كما هو حرفياً ولا يتغير شيء في التشفير أو الخادم. - الأمان: العلامة غير المغلقة تبقى حرفية (لا يُبتلع شيء)، والعلامات
الفارغة تبقى نصاً، وداخلالكودلا تُفسَّر صيغ أخرى.
تحسين مصاحب
- شريط «رد على» صادق لكل الأنواع: الرد على استطلاع يعرض «📊 استطلاع
رأي»، وعلى موقع «📍 موقع»، وعلى بطاقة اسمها — بدل «📎 وسائط»
العام لكل شيء.
ثانياً — الخادم
- رقعة حية مطبقة ومتحقق منها قبل/بعد عبر Postgres المباشر:
supabase/patches/2026-10-24-v0112-location-contact-kinds.sql—
توسيع قيدmessages.kindلقبولlocationوcontact(إلى جانب
storyReplyالسابقة). لا جداول جديدة ولا هجرات — كل الحمولات في
bodyالمشفر.
ثالثاً — الأذونات الجديدة (شفافية كاملة)
ACCESS_FINE_LOCATION+ACCESS_COARSE_LOCATION: للموقع الحالي
فقط، بمطالبة وقت التشغيل داخل ورقة المشاركة — لا قراءة خلفية ولا
تتبع مستمر. إن رفضت الأذونات يمكنك مشاركة نقطة من الخريطة يدوياً
كالعادة.- لا صلاحيات أخرى جديدة: البلاطات HTTPS عادية، و
geo:يفتح عبر
نوايا النظام.
رابعاً — الترقية
- ثبّت APK الإصدارة فوق أي إصدار سابق مباشرة (versionCode 19).
- لا هجرة بيانات محلية: الموقع والبطاقات تسلك عمود
body_json
الموجود منذ v0.1.0. - رسائل الإصدارات الأقدم تُعرض طبيعياً كما هي.
خامساً — ملاحظات
- معاينة الخريطة في الفقاعة تطلب بلاطات من خوادم OpenStreetMap عند
العرض (سلوك أي تطبيق خرائط) — مَن يفضّل عدم طلب بلاطات إطلاقاً
فالتخفيض متاح: الرسالة تظل مقروءة من الإحداثيات والوسم النصي. - الاختبارات: ملف
test/v0112_features_test.dartيغطي ذهاباً-وإياباً
للحمولتين، الدفاع ضد الإحداثيات الملوثة، كل قواعد التنسيق، والمعاينات
الموحدة — يُنفذ عبر CI مع الحزمة الكاملة.
Violet Chat v0.1.11
Violet Chat v0.1.11 — «تحسينات الاستطلاعات والحالات»
فايلويت شات — مراسلة مشفرة طرف-لطرف بهوية بنفسجية داكنة فاخرة،
مع Firebase Authentication وCloud Firestore.
أولاً — ما الجديد في هذه الإصدارة؟
ثلاثة تحسينات طلبها المالك حرفياً («تعديل رسائل الاستطلاع، ردود على
الحالات، حالات فيديو») — تُبنى فوق دفعة v0.1.10 مباشرة وبنفس معيار
الخصوصية: الخادم لا يرى المحتوى أبداً.
1) تعديل رسائل الاستطلاع
- كيف: اضغط مطولاً على فقاعة استطلاع أرسلته أنت ← «تعديل» —
نفس ورقة الإنشاء تفتح معبأة بسؤالك وخياراتك؛ عدّل ما تريد واحفظ. - شرطان صادقان: التعديل متاح فقط قبل وصول أي أصوات (حتى لا
تنزاح معاني الخيارات تحت أصوات قائمة)، وفقط بعد استقرار الصف على
الخادم. بعدها يظهر «لا أصوات بعد — اضغط مطولاً للتعديل» في
تذييل فقاعتك، ويظهر وسم «معدّلة» بعد أي تعديل. - الخصوصية: التعديل يعيد تشفير السؤال والخيارات كاملة —
والخادم يرى فقاعات بايتات جديدة فقط. معرف الاستطلاع الداخلي لا
يتغير أبداً فلا شيء ينكسر في الربط.
2) ردود على الحالات
- كيف: افتح حالة صديق ← اكتب في حقل «أرسل رداً» أسفل الشاشة ←
إرسال. الرد يصل كرسالة مشفرة في محادثتك المباشرة مع صاحب الحالة،
بشارة «رد على حالة» تربطه بمصدره. - الخصوصية: نص الرد ومرجع الحالة يسيران داخل التشفير حصراً —
الخادم يرى رسالة عادية لا يعرف أنها رد ولا على أي حالة. - تفاصيل لطيفة: الكتابة توقف تقدم الحالة مؤقتاً (لا تفوت الحالة
وأنت تكتب)، والرد يظهر في قائمة المحادثات ببادئة «↩».
3) حالات فيديو
- النشر: زر الفيديو في مؤلف الحالة — فيديو من المعرض أو تسجيل
مباشر حتى 60 ثانية (وسقف 50 ميجابايت كوسائط المحادثة)، مع معاينة
حية قبل النشر وتعليق نصي اختياري. - الخصوصية: الفيديو يُختم بمفتاح عشوائي يُولد على جهازك
(AES-256-GCM) ويُرفع مشفيراً — ويُغلَّف المفتاح لأجهزة أصدقائك
بنفس مخطط v0.1.10. لا أحد غير أجهزتكم يستطيع فكه. - العرض: تشغيل داخل العارض مع شريط تقدم يتبع الفيديو الفعلي
(لا مؤقت ثابت — لا تخطي على الشبكات البطيئة)، ضغط مطول للإيقاف،
والتعليق يظهر أسفل الفيديو.
ثانياً — ما الذي لم يتغير؟
- كل ميزات v0.1.10 قائمة: الاستطلاعات المشفرة بالتصويت الحي،
والحالات النصية والصورية بالمشاهدين والحذف والصلاحية 24 ساعة. - كل ميزات v0.1.9 وإصلاحا v0.1.8 قائمة كما هي.
- لا صلاحيات أندرويد جديدة — الفيديو عبر مسار الوسائط القائم نفسه.
- الترقية فوق v0.1.10 مباشرة (versionCode 18) بلا فقدان بيانات.
ثالثاً — التقني
- الخادم: توسيع واحد فقط لقيد
messages.kindلقبولstoryReply
(رقعة حية موثقة فيsupabase/patches/2026-10-24-v0111-story-reply-kind.sql).
تعديل الاستطلاعات لا يحتاج أي تغيير خادمياً — حارس النزاهة
messages_guardيسمح أصلاً للمرسل بتحديث متن رسالته. - العميل:
storyRefينتقل في الحمولة المشفرة والتخزين المحلي
(body_json) بلا هجرة مخطط؛ أدوات تشغيل الفيديو في العارض
مسجلة بالمعرف لمنع سباق الانتقال بين الصفحات. - اختبارات جديدة (
v0111_features_test.dart): قواعد التحقق
المشتركة للإنشاء/التعديل، دلالات التعديل (pollId ثابت — الأصوات
تبقى — الخيارات المقلصة تُهمَل خارجها)، حمصة رد الحالة، ومسار
MediaInfo للفيديو — تُنفذ عبر CI مع كل بناء.
Violet Chat v0.1.10
Violet Chat v0.1.10 — «استطلاعات وحالات»: دفعة الميزات التالية
فايلويت شات — مراسلة مشفرة طرف-لطرف بهوية بنفسجية داكنة فاخرة،
مع Firebase Authentication وCloud Firestore.
أولاً — ما الجديد في هذه الإصدارة؟
دفعة الميزات التي طلبها المالك حرفياً («مرشحات جاهزة: استطلاعات
رأي مشفرة، حالات/ستوري للأصدقاء») — نُفذتا كاملتين بنفس معيار
الخصوصية الذي يبنى عليه التطبيق كله: الخادم لا يرى المحتوى أبداً.
1) استطلاعات رأي مشفرة
- الإنشاء: أي محادثة (ثنائية أو مجموعة) ← زر المرفقات ←
«استطلاع رأي» — سؤال + خياران حتى 12 خياراً، ونشر بضغطة. - الخصوصية: السؤال والخيارات يسيران داخل التشفير (
kind='poll')
— الخادم يخزن فقاعات بايتات لا يفكها. الأصوات كذلك: كل رصيص
رسالة مشفرة مستقلة (kind='pollVote') مرتبطة بالاستطلاع عبر
مرجع مشفر دائم داخل الحمولة (pollRef) — والخادم لا يعرف
خيار أي مصوّت. - التصويت: اضغط أي خيار لتفويت — واضغط خياراً آخر لتغيير رأيك
(آخر صوت يفوز). النِّسَب وأشرطة التقدم تتحدث حياً لدى الجميع عبر
مسار الوقت-الحقيقي القائم. - الفرز على الجهاز: العد يحدث محلياً من الرياص المشفرة —
صوت واحد لكل مصوّت، الصور المحذوفة والتالفة تُهمل، وأي رصيص
لاستطلاع آخر يُتجاهل دفاعياً. - بلا ضجيج: الرياص لا تظهر كرسائل في المحادثة ولا تُطلق
إشعارات — تُعَدّ بصمت داخل فقاعة الاستطلاع.
2) حالات/ستوري مشفرة للأصدقاء
- شريط الحلقات: أعلى تبويبَي «المحادثات» و«الأصدقاء» — «حالتي»
بزر + متوهج، وحلقات الأصدقاء بنفسجية متوهجة لغير المقروء
ورمادية للمقروء (نمط واتساب). - النشر: حالة نصية بخلفية متدرجة (6 لوحات تختارها)، أو صورة
من المعرض مع تعليق، أو صورة وحدها. - الخصوصية: كل حالة تُختم بمفتاح عشوائي يُولد على جهازك
(AES-256-GCM)، والمفتاح يُغلَّف لأجهزة كل أصدقائك بنفس مخطط
مفاتيح المجموعات المجرّب (X25519 + HKDF بنطاق مخصص) — أجهزتك
الأخرى ترى حالتك أيضاً. الصور تُرفع مشفرة تحت مسار مخصص
media/stories/…بسياسات تخزين صارمة (الأصدقاء يقرأون فقط). - العارض: ملء-الشاشة بأشرطة تقدم لكل حالة من حالات المؤلف،
نقر يمين/يسار للتنقل، ضغط مطول للإيقاف، سحب لأسفل للإغلاق،
وقت النشر، وحذف حالتك (يمحو الخادم والوسائط معاً). - المشاهدون: شارة «المشاهدون» على حالتك تعرض من فتحها
ومتى (بيانات وصفية بنفس مستوى إيصالات القراءة القائمة). - الصلاحية: 24 ساعة خادمياً مع تنظيف تلقائي — كما تتوقع من
الستوري.
ثانياً — ما الذي لم يتغير؟
- كل ميزات v0.1.9 قائمة: الباركود، فحص التحديث، حجم الخط،
معلومات الرسالة. - إصلاحا v0.1.8 قائمان: الرسالة الصادقة عند حساب قائم + تخزين
مفتاح المراسلة بعد الدخول الناجح. - لا صلاحيات أندرويد جديدة — الصور من المعرض عبر المسار القائم.
ثالثاً — التقني
- الخادم: جداول
violet_stories/violet_story_wraps/
violet_story_viewsبـRLS يعرّف «الصديق» = محادثة مباشرة
قائمة (دالةis_direct_friend)، توسيع قيدmessages.kind
لقبول نوعي الاستطلاع، ودوالmedia_chat_idالآمنة و
purge_expired_stories. - العميل: عمود
body_jsonالمحلي (موجود منذ v0.1.0) يحمل حمولات
الاستطلاع — بلا أي هجرة قاعدة محلية، والترقية فوق v0.1.9
مباشرة بلا فقدان بيانات (versionCode 17). - اختبارات جديدة (
v0110_features_test.dart) تغطي الفرز بسبعة
سيناريوهات ومسار تشفير الحالة الحقيقي كاملاً — تُنفذ عبر CI
مع كل بناء.
Violet Chat v0.1.9
Violet Chat v0.1.9 — «اضف مميزات»: أربع ميزات جديدة بلمسة واحدة
فايلويت شات — مراسلة مشفرة طرف-لطرف بهوية بنفسجية داكنة فاخرة،
مع Firebase Authentication وCloud Firestore.
أولاً — ما الجديد في هذه الإصدارة؟
بعد إصلاح جسر المصادقة في v0.1.8، هذه الإصدارة تحمل أربع ميزات
كاملة طلبها المالك مباشرة («اضف مميزات للتطبيق»):
1) إضافة صديق بالباركود (QR)
- أين رمزك؟ الملف الشخصي ← «رمز QR الخاص بي» — رمز بنفسجي أنيق
مع زر «مشاركة» لإرسال الحمولة نصياً لأي قناة. - كيف تضيف صديقاً؟ جهازه يعرض رمزه، وأنت من «محادثة جديدة» تضغط
«إضافة صديق بمسح رمز QR» وتوجّه الكاميرا — المحادثة المشفرة تُفتح
فوراً بعد المسح. - تسامح مدروس: التحليل يقبل رموز القوارئ الخارجية (حالة مختلفة)،
الروابط،@والفراغات — والملاحظة الصادقة «هذا الرمز ليس رمز
إضافة Violet Chat» عند مسح رمز غريب، مع بقاء الكاميرا تعمل. - لا صلاحيات جديدة: الكاميرا مسموحة أصلاً لمكالمات الفيديو.
2) فحص التحديث داخل التطبيق
- عند بدء الجلسة: فحص صامت واحد عبر GitHub Releases API — إن وُجد
إصدار أحدث ظهر حوار «تحديث جديد متاح» يفتح صفحة الإصدار الرسمية. - في الإعدادات: بلاطة الإصدار أسفل الشاشة صارت زراً — «فحص
التحديثات» اليدوي متاح في أي وقت. - مقارنة دلالية (0.1.9 أقدم من 0.1.10 — النمط الذي تخدعه المقارنة
النصية)، وكل فشل شبكة صامت تماماً بلا إزعاج.
3) حجم خط المحادثة
- الإعدادات ← المظهر ← «حجم خط المحادثة»: شريط 13–22 مع معاينة
حية داخل البطاقة، ويُطبَّق فوراً على نص الرسائل في كل
المحادثات (نص + تعليق الوسائط). - يُحفظ مع بقية إعداداتك على الخادم (JSONB بلا تغيير مخطط).
4) معلومات الرسالة في المحادثات الثنائية
- الضغط الطويل على رسالتك في محادثة ثنائية يعرض الآن بلاطة
«معلومات» (كانت حصراً للمجموعات): حالة التسليم والقراءة للطرف
الآخر بتوقيت حقيقي.
ثانياً — تعليمات التثبيت
- حمّل الحزمة المناسبة من صفحة الإصدار (الشاملة universal آمنة
للجميع؛ arm64 للأجهزة الحديثة). - ثبّت فوق الإصدار القائم — نفس مفتاح التوقيع، البيانات
والمفاتيح المشفرة تُحفظ تلقائياً (versionCode 16 > 15). - لا حاجة لأي إعداد — الميزات الأربع تعمل فوراً بعد التثبيت.
ثالثاً — ماذا تغير تقنياً؟
- اعتماديات جديدة: qr_flutter (توليد)، mobile_scanner (مسح،
5.x متوافق مع سلسلة البناء القائمة Kotlin 1.9/minSdk 24)،
url_launcher + إعلان<queries>في المانيفست. - ملفات جديدة: qr_add_service (منطق الحمولة النقي المتسامح)،
update_service (فحص + مقارنة دلالية)، qr_scan_screen،
upgrade_dialog. - اختبارات جديدة v019_features_test.dart: ذهاب-وإياب الحمولة
والتسامح، حالات مقارنة الإصدارات الحرجة (0.1.9/0.1.10)، حدود
حجم الخط وفك الترميز الدفاعي — فوق كتلة الاختبارات القائمة.
Violet Chat v0.1.8 — «الصدق في الجسر»: كل حالة لها رسالتها الحقيقية
أولاً — لماذا هذا الإصدار؟
فجر 2026-10-23 اصطدم المالك برسالة «تم إنشاء الحساب — أكّد بريدك
الإلكتروني ثم أعد المحاولة» على شاشة الدخول، بينما فحص قاعدة بيانات
المراسلة المباشر أثبت أن حسابه مؤكّد منذ 2026-10-21. التشخيص
الصادق: جسر Google كان يفسّر استجابة الخادم «نجاح بلا جلسة» دائماً
كحالة «حساب جديد انتظر تأكيد بريدك»، بينما هي مع حماية تعداد
البريد تعني حالتين مختلفتين تماماً:
| الحالة | ماذا يعني فعلاً | رسالة v0.1.7 | رسالة v0.1.8 |
|---|---|---|---|
| حساب أُنشئ للتو | تأكيد البريد مطلوب حقاً | «أكد بريدك» ✓ صادقة | «أكد بريدك» (تبقى كما هي — صادقة هنا) |
| بريد له حساب قائم بكلمة مرور مختلفة | التثبيت الجديد فقد المفتاح المشفر | «أكد بريدك» ✗ مضللة | «اضغط الدخول بحساب مراسلة قائم… وسيعمل زر Google تلقائياً بعدها» |
| انقطاع شبكة أثناء الفحص | لا حكم ممكن | — | «تحقق من الإنترنت…» حياد صادق |
التمييز يُجرى بمحاولة دخول لاحقة بالمفتاح الطازج: رسالة الخادم بين
الحالتين مختلفة تماماً (email_not_confirmed مقابل
invalid_credentials) — ونفس المعالجة نُفّذت في جسر البريد/كلمة
المرور حيث الغموض نفسه موجود.
ثانياً — زر Google يصبح سلساً دائماً
منذ v0.1.8: بعد أي دخول مراسلة ناجح بالبريد (إنشاء حساب، دخول،
أو حساب مراسلة قائم) تُخزَّن كلمة مرور المراسلة في التخزين المشفر
بجهاز (Android Keystore عبر flutter_secure_storage) تحت هوية جلسة
Firebase المطابقة للبريد حصراً. النتيجة العملية:
- دخلت مرة واحدة بأي طريقة → زر Google يدخل مباشرة بعد ذلك بلا
أي كلمة مرور، وعلى أي إعادة تثبيت يكفي دخول واحد بالبريد. - شروط صارمة تحكم التخزين: بلا جلسة Firebase لا يُخزن شيء، ولا
يُخزن سر تحت هوية بريد آخر أبداً، وفشل التخزين لا يُعطّل دخولاً
نجح أصلاً. - العقد الموثق في رأس المتحكم حُدِّث بشفافية ليعكس هذا التخزين.
ثالثاً — إصلاح إيحاءات مضللة أخرى في نفس المسار
- رسالة «حساب مراسلة بكلمة مرور مختلفة… أو استعد كلمة المرور من
شاشة الدخول» كانت توجهاً لطريق مسدود: استعادة شاشة الدخول
تستهدف Firebase وحدها ولا تصلح كلمة مرور المراسلة. التوجيه الآن
للزر الصحيح باسمه الحرفي: «الدخول بحساب مراسلة قائم».
رابعاً — لمن يُثبّت v0.1.8 الآن (بما فيهم المالك)
- إن كنت تملك حساب مراسلة قائم: اضغط «الدخول بحساب مراسلة قائم»
وأدخل بريدك وكلمة مرور المراسلة — مرة واحدة فقط، وكل الأزرار
تعمل بلا انقطاع بعدها. - إن نسيت كلمة مرور المراسلة: تُستعاد عبر إدارة الخادم (توثيقها
قيد الإعداد — قوالب البريد لا تزال بعلامة DRS NEXORA وترحَّب
بإعادة العلامة عند توفر رمز إدارة Supabase). - التحديث يثبت فوق v0.1.7 مباشرة (versionCode 15) دون فقدان أي
بيانات محلية.
خامساً — التقني
VioletBridgeCase+VioletBridgeClassifier: منطق نقي بلا
خدمة حية، يُختبر برسائل GoTrue الحقيقية.- 6 اختبارات انحدار جديدة (المجموع 122) تشمل أولوية الشبكة
والحالات الحدّية التي قد تُخدع بمطابقات جزئية. - versionCode 15 — bump في 5 ملفات وفق دورة الإصدار المعتادة.
Violet Chat v0.1.8
Violet Chat v0.1.8 — «الصدق في الجسر»: كل حالة لها رسالتها الحقيقية
فايلويت شات — مراسلة مشفرة طرف-لطرف بهوية بنفسجية داكنة فاخرة،
مع Firebase Authentication وCloud Firestore.
أولاً — لماذا هذا الإصدار؟
فجر 2026-10-23 اصطدم المالك برسالة «تم إنشاء الحساب — أكّد بريدك
الإلكتروني ثم أعد المحاولة» على شاشة الدخول، بينما فحص قاعدة بيانات
المراسلة المباشر أثبت أن حسابه مؤكّد منذ 2026-10-21. التشخيص
الصادق: جسر Google كان يفسّر استجابة الخادم «نجاح بلا جلسة» دائماً
كحالة «حساب جديد انتظر تأكيد بريدك»، بينما هي مع حماية تعداد
البريد تعني حالتين مختلفتين تماماً:
| الحالة | ماذا يعني فعلاً | رسالة v0.1.7 | رسالة v0.1.8 |
|---|---|---|---|
| حساب أُنشئ للتو | تأكيد البريد مطلوب حقاً | «أكد بريدك» ✓ صادقة | «أكد بريدك» (تبقى كما هي — صادقة هنا) |
| بريد له حساب قائم بكلمة مرور مختلفة | التثبيت الجديد فقد المفتاح المشفر | «أكد بريدك» ✗ مضللة | «اضغط الدخول بحساب مراسلة قائم… وسيعمل زر Google تلقائياً بعدها» |
| انقطاع شبكة أثناء الفحص | لا حكم ممكن | — | «تحقق من الإنترنت…» حياد صادق |
التمييز يُجرى بمحاولة دخول لاحقة بالمفتاح الطازج: رسالة الخادم بين
الحالتين مختلفة تماماً (email_not_confirmed مقابل
invalid_credentials) — ونفس المعالجة نُفّذت في جسر البريد/كلمة
المرور حيث الغموض نفسه موجود.
ثانياً — زر Google يصبح سلساً دائماً
منذ v0.1.8: بعد أي دخول مراسلة ناجح بالبريد (إنشاء حساب، دخول،
أو حساب مراسلة قائم) تُخزَّن كلمة مرور المراسلة في التخزين المشفر
بجهاز (Android Keystore عبر flutter_secure_storage) تحت هوية جلسة
Firebase المطابقة للبريد حصراً. النتيجة العملية:
- دخلت مرة واحدة بأي طريقة → زر Google يدخل مباشرة بعد ذلك بلا
أي كلمة مرور، وعلى أي إعادة تثبيت يكفي دخول واحد بالبريد. - شروط صارمة تحكم التخزين: بلا جلسة Firebase لا يُخزن شيء، ولا
يُخزن سر تحت هوية بريد آخر أبداً، وفشل التخزين لا يُعطّل دخولاً
نجح أصلاً. - العقد الموثق في رأس المتحكم حُدِّث بشفافية ليعكس هذا التخزين.
ثالثاً — إصلاح إيحاءات مضللة أخرى في نفس المسار
- رسالة «حساب مراسلة بكلمة مرور مختلفة… أو استعد كلمة المرور من
شاشة الدخول» كانت توجهاً لطريق مسدود: استعادة شاشة الدخول
تستهدف Firebase وحدها ولا تصلح كلمة مرور المراسلة. التوجيه الآن
للزر الصحيح باسمه الحرفي: «الدخول بحساب مراسلة قائم».
رابعاً — لمن يُثبّت v0.1.8 الآن (بما فيهم المالك)
- إن كنت تملك حساب مراسلة قائم: اضغط «الدخول بحساب مراسلة قائم»
وأدخل بريدك وكلمة مرور المراسلة — مرة واحدة فقط، وكل الأزرار
تعمل بلا انقطاع بعدها. - إن نسيت كلمة مرور المراسلة: تُستعاد عبر إدارة الخادم (توثيقها
قيد الإعداد — قوالب البريد لا تزال بعلامة DRS NEXORA وترحَّب
بإعادة العلامة عند توفر رمز إدارة Supabase). - التحديث يثبت فوق v0.1.7 مباشرة (versionCode 15) دون فقدان أي
بيانات محلية.
خامساً — التقني
VioletBridgeCase+VioletBridgeClassifier: منطق نقي بلا
خدمة حية، يُختبر برسائل GoTrue الحقيقية.- 6 اختبارات انحدار جديدة (المجموع 122) تشمل أولوية الشبكة
والحالات الحدّية التي قد تُخدع بمطابقات جزئية. - versionCode 15 — bump في 5 ملفات وفق دورة الإصدار المعتادة.
Violet Chat v0.1.7
Violet Chat v0.1.7 — «إعادة الترتيب الكامل»: وظيفة واحدة = مدخل واحد في كل شاشة
فايلويت شات — مراسلة مشفرة طرف-لطرف بهوية بنفسجية داكنة فاخرة،
مع Firebase Authentication وCloud Firestore.
أولاً — لماذا هذا الإصدار؟
v0.1.6 أعادت توزيع المداخل الخمسة التي كانت تفتح شاشة البحث، لكن
المعاينة الدقيقة أظهرت أن تكرارات باقية داخل الشاشات الواحدة:
| الشاشة | التكرار الذي بقي |
|---|---|
| الرئيسية | أيقونة «الشّمل» في شريط البحث + أيقونة البحث العلوية ← كلاهما للبحث الشامل |
| الرئيسية | ★ المحفوظة و+ المجموعة في الأعلى ← مكررتان في «المزيد» وورقة الإنشاء |
| الأصدقاء | بطاقة «ابحث عن مستخدم» + أيقونة البحث العلوية ← الشاشة نفسها |
| الأصدقاء | بطاقة «المجموعات» ← تكرر ورقة الإنشاء |
| المزيد | بلاطة «البحث» + أيقونة البحث العلوية للتبويب |
| ورقة الإنشاء | «محادثة جديدة» تفتح شاشة البحث نفسها = استنساخ لا وظيفة |
هذا الإصدار يطبّق مبدأ صارماً: في أي شاشة واحدة، لا زرّان يقودان
لنفس الوجهة — وكل زر له وظيفة يملكها وحده.
الخريطة النهائية للمداخل (بعد إعادة الترتيب)
| العنصر | وظيفته الوحيدة |
|---|---|
| الشريط العلوي (موحّد) | الأفاتار ← ملفي الشخصي، أيقونة البحث ← البحث الشامل (مدخل وحيد في شاشته) |
| زر + المركزي | ورقة الإنشاء: 4 مسارات، كل مسار وجهة مختلفة |
| «محادثة جديدة» | شاشة جديدة كلياً: جهات اتصالك + تصفية فورية + آخر نشاط — لا استنساخ للبحث |
| شريط البحث | تصفية محلية فورية للقائمة المعروضة فقط (مسح ⇠ أيقونة X) |
| «+» سطر الأصدقاء | إضافة صديق بالمعرّف |
| تبويب الأصدقاء | بطاقتان فقط: «إضافة صديق بالمعرّف» + «دعوة صديق» |
| تبويب المزيد | المحفوظة، الأرشيف (جديد، دائم يعرض العدد)، البحث الشامل، الأمان، الإعدادات، الإدارة |
| بانر الترحيب | زر يفتح «الأمان والخصوصية» (شرح التشفير) — لا زينة صامتة |
| الحالة الفارغة | «ابدأ أول محادثة» ← ورقة الإنشاء + «أنشئ مجموعة» ← إنشاء مجموعة |
| «لا نتائج محلية» | بحث شامل معبّأ مسبقاً بنفس الاستعلام — مختلف فعلاً عن أيقونة البحث |
وظائف جديدة في هذا الإصدار
- شاشة «محادثة جديدة» (
/contacts/new) — اختر من جهات اتصالك
المعروفة بتصفية لحظية متسامحة (تطبيع عربي يهمل التشكيل
والهمزات)، مع آخر نشاط لكل جهة، وبطاقة «لا جهات اتصال» الودية،
وزر احتياطي سياقي وحيد للبحث الشامل. - بلاطة الأرشيف الدائمة — كان الأرشيف مخفياً خلف بطاقة لا تظهر
إلا عند وجود عناصر مؤرشفة؛ الآن له بيت ثابت في «المزيد» يعرض
عدد العناصر. - بانر الترحيب الوظيفي — لمسة على البانر تفتح شاشة الأمان حيث
يُشرح التشفير طرف-لطرف. - البحث المعبّأ مسبقاً — عندما تعطي التصفية المحلية لا نتائج،
زر «بحث شامل» يفتح البحث بنفس كلمتك جاهزة للتشغيل.
ترقية مباشرة
- versionCode 14 (فوق 13) — ثبّت APK الجديد فوق أي إصدار سابق
مباشرة دون حذف. - الحزمة:
com.drs.violetchat— نفس توقيع الإنتاج، التحديث سلس. - كل الإصدارات والتفاصيل في CHANGELOG.md.
التحقق
- 113 اختباراً (بينها دخان ترجمة لكل الشاشات بما فيها الجديدة) +
flutter analyzeنظيف في CI قبل أي بناء. - APK المنشور يتحقق ثنائياً (versionCode/versionName/توقيع الإنتاج/
مطابقة SHA-256 مع SHA256SUMS).
Violet Chat v0.1.6
Violet Chat v0.1.6 — «كل زر له وظيفة»: إعادة توزيع مداخل الشاشة الرئيسية
فايلويت شات — مراسلة مشفرة طرف-لطرف بهوية بنفسجية داكنة فاخرة،
مع Firebase Authentication وCloud Firestore.
أولاً — ملاحظة المالك التي قادت لهذا الإصدار
لاحظ المالك في لقطة ميدانية (2026-10-22 23:04) أن أكثر من زر واحد
يقود للشاشة نفسها عند البحث عن مستخدم — والملاحظة صحيحة تماماً:
خمسة مداخل (أيقونة البحث العلوية، شريط البحث، زر «ابحث عن مستخدم»
في الحالة الفارغة، زر + المركزي، و«+» سطر الأصدقاء) كانت كلها تفتح
شاشة البحث. هذا الإصدار يعيد توزيع الوظائف ويضيف وظائف جديدة لكل
مدخل.
الخريطة الوظيفية الجديدة
| العنصر | وظيفته الخاصة الآن |
|---|---|
| زر + المركزي «جديد» | ورقة إنشاء: محادثة جديدة / مجموعة جديدة / إضافة صديق بالمعرّف / دعوة صديق للتطبيق |
| شريط البحث | تصفية محلية فورية: الكتابة تُصفّي المحادثات والأصدقاء المعروضين لحظياً (بتطبيع عربي متسامح يهمل التشكيل والهمزات) — أيقونة «tune» داخله تفتح البحث الشامل وأيقونة المسح تفرّغ التصفية |
| «+» سطر الأصدقاء | ورقة «إضافة صديق بالمعرّف»: معرّفي للنسخ + حقل يفتح البحث الشامل معبّأً ومشغّلاً |
| أيقونة البحث العلوية | البحث الشامل فقط (مستخدمون + رسائل + محادثاتي) — المدخل الوحيد له |
| الحالة الفارغة | زرّان: «ابدأ أول محادثة» + «أنشئ مجموعة» |
| دعوة صديق | مشاركة نظام حقيقية (أي تطبيق على الجهاز) تحمل معرّفك تلقائياً |
وظائف جديدة في هذا الإصدار
- التصفية المحلية الفورية — وظيفة لم تكن موجودة: بدل الانتقال
لشاشة بحث منفصلة، الكتابة في شريط البحث تُصفّي القائمة المعروضة
فوراً في التبويبات الثلاثة (الرئيسية/المحادثات/الأصدقاء). - ورقة إضافة صديق بالمعرّف — شارك معرّفك بضغطة نسخ، وابحث عن
صديقك بإدخال معرّفه مباشرة (البحث الشامل يُشغّل تلقائياً بالمعرّف
المُدخل). - ورقة إنشاء مركزية — كل مسارات الإنشاء في مكان واحد مع وصف
واضح لكل خيار. - بطاقة «لا نتائج محلية» — عند تصفية لا تجد شيئاً تُقترح
«بحث شامل في كل المستخدمين» بدل قائمة فارغة صامتة.
الميزات القائمة محفوظة كما هي
- تشفير X3DH + Double Ratchet، رسائل حية، مكالمات ومكالمات مجموعات،
وسائط، رسائل متلاشية، تثبيت/كتم/أرشفة، رسائل محفوظة، قفل حيوي،
دخول Google + بريد/كلمة مرور، تشخيص صادق بأرقام الأخطاء الحقيقية
(من v0.1.5).
التثبيت (APK) — هذا الإصدار بحزمة com.drs.violetchat
- نزّل
app-universal-release.apk(يعمل على arm32 + arm64) وثبّته
فوق v0.1.5 مباشرة (versionCode 13). - بيانات المراسلة مرتبطة بحسابك لا بالحزمة — لا فقدان.
- إن طلب أندرويد «مصادر غير معروفة» اسمح بها لهذا المتصفح فقط.
متطلبات البناء من المصدر
- JDK 17 (Temurin) + Android SDK (NDK 26.1.10909125)
- Flutter 3.35.1 stable
google-services.jsonداخلandroid/app/(المضمن هو ملف المشروع
الرسمي violetchat-cea68)- خطوات البناء الكاملة في
docs/BUILD.md
ما يحفظه هذا الإصدار من عهود
applicationIdهوcom.drs.violetchatمطابقاً لتسجيل Firebase
الرسمي (التغيير موثق بسببه وأثره في CHANGELOG v0.1.2).- نفس مفتاح التوقيع (حارس آلي في CI يرفض أي حزمة خارج هوية الإنتاج).
- لا كلمات مرور في Firestore ولا SharedPreferences ولا ملفات محلية.
- لا مفاتيح أو أسرار في المستودع إطلاقاً.
Violet Chat v0.1.5
Violet Chat v0.1.5 — تشخيص دقيق لأعطال Google برقمها الحقيقي
فايلويت شات — مراسلة مشفرة طرف-لطرف بهوية بنفسجية داكنة فاخرة،
مع Firebase Authentication وCloud Firestore.
أولاً — سياق الحالة الميدانية: القواعد نُشرت والإعداد سليم
بعد أن نشر المالك قواعد Firestore بنجاح («تمت العملية» — الخطأ
التركيبي في السطر 32 مُصلَح في commit 89e6771)، ظهرت على محاولة
لاحقة رسالة «تسجيل الدخول عبر Google غير مفعّل — إضافة بصمة SHA-1».
التحقيق أثبت أن هذه الرسالة مضللة في هذه الحالة تحديداً:
- ملف
google-services.jsonالمضمن في APK يحتوي فعلاً على عميل
Android نوع 1 للحزمةcom.drs.violetchatبنبضة SHA-1
924d6c62…376bالمطابقة حرفياً لشهادة إنتاج APK المنشور
(تحقق ثنائي مستقل) — أي أن الإعداد كان مسجلاً في المشروع الرسمي
violetchat-cea68 منذ v0.1.2. - محاولة سابقة على نفس الجهاز عبرت Google كاملاً (منتقي الحسابات
ظهر، وُلّد الرمز، ووصل التدفق إلى قاعدة البيانات) — والدليل خطأ
permission-denied الموثق في v0.1.4. - لقطة الشاشة تُظهر سرعة شبكة 18 كيلوبايت/ثانية وقت المحاولة —
الفشل الحقيقي كان شبكياً عابراً (ApiException 7 على الأرجح).
الخلل البرمجي المصلح: قابس google_sign_in يغلّف كل أعطاله
PlatformException(sign_in_failed, … ApiException: N) — كان التطبيق
يلتقط الرمز الأول فقط ويعرض رسالة الإعداد (SHA-1) لكل الأعطال، حتى
انقطاع الشبكة العابر. v0.1.5 يستخرج الرقم الحقيقي ويعرض الرسالة
المطابقة له.
الجديد في v0.1.5
- رقم ApiException الحقيقي يُستخرج ويُحترم: 7 ← «تعذر الاتصال
بخدمات Google — تحقق من الإنترنت»، 8 ← «خطأ داخلي في خدمات
Google»، 12500/12502 ← «أعد المحاولة»، و10 ← رسالة Console
(الآن للحالة الإعدادية الحقيقية وحدها). - أي رقم مجهول يظهر رقميته صراحةً في التشخيص العام
(«رمز: ApiException N») — لقطة الشاشة تكفي للتشخيص الفوري. - +6 اختبارات انحدار (شبكة/داخلي/مصادقة/مجهول/إعداد/بلا-رقم) —
الإجمالي 104 اختبارات في CI. - كل ميزات v0.1.4 محفوظة كما هي: رسالة permission-denied التنفيذية،
زر Google، هوية الحزمةcom.drs.violetchat، تشفير X3DH + Double
Ratchet، رسائل حية، مكالمات، مجموعات، وسائط، رسائل متلاشية، قفل
حيوي.
ماذا يعني هذا عملياً
- أعِد المحاولة على اتصال مستقر (Wi-Fi إن أمكن) — المحاولة
السابقة كانت على شبكة شبه مقطوعة. - إن ظهرت رسالة خطأ مجدداً فأرسل نصها حرفياً — منذ هذا الإصدار
تسمي الرسالة السبب الحقيقي بدل نسبة كل شيء إلى الإعداد.
التثبيت (APK) — هذا الإصدار بحزمة com.drs.violetchat
- نزّل
app-universal-release.apk(يعمل على arm32 + arm64) وثبّته
فوق v0.1.4 مباشرة (versionCode 12). - بيانات المراسلة مرتبطة بحسابك لا بالحزمة — لا فقدان.
- إن طلب أندرويد «مصادر غير معروفة» اسمح بها لهذا المتصفح فقط.
متطلبات البناء من المصدر
- JDK 17 (Temurin) + Android SDK (NDK 26.1.10909125)
- Flutter 3.35.1 stable
google-services.jsonداخلandroid/app/(المضمن هو ملف المشروع
الرسمي violetchat-cea68 وتكفي للبناء والعمل الفعلي)- خطوات البناء الكاملة في
docs/BUILD.md
ما يحفظه هذا الإصدار من عهود
applicationIdهوcom.drs.violetchatمطابقاً لتسجيل Firebase
الرسمي (التغيير موثق بسببه وأثره في CHANGELOG v0.1.2).- نفس مفتاح التوقيع (حارس آلي في CI يرفض أي حزمة خارج هوية الإنتاج).
- لا كلمات مرور في Firestore ولا SharedPreferences ولا ملفات محلية.
- لا مفاتيح أو أسرار في المستودع إطلاقاً.