🔴 M-070 — Paralysis + proxy-storm (2026-06-23 ~17:58 Kuwait)
Symptoms (Dr. Wael): working fine until 17:58 Kuwait, then bot repeated "proxy IP sync m068 ... repointed hub proxy .9 to .3" every 2 min + complete paralysis (\n/new did nothing). He restarted container on Hostinger + used Codi. Second "death after update" recurrence.ROOT CAUSE A — paralysis (the cure was the disease): host guard openclaw_host_recovery.sh health probe = docker exec openclaw openclaw status (timeout 12s). At 14:56Z+14:58Z UTC (=17:56/17:58 Kuwait) it failed 2x consecutive → triggered doctor --fix + docker restart at 15:00Z. BUT container logs show NO crash/error — gateway was BUSY (mid heavy turn), not dead. The forced restart killed my live session → "Something went wrong"/paralysis (incomplete-turn family M-048), and reassigned container IP 172.16.1.9→172.16.1.3.
ROOT CAUSE B — 2-min alert storm: proxy_ip_sync.sh greps ALL /etc/nginx files for stale IP. The real served default.conf was already correct (.3), but a leftover backup default.conf.bak.1782014557 inside hub-proxy still held .9. Detector saw .9 → "repoint"+alert every 2 min forever (33 alerts today). The served proxy was actually fine the whole time.
FIXES (applied + verified live):
- Removed stale
.bak.in hub-proxy → storm stopped (hub HTTP 200, no stale IP). Verified: proxy log lines 34→34 after manual run. proxy_ip_sync.sh: detection nowgrep --include='.conf'→ backups never trigger storm. (.bak saved.pre-m070.bak)openclaw_host_recovery.sh: added BUSY-NOT-DEAD gate —gw_http_alive()curls gateway port 8899; ANY HTTP code = alive → restart SUPPRESSED. status timeout 12→15s, consecutive threshold 2→3. Verified: ran live, container NOT restarted (alive). (.bak saved.pre-m070.bak)
🕐 Telegram Desktop TZ time-offset bug (2026-06-23) — محلول
- العَرَض: Telegram Desktop على لابتوب د. وائل (GPD، ويندوز) يعرض وقت الرسائل متأخراً ساعتين؛ الموبايل (S24) + ساعة ويندوز + tzutil = صحيحة (+3 Arab Standard Time). Get-Date أكّد النظام +03:00.
- الجذر: متغيّر بيئة
TZ=Asia/Kuwait(user-level, HKCU\Environment, REG_SZ؛ غير موجود في HKLM). Telegram Desktop يقرأ TZ ويفهم صيغة POSIX فقط لا أسماء IANA → يخطئ تفسير "Asia/Kuwait" فيحسبها كأنها +1 (تأخر ساعتين). ويندوز + الموبايل يتجاهلان TZ تماماً → صحيحان دائماً. - إثبات قاطع: إفراغ TZ في جلسة (set "TZ=" / $env:TZ='') ثم تشغيل Telegram منها = الوقت صحيح.
- الحل الدائم المعتمد: تغيير قيمة TZ إلى POSIX:
[Environment]::SetEnvironmentVariable("TZ","GST-3","User")(GST-3 = UTC+3؛ إشارة POSIX معكوسة عمداً). الفتح العادي دبل-كليك صار صحيحاً. آمن لباقي الأدوات (GST-3 و Asia/Kuwait كلاهما +3 بلا DST). تراجع: نفس الأمر بقيمة "Asia/Kuwait". - مسار Telegram (portable): D:\Users\eng_w\AppData\Roaming\Telegram Desktop\Telegram.exe
- درس سلوكي (مهم — د. وائل غضب بشدة): (1) كرّرتُ الأسئلة وأعدتُ التخمين رغم أنه أكّد الحقائق (Desktop فقط، موبايل+ويندوز سليمان) = خرق "تحقّق، لا تفترض"؛ اقبل البيانات المؤكَّدة من المستخدم فوراً. (2) أسأتُ تفسير "خرب مرة ثانية" فظننتُ GST-3 فشل، بينما الذي خرّب = رجوعي لـ Asia/Kuwait (box 2) — فدخلتُ مسار VBS launcher غير ضروري. الدرس: لا تفترض حالة لم أتحقق منها؛ اسأل أي قيمة فعّالة الآن بدل الافتراض.
🚨 M-071 — Mass arsenal outage: container /tmp became 700 root after VPS reboot (2026-06-23 ~17:00→21:20)
- العَرَض: كل خدمات الترسانة الداخلية واقفة (RAG/n8n/syncthing/ollama/go؛ hub بقي شغّال) + النماذج المحلية فارغة + panel يظهرها down. الـ VPS أُعيد إقلاعه (~17:00، uptime 3:38).
- الجذر القاطع: عند الإقلاع أُعيد إنشاء
/tmpداخل حاوية openclaw بصلاحية 700 مملوك root (بدل 1777). node (uid 1000) فقد صلاحية الدخول (x) إلى /tmp → فشلexec 9>/tmp/openclaw-1000/keepalive.run.lock→flock: Bad fd→ daemons_keepalive يُسجّل خطأً «already running — skip» كل 5د ويتخطّى كل حرّاس الخدمات → الخدمات لا تُعاد ساعات. (نفس /tmp كسر ملفات ollama/RAG المؤقتة: "mkdir /tmp: Permission denied".) - الإصلاح (3 طبقات): (1) live
chmod 1777 /tmp+ إعادة تشغيل كل خدمة يدوياً وتحقق end-to-end (media/tv/music/audio/books/local/wiki/sync كلها 200/401). (2) نقل قفل keepalive من /tmp إلى/data/.openclaw/workspace/memory/.keepalive.run.lock(node يملكه دائماً) — تعديل M-071 في daemons_keepalive.sh السطر 28. (3) ضد التكرار: host-cron كل دقيقةdocker exec openclaw-4x4t-openclaw-1 chmod 1777 /tmp(مدموج مع crontab الـ host، يحافظ على proxy_ip_sync + openclaw_host_recovery). - الوصول للـ host:
ssh -i /data/.ssh/openclaw_host_ed25519 root@76.13.41.228ثمdocker exec [-u node] openclaw-4x4t-openclaw-1. الخدمات الداخلية تعمل داخل حاوية openclaw (172.16.1.3): RAG:8902 · n8n:5678 · syncthing:8384 · go:8904 · hub:8899 · ollama:11434 · push:8099. البروكسيات (-proxynginx، restart=unless-stopped) تعود تلقائياً؛ خدمات الـ host-process لا → هي ثغرة الإقلاع. - درس: 5th death-mode = container-/tmp-perms-reset-on-reboot (مختلف عن M-067 config-compat · M-032 process-death · M-048 incomplete-turn · M-068 proxy-IP-drift).
🎬 M-072 — Portal: أُضيفت كروت ترسانة الترفيه (2026-06-23)
- portal.html (
/docker/landing/site/portal.html، يُخدَم على drwaelalkishawi.com/portal.html؛ الجذر / = CV splash منفصل) — أُضيف لقسم 🎬 الترفيه: media(Jellyfin)/tv(Threadfin)/music(Navidrome)/audio(AudioBookshelf)/books(Kavita). local موجود مسبقاً. السكربت: scripts/portal_add_entertainment.py (backup+anchor-assert+verify). cf-cache=DYNAMIC (تغيير فوري). - ترفيه: P1+P2+P3 مكتملة 2026-06-23. P4 = التالي. العناوين الحية: media/tv/music/audio/books/hub/local.
✅ M-073/074/075 + إنجازات جلسة 06-23/24 (متابعة)
- M-073: قفل keepalive = PID-staleness بدل flock-fd (مناعة دائمة ضد fd-leak الذي عطّل الحارس مراراً M-062/M-071). scripts/daemons/daemons_keepalive.sh.
- M-074:
/docker/openclaw-4x4t/post_reboot_arsenal_recovery.sh+ host-cron كل دقيقة: يضمن /tmp=1777 + يكتشف boot جديد (boot_id) + يجبر دورة حارس + health-check + يُشعر د. وائل مرة/إقلاع. (استبدل سطر chmod M-071). - M-075:
scripts/maintenance/arsenal_health_digest.sh+ OpenClaw cron 51043fc9 (يومي 09:00 الكويت): نبضة صحة لكل 27 subdomain → Telegram. مُختبَر: 27/27 يعمل. - Jellyfin (media): المستخدم
wael/Ahmmad1977@— مؤكّد auth=200 (موحّد). - البورتال مكتمل: portal.html فيه 29 خدمة (أُضيف media/tv/music/audio/books + gateway + sync-db).
- بيانات الدخول الموحّدة (basic-auth): admin / Ahmmad1977@ (wiki/sync/files/tv/panel/grafana/render/المحميات). media-stack apps: audio=Audio-50d36a2f-Wael · music=Music-28e40647-Wael · books=Books-7dde8bc5-Wael. المصدر: /docker/_secrets/{auth_creds,media_stack_admin}.txt.
- FACTS_FROZEN.md: أُعيد root:root 0444 (كان node — خرق حوكمة، meta-guard كان يُنذر كل ساعة). meta_guard_test = 5/5 pass.
- GitHub upstream: تعليق live-repro نُشر على #94228 (issuecomment-4783345930) + watch cron 01bccfc0.
- معلّق (P4-ب feature builds، عمل مركّز قادم): تذكيرات EPG داخل الهاب · Jellyfin MCP · Family Filter (vision) · مساعد ترفيه صوتي عربي · محتوى حقيقي للمكتبات (قرار د. وائل: عائلي/عام + الدبلجة).
✅ M-076 — دبلجة احترافية + ميزات monitoring (جلسة 06-24 ~03:40)
- M-076 (دبلجة): projects/entertainment-hub/translate_dub.py — نقد 5 مستويات + تحسينات: تشكيل عربي (mishkal، الواجهة
-لا--stdin) قبل TTS ·_tts_minimaxfallback فعلي (speech-2.8-hd، voice Arabic_SteadyMan/CalmWoman) ·_fit_cliptime-fit بـ atempo (cap 1.5) · style 0.35. مُختبَر (tashkeel works) + منشور حيّ (hub restart عبر keepalive، 200، dub funcs live). - هاب restart الآمن: kill app.py بمطابقة cwd دقيقة ثم keepalive يعيده بالسر الصحيح (line 650: HUB_PORT=8899 HUB_SECRET=... python3 app.py).
- تصميم P4ب المتبقّي: projects/entertainment-hub/P4B_FEATURES_DESIGN.md (Family Filter خيار+PIN · EPG reminders · Jellyfin MCP · مساعد صوتي · 5 أفكار إبداعية) — للنقاش، بناء على دفعات مُختبَرة (لا نشر متهوّر على خدمة حيّة).
- قرارات د. وائل: الفلترة = خيار (عائلي/عام). الدبلجة تبقى وتُحسَّن (أُنجز).