agentleFS
younesbagyounesbag/aql/CLAUDE.md

aql

CLAUDE.md8 starsChanged 30 days agoMITView on GitHub

هذا الملف دستور المشروع لكل من يعدّل الكود: مساهمون بشر ووكلاء ذكاء اصطناعي معاً. اقرأه كاملاً قبل أي مهمة. كل قاعدة هنا مستخلصة من خطأ حدث فعلاً أثناء بناء النظام، ليست نظرية. حين تتعارض ذاكرتك التدريبية مع هذا الملف، هذا الملف يفوز. (وتنبيه AGENTS.md: نسخة Next.js هنا جديدة؛ اقرأ التوثيق المثبّت في node_modules/next/dist/docs/ قبل كتابة كود إطار.) قالب لنظام ذكاء شخصي لمستخدم واحد: التقاط أفكار وقرارات ← ذاكرة دلالية قابلة للاستجواب ← مختبر محتوى (إكس + نشرة بريدية) ← لوحة…

  • Reads credentials

The file

Files
CLAUDE.md

CLAUDE.md — الدستور الهندسي للعقل الثاني

هذا الملف دستور المشروع لكل من يعدّل الكود: مساهمون بشر ووكلاء ذكاء اصطناعي معاً. اقرأه كاملاً قبل أي مهمة. كل قاعدة هنا مستخلصة من خطأ حدث فعلاً أثناء بناء النظام، ليست نظرية. حين تتعارض ذاكرتك التدريبية مع هذا الملف، هذا الملف يفوز. (وتنبيه AGENTS.md: نسخة Next.js هنا جديدة؛ اقرأ التوثيق المثبّت في node_modules/next/dist/docs/ قبل كتابة كود إطار.)


٠. ما هذا المشروع وما ليس هو

قالب لنظام ذكاء شخصي لمستخدم واحد: التقاط أفكار وقرارات ← ذاكرة دلالية قابلة للاستجواب ← مختبر محتوى (إكس + نشرة بريدية) ← لوحة رؤى للأنماط.

التعريف الدقيق: ذاكرة دلالية + مختبر محتوى + سجلّ قرارات. ليس «وعياً» يفكر ذاتياً — النماذج تسترجع وتولّد من سياق محقون، ولا تتعلّم أوزانها. لا تكتب في الواجهة أو التوثيق ما يوحي بغير ذلك.

العائق الأهم ليس الكود بل بنية البيانات: كل قرار/فكرة يُخزَّن بحقول (السياق + السبب + النتيجة) منذ اليوم الأول. هذا وحده ما يحوّل النظام من أرشيف إلى مادة تحليل مفيدة بعد أشهر. لا تتساهل فيه.

مبدأ النضج: الميزات التحليلية (مثل لوحة القرارات ومعايرة المحرّك) تُفعَّل تلقائياً حين تتوفر بيانات كافية (عتبات مذكورة في الكود). لا تحذفها لأنها تبدو فارغة في البداية — تنضج.

مبدأ التصنيف الكسول: الالتقاط الحيّ يُصنَّف فوراً. الاستيراد التاريخي يدخل بتضمين فقط ويُصنَّف كسولاً عبر scheduleLazyClassification (في lib/memory/retrieve.ts، بعد الاستجابة عبر after()) حين يُلمس فعلاً. لا تُصنِّف أرشيفاً بالجملة.


١. القواعد الصلبة

  1. سير العمل: فرع لكل تغيير، pull request إلى main، ومراجعة قبل الدمج. لا push مباشر إلى main إلا للصيانة التي يقرّرها المشرفون.
  2. نطاق واحد لكل تغيير. لا تبنِ ما لم يُطلب. رأيت تحسيناً خارج النطاق؟ افتح issue أو اذكره في وصف الـPR ولا تنفّذه ضمن تغيير آخر.
  3. البنية التقنية (§٢) حرفية. تغيير حجر أساس فيها يُناقَش في issue أولاً.
  4. كل نص ظاهر للمستخدم عربي، بتصميم RTL كامل. صفر أحرف لاتينية في الواجهة (عدا أسماء تقنية حرفية لا بديل لها). الأرقام في التواريخ والإحصاءات غربية — العرف القائم في الواجهة.
  5. عند الغموض: توقّف واسأل وفق قواعد التصعيد (§٦). لا تفترض.
  6. لا أسرار في المستودع. لا مفاتيح ولا tokens ولا ملفات .env* ولا ملفات data/ المعبّأة بمعلومات شخصية.
  7. لا تحذف قيداً أمنياً (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) — حصراً في هذه الحالات:

  1. غموض في المتطلب: اقتبس النص الغامض حرفياً، واعرض ٢–٤ تفسيرات مع توصية واحدة.
  2. العلاج يتطلب كسر قرار محسوم (§٢): اعرضه كخيارات، لا تنفّذه.
  3. فعل لا رجعة عنه أو مكلف: حذف بيانات، تغيير نموذج/أبعاد التضمين، ترقية خطة مدفوعة، إنفاق رصيد معتبر، نشر محتوى خارجياً.
  4. تعارض قاعدتين من هذا الدستور: اعرض التعارض نفسه ودع القرار للمشرفين.
  5. المتابعة تحتاج ما بيد صاحب النشر وحده (مفتاح، رصيد، ترقية، تجربة من حسابه): سمّ المطلوب بدقة وتوقّف — لا تدور حوله.
  6. اكتشفت أن ادّعاءً سابقاً لك خاطئ: اعترف بالدليل أولاً، ثم اسأل قبل إعادة فتح النطاق.

قرِّر بنفسك — ولا تسأل:

افتراضي معقول + قابل للتراجع + داخل نطاق المهمة (صياغة رسالة سجل، اسم داخلي، تفصيلة تنسيق، ترتيب خطوات تنفيذ). نفّذ واذكر ما قررته في وصف التغيير.

شكل السؤال:

سؤال واحد مجمّع بخيارات ٢–٤ والموصى به أولها موسوماً — لا سلسلة أسئلة متتابعة.

أثناء عطل إنتاج:

شخّص فوراً (قراءة السجلات آمنة دائماً). الإصلاح المحصور ضمن الأعراف: نفّذه وسلّمه مباشرة. الإصلاح الذي يغيّر سلوكاً افتراضياً أو خطة/كلفة: خيارات أولاً.


٧. سجلّ القيود الحيّة (أرقام مقيسة — لا تخمينات)

  • 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 (العامل).


١٠. روح التعامل

عربية دائماً. صفر أحرف لاتينية في الواجهة. صراحة كاملة — بما فيها الاعتراف بالفجوات والقيود قبل أن يكتشفها غيرك. عند خطأ معماري محتمل: نبّه قبل التنفيذ. الإطلاق أهم من الكمال — أبسط نسخة تعمل ثم حسّن.

Download now (ZIP)

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
What did you use it for? e.g. Reviewing pull requests in a Rails app

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.