مدمج في الشريط الجانبي لـ Core بالترتيب Plugins ← Server Diagnostics ← Hash & Checksum. لا يتطلب جلسة SSH ولا إضافة منزّلة. توجد جميع شيفرات بيئة التشغيل والاختبارات والبيانات التجريبية (fixtures) في app/؛ ولا تعتمد الوحدة على المستودعات المجاورة. لا يحتوي المستودع على doc.md، لذا تصف هذه الوثيقة وملفا README التنفيذ.
سير عمل المستخدم
أدخل اسم مضيف أو IPv4 أو IPv6 أو عنوان URL من نوع HTTP(S)/WS(S). تستخدم أسماء المضيفين/عناوين IP المجردة HTTPS افتراضيًا؛ وتحتفظ عناوين URL الصريحة بالمسار والاستعلام والمنفذ أثناء الطلب. وتُرفض بيانات الاعتماد داخل عناوين URL، والمخططات غير المدعومة، والمسافات/أحرف التحكم، وأسماء المضيفين التي تشبه أوامر الصدفة. تُحاط عناوين IPv6 الحرفية بأقواس معقوفة تلقائيًا؛ ولا يدعم محلّل URL معرّفات المناطق من نوع scoped/link-local.
اختر Auto (تفضيل IPv4، وإلا IPv6) أو IPv4 أو IPv6 أو Both (كلاهما). حُلّ العناوين لاختيار إجابة حالية بعينها. تعرض النظرة العامة جميع الإجابات المحلولة؛ وتختبر المجسّات العنوان المختار أو عنوانًا واحدًا لكل عائلة مطلوبة. وتُقاس العائلتان كلٌّ على حدة. ولا يعني وجود سجل AAAA وحده أبدًا أن اتصال IPv6 يعمل.
يشغّل Run Diagnostics (تشغيل التشخيص) فحوص DNS وping وtraceroute وHTTP والضغط وTLS ومنافذ TCP المختارة. ويجب تفعيل WebSocket صراحةً. ولكل أداة أيضًا عنصر تحكم Run/Stop (تشغيل/إيقاف) خاص بها. ولا يمكن أن يكون نشطًا إلا تشغيل تشخيصي واحد في كل مرة. والتشغيل المكتمل يعني أن الأدوات انتهت، لا أن كل مجسّ قد نجح. ولا يوجد حكم شامل بأن «الخادم غير متصل».
يمكن ضبط المهلة وعدد الحزم والتكرارات والحد الأقصى للقفزات ومحلّل DNS واختيار البروتوكول والاتصال المسبق (warm) ومقارنة HTTP/HTTPS. ويؤدي تغيير الهدف إلى مسح عنوان IP المختار سابقًا. ويتيح السجل إعادة الفتح ومقارنة تقريرين والحذف واستيراد JSON والنسخ والتصدير بصيغ JSON/CSV/TXT عبر نوافذ حوار Core الأصلية. وينطبق السمة الفاتحة/الداكنة/وفق النظام على قسم التشخيص وتُحفظ في إعدادات الواجهة القائمة. وتتبع CZ/DE/EN لغة التطبيق فورًا.
المكوّنات وسلوك البروتوكولات
| المكوّن | التنفيذ والتفسير |
|---|---|
common.js |
يتحقق من الأهداف/الخيارات والحدود وقيم enum؛ وتحويل IDNA؛ وتستبعد الإحصاءات الرقمية القيم غير المعروفة. |
dnsDiagnostics.js |
يستخدم حلّ عناوين النظام dns.lookup لاحترام إعدادات نظام التشغيل وملفات hosts. وتستخدم استعلامات السجلات DNS عبر UDP محدودًا مع الرجوع إلى TCP للاستجابات المقتطعة مقابل dns.getServers()، أو مقابل المحلّل المخصص/العام المختار صراحةً. ولا يوجد انتقال ضمني إلى DNS عام. |
processTools.js |
يشغّل ping/traceroute الخاصين بنظام التشغيل بمصفوفة وسائط وshell: false، مع مخرجات محدودة ومهلة صريحة وتنظيف عند abort/kill. ويحلّل ردود الحزم والقفزات بدلًا من اعتبار مدة العملية زمن RTT. |
httpDiagnostics.js |
curl المضمّن لـ HTTP/1.1 وHTTP/2 وHTTP/3؛ مع تحقق صارم من الشهادات وعائلة IP مثبّتة. يُطلب كل إصدار بشكل مستقل؛ ويُسجَّل الإصدار الفعلي. |
socketDiagnostics.js |
مجسّات صريحة لإصدارات TLS، واتصالات TCP محدودة/لافتات سلبية، ومراقبة مفتاح مضيف SSH قبل المصادقة باستخدام تبعية ssh2 القائمة، وتحقق اختياري من Upgrade وفق RFC 6455. |
diagnosticsService.js |
يشغّل الأدوات ويلغيها، ويختار العناوين ويتحقق منها، ويبث التقدم، ويحافظ على القياسات الجزئية، ويملك المهلة النهائية للتشغيل. |
historyStore.js |
سجل محلي مُرقَّم الإصدارات ومحدود، مع إخفاء البيانات، واستيراد متحقق من مخططه، وتصدير البيانات المقاسة. |
ICMP والمسارات
يرسل ping افتراضيًا أربعة طلبات ICMP echo تُنفَّذ كلٌّ على حدة. وتحتوي النتائج على RTT المقاس لكل حزمة، وأعداد المستلم/المرسل، والفقد، والحد الأدنى/المتوسط/الحد الأقصى، والانحراف المعياري للمجتمع، ومتوسط الفرق المطلق بين قيم RTT المقاسة المتتالية (jitter)، وTTL/Hop Limit عند طباعتها، والطوابع الزمنية. ويُحتسب الرد <1 ms مستلمًا مع حد أعلى بدلًا من اختلاق RTT رقمي. وتُستبعد قيم RTT غير المعروفة من إحصاءات زمن الاستجابة. تستخدم الإحصاءات نافذة محفوظة تضم 500 حزمة كحد أقصى؛ بينما تغطي أعداد المرسل/المستلم/الفقد التشغيل كاملًا. وتعرض الرسوم البيانية آخر 200 ملاحظة، برموز مميزة للردود، والردود دون الدقة، والردود المفقودة، وحالات انتهاء مهلة الطلب/العملية الصريحة.
قد يعكس الرد المفقود ترشيح ICMP أو فقدان الحزم أو انتهاء المهلة؛ ولا يمكن لهذه الملاحظات تحديد وجود جدار حماية بشكل قاطع. أما غياب الملفات التنفيذية وأعطال الأذونات المحلية واستدعاءات الأدوات غير الصالحة فهي أخطاء أدوات منفصلة، وليست فقدانًا للحزم ولا عدم توفر للخادم. ولا يُطلب أي رفع للامتيازات.
يبث traceroute القفزات والعناوين والمجسّات الفردية والمتوسطات والنسب المئوية الملاحظة للمجسّات التي لم يُرد عليها. ويُحلّ DNS العكسي بعد المسار باستخدام المحلّل المختار. وتقارن التكرارات تسلسلات عناوين القفزات الملاحظة؛ وقد تعكس الاختلافات موازنة الأحمال. ولا تثبت القفزات الوسيطة التي لا ترد أن المسار معطّل. وتظهر البيانات الوصفية الخام للمجسّات وطريقتها في التفاصيل القابلة للتوسيع. يتطلب macOS أوقات انتظار traceroute بالثواني الصحيحة؛ وتُسجَّل المهلة الفعلية بعد التقريب.
DNS
أنواع السجلات الاثنا عشر هي A وAAAA وCNAME وMX وNS وTXT وSOA وSRV وCAA وPTR وDS وDNSKEY. يفحص تحليل صيغة DNS على مستوى wire هوية المعاملة/السؤال وأحجام السجلات وحلقات مؤشرات الضغط وحدود الرسائل. وتحتفظ الإجابات بقيم TTL للسجلات وتوقيت الاستعلام والمحلّل وحالات NXDOMAIN/NODATA/SERVFAIL/refused/timeout. ولا يمكن لعمليات البحث عن العناوين في نظام التشغيل توفير TTL؛ بينما يمكن ذلك لاستعلام السجل المنفصل.
يقتصر تتبّع CNAME على ثمانية روابط مع اكتشاف الحلقات. ويكرر فحص الاتساق إجابات A/AAAA من المحلّل المختار، ويجري PTR مؤكدًا بالاتجاه الأمامي لاختبارات DNS على عناوين IP الحرفية. والإجابات المتغيرة ملاحظات وليست دليلًا على عطل في DNS. تستخدم استعلامات SRV اسم الهدف كما أُدخل؛ وأدخل اسم خدمة مثل _service._tcp.example.org عند الحاجة. DNSSEC دائمًا غير متحقق منه. ولا يُعد وجود DS/DNSKEY ولا حتى علامة AD لدى المحلّل تحققًا مستقلًا أبدًا.
HTTP والأداء والضغط
لا يُعد HTTP/1.1 مدعومًا إلا إذا أُعيد هذا الإصدار فعلًا. ويتطلب HTTP/2 عبر HTTPS بروتوكول h2 متفاوضًا عليه؛ ولا تُعاد تسمية أي حالة رجوع. ويستخدم HTTP/2 غير المشفّر prior knowledge، وليس مجسّ Upgrade لـ HTTP/1.1. ويظل التحقق من TLS صارمًا لكل طلب HTTP/WebSocket.
تقتصر عمليات إعادة التوجيه اليدوية على ثمانٍ؛ وتفشل الحلقات والوجهات غير الصالحة وإعادة التوجيه المفرطة صراحةً. وتسجّل السلسلة الكاملة التغييرات بين النطاقات والتخفيض من HTTPS؛ وتظهر تغييرات المخطط وwww في عناوين URL للمصدر/الوجهة. وتُرفض بيانات الاعتماد ومخططات إعادة التوجيه غير HTTP(S). وتُحلّ كل إعادة توجيه بين مضيفين بشكل مستقل عبر المحلّل وعائلة IP المختارين.
تشمل القياسات DNS (عند إجرائه) وTCP وTLS وTTFB للاستجابة النهائية وTTFB الإجمالي بما في ذلك DNS/إعادة التوجيه والتنزيل وإعادة التوجيه والوقت الفعلي الإجمالي وبايتات الكيان الفعلية وسرعة النقل والحالة وترويسات الاستجابة وعنوان/منفذ الخادم الفعلي وALPN وإعادة استخدام الاتصال المتحقق منها. وتكون مراحل DNS/TCP/TLS التي لم تُنفَّذ على اتصال مثبّت أو مُعاد استخدامه N/A، لا أصفارًا زائفة. ولا تحتوي QUIC على مرحلة TCP؛ وتُسجَّل مصافحتها بشكل منفصل. ولا تُقدَّم الحمولة الزائدة لنقل الترويسات أو الحمولة الزائدة الكاملة على مستوى wire على أنها قياس لبايتات الكيان. وهذه توقيتات للخادم/الشبكة، وليست عرضًا للصفحات ولا درجات Lighthouse.
يستخدم كل بروتوكول مختار الهدف والتكرارات نفسها. وIPv4/IPv6 وHTTP/HTTPS خيارات مقارنة صريحة. ويستخدم المخطط البديل منفذه الافتراضي. ويبدأ كل بروتوكول عملية مستقلة للعميل المضمّن لكل عيّنة. ولا يُدّعى إعادة استخدام الاتصال. وتشمل إحصاءات الوقت الإجمالي الحد الأدنى/المتوسط/الوسيط/الحد الأقصى/P95 بطريقة أقرب رتبة، ومعدل أخطاء منفصلًا للنقل/البروتوكول؛ وتظل رموز حالة HTTP ظاهرة حتى عندما يعيد الخادم بنجاح استجابة 4xx/5xx.
يرسل فحص الضغط identity وgzip وdeflate وbr و(عندما تدعمه بيئة التشغيل) zstd كطلبات Accept-Encoding منفصلة. ويجب أن يتطابق Content-Encoding، ويجب أن ينجح فك الضغط المحدود. ولا تُحسب النسبة إلا إذا تطابقت تجزئة المحتوى المفكوك وعنوان URL النهائي والحالة مع خط الأساس identity. وتُعد الترميزات المتجاهلة غير مدعومة؛ ولا نسبة للمحتوى المتغير/الديناميكي. وهذه ملاحظة لذلك العنوان/الحالة، وليست دعمًا عامًا من الخادم.
تعرض فحوص ترويسات الأمان وجود HSTS وCSP وX-Content-Type-Options وReferrer-Policy وPermissions-Policy وX-Frame-Options وقيمها. ويمكن لتوجيه frame-ancestors في CSP أن يحل محل الأخيرة. ولا يثبت الوجود أن السياسة مهيأة بشكل صحيح أو أن الموقع آمن.
متطلبات HTTP/3 وإثباته
تستخدم HTTP/1.1 وHTTP/2 وHTTP/3 عميل curl المضمّن نفسه. يستخدم macOS arm64 وLinux x64 الإصدارات curl 8.22.0 وOpenSSL 3.5.9 وnghttp2 1.70.0 وngtcp2 1.25.0 وnghttp3 1.18.0. ويستخدم Windows x64 البناء الثابت الرسمي curl-for-win 8.22.0_3 من curl.se مع LibreSSL 4.3.3 ومكتبات HTTP نفسها. لا حاجة إلى الرجوع إلى curl الخاص بالنظام ولا إلى تنزيل أثناء التشغيل ولا إلى صلاحيات المسؤول. وصفة البناء الأصلية القابلة لإعادة الإنتاج لـ Windows هي https://github.com/curl/curl-for-win/tree/9d77e31e .
ابنِ باستخدام python3 scripts/native/build.py (على Windows: python scripts/native/build.py) قبل التحزيم. يتطلب macOS/Linux أدوات C/C++ وCMake وNinja وPerl وmake وpkg-config. تُثبَّت المصادر حسب الإصدار وقيمة SHA-256 الأصلية في scripts/native/dependencies.lock.json. يتحقق السكربت من كل تنزيل، ويربط مكتبات النقل الخاصة بالأطراف الثالثة ربطًا ثابتًا، ويفشل عند غياب ميزات HTTP2/HTTP3/SSL. ولا تبقى ديناميكية إلا مكتبات نظام التشغيل. يستخدم Windows أرشيفًا ثنائيًا رسميًا مثبّت الإصدار، لا حزمة نقل لـ Windows مبنية محليًا. ولملف CA المضمّن قيمة تجزئة مثبّتة خاصة به؛ وترافق بيئة التشغيل تراخيص المكوّنات ومصدر البناء الأصلي.
يُثبَّت العميل ومخزن الثقة خارج app.asar في resources/native-runtime/<platform>-<arch>/. يتحقق كل تشخيص من تجزئات المكوّنات والبنية وقدرات الملف التنفيذي قبل الاستخدام. وتُستبعد ملفات الإعداد والوكلاء (proxies) وتجاوزات بيئة الثقة الخاصة بـ TLS ومتغيرات حقن المكتبات. يعمل curl بمسار مطلق، مع تعطيل الصدفة، وثقة CA متحقق منها، وعائلة IP محددة صراحةً، دون ملفات تعريف الارتباط ودون إعادة توجيه تلقائية، ومع مخرجات ووقت محدودين. يتحقق التطبيق من عمليات إعادة التوجيه ويعيد حلّها. ويُدعم HTTPS على منافذ غير 443.
يستخدم HTTP/3 الخيار --http3-only، ولا يُؤكَّد إلا بعد نقل مكتمل يُبلغ عن الإصدار 3 من HTTP وتحقق ناجح من الشهادة. ويمكن لاستجابات أخطاء HTTP مثل 404 أن تؤكد البروتوكول. Alt-Svc إعلان وليس دليلًا. وتبقى حالات انتهاء مهلة QUIC وفشل الشهادة وفشل DNS ورفض الاتصال وعدم توافق البروتوكول وفشل المكوّنات متمايزة. ويترك انتهاء مهلة UDP دعم الخادم غير متحقق منه. ولا يُبلغ عن توقيت مصافحة QUIC على أنه توقيت TCP.
يبدأ كل قياس عملية/اتصالًا منفصلًا. ولا يدّعي خيار warm إعادة استخدام الاتصال مع العميل المضمّن. وهذا يحافظ على اتساق مقارنات البروتوكولات. تتضمن التقارير إصدارات بيئة التشغيل والقدرات والتحقق من TLS وتوقيت QUIC، بينما يزيل السجل/التصدير المحتوى واستعلامات URL وترويسات المصادقة.
حدّث هذه القيم المثبّتة وأعد البناء لكل منصة مدعومة عند تحديث حزمة النقل أو مخزن ثقة CA. والملفات المنشورة ولقطات المصدر غير قابلة للتغيير.
IPC الخاص بـ Core
لا يتيح preload سوى window.chjCore.diagnostics؛ وتحتفظ جميع المعالجات بفحص المرسل القائم للنافذة الرئيسية، وتبقى أعمال الشبكة في العملية الرئيسية. تستخدم النتائج { ok: true, value } أو { ok: false, error: { code, message } }.
| القناة / طريقة preload | الحمولة / النتيجة |
|---|---|
diagnostics:resolve / resolve(options) |
هدف/إعدادات متحقق منها ← الهدف والعناوين المحلولة. طلبا حلّ متزامنان كحد أقصى. |
diagnostics:start / start(options) |
هدف/إعدادات/اختيار أدوات متحقق منها ← معرّف مهمة معتم وتقرير أولي. |
diagnostics:cancel / cancel(id, tool?) |
إلغاء أداة واحدة نشطة/في قائمة الانتظار أو التشغيل بأكمله. |
diagnostics:get / get(id) |
لقطة لتشغيل معروف أو تقرير محفوظ. |
diagnostics:history / history() |
ملخصات السجل المحلي. |
diagnostics:removeHistory / removeHistory(id) |
إزالة عنصر السجل المختار. |
diagnostics:copy / copy(id, format) |
تكتب العملية الرئيسية تقريرًا معروفًا بعد إخفاء بياناته الحساسة إلى الحافظة. |
diagnostics:export / export(id, format) |
JSON/CSV/TXT عبر نافذة حفظ أصلية؛ ولا يمكن للـ renderer تقديم مسار في نظام الملفات. |
diagnostics:import / import() |
منتقي ملفات أصلي، وتحقق من الحجم/المخطط/العمق، وإخفاء البيانات قبل التخزين. |
diagnostics:progress / onProgress(callback) |
العناوين المحلولة، وبدء الأدوات/اكتمالها، والحزم، والقفزات، وعيّنات HTTP، والاكتمال؛ ويعيد دالة استدعاء لإلغاء الاشتراك. |
لا تُتاح أي واجهة API عامة للصدفة أو نظام الملفات أو الشبكة. ويظل عزل السياق وsandbox وتعطيل تكامل Node وCSP القائم للـ renderer مفعّلة. ولم تتغير عقود الإضافات القائمة ولا تحقق المحدِّث/استثناءاته.
الميزانيات والبيانات المحلية
- تشغيل واحد، وأداتان نشطتان، ومجسّان كحد أقصى لعائلتي IP لكل أداة؛ كما يقصر TCP كل عنوان على أربعة اتصالات.
- مهلة لكل عملية من 250 إلى 30000 ms؛ ومن 1 إلى 100 حزمة، ومن 1 إلى 20 تكرارًا، ومن 1 إلى 40 قفزة، ومن 1 إلى 16 منفذًا. تتوقف عمليات التشغيل العادية عند خمس دقائق؛ وping المستمر عند ثلاثين دقيقة. ولعملية traceroute الفرعية حد إضافي قدره 180 ثانية.
- مخرجات العملية عادةً 256 KiB؛ ومحتوى كيان HTTP 2 MiB؛ والمحتوى بعد فك الضغط 8 MiB؛ وترويسات HTTP محدودة؛ ولا يدخل أي محتوى استجابة إلى السجل.
- يُحتفظ بـ 500 حزمة/حدث تقدم كحد أقصى، وخمس عمليات تشغيل في الذاكرة، وثلاثين تقريرًا في السجل، و10 MiB من السجل. ويستخدم السجل أداة الكتابة الذرية الخاصة القائمة في
<userData>/diagnostics/history.json(الوضع 0600). - الاستيراد بحد أقصى 2 MiB، والمخطط 1، مع تداخل محدود ومجموعات نتائج متحقق منها. تُهرَّب خلايا CSV وتُحيَّد بادئات الصيغ. وتُستبعد استعلامات/أجزاء URL وبيانات الاعتماد وملفات تعريف الارتباط وترويسات المصادقة والمحتوى الخام من التقارير المخزنة/المنسوخة/المصدّرة. وتعرض التفاصيل الخام بيانات منظّمة مقاسة، لا التقاطًا للحزم ولا محتوى استجابة محفوظًا.
- لا مزامنة سحابية، ولا تسجيل دخول تلقائي، ولا تغييرات في إعدادات الخادم، ولا فحص عدواني/غير محدود. يختار المستخدم الهدف/المنافذ/المحلّل صراحةً.
متطلبات المنصات والتحقق
| المنصة | ICMP | المسار | بروتوكولات أخرى |
|---|---|---|---|
| Windows 10/11 | ping.exe -4/-6 |
tracert.exe -4/-6، ICMP |
curl.exe المضمّن مع HTTP/2 وHTTP/3. لا تعتمد حقول RTT المترجمة على كلمة “time”. |
| macOS | /sbin/ping، /sbin/ping6 |
/usr/sbin/traceroute، /usr/sbin/traceroute6، UDP؛ أوقات انتظار بالثواني الصحيحة |
curl المضمّن مع HTTP/2 وHTTP/3. |
| Ubuntu/Linux | iputils ping -4/-6 |
traceroute -4/-6 القياسي، UDP |
curl المضمّن مع HTTP/2 وHTTP/3؛ ويُبلغ عن غياب أدوات ICMP/المسار بشكل منفصل. |
لم تُضف أي تبعية npm جديدة. يستخدم التنفيذ الوحدات المدمجة في Node وتبعية ssh2 القائمة في التطبيق. ولا يثبّت أدوات النظام ولا يطلب صلاحيات إدارية. قد تمنع جدران الحماية وقيود UDP اختبارًا ما من إثبات الدعم؛ ولا يمكن استنتاجها من انتهاء المهلة وحده.
التغطية الآلية موجودة في diagnosticsCore.test.js وdiagnosticsNetwork.test.js وdiagnosticsHttp.test.js وdiagnosticsIpc.test.js: التحقق/عناوين IPv6 الحرفية، وبيانات DNS التجريبية الأصلية/المحلية عبر UDP+TCP، والإجابات المفقودة/ثنائية العائلة وأخطاء المحلّل، وCNAME/الاتساق، وبيانات وسائط/تحليل نظام التشغيل التجريبية، والعمليات الفرعية الحقيقية المحدودة، وملاحظات ICMP المحظور، وHTTP/1.1 وTLS h2 محليين حقيقيين، وإعادة التوجيه/حدود المحتوى/المهلات/إعادة الاستخدام، والضغط المفعّل/المتجاهل، وقدرات HTTP3/تحليل نتائج النجاح/رفض الرجوع، وثقة CA المحلية/عدم التطابق/الانتهاء وHTTP/HTTPS حقيقيين عبر IPv6، واتصال TCP/الرفض/المهلة الوهمية، ومصافحات WebSocket وSSH الحقيقية قبل المصادقة، والإلغاء/التنظيف/النتائج الجزئية، وحالة عدم الاتصال، والحفظ والقراءة الخاصين بالسجل/رفض الاستيراد/التصدير، وIPC الموثوق، واشتراكات preload.
يشغّل npm test اختبارات حتمية دون خوادم اختبار عامة. ويشغّل npm run test:diagnostics:ui الملف scripts/smokeDiagnostics.js في سطح مكتب Electron رسومي، باستخدام الواجهة/preload/IPC الخاصة بالإنتاج ومجسّات HTTP/ضغط محلية حقيقية. ولا تُحاكى الخدمات غير ذات الصلة أو تُفصل إلا في حزمة الاختبار هذه. ويفحص ترتيب التنقل ونتائج البروتوكولات والاستمرارية وCZ/DE/EN والسمتين والفيض في النوافذ الضيقة وتفضيلات sandbox. إذا كانت الصدفة تعيّن ELECTRON_RUN_AS_NODE، فألغِ تعيينه لهذا الأمر.
يغطي التحقق الحالي من بيئة التشغيل عمليات نقل QUIC محكومة، وIPv4/IPv6، وHTTPS على منفذ غير افتراضي، واستجابات 404، وأعطال TLS، وخدمة تعمل عبر TCP فقط وتعلن Alt-Svc. وترافق نتائج كل بناء كل إصدار.
قيود اختيارية صريحة: لا تحقق مستقلًا من DNSSEC (يتطلب محلّلًا متحققًا كاملًا ودورة حياة لمرساة الثقة)، ولا تدقيق Lighthouse (توقيتات الخادم/الشبكة فقط)، ولا تدقيق لإصدارات TLS المهملة ولا خدمة إبطال/CT، ولا ادعاء بإعادة الاستخدام المسبق لـ HTTP3، ولا قياس لإعادة الاستخدام المسبق لـ HTTP/3. وتُعرض القدرات غير المدعومة بدلًا من محاكاتها.
الملفات في هذا التغيير
أُنشئت: ملفات الخدمة السبعة في src/main/diagnostics/؛ وsrc/renderer/diagnostics.js وdiagnosticsI18n.js وdiagnostics.css؛ وملفات test/diagnostics*.test.js الأربعة؛ وخمسة ملفات ضمن test/fixtures/diagnostics/؛ وscripts/smokeDiagnostics.js؛ وهذه الوثيقة.
دُمجت/حُدّثت: src/main/index.js وsrc/main/ipc/registerCoreIpc.js وsrc/preload/corePreload.js وsrc/renderer/index.html وapp.js وi18n.js وpackage.json وapp/README.md وREADME.md في الجذر و.gitignore (أربعة استثناءات لبيانات تجريبية عامة)، وقائمة السماح الخاصة بـ gitleaks في الجذر التي تسمّي بدقة بيانات مفتاح اختبار TLS التجريبية المنشورة عن قصد. وقد تم التخلص من المفتاح الخاص لجهة CA الموقِّعة؛ ولا تستخدم بيئة تشغيل التطبيق هذه البيانات التجريبية أبدًا.