المحتويات
- 1. ماذا يحدث فعلاً——ظاهرتان منفصلتان تتسلسلان
- 2. حقيقة حلقة «court» اللانهائية——التكرار (degeneration)
- 3. حقيقة «Response stalled mid-stream»——توقّف البث
- 4. مختلفة عن «تسرّب وسم court/invoke»——كيف تميّز بينهما
- 5. عوامل التحفيز
- 6. أصلحها الآن (للمستخدمين)
- 7. للمطوّرين——الوقاية عبر API/SDK
- 8. كيف تميّزها عن الأخطاء المشابهة
- 9. حالة المعالجة الرسمية
- الأسئلة الشائعة
أثناء العمل الطويل في Claude Code، قد يتحوّل الرد فجأة إلى تكرار الكلمة نفسها «court court court court…» عشرات إلى مئات المرات، ثم يتوقف في النهاية بالرسالة «API Error: Response stalled mid-stream. The response above may be incomplete.»——هل صادفت هذه الظاهرة من قبل؟
هذا ليس خطأً في مطالبتك أو بيئتك، بل غالباً يحدث نتيجة تسلسل عطلين منفصلين: ①حلقة تكرار حيث يظل النموذج يُخرج الرمز (token) نفسه (التكرار / degeneration)، و②«Response stalled mid-stream» حيث يتوقف البث بسبب ذلك الإخراج الضخم أو مشكلة في الاتصال. وكلاهما عطل معروف فُتحت له عدة Issues في مستودع Anthropic الرسمي. في هذه المقالة نرتّب——بالاستناد إلى الوثائق الرسمية والـIssues الفعلية——حقيقة هاتين الطبقتين وعوامل تحفيزهما وكيفية إيقافهما فوراً وطرق وقاية المطوّرين وكيفية تمييزهما عن الأخطاء المشابهة.
تكرار الرمز نفسه بلا توقّف (التكرار / degeneration). يلتهم رموز الإخراج.
يتوقف بث الرد عن إرسال البيانات فيتعطّل. حالة «انقطاع في المنتصف».
※ قد تحدث إحداهما وحدها. الحالة النموذجية أن انفلات court يولّد إخراجاً ضخماً يحفّز توقّف البث.
1. ماذا يحدث فعلاً——ظاهرتان منفصلتان تتسلسلان
أولاً، الفصل بينهما مهم. ما تراه على الشاشة هو «تكرار court» و«Response stalled mid-stream»، لكن هذين مشكلتان في طبقتين مختلفتين.
- ① حلقة «court» اللانهائية: ظاهرة تكرار يقوم فيها Claude (النموذج نفسه) بـتوليد الرمز نفسه مراراً بدل الرد المقصود أو استدعاء الأداة. ينطبق ذلك على GitHub Issue #68740 (Output enters an infinite loop repeating the token "court") و#65823 (تكرار سلسلة ثابتة آلاف المرات حتى استنفاد رموز الإخراج) وغيرهما.
- ② «Response stalled mid-stream»: خطأ من جهة النقل حيث يتوقف بث الرد (الإرسال التتابعي) في المنتصف. مذكور أيضاً في مرجع الأخطاء الرسمي لـClaude Code، وأُبلغ عنه في Issue #70840.
عندما ينفلت ①، يتولّد إخراج ضخم يحفّز توقّف البث في ②——وهذا التسلسل يبدو على شاشة المستخدم ظاهرة واحدة. لكن السبب والعلاج مختلفان، لذا فهمهما منفصلين هو أقصر طريق.
2. حقيقة حلقة «court» اللانهائية——التكرار (degeneration)
لا معنى لكلمة «court». هذا نوع من أنماط الفشل المعروفة قديماً وهو «التكرار (repetition / degeneration)» حيث يعلق النموذج اللغوي عند الإخراج نفسه، وصادف أن نقطة التعلّق هذه صارت الرمز «court». وقد تكون كلمة أخرى أو سلسلة رموز أخرى.
الخصائص المُبلَّغ عنها (#68740 وغيره):
- يحدث مع نماذج مثل claude-opus-4-8، في امتداد VS Code / واجهة CLI لـClaude Code.
- يبدأ من منتصف الجلسة ويتكرر مراراً داخل الجلسة نفسها (اعتماد على الحالة).
- بحسب البلاغات، يسهل تحفيزه عند توليد نص باليابانية أو غيرها قبيل استدعاء أداة (مثل Edit).
- عند انفلاته يستهلك رموز الإخراج بكثافة (#65823)، وهناك حالات تُقفَل فيها الجلسة (#66950).
وُضِعت له وسمة area:model (سلوك النموذج)، أي أنه صُنِّف مشكلة في توليد النموذج لا في الهيكل (Claude Code). بعبارة أخرى، لا يمكن استئصاله بإصلاح أمر أو إعداد، ويبقى الأساس هو معالجة «إذا حدث، أوقفه واهرب».
3. حقيقة «Response stalled mid-stream»——توقّف البث
أما الطرف الآخر «API Error: Response stalled mid-stream. The response above may be incomplete.» فهو خطأ من جهة النقل يظهر حين يتوقف بث الرد عن إرسال البيانات في المنتصف. وكما يقول التحذير «قد يكون الرد أعلاه غير مكتمل»، فإن ما بُثّ حتى تلك اللحظة لا يضيع——ما ينقص فقط هو الجُمل الأخيرة أو استدعاء الأداة.
العوامل الرئيسية المُبلَّغ عنها والمشروحة:
- الرد الطويل: يسهل حدوثه حين يطول التوليد، كقراءة عدة ملفات كبيرة وإنتاج تقرير مُهيكل. والإخراج الضخم الناتج عن انفلات court يندرج هنا أيضاً.
- عدم استقرار الشبكة/الاتصال: يرتفع الاحتمال مع الاتصال العابر للحدود والخطوط المنزلية والعمل عبر جلسة tmux.
- غياب مهلة القراءة: إشارة إلى أن الـAPI أعلى المجرى يتوقف عن إرسال الحِزم بينما يظل العميل ينتظر (Issue #70840).
وللعلم، فإن الخطأ الشبيه جداً «Connection closed mid-response» (أُغلق الاتصال في منتصف الرد) (#69415) خطأ مختلف: البث فيه لا «يتوقف» بل «يُقطع». الأعراض متقاربة، لكن هذا أقرب إلى انقطاع الاتصال.
4. مختلفة عن «تسرّب وسم court/invoke»——كيف تميّز بينهما
يسهل الخلط، لكن ظاهرة «حلقة court اللانهائية» موضوع هذه المقالة تختلف عن ظاهرة «تسرّب court مع وسم invoke إلى الشاشة». الأخيرة مشروحة بالتفصيل في مقالة أخرى على موقعنا.
| الزاوية | هذه المقالة: حلقة court اللانهائية → stall | مقالة أخرى: تسرّب وسم court/invoke |
|---|---|---|
| العَرَض المرئي | تكرار «court» عشرات إلى مئات المرات / stalled في النهاية | تسرّب بضع من «court» أو وسم <invoke> الخام |
| الحقيقة | التكرار (degeneration) + توقّف البث | فساد توليد وسم التحكّم في استدعاء الأداة |
| استدعاء الأداة | يعلق أصلاً عند التوليد ولا يتقدّم | الوسم يفسد فيصبح فاشلاً |
| النهاية | Response stalled mid-stream / تعليق | يُعرض الوسم كنص ثم يتوقف |
النوع الذي يتسرّب فيه «court» مع الوسم فيفشل استدعاء الأداة: راجع أسباب ومعالجة خطأ إخراج «court» ووسم invoke في Claude Code. السبب والعلاج مختلفان جزئياً.
5. عوامل التحفيز
لم تُحدَّد لكلتا الظاهرتين شروط إعادة إنتاج «تحدث حتماً»، لكن يظهر من البلاغات عوامل مشتركة ترفع الاحتمال.
جلسات متواصلة من ساعات إلى أيام، وسياق ثقيل من مئات الآلاف إلى نحو مليون رمز. كلما تراكمت الحالة زاد الاحتمال.
بحسب البلاغات، يسهل الدخول في الحلقة عند كتابة نص تمهيدي (باليابانية مثلاً) قبيل Edit وغيره.
الاتصال العابر للحدود والخطوط المنزلية والعمل عبر tmux ترفع احتمال توقّف البث.
المهام التي يطول فيها التوليد، كقراءة عدة ملفات كبيرة وإنتاج تقرير طويل.
6. أصلحها الآن (للمستخدمين)
بما أن تكرار جهة النموذج لا يُستأصل بالإعدادات، فإن «الإيقاف السريع ثم إعادة تعيين الحالة» هو الأضمن. والأولوية كالتالي.
- أوقفها فوراً (Esc): حين تلاحظ الحلقة أو التعليق، اقطع التوليد بـEsc. يوقف ذلك هدر رموز الإخراج.
- اهرب إلى جلسة جديدة: بما أن العطل معتمد على الحالة، فإن بدء جلسة جديدة يحلّه غالباً. أما إعادة المحاولة في الجلسة نفسها فيسهل معها التكرار.
- أعد تعيين السياق بـ
/clear: إن أردت متابعة الجلسة، امسح السياق لتخفيف الحالة (/compactيورّث الحالة فلا يضمن الحل). - استدعِ الأداة دون تمهيد: هناك بلاغات بأن عدم كتابة نص طويل قبيل Edit وغيره، وجعل التعليمات تستدعي الأداة بلا أي تمهيد، يسهّل تجنّب الحلقة.
- قسّم المهمة إلى جلسات قصيرة: جعل كل مهمة = جلسة واحدة يبقي زمن التوليد والسياق قصيرين، فيقلّ التكرار وتوقّف البث معاً.
- ثبّت الاتصال: إن تكرر stalled كثيراً، فراجع استقرار الخط أو مسار الوكيل (proxy). المحتوى المبثوث لا يزال موجوداً، فيكفي أن تعيد التوجيه من حيث توقف.
✅ الخلاصة: «إن فشلت مرتين فلا تصرّ، انتقل إلى جلسة جديدة». إعادة المحاولة على الحالة المعطوبة نفسها تجعل النموذج يقلّد تكراره السابق فيعاود بسهولة.
7. للمطوّرين——الوقاية عبر API/SDK
إن كنت تنفّذ حلاً خاصاً عبر Messages API أو SDK، فيمكنك الحدّ من الضرر بالتدابير التالية.
- ضبط مهلة قراءة للبث: إن لم تصل الحِزم خلال مدة معيّنة، اقطع وأعد المحاولة. تجنّب الانتظار اللانهائي (معالجة للسبب الجذري لـstalled).
- حارس كشف التكرار: إن تكرر رمز واحد / سلسلة قصيرة عدداً غير طبيعي من المرات في الإخراج الأخير، اقطع التوليد. يمنع ذلك الاستهلاك المنفلت لرموز الإخراج.
- إعادة محاولة الرد غير المكتمل: تحقّق من
stop_reason، وإن انتهى في المنتصف فأعد المحاولة دون إبقاء الإخراج المعطوب في السجل (السجل المعطوب يحفّز التكرار في الدور التالي). - تعيين حدّ max_tokens: حتى إن انفلت، اجعل هناك حدّاً أعلى للتكلفة والزمن.
- اجعل وسائط الأداة والتمهيد قصيرة: الوسائط الطويلة والتمهيد الطويل قد يكونان من عوامل التحفيز.
8. كيف تميّزها عن الأخطاء المشابهة
| العَرَض/الرسالة | الحقيقة | المعالجة الرئيسية |
|---|---|---|
| تكرار court عشرات المرات → stalled | حلقة تكرار + توقّف البث (هذه المقالة) | أوقف بـEsc → جلسة جديدة/clear |
| تسرّب بضع من court أو وسم invoke الخام | فساد توليد وسم استدعاء الأداة (مقالة أخرى) | إن فشلت مرتين فجلسة جديدة |
| Connection closed mid-response | «قطع» البث (#69415) | مراجعة الاتصال وإعادة المحاولة |
| Prompt is too long | الإدخال تجاوز حدّ السياق | تقليل السياق / /clear |
| usage limit / 429 | حدّ الاستخدام / المعدّل | ترك فترة / التحقق من الخطة |
| Output blocked by content filtering policy | مرشّح الأمان من جهة الإخراج (مقالة أخرى) | إعادة صياغة تتجنّب النسخ الحرفي |
9. حالة المعالجة الرسمية
نرتّب الوضع في يوليو 2026 مع توضيح درجة اليقين.
- ✅ معترف به كعطل معروف: فُتحت لكلٍّ من تكرار court وstalled عدة Issues في مستودع Anthropic الرسمي، ولتكرار court وسمتا
area:modelوbug. - 🟡 الإصلاح الدائم غير مؤكّد: حتى لحظة كتابة هذا النص، لا يمكن التأكيد على إصلاح رسمي «حلّ المشكلة قطعاً». وقد يتحسّن الأمر بتحديث النسخة، لذا يُستحسن إبقاء Claude Code على أحدث نسخة.
- 🟡 السبب معتمد على الحالة والبيئة: تتشابك عوامل عدة كالوقت الطويل والسياق الضخم وجودة الاتصال، ولم تُحدَّد خطوة إعادة إنتاج واحدة.
※ الوضع قابل للتغيّر. للاطّلاع على الأحدث راجع قائمة Issues لـClaude Code ومرجع الأخطاء الرسمي.
الأسئلة الشائعة
س1. هل لكلمة «court» أي معنى؟
لا. إنه «التكرار (degeneration)» حيث يعلق النموذج اللغوي عند الإخراج نفسه، وصادف أن نقطة التعلّق صارت الرمز «court». وقد تكون كلمة أخرى أو سلسلة رموز أخرى. ليست مشكلة في مطالبتك أو بياناتك.
س2. إذا ظهرت «Response stalled mid-stream»، هل يضيع الإخراج الجزئي؟
لا يضيع. كما تقول الرسالة، «قد يكون الرد أعلاه غير مكتمل» فقط، والمحتوى المبثوث حتى تلك اللحظة باقٍ. قد تنقص الجُمل الأخيرة أو استدعاء الأداة، فيكفي أن تعيد التوجيه من حيث توقف.
س3. هل تُحلّ فوراً بإعادة المحاولة؟
قد تُحلّ في الحالات الخفيفة، لكن إعادة المحاولة في الجلسة نفسها يسهل معها التكرار، لأن النموذج يقلّد إخراجه المعطوب السابق (التكرار). الأضمن أنك إن فشلت مرتين فلا تصرّ وتنتقل إلى جلسة جديدة.
س4. هل يُحلّ الأمر بـ/compact؟
غير مؤكّد. /compact يلخّص السياق ويورّث الحالة، فقد يبقى سبب التكرار. إن أردت إعادة تعيين الحالة فإن /clear أو جلسة جديدة أضمن.
س5. هل هذا العطل نفسه «تسرّب وسم court/invoke» المذكور في مقالة؟
مرتبط لكنه مختلف. هذه المقالة من نوع التكرار + توقّف البث: «يدخل court في حلقة لانهائية ثم يتوقف بـstalled». أما نوع تسرّب الوسم فهو «تسرّب بضع من court أو وسم invoke الخام فيفشل استدعاء الأداة»، وللتفصيل راجع المقالة الأخرى.
س6. كيف أمنعه جذرياً كمطوّر؟
النقاط الثلاث الفعّالة: ضبط مهلة قراءة للبث، وقطع التكرار غير الطبيعي بـكشف التكرار، وإعادة المحاولة دون إبقاء الإخراج المعطوب في السجل عند الانتهاء في المنتصف. كما أن حدّ max_tokens يمنع انفلات التكلفة والزمن.
س7. متى يسهل حدوثه؟
يرتفع الاحتمال مع: الجلسات المتواصلة الطويلة لأيام، والسياق الثقيل من مئات الآلاف إلى نحو مليون رمز، وتوليد نص طويل قبيل استدعاء الأداة، والاتصال غير المستقر العابر للحدود أو المنزلي أو عبر tmux، ومهام الإخراج الطويل. جعل كل مهمة = جلسة واحدة وإبقاؤها قصيرة وقاية جيدة.
مقالات ذات صلة
- خطأ إخراج «court» ووسم invoke في Claude Code — نوع تسرّب الوسم (مختلف عن هذه المقالة)
- أسباب ومعالجة Output blocked by content filtering policy — خطأ المرشّح من جهة الإخراج
- ما هو أمر /loop في Claude Code — الاستخدام الصحيح للتنفيذ المتكرر