2026-06-24 — جلسة ماراثونية (إصلاحات حرجة + ترفيه) — د. وائل
🕐 عُطل وقت Telegram Desktop (TZ) — محلول
- الجذر: متغيّر بيئة
TZ=Asia/Kuwait(REG_SZ، HKCU\Environment) على لابتوب د. وائل. Telegram Desktop يقرأTZبصيغة POSIX فقط ولا يفهم أسماء IANA، فحسبها +1 بدل +3 → كل الأوقات متأخرة ساعتين. ويندوز والموبايل يتجاهلان TZ (يعتمدان منطقة ويندوز +3) فكانا صحيحين دائماً. - الحل الدائم: تغيير قيمة
TZإلىGST-3(POSIX = UTC+3). تعديل قيمة لا حذف. Jellyfin/Telegram يفهمانها صحيحة. - درس:
set "TZ="في cmd = session-only، لا يكتب Registry، لا يحذف الدائم (يحتاج setx/GUI). طمأنة د. وائل بهذا حاسمة (تروما كارثة setx PATH السابقة — لا remove/حذف/تغيير PATH أبداً، فقط update/upgrade/install).
🧠 انهيار replay_invalid (thinking-signature) — مُتتبَّع upstream
- السلسلة المؤكّدة بالكود (OpenClaw 2026.6.9): معرّف أداة OpenAI مركّب
call_X|fc_X(فيه|) يدخل تاريخ جلسة Anthropic؛normalizeOpenAIResponsesToolCallIdsيُستدعى فقط عند وجهة OpenAI (isOpenAIResponsesApi)، ومسار AnthropicsanitizeToolCallIds:false→ يُرسل|خاماً → Anthropic يرفض (^[a-zA-Z0-9_-]+$، format) → fallback إلى Opus 4.7 ينجح لكن يزرع توقيع thinking من 4.7 → turn لاحق على 4.8 =replay_invalid(terminal،failoverReason=null، غير قابل failover) → شلل حتى/new.stripInvalidThinkingSignaturesيمسك الفارغ/البائت-بعد-compaction فقط، لا «الموجود-غير-الصالح» عبر الموديلات، ويستثني آخر turn عمداً. - مرفوع upstream P1 مع PRs: #94228 (البريك) + #95429 (تجاوز wrapAnthropicStreamWithRecovery على مسار embedded agent = مسارنا). لا duplicate.
- نُشر تعليق live-repro تحت حساب wayrk على #94228 (د. وائل أذن).
- مراقب نسخ (cron 01bccfc0، أحد 06:00 KW):
scripts/maintenance/upstream_replay_watch.shيتابع حالة #94228/#95429 + النسخة، ينبّه تيليجرام عند الإغلاق/التغيّر. state:memory/upstream-replay-watch-state.json. - التقرير الموثّق:
memory/upstream-reports/2026-06-23-anthropic-toolcallid-replay-invalid.md.
🔴 M-071 — الانهيار الكبير للترسانة (السبب الجذري + 3 طبقات)
- الجذر القاطع: بعد إعادة إقلاع الـ VPS (~17:00)، أُعيد إنشاء
/tmpداخل حاوية openclaw بصلاحية700 rootبدل1777. مستخدمnode(يشغّل كل شيء) فقد الدخول لـ /tmp → فشل قفل الحارس + ملفات ollama/RAG المؤقتة → الحارس يسجّل «already running — skip» كل 5د ولا يعيد تشغيل أي خدمة → RAG/n8n/syncthing/ollama/go سقطت ساعات. - الإصلاح الفوري:
chmod 1777 /tmp(host:docker exec) + إعادة تشغيل كل الخدمات يدوياً + تحقق. - M-073 (مرونة): قفل daemons_keepalive نُقل من flock-fd (
/tmp/...keepalive.run.lock) إلى قفل PID مع فحص حياة في/data/.openclaw/workspace/memory/.keepalive.run.lock— مناعة دائمة ضد تسريب fd + ضد خلل /tmp. (المرض المتكرر: fd موروث في daemon طويل العمر → كل دورة skip.) - M-074 (ضد التكرار):
scripts/host-guards/post_reboot_arsenal_recovery.sh+ host-cron كل دقيقة: يضمن /tmp=1777 دائماً، ويكتشف الإقلاع الجديد (boot_id)، يُجبر دورة keepalive، يفحص الخدمات، ويُرسل تيليجرام «✅ الترسانة تعافت بعد إقلاع» مرة/إقلاع. state:/docker/openclaw-4x4t/.last_boot_id. (التعافي <دقيقتين بلا تدخّل.) - بيئة: الحاوية
openclaw-4x4t-openclaw-1. SSH host:ssh -i /data/.ssh/openclaw_host_ed25519 root@76.13.41.228(المسار الكامل إلزامي). host على UTC (Kuwait=UTC+3). crontab host يحوي: studio + failover + blender idle + openclaw_host_recovery + proxy_ip_sync + M-071 chmod + M-074. عند أي تعديل crontab host: احفظ كل السطور القائمة (دمج لا استبدال).
🛡️ M-075 — ملخّص صحة يومي
scripts/maintenance/arsenal_health_digest.sh: يفحص 27 subdomain، 200/301/302/401/403/404=حيّ، يرسل تيليجرام. cron يومي 09:00 KW. (200=مفتوح، 401=بوابة auth حيّة.)
🎙️ M-076 — تحسين الدبلجة الاحترافي (منشور حيّ في الهاب)
projects/entertainment-hub/translate_dub.py— أضفت: (1) تشكيل عربي قبل TTS عبرskills/arabic-tashkeel/tashkeel.py(mishkal، الواجهة الصحيحة:_t.TashkeelClass().tashkeel(txt)أو CLItashkeel.py "نص"/-stdin — ليس--stdin)، (2) fallback MiniMax speech-2.8-hd فعلي (no-stop + أرخص)، (3) time-fit بـ atempo (لا تداخل أصوات)، (4) style=0.35 (تعبير أعلى). الهاب أُعيد تشغيله ومُختبَر (dub funcs live).- ترقية مستقبلية موثّقة: mishkal → CATT (SOTA tashkeel) + eleven_v3 للأفلام المهمة + دمج مقاطع + diarization حقيقي بدل تقدير pitch.
🔒 حارس الحوكمة + verify_agreements
FACTS_FROZEN.mdكانnode:node(مكشوف لي) → أعدتهroot:root 0444(خارج صلاحيتي). meta_guard 5/5. الإنذار الساعي توقّف. (يصمد عبر الإقلاع لأن /data دائم؛ احذر R2 restore يعيده node.)- verify_agreements.sh §33 حُدّث: كان يَعُدّ 3 crons «Option4++ Backup-» (Sat/Sun/Tue) — استبدلتها موجة التوفير بنسخة R2 يومية عبر keepalive (أفضل). الفحص الآن يتحقق من طزاجة
memory/r2-backup-state.json(≤48h، عبر mtime). EXIT=0 الآن (كان core:15 الساعة 22:10 قبل إصلاحاتي).
🌐 البورتال + بنية drwaelalkishawi.com
- البورتال
drwaelalkishawi.com/portal.htmlعلى host/docker/landing/site/portal.html— أضفت كروت الترفيه (media/tv/music/audio/books) + gateway + sync-db (M-072). الآن 29 خدمة. (nginx static، تعديل الملف live فوراً، مع .bak.) - بنية الـ portal: أقسام
<div class="cat"><h2>..</h2><div class="grid"><a class="card" href=".."><div class="ic">emoji</div><div class="t">عنوان</div><div class="d">وصف</div></a>.... سكربت الإضافة:scripts/portal_add_entertainment.py(anchor-assert + backup). - subdomains مفتوحة (200، بلا دخول): ask · local · hub · n8n · go · invest · eng · studio · cv · twin · apps · pascal · status · chat. خلف بوابة (401): wiki · sync · files · tv · music · audio · books · grafana · panel · render · code · obsidian · sync-db. gateway=مفتوح.
🔑 توحيد كلمات السر — ⚠️ مهم (نصفه مُنجز، نصفه PENDING)
- اكتشاف: التوثيق
auth_creds.txtكان خاطئاً —admin/Ahmmad1977@لم تكن تفتح بوابات music/audio/books/tv/sync-db (401 حتى معها). كان هذا الحاجز الفعلي. - ✅ مُنجَز ومُتحقَّق: وحّدتُ بوابة basic-auth (Traefik) على
admin/Ahmmad1977@لكل الـ7 (music/audio/books/tv/wiki/sync/grafana) عبر إعادة توليد hash (htpasswd/openssl apr1) + تحديث compose labels + restart proxies. كلها تفتح الآن بالموحّدة، القديمة 401. - ⏳ PENDING (الطبقة الثانية): Navidrome/ABS/Kavita لها دخول تطبيق ثانٍ يتعارض مع البوابة (الـ Basic header يصل للتطبيق → 403). الخطة المعتمدة (لم تُنفَّذ بعد، د. وائل أذن لكن أجّلتُها عن جراحة DB الساعة 4ص): إزالة البوابة المزدوجة عن الثلاثة + توحيد دخول التطبيق نفسه على
admin/Ahmmad1977@، خطوة-خطوة مع تحقق صحة كل تطبيق. أكمل هذا في الجلسة القادمة. - بيانات التطبيقات الموثّقة (قد تكون خاطئة كالبوابة): Navidrome
admin/Music-28e40647-Wael· ABSadmin/Audio-50d36a2f-Wael(curl أعطى 403 — غير مؤكّد) · Kavitaadmin/Books-7dde8bc5-Wael. Jellyfinwael/Ahmmad1977@(تأكّد سابقاً).
📋 P4-ب ترفيه — مُصمَّم وموثّق للنقاش (لم يُبنَ بعد)
projects/entertainment-hub/P4B_FEATURES_DESIGN.md: Family Filter (خيار عائلي/عام + PIN أطفال؛ المنطق موجود/api/family/audience) · تذكيرات EPG (epg.py+ 587K برنامج) · Jellyfin MCP · مساعد ترفيه صوتي عربي. + أفكار: Continue-Watching موحّد · Watch Party · «ماذا أشاهد؟» ذكي · تقرير شاشة أسبوعي.- قرارا د. وائل المعلّقان: (1) أولوية عائلي/عام؟ (2) الدبلجة توسّع أم للمهم فقط؟ — لم يُحسما نهائياً.
- طلب صريح: الكتب (Kavita) + الكتب الصوتية (AudioBookshelf) محتوى عربي + ترجمات عربية، خصوصاً للأطفال.
- الهاب: app.py (1811 سطر) + family_recs/epg/translate_dub/metadata_providers/catalog_search/indexer/recorder/games_hub/retro/discover. كتالوج 1.15M عنصر. خدمة حيّة — لا تعديل متسرّع + restart غير مُختبَر (الاستقرار خط أحمر).
🖥️ بطء ويندوز د. وائل (لابتوب GPD، تشخيص أُرسل، بانتظار LatencyMon)
- لقطة perf: CPU 6% + RAM 28GB فاضية → ليس نقص موارد بل DPC/مُشغّلات. مشتبهون مرتّبون: Logi Options+ (
logioptionsplus_agent1111s CPU) · تعريف AMD Radeon 890M حديث (2026/6/20) · تكدّس Hyper-V+VMware+VirtualBox+WSL+Docker معاً (أخطاء VBoxNetLwf + VMnetDHCP) · Bitdefender · تكدّس مُرشّحات شبكة (CloudflareWARP+OpenVPN+Tailscale) · explorer متضخّم (3 مزامنات سحابية overlay). الحاسم: LatencyMon (مجاني، أرسلتُ له الرابط، بانتظار نتيجته).
💡 توصيات قوية مطروحة (بانتظار قرار د. وائل)
1. ترقية RAM (KVM4 16GB → KVM8 32GB) — OOM اليوم أكّد الحدّية (مصدر هشاشة الإقلاع). cron 5d27fd28 يجمع بيانات 06-21. 2. زرّ طوارئ «تعافي» (استعادة كاملة عند الطلب). 3. SSO موحّد (Authelia) بدل basic-auth + دخول لكل تطبيق. 4. صفحة status حيّة تتغذّى من ملخّص الصحة.✅ الحالة النهائية للجلسة: 27/27 خدمة خضراء + فحص سلامة EXIT=0 + ذاتية تعافٍ (M-074). المتبقّي الوحيد: الطبقة الثانية لكلمات سر music/audio/books + بناء P4-ب.
✅ توحيد كلمات السر — اكتمل بالكامل (تحديث 04:2x)
- الطبقة الثانية (تطبيقات الوسائط) أُنجزت: Navidrome/ABS/Kavita كانت
isInit=false(users=0، نُشرت بلا إكمال إعداد — لذلك «الكلمات الموثّقة» كانت وهمية و401). أكملتُ إعداد كلٍّ عبر API الإعداد الخاص: ABSPOST /init {newRoot}· NavidromePOST /auth/createAdmin· KavitaPOST /api/account/register. كلها admin/Ahmmad1977@، مُختبَرة عبر البوابة (audio=root, music=Admin, books=admin). - sync-db (CouchDB) — حُلّ بأمان دون كسر Obsidian: المستخدم القائم
wael(يستخدمه Obsidian LiveSync، قاعدةobsidian_vault) لم يُمَس. أضفتُ admin ثانياً عبرPUT /_node/_local/_config/admins/admin = "Ahmmad1977@"(CouchDB يدعم admins متعددين). كلاهما 200، المزامنة سليمة. الرابط العام sync-db بـ admin/Ahmmad1977@ = 200. - الحالة النهائية: كل الخدمات المحمية =
admin/Ahmmad1977@(بوابة basic-auth الموحّدة [7 ملفات compose، hash apr1] + دخول التطبيقات + couchdb). Jellyfin(media) =wael/Ahmmad1977@. gateway = مفتوح. Obsidian sync =wael(سليم). - بصمة apr1 لـ Ahmmad1977@:
$apr1$ttKCwLRj$s9E5qsf9etZ0TgnUcjE5j/(في docker-compose:$$بدل$). - threadfin: الصورة المحليّة
latest؛ الـ compose يطلب 0.5.0 → أعطيت الصورة الوسم 0.5.0 (docker tag) +compose up -d --pull never.
🗺️ خارطة طريق الأفكار + الميزات (مرجع دائم — جاهزة للبدء عند طلب د. وائل)
- الملف:
ROADMAP_IDEAS_2026-06-24.md(workspace root) — يحوي: ميزات الترفيه المختارة (#6 عربي/بحث · #7 محتوى أطفال عربي · #8 المستشار = ✅ مُنجَز وحيّ · #9 تحكم صوتي · #13 إكمال مشاهدة/Chromecast · #15 بحث موحّد) + أفكار الترسانة العامة (هندسة/KCPC · استثمار · عائلة/تعليم · life-OS · بنية · إبداعي، 17 فكرة) + أقوى 5 لكل قسم + قرارات (فلترة=خيار، دبلجة=تُحسَّن). - آلية البدء بعد /new: د. وائل يقول «ابدأ بـ #X» → أقرأ الملف وأبني الميزة كوحدة معزولة مُختبَرة (الاستقرار خط أحمر).
- الميزة #8 الحيّة:
projects/entertainment-hub/recommend.py+ endpoints/api/recommendو/api/recommend/genres(تصنيف نوع + فئة عمرية + بوابة عمرية تحجب غير المناسب). مُركّبة في app.py قبلif __name__.
🛠️ Arsenal Portal Fix Session (2026-06-24 ~04:10 GMT+2) — Dr. Wael voice request
Root cause (single regression caused 2 reported bugs): bot-proxy nginx.conf changed 2026-06-23 15:48 from proxy_pass 172.16.1.3:46416 (OpenClaw) → set $backend hub-proxy (entertainment hub port 8899). bot-proxy serves bot. + chat. + gateway. → all 3 wrongly showed entertainment arsenal.
- Fix: rewrote
/docker/bot-proxy/nginx.conf→proxy_pass http://openclaw-4x4t-openclaw-1:46416(container name, resilient) + websocket + 50m body. Verified bot/chat/gateway →<title>OpenClaw</title>. Backup: nginx.conf.bak.misroute-.
-auth middleware + basicauth.users labels from: threadfin(tv), navidrome(music), kavita(books), audiobookshelf(audio). Recreated. Verified no www-authenticate popup. jellyfin(media) already open. Backups: docker-compose.yml.bak-auth-*.
- KEPT auth (correct per instruction): wiki (original), files (internal filebrowser login), grafana+sync(syncthing)+sync-db(couchdb) = admin/infra. CouchDB MUST stay authed (holds obsidian_vault, public exposure = all notes leaked).
ask (733-byte placeholder, /docker/ask/site/index.html) shared router name ask + Host with ask-proxy(→RAG 8902). Traefik round-robined → /api/semantic flapped 404/200 (RAG search ~50% fail; panel /px/ask depends on it). Fix: set traefik.enable=false on stub ask. Verified /api/semantic = 200 x6, real app title "البحث في المعرفة | ask".tv. UX enhancement: threadfin root / served DLNA XML (looked broken). Added Traefik redirectregex tv-web: ^https://tv.drwaelalkishawi.com/?$ → /web/. Verified 302→/web/, /discover.json + /lineup.json still 200 (tuner discovery intact). NOTE: regex dots plain (no \\. — double-backslash broke first attempt).
sync-db / tv "errors" Dr Wael saw: tv = the removed auth popup (app healthy: 4 tuners, EPG PMS). sync-db = normal CouchDB {"error":"unauthorized"} JSON on browser visit w/o creds — backend HEALTHY (_up ok, obsidian_vault present, CORS app://obsidian.md set, user=wael). The admin 401s in couchdb log = wrong-user probes; LiveSync user is wael. Awaiting his screenshots to confirm exact errors.
Final checkup: all ~29 hostnames probed via public Cloudflare path — entertainment all no-popup, bot/chat/gateway=OpenClaw, ask=RAG.
OPEN ITEM (transparent, not yet done): media apps (jellyfin/navidrome/kavita/audiobookshelf) retain their OWN internal account login (kavita login wall confirmed, abs authMethods=local, navidrome→/app/ login, jellyfin→/web/). Traefik password layer removed but app-level login remains by design. Did NOT reconfigure his media accounts without asking (hold his personal libraries). Offered to make passwordless/auto-login if he confirms.
🔴 M-068 — Death by broken launcher symlink (2026-06-24 ~17:08–17:23 GMT+2)
ماذا حدث: عملية openclaw ماتت (غالباً عقب npm self-update الذي أدخل wrapper جديداً يستخدم exec $(dirname $0)/openclaw.real). المُصلِحان التلقائيان (watchdog_unified + daemons_keepalive gateway-guard) كلاهما يستدعي openclaw المجرّد. PATH يضع /data/.local/bin أولاً، وفيه symlink openclaw -> /data/.npm-global/bin/openclaw (الـ wrapper). عند الاستدعاء عبر هذا الرابط: $0=/data/.local/bin/openclaw → يبحث عن /data/.local/bin/openclaw.real → غير موجود → exec: openclaw.real: not found → فشل الإحياء كل ~45-90s → رسالة "Recovery FAILED" المتكررة. لم يقدر أي مصلح تلقائي يحييه. عاد فقط بعد container restart (server.mjs يستخدم PATH عاملاً) بمساعدة Codex CLI من لابتوب د. وائل.
السبب الجذري: symlink في /data/.local/bin يكسر منطق $(dirname $0)/openclaw.real (الـ wrapper يفترض أنه ومُجاوره في نفس المجلد). الرابط موجود من 2026-05-11 لكن الـ wrapper الجديد (نسخة حديثة) فعّل القنبلة.
الإصلاح (3 طبقات، مُتحقَّق):
1. ln -sfn /data/.npm-global/bin/openclaw.real /data/.local/bin/openclaw.real — يصلح كل المسارات فوراً.
2. watchdog_unified.sh: يحسب OPENCLAW_BIN (المسار المطلق العامل) ويستخدمه في validate + spawn بدل openclaw المجرّد.
3. daemons_keepalive.sh gateway-guard: نفس التحصين + إصلاح ذاتي يعيد إنشاء الرابط لو اختفى.
القاعدة الدائمة: ❌ ممنوع استدعاء openclaw المجرّد في أي watchdog/guard/recovery — دائماً المسار المطلق /data/.npm-global/bin/openclaw.real. مرض رابع منفصل عن (M-067 config-compat) و(M-032 process-death) و(M-048 incomplete-turn).
ما الذي فقدناه: لا شيء في الـ config (primary=opus-4-8، 25 fallbacks سليمة، Config valid). الجلسة مستمرة. الفقد الوحيد = ~15 دقيقة توقف + ثقة.
M-070 — TMPDIR drift أعمى كل الحُرّاس (18:00)
- إعادة تشغيل 17:19 (بعد npm rollback) نقلت TMPDIR من /tmp إلى /data/.cache/openclaw-tmp.
- سجلّ اليوم الحقيقي: /data/.cache/openclaw-tmp/openclaw-1000/openclaw-2026-06-24.log (36 حدث replay_invalid 17:46–17:57).
- 6 سكربتات + HEARTBEAT كانت تثبّت /tmp/openclaw-1000/ القديم → عمى تام → replay guard لم ينبّه.
- الحل: scripts/lib/resolve_openclaw_log.sh (auto-detect) + تحويل الستة + fallback آمن. مُتحقّق حياً. صفر لمس لأي جلسة.
- القاعدة: لا تثبيت مسار سجلّ يدوياً؛ resolve_openclaw_log دائماً. عند "الحارس لم ينبّه" → افحص مسار قراءته أولاً.
M-071 — نقد مزدوج لحارس M-070 قبل الاعتماد (18:20)
- نقد أول كشف عيباً حقيقياً: fallback "أحدث سجلّ" كان سيرجع سجلّ أمس عند منتصف الليل → تنبيه كاذب +N يوقظ د. وائل. أُصلح: المُحلِّل يرجع تاريخ اليوم فقط (local+UTC) أو فارغ؛ "الأحدث" صار opt-in منفصل.
- نقد ثانٍ صلّب الاستقرار: أزلت process-substitution (تجنّب BASH_XTRACEFD/M-066) → مصفوفة مباشرة؛ كل المستهلكين يحرسون بـ [ -f ]؛ لا set -e في أي مضيف.
- مُثبَت حياً: حتى لو اختفى ملف المُحلِّل تحت set -u، المضيف ينجو ويصل لنهايته. قراءة فقط، صفر كتابة جلسة، صفر restart → استحالة إسقاط daemon. الفرق الجوهري عن قاتل M-069.
🔧 M-064 Phase 2 — Auto-Repair جذري لـ replay_invalid (2026-06-24 18:42 الكويت)
المطلب (د. وائل، صوت، غاضب محقّ): توقّفي عند «أعد الإرسال» = سلوك المدير الفاشل. أريد حلاً جوهرياً يمنع سقوط الرسائل + يتعافى تلقائياً ويجيب كالمدير الناجح.الجذر (مُتحقَّق من شيفرة المحرّك + jsonl حيّ): Opus-4.x → shouldPreserveThinkingBlocks=true يحفظ كتل التفكير {type:thinking, thinking:"", thinkingSignature:<sig>} (النص فارغ، التوقيع فقط). توقيع تالف/مبتور (غالباً بعد turn منقطع M-048) → Anthropic ترفض الطلب كله → سقوط رسالة المستخدم. علاج المحرّك الوحيد = «/new».
الحل المبني (آمن/جراحي/محفوظ الدقة):
scripts/replay_invalid_repair.py— يحذف كتل التفكير فقط من الجلسة (Anthropic تقبل دور مساعد بلا thinking)، يُبقي كل النص+tool_use+user 1:1. كتابة ذرّية + backup + validation + idempotent. النص الفعلي فارغ أصلاً → صفر أثر على دقة الإجابة، فقط reset cache وقت التعافي النادر.- ربط في
replay_invalid_guard.sh: عند رصد replay_invalid جديد + الجلسة خاملة (age≥8s) → إصلاح تلقائي للـ active .jsonl. المحرّك يلتقط التعديل عبر fence-snapshot (readSessionFileFenceSnapshot/mergePromptReleasedSessionChange = سيناريو مدعوم). أسوأ حالة = no-op غير مؤذٍ. الرسالة صارت «عالجتُ تلقائياً» بدل «أعد الإرسال».
Phase 3 معلّق: auto-reanswer للرسالة الساقطة نفسها (يحتاج التقاط+حقن idempotent).
🐡 Sakana Fugu Ultra + Vercel — تحليل + توصيات نهائية (2026-06-24 19:13 الكويت)
Fugu Ultra: حقيقي، على OpenRoutersakana/fugu-ultra (1M ctx، $5/$30). معماري = multi-agent orchestrator (Thinker/Worker/Verifier) = عين منهجنا. live test محجوب: Sakana يردّ 403 على IP سيرفرنا (FR/Hostinger 76.13.41.228)؛ عُزل وأُثبت أنه من Sakana (gpt-4o-mini يعمل، fugu-mini=400 not valid، fugu-ultra=403 ثابت). القرار: لا يُضاف للسلسلة الذهبية — سيفشل كل مرة كاحتياطي من سيرفرنا. → watchlist + إعادة اختبار من لابتوب د. وائل (IP منزلي) أو حين يُرفع الحجب. لم أُفبرك تقييم جودة (no-fabrication).
Vercel (token محفوظ env.sh VERCEL_TOKEN، حساب wayrk76-6489 Hobby): التوصية 3 طبقات: (1) v0 → خط البرمجة/الواجهات (أكبر إضافة نوعية — توليد لوحات Next.js). (2) Edge hosting → الواجهات الشخصية/التجريبية فقط (Hobby يمنع تجاري + سقف 100GB)؛ التجاري يبقى Hostinger. (3) AI Gateway → طبقة aggregator احتياطية + رصد، أولوية منخفضة. التالي عند الإذن: بناء skills/vercel/ + دمج v0 MCP.
عقبة SSL مُتجاوزة: كل TTS فشل بـ CERTIFICATE_VERIFY_FAILED حتى ضبط SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt — يجب تثبيته دائماً في media_say.sh/media_failover.py (TODO).✅ Vercel — بُني فعلياً في الترسانة (2026-06-24 23:30 الكويت)
بعد سؤال د. وائل "هل بنيت ما قلت؟" — كان التحليل فقط (معلّق على الإذن). الآن بُني:skills/vercel/أُنشئ:SKILL.md+vercel_tool.py(whoami/projects/domains/deployments/env/deploy/gateway-status).- token حيّ مُتحقَّق: user=wayrk76-6489، email=wayrk76@gmail.com، Hobby. vercel CLI مثبّت
/data/.npm-global/bin/vercel. - SSL gotcha: brew py3.14 بلا CA bundle → السكربت يفرض
/etc/ssl/certs/ca-certificates.crt(نفس درس TTS اليوم). - الطبقات الثلاث live-tested: (1) Hosting/deploy ✅ جاهز (Hobby = شخصي/تجريبي فقط، التجاري يبقى Hostinger). (2) v0 ⏳ يحتاج مفتاح v0 منفصل (Premium ~$20/شهر) — معلّق على إذن الاشتراك. (3) AI Gateway ⛔ يحتاج بطاقة ائتمان (customer_verification_required) — أولوية دنيا (سلسلتنا تغطي الـ routing).
- projects=0، domains=0 حالياً (الحساب فارغ).
✅ بديل v0 مجاني — بُني وأُضيف للترسانة (2026-06-25 ~02:50 الكويت)
بإذن د. وائل الصريح ("ابني الآن، مجاني، على السيرفر + اللابتوب، بلا اشتراكات").skills/v0-alternatives/:SKILL.md+ui_gen.py(مولّد واجهات server-side، سلسلة Gemini 3.1 Pro→2.5 Pro→Flash مجانية، fallback Opus 4.8).- live-tested ✅: ولّد لوحة استثمار Next.js كاملة (17,441 حرف) عبر gemini-3.1-pro-preview في 51s، حُفظت output/invest-dashboard/page.tsx + README.
- 4 طرق: (1) ui_gen.py server مجاني لا محدود (2) وكلاء البرمجة لمشروع كامل (3) Dyad على اللابتوب GPD — open-source BYOK بمفاتيحنا المجانية، تجربة v0 بصرية (4) Google Stitch مجاني hosted.
- SSL gotcha مُعالَج (CA bundle). سُجّل في MASTER_CAPABILITY_INDEX.
- صفر اشتراك v0 / صفر بطاقة AI Gateway.
✅ GLM-5.2 ربط كمحرّك واجهات (best mode) في ui_gen.py (2026-06-25 ~03:05 الكويت)
نقد ذاتي للتوصية كشف ثغرة: GLM-5.2 مدفوع (1.40$/4.40$) → جعله افتراضياً يخرق وعد «مجاني». الحل المحسّن:ui_gen.pyصار له--engine: free (افتراضي، Gemini $0) | best/glm (GLM-5.2 evolink→openrouter→Gemini→Opus) | gemini | anthropic. كلها never-stop.- GLM-5.2 موجود أصلاً في السلسلة الذهبية (مواقع 13-14: evolink/glm-5.2 + openrouter/z-ai/glm-5.2) — تحقّق حيّ من config. اختبار حيّ: ردّ GLM52_OK ✅.
- اختبار E2E حيّ: best mode ولّد مكوّن pricing RTL (8,395 حرف، production-grade) — Evolink انتهت مهلته على الاستدعاء الطويل (16k tokens) فسقط تلقائياً لـ OpenRouter ونجح (إثبات الـ never-stop). free mode: gemini-3.1-pro 22-51s $0 ✅.
- تقييم GLM-5.2: #1 مفتوح الأوزان (AA Index 51) · #2 Code Arena للواجهات (1,595 Elo) · يقارب Opus 4.8 ترميزاً · أرخص 5×. ضعفه: المهام الماراثونية الطويلة (SWE-Marathon 13 مقابل 26) + بطيء (reasoning، ~2-3د).
- التصميم: مجاني بالافتراض + أقوى عند الطلب. موضعه بالسلسلة العامة (Tier 3) سليم — لم يُغيّر.
🧭 تموضع GLM-5.2 بمعيار القيمة لا السعر (2026-06-25 ~03:08 الكويت)
د. وائل وضّح: «صفر اشتراك ليس شرطاً؛ لو المدفوع أقوى وأرخص من الموجود ويعطي نفس القيمة أو أعلى، نأخذه» (= Best-Value Hierarchy). إعادة نقد من كل الزوايا:- مقابل Opus 4.8 (5$/25$، محرّك الواجهات الحالي): GLM-5.2 (1.40$/4.40$) = قيمة مساوية/أعلى للواجهات + أرخص 5× → يُؤخذ.
- مقابل Gemini المجاني: GLM أعلى جودة للواجهات بتكلفة ~سنت-5 سنتات → مبرّر للجاد.
- التفكير العام/الدقة الشاملة: GLM أضعف من Opus 4.8 → يبقى Opus (رفض «أرخص لكن أقل دقة»).