schoolos-watch
> متى تُستعمل: "Use for SchoolOS operational monitoring (session «0203 · الرصد والإنذارات»): alert sources (production /health/, uptime/worker-heartbeat issues, CI on main, backups, memory, GitHub sec
SKILL.md.claude/skills/schoolos-watch/SKILL.md
GitHubمتى تُستعمل: "Use for SchoolOS operational monitoring (session «0203 · الرصد والإنذارات»): alert sources (production /health/, uptime/worker-heartbeat issues, CI on main, backups, memory, GitHub security alerts, orphan worktrees by PR state), running watch_once.py, grading S1/S2/S3, whom to notify, false alarms, daily summary. Trigger on: watch_once, monitoring round, UPTIME FAILED, 500, main is red, backup failed, claude_backup, orphan tree, secret scanning, Dependabot alert, false alarm, U-01 window. استخدمها عند «هل الإنتاجُ سليم؟»، «main أحمر»، «فشل النسخ»، «الذاكرة حمراء»، «شجرةٌ يتيمة؟»، «تنبيهٌ أمنيّ»، «إنذارٌ كاذب؟»، «ما درجتُه ولمن أبلّغ؟»، «ملخّص الرصد» — ولو لم تُذكر. ليست لـ: قيادة حادثٍ مُعلن (maestro-incident)، النشر والرجوع (schoolos-deploy)، قياس المؤشّرات (schoolos-quality-guards)، رسائل المستخدمين (schoolos-feedback-intake)، أرشفة شجرة (maestro-archive-check)، N+1 (nplus1-hunter)، 8500 (schoolos-preview-8500)، الهجرات (schoolos-migration-guard)، إصلاح العطل (schoolos-debugger)."
الرصدُ والإنذارات — SchoolOS
الغرض: أن يُكتشف العطلُ قبل المستخدم، ويُصنَّف بدرجته، ويبلغ صاحبَه في زمنه — بقراءةٍ وتقاريرَ فقط.
الجلسةُ «0203 · الرصد والإنذارات» عينٌ لحظيّة: لا تُصلح ولا تنشر ولا تعيد تشغيلَ الإنتاج. المصدر: ~/delivery_manager_work/docs/tab_charters.md (ميثاق 0203).
متى تُستعمل ومتى لا
- نعم: جولةُ رصدٍ دوريّة؛ إنذارٌ من أيّ مصدر (قضيّةٌ آليّةٌ في GitHub،
watch_once، فشلُ تشغيلٍ على main، رسالةُ جلسة)؛ الحكمُ على إنذارٍ أصادقٌ هو؛ تصنيفُ الدرجة والمُبلَّغ؛ الملخّصُ اليوميّ. - لا: قيادةُ حادثٍ أُعلن (المايسترو بـ
maestro-incident)؛ تحقّقُ ما بعد نشرٍ بعينه وأوامرُ Railway (schoolos-deploy)؛ اتّجاهُ المؤشّرات والميزانيّات بعد النشر (schoolos-quality-guards— «0203 للإنذار اللحظيّ و0702 للقياس الدوريّ»)؛ رسائلُ المستخدمين (schoolos-feedback-intake)؛ أرشفةُ شجرةٍ أو إزالتُها؛ خطواتُ الفلو والدفع (schoolos-flow).
الإجراء
- الوقتُ من الأداة لا بالتقدير: حقلُ
generated_dohaفي مخرجwatch_once، وأوقاتُ GitHub بتوقيت UTC فأضِف 3 ساعات. المصدر:feedback_doha_time_on_windows. - شغّل المراقب:
python ~/delivery_manager_work/tools/watch_once.py --json(نحو 50 ثانية حيّاً؛--no-liveللذاكرة وحدها). رمزُ خروجه 0 دائماً — اقرأ مصفوفةَalertsلا الرمز. - أكمِل ما لا يغطّيه: صحّةُ الإنتاج وقضاياها، ونسخُ قاعدة الإنتاج، وحزمةُ git الليليّة، وتنبيهاتُ الأمن، وحالةُ دمج الطلبات — بأوامرَ قرائيّةٍ مجرَّبة في
references/00-sources-and-commands.md. - افحص كلَّ إنذارٍ قبل رفعه: أصادقٌ أم كاذبٌ معروف؟ (
references/02-false-alarms.md). لا ترفع S1 بقراءةٍ واحدةٍ من مصدرٍ واحد إن أمكنت قراءةٌ ثانيةٌ مستقلّة في دقائق. - صنّف: S1 أو S2 أو S3 أو «تدفّق» (ليس حادثاً) — الجدولُ والأمثلة في
references/01-severity-classification.md. - أبلغ بالصيغة والزمن: S1 للمايسترو والمالك خلال 15 دقيقة بسطرٍ واحد؛ S2 للمايسترو بثلاثة أسطر؛ S3 بطاقةٌ إلى «0204 · البوابة الموحّدة»؛ والكاذبُ إغلاقٌ مسبَّب، وتكرارُه بطاقةُ إصلاحٍ للأداة.
- سجّل كلَّ إنذارٍ وحكمَه في الملخّص اليوميّ (
references/03-daily-summary.md).
القواعد وأسبابها
- قراءةٌ وتقاريرُ فقط. لا إصلاحَ ولا نشرَ ولا إعادةَ تشغيلٍ ولا
railwayبأيّ صورة؛ أوامرُ الإنتاج بيد المالك. والسبب مزدوج: الميثاقُ يحصرها، ومصنِّفُ الوضع التلقائيّ يحجب قراءةَ الإنتاج وكتابتَه عبر Railway ولو أذن المالك في المحادثة — فإن لزم أمرٌ فاكتبه نصّاً جاهزاً للمالك عبر المايسترو. المصدر: ميثاق 0203؛feedback_auto_classifier_production_actions. - الشجرةُ اليتيمة تُحكم بحالة طلب فرعها لا بـ
git rev-list. الدمجُ بالسحق يصنع إيداعاً جديداً في main فيبقى كلُّ إيداعٍ في الفرع «غيرَ مدموج» فيrev-listوgit cherry؛ فأُعلنت أشجارٌ اندمج عملُها يتيمةً. المصدر:tools/branch_status.py(قياس 09-28: vision-footer ← #714، qcc-collectors ← #707). - غيابُ الإنذار لا يثبت السلامة. جدولةُ GitHub بأفضل جهد (قيس 09-25 نحو 7% من وتيرة فحص الإنتاج و4% من فحص العامل)، و
watch_onceيسكت إن فشلgh run list. فالجولةُ تقرأ الصحّةَ مباشرةً ولا تكتفي بخلوّ القضايا. المصدر:.github/workflows/monitor.ymlوworker-heartbeat.yml؛watch_once.py(سطور 97–101). - النسخُ يُحكم عليه بعمر آخر ناتجٍ لا بنتيجة المهمّة المجدولة. نسخُ
~/.claudeتعطّل صامتاً أربعةَ أشهرٍ ونصفاً والمهمّةُ تُسجَّل ناجحة. المصدر:project_claude_backup_stale_lock_2026_09_28. - الذاكرةُ تنبيهٌ لا مانع (D-51م): الأحمرُ يُرفع للمايسترو ليُبلغ المالكَ ويُفتح بالتتابع، ولا توقَف به جلسةٌ ولا تُؤرشف — لا أرشفةَ إلّا بأمر المالك. المصدر:
decisions.mdD-51م؛thresholds.json؛feedback_never_archive_without_order. - لا مضيفَ إنتاجٍ ولا سرَّ في أيّ مخرج: المستودعُ عامّ، والتقاريرُ تُنقل بين الجلسات. اذكر «نقطة
/health/» بالمسار، والعنوانُ يُقرأ من السكربت وقتَ التشغيل لا يُكتب. المصدر: ميثاق 0203 («لا أسرارَ في أيّ مخرج»). - خاطِب الجلساتِ بأسمائها في الشريط (مثل «0601 · النشر على الإنتاج والدمج») لا بأرقام المنافذ. المصدر:
feedback_address_sessions_by_name. - في نوافذ تشغيل الإنتاج (U-01، وU-03، والتجميد) لا يُقترح نشرٌ ولا إعادةُ تشغيلٍ في ساعتها، وأيُّ نشرٍ يُرصد فيها يُبلَّغ فوراً. التفصيلُ في المرجع 01.
فخاخ
- خطأ: «رمزُ خروج
watch_onceصفرٌ إذن لا شيء» ← الصواب: الرمزُ صفرٌ ولو كانت الذاكرةُ حمراء (قيس 09-28)؛ اقرأalerts. - خطأ: «
git rev-list origin/main..HEADيعطي 8 إيداعات، فالشجرةُ يتيمة» ← الصواب: احكم بحالة طلب الفرع (watch_onceيفعل ذلك، وarchive_check.pyلشجرةٍ واحدة)؛ وغيابُ تنبيهٍ لشجرةٍ بلا جلسةٍ مسمّاة يعني أنّ عملَها مدموجٌ أو له طلبٌ مفتوح (أشجارُ الجلسات المسمّاة لا يفحصها أصلاً). - خطأ: «
main_red: CI مكسور» ← الصواب: اقرأ أسماءَ التشغيلات: التشغيلاتُ المجدولة (Nightly، Uptime) تُعدّ على main أيضاً، وفشلُ Uptime إشارةُ إنتاجٍ (S1 محتمل) لا CI؛ وإيداعٌ واحدٌ سيّئٌ يُسقط ثلاثَ وظائف معاً. - خطأ: «
/health/أخضر فالإنتاجُ سليم» ← الصواب: حادثة 2026-09-17:/health/أخضرُ ساعتين وكلُّ صفحةٍ 500؛ فاقرأ معهauth/login/وقضيّةَ الكنار، وقارنcommitبما يُنتظر. - خطأ: «
LastTaskResult=0لمهمّة النسخ = نسخٌ سليم» ← الصواب: عمرُ آخر إيداعٍ في فرعscoped≤ 36 س، وغيابُbackups/BACKUP_FAILED.txt. - خطأ: «أقدمُ طلبٍ عمره 73 ساعة — S1/S2» ← الصواب: هذا «تدفّق» لا حادث، وقد يكون طلباً آليّاً (dependabot) أو محجوزاً بقرار (#631 «بعد U-01»)؛ يُذكر في الملخّص ولا يُصعَّد.
- خطأ: «سأطفئ الخادمَ الخامل / أعيد تشغيل العامل لأُسكت الإنذار» ← الصواب: خارج حدودك؛ الإنذارُ بطاقةٌ أو إبلاغ، والإصلاحُ لصاحب المكوّن.
- خطأ: «
TZ=Asia/Qatar dateيعطي وقت الدوحة» ← الصواب: في Git Bash يطبع UTC صامتاً.
المراجع
| الملف | متى تقرؤه |
|---|---|
references/00-sources-and-commands.md |
قبل كلّ جولة: المصادرُ الثمانية، وما يغطّيه watch_once وما لا يغطّيه، والأوامرُ القرائيّةُ المجرَّبة |
references/01-severity-classification.md |
عند تصنيف أيّ إنذار: جدولُ S1/S2/S3 بأمثلة، والمُبلَّغ وزمنُه وصيغتُه، والنوافذ |
references/02-false-alarms.md |
حين يبدو الإنذارُ غريباً أو متكرّراً، أو قبل إغلاقه، أو حين يغيب إنذارٌ متوقَّع |
references/03-daily-summary.md |
عند كتابة الملخّص اليوميّ أو تقرير الإغلاق |
references/99-test-cases.md |
عند تعديل المهارة أو اختبار تفعيلها |