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

📁 00-الترسانة
00-الفهرس
📁 00-الترسانة/الذاكرة-اليومية
2026-04-022026-04-172026-04-22-cost-optimization2026-04-22-oauth-setup2026-04-222026-04-23-skywork-apikey2026-04-24-deepseek-v42026-04-24-event-logs2026-04-24-valve-types2026-04-25-animate-scenes2026-04-25-crypto-replacement2026-04-25-jihan-video2026-04-25-windows-tuneup2026-04-252026-04-26-server-upgrade2026-04-26-windows-tuneup2026-04-27-crypto-report2026-04-27-salary-raise-request2026-04-27-turkey-investment2026-04-28-02342026-04-28-02442026-04-28-final-upgrade2026-04-28-morning-greeting2026-04-28-oauth-credentials2026-04-28-slow-replies2026-04-30-bitcoin-turkey-outlook2026-04-30-deepseek-setup2026-04-30-kiloclaw-backup2026-05-01-camoufox-removal2026-05-01-green-square2026-05-01-identity-reset2026-05-01-name-mixup2026-05-01-new-session2026-05-01-print-spooler2026-05-01-triangle-puzzle2026-05-02-event-analysis2026-05-02-halal-check2026-05-02-laplace-inverse2026-05-02-radius-puzzle2026-05-02-rainforest-alliance2026-05-02-skywork-integration2026-05-02-wsa-shutdown2026-05-02-wsa-update2026-05-03-tashbeeh-lesson2026-05-03-wsa-crash2026-05-032026-05-04-idle-timeout2026-05-04-wsa-diagnostics2026-05-042026-05-06-capabilities-review2026-05-06-storage-cleanup2026-05-06-wsa-fix2026-05-062026-05-072026-05-09-mega-session2026-05-092026-05-102026-05-112026-05-122026-05-132026-05-142026-05-152026-05-162026-05-172026-05-182026-05-192026-05-202026-05-212026-05-222026-05-232026-05-242026-05-252026-05-262026-05-272026-05-312026-06-012026-06-022026-06-032026-06-042026-06-052026-06-062026-06-072026-06-08-obsidian-syncthing-setup2026-06-082026-06-092026-06-102026-06-11-mcp-tools-fix2026-06-112026-06-122026-06-132026-06-142026-06-152026-06-162026-06-172026-06-182026-06-19-telegram-copy-fix2026-06-19-uncensored-models-study2026-06-202026-06-212026-06-222026-06-232026-06-242026-06-252026-06-262026-06-272026-06-282026-06-292026-06-302026-07-012026-07-022026-07-032026-07-042026-07-052026-07-062026-07-072026-07-082026-07-092026-07-102026-07-112026-07-122026-07-132026-07-142026-07-152026-07-162026-07-172026-07-182026-07-192026-07-202026-07-212026-07-222026-07-23-local-image-vpn-fix2026-07-232026-07-25_MEMORY-curated
📁 00-الترسانة/القواعد-الذهبية
DECISION_MATRIXECONOMIC_ARSENAL_MATRIXENGINEERING_ARSENAL_MATRIXENGINEERING_DISCIPLINES_MATRIXGOLDEN_PROMPTLEGAL_ARSENAL_MATRIXMEDICAL_ARSENAL_MATRIXSCIENCE_GRAPHICAL_AUDIO_MATRIX
📁 00-الترسانة/المرجعية
AGENTSAGREEMENTSCAPABILITIESDECISION_MATRIXDOMAIN_MODEL_RANKINGSGOLDEN_RULESGOLDEN_RULES_COREIDENTITYMEMORYMISTAKES_LEDGERMISTAKES_PATTERNSMODEL_REGISTRYSOULSTRATEGIESTOOLSUSER
📁 00-الترسانة/المهارات
1password3d-arsenal3d-generationacademic-researchacademic-shieldaccounting-advancedaccuracy-gateai-investment-analyzerai-web-automationalphafoldarabic-tashkeelaudd-recognizeautograderblogwatcherbridge-tunnel-enginebriefingcartesiacitation-validatorcivil-design-routercivil-methodology-enginecivil-networksclaims-engineeringcode-refactorercognee-memorycomputer-use-pluscomputer-useconstruction-assistantconstructioncontract-reviewcourse-pipelinecourtlistener-researchcrypto-marketcurriculum-ragcybersecurity-edudata-charts-visualizationdesign-to-bimdocument-ocr-arsenaleconomic-arsenaleconomic-calendar-fetcherelite-councilengineering-codesengineering-design-stackengineering-legal-economicengineering-ocr-blueprintsengineering-pack-2026-06-21entertainment-arsenalevolinkexif-geolocationfable-orchestratorfirecrawlforecasting-techniquesforesight-enginefree-llm-resourcesfrontier-videogemini-embedding-2gemini-live-translategenius-loopgenspark-agentgeospatial-arsenalgh-issuesgifgrepgithubgoggraph-memoryhive-vlmhyperframesidentity-charterin-depth-researchinvestment-analystkuwait-datalangfuselecture-builderlegal-advisorlegal-draftinglegal-encyclopedialegal-ragliberation-routerlive-translatormanus-agentmanusmarket-newsmath-foundationmathpix-ocrmcportermedia-editing-arsenalmedical-arsenalmedical-triagemicrosoft365minimax-music-2-6multi-discipline-engineeringmulti-model-consensusnotebooklm-researchocr-advancedollama-localonedriveopenai-realtime-translateopenclaw-memory-hygienep6-ai-plannerpaperclippascal-editorpdf-summarizerpika-videoplanet-satelliteportfolio-watcherproject-lifecycle-enginequantity-takeoff-enginequantum-computingrag-knowledge-basereal-estate-skillrealtime-voicereviewer-agentscience-arsenalself-improving-agentsentinel-hubsession-logsskywork-agentsmart-code-routersonjj-apistealth-browserstocks-enhancedstocksstructural-advancedsuno-musicsynergy-war-roomtavily-searchtext-humanizertmuxtradingview-webhookstranslateturkey-real-estatetwilioutility-identityv0-alternativesvapivercelvideo-framesvideo-gps-trackerweb-scraperweb-searchwhisperxwolfram-alphaxurl
📁 04-AI-Coding
Graphify-Code-MapsGraphify-MCP-Laptop-Setup
📁 graphify-graphs/arsenal-scripts
GRAPH_REPORT
📁 graphify-graphs/arsenal-scripts/obsidian
(M-038L5 fix 2026-06-01) R2 keys are MIXED some stored under 'kiloclaw' (ARSENAL_SRCAntigravity Managed Agent (Linux sandbox auto-provisioned). SYNC only (backgAttributed Question Answering (with citations).Calculate MD5 hash of file.Capability failures seen = min_count - candidate for a hardening skill.Check if path should be skipped.Computer Use (UI automation reasoning).Count replay_invalid events whose log line timestamp is within WINDOW_S.Create and upload a workspace backup tarball.Create authenticated R2 client.Deep Research agent via Interactions API. Variants - preview →Download a file from R2.ENG_SECTIONEPOCHSEmbodied Reasoning for robotics tasks.Empire vs Markowitz fundsExtract each ranked domain heading + its last-updated date + staleness.FLUTTER_HOMEForce-heal ONLY a genuinely-abandoned session (stale lock = engine dead). MGemini 2.5 Flash — رخيص. فشل = None (لا انهيار).Generate a presigned download URL (default 7 days = 604800s).HEAD a single object print 'OK size_bytes last_modified' or 'MISSING'.HOMEImage generation. Supported models - imagen-4.0-fast-generate-001 (JAVA_HOMEL1_healthchecks_ping.sh scriptL1_healthchecks_ping.shL1_pinger_daemon.pyL4_integrity_check.sh scriptL4_integrity_check.shL5_backup_verify.sh scriptL5_backup_verify.shL6_canary_check.sh scriptL6_canary_check.shL7_version_watchdog.sh scriptL7_version_watchdog.shLD_LIBRARY_PATHList objects in bucket.Most-recently-modified .jsonl that currently holds a .lock = the live session.Most-recently-modified locked .jsonl = the livestuck session.Music generation via generateContent (NOT predict). Models - lyria-3-NOTE happyhorse.py takes --image-url (URL) + --prompt, prints JSON with videoNPM_TOOLSOpen capability requests = explicit skill-gap signals.PATHPATH_1PATH_2PATH_4PATH_5Path_3Path_7Poll a background Interactions API job (e.g. Deep Research).Poll a long-running operation (Veo) until done.Re-inject the dropped user message into main via a one-shot cron systemEvent.Remove backups older than N days.Remove signature fields from one thinking block. Returns (block, changed).Return the most recent human user message text from the session.SECTIONSSL_CERT_DIRSSL_CERT_FILESSL_CERT_FILE_1SSL_CERT_FILE_2Smart Gemini call with KW→US fallback. Returns {ok bool, region_usedSource env.sh and grab the key.TG_CODETG_TITLETS()_3TUNNEL_TOKENTZText embeddings. Models - gemini-embedding-001 (stable, 3072-Text generation via new Interactions API (recommended for new code).Text-to-speech via generateContent. Models - gemini-2.5-flash-previewTextchat generation via generateContent.USDTRY rate from TCMB (Turkish Central Bank)Upload a single file to R2.Video generation (long-running operation). Returns operation name — poll witWeighted portfolio return + USD-adjusted_COMMUNITY_Community 0_COMMUNITY_Community 1_COMMUNITY_Community 10_COMMUNITY_Community 100_COMMUNITY_Community 101_COMMUNITY_Community 102_COMMUNITY_Community 103_COMMUNITY_Community 104_COMMUNITY_Community 105_COMMUNITY_Community 106_COMMUNITY_Community 107_COMMUNITY_Community 108_COMMUNITY_Community 109_COMMUNITY_Community 11_COMMUNITY_Community 110_COMMUNITY_Community 111_COMMUNITY_Community 112_COMMUNITY_Community 113_COMMUNITY_Community 114_COMMUNITY_Community 115_COMMUNITY_Community 116_COMMUNITY_Community 117_COMMUNITY_Community 118_COMMUNITY_Community 119_COMMUNITY_Community 12_COMMUNITY_Community 120_COMMUNITY_Community 121_COMMUNITY_Community 122_COMMUNITY_Community 123_COMMUNITY_Community 124_COMMUNITY_Community 125_COMMUNITY_Community 126_COMMUNITY_Community 127_COMMUNITY_Community 128_COMMUNITY_Community 129_COMMUNITY_Community 13_COMMUNITY_Community 130_COMMUNITY_Community 131_COMMUNITY_Community 132_COMMUNITY_Community 133_COMMUNITY_Community 134_COMMUNITY_Community 135_COMMUNITY_Community 136_COMMUNITY_Community 137_COMMUNITY_Community 138_COMMUNITY_Community 139_COMMUNITY_Community 14_COMMUNITY_Community 140_COMMUNITY_Community 141_COMMUNITY_Community 142_COMMUNITY_Community 143_COMMUNITY_Community 144_COMMUNITY_Community 145_COMMUNITY_Community 146_COMMUNITY_Community 147_COMMUNITY_Community 148_COMMUNITY_Community 149_COMMUNITY_Community 15_COMMUNITY_Community 150_COMMUNITY_Community 151_COMMUNITY_Community 152_COMMUNITY_Community 153_COMMUNITY_Community 154_COMMUNITY_Community 155_COMMUNITY_Community 16_COMMUNITY_Community 17_COMMUNITY_Community 18_COMMUNITY_Community 19_COMMUNITY_Community 2_COMMUNITY_Community 20_COMMUNITY_Community 21_COMMUNITY_Community 22_COMMUNITY_Community 23_COMMUNITY_Community 24_COMMUNITY_Community 25_COMMUNITY_Community 26_COMMUNITY_Community 27_COMMUNITY_Community 28_COMMUNITY_Community 29_COMMUNITY_Community 3_COMMUNITY_Community 30_COMMUNITY_Community 31_COMMUNITY_Community 32_COMMUNITY_Community 33_COMMUNITY_Community 34_COMMUNITY_Community 35_COMMUNITY_Community 36_COMMUNITY_Community 37_COMMUNITY_Community 38_COMMUNITY_Community 39_COMMUNITY_Community 4_COMMUNITY_Community 40_COMMUNITY_Community 41_COMMUNITY_Community 42_COMMUNITY_Community 43_COMMUNITY_Community 44_COMMUNITY_Community 45_COMMUNITY_Community 46_COMMUNITY_Community 47_COMMUNITY_Community 48_COMMUNITY_Community 49_COMMUNITY_Community 5_COMMUNITY_Community 50_COMMUNITY_Community 51_COMMUNITY_Community 52_COMMUNITY_Community 53_COMMUNITY_Community 54_COMMUNITY_Community 55_COMMUNITY_Community 56_COMMUNITY_Community 57_COMMUNITY_Community 58_COMMUNITY_Community 59_COMMUNITY_Community 6_COMMUNITY_Community 60_COMMUNITY_Community 61_COMMUNITY_Community 62_COMMUNITY_Community 63_COMMUNITY_Community 64_COMMUNITY_Community 65_COMMUNITY_Community 66_COMMUNITY_Community 67_COMMUNITY_Community 68_COMMUNITY_Community 69_COMMUNITY_Community 7_COMMUNITY_Community 70_COMMUNITY_Community 71_COMMUNITY_Community 72_COMMUNITY_Community 73_COMMUNITY_Community 74_COMMUNITY_Community 75_COMMUNITY_Community 76_COMMUNITY_Community 77_COMMUNITY_Community 78_COMMUNITY_Community 79_COMMUNITY_Community 8_COMMUNITY_Community 80_COMMUNITY_Community 81_COMMUNITY_Community 82_COMMUNITY_Community 83_COMMUNITY_Community 84_COMMUNITY_Community 85_COMMUNITY_Community 86_COMMUNITY_Community 87_COMMUNITY_Community 88_COMMUNITY_Community 89_COMMUNITY_Community 9_COMMUNITY_Community 90_COMMUNITY_Community 91_COMMUNITY_Community 92_COMMUNITY_Community 93_COMMUNITY_Community 94_COMMUNITY_Community 95_COMMUNITY_Community 96_COMMUNITY_Community 97_COMMUNITY_Community 98_COMMUNITY_Community 99_debounce_ok()_deliver()_dl()_http()_http()_1_is_us_primary()_key()_pcm_to_mp3()_point_line()_points()_request()_resolve_existing_key()_resolve_id()_run()_run_healer()_today()academic_model_gate.sh scriptacademic_model_gate.shacademic_path_healthcheck.sh scriptacademic_path_healthcheck.shacademic_purity_guard.sh scriptacademic_purity_guard.shacademic_shield.pyactive_locked_session()active_session()adjudicate()alert()alert()_1alert()_2analyze()analyze_portfolio()anthropic_spend_monitor.pyanthropic_spend_week()antigravity_agent()api_health_audit.sh scriptapi_health_audit.shaqa()ar()arrow()arsenal_drift_check.sh scriptarsenal_drift_check.sharsenal_health_check.sh scriptarsenal_health_check.sharsenal_health_digest.sh scriptarsenal_health_digest.shask()ask()_1ask_anthropic()ask_google()ask_openai()ask_xai()auto_regenerate()auto_rollback_check.sh scriptauto_rollback_check.shautorecover_daemon.sh scriptautorecover_daemon.shbackup_host_configs.sh scriptbackup_host_configs.shbanner_truth_guard.sh scriptbanner_truth_guard.shbench()build()build_recovery_point.sh scriptbuild_recovery_point.shbuild_report()c_g()c_r()c_y()call_anthropic()call_gemini()call_gemini()_1call_openai()capability_router.sh scriptcapability_router.shcaption()chat()check()check()_1check()_2check_cli()check_eq()check_exists()check_ge()check_hash()check_incomplete_turns()chg()chk()chk()_1chk_http()chk_retry()chunk_text()chunk_text()_1classify()classify()_1clean_nexos()cleanup()cloudflare_activation_watch.sh scriptcloudflare_activation_watch.shcmd_backup()cmd_browse()cmd_cleanup()cmd_crawl()cmd_download()cmd_head()cmd_list()cmd_list()_1cmd_list()_2cmd_map()cmd_now()cmd_presign()cmd_prune()cmd_read()cmd_restore()cmd_scrape()cmd_search()cmd_send()cmd_show()cmd_status()cmd_status()_1cmd_upload()coding_toolchain_env.sh scriptcoding_toolchain_env.shcollect_error_patterns()compare_property_vs_investment()compute()computer_use()concat_mp3()config_valid()context_cap_guard.sh scriptcontext_cap_guard.shcontinuity_checkpoint.pycouncil scriptcouncilcouncil_health_guard.sh scriptcouncil_health_guard.shcpu_hog_guard.sh scriptcpu_hog_guard.shcron_session_cleanup.pycurrent()current_interval()daemons_keepalive.sh scriptdaemons_keepalive.shdecide()deep_research()digest()dns_propagation_watch.sh scriptdns_propagation_watch.shdo_restart()dolphin_liberation_test.pydolphin_venice_liberation_test.pydraw n small ticks perpendicular to segment ab at its midpoint.draw_rect()draw_semi()dump_context()elite_council.pyembed_text()emergency_recover.sh scriptemergency_recover.shensure()ensure_state()ensure_state()_1env()env()_1eqn()errors_summary()esc()evtx_analyze.pyevtx_dump.pyexisting_skills()extract()fable_orchestrator_guard.sh scriptfable_orchestrator_guard.shfallback_health_check.sh scriptfallback_health_check.shfile_md5()find_auth()fmt()free_gateway_port()fsfugu_availability_watch.sh scriptfugu_availability_watch.shfull_recovery_snapshot.sh scriptfull_recovery_snapshot.shfull_server_backup.sh scriptfull_server_backup.shfull_server_secure_backup.sh scriptfull_server_secure_backup.shfull_server_snapshot.sh scriptfull_server_snapshot.shgateway_alive()gateway_error_guard.sh scriptgateway_error_guard.shgateway_stable_pid()gateway_truly_hung()gemini_call()gemini_pcm()gemini_with_fallback.pygen_with_engine()generate_capabilities_index.sh scriptgenerate_capabilities_index.shgenerate_image()generate_music()generate_speech()generate_text()generate_text_interactions()generate_video()get()get_bucket()get_client()get_content()get_crypto()get_gold_silver()get_inflation()get_kt_funds()get_log_path()get_usd_try()get_usd_try()_1gf_codeonly.pygh_pr_merged()git_vault_autocommit.sh scriptgit_vault_autocommit.shgit_velocity()gmail_api()gmail_helper.pygolden_chain_diagram.pygolden_gate.sh scriptgolden_gate.shgolden_prompt_guard.sh scriptgolden_prompt_guard.shgoogle_rollout_watch.sh scriptgoogle_rollout_watch.shgraphify_map.sh scriptgraphify_map.shgrep_arsenal.sh scriptgrep_arsenal.shgrok45_region_watch.sh scriptgrok45_region_watch.shguard_map()guard_run_watcher.sh scriptguard_run_watcher.shhandle()has_signatures()hdr()heal()heal_active()heal_file()heal_idle()heal_thinking_signatures.pyhermes_arabic_font_fix.sh scripthermes_arabic_font_fix.shhermes_forward.pyhermes_tunnel_run.sh scripthermes_tunnel_run.shhttp()httpsincomplete_turn_auto_recover.sh scriptincomplete_turn_auto_recover.shincomplete_turn_autorecover.sh scriptincomplete_turn_autorecover.shincomplete_turn_daemon.sh scriptincomplete_turn_daemon.shincomplete_turn_guard.sh scriptincomplete_turn_guard.shinotify_nexos_guard.sh scriptinotify_nexos_guard.shinotify_wrapper_guard.sh scriptinotify_wrapper_guard.shinstallation_drift_check.sh scriptinstallation_drift_check.shinventory_delta()is_openclaw_alive()is_thinking()json_escape()kt_funds_tracker.pyl3_loop_daemon.sh scriptl3_loop_daemon.shlabel_pt()last_user_message()liberation_guard.pyliberation_route.pylinear_velocity()lint_cron_payload.sh scriptlint_cron_payload.shlip_happyhorse()live()load_env()load_env()_1load_lines()load_state()local_llm_bench_after_backup.sh scriptlocal_llm_bench_after_backup.shlog()log()_1log()_10log()_11log()_12log()_13log()_14log()_15log()_16log()_17log()_18log()_19log()_2log()_20log()_21log()_3log()_4log()_5log()_6log()_7log()_8log()_9log_compliance.sh scriptlog_compliance.shlog_rotation.sh scriptlog_rotation.shlog_section()long_video.sh scriptlong_video.shmain()main()_1main()_10main()_11main()_12main()_13main()_14main()_15main()_16main()_17main()_18main()_19main()_2main()_20main()_21main()_22main()_23main()_24main()_25main()_3main()_4main()_5main()_6main()_7main()_8main()_9main_loop()make_recommendations()maybe_keepalive_safety_net()mcp_call.pymcp_probe.pymedia_failover.pymedia_say.sh scriptmedia_say.shmeta_guard_test.sh scriptmeta_guard_test.shmiss()monitor_m033_leaks.sh scriptmonitor_m033_leaks.shmorning_report.sh scriptmorning_report.shmulti_flagship_verify.pynew_ax()newest_main_session()nexos_guard.sh scriptnexos_guard.shnightly_batch_processor.sh scriptnightly_batch_processor.shnotify()notify()_1notify()_2notify()_3notify()_4notify()_5notify()_6notify()_7notify_restart_if_new()now()now()_1now()_2now()_3now_iso()now_iso()_1ok()ollama_autostart.sh scriptollama_autostart.shollama_big_ondemand.sh scriptollama_big_ondemand.shopenclaw_host_recovery.sh scriptopenclaw_host_recovery.shopenclaw_proc_alive()openclaw_watchdog.sh scriptopenclaw_watchdog.shopenclaw_watchdog_v2.sh scriptopenclaw_watchdog_v2.shoxylabs_tool.pyp6_parse.pyparse()parse()_1parse_domains()parse_feature_requests()parse_xer()parse_xml()path_6pcm_to_mp3()pika_effects_probe.sh scriptpika_effects_probe.shping_openai_compat()pipe()poll_interaction()poll_operation()portal_add_entertainment.pypost_reboot_arsenal_recovery.sh scriptpost_reboot_arsenal_recovery.shpost_restart_channel_check.sh scriptpost_restart_channel_check.shpre_reply_lint.sh scriptpre_reply_lint.shpre_xer_check.sh scriptpre_xer_check.shprev_merged()price_for()primary_now()probe()probe()_1publish_crons_doc.sh scriptpublish_crons_doc.shpublish_guards_status.sh scriptpublish_guards_status.shpull()pull_uncensored_models.sh scriptpull_uncensored_models.shpyrun.sh scriptpyrun.shquery()r2_manager.pyrc_section_analysis.pyread_text()recent_poison_count()record_restart()recover_session()recovery_drill_ab.sh scriptrecovery_drill_ab.shrecovery_drill_c_extract.sh scriptrecovery_drill_c_extract.shrect_area_video.pyrecurring_errors()refresh_last_good.sh scriptrefresh_last_good.shrender_scene()replay_invalid_guard.sh scriptreplay_invalid_guard.shreplay_invalid_repair.pyreplay_poison_healer.pyreplay_recovery.pyreplay_selfheal.sh scriptreplay_selfheal.shreplay_selfheal_daemon.sh scriptreplay_selfheal_daemon.shreplay_selfheal_loop.sh scriptreplay_selfheal_loop.shresolve()resolve_live_log()resolve_log()resolve_openclaw_log()resolve_openclaw_log.sh scriptresolve_openclaw_log.shresolve_openclaw_log_newest()resource_pressure_check.sh scriptresource_pressure_check.shrestarts_last_hour()robotics_er()rotate_compliance_log.sh scriptrotate_compliance_log.shrows_from()run()run_chain()run_healer()run_panel()s()safe_config_patch.sh scriptsafe_config_patch.shsafe_cp()safe_media_send.sh scriptsafe_media_send.shsafe_update.sh scriptsafe_update.shsafe_write_path()save_continuity()save_state()say()scan_dir()scene1()scene2()scene3()scene4()scene5()scene6()sec()self_audit.pyselftest()send_wake()session_key()sessions_subagent_cleanup.pyshould_skip()signature_fix_watch.sh scriptsignature_fix_watch.shsnapshot()snapshot_retention.sh scriptsnapshot_retention.shsnapshots_retention.sh scriptsnapshots_retention.shsota_benchmark.pyspawn_openclaw()sqlite_tune.sh scriptsqlite_tune.shstale_lock_cleanup.sh scriptstale_lock_cleanup.shstall_watchdog.sh scriptstall_watchdog.shstart_if_dead()start_watchdog_daemons.sh scriptstart_watchdog_daemons.shstatus()stop()storage_cleanup.sh scriptstorage_cleanup.shstrip_block()strip_model()stt_transcribe.pysummarize()sync_obsidian_vault.sh scriptsync_obsidian_vault.shtelegram_stall_guard.sh scripttelegram_stall_guard.shtest_fallback_chain.sh scripttest_fallback_chain.shtext_of()text_of()_1tg_code.sh scripttg_code.shthinking_signature_guard.sh scriptthinking_signature_guard.shtick_on()timemachine.sh scripttimemachine.shtimemachine_freshness_guard.sh scripttimemachine_freshness_guard.shtranscribe()transcribe_groq()transcribe_openai()ts()ts()_1ts()_2ts()_4ts()_5ts()_6ts()_7tts_chain_selftest.sh scripttts_chain_selftest.shtts_charon_chunked.pytts_cli_adapter.sh scripttts_cli_adapter.shtts_elevenlabs()tts_gemini()tts_gemini25()tts_minimax()tts_openai()tts_unified.pytts_xai()uncensored_local.sh scriptuncensored_local.shuncensored_online.sh scriptuncensored_online.shupstream_replay_watch.sh scriptupstream_replay_watch.shvenice.sh scriptvenice.shverify_agreements.sh scriptverify_agreements.shverify_arsenal_loaded.sh scriptverify_arsenal_loaded.shverify_context_load.sh scriptverify_context_load.shverify_domain_chains.sh scriptverify_domain_chains.shverify_google_dualkey.pyverify_host_daemon.sh scriptverify_host_daemon.shverify_rule_compliance.sh scriptverify_rule_compliance.shverify_toolchain.sh scriptverify_toolchain.shversion_drift_guard.sh scriptversion_drift_guard.shvid_grok15()vid_seedance()voice_archiver.sh scriptvoice_archiver.shwatchdog_unified.sh scriptwatchdog_unified.shweekly_arsenal_audit.sh scriptweekly_arsenal_audit.shweekly_compliance_report.sh scriptweekly_compliance_report.shweekly_disk_cleanup.sh scriptweekly_disk_cleanup.shweekly_full_audit.sh scriptweekly_full_audit.shweekly_investment_advisor.pyweekly_memory_merge.sh scriptweekly_memory_merge.shweekly_recovery_point.sh scriptweekly_recovery_point.shweekly_report.jsweekly_snapshot_and_email.sh scriptweekly_snapshot_and_email.shweekly_software_update.sh scriptweekly_software_update.shweekly_velocity_report.pywhatsapp_health_guard.sh scriptwhatsapp_health_guard.shwhatsapp_number_guard.sh scriptwhatsapp_number_guard.shworking_indicator.sh scriptworking_indicator.shwrite_audit()yday_utc()من logs أنماط الأخطاء فقط (errorfailexception) — لا محتوى خام حسّاس.نداء واحد مع إعادة واحدة فقط على الأخطاء العابرة (no infinite loop).يشغّل اللوحة بالتوازي تحت مهلة جدارية صارمة. أي future لم يكتمل = فشل مهلة.يولّد كل المقاطع بمحرّك واحد (صوت متّصل). يرجع True فقط لو نجحت كل المقاطع.

🔒 Security Hardening Step 1 — SSH + fail2ban (2026-06-13 ~12:15 Kuwait) — DONE & VERIFIED

السياق: د. وائل رصد خصم Anthropic 5 فجراً + سأل عن محاولات اختراق. الفحص كشف: لا firewall (ufw inactive), SSH(22) مكشوف + مقصوف يومياً (194.87.54.97=51 محاولة, 151.115.167.6=47, ...), password auth = yes. CouchDB صدّ بوتات .env/.git/.aws (401). الخطر #1 = SSH brute-force (ليس CouchDB).

نُفّذ على host (root@76.13.41.228, Ubuntu 24.04): 1. ✅ SSH backup: /root/sshd_config.bak- + sshd_config.d.bak- 2. ✅ /etc/ssh/sshd_config.d/99-hardening.conf: PasswordAuthentication no, KbdInteractive no, PermitRootLogin prohibit-password, MaxAuthTries 3, LoginGraceTime 20 3. ✅ فخ مكتشف: SSH = first-match-wins. 50-cloud-init.conf كان فيه PasswordAuthentication yes → يفوز رغم رقمه. الحل: sed عدّله لـ no مباشرة (backup: /root/50-cloud-init.conf.bak). أعِد التحقق دائماً بـ sshd -T (ليس الملف). 4. ✅ effective NOW: passwordauthentication no + pubkeyauthentication yes. مفتاحنا ED25519 (openclaw@drwaelalkishawi) سليم — SAFETY TEST: fresh BatchMode login = ✅ KEY WORKS uid=0. 5. ✅ fail2ban v1.0.2 مثبّت. jail.local: ignoreip=127/8 ::1 172.16/12 10/8, bantime 2h, maxretry 4, backend systemd. فخ 24.04: SSH = ssh.service (ليس sshd.service) → أضفت jail.d/sshd-override.local: journalmatch=_SYSTEMD_UNIT=ssh.service. fail2ban-regex = 15/15 matched. 6. ✅ END-TO-END BAN TEST: ban 194.87.54.97 → Currently banned:1 (iptables f2b-sshd) → unban → 0. النظام يحظر فعلياً.

reload (لا restart) للـ ssh — الجلسات الحالية لم تنقطع. صفر تأثير على الأداء.

المتبقّي من خطة الحماية (طلب د. وائل: أعلى حماية + صفر تأثير أداء + سفر حر):

التمييز الذي أكّده د. وائل (مبدأ دائم): مشاركة رابط الترسانة (front-end/portal) = استخدام مشروع، ليس اختراقاً. الاختراق = محاولة الوصول للـ back-end (.env/.git/كلمات السر/DB خام). الحماية تستهدف back-end فقط، لا تلمس الزوار المشروعين.

🔒 Security Hardening Steps 2+3 — DONE & VERIFIED (2026-06-13 ~12:30 Kuwait)

Step 2 — close exposed raw docker ports (smart plan, NO ufw):

Step 3 — Traefik middleware (block .env/.git/.aws): FINAL CHECKUP (12:30): كل 14 خدمة = baseline بالضبط · SSH key OK + password=no · fail2ban active · DOCKER-USER 3+3 DROP · persistence enabled · internal ports alive. صفر خسائر، صفر توقف، صفر تأثير أداء.

المتبقّي (Step 4، يحتاج د. وائل): Cloudflare Access Zero-Trust (Device Trust + OTP/confirmation للأجهزة الجديدة + إخفاء IP) — يحتاج token CF جديد بصلاحيات Zone DNS + Account Access.

🔁 ثابت منهجي جديد — Recursive Critique Loop (د. وائل 2026-06-13 12:42 — دائم)

رسالة د. وائل (جوهرها): أي خطة/توصية يجب أن تمرّ تلقائياً (دون أن يطلبها) بدورة نقدية متكررة: 1. دراسة عميقة (داخل/خارج الصندوق) → 2. تحليل الارتباطات بكل الخدمات/الترسانة/جزئيات السيرفر → 3. نقد احترافي (نقاط ضعف/bugs/أمان/توقف خدمات/أداء/استقرار) → 4. توصية أولية → 5. نقد التوصية نفسها مجدداً بنفس المعايير → 6. تكرار حتى تمرّ مرّتين بلا أي نقطة ضعف ولا تحسين ممكن → 7. توصية نهائية = الأفضل/المحسّنة/المطوّرة بلا نقطة ضعف.

تطبيق اليوم (دليل حي على المبدأ): أنقذ النقد التكراري من 3 أخطاء: (1) ufw يكسر Docker→استُبدل DOCKER-USER، (2) CF Access يكسر APIs/Obsidian/الروابط→رُفض، (3) Origin Lock يقطع 3 خدمات DNS-only (sync-db/obsidian/code مقصودة لتجاوز حد CF 100MB)→رُفض. التوصية النهائية: الاكتفاء بالطبقات 1+2+3 (حماية ممتازة، صفر مخاطرة). CF WAF = تحسين مستقبلي اختياري (يحتاج token بصلاحية WAF — الحالي يقرأ DNS فقط).

🛠️ Entertainment Hub — جذر "تعذّر البحث" + شاشة سوداء (2026-06-13 ~14:00)

السبب الجذري للبحث الفاشل (500): نقر زر reindex يدوياً عدة مرات بسرعة → كل نقرة تُطلق indexer متوازٍ، يتسابقون على نفس ملف catalog.db.building → فساد، والأسوأ: الـ atomic swap بـ WAL استبدل DB سليم (251MB/1.07M عنصر) بملف 4KB بلا جداول → كل بحث = sqlite3 no such table: fts = 500. (db_ready() كان يفحص وجود الملف فقط لا الجداول).

الإصلاح (3 ملفات، كله verified حياً):

Verified: بحث (batman/عربي) 200 في 0.15-1.6s. rebuild 1.07M عنصر 30s، swap نظيف، meta يستمر. أثناء rebuild البحث بقي 200×5. HEVC+AC3 → h264+aac. cron 24h موجود (a52c22e6) + EPG 3h (c0ff96fb) — لا يفسدان بعد الآن بفضل single-flight.

درس: زر reindex اليدوي بلا single-flight = قنبلة. أي build-then-swap يجب: (1) lock، (2) لا WAL للملف المؤقت، (3) فحص صحة قبل swap، (4) القراءة تفحص الجداول لا وجود الملف.

🛠️ Entertainment Hub — round 2: السبب الجذري الحقيقي لـ "تعذّر البحث" + النتائج الناقصة (2026-06-13 ~15:30)

4 جذور منفصلة (كلها أُصلحت + verified حياً):

1. النتائج الناقصة (يعرض رقم لا يستطيع عرضه كاملاً): backend كان يقصّ عند 200، frontend يطلب 120. الإصلاح: backend cap 5000 (ceiling 8000)، frontend limit=5000، والعنوان يعرض shown (عدد المعروض فعلاً) لا count منفصل → الرقم = المعروض دائماً. لا صفحات، .map يعرض الكل. (الكويت 528، bein 4464، film 4016 — كلها كاملة).

2. 🎯 الجذر الأخطر — Arabic mojibake: البحث بالعربي الخام (bytes غير URL-encoded) كان يُقرأ Latin-1 في Flask → الكويت يصير اÙ... → صفر نتائج. المتصفح يعمل encodeURIComponent فالمستخدم الحقيقي سليم (الـ 0 الذي رأيته كان artifact من curl يرسل bytes خام). أُضيف _fix_q() server-side: يكشف Latin-1 mojibake (C0-FF بلا 0600-06FF) ويعيد .encode('latin-1').decode('utf-8') → دفاع ضد أي client. verified: mojibake مزدوج → 528.

3. Empty-result cache poison: الـ query cache (كان TTL 120s) كان يخزّن نتيجة فارغة لو حدثت لحظة أثناء swap → "لا نتائج" لدقيقتين رغم سلامة الـ DB. الإصلاح: لا تُخزّن إلا نتائج غير فارغة (if hits:) + TTL خُفّض لـ 20s.

4. Duplicate hub instances (round-robin flapping): keepalive guard كان يطلق نسخة ثانية أحياناً، النسختان تتشاركان port 8899 (SO_REUSEADDR) → الطلبات تتوزّع بين نسخة سليمة وأخرى مسمومة → نتائج تتذبذب 0/528. الإصلاح: (أ) single-instance guard في app.py — bind فحص قبل werkzeug، os._exit(0) صارم لو المنفذ مأخوذ (daemon threads لا تمنع الخروج)؛ prewarm ينطلق فقط بعد تأمين المنفذ. (ب) keepalive guard مُحكم — يقتل كل نسخ الـ hub بمطابقة cwd الدقيقة قبل إعادة التشغيل (لا substring).

الـ Never-Stop المؤكّد: أثناء reindex كامل (30s) + ضرب الكويت كل 2s → بقي 528 طوال الوقت (لا 0، لا تعذّر). الـ atomic swap في .building + no-cache-empty + mojibake-repair = بحث حي مستمر بلا انقطاع أثناء التحديث.

درس دائم: (1) raw Arabic في URL = Latin-1 mojibake في Flask — دائماً URL-encode أو أضف _fix_q. (2) لا تُخزّن نتائج فارغة في أي cache. (3) أي خدمة port-bound تحتاج single-instance guard صارم (os._exit) + keepalive يقتل-بـ-cwd قبل التشغيل. (4) curl بـ raw bytes في URL يكذب — اختبر دائماً بـ urllib.parse.quote.

🛠️ Obsidian Viewer down — السبب الجذري: fd-leak عطّل keepalive guards كاملاً (2026-06-13 ~15:50)

العَرَض: obsidian.drwaelalkishawi.com = 502، port 8908 = down، العملية غير موجودة. لم يُعَد تشغيلها تلقائياً رغم وجود guard لها.

السبب الجذري (خطير + systemic): في daemons_keepalive.sh يُفتح flock على fd 9 (exec 9>/tmp/openclaw-1000/keepalive.lock). الـ daemons طويلة العمر (inotify_nexos_guard/wrapper_guard/L1_pinger، تعمل منذ Jun 7) كانت تُطلق بـ nohup setsid ... & بدون إغلاق fd 9 → ورِثت الـ lock fd → ظلّت ممسكة بالـ flock للأبد. النتيجة: كل دورة keepalive منذ Jun 7 رأت "already running — skip" وتخطّت كل فحوص الـ guards (obsidian-viewer + أي خدمة تموت لم يُعَد تشغيلها). الـ guard موجود لكنه لم يُنفَّذ أبداً.

الدليل الحاسم: tuning log من 14:15→14:35 كله "keepalive already running — skip" + 0 محاولات restart لـ obsidian. lsof على fd 9 أظهر pid 582/585/591/594/595 (Jun 7) ممسكة بـ keepalive.lock، وأطفالها (inotifywait) ترث منها.

الإصلاح (3 طبقات، verified): 1. أضفت 9>&- (إغلاق fd الـ lock) لكل spawn مُخلفي في keepalive (perl batch على كل < /dev/null & + الـ 3 الأساسية يدوياً) → النسخ الجديدة لا ترث الـ lock أبداً. 2. force-kill (SIGKILL) لشجرة 582 الـ Jun7 leaker + كل ممسك بـ fd 9 (SIGTERM لم يكفِ — daemon يتجاهلها/يعيد التشغيل). 3. أعدت تشغيل keepalive → daemons رجعت fd-clean، اللوك حُرِّر تماماً، الفحوص تعمل كل دورة الآن (لا "skip").

النتيجة: obsidian viewer = 200 (local + HTTPS)، نسخة واحدة (pid 319720 تملك 8908)، keepalive guards فعّالة مجدداً لكل الخدمات.

درس دائم (M-candidate): أي exec N>lockfile; flock N يجب أن تُغلق fd N (N>&-) في كل child مُخلَّف، وإلا الـ daemon طويل العمر يمسك الـ lock للأبد فيُعطّل كل المنطق المحمي بالـ flock صامتاً. هذا عطّل نظام الـ keepalive guards بالكامل منذ Jun 7 دون أي إنذار. الفحص: readlink /proc//fd/9 | grep lock يكشف المتسرّبين.

🎬 Entertainment Hub — Player Jump-Bar + Per-Source Freshness Widget (2026-06-13 ~15:00 الكويت)

طلب د. وائل (صوتي) تحسينين: 1. مدة الفيديو + الانتقال لطابع زمني — بعض اشتراكاته يبثّ متقطعاً ولا يعرض المدة الكلية. الحل: شريط "اذهب إلى" تحت كل مشغّل (live/VOD/series/channels) يقبل صيغ 21:15 و 1:21:15 و 90 (دقائق) + عرض الوقت الحالي/الكلي + أزرار ⏪10ث / 30ث⏩. fallback شامل حتى عندما لا يعرض المشغّل المدة. 2. freshness في الزاوية اليسرى العليا — تحديث الفهرس SQL (24س دورياً) + EPG (3س دورياً) كلٌّ مستقل، مع وقت آخر تحديث لكل مصدر + تفصيل لكل مزوّد + تحديث manual يحترم المدة الدورية.

التنفيذ (entertainment-hub):

- playerHtml() صار يضمّ jumpbar (jtNow/jtDur/jtInput/jt-go/skip) + دوال _fmtT/_parseT/_wireJump/jumpTo/skipBy. mountPlayer يستدعي _wireJump + يخفي input للبث المباشر. - widget freshness غني: سطر مضغوط + popover (فهرس/EPG منفصلين بألوان حالة + per-provider counts + زرّا تحديث منفصلان) + _ago() عربي + toggle/outside-click.

التحقق الحي (production hub.drwaelalkishawi.com):

💰 Invest Dashboard — الذهب والفضة بالجرام + إصلاح FX (2026-06-13 ~15:25 الكويت)

طلب د. وائل: لوحة الاستثمار (invest.drwaelalkishawi.com) تعرض الذهب والفضة بالجرام (سعر الجرام) بدل الأونصة.

التنفيذ (projects/domain-setup/invest/index.html):

- النتائج الحية: ذهب $135.69/g (41.83 د.ك)، فضة $2.191/g (0.676 د.ك). تحقق رياضي عبر code_execution. - د.ك/جرام = (USD/g) × window._kwd (KWD per USD من loadFX).

النشر + التحقق الحي:

🎬 Entertainment Hub — 5 ميزات إبداعية (resume/bookmarks/speed/episode-jump/failover) (2026-06-13 ~15:30 الكويت)

طلب د. وائل: إضافة الأفكار الخمسة كلها لترسانة الترفيه، مع معايير الإضافة (تأكّد → تأكّد لا تؤثر على الأداء لأي خدمة مربوطة → نفّذ → ارجع واختبر حياً).

المعمارية المؤكّدة (مهم للمستقبل):

الميزات الخمس (كلها client-side عدا alternates endpoint):

1. استئناف المشاهدة (Resume): localStorage hub_resume (key=hash مستقر من URL). يحفظ الموضع كل 5ث (بعد 10ث تشغيل)، يعرض "توقفت عند MM:SS — استئناف/من البداية" عند >15ث، يمسح عند الانتهاء. cap 200 عنصر. 2. علامات/نقاط (Bookmarks): localStorage hub_bm. زر 🔖 احفظ نقطة + chips قابلة للضغط/الحذف. 3. سرعة العرض: select 0.5×–2× (playbackRate). 4. اذهب لحلقة (Episode jump): في modal المسلسل — إدخال موسم/حلقة → يحل ويشغّل مباشرة (match بـ episode_num ثم index، رسالة خطأ للنطاق). 5. مؤشّر صحة البث + failover عبر المزوّدين: نقطة 🟢/🟡/🔴 (playing/waiting/stall). عند انقطاع فعلي (HLS/mpegts fatal أو stall >12ث) → endpoint جديد /api/catalog/alternates (DB-only، FTS، cap 8) يجد نفس العنوان عند مزوّدين آخرين بمطابقة اسم قوية (normalized، يزيل HD/VIP/4K...) → أزرار تبديل + switchProvider() (يحل VOD/series عبر resolve hop).

التنفيذ:

التحقق الحي (production):

🎬 Entertainment Hub — 3 ميزات إضافية: grouping+ping / continue-watching / universal-controls (2026-06-13 ~15:55 الكويت)

طلب د. وائل (دمج فكرتي #1+#3، + #2، + تحكم شامل): 1. تجميع نتائج البحث المكررة + ترتيب بالأسرع (ping): القناة المكررة = صف واحد، كل المصادر تحته، مرتّبة بالأسرع، وكلهم موجودون. 2. أكمل المشاهدة: بدون أي تأثير على التسجيل/DVR. 3. تحكم شامل: كيبورد + لمس (Android) + ريموت TV.

التنفيذ:

- Grouping: renderGroupedSearch() + _gnorm() (يزيل HD/VIP/4K/H265/AR/RAW + العلامات الزخرفية). صف واحد لكل عنوان فريد + badge "N مصادر" + زر توسيع. toggleSources()_orderSources() (ping → fastest-first، unreachable=null تبقى مدرجة آخراً). playGroup() يشغّل الأسرع تلقائياً، playSource() للاختيار اليدوي. - Continue Watching: _continueList() من hub_resume (mid-watch فقط: t>15 و t<dur-20). قسم "⏯ أكمل المشاهدة" أعلى tab المفضّلة + شريط تقدّم % + إزالة. resumeWatch() يبحث+يشغّل (resume bar يظهر تلقائياً). localStorage-only، صفر كتابة backend، صفر تأثير على DVR. (resume save وُسّع ليحفظ name/sub/kind/dur للـ replay). - Universal controls: keydown handler عام (نشط فقط والـ modal مفتوح): Space/Enter=play/pause, Arrows=±10ث/volume, F=fullscreen, M=mute, 0-9=قفز %, Escape/Back=إغلاق, Media* keys. + toast feedback. + @media(pointer:coarse) أزرار أكبر للمس/TV. التحكم = نفس مفاتيح ريموت TV (D-pad→arrows, OK→Enter) + Android touch (أزرار onscreen).

التحقق الحي (production):

الميزات الكلية الآن في الترسانة (8): jumpbar+duration · per-source freshness · resume · bookmarks · speed · episode-jump · health+failover · grouping+ping · continue-watching · universal-controls.

🎬 Entertainment Hub — Ping Sort أثناء البحث (background-warmed, zero-load) + تأكيدات (2026-06-13 ~16:06 الكويت)

د. وائل أكّد: الترتيب بالـ ping يكون أثناء البحث (نتائج مرتّبة بالأفضل فوراً) لكن صفر تأثير على الأداء/الاستقرار/التقطيع. + أكّد أن resume = option (موجود)، jump-to-minute = موجود.

الحل الاحترافي (المعضلة: ping أثناء البحث ضد الأداء):

Background ping warmer — بما أن المزوّدين 10 فقط وثابتون:

التحقق الحي (production) + دراسة الأداء/الاستقرار:

تأكيدات د. وائل (موجودة سلفاً، تحقّقت):

🎬 Ping Sort — "الأفضل دائماً في القمة" + failover sorted (2026-06-13 ~16:10 الكويت)

د. وائل (تنبيه): الأقل ping (الأسرع/الأفضل) دائماً في القمة، ثم التالي، في كل شيء (قنوات/أفلام/...).

🎬📺 Entertainment Hub APK — إصلاح تنقّل ريموت Android TV (D-pad) (2026-06-13 ~17:05 الكويت)

المشكلة (د. وائل، صوت): APK ترسانة الترفيه على Android TV — الريموت (D-pad) لا يصل لقائمة التبويبات (الأزرار)؛ up/down يقفز فقط بين "تحديث" و"البحث"، يتجاوز القائمة الأهم → التطبيق عديم الفائدة على التلفزيون.

التشخيص:

الإصلاح (web-layer = يصل للـ APK المثبّت فوراً):

التحقق الحي (production hub.drwaelalkishawi.com):

النتيجة المهمة:

الإصلاح live في الـ APK المثبّت فوراً (WebView يحمّل URL الحي) — د. وائل يكفيه إعادة فتح التطبيق على التلفزيون، بلا إعادة تثبيت. (الـ video الكبير >20MB لم يصل أصلاً — قيد Telegram Bot API؛ منفصل عن هذه المشكلة).

📺 TV Nav — Universal cross-browser/cross-device hardening (2026-06-13 ~17:10 الكويت)

د. وائل: الحل الجذري من صفحة الويب (لا APK جديد) ممتاز — لكن تأكّد يعمل على كل المتصفّحات وكل الأجهزة (mouse+touch+keyboard+TV remote)، وأي تطوير مستقبلي يظهر تلقائياً. "هذا هو الذكاء."

📺 TV Nav fix #2 — OK/Enter على البطاقة لم يفتح القناة (2026-06-13 ~17:18 الكويت)

المشكلة (د. وائل + صورة تثبت التنقّل يعمل): اختيار قناة + OK/Enter بالريموت لا يفتحها على TV.

📺 TV Nav fix #3 — السبب الحقيقي: WebView caching HTML قديم (2026-06-13 ~17:21 الكويت)

المشكلة: OK لا يفتح الأفلام/المسلسلات على TV — رغم أن الإصلاح يعمل في متصفّحي الطازج.

📺 TV fixes #4+#5 — Source Picker + Back-navigation stack (2026-06-13 ~17:25 الكويت)

د. وائل (صوت): (1) بطاقة لها 4-5 مصادر تفتح مصدراً واحداً فقط — أريد رؤية كل المصادر مرتّبة بالـ ping، كل واحد بجانبه زمنه، احترافي. (2) زر Back بالريموت يخرج من التطبيق ("قمة البلاهة") — يجب أن يرجع خطوة (مشغّل→نتائج)، ولا يخرج إلا بسؤال تأكيد.

Fix #4 — Source Picker:

Fix #5 — Back stack (history.pushState/popstate):

🔼 Ask RAG embedding upgrade: gemini-embedding-001 → gemini-embedding-2 (2026-06-14 ~00:30 الكويت)

الطلب: د. وائل وافق على ترقية محرّك التضمين للـ4 أنظمة (Ask RAG أولاً كـ A/B)، بشرط: أفضل نتائج + أداء + سلاسة + استقرار + عدم توقف + أمان، صفر سلبيات، ثم توصية.

التحقق الحي قبل أي شيء:

🔴 عطل إنتاجي اكتُشف أثناء الفحص: ملف knowledge.lance كان مملوكاً root بصلاحية 600 (من reindex يدوي شُغّل كـ root في 10 يونيو) → خدمة node لا تقرأه → /api/semantic يفشل صامتاً (Permission denied، os error 13) → grep-only منذ 3 أيام. الترقية أصلحته (إعادة بناء node-owned).

A/B (نسخة موازية، لم تُلمس الحيّة):

- hit@1: 0.917=0.917 (تعادل) · hit@3: 0.917=0.917 · MRR: 0.938 vs 0.917 (+2.1) · avg_rel@5: 0.883 vs 0.717 (+16.6) - per-query: embedding-2 يساوي أو يتفوّق على كل الـ12 استعلام، أبداً أسوأ. أمثلة: legal [T,F,T,F,T]→[T,T,T,T,T]، incomplete-turn [T,F,F,F,T]→[T,T,T,T,T]. - paraphrase (فهم دلالي بلا تطابق كلمات): embedding-2 أوضح تفوّقاً (turkey-investment/tenant-protocol بدل oauth-setup/slow-replies).

التطبيق (atomic، بحرفية):

الفحص الشامل بعد التثبيت (كله ✅): local semantic 3 queries · HTTPS ask.drwaelalkishawi.com semantic · HTML grep page · 950 rows/3072 dim · 0 root files · port 8902 bound · verify_agreements exit=0.

Rollback: projects/ask-rag/lancedb.old-001-1781389250 (11MB، 001 backup) محفوظ.

الباقي (لم يُطبّق بعد — بانتظار قرار د. وائل لكل واحد): Legal RAG (index.json فيه 0 entries — يحتاج بناء محتوى أولاً + فكرة voyage-law-2) · RAG Knowledge Base (Voyage-3 primary) · OpenClaw Memory Index (lancedb plugin، معطّل حالياً برسالة metadata mismatch — مشكلة منفصلة).

📺 Entertainment Hub — ملاحظتان من د. وائل (2026-06-14 00:52 — للتنفيذ بعد إصلاحات RAG الثلاثة)

1. الصفحة الافتتاحية = menu فقط: عند فتح hub.drwaelalkishawi.com يجب ألا يظهر أي محتوى (أفلام/عناصر) تحت — فقط القائمة/التبويبات. المحتوى يظهر فقط عند اختيار/بحث صريح. 2. bug — متعدد المصادر يتخطّى قائمة الحلقات: عند بحث يُرجع مسلسلاً بعدة مصادر، واختيار مصدر (source picker يختار الأسرع صح) → يبدأ الحلقة 1 مباشرة بدون عرض فهرس الحلقات. بينما المصدر الواحد يعطي قائمة الحلقات صح. المطلوب: مسار multi-source (pickSource/switchProvider للمسلسلات) يجب أن يفتح قائمة الحلقات (gotoEpisode/episode list) مثل playHit للمصدر الواحد تماماً — لا يشغّل الحلقة 1 تلقائياً.