تنزيل Markdownالوثيقة الأصلية على GitHub
قبول تكامل التطبيق
تحصل فحوص وضع الحساب الآن على تأكيدات هوية قصيرة العمر. حالة شراء Launch السلبية دليل شراء فقط، وليست دليل رفض Licentivo وقت التشغيل. يتطلب إثبات التشغيل فحص SDK الرسمي؛ ولا يعني ذلك نشر الإنتاج أو إصدار SDK. راجع حدود الحساب.
يوجد مستويان منفصلان للأدلة: فحوص محلية آلية مضبوطة وفحوص sandbox خارجية للتاجر. لا يثبت بديل الاختبار أو قراءة كتالوج ناجحة أو إعداد ناتج أو فحص صحة ناجح دفعًا حقيقيًا أو إصدار ترخيص أو تفعيلًا. أُجّل إعداد الخدمة الخارجية صراحة في دورة التطوير هذه.
الفحوص المحلية الآلية
شغّل من جذر المستودع:
go test ./...
go vet ./...
node --check internal/httpapi/web/app.js
node --check internal/httpapi/web/integration.js
node --check internal/httpapi/web/integration-prompts.js
node --test scripts/integration-prompts.test.mjs scripts/integration-state.test.mjs
python scripts/test_acceptance.py
./scripts/test-mysql.ps1
ينشئ مساعد MySQL خادمًا وقواعد بيانات معزولة جديدة تحت .cache؛ ويجب ألا يوجّه إلى قاعدة بيانات عميل. يتخطى go test ./... العادي سيناريوهات قاعدة البيانات ما لم تُقدم DSNs المعزولة. توصف اختبارات وبناء SDK/الحزم في integration-packages.md. احتفظ بمخرجات الاختبار وإصدارات الأدوات مع سجل الإصدار.
تتضمن المصفوفة المحلية المصادقة والتحقق المشروط من البريد وملكية المنتج/البيئة والحالة المعلقة/المنتهية/المعلقة مؤقتًا وإعادة أحداث الدفع وتسوية الترخيص والتجديدات/الاستردادات وتبديل الحساب واستمرار الجلسة المحمية وقرارات الرجوع دون اتصال. تستخدم اختبارات دورة الحياة بيئات تشغيل مضبوطة؛ ويظل التحقق التشفيري الفعلي وقت التشغيل مسؤولية SDK الرسمي ويُختبر بصورة منفصلة قبل الإصدار.
بالنسبة إلى أدوات التشغيل → التكامل السريع بالذكاء الاصطناعي، افحص خيارات اللغات التسع واختيار المنصة/المشروع/الميزة ومسودة غير مهيأة وتعليمات منشأة من إعداد عام متحقق منه. تحقق من النسخ والتنزيل مقابل التعليمات الظاهرة، وتأكد من أن تغيير المنتج أو البيئة لا يحتفظ بإعداد متحقق سابق. يجب أن تستبعد التعليمات الجلسات وكلمات المرور وبيانات ترخيص/جهاز التشغيل ومفاتيح الإدارة؛ وألا يستدعي إنشاء التعليمات أو نسخها خدمة AI. يختبر أمر Node لحزمة المصدر أعلاه المولّد الخالص. تظل التعليمات الناتجة أو الرمز الذي تنتجه أداة AI لاحقًا بحاجة إلى اختبارات اللغة وخطوات القبول الخارجية أدناه.
إعداد قبول sandbox الخارجي
- انشر مثيل اختبار Launch مخصصًا بمصدر HTTPS يمكن الوصول إليه وwebhooks للموفّر. أبقِ مبيعات live معطلة.
- هيئ بيانات sandbox لـ موفّر دفع واحد واتصال قراءة/كتابة بـ Licentivo. سجلات بيئة الدفع التجريبية معزولة، لكنها تظل تستخدم خدمة Licentivo المهيأة ويمكنها إنشاء تراخيص اختبار وسجلات أجهزة حقيقية. استخدم منتج/سياسة اختبار مخصصين وعملاء اختبار.
- انشر خطة sandbox واستخدم تكامل التطبيق لتصدير
launch-config.jsonوproduct.jsonالمتحقق منه إلى.local/acceptance/. - ثبّت حزمة Launch Python المراجعة محليًا فقط:
python -m pip install ./sdk/python، أو ثبّت ملف wheel الخاص بها. يتضمن تنفيذ SDK الخاص. - استخدم ميزة اختبار غير مقاسة مثل
export. يبدأ--activateتشغيل SDK الرسمي، ويستدعيrefresh_online()بصورة متزامنة، ويتطلب حالة اتصال نشطة، ويستدعي واجهة العملية المحمية. لا تستطيع منحة دون اتصال مخزنة مؤقتًا وحدها اجتياز هذا الفحص؛ ولا يختبر هذا الفحص القياس.
تُطلب بيانات الاعتماد دون إظهارها. يمكن للأتمتة تقديم LAUNCH_ACCEPTANCE_EMAIL وLAUNCH_ACCEPTANCE_PASSWORD في بيئة عمليتها الخاصة. لا تضع كلمات المرور في وسائط الأوامر أو التقارير أو لقطات الشاشة أو الملفات المعتمدة. تلغي الأداة جلستها المؤقتة لسطح المكتب بعد كل فحص مصادق عليه، لكنها لا تلغي تفعيل الأجهزة عند الخروج العادي.
python scripts/acceptance.py preflight --config .local/acceptance/launch-config.json --report .local/acceptance/01-preflight.json
python scripts/acceptance.py verify --config .local/acceptance/launch-config.json --expect not_purchased --report .local/acceptance/02-no-purchase.json
ترفض الأداة إعداد بيئة live وHTTP غير الحلقي وإعادة التوجيه الحاملة لبيانات اعتماد والمنتجات غير المتطابقة والإعداد العام الذي يحتوي على أسرار تشغيل. وترفض تأكيدات التفعيل/الطلب خارج verify وخيارات إنشاء الدفع خارج checkout قبل تقديم الطلبات. لا تُستبدل التقارير الموجودة مطلقًا. تحتوي التقارير على أدلة من قائمة مسموحة، وليس استجابات خامًا أو رموز وصول أو مفاتيح ترخيص. يؤدي غياب الخادم أو SDK إلى فشل الفحص، وليس نجاحًا مصطنعًا.
تستخدم فحوص التاجر المحلية scope: local_sandbox_probe وlicensing_scope: not_called. يتصل verify --activate بخدمة الترخيص الخارجية الرسمية حتى عندما يعمل التاجر على localhost؛ ويُسجل هذا الجمع كـ local_merchant_external_licensing_probe مع licensing_scope: official_external_service.
الدفع والتفعيل الأول
أنشئ عملية دفع اختبارية في موقع التاجر، أو أنشئ واحدة باستخدام UUID عملية ثابت:
$operation = [guid]::NewGuid().ToString()
python scripts/acceptance.py checkout --config .local/acceptance/launch-config.json --provider stripe --plan-version-id PLAN_VERSION_UUID --operation-id $operation --report .local/acceptance/03-checkout.json
استبدل الموفّر وإصدار الخطة بخطة sandbox المنشورة الخاصة بك. احتفظ بمعرّف UUID العملية نفسه وأعد استخدامه عند إعادة محاولة إنشاء دفع غير مؤكد. تطبع الأداة معرّف الطلب. أكمل ذلك الطلب المملوك عبر مركز حساب التاجر باستخدام صفحة sandbox الرسمية للموفّر. لا يحاكي الفحص تفاعلات واجهة الموفّر عمدًا.
بعد تأكيد الموفّر الدفع واستلام webhook:
python scripts/acceptance.py verify --config .local/acceptance/launch-config.json --order-id ORDER_UUID --expect-order paid --expect active --activate --product-config .local/acceptance/product.json --feature export --report .local/acceptance/04-activation.json
يفحص هذا الحساب المصادق عليه وطلب sandbox المملوك والاستحقاق وتطابق بيانات الاعتماد/المنتج وعملية محمية فعلية من SDK الرسمي. تُحاول حالة الترخيص المعلقة خمس مرات كحد أقصى ضمن نافذة محدودة (الافتراضي 30 ثانية، والحد الأعلى 120)، مع الالتزام بـ Retry-After. يُسجل فشل الترخيص غير المتوقع دون كشف نص خطأ SDK الخام.
مصفوفة قبول دورة الحياة
لكل زوج لغة/نظام تشغيل صادر، احفظ سجلًا مؤرخًا بمراجعة المصدر وإصدارات Launch/العميل/SDK وبيئة الموفّر وتسمية عميل مجهولة ومعرّفات الطلبات والنتيجة المتوقعة والمرصودة واسم ملف التقرير المعني. ضع علامة not run على الصفوف غير المنفذة. لا تضع علامة نجاح على المصفوفة كلها من فحص الدفع الأول.
| السيناريو | الإجراء | الأدلة المطلوبة |
|---|---|---|
| التسجيل / التحقق | سجّل دون شراء؛ وكرر مع تفعيل التحقق وتعطيله | لا يمنع التحقق المعطل؛ وينتج التحقق المفعل EMAIL_VERIFICATION_REQUIRED حتى اكتماله |
| لا يوجد شراء | شغّل verify --expect not_purchased |
رُفضت بيانات الاعتماد؛ لا تعمل أي عملية محمية |
| الشراء الأول | أكمل دفع sandbox ثم شغّل فحص التفعيل | يؤكد الموفّر الدفع؛ استحقاق مدفوع واحد وترخيص متزامن واحد ونجاح عملية SDK |
| إعادة التشغيل | أغلق مثال اللغة المختارة مع تذكر الدخول، وابدأ عملية جديدة واستعد الجلسة | لا طلب لكلمة المرور؛ ذاكرة الحساب/المنتج نفسها ومنحة موقعة صالحة |
| بدء التشغيل دون اتصال | بعد تفعيل ناجح مع تذكر الدخول، عطّل الشبكة لعملية/جهاز الاختبار وأعد التشغيل | تسمح المنحة الموقعة المخزنة مؤقتًا بالعمليات التي تسمح بها السياسة فقط؛ وترفض سياسة منع الاتصال غير المتصل/المقاعد العائمة بدء التشغيل |
| انتهاء عدم الاتصال / إرجاع الساعة | استخدم سياسة اختبار قصيرة العمر وجهاز اختبار قابلًا للاستغناء | يرفض SDK الحالة المنتهية/المرجعة؛ ولا ينفذ رد نداء الميزة |
| التجديد / الترقية | اشترِ تجديدًا أو ترقية بعرض عبر متجر sandbox | الطلب/التغطية صحيحان؛ تظهر الصلاحية/الميزات الجديدة بعد المزامنة وتحديث SDK |
| الاسترداد | اطلب/وافق على استرداد sandbox كامل؛ وانتظر تأكيد الموفّر | يتفق استرداد الموفّر والتغطية المحلية؛ استخدم verify --expect suspended أو --expect expired حسب الحالة؛ وتبقى التغطية المدفوعة الأخرى قابلة للاستخدام |
| الخروج / تبديل الحساب | أخرج A، وسجل الدخول كـ B دون شراء؛ أعد التشغيل وافحص السلوك | أُزيلت جلسة/ذاكرة A المحفوظة؛ ولا يستطيع B استخدام ترخيص A أو أجهزته أو ميزاته |
| عزل المنتج / البيئة | استخدم منتجًا آخر وبدّل إعدادات sandbox/live بصورة منفصلة | لا تستطيع بيانات الاعتماد والذاكرات المؤقتة عبور نطاقات الهوية؛ ويرفض الفحص الخارجي نفسه live |
| امتلاء الأجهزة / التحرير | فعّل على الحد الأقصى للأجهزة الاختبارية المتميزة وفق السياسة؛ حاول جهازًا إضافيًا ثم حرر جهازًا صراحة | يرفض SDK الجهاز الزائد ويسمح بالاستبدال بعد تأكيد التحرير؛ ولا يستهلك الإغلاق العادي حصة التحرير |
| الاستعادة | أعد تشغيل Launch أثناء انتظار الإصدار، وأعد تشغيل webhook موقّع من sandbox | تغطية/ترخيص طلب واحد وتسوية لاحقة؛ دون دفع أو خصم مكرر |
تظل آثار الاسترداد/التعليق على منحة دون اتصال صادرة سابقًا مقيدة بسياسة عدم الاتصال الموقعة من SDK الرسمي. لا يُدعى الإلغاء الفوري أثناء انقطاع الاتصال. قد يؤدي تعطل Launch الطويل عند انتهاء العقد إلى تأخير التعليق لدى المصدر؛ راجع قيود العقد.
الاكتمال والأدلة المحتفظ بها
يعيّن كل تقرير فحص عمدًا acceptance_complete: false: فهو يسجل فقط الفحوص المنفذة فعليًا في ذلك الاستدعاء. راجع المصفوفة وسجلات الموفّر قبل قبول الإصدار. هيئ الخدمات الخارجية لاحقًا واستأنف الأوامر أعلاه؛ ولا تستبدل النتائج الناقصة بعلامة نجاح أو تفعّل مبيعات live لمجرد نجاح الاختبارات المحلية.