تصبح سجلات المحادثات الخام غير قابلة للقراءة عند التعامل مع كميات ضخمة. فبعد بضعة أشهر من الاستخدام المكثف، ستجد نفسك تحدق في مئات الآلاف من الأسطر من الأخذ والرد. البحث فيها بطيء، وقراءتها مستحيلة. في المقابل، يمنحك مستودع Obsidian ذاكرة طويلة الأمد ومنظمة: روابط ثنائية الاتجاه، وعلامات (tags)، وعرضاً بيانياً (graph view) يبرز الروابط. الفجوة بين الاثنين واضحة، وسدها يتطلب الأتمتة.

لقد قمت ببناء مسار عمل (pipeline) صغير يسد هذه الفجوة كل ليلة. يعمل عبر ثلاث خطوات متتالية، دون أي تدخل يدوي. أولاً، يقوم بجلب أحدث تصديرات المحادثات وتحديثها إلى حالتها الراهنة. ثانياً، يستخلص الحوار الخام لآخر 28 ساعة عبر Claude، ويضيف ملخصات منظمة مباشرة إلى مستودع Obsidian. نافذة الـ 28 ساعة هذه مقصودة؛ فهي تغطي اليوم السابق بالكامل بالإضافة إلى هامش بسيط للتأخيرات. ثالثاً، يقوم بعمل نسخة احتياطية لكل شيء عبر إجراء commit و push للتغييرات إلى مستودع خاص (private repository)، والذي يعمل كمخزن غير متصل بالإنترنت وتأمين ضد الحذف غير المقصود. يجب أن تكون السلسلة بأكملها مملة وموثوقة. الأتمتة المملة هي الهدف.

عندما يقتل macOS سكربت الخاص بك بصمت

أكبر عدو للمهام الليلية ليس الانهيار المفاجئ، بل الصمت.

في نظام macOS، تقع مجلد المستندات (Documents) تحت حماية TCC، وهو النظام الفرعي للخصوصية الذي يتحكم في الوصول إلى المواقع الحساسة. إذا قمت بجدولة السكربت الخاص بك عبر launchd ، فقد يقوم النظام ببساطة بحظر العملية دون إظهار خطأ تلاحظه. سيبقى ملف السجل الخاص بك فارغاً، ولن يتم تحديث مستودعك أبداً. لقد فشلت المهمة، لكنك لن تكتشف الفجوة إلا بعد أيام عندما تدرك أن ملاحظاتك قديمة.

أنا أتعامل مع هذا من خلال إجراء فحص مسبق (preflight routine) صارم. قبل بدء العمل الرئيسي، يحاول السكربت إجراء عملية كتابة غير ضارة داخل المجلد المستهدف. إذا رفض macOS ذلك، يتم رصد الفشل فوراً ويتم إرسال إشعار تنبيه قوي على سطح المكتب. لا يوجد خروج صامت. بعد ذلك، يحتاج مفسر الصدفة (shell interpreter) نفسه إلى منح صلاحية "الوصول الكامل للقرص" (Full Disk Access) من داخل إعدادات النظام (System Settings). هذه الصلاحية واسعة النطاق، لذا أقوم بتقليل التعرض للمخاطر عبر إبقاء جميع سكربتات الأتمتة خارج شجرة مجلد المستندات المحمي تماماً. فهي تعيش في دليل مخصص في مكان آخر، ويتم الإشارة إلى مسار المستودع بشكل صريح. هذا المزيج من الكشف المبكر، والتنبيهات الصاخبة، والوضع الدقيق للمجلدات يعالج سيناريو "الموت الصامت".

التصميم من أجل وضع السكون، ومهلات التنفيذ، والمهام المتوقفة

أجهزة اللابتوب تدخل في وضع السكون. الشبكات تتعثر. استدعاءات API تتعلق. لا ينبغي لمهمة واحدة متوقفة أن تعطل النظام بأكمله إلى أجل غير مسمى.

أستخدم أربع آليات عملية للحفاظ على استقرار مسار العمل.

فترات زمنية متعددة. بدلاً من المراهنة بكل شيء على تشغيل واحد في الصباح الباكر، يحاول المجدول (scheduler) مرة أخرى في نقاط مختلفة طوال اليوم. إذا كان الجهاز مغلقاً عند الفجر، فإن نافذة فترة بعد الظهر ستلتقط المهمة.

علامات الإنجاز. عندما تنجح عملية التشغيل، فإنها تترك "أثراً" (breadcrumb) واضحاً. تتحقق المحاولة المجدولة التالية من تلك العلامة أولاً. إذا كان العمل مكتملاً بالفعل، فإنه يخرج بسلاسة في غضون ثوانٍ. هذا يمنع استدعاءات API غير الضرورية والمعالجة المكررة.

أقفال الملفات عبر mkdir. لتجنب عمليات التنفيذ المتداخلة، أستخدم قفلاً يعتمد على المجلدات. عملية إنشاء مجلد هي عملية ذرية (atomic) في أنظمة الملفات المحلية، لذا لا يمكن لمهمتين متزامنتين المطالبة بنفس مسار القفل. إذا كان المجلد موجوداً بالفعل، يتم إلغاء النسخة الثانية فوراً. وعندما تنتهي النسخة الأولى، تقوم بحذف المجلد. هذا أخف من ملفات PID وأصعب