Skip to content

Releases

HaramLite v0.2.9

Choose a tag to compare

@github-actions github-actions released this 25 Sep 13:02

HaramLite 0.2.9 — «الحوافّ المكشوفة»

حالة هذه الوثيقة: منشورة. الإصدار v0.2.9 منشور عامّاً على GitHub بتاريخ
2026-09-25
(‏publishedAt = 2026-09-25T13:02:51Z · غير مسودّة · غير prerelease)، وهذا نصّ
النشرة نفسه
. والوسم v0.2.9 مؤشّر إلى الالتزام fca5882 (مقيس: كائن الوسم
8b454c0 ⇒ fca5882). والأرقام أدناه مقيسة محلياً على التزام ساكن
(git status فارغ قبل القياس وبعده) ولا تُنسب إلى CI إلا حيث نُصَّ على خلافه.

المصدر: git log main..0db0ade — ٥٥ التزاماً، والدمج من main = ada7b2c
(مقيس: git rev-list --count main..0db0ade = 55). كل بند أدناه مسنود ببصمة التزامه،
لا بذاكرة كاتب.

الإصدار 0.2.9 — موحَّد في package.json · src-tauri/tauri.conf.json · src-tauri/Cargo.toml · src-tauri/Cargo.lock (pnpm versions:check ⇒ ✓ · exit 0)
إضافة المتصفّح 1.1.9 — دورة نشر مستقلّة، لا تُوحَّد مع التطبيق (browser-extension/manifest.json)
رأس فرع التكامل 0db0ade
قاعدة النطاق main = ada7b2c (‏git merge-base main rehearsal/owner-test = ada7b2c)
عنصر النشر Release #36136806340 على 3ff9d95 ⇒ completed · success (بناء على عدّاءات GitHub). وخرج خمسة أصول: HaramLite_0.2.9_x64-setup.exe 196,944,377 بايت (187.8 MiB) · HaramLite_0.2.9_x64_en-US.msi 230,002,688 بايت (219.3 MiB) · SHA256SUMS.txt 194 · build-info.json 3,578 · sbom.cdx.json 422,856

١) ما أُصلح

١-١ · الإضافة: الوضع واللغة واللغتان معاً

المشكلة المقيسة: زرّ المشاهدة كان يرسل الطلب بلا وضع، فيقع التطبيق على افتراضيّه
(song) — أي أن الوضع المعروض في الواجهة لم يكن الوضع المُرسَل. وزرّ اللغة لم يكن
موجوداً أصلاً، وكانت اللغة تتبع navigator.languages وحدها.

  • 9d1c1e4 — feat(ext): 1.1.9 - the mode choice reaches the player, named bridge errors stop reading as empty replies, and the language has a visible switch
  • d2e3bd3 — fix(ext): the displayed mode is the mode that gets sent - the watch request carried none, so the app used its own default (song)
  • 2fabfba — زرّ المشاهدة يعود إلى المسار المؤقّت، والأوضاع الصريحة تُحفَظ، وقائمة سماح تمنع الإفراط في الإسقاط
  • a2d1656 — جواب جاسوس مستقلّ: الاتجاه عند التبديل الحيّ · مزلاج البدء · ومسربا HTML كانا يعيدان فتح Trusted Types
  • c800cff — انتظار القراءة الأولى قبل إرسال الوضع · متابعة تغييرات التبويب الآخر · بناء قائمة السياق مرّة واحدة · وطباعة الوضع المُرسَل
  • 0521402 — i18n(ext): لغة واحدة لكل نصّ — الجرد أولاً، ثم إعادة كتابة الإنجليزية، وقائمة سماح بالأسماء تمنع الرجوع
  • 2b1d8c2 — إعادة قياس صفوف المتصفّح بعد 1.1.9 (إبقاء المصفوفة صادقة)

القياس: pnpm ext:guard أخضر · pnpm ext:mutants (بوّابة سالبة) بلا ثقوب · صفوف المتصفّح الثلاثة بمكافآتها الرقمية وآثارها الملتزَمة في qa/browser-rows/.

١-٢ · البوت بلغتين + /lang

النصوص كانت عربية مكتوبة في telegram.rs بلا جدول ترجمة. الآن للبوت لغة، و/lang يبدّلها فعلاً.

  • c11fe88 — feat(telegram): the bot speaks English too, and /lang switches for real
  • 5d42327 — fix(telegram): «نصّا المالك الحيّان كانا نصوصي المرحليّة المتوازية» (تصحيح ذاتي مُعلَن)
  • 756d07a — قياس الحدّ الذي سمّاه الجاسوس على النصّ الخام: ليس موجوداً (نفي بالقياس لا بالرأي)

١-٣ · نافذة/شاشة الإعدادات

العطل المقيس: شاشة الإعدادات كانت شريطاً بطول ٦٧ بكسل داخل ترويسة مموّهة
(backdrop-filter ينشئ containing block فيحبس العنصر fixed)، ثم صارت نافذة ثانية، ثم
أُلغيت النافذة الثانية لصالح شاشة داخل النافذة في سبعة تبويبات.

  • db4e686 — feat(ui): an independent settings window opened from Rust, covered by the existing capability
  • 2085794 — feat(ui): the settings screen moves into the window, in seven tabs
  • a5fcb1e — refactor(ui): drop the second window, settings become an in-window screen
  • 03bb637 — الشاشة تأخذ الوضع من الرست، و CSS‑ي يكفّ عن إبطال hidden
  • 5e5ce0f — fix(ui): the settings screen was a 67px strip inside the blurred header (علّة backdrop-filter)
  • 10d8dfa — fix(settings): unnest the seven tab panels so every tab shows its own group
  • 5190f22 — test(settings): حكم على خريطة id → تبويب المعلَنة، لا على حضور DOM
  • 9a49379 — ci(layout): قياس شاشة الإعدادات لا القائمة المنسدلة وحدها
  • a00c8d5 / ba916f5 / 3f4e823 / 73d2b6b — انظر ١-٤

١-٤ · بوّابتا الحرّاس: الأسماء + مُفسَدات رست

الفجوة المقيسة: خطّ الأساس كان يقارن العدد وحده ⇒ اختبار يُحذف ويُوضع مكانه اختبار
تفاهي يمرّ
. والحارس الذي لا يسقط قط ليس حارساً.

  • a00c8d5 — feat(gate): compare the rust test *names*, not just the counts — جردُ أسماء في qa/rust-baselines.json؛ اسم غاب ⇒ يسقط البناء
  • ba916f5 — feat(qa): a baseline of test *names*, and the two measured holes as mutants — الثقبان المقيسان (نزع حارس واختبار تافه مكانه · اختبار صار #[ignore]) صارا مُفسَدَين
  • 3f4e823 — feat(qa): a negative gate for rust guards — نظير ext:mutants للجانب الرست
  • 73d2b6b — ci(gate): run the rust mutant gate in the existing job — موصولة بـCI (وإلا فهي نصيحة، قاعدة المشروع §١٠)
  • 8252a9d — تثبيت خطّ الأساس بعد إصلاح الجسر

القياس (على 2da7093): pnpm rust:gates ⇒ clippy ١٤/١٤ موضعاً فريداً · ٤١٨ ناجح (الأساس ٤١٨) · ٠ فاشل · ٥ مُهمَل · الجرد ٤١٨/٤١٨ اسماً والغائب صفر · exit 0 — قيس مرّتين بنفس النتيجة.

١-٥ · جرد التبويبات

الشاشة سبعة تبويبات، ولكل معرّف تبويبٌ معلَن في خريطة، والحارس يحكم على الخريطة لا على
حضور العنصر في DOM (وهو ما كان يمرّ على عنصر مخفيّ).

  • f2114a5, 3ce2baf, 9fa296c, 2471286, 96ab31e — فرع agent/settings2 (غير مدموج بعد؛ انظر §٣): حذف مسار #advanced-panel الميت · تثبيت الحارس على العنوان · حذف توصيل «المعاينة السريعة» ومستهلكيه · توسيع حارس المسارات الميتة إلى كل src
  • 5190f22 — التبويبات وid المعلَنة (مدمج)

١-٦ · حذف المسارات الميتة

  • 2471286 — refactor(queue): delete the dead quality-select wiring, and widen the dead-path guard to all of src
  • 9fa296c — refactor(main): delete the dead quick-preview DOM wiring, and drop its allowlist
  • f2114a5 — refactor(settings): delete the dead #advanced-panel path and guard against its return
  • 96ab31e — refactor(preview): delete the quick-preview setting and all of its consumers

حدّ أمانة: هذه الأربعة على agent/settings2 ولم تُدمج في فرع التكامل بعد (مقيس:
git rev-list --count 0db0ade..agent/settings2 = 5). فحذف المسارات الميتة ليس في 0.2.9
حتى تُدمج
— أُثبته هنا ولا أدّعي خلافه.

١-٧ · subcode وأعطال المحرّك

المشكلة: ردّ فشل بلا code يُقرأ في الإضافة «ردّ فارغ» فيضيع السبب.

  • e5ee662 — fix(slots,telegram,bridge): an occupancy connector, a t3 that measures its own resource, and engine subcodes
  • 02ef68a — test(bridge): a raw engine message is never a valid subcode
  • 824e211 — fix(bridge): carry watch and mode together so an explicit clip survives the request file

القياس: pnpm bridge:codes ⇒ ٧ رموز مُصدَرة في ١٧ موضع خطأ، ولكلٍّ مدخل وحالة ترجمة في
ملفَّي الإضافة (٢١ فحصاً · ٠ فاشل) · exit 0.

١-٨ · ترجمة رسائل الواجهة

العطل المقيس: رسائل يصوغها التطبيق (لا الإضافة) تُعرض عربية في واجهة إنجليزية،
وdirection="ltr" — وزيادة مفاتيح ترجمة لا تُصلحه لأن النصّ لا يأتي من الإضافة.

  • 3beea55 — fix(i18n): read the backend's error through its stable code, not the raw text
  • 58845e2 — fix(ui): every displayed backend error goes through errText
  • a273f08 — test(ui): no raw .error read escapes errText, and the codes match Rust both ways
  • 34e2dfa — test(ui): عدّ String(<catch binding>) عند مصرف العرض أيضاً — مُفسَد هو الذي وجد الثقب
  • 3ceb424 — ربط عيّنة الإلغاء بالنصّ الذي يبنيه separator.rs اليوم (وكان التعليق تاريخياً)

حدّ أمانة: هذه الخمسة على agent/texts2/agent/ui-texts ولم تُدمج (مقيس:
0db0ade..agent/texts2 = 6). ويبقى ط-١٢ مفتوحاً في docs/BACKLOG-0.3.md:353:
تفصيل المحرّك {e} يبقى عربياً داخل جملة إنجليزية.

١-٩ · إصلاح stderr والتنزيل

العطل المقيس (بلاغ المالك): تنزيل يفشل بعد ١٠٠٪ والرسالة والسجلّ يحملان تقدّماً فقط بلا
سطر الخطأ
. السبب الجذري بالقراءة: yt_dlp.rs كان يصرّف stderr إلى بالوعة تُرمى،
ويبني الذيل من stdout وحده — وyt-dlp يكتب ERROR: على stderr. ثم أُعيد إنتاجه بنصّه:
ERROR: unable to download video data: HTTP Error 403: Forbidden.

  • 68b7f5e — fix(ytdlp): stop discarding stderr — a failed download now carries its cause
  • b0d8f2d — feat(ytdlp): retry a transient download failure once — measured, logged, bounded
  • ba5a852 — fix(ytdlp): a download failure is no longer labelled "ملفات:" (file error)
  • 0e9da97 — fix(ytdlp): never retry a permanent failure, never spend a valid result
  • 36f2e62 — fix(qa): the rust baseline gate now compares tests_ignored too
  • 124ee13 — fix(ytdlp): judge the failure from its ERROR line, and rescue a valid slot on stall
  • 6e07746 — style(ytdlp): إزاحة توثيق لا تغيير كود

حدّ أمانة: السبعة على agent/x2-dl ولم تُدمج (مقيس: 0db0ade..agent/x2-dl = 13).
أي أن إصلاح stderr والتنزيل ليس في 0.2.9 حتى تُدمج.

١-١٠ · الإلغاء

العطل المقيس: الإلغاء من الواجهة كان يُسجَّل ERROR pipe: خطأ استدلال النموذج: تم إلغاء المعالجة من قبل المستخدم — أي إلغاء المستخدم يُقرأ عطلاً.

  • 705ae1b — fix(pipe): a user's cancel is not a failure — no ERROR line on the engine path
  • 1ca3b0d — fix(sep): type the stop in demix, and guard that the type is the one production builds
  • 1661a70 — test(pipe): إغلاق تفادي الحارس بالتعليق/التجزئة، وحراسة مساري المحرّك والأداة
  • 438ac78 — test(sep): حصر الحارس النصّي على متن demix، وجعل الحارس الحيّ غير قابل للتخطّي الصامت
  • 9375383 — إيقاف الحارس عن رفض الكود الصحيح، ومنع الحارس الحيّ من المرور بلا تنفيذ
  • fb9f250 — علم المشاهدة يعود إلى المسار المؤقّت
  • b348c38...
Read more

HaramLite v0.2.8

Choose a tag to compare

@github-actions github-actions released this 17 Sep 16:33

إغلاق ثقوب في الأدلّة: حارسٌ كان يقرأ ولا ينفّذ · وأربع عشرة بوّابة

  • أُغلق ثقب حقن في «افتح الملف» كان قائماً قبل 0.2.7: مسار فيه & صار يُمرَّر وسيطاً واحداً بلا مُفسِّر أوامر.
  • حارس الإضافة كان يقرأ الكود ولا ينفّذه: صار ينفّذ setAudioTime على ستة مشاهد ⇒ 513 فحصاً · 36 مُفسَداً (كانت 473 · 27).
  • ثلاث بوّابات كانت تصمت أو تصرخ خطأً وثمانٍ لم تعد تمرّ فراغاً، وبوّابة جديدة pnpm guards:selfcheck تجعلها أربع عشرة.
  • سبعة إصلاحات صحّة (سجلّ throttle لا يطبع أصفاراً · stft بلا نقص تحت الصفر · bridge لا ينفكّ تدفّقه · نفايات CSS كانت تُسقط كتلتين مرئيتين) — بلا تغيير في طريقة الفصل أو الواجهة.
الأصل الحجم SHA-256
HaramLite_0.2.8_x64-setup.exe 187.64 م.ب f23a59ab82edb8156a2298f81b1c625cabdd122f07a5acab4d29f9719969cf6f
HaramLite_0.2.8_x64_en-US.msi 364.69 م.ب 89912fd12ec39e91db162a26907cf90b4fa928c1aa7c09f2c387411feda8baec
SHA256SUMS.txt 194 بايت —

البصمات مقيسة من الملفين المُنزَّلين من هذه الصفحة لا من مجلد البناء. والتفصيل الكامل في docs/RELEASE-0.2.8.md داخل المستودع.

التثبيت عبر NSIS. النسخة المحمولة لا تدعم التحديث الذاتي — استخدم صفحة الإصدارات.

HaramLite 0.2.7

Choose a tag to compare

@SMSMy SMSMy released this 17 Sep 07:35

HaramLite 0.2.7

الأصل البايتات SHA-256
HaramLite_0.2.7_x64-setup.exe 197,105,521 BDF2CBAA2266597980672EF968107E25C0D5FD03724E03417CD96B94E58DD6F8
HaramLite_0.2.7_x64_en-US.msi 389,496,832 8022A9FE2BAE2735F5838D5F35404D8970935CC90A1E2F07E329D8D3BF469EAF

Repair assets (stable)

Choose a tag to compare

@SMSMy SMSMy released this 17 Sep 19:34

مصادر معالج الإصلاح الذاتي — لا تحذف هذا الإصدار. الرخص: رخصة NVIDIA CUDA (البند 1.1.2 Distribution Requirements) لأصول CUDA/cuDNN، و MIT لمزوّدي ONNX Runtime — والتفاصيل في THIRD-PARTY-NOTICES.md في المستودع.