Skip to content

دليل: الحارسُ يقيسُ الاتّجاهين، والعدمُ ليس قياسًا - #10

Merged
SalehKadah merged 1 commit into
mainfrom
chore/lock-refresh-wave3
Sep 1, 2026
Merged

دليل: الحارسُ يقيسُ الاتّجاهين، والعدمُ ليس قياسًا#10
SalehKadah merged 1 commit into
mainfrom
chore/lock-refresh-wave3

Conversation

@SalehKadah

Copy link
Copy Markdown
Contributor

الموجةُ الثالثة سدّت ثقبًا بنيويًّا: أحدَ عشرَ فصلًا كانت خارجَ مظلّة الحارس
لا إهمالًا، بل لأنّ الأداةَ لم يكن فيها نمطُ بصمٍ يطابق دعواها. ثمّ كشفت
ثلاثُ مراجعاتٍ مستقلّةٍ أنّ الحارسَ نفسَه كان يقيس اتّجاهًا واحدًا.

نمطا بصمٍ جديدان

  • {path, names: true} — يبصم أسماءَ وأنواعَ مدخلات المجلّد مرتَّبةً، لا محتواها.
    وهو الوحيدُ الذي يطابق دعوى «هذا المجلّد يحوي كذا». قِيس على ٢٥٠ إيداعًا:
    بصمةُ شجرةِ tools/ انقلبت (d3fffd2e ⇐ d0f55ac4) والأسماءُ ثابتة — أي إنذارٌ
    أسبوعيٌّ دائمٌ بلا واقعة، وهو الضجيجُ الذي يُسكِت الكاشفَ كلَّه. وفي المدّة
    نفسِها التقط النمطُ في stdlib/ ما يجب: اختفاءَ async·audio3d·crypto·embedded
    وظهورَ جيسون.ص.
  • self: — يبصم من هذا المستودع بلا شبكة، فيصير بوّابةَ PR لا كاشفًا
    أسبوعيًّا. وسببُه واقعة: أُصلح افتراضُ المرجع في الأداة وبقي الفصلُ يصف
    المنقوضَ في اليوم نفسِه، بلا كاشف.

المظلّة: من أربعة أقسامٍ إلى سبعة (GUARDED_SECTIONS)، فدخلت architecture/
وgetting-started/ وcontributing/ — وهي حاملةُ دعاوى الأوامرِ التي يُشغّلها
القارئ. التغطية الآن ٢٩ فصلًا محروسًا، صفرُ فصلٍ يفلت.

الحارسُ يقيس الاتّجاهين

  • الإسقاطُ كتمٌ صامتٌ أيضًا: إزالةُ مصدرٍ من البيان ثمّ --update كانت تقتل
    الكاشفَ لفصولٍ كاملةٍ والبوّابتان خضراوان. تُقرأ فصولُ المفتاح المُسقَط من
    بيان الأساس عبر --base-manifest؛ وإن لم يُمرَّر، احمرّ ولم يمرّ.
  • العدمُ ليس قياسًا: مجلّدٌ فارغ · نطاقٌ خارجَ الملفّ · ردٌّ فارغٌ من gh ·
    تجاوزُ سقفِ ١٠٠٠ مدخلٍ في contents API — كلُّها كانت تُنتج بصمةً واحدةً
    مشتركة (e3b0c442…) تُثبَّت فتخضرّ إلى الأبد. صارت None يحمرّ.
  • غيابُ القفل كان يُطفئ البوّابةَ صامتةً — صار خطأً صريحًا في --validate
    و--guard-lock.
  • رمزُ الخروج ٢ في sync-check.yml كان يجعل شرطَي drift=='1' و=='0' كاذبَين
    معًا: لا قضيّة، ولا خطوةَ «لا انجراف»، والوظيفةُ خضراء وهي لم تقس شيئًا.
  • git show || : كان يبتلع «تعذّر بلوغُ الأساس» مع «لا قفلَ في الأساس» — فُصلا.
  • «✅ سليم … ١ تحذيرًا» مع RC=1 صار «❌ البيانُ ناقص»: مَن يمسح سجلَّ CI بعينه
    يقرأ آخرَ سطرٍ حكمًا.
  • self:+names كان يمسح القرص (٧٠ مدخلًا) والوعدُ «ما يخزّنه git» (٤٣) —
    صار يُشتقُّ من git ls-tree.
  • covers_version كان يُنسخ بيدٍ فيصدُق بالمصادفة — صار يُشتقُّ من git ls-remote.

الفصول، مقيسةً على origin/dev@1138f5e1

  • setup: CMake ٣٫١٥ لا ٣٫٢٠ · x.py بوّابةً · sadc اسمٌ متقاعد · sad.exe موزِّعٌ
    لا مفسّر · python tests/runner.py (لا runner.py في الجذر). و«LLVM اختياريّ»
    كانت تَعِدُ بطريقٍ لا يُكمله أيُّ أمرٍ في الصفحة: هدفُ sad-build يُعرَّف داخل
    if(ENABLE_LLVM_BACKEND AND LLVM_FOUND)، والبديلُ الحقيقيّ sad-build-native.
  • repo-map: القوائمُ العربيّةُ أُخرجت من كتلة الكود إلى جدول — theme/rtl.css
    يفرض direction: ltr على كلّ pre، فكانت تُعرَض معكوسةَ الترتيب وبنجومها.
    وأوامرُ x.py سبعةٌ لا خمسة.
  • first-contribution: الاختبارُ تحت tests/behavior/ لا tests/ — وكان القارئ
    يمرّ بالدعوى المنقوضة قبل الفصل الذي يصحّحها؛ فأُعيد ترتيبُ المسار:
    إعداد ⇐ خريطة ⇐ أوّل مساهمة.
  • overview · interconnected · glossary · dod: التكرارُ الحرفيُّ أُزيل (التعدادُ
    في الخريطة، والدورُ ورابطٌ في النظرة العامّة)، والأعدادُ صارت تقول إنّها
    حجمُ مجلّدٍ لا حجمُ أثر.

ثلاثُ دعاوى كانت مقيسةً بلا حارس صارت مبصومة:
apps/CMakeLists.txt#L292-310 · tests/config.yaml#L15-23 · #L27 في فصلين.

البراهين (كسرٌ متعمّدٌ ثمّ استعادة، لا قراءةُ كود)

  • إسقاطُ .#names ⇒ ❌ يسمّي overview·repo-map·setup — RC=1
  • _chunk_digest للحالات الأربع ⇒ None
  • غيابُ القفل ⇒ RC=1 في --validate و--guard-lock
  • حذفُ تسجيلِ فصلٍ ⇒ ❌ البيانُ ناقص
  • تعديلُ check_sync.py بلا تثبيت ⇒ ❌ يسمّي freshness.md

الحالة: ٩٢ بصمة · ٣٠ فصلًا مسجَّلًا · drift: false · mdbook نظيف.

راجعه ثلاثةُ وكلاء: تجربةُ القارئ · محاكمةُ كلِّ دعوًى على origin/dev ·
جولةٌ ثالثةٌ على الأداة.

🤖 Generated with Claude Code

الموجةُ الثالثة سدّت ثقبًا بنيويًّا: أحدَ عشرَ فصلًا كانت خارجَ مظلّة الحارس
لا إهمالًا، بل لأنّ الأداةَ لم يكن فيها نمطُ بصمٍ يطابق دعواها. ثمّ كشفت
ثلاثُ مراجعاتٍ مستقلّةٍ أنّ الحارسَ نفسَه كان يقيس اتّجاهًا واحدًا.

نمطا بصمٍ جديدان
- {path, names: true} — يبصم أسماءَ وأنواعَ مدخلات المجلّد مرتَّبةً، لا محتواها.
  وهو الوحيدُ الذي يطابق دعوى «هذا المجلّد يحوي كذا». قِيس على ٢٥٠ إيداعًا:
  بصمةُ شجرةِ tools/ انقلبت (d3fffd2e ⇐ d0f55ac4) والأسماءُ ثابتة — أي إنذارٌ
  أسبوعيٌّ دائمٌ بلا واقعة، وهو الضجيجُ الذي يُسكِت الكاشفَ كلَّه. وفي المدّة
  نفسِها التقط النمطُ في stdlib/ ما يجب: اختفاءَ async·audio3d·crypto·embedded
  وظهورَ جيسون.ص.
- self:<path> — يبصم من هذا المستودع بلا شبكة، فيصير بوّابةَ PR لا كاشفًا
  أسبوعيًّا. وسببُه واقعة: أُصلح افتراضُ المرجع في الأداة وبقي الفصلُ يصف
  المنقوضَ في اليوم نفسِه، بلا كاشف.

المظلّة: من أربعة أقسامٍ إلى سبعة (GUARDED_SECTIONS)، فدخلت architecture/
وgetting-started/ وcontributing/ — وهي حاملةُ دعاوى الأوامرِ التي يُشغّلها
القارئ. التغطية الآن ٢٩ فصلًا محروسًا، صفرُ فصلٍ يفلت.

الحارسُ يقيس الاتّجاهين
- الإسقاطُ كتمٌ صامتٌ أيضًا: إزالةُ مصدرٍ من البيان ثمّ --update كانت تقتل
  الكاشفَ لفصولٍ كاملةٍ والبوّابتان خضراوان. تُقرأ فصولُ المفتاح المُسقَط من
  بيان الأساس عبر --base-manifest؛ وإن لم يُمرَّر، احمرّ ولم يمرّ.
- العدمُ ليس قياسًا: مجلّدٌ فارغ · نطاقٌ خارجَ الملفّ · ردٌّ فارغٌ من gh ·
  تجاوزُ سقفِ ١٠٠٠ مدخلٍ في contents API — كلُّها كانت تُنتج بصمةً واحدةً
  مشتركة (e3b0c442…) تُثبَّت فتخضرّ إلى الأبد. صارت None يحمرّ.
- غيابُ القفل كان يُطفئ البوّابةَ صامتةً — صار خطأً صريحًا في --validate
  و--guard-lock.
- رمزُ الخروج ٢ في sync-check.yml كان يجعل شرطَي drift=='1' و=='0' كاذبَين
  معًا: لا قضيّة، ولا خطوةَ «لا انجراف»، والوظيفةُ خضراء وهي لم تقس شيئًا.
- git show || : كان يبتلع «تعذّر بلوغُ الأساس» مع «لا قفلَ في الأساس» — فُصلا.
- «✅ سليم … ١ تحذيرًا» مع RC=1 صار «❌ البيانُ ناقص»: مَن يمسح سجلَّ CI بعينه
  يقرأ آخرَ سطرٍ حكمًا.
- self:+names كان يمسح القرص (٧٠ مدخلًا) والوعدُ «ما يخزّنه git» (٤٣) —
  صار يُشتقُّ من git ls-tree.
- covers_version كان يُنسخ بيدٍ فيصدُق بالمصادفة — صار يُشتقُّ من git ls-remote.

الفصول، مقيسةً على origin/dev@1138f5e1
- setup: CMake ٣٫١٥ لا ٣٫٢٠ · x.py بوّابةً · sadc اسمٌ متقاعد · sad.exe موزِّعٌ
  لا مفسّر · python tests/runner.py (لا runner.py في الجذر). و«LLVM اختياريّ»
  كانت تَعِدُ بطريقٍ لا يُكمله أيُّ أمرٍ في الصفحة: هدفُ sad-build يُعرَّف داخل
  if(ENABLE_LLVM_BACKEND AND LLVM_FOUND)، والبديلُ الحقيقيّ sad-build-native.
- repo-map: القوائمُ العربيّةُ أُخرجت من كتلة الكود إلى جدول — theme/rtl.css
  يفرض direction: ltr على كلّ pre، فكانت تُعرَض معكوسةَ الترتيب وبنجومها.
  وأوامرُ x.py سبعةٌ لا خمسة.
- first-contribution: الاختبارُ تحت tests/behavior/ لا tests/ — وكان القارئ
  يمرّ بالدعوى المنقوضة قبل الفصل الذي يصحّحها؛ فأُعيد ترتيبُ المسار:
  إعداد ⇐ خريطة ⇐ أوّل مساهمة.
- overview · interconnected · glossary · dod: التكرارُ الحرفيُّ أُزيل (التعدادُ
  في الخريطة، والدورُ ورابطٌ في النظرة العامّة)، والأعدادُ صارت تقول إنّها
  حجمُ مجلّدٍ لا حجمُ أثر.

ثلاثُ دعاوى كانت مقيسةً بلا حارس صارت مبصومة:
apps/CMakeLists.txt#L292-310 · tests/config.yaml#L15-23 · #L27 في فصلين.

البراهين (كسرٌ متعمّدٌ ثمّ استعادة، لا قراءةُ كود)
- إسقاطُ .#names ⇒ ❌ يسمّي overview·repo-map·setup — RC=1
- _chunk_digest للحالات الأربع ⇒ None
- غيابُ القفل ⇒ RC=1 في --validate و--guard-lock
- حذفُ تسجيلِ فصلٍ ⇒ ❌ البيانُ ناقص
- تعديلُ check_sync.py بلا تثبيت ⇒ ❌ يسمّي freshness.md

الحالة: ٩٢ بصمة · ٣٠ فصلًا مسجَّلًا · drift: false · mdbook نظيف.

راجعه ثلاثةُ وكلاء: تجربةُ القارئ · محاكمةُ كلِّ دعوًى على origin/dev ·
جولةٌ ثالثةٌ على الأداة.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@SalehKadah
SalehKadah merged commit ce70187 into main Sep 1, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant