🦾 ملاحظات د. وائل

Welcome
📁 00-الترسانة
00-الفهرس
📁 00-الترسانة/الذاكرة-اليومية
2026-05-202026-05-212026-05-222026-05-232026-05-242026-05-252026-05-262026-05-272026-06-012026-06-022026-06-032026-06-042026-06-052026-06-062026-06-072026-06-08-obsidian-syncthing-setup2026-06-082026-06-092026-06-10
📁 00-الترسانة/القواعد-الذهبية
DECISION_MATRIXECONOMIC_ARSENAL_MATRIXENGINEERING_ARSENAL_MATRIXENGINEERING_DISCIPLINES_MATRIXLEGAL_ARSENAL_MATRIXMEDICAL_ARSENAL_MATRIXSCIENCE_GRAPHICAL_AUDIO_MATRIX
📁 00-الترسانة/المرجعية
AGENTSAGREEMENTSCAPABILITIESDECISION_MATRIXDOMAIN_MODEL_RANKINGSGOLDEN_RULESGOLDEN_RULES_COREIDENTITYMEMORYMISTAKES_LEDGERMISTAKES_PATTERNSMODEL_REGISTRYSOULSTRATEGIESTOOLSUSER

🔧 L5 Backup Verify "failed" — Root Cause + Fix (2026-06-07 ~03:30)

التنبيه: "L5 backup verify failed — network/API timeout" (وصل 04:01). الجذر الحقيقي (ليس شبكة): boto3 مثبّت فقط في /usr/bin/python3، لكن L5_backup_verify.sh (4 مواضع) + daemons_keepalive.sh (موضع backup) يستدعيان python3 العام (brew) بلا boto3 → ModuleNotFoundError → فشل صامت فُسّر خطأً كـ network timeout. اكتشاف أخطر: daily backup الفعلي توقّف منذ 2026-06-04 (آخر workspace_backup_.tar.gz = 04 يونيو، 4.5GB). r2-backup-state.json كان يكذب (يحدّث last_backup حتى عند فشل الرفع). الإصلاح: ثبّتُّ /usr/bin/python3 في L5_backup_verify.sh (3 edits) + daemons_keepalive.sh (1 edit). + شغّلتُ backup كامل جديد يدوياً. درس دائم: أي سكربت R2/boto3 → استخدم /usr/bin/python3 صراحةً (M-051 dash/sh family — السبب نفسه: البيئة الخاطئة). + لا تثق بـ state file وحده، تحقق من R2 الحي.

Weekly Full Audit — 2026-06-07 (cron)

🧪 Gemini 3.1 Pro vs 3 Pro — Deep Research Head-to-Head (2026-06-07 04:1x)

- DOMAIN_MODEL_RANKINGS.md §7 Research: أضيف "Reasoning backbone = Gemini 3.1 Pro ⭐" + deprecation note 3-pro-preview 404 + ملاحظة الاختبار الحي. - DOMAIN_MODEL_RANKINGS.md §3 Video: LTX-2.3 Pro موسوم #1 open-weights+audio. Budget pipeline note: silent video + OpenAI gpt-audio عبر media_edit.py (فكرة د. وائل). - honesty correction: LTX-2.3 غير موصول بأداة video_generate (verified عبر list). fal تستضيفه لكن يحتاج fal API direct. بدائل budget متاحة فوراً: Seedance-2.0-fast, Hailuo-2.3-Fast, Veo-3.1-Lite. TODO: ربط LTX عبر fal في frontier-video skill. - TOOLS.md: مثال كود Gemini حُدّث من 3-pro-preview → 3.1-pro-preview.

🏆 LTX-2.3 Arsenal Study + Final Recommendation (2026-06-07 05:0x)

- LTX-2.3 Fast = Elo 974 (T2V) — #1 open-weights only, ~360-410 below Veo 3.1 (~1213-1386). Global ≈ #11-12. - LTX-2.3 Pro = Elo 955 (I2V) — #1 open-weights. - Pricing: Fast 720p ~$0.03/s, Fast 1080p ~$0.05, Pro 720p ~$0.06, Pro 1080p ~$0.10/s. open-weights free locally (needs GPU).

🔖 خطوة جاهزة محفوظة — Cloudflare Tunnel permission عند تفعيل الدومين (2026-06-07 05:52)

القرار (د. وائل): لا token جديد — نضيف الصلاحية على نفس التوكن "Gnrl" الموجود.

حالة Cloudflare الحالية (فحص حي 2026-06-07 05:49):

الخطوة الجاهزة (تُنفَّذ وقت تفعيل الدومين alqishawi.com فقط): 1. dash.cloudflare.com → My Profile → API Tokens → التوكن "Gnrl" → Edit. 2. Add policy → Account-level → Cloudflare Tunnel: Edit (+ اختياري Workers Scripts: Edit لو احتجنا Workers). 3. Continue to summary → Save. (التوكن نفسه يبقى، نفس القيمة في env.sh — لا تغيير على env). 4. ملاحظة: تعديل صلاحيات التوكن يتم من المتصفح فقط (Cloudflare API يمنع تعديل policies برمجياً — فقط create/delete).

مرتبط بـ: قرار الدومين (Hostinger free domains 31160577/31160579) + named tunnel ثابت بدل trycloudflare العشوائي.

✅ LTX-2 ربط fal مُنجز (2026-06-07 06:01)

🔼 LTX رُقّي للأحدث = LTX-2.3 (2026-06-07 06:03 — تصحيح بعد سؤال د. وائل)

⚠️ حادثة "No response generated" 06:03 (M-048 خرق سلوكي مني)

🚀 خطة الإطلاق الجاهزة — تُلتقط فوراً في الجلسة القادمة (محفوظة 2026-06-07 06:10)

قرار د. وائل: ننهي الجلسة الآن + backup + /new. عند الوقت المناسب → يفحص الأسماء → ننطلق بالدومين + ربط كل الـ pending المرتبطة به.

1) أسماء الدومين (كلها AVAILABLE — WHOIS مؤكّد 2026-06-07):

2) تسلسل الإطلاق (دفعة واحدة عند جاهزية الدومين):

1. د. وائل يختار اسم + يسجّله من hpanel.hostinger.com → Domains → free domain pending → Set up 2. أنا أكمل تلقائياً بالترتيب: a. DNS: A record (subdomain → IP VPS srv1659934.hstgr.cloud) b. Email رسمي على الدومين (Hostinger email service) c. named tunnel ثابت (بدل trycloudflare العشوائي) + إضافة صلاحية Cloudflare Tunnel: Edit على توكن "Gnrl" (3 نقرات متصفح — موثّق أعلى) d. Pascal self-host (سكربتات جاهزة في projects/pascal-editor-selfhost/) 3. بعد الدومين: ربط هاتفي S24 Ultra ×2 (Tailscale موصى به) — نكمل لما يوصل البيت.

الحالة عند نهاية الجلسة:

🔴🔴 حادثة الموت الكبرى — 11:15→14:29 الكويت (3h14m downtime) — السبب الجذري + الإصلاح

الجدول الزمني (أدلة حية، صفر تخمين):

السبب الجذري (مؤكّد بكود /hostinger/server.mjs):

1. server.mjs ليس supervisor: Z() يشغّل openclaw مرة واحدة عند boot. w.on("exit",()=>w=null) — يصفّر المتغير فقط، لا يستدعي Z() ثانية. → openclaw يموت للأبد حتى container restart يدوي. 2. خطئي (الأخطر): watchdog_unified.sh supervisor_alive() كان يفحص فقط pgrep "node server.mjs" (الأب دائماً حي) فاستنتج 303× "alive→no action" وسلّم لجهة عاجزة. وثّقتُ في تعليقات الكود حرفياً "server.mjs AUTO-RESTARTS it" دون فحص الكود الفعلي = خرق M-034 (فرضية كاذبة). 3. keepalive لا يحرس gateway: يحرس watchdog/L1/tunnel/hub فقط — لا يفحص gateway health.

المفقود: صفر بيانات. فقط ~3h14m زمن + TODO معلّق (cache monitor + backup cron fix). logs خام قبل 11:23 ضاعت (/tmp يُمسح مع container) لكن watchdog logs في memory/ حفظت القصة.

الإصلاحات المطبّقة (2026-06-07 ~14:41 KW، مؤكّدة حياً):

1. ✅ watchdog_unified.sh: حذف supervisor_alive، أضيف openclaw_proc_alive (pgrep -x openclaw). heal() الآن: gateway down + config valid → respawn مباشر (debounced) + kill hung proc أولاً. صحة تُقرر بـ curl /health لا وجود server.mjs. 2. ✅ daemons_keepalive.sh: أضيف "GATEWAY HEALTH GUARD" (P3.1b) — يفحص curl /health، عند الموت + config valid → respawn openclaw + Telegram alert. طبقة مستقلة حقيقية. 3. ✅ temp_keepalive_loop.sh مؤقت (PID 1266، 24h) — يشغّل keepalive كل 5min لأن scheduler فارغ (0/37 cron) فلن يُطلق keepalive cron حتى restart.

عطل ثانوي قائم: scheduler حي = 0 jobs (المفروض 37). jobs.json على القرص سليم 100% (37). يحتاج gateway restart نظيف للـ reload (لا أمر reload مباشر). بانتظار إذن د. وائل الصريح للـ restart.

⚠️ ملفات Cody الثلاثة (المعلّق + chat + commands) لم تصل بعد — للمقارنة عند وصولها.

🔴 تحديث التشخيص النهائي — حادثة الموت = Telegram polling stall (ليس موت عملية)

تصحيح M-032 السابق: العملية لم تمت (docker: "Up 4 days"). الحقيقة من Cody/Kodee logs: السبب الجذري المزدوج: (1) Telegram polling stall (مُفجّر)، (2) auto-update 04:00 ترك hash قديم في الذاكرة فكسر التعافي الذاتي (القاتل). خطئي: auto-update بلا restart مُدار + watchdog يفحص server.mjs لا gateway health (فرضية كاذبة، خرق M-034).

مقارنة Cody: أصاب الجوهر (stall، العملية حية، صفر فقدان، backup أولاً) لكن سطحي (لم يصل لتحديث 04:00). أنا أخطأتُ أولاً في "مات" ثم صحّحت. Cody لم يلمس أي بيانات — تحققتُ.

فحص شامل بعد الحادثة (كله سليم): APIs الأساسية 200 (Anthropic/OpenAI/Google/xAI) · Oxylabs key موجود (len 40) · السلسلة 22 fallback · 37 cron على القرص · 103 skill · memory · R2.

Nexos fix: server.mjs يحقن nexos-anthropic:default (مفتاح فارغ) كل إقلاع. مسحتُه + وسّعتُ nexos_guard.sh ليمسح أي nexos profile (نمط test("nexos")). الآن: 0 nexos في auth-profiles.

الإصلاحات المطبّقة: watchdog يفحص curl /health الفعلي + يطلق openclaw عند الموت · keepalive gateway guard (P3.1b) · temp protection loop · nexos_guard موسّع.

المعلّق (يحتاج إذن): تعطيل auto-update→تحديث مُدار · حارس Telegram stall · restart نظيف لاستعادة 37 cron.

المفقود: صفر بيانات. فقط الزمن (3h14m) + TODO قديم (backup crons) لم يُعالج (مت قبله). Option4++ backup crons مسجّلة (Sat/Sun/Tue) لكن غير محمّلة الآن (scheduler 0/37).

✅ تنفيذ خطة المنع (2026-06-07 ~15:00 KW — بإذن د. وائل "توكل")

المصدر الحقيقي للتحديث (اكتشاف صادق):

auto-update ليس في نظامنا (لا cron/entrypoint/server.mjs/L7). npm log 04:00 = npm ci --workspace ui-tui --workspace web → التحديث من KiloClaw/Hostinger controller الخارجي (مستوى host، خارج تحكّمنا). لذا لا أستطيع "تعطيله" — الحل الأقوى = تحصين ضد التحديثات الخارجية.

المُطبّق (مؤكّد حي، syntax سليم، مربوط بـ keepalive):

1. ✅ version_drift_guard.sh (P3.1c) — يرصد تغيّر dist/version (تحديث خارجي) → restart نظيف مُدار فوري قبل أن يضرب ERR_MODULE. baseline: 2026.6.1. يُفحص كل 5min. 2. ✅ telegram_stall_guard.sh (P3.1d) — يعدّ "Polling stall" في آخر 600 سطر، إذا ≥3 → restart نظيف (debounce 10min). يُفحص كل 5min. 3. ✅ watchdog_unified.sh (سابقاً) — يفحص curl /health الفعلي + يطلق openclaw عند الموت + يقتل hung proc. 4. ✅ keepalive gateway guard (P3.1b) — طبقة مستقلة، فحص health كل 5min. 5. ✅ nexos_guard موسّع — يمسح أي nexos profile (test("nexos")). صفر nexos في auth.

المعلّق (قرار د. وائل):

الحالة: APIs كلها 200 · 22 fallback · 37 cron على القرص · 103 skill · صفر فقدان · صفر تأثّر على الترسانة.

✅✅ الإغلاق النهائي للحادثة (2026-06-07 ~15:12 KW)

العطل الأخير (scheduler 0/37) — السبب الجذري + الحل:

النتيجة النهائية (فحص حي مؤكّد):

صفر فقدان · صفر تأثّر على الترسانة · كل التوصيات نُفّذت.

backups أمان محفوظة: cron/jobs.json.safebak- + .migrated (للرجوع).

M-052 — Channel-Health Gap (process alive ≠ channel connected) — 2026-06-07

الحادثة: container أُعيد إقلاعه من Hostinger ~13:22. الـ openclaw process عاد حياً، لكن WhatsApp bot socket بقي ميتاً من ~03:55 فجراً حتى 15:08 (~11h شلل صامت). كل الحراس الموجودة تفحص "هل process حي؟" — لا شيء يفحص "هل قناة WA متصلة؟". لم ألاحظ، اضطر د. وائل لاكتشافها.

خطأ إضافي: افترضتُ توقيت مراسلة د. وائل (خرق الخط الأحمر صفر-افتراضات). الصواب: آخر مراسلة 5 فجراً، شلل حتى 16:35.

الدرس: "process alive ≠ channel connected". كل قناة لها صحة مستقلة تُراقَب بمؤشر حي (آخر نشاط state file / heartbeat / creds freshness).

الحل (نُفّذ 2026-06-07، نسخة محافظة notify-only):

🔧 TTS Bridge Self-Heal Fix (2026-06-07 17:27) — M-052

العرض: طلب د. وائل طقس غداً صوتياً → الـ bridge فشل بـ ERR: pip install websockets.

الجذر (بأدلة حية، صفر افتراض):

الحل (الأقوى — self-heal، صفر مخاطرة): التأثير على الترسانات: صفر سلبي. لا يلمس env.sh/brew/106 سكربت. لا cron/daemon يستدعيه. التكلفة: صفر. القاعدة العامة الموثّقة تبقى: السكربتات العلمية/الطبية/التحرير تُشغّل عبر pyrun.sh أو /usr/bin/python3 (ليس brew 3.14).

🧭 Capability Router Expansion + Behavioral Rule (2026-06-07 17:50) — M-054

التوسعة المثلى (التوسعة + القاعدة السلوكية):

التحقق: syntax سليم · 18 قديم + 8 جديد يعملون · مجال خاطئ يُرفض · verify EXIT=0. التأثير: صفر على الترسانات/الاستقرار/التكلفة (bash استشاري، لا cron، لا LLM). تماسك أعلى للترسانة. نسخ احتياطية محفوظة (capability_router.sh.bak + GOLDEN_RULES_CORE.md.bak).

🧹 Stale Cleanup + Arsenal Drift Guard + MCP Review (2026-06-07 17:58)

1) Stale entry cleanup (M-? — config hygiene)

2) Arsenal Drift Guard (M-055)

3) MCP Servers review (8، ليس 6)

نسخ احتياطية: openclaw.json.bak.stale- · كل verify EXIT=0.

🔧 Linear MCP Fix + skill_workshop توضيح (2026-06-07 18:08)

Linear — أُصلح فعلياً (لا حذف، عاد للعمل) ✅

السبب الجذري: ~/.codex/config.toml سطر streamlinear-linear كان فيه LINEAR_API_TOKEN = placeholder وهمي (مُقنّع) بدل الحقيقي. الـ token الحقيقي في env.sh (lin_api_...، 48 حرف) صالح 100% (Linear API ردّ: WAEL ALKISHAWI / wayrk76@gmail.com). الإصلاح: استبدلت الـ placeholder بالـ token الحقيقي (string replace نظيف، TOML صالح). نسخة احتياطية: config.toml.bak.
النتيجة: streamlinear-linear صار online (1 tool كامل) → mcporter الآن 7 healthy (كان 6). الأداة: linear(search/get/update/comment/create/graphql) متصلة بفريق WAE. ملاحظة: نسخة linear الأخرى ما زالت auth-required (Linear غيّرت endpoint /sse→/mcp). لم أحذفها (طلب د. وائل: لا إلغاء) — streamlinear يغطّي Linear بالكامل الآن.

skill_workshop — لم تُعطب ولم نخسر شيئاً (توضيح) ✅

التصحيح المهم: كلمة "stale" كانت عن سطر تعريف قديم في config، لا عن الأداة. الأداة skill_workshop مدمجة في core OpenClaw (9 ملفات dist)، بياناتها كاملة (proposals + reviews حتى اليوم 10:14)، وتعمل 100% (list ردّت سليم). إزالة السطر القديم = نظافة فقط، صفر خسارة. لا شيء كان "مربوطاً" بالسطر سوى تحذير مزعج.