دليل: موجةٌ ثانيةٌ تُغلقُ الانجرافَ — وتربطُ كلَّ دعوًى حاملةٍ بمصدرٍ مبصوم - #9
Merged
Conversation
عطبان في أداةِ المزامنةِ نفسِها — لا في الفصول: ١) `cmd_guard_lock` كان يمرّرُ بصمةً تقدّمت إن عُدِّل **أيُّ** فصلٍ يستشهدُ بمصدرها. فمفتاحٌ مشتركٌ (أربعةٌ اليوم: `scripts/codegen` · `_schemas` · `language-truth/grammar` · `ast_visitor.h`) كان يَسِمُ الفصلَ الثانيَ طازجًا وما قرأه أحد — أي أنّ الحارسَ يكتمُ ما بُنيَ لِيَكشِفَه. صار يشترطُ **كلَّ** الفصول، ويسمّي المتروكَ منها والمشتركَ معه. ٢) `sync-check` الأسبوعيُّ كان يقيسُ الانجرافَ عند «آخرِ وسمِ إصدار» بينما القفلُ مبصومٌ عند `dev`. وv1.0.0 وسمُ ٢٠٢٦-٠٣-٠٩، سابقٌ لـ`language-truth/` و`scripts/codegen`، فأعلنَ التقريرُ حذفَ ٣٠ مسارًا وتعذُّرَ ٤٧ (القضيّة #1) وكلُّها قائمةٌ سليمةٌ على dev — إنذارٌ دائمٌ لا يُقرأ، وتحته تعفّنَت أحدَ عشرَ فصلًا بلا كاشف. صار الافتراضيُّ مرجعَ القفلِ نفسَه، ويُرفَعُ تحفّظٌ صريحٌ — على المعيار وفي جسمِ القضيّة — كلّما اختلفَ المرجعان. برهانان (خارج المستودع): مفتاحٌ مشتركٌ بفصلٍ واحدٍ يُرَدُّ وبفصلَيه يمرّ · لافتةُ المرجعِ تظهرُ عند الاختلافِ وتغيبُ عند التطابق. `--validate` سليم. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
… مبصوم ستّةُ فصولٍ رُوجعت (llvm · interpreter · ast · grammar-sot · crypto-unification · sadui-layout)، وعشرون بصمةً تقدّمت أو أُضيفت، فبلغ الانجرافُ **صفرًا**: أربعةٌ وستّون مصدرًا كلُّها مبصومةٌ ومطابقةٌ لـdev لأوّل مرّة. و`covers_version` صار `dev@1138f5e1` لا `1.0.0` — الدليلُ يصفُ dev لا إصدارَ آذار. ما كان يكذبُ في الفصول: • `SIRBuilder` ليس زائرًا — يرثُ SIRBuilderContext ويوزّعُ بـdynamic_cast، والمخطّطُ كان يرسمُه فرعًا من ASTVisitor. أثرُه عمليّ: دالّةُ visit وحدَها لا تصلُ المترجم، فتسقطُ العقدةُ صامتةً. • `--emit-llvm` علمٌ لا وجودَ له — القانونيُّ `--أظهر-llvm` (لا مرادفات). • `ClassManager` مُفرَدٌ عابرٌ للمحرّكين، يقفلُ إنشاءَه لا خريطتَه — فوعدُ عزلِ الـgoroutines لا يشملُه. • `execute` لا يبدأُ بالتنفيذ: طورٌ ساكنٌ يمسحُ البرنامجَ كلَّه، وفاحصُ الأنواعِ فيه **مطفأٌ افتراضيًّا**، والثلاثةُ محجوبةٌ على wasm وأندرويد. • `sadc.exe` اسمٌ متقاعدٌ لا يُنتجه هدف — وsetup.md كان يوصي بنسخِ الثنائيّ إليه، أي يوصي بعطب. الهدفُ `sad-build`، والمفسّرُ `sad-run`. • أعدادٌ تباعدت: ٨٢←١٠٤ مفتاحَ خاصّيّة · «أربعةُ ملفّات»←٢٠ · ٩٥ دالّةَ زيارة منها ٥ بجسمٍ فارغ لا صرفة · ثمانيةُ مجلّداتِ بُناة. • `sadinfo` أداةٌ متقاعدةٌ بقيت في أربعةِ فصول. والأهمُّ بنيويًّا: سبعةُ مصادرَ تحملُ الدعاوى المركزيّةَ لهذه الفصول لم تكن مسجَّلةً في البيان أصلًا (sir_builder.h · interpreter_core.cpp · class_manager · cli_flags.yaml · …)، فانجرافُها لا يُرصَد. سُجّلت وبُصمت، و`pipeline.md` سُجّل فصلًا (٢٢ فصلًا لا ٢١). البوّابات: --validate ٠ · الحارسُ الأصرمُ مرّ بعشرين بصمةً كلٌّ بكلّ فصولها · الانجراف صفر · mdbook نظيف · ٧٣٢ رابطًا محلّيًّا بلا كسر. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
المحصّلة
الانجراف صفر. الأربعة والستّون مصدرًا كلُّها مبصومةٌ ومطابقةٌ لـ
dev— لأوّل مرّة.و
covers_versionصارdev@1138f5e1بدل1.0.0: الدليلُ يصف حالةَdev(الخلفيّةالأصليّة · التعداد بحمولة · لهجة التجميع)، وشيءٌ من ذلك ليس في إصدار آذار.
مبنيٌّ فوق #8 (الحارس الأصرم) — يُدمَج بعده، وحتّى ذلك يعرض إيداعَيه.
ما راجعتُه: ستّة فصول، وعشرون مفتاحًا
خمسةٌ كانت متخلّفةً عمدًا منذ الموجة الأولى، وثمانيةٌ لم تُبصَم قطُّ منذ أُدخلت في
#4/#5 — فصلاها (
sadui-layout·crypto-unification) كانا خارج مظلّة الكشف تمامًا.وسبعةٌ أخرى أضافتها المراجعة (انظر «دعاوى حاملةٌ بلا رابط» أدناه).
ما وجدتُه بالقياس
الأثقل: مخطّطٌ يدّعي بنيةً غير قائمة
ast.mdكان يرسمASTVisitorوتحته ثلاثةُ مستهلكين: المفسّر ·SIRBuilder· «منسّق/LSP».المقيس:
SIRBuilderليس زائرًا —class SIRBuilder : public SIRBuilderContext،مدخلُه
buildModule(ProgramNode*)، وتوزيعُه بـdynamic_castعبر بُناةٍ فرعيّةٍfriend.ولا منسّقَ ولا LSP يطبّقه اليوم.
أثرُ الكذبة عمليّ: مَن أضاف عقدةً وتبع الفصلَ ظنّ أنّ دالّة
visitتكفي — والمترجمُلا يشكو، بل تسقط العقدةُ في
dynamic_castغيرِ مطابقٍ ⇒ سلوكٌ صامت. وُثِّقت الخطوةُاليدويّة صراحةً.
عَلَمٌ يوصي به الدليلُ والمحلِّلُ يرفضه
--emit-llvmلا وجود له.cli_flags.yamlصريح: «اسمٌ عربيٌّ قانونيٌّ وحيد، بلامرادفات ولا توافقٍ خلفيّ» — والقانونيُّ
--أظهر-llvm. كان فيllvm.mdوفيpipeline.md(موضعان) — أي أنّ الدليلَ يعلّم قارئَه أمرًا يُردّ عليه. نفسُ العلّة التيأصابت جدولَ أعلام الذاكرة في الموجة الأولى، في ملفَّين آخرين.
عقدٌ معلَنٌ لا يقيسه أحد
interpreter.mdكان يعدّClassManagerمديرًا من مدراء المفسّر. المقيس: مُفرَدٌ(singleton) في
shared/typesيناديه المحلّلُ والمفسّرُ والمترجمُ جميعًا. وترويستهتصفه بأنّه «آمنٌ للخيوط المتعدّدة»، بينما
class_manager.cppيقول:getInstanceو
resetInstanceوحدهما يقفلان — أمّاregisterClass/getClass/hasClassوسائرُالخريطة فبلا قفل. فالوصفُ يغطّي إنشاءَ المُفرَد لا محتواه، وقسمُ التزامن كان
يَعِدُ بعزلٍ يشمله وهو خارجه. وُثِّق كحدٍّ مقيسٍ للعزل، لا كحكمٍ بعطبٍ مرصود.
طورٌ كاملٌ غائبٌ عن الفصل
execute()لا يبدأ بالتنفيذ: يمسح البرنامجَ كلَّه أوّلًا — قاعدةُ الدالّة الرئيسيّة ·فحصُ الأنواع · تحليلُ أمان العدم — ويشمل ذلك الدوالَّ غيرَ المُنادَاة والفروعَ الميّتة.
وأهمُّ ما فيه:
enableTypeCheck = falseافتراضيًّا، فالمفسّرُ يعمل بفاحصِ الأنواعمُطفأً. ومَن رأى برنامجًا يجري على
sad-runويسقط علىsad-buildفقد يظنّها تباعُدَمحرّكين وهي طورٌ ساكنٌ شغّله أحدُهما دون الآخر. والأطوارُ الثلاثة محجوبةٌ على wasm
وأندرويد — فلا تُقاس دلالةُ اللغة على أيٍّ منهما. أُضيف القسمُ كاملًا بمخطّطه.
أعدادٌ تباعدت عن مصادرها
sadui-layout.mdprop_keys.h)crypto-unification.mdinterpreter.mdvisitors/llvm.mdast.mdالاسم القانونيّ بلا شدّة
assertions.yamlيسجّلcanonical: شفر، والفصلُ يكتبشفّرفي سبعة مواضع. وتعملالشدّةُ في الاختبارات لأنّ المعجميّ يتخطّى علامات التشكيل (U+064B–U+065F) داخل
المعرِّفات — فالشدّةُ زينةُ كتابةٍ لا فرقُ اسم، والقانونيُّ للتوثيق والأدوات هو المجرَّد.
أداةٌ متقاعدةٌ ما تزال في الخريطة
sadinfoتقاعدت في تمّوز، وsot/codegen.mdوثّق تقاعدَها في الموجة الأولى — وبقيتحيّةً في أربعةِ فصولٍ أخرى (
overview·repo-map·philosophy·status).واستُبدلت بقائمة
tools/المقيسة. ومثلهاsad.exe: هو موزِّعُ الأوامر (Hub) لاالمفسّر — والمفسّرُ
sad-run.exe.زيادةٌ لا تصحيح
grammar-sot.mdكان يعدّ ثمانيةَ ملفّاتٍ فيlanguage-truth/grammar/— وفيه ثلاثةٌأخرى، أهمُّها
lowers_to.yaml:ربطُ كلّ قاعدةٍ بأوپكودات SIR مُشتقًّا بالتشغيل لا بالتحليل (تُترجَم اختباراتُ
القاعدة بـ
--أظهر-sirوتُجمَع أوپكوداتُها). إحصاؤه: ١٠٧ قواعد · ١٠٥ مشتقّة · ٢not_derived، والتغطية الأصليّة ١٠٢ x86-64 · ١٠٢ arm64 · ٢٦ riscv64. فهذا هوالمكانُ الذي تُقرأ فيه فجوةُ RISC-V كمًّا لا انطباعًا — وقاعدةٌ لم تُترجَم تُوسَم
صراحةً بدل أن تسقط من الإحصاء.
البوّابات
check_sync.py --validaterc=0— ٢٢ فصلًا مسجَّلًا--guard-lock(الأصرم من #8)check_sync.py(انجراف)drift: false— صفرُ تغيّرٍ وصفرُ إضافةٍ وصفرُ حذفٍ وصفرُ تعذّرmdbook buildما أضافته المراجعة المستقلّة (أميليا)
ثمانيةُ أعطابٍ في عملي، أثقلُها ثلاثة:
دعوًى تنقضُ نفسَها. كتبتُ «٩٥ دالّةَ زيارةٍ كلُّها
= 0». المقيس: ٩٠ صرفةًو٥ بجسمٍ فارغ (
visitEnumVariantExpr·visitAsmBlockStmt· و٣ من عقد الواجهة)— وهنّ بعينهنّ بابُ السلوك الصامت الذي يحرسه
= 0في الباقي، فصار التحذيرُ في متنالفصل. و«يمسحُ البرنامجَ ثلاثَ مرّات» ناقضت «فحصُ الأنواع مطفأٌ افتراضيًّا» بعدها
بسطور: المسحُ مرّتان افتراضيًّا. و
dynamic_cast: كتبتُ ٦٦، والمقيسُ ٦٨٠ سطرًافي ٣٧ ملفًّا.
دليلٌ يوصي بعطب.
setup.mdكان يقول: انسخ الثنائيَّ إلىsadc.exeقبل تشغيلrunner.py. وsadc.exeاسمٌ متقاعدٌ لا يُنتجه أيُّ هدف — نصُّtests/config.yamlصريح، والـrunner يقرأ المسارَين منه منذ توحيد الأسماء. أصلحتُ
sad.exeفي السطرالسابق وتركتُ هذا في السطر التالي. تُعقّب في ١٣ ملفًّا وأُصلح (
--target sadc←sad-build)، وبقي في المسرد مشطوبًا بسبب تقاعده لا محذوفًا.دعاوى حاملةٌ بلا رابط — وهو أخطرُ من أيّ رقم. «صفرُ انجراف» كان يقيس مصادرَ
غيرَ التي تتكلّم عنها الفصول: سبعةُ مصادرَ تحمل الدعاوى المركزيّة لم تكن مسجَّلةً
في البيان أصلًا.
ast.mdSIRBuilderليس زائرًا»sir_builder.hinterpreter.mdClassManagerinterpreter_core.cpp·class_manager.h/.cpp·channel.hllvm.mdcli_flags.yaml·compiler_driver_backend_llvm_absent.cppgrammar-sot.mdgen_grammar_lowers_to.pycrypto-unification.mdlexer_core.cpppipeline.mdسُجّلت كلُّها وبُصمت. و
pipeline.mdصار فصلًا مسجَّلًا (٢٢ لا ٢١).وأصلحت أيضًا:
شفّربقيت في أربعةِ ملفّاتٍ أخرى · قائمةُtools/كانت ١٣ من ١٥ ·AstAnalysisVisitorلاASTAnalysisVisitor· مصدرُ الرفض عند غياب LLVM ليس#ifdefبل هدفٌ ثانٍsad-build-nativeيُبنى دائمًا (ورمزُهINT_LLVM_PATH_ABSENT) ·«ثلاثةُ ملفّات» في
language-truth/grammar/والفعليُّ ستّة ·freshness.mdكانيصف
covers_versionبالشكل القديم.ما يبقى مكشوفًا — في مستودع اللغة لا هنا
.github/skills/sad-lang-dev/references/build-test.md:53ما يزال يوصي بـ--emit-llvm،وهو عَلَمٌ ترفضه
cli_flags.yaml. يستحقّ رقعةً فيdev.161_في مجموعة التشفير (argon2idوx25519) — العدُّ ٢٠صحيح، لكنّ المدى
154–168يخفي التصادم.cli_flags.yamlصار مشتركًا بين ثلاثة فصول، فأيُّ تقدُّمٍ له يلزمه تعديلُهاالثلاثة (سلوكُ الحارس المقصود من دليل: حارسٌ يقيسُ كلَّ فصلٍ، وفحصٌ يقيسُ مرجعَ القفلِ لا وسمًا سواه #8). البديلُ إن ثقُل: بصمُ نطاقِ عائلةِ الأعلام
وحدَها بدل الملفّ كاملًا.