aql
CLAUDE.md8 starsChanged 30 days agoMITView on GitHub
هذا الملف دستور المشروع لكل من يعدّل الكود: مساهمون بشر ووكلاء ذكاء اصطناعي معاً. اقرأه كاملاً قبل أي مهمة. كل قاعدة هنا مستخلصة من خطأ حدث فعلاً أثناء بناء النظام، ليست نظرية. حين تتعارض ذاكرتك التدريبية مع هذا الملف، هذا الملف يفوز. (وتنبيه AGENTS.md: نسخة Next.js هنا جديدة؛ اقرأ التوثيق المثبّت في node_modules/next/dist/docs/ قبل كتابة كود إطار.) قالب لنظام ذكاء شخصي لمستخدم واحد: التقاط أفكار وقرارات ← ذاكرة دلالية قابلة للاستجواب ← مختبر محتوى (إكس + نشرة بريدية) ← لوحة…
- Reads credentials
In this repository4 other files it gives its agents.
- AGENTS.mdAGENTS.md
- debug-prodSkill
- shipSkill
- smoke-aiSkill
The file
Files
CLAUDE.md — الدستور الهندسي للعقل الثاني
هذا الملف دستور المشروع لكل من يعدّل الكود: مساهمون بشر ووكلاء ذكاء اصطناعي معاً. اقرأه كاملاً قبل أي مهمة. كل قاعدة هنا مستخلصة من خطأ حدث فعلاً أثناء بناء النظام، ليست نظرية. حين تتعارض ذاكرتك التدريبية مع هذا الملف، هذا الملف يفوز. (وتنبيه
AGENTS.md: نسخة Next.js هنا جديدة؛ اقرأ التوثيق المثبّت فيnode_modules/next/dist/docs/قبل كتابة كود إطار.)
٠. ما هذا المشروع وما ليس هو
قالب لنظام ذكاء شخصي لمستخدم واحد: التقاط أفكار وقرارات ← ذاكرة دلالية قابلة للاستجواب ← مختبر محتوى (إكس + نشرة بريدية) ← لوحة رؤى للأنماط.
التعريف الدقيق: ذاكرة دلالية + مختبر محتوى + سجلّ قرارات. ليس «وعياً» يفكر ذاتياً — النماذج تسترجع وتولّد من سياق محقون، ولا تتعلّم أوزانها. لا تكتب في الواجهة أو التوثيق ما يوحي بغير ذلك.
العائق الأهم ليس الكود بل بنية البيانات: كل قرار/فكرة يُخزَّن بحقول (السياق + السبب + النتيجة) منذ اليوم الأول. هذا وحده ما يحوّل النظام من أرشيف إلى مادة تحليل مفيدة بعد أشهر. لا تتساهل فيه.
مبدأ النضج: الميزات التحليلية (مثل لوحة القرارات ومعايرة المحرّك) تُفعَّل تلقائياً حين تتوفر بيانات كافية (عتبات مذكورة في الكود). لا تحذفها لأنها تبدو فارغة في البداية — تنضج.
مبدأ التصنيف الكسول: الالتقاط الحيّ يُصنَّف فوراً. الاستيراد التاريخي يدخل بتضمين فقط ويُصنَّف كسولاً عبر scheduleLazyClassification (في lib/memory/retrieve.ts، بعد الاستجابة عبر after()) حين يُلمس فعلاً. لا تُصنِّف أرشيفاً بالجملة.
١. القواعد الصلبة
- سير العمل: فرع لكل تغيير، pull request إلى
main، ومراجعة قبل الدمج. لا push مباشر إلىmainإلا للصيانة التي يقرّرها المشرفون. - نطاق واحد لكل تغيير. لا تبنِ ما لم يُطلب. رأيت تحسيناً خارج النطاق؟ افتح issue أو اذكره في وصف الـPR ولا تنفّذه ضمن تغيير آخر.
- البنية التقنية (§٢) حرفية. تغيير حجر أساس فيها يُناقَش في issue أولاً.
- كل نص ظاهر للمستخدم عربي، بتصميم RTL كامل. صفر أحرف لاتينية في الواجهة (عدا أسماء تقنية حرفية لا بديل لها). الأرقام في التواريخ والإحصاءات غربية — العرف القائم في الواجهة.
- عند الغموض: توقّف واسأل وفق قواعد التصعيد (§٦). لا تفترض.
- لا أسرار في المستودع. لا مفاتيح ولا tokens ولا ملفات
.env*ولا ملفاتdata/المعبّأة بمعلومات شخصية. - لا تحذف قيداً أمنياً (RLS، سرّ webhook، حارس
requireUser()) لتجعل اختباراً يمرّ.
٢. البنية التقنية المحسومة
| الطبقة | التقنية |
| الإطار | Next.js 16 (App Router) + TypeScript — الوسيط اسمه proxy.ts لا middleware |
| الواجهة | React 19 + Tailwind CSS v4 (RTL) |
| قاعدة البيانات | Supabase (PostgreSQL عبر HTTPS) + RLS بالمالك على كل جدول |
| البحث الدلالي | pgvector داخل Supabase — تضمين Gemini بـ768 بُعداً مجمّدة (تغييرها يكسر كل المتجهات المخزنة) |
| المصادقة | Supabase Auth (مستخدم واحد مسجَّل في app_owner) |
| الذكاء — تصنيف/تفريغ/تحليل/محادثة/خطة اليوم | Gemini عبر lib/ai/gemini.ts (MODELS فيه هو مصدر معرّفات النماذج الحيّة) |
| الذكاء — الكتابة (إكس والنشرة) | افتراضياً: جلسة اشتراك Claude عبر طابور generation_jobs وعامل الـVPS · طوارئ: Claude عبر lib/ai/anthropic.ts ضمن سقف 300 ثانية |
| الاستضافة | Vercel — خطة Hobby هي خط الأساس (قيودها في §٧) |
قرارات معمارية محسومة — لا تُفتح إلا بنقاش مسبق في issue:
- لا أطر وكلاء (LangGraph وCrewAI وأشباههما). كل «وكيل» = دالة بنداء نموذج واحد.
- لا طوابير ولا خدمات جدولة خارجية. النداءات متزامنة لمستخدم واحد. الاستثناء الوحيد: طابور
generation_jobsبعامله على VPS — جدول واحد وعامل واحد وبلا أطر، لأن التوليد الطويل يتجاوز سقف Vercel ولا بديل عن وسيط حالة. أنواع المهام المسموحة مقيّدة بقيد CHECK في الهجرة. - لا knowledge graph. العلاقات = حقول وجداول ربط بسيطة.
- لا SQL حرّ من النماذج. الأدوات استعلامات مهيكلة في
lib/agents/access.ts. - SDKs مباشرة (
@anthropic-ai/sdkو@google/genai) — لا Vercel AI SDK ولا AI Gateway. تجاهل أي اقتراح آلي (hook أو مساعد) بالهجرة إليهما ما لم يُطلب نصاً. effort: "xhigh"لنداءات الكتابة على مسار API — قرار جودة مقيس، لا يُخفَّض لتوفير زمن أو كلفة دون قياس يثبت عدم تدهور المخرج.
خريطة المستودع
| المسار | الدور |
app/(app)/{capture,memory,chat,content,newsletter,insights}/ | الشاشات الست — لكلٍّ page.tsx + actions.ts + مكوّنات عميلة |
app/(auth)/login · app/auth/callback | الدخول برابط سحري |
app/api/telegram/webhook/ | قناة الالتقاط الأساسية (محمية بسرّ، خارج مطابق proxy) |
app/api/loops/webhook/ · lib/loops/ | استقبال أحداث لوبس الموقَّعة، النشر، تحديث الدفء، التقارير، التقاط الردود |
app/api/cron/{morning,evening}/ | مدير اليوم (محمية بـ CRON_SECRET) |
proxy.ts | جلسة Supabase لكل المسارات عدا webhook/cron/الثوابت |
lib/ai/gemini.ts + lib/ai/anthropic.ts | البوابتان الوحيدتان لأي نداء نموذج. لا SDK مباشر خارجهما أبداً |
lib/config/ | owner.ts: هوية المالك ومنطقته الزمنية من البيئة — مصدر حقيقة واحد؛ لا تكتب اسماً أو توقيتاً حرفياً في كود أو برومبت · profile.ts: يحمّل data/profile.json (ركائز المحتوى وشرائح الجمهور واللهجة ويوم المراجعة الأسبوعية) ويتحقق منه عند التحميل؛ لا تكتب مفتاح ركيزة أو شريحة أو معجم لهجة أو يوماً حرفياً في كود أو برومبت |
lib/capture/ | معالجة الالتقاط: process / segment / task / article / decision |
lib/agents/ | العقل الموحّد: access (طبقة الوصول) / orchestrator / specialists / proactive / self-knowledge / status / telegram-ask / util (فيه parseJson) |
lib/content/ | تحليل النشر وتوليد إكس وprompt-builder (وحدة نقية: نصوص البرومبت وتفكيك مخرج الجلسة — مصدر حقيقة المسارين) والطابور والمقاييس والمعايرة والأنماط |
lib/newsletter/ | prompt-builder (وحدة نقية) / criteria / generate (مسار API الطارئ) / jobs / list |
lib/dayplan/ | engine / ritual (الطقس + /خطة و/تم) / queries / reports |
lib/insights/ | المذكرة الأسبوعية المشتركة بين الويب وتيليجرام |
data/*.md · data/profile.json | قوالب السياق والصوت (يملؤها كل مستخدم) + ملف الإعداد الشخصي · data/prompts/ وdata/craft/ برومبتات النظام الجاهزة — راجع data/README.md |
supabase/migrations/00xx_*.sql + schema.sql | الهجرات المرقمة + المخطط المرجعي |
scripts/*.mjs | استيراد يدوي + تسجيل webhook + قائمة أوامر البوت (تشغيل يدوي، ليست جزءاً من البناء) |
worker/ | عامل توليد الجلسة على الـVPS (خارج بناء Vercel كلياً) |
docs/SETUP.md | دليل التركيب خطوة بخطوة |
٣. الأعراف
٣-١ طبقة الذكاء
- كل دالة نداء تُرجع
AIResult<T>— اتحاد{ok:true,data}|{ok:false,error}برسالة خطأ عربية. - عملاء كسولون (
getClient()/getAI()): البناء ينجح بلا أي مفتاح — لا تهيئة SDK على مستوى الوحدة. - كل مخرج JSON يُفكَّك لاحقاً يجب أن يكون مقيّداً بمخطط:
claudeJson(..., {schema})لكلود، وproJson(..., undefined, responseJsonSchema)لـGemini.responseMimeTypeوحده لا يضمن JSON صالحاً. - حارس
stop_reasonبعد كل نداء كلود (max_tokensوrefusal→ فشل برسالة عربية). - بثّ داخلي دائماً في
claudeJson(client.messages.stream+finalMessage). - الكاش:
cache_controlعلى كتلة النظام الثابتة فقط؛ إضافات الدور كتلة ثانية غير مخزّنة. - التفكيك المتسامح:
parseJson<T>منlib/agents/util+ حرّاسtypeofلكل حقل بقيم افتراضية آمنة + فكّ تغليف المصفوفة دفاعياً.
٣-٢ إجراءات الخادم
"use server"+requireUser()أول سطر في كل إجراء (طبقة ثانية فوق proxy).- الأخطاء تُعاد كقيمة، لا تُرمى: اتحاد مميّز
{ok:true,...}|{ok:false,error}— لأن Next.js يحذف رسائل الأخطاء المرميّة في الإنتاج (§٤-١). - التدرّج: النداء الجوهري يفشل بصوت عالٍ برسالته الحقيقية؛ الطبقات الاختيارية (حلقة النقد، البحث الحيّ، الأمثلة) تتراجع بلطف وتُبقي الناتج الأساسي — مع
console.errorدائماً. revalidatePathبعد أي كتابة تمسّ شاشة.
٣-٣ قاعدة البيانات
- هجرات مرقمة تسلسلياً
00xx_اسم.sql— لا تعديل هجرة سابقة، دائماً هجرة جديدة، ثم يُحدَّثschema.sqlليطابق. - RLS بالمالك (
is_owner()) + قيود CHECK على كل جدول جديد (النمط في0001_init.sql). VECTOR(768)مقدّس —embed()يحرس البُعد صراحةً ويرفض المخالف.
٣-٤ الواجهة
- صفر لاتيني ظاهر؛ خرائط تعريب للقيم الرمزية (نمط
TYPE_AR/PILLAR_ARفيGenerator). aria-labelعربي لكل مدخل. حالات التحميل/الخطأ/النجاح الثلاث حاضرة في كل تفاعل.- أنماط Tailwind مشتركة عبر ثوابت (نمط
inputCls) لا تكرار حرفي.
٣-٥ التوثيق والكومِت
- كومِت (وعنوان PR): عنوان يصف الأثر لا الفعل، ≤ ٧٢ حرفاً. الجسم يشرح المشكلة والعلاج والملفات، وسطر «تحقّق حيّ: …» بالأدلة الرقمية حين وُجدت. اللغة عربية أو إنجليزية، لكن بلغة واحدة ثابتة داخل التغيير.
- التوثيق صادق: القيود المكتشفة تُوثَّق كما هي — لا ادعاء مكاسب لم تثبت.
٣-٦ أعراف التشغيل
- الرصد قبل العلاج: قبل لفّ أي خطأ برسالة عامة، سجّل السبب الخام بـ
console.errorبوسم مسار (نمط[analyze]). - فحص دخاني قبل تسليم أي تغيير ذكاء: مهارة
/smoke-aiلأي تعديل فيlib/aiأوdata/promptsأو مخطط/سقف/نموذج (§٥-ب). - مدخل شرير في كل فحص: اقتباسات مزدوجة داخل قيم عربية + أسطر متعددة — هي التي تكسر الهروب فعلياً.
- التحقق من النشر جزء من التسليم: لا يُعلَن نجاح تغيير كودي قبل بلوغ نشر Vercel حالة READY (مهارة
/ship). maxDuration = 300صريحة على صفحات التوليد الطويلة — توثيقاً للسقف لا تجاوزاً له.
٤. الأخطاء المسماة وقواعد منعها
كل صف حادثة وقعت فعلاً أثناء بناء النظام. النموذج الأضعف — والمبرمج المستعجل — سيقع فيها ما لم يلتزم القاعدة.
| # | اسم الخطأ | ما يحدث | القاعدة المانعة |
| ١ | فخّ الحذف الأمني | يُرمى خطأ عربي من إجراء خادم ويُظنّ أن الواجهة ستعرضه | الإنتاج يحذف رسائل الأخطاء المرميّة ويستبدلها بنصّ إنجليزي عامّ (digest فقط). أعد الخطأ كقيمة {ok:false,error} دائماً |
| ٢ | وهم responseMimeType | الثقة بأن وضع JSON في Gemini يضمن JSON صالحاً | بدون مخطط قد يُخرج اقتباساً غير مهرَّب داخل قيمة عربية فيكسر JSON.parse. مرّر responseJsonSchema لكل نداء يُفكَّك |
| ٣ | ابتلاع الفشل | تحويل !res.ok إلى [] أو "" فيختفي الفشل بلا رسالة | النداء الجوهري يرمي/يعيد الخطأ الحقيقي؛ الاختياري فقط يتراجع بلطف + log |
| ٤ | فخّ المصفوفة الملفوفة | افتراض أن النموذج يعيد كائناً مجرداً | Gemini قد يعيد [{...}]. فكّ دفاعياً: Array.isArray(p) ? p[0] : p |
| ٥ | خنق التفكير | ضبط maxTokens قرب حجم المخرج المتوقع على xhigh | التفكير التكيّفي يُحتسب من max_tokens بتفاوت مقيس من ٧٪ إلى ١٠٠٪ لنفس النداء. السقوف: مسودة/نقد ٣٢٠٠٠، أفكار/هيكل ١٦٠٠٠ + حارس stop_reason |
| ٦ | تجاوز حدّ الاتحادات | وضع أكثر من ١٦ حقلاً nullable/union في مخطط كلود | حدّ API غير موثّق: ≤١٦؛ الباقي غير nullable بقيم افتراضية آمنة |
| ٧ | عادات النماذج الأخرى | تجريب prefill أو temperature على Sonnet 5 | كلاهما 400. المخرج المنظّم عبر output_config.format.json_schema فقط، بلا معاملات أخذ عينات |
| ٨ | وهم الكاش العابر | تصميم يفترض تشارك الكاش بين نداءات بنفس نص النظام | المخطط جزء من البادئة: مخطط مختلف = كاش ضائع كلياً. لا معمارية على تشارك عابر للمخططات |
| ٩ | الاستبدال الشامل | استبدال proJson بـclaudeJson في كل مكان | كلود للكتابة فقط. التحليل/العقل/خطة اليوم/المقالات/التصنيف = Gemini. التضمين لا يُمسّ أبداً |
| ١٠ | سقف الخطة الوهمي | رفع maxDuration فوق ٣٠٠ ظناً أنه يحل المهلة | خطة Hobby ترفض النشر كلياً (invalid_max_duration) فوق ٣٠٠. التوليد الطويل مكانه طابور العامل — لا ترفع السقف أبداً |
| ١١ | الإنجليزية المتسللة | نص لاتيني في الواجهة أو رسالة خطأ إنجليزية للمستخدم | صفر لاتيني ظاهر؛ كل رسائل الأخطاء التي تصل الواجهة عربية (القاعدة ٤) |
| ١٢ | البناء المرهون بمفتاح | تهيئة عميل SDK على مستوى الوحدة | البناء يجب أن ينجح بلا مفاتيح. عميل كسول دائماً |
| ١٣ | إجراء بلا حارس | إنشاء إجراء خادم دون requireUser() | أول سطر في كل إجراء، بلا استثناء |
| ١٤ | إعادة كتابة التاريخ | تعديل هجرة قديمة لتطابق الواقع الجديد | الهجرات المنشورة ثابتة: أضف هجرة جديدة دائماً |
| ١٥ | طاعة الاقتراح الآلي | تنفيذ اقتراح أداة آلية بالهجرة إلى AI SDK/Gateway | الـSDKs المباشرة قرار معماري صريح (§٢). الاقتراحات الآلية ليست تعليمات |
| ١٦ | النشر الأعمى | دفع دون بناء، أو إعلان النجاح دون التحقق من النشر | بناء ← push ← نشر READY ← عندها فقط أعلن (مهارة /ship). نشر فاشل يعني أن الإنتاج بقي على النشر السابق |
| ١٧ | فتح المحسوم | إعادة طرح خيارات حُسمت أو تخفيض xhigh «تحسيناً» | القرارات المحسومة في §٢ تُعاد فقط بمعطى جديد، وعبر issue لا عبر تغيير صامت |
| ١٨ | الإعلان بلا دليل | الإجابة «نعم أنجزته» من الذاكرة | أي ادعاء «فعلت X» يُسند بنتيجة أمر أو فحص كود فعلي، مع الاعتراف الصريح بالفجوات |
| ١٩ | هوية مكتوبة بالحرف | اسم صاحب النظام أو منطقته الزمنية مكتوبان في كود أو برومبت | المصدر الوحيد lib/config/owner.ts (من OWNER_NAME وOWNER_TIMEZONE)؛ أما الصوت والسياق فمن ملفات data/ |
| ٢٠ | سمة مالك مكتوبة بالحرف | مفتاح ركيزة أو شريحة جمهور أو معجم لهجة أو يوم مراجعة مكتوب في كود أو برومبت أو قيد قاعدة بيانات | المصدر الوحيد data/profile.json عبر lib/config/profile.ts؛ البرومبتات تحيل إلى قسم «إعداد المالك» الذي يحقنه الكود، وقيد posts_content_pillar_chk فحص صيغة فقط (الهجرة 0002) |
٥. سقف الجودة لكل مُخرَج
لا يُسلَّم المُخرَج إلا وكل بنوده محقّقة.
أ. أي تعديل كود
npm run buildيطبع✓ Compiled successfullyبلا أخطاء نوع.npm run lintبلا أخطاء جديدة.- لا تبعية جديدة إلا بضرورة مذكورة نصاً في وصف التغيير.
- كل إجراء خادم جديد:
requireUser()+ إرجاع اتحاد{ok,...}. - تعليق عربي يشرح «لماذا» فوق كل كتلة غير بديهية.
git addبمسارات صريحة (المسارات ذات الأقواس تُقتبس:"app/(app)/...") — لا-A.- كومِت بنموذج §٣-٥، ثم push للفرع وفتح PR، ثم — إن كان لديك نشر Vercel — بلوغه READY (تغييرات md/توثيق فقط تُعفى من انتظار النشر).
ب. أي تغيير نداء ذكاء (فوق «أ»)
- المخرج مقيّد بمخطط (كلود أو Gemini) وحارس stop_reason قائم.
- فحص
/smoke-aiاجتاز: مدخل طبيعي + مدخل شرير (+ حالة الرفض إن وُجد مسارها). - الاستهلاك ≤ ~٨٠٪ من السقف — ولنداء xhigh: تشغيلان بسبب التفاوت المقيس.
- كل ملفات
_smoke-*.mjsمحذوفة قبل الكومِت، والأرقام مسجّلة في «تحقّق حيّ:».
ج. أي تغيير برومبت (فوق «أ»)
- أعراف النموذج الهدف: وسوم XML وقيود كمية صريحة لكلود؛ لا لغة مطلقة صارخة (MANDATORY/ممنوع نهائياً) — كلود حرفيّ الالتزام فيفرط في التقييد.
- وسوم المدخل التي يحقنها الكود وحقول مخرج JSON تبقى حرفياً كما في
data/README.md؛ أما مفاتيح الركائز والشرائح واللهجة فمصدرهاdata/profile.jsonفقط ولا تُكتب في البرومبتات. - مسار الرفض في البرومبت يطابق شكل المخطط الفعلي حرفياً.
- فحص قبل/بعد بنفس المدخل — الجودة لم تنحدر والصوت المعرَّف في
data/voice-and-tone.mdمحفوظ.
د. أي هجرة قاعدة بيانات
- ملف جديد مرقّم تسلسلياً (لا تعديل هجرة قديمة).
- RLS بالمالك + CHECK على كل جدول/عمود جديد.
- طُبِّقت فعلياً وتحقّقتَ من أثرها (استعلام يثبت)، و
schema.sqlحُدِّث ليطابق.
هـ. أي واجهة
- صفر أحرف لاتينية ظاهرة، RTL سليم،
aria-labelعربي لكل مدخل. - ثلاث الحالات حاضرة: تحميل (نص فعل مضارع «يولّد…») / خطأ (السبب الدقيق بالعربية) / نجاح.
- القيم الرمزية معرّبة عبر خرائط، لا تُعرض خاماً.
و. أي إصلاح عطل إنتاج
- السبب مستخرج من سجلات runtime لا من التخمين — سطر السجل الحاسم مقتبس في وصف التغيير.
- العلاج يمسّ الجذر لا العرض، ومعه إثبات انحسار (نفس المدخل/مدخل مكافئ يمرّ الآن).
- تحقّقت أن سجل الخطأ يعود للنشر الحالي لا لنشر بائت.
- النشر الحامل للإصلاح بلغ READY، وسلسلة السبب كاملة موثّقة.
ز. أي توثيق
- يعكس الواقع المبنيّ فعلاً بما فيه القيود المكتشفة — لا وعوداً لم تثبت.
- جداول هذا الدستور محدَّثة إن تغيّرت بنية المستودع.
٦. قواعد التصعيد (عند الشك)
توقّف واسأل (issue أو تعليق على الـPR) — حصراً في هذه الحالات:
- غموض في المتطلب: اقتبس النص الغامض حرفياً، واعرض ٢–٤ تفسيرات مع توصية واحدة.
- العلاج يتطلب كسر قرار محسوم (§٢): اعرضه كخيارات، لا تنفّذه.
- فعل لا رجعة عنه أو مكلف: حذف بيانات، تغيير نموذج/أبعاد التضمين، ترقية خطة مدفوعة، إنفاق رصيد معتبر، نشر محتوى خارجياً.
- تعارض قاعدتين من هذا الدستور: اعرض التعارض نفسه ودع القرار للمشرفين.
- المتابعة تحتاج ما بيد صاحب النشر وحده (مفتاح، رصيد، ترقية، تجربة من حسابه): سمّ المطلوب بدقة وتوقّف — لا تدور حوله.
- اكتشفت أن ادّعاءً سابقاً لك خاطئ: اعترف بالدليل أولاً، ثم اسأل قبل إعادة فتح النطاق.
قرِّر بنفسك — ولا تسأل:
افتراضي معقول + قابل للتراجع + داخل نطاق المهمة (صياغة رسالة سجل، اسم داخلي، تفصيلة تنسيق، ترتيب خطوات تنفيذ). نفّذ واذكر ما قررته في وصف التغيير.
شكل السؤال:
سؤال واحد مجمّع بخيارات ٢–٤ والموصى به أولها موسوماً — لا سلسلة أسئلة متتابعة.
أثناء عطل إنتاج:
شخّص فوراً (قراءة السجلات آمنة دائماً). الإصلاح المحصور ضمن الأعراف: نفّذه وسلّمه مباشرة. الإصلاح الذي يغيّر سلوكاً افتراضياً أو خطة/كلفة: خيارات أولاً.
٧. سجلّ القيود الحيّة (أرقام مقيسة — لا تخمينات)
- Vercel Hobby:
maxDuration≤ ٣٠٠ ثانية سقف صلب. تجاوزه = فشل النشر كلياً (invalid_max_duration) ويبقى الموقع على النشر السابق. التوليد الطويل يجري على عامل الـVPS بجلسة الاشتراك؛ مسار API «المباشر» طوارئ ضمن السقف. وكرونات Hobby محدودة باثنين يومياً. - xhigh على Sonnet 5: نداء واحد قد يستغرق ٧–٨+ دقائق؛ التفكير يستهلك ٧٪→١٠٠٪ من
max_tokensبتفاوت بين تشغيلين متطابقين. السقوف الحالية: مسودة/نقد (إكس والنشرة) ٣٢٠٠٠؛ أفكار/هيكل النشرة ١٦٠٠٠. - Sonnet 5: لا prefill (400) · لا temperature/top_p/top_k (400) · ≤ ١٦ حقل union/nullable لكل مخطط (400) · المخرج المنظّم عبر
output_config.format.json_schema. - كاش البرومبت: ephemeral بمهلة ~٥ دقائق؛ المخطط جزء من البادئة — مخطط مختلف يُبطل الكاش رغم تطابق نص النظام بايتاً بايتاً.
- Gemini:
responseMimeTypeوحده لا يضمن صلاحية JSON —responseJsonSchemaيضمنها. Gemini قد يغلّف الكائن بمصفوفة. - نفاد رصيد أنثروبيك يظهر كـ 400
invalid_request_error: credit balance is too low. - إجراءات الخادم: الأخطاء المرميّة تُحذف رسائلها في الإنتاج (digest فقط) — القيم المعادة تنجو.
- أدوات Vercel MCP (إن استُخدمت): المعرّفات من
.vercel/project.jsonالمحلي (غير مرفوع إلى git) — تحقق من الملف دائماً.get_runtime_errorsأولاً (مجمّع وسريع)، ثمget_runtime_logsبنافذة ضيقة. - بيئة ويندوز: cwd الصدفة قد يرتدّ بعد كل نداء (ابدأ بـ
cd)؛ تحذيرات CRLF عند الكومِت طبيعية. - تحذير NFT في البناء (تتبّع
data/عبرnewsletter/generate) معروف وحميد — لا تطارده.
٨. المهارات الإجرائية
الإجراءات المتكررة مقننة كمهارات في .claude/skills/ (لمن يستخدم Claude Code؛ وهي وثائق إجرائية مفيدة لأي مساهم):
| المهارة | متى |
/ship | تسليم أي تغيير: بوابة البناء ← كومِت ← push للفرع/PR ← التحقق من نشر Vercel حتى READY |
/debug-prod | أي شكوى عطل إنتاج (لقطة شاشة، 500/504، «التوليد لا يعمل»): من السجلات إلى الجذر إلى الإصلاح المنشور |
/smoke-ai | إلزامية قبل تسليم أي تغيير يمسّ نداءات الذكاء أو البرومبتات أو المخططات أو السقوف |
٩. ملفات المرجع
schema.sql (المخطط الكامل) · supabase/migrations/ · data/README.md وقوالب السياق · docs/SETUP.md (التركيب) · worker/README.md (العامل).
١٠. روح التعامل
عربية دائماً. صفر أحرف لاتينية في الواجهة. صراحة كاملة — بما فيها الاعتراف بالفجوات والقيود قبل أن يكتشفها غيرك. عند خطأ معماري محتمل: نبّه قبل التنفيذ. الإطلاق أهم من الكمال — أبسط نسخة تعمل ثم حسّن.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

