Skip to content

ci: WU-1 whitespace gate, local parity and fail-closed MySQL residue check (F4-01, F4-02, F4-12) - #67

Merged
megyptm merged 2 commits into
mainfrom
claude/wu1-whitespace-parity-residue-e26698
Oct 22, 2026
Merged

megyptm merged 2 commits into
mainfrom
claude/wu1-whitespace-parity-residue-e26698

Conversation

@megyptm

@megyptm megyptm commented Oct 22, 2026 •

Copy link
Copy Markdown
Collaborator

الملخص

تنفيذ WU-1 فقط: F4-01 + F4-02 + F4-12 (بوابة المسافات / التكافؤ المحلي / فحص مخلّفات MySQL). يغلق عمل #63 ضمن متتبع الإصدار #37 (يبقى مفتوحًا، والإصدار RELEASE BLOCKED). المراجع المعيارية: CI_WORKFLOW_STANDARD §2.1 و§8 و§11 (Pinned 44c8827095ab4007c355aa21c56b853f3b49d795، دون تغيير الـ Pin أو الملفات المثبتة).

Ref #63, Ref #37

المراجع

  • Base SHA: aaafab6f89ac0d511190787eeb4a7f0c5e34608a (origin/main، لم يتحرك)
  • HEAD SHA: 727afd80726727d64fc383c3e46c1776af354ad0 (الالتزام الأول: 042effd4a3a40eb3a6a2f075d2d5e8903441e2dd، ثم التزام الإصلاحات 727afd8؛ بلا amend/force-push)
  • Tree SHA: de85ce1edba60581c3b95793af0c57b3a5cf50b7

ملخص الـ diff (15 ملفًا؛ التراكمي الحالي +706/−134)

الملف التغيير
scripts/check-whitespace.sh يفحص الشجرة المُلتزَم بها كاملة (HEAD مقابل empty tree) + staged/unstaged/untracked
scripts/check-php-syntax.sh حلقة php -l (src, tests, examples, scripts, .php-cs-fixer.php)
scripts/resolve-lowest-dependencies.sh تسلسل validate + update --prefer-lowest --prefer-stable + platform + audit
scripts/check-mysql-residue.php فحص للقراءة فقط لجداول/views/triggers/routines/events بالبادئات المملوكة للحزمة
scripts/mysql-package-objects.php مصدر وحيد لبادئات أسماء أجسام الاختبار: maa_persistence_test_، maa_persistence_consumer_، maa_example_
composer.json scripts فقط: check:syntax, check:whitespace, check:lowest, check:residue (لا dependencies ولا version)
.github/workflows/ci.yml استبدال المنطق المضمّن بالأوامر المحلية؛ أسماء الـ jobs وCI Gate وneeds دون تغيير
.gitattributes ×4 (docs/studies) -whitespace لـ 20 ملف دليل حرفي بأسمائها الدقيقة + تصحيح التعليق المضلِّل في issue-32
CONTRIBUTING.md, README.md جدول CI ↔ محلي مع المتطلبات؛ تحديث قسم Development
tests/Unit/Tooling/MysqlPackageObjectPrefixesTest.php يفشل إذا استُخدم اسم maa_ خارج البادئات المسجلة (يمنع تجاهل أجسام جديدة بصمت)
tests/Integration/Tooling/MysqlResidueScriptTest.php يثبت أن الفحص يكشف الأجسام المملوكة، لا يبلّغ عن أجسام Host، ولا يحذف شيئًا

لا تغيير في src/ ولا العقد العام ولا SQL المستهلك ولا Adoption ولا المعايير المثبتة.

قرارات تصميم

  • F4-01: تُفحص الشجرة المُلتزَم بها كاملة في كل سياق (PR وpush)؛ هذا مجموعة أشمل من base..HEAD ويعمل مع checkout سطحي (shallow) دون fetch-depth: 0. الاستثناءات -whitespace بالأسماء الدقيقة للملفات الحرفية فقط (أو مجلدات i42/run-6/run-7 الموجودة أصلًا)، فتبقى أي ملفات جديدة تحت الفحص. لم تُعدَّل بايتات الأدلة.
  • F4-12: الفحص fail-closed على أي جسم بالبادئات المملوكة (بما فيها maa_example_*_<hex> وmaa_persistence_consumer_<hex> وجداول/triggers الـ lsp)، للقراءة فقط، داخل قاعدة الاختبار المخصصة، ولا يلمس أي اسم خارج البادئات.

أدلة RED / GREEN

RED (baseline aaafab6):

  • git diff --check على checkout نظيف → exit 0، بينما git diff --check $(git hash-object -t tree /dev/null) HEAD → exit 2 ويجد 79 سطرًا معيبًا (كلها تحت docs/studies).
  • فحص المخلّفات القديم يخرج بـ exit 0 مع وجود: maa_persistence_test_deadlock_retry_items، maa_persistence_test_lsp_plain، trigger maa_persistence_test_lsp_neutral، maa_example_items_deadbeef0001، maa_persistence_consumer_deadbeefdeadbeef؛ ويفشل فقط للجداول الأربعة/الـ triggers الاثنين المسرودة.

GREEN (هذا الـ PR) على MySQL 8.4.10 حقيقي (mysql:8.4.10 مع --log-bin-trust-function-creators=1، docker على المنفذ 3399):

  • composer check:residue على نفس الأجسام الخمسة غير المسرودة → exit 1 ويسردها كلها؛ وبعد التنظيف → exit 0.
  • composer check:whitespace على الشجرة الحالية → exit 0. وبعد commit عيوب جديدة (فرع تجريبي محلي لم يُدفع) في src/ وtests/ وdocs/ وexamples/ → exit 1 مع تحديد الملفات الأربعة؛ بينما git diff --check القديم على نفس الشجرة → exit 0.

نتائج البوابات المحلية (على HEAD أعلاه)

البوابة النتيجة
composer validate --strict / dump-autoload --optimize --strict-psr / check-platform-reqs / audit --abandoned=fail ناجحة
composer analyse (PHPStan max) No errors
php-cs-fixer fix --dry-run --diff 0 ملفات
composer check:syntax 117 ملفًا ناجحة
composer check:whitespace ناجحة
composer test:unit / test:regression 382 / 97 OK
composer test:integration ×2 (MySQL 8.4.10) 201 اختبارًا OK في كل مرة
composer test:consumer ×2 (تشغيلان داخليان لكل أمر) OK لكل السيناريوهات الثمانية
composer check:residue بعد كل ما سبق ناجح (قاعدة نظيفة)
actionlint v1.7.12 (صورة docker rhysd/actionlint:1.7.12) بلا أخطاء

ملاحظة صدق: في تشغيل سابق لـ test:integration فشل اختبار واحد (PdoDeadlockRetryRunnerIntegrationTest::testExhaustionAfterFourRealDeadlocksPropagatesTheExactFinalPdoException: محاولتان بدل أربع) أثناء حمل شديد على الجهاز المضيف (load average ≈ 48)، ونجح في التشغيل التالي مباشرة وفي كل التشغيلات اللاحقة؛ لا علاقة له بتغييرات هذا الـ PR (لا تغيير في src/). تنظيف مخلّفات تشغيلات قُتلت بسبب توقف الجهاز تم يدويًا على حاوية الاختبار المؤقتة فقط، وكشفها فحص المخلّفات الجديد كما هو مقصود.

الجولة الثانية — معالجة مراجعة القيادة F67-01..F67-06 (التزام واحد 727afd8)

كل البنود في جولة واحدة. RED = على 042effd؛ GREEN = على 727afd8.

البند RED الإصلاح GREEN
F67-01 PHPStan في lowest composer check:lowest ثم phpstan analyse -c phpstan.neon على PHP 8.4 المحلي: 8 أخطاء (offsetAccess.nonOffsetAccessible وargument.type) في MysqlResidueScriptTest.php:70-73، مطابقة للـ CI إزالة قراءة $pipes: مخرجات proc_open عبر ملفات مؤقتة (['file', ...]) بلا ignores ولا baseline ولا casts PHPStan No errors على lowest وعلى latest (النسخة الأولى باستخدام assertIsArray أخفقت على latest بـ alreadyNarrowedType فاستُبدلت)
F67-02 حارس الأسماء ملف tests/Fixtures/MySql/create_newfamily.sql بـ maa_newfamily_items ← الاختبار القديم OK الجرد يشمل *.sql و*.php تحت tests/ وexamples/، مع اختبار سلبي بـ DDL يحوي اسمًا خارج البادئات (testScanFlagsAFixtureNameOutsideTheRegisteredPrefixes) الاختبار يمر ويتأكد من مسح ملفات SQL فعلية. حد معلن: الأسماء المركّبة وقت التشغيل لا يكشفها هذا الجرد
F67-03 wildcards ملف جديد معيب تحت run-6-i42-decision-a/ ← البوابة تنجح (exit 0) استبدال i42-phase-a-independent-mac/** وrun-6-i42-decision-a/** وrun-7-i42-decision-b/** بـ 134 سطرًا باسم ملف دقيق (بلا أي wildcard) عيب جديد مُلتزَم به يفشل البوابة في كل من: src, tests, docs, examples, scripts, results/, الثلاثة المستثناة سابقًا (i42…, run-6…, run-7…), run-1-initial, run-4-decision-cell, issue-47/results, issue-48/results, issue-55, docs/studies (15/15 detected)، وعيب غير مُلتزَم (untracked) في مجلد مستثنى سابقًا يفشل أيضًا؛ والملفات الحرفية الموجودة تبقى مستثناة والبوابة تنجح على الشجرة
F67-04 أخطاء صامتة mv examples examples.bak ← check:syntax ينجح (104 ملفات، exit 0) بسبب 2>/dev/null check-whitespace.sh: إزالة `
F67-05 مخطط جداول الاختبار جدولا الاختبار الجديدان بلا COMMENT id بـ COMMENT وPRIMARY KEY وCOMMENT للجدول، وتوثيق السياسة في رأس الصنف (جدول مؤقت بمفتاح بديل فقط، بلا soft delete/ترتيب/FK/uniqueness إضافية، فلا حاجة لفهرس آخر) داخل WU-1 دون لمس جداول WU-2 مرور الاختبارات على MySQL حقيقي
F67-06 أنواع الأجسام الاختبار القديم يغطي table وtrigger فقط MysqlResidueScriptTest بـ data provider: table, view, trigger, function, procedure, event × البادئات الثلاث (18 حالة)؛ لكل حالة: exit 1، السطر الصحيح Remaining …: يحوي الاسم، لا يُبلَّغ عن الجدول الغريب host_app_*، الجسم المُبلَّغ عنه وجدول Host يبقيان (قراءة فقط)، وبعد التنظيف لا يُبلَّغ الاسم 18/18 OK على MySQL 8.4.10

نتائج GitHub CI على HEAD 727afd8: 10/10 PASS (Run 39736220973، بما فيها Lowest dependencies وCI Gate)

نتائج البوابات (HEAD 727afd8، Tree de85ce1edba60581c3b95793af0c57b3a5cf50b7)

  • lowest dependencies محليًا: PHPStan No errors (بعد إصلاح F67-01)؛ مع ملاحظة بيئية: على PHP 8.4 المحلي (Composer 2.8.6) يحل --prefer-lowest إلى phpunit/symfony-process أقدم مما يحله CI على PHP 8.2 (phpunit 11.5.50 / process 5.4.51، وaudit في CI نظيف)، فيُبلّغ composer audit المحلي عن advisories غير موجودة في CI؛ المرجع الملزم هو CI.
  • latest: validate / dump-autoload / platform-reqs / audit / PHPStan / php-cs-fixer (0 ملفات) / syntax (117) / whitespace: كلها ناجحة.
  • unit 383 و regression 97 OK؛ integration ×2: 218 اختبارًا OK في كل مرة؛ Consumer Harness ×2: ناجح (تشغيلان نظيفان داخل كل أمر)؛ check:residue بعد كل ذلك ناجح (قاعدة نظيفة). MySQL 8.4.10 حقيقي (docker).

BC Impact

لا أثر: scripts/CI/tests/docs فقط. لا Tag ولا Release ولا version ولا تغيير في حالة #37.

🤖 Generated with Claude Code

Technical Lead Flowchart (English)

flowchart TD
    A[CI or local verification] --> B[Resolve dependencies and validate PHP]
    B --> C[PHP syntax and static quality gates]
    C --> D[Whitespace verification]
    D --> E{Committed, staged, unstaged, or untracked defects?}
    E -- Yes --> X[Fail the required gate]
    E -- No --> F[Run applicable unit, regression, integration, and consumer checks]
    F --> G[Inspect dedicated MySQL test schema]
    G --> H{Package-owned tables, views, triggers, routines, or events remain?}
    H -- Yes --> X
    H -- No --> I[Report residue check passed]
    I --> J{All required CI jobs successful?}
    J -- No --> X
    J -- Yes --> K[CI Gate succeeds]
Loading

The workflow shows the intended verification flow; it is not acceptance evidence. Source details and red/green probes remain subject to the independent review on this PR.

…sed MySQL residue check (Ref #63, #37)

- scripts/check-whitespace.sh checks HEAD against the empty tree plus
  staged/unstaged/untracked changes; verbatim study evidence is exempt
  per file via targeted -whitespace attributes.
- scripts/check-php-syntax.sh, resolve-lowest-dependencies.sh and
  check-mysql-residue.php are exposed as composer check:* scripts and used
  by CI and local runs alike.
- scripts/mysql-package-objects.php is the single source of package-owned
  object-name prefixes; the residue check is read-only and reports tables,
  views, triggers, routines and events.
- CONTRIBUTING.md documents the CI-to-local gate mapping.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>

megyptm commented Oct 22, 2026

Copy link
Copy Markdown
Collaborator Author

مراجعة القيادة المستقلة — الجولة الأولى المجمّعة لـ WU-1 (2026-10-22)

القرار: CHANGES REQUIRED / MERGE NO-GO. راجعت فرق الـ15 ملفًا بالكامل، والسكربتات والاختبارات الجديدة، وAGENTS.md والمعايير المثبتة، ووصف PR وأدلة RED/GREEN وIssues #63–#66 وسجل GitHub Actions الفعلي. هذه جولة ملاحظات واحدة مجمعة، وليست مراجعة بلوكر وراء بلوكر.

الأساس الثابت: Base aaafab6f89ac0d511190787eeb4a7f0c5e34608a / HEAD 042effd4a3a40eb3a6a2f075d2d5e8903441e2dd / Tree a76d802e23d72ab45db73f86c904f40759d7a4f2، متطابق من GitHub Git Objects. الـPR Draft، وmain لم تتحرك. لا تعديل في src/ أو عقود المستهلكين أو Adoption؛ ضبط النطاق PASS، صحة التسليم ليست PASS بعد.

جميع ملاحظات التصحيح المطلوبة

F67-01 — فشل PHPStan في بوابة Lowest dependencies (BLOCKER). وظيفة 119672060508 بها 8 أخطاء PHPStan في tests/Integration/Tooling/MysqlResidueScriptTest.php:70–73: الوصول إلى $pipes[1/2] من mixed وتمرير mixed لـstream_get_contents/fclose بعد proc_open. assertIsResource($process) لا يثبت نوع $pipes. اعمل narrowing وفحوص موارد فعلية، ولا تستخدم ignores/baseline. السجل: https://github.com/Maatify/persistence/actions/runs/39732987651 . فشل CI Gate تابع لهذا الفشل، ولم يتحقق 10/10.

F67-02 — حارس انحراف أسماء SQL لا يحقق الوعد الشامل. tests/Unit/Tooling/MysqlPackageObjectPrefixesTest.php:38–46 يقرأ *.php فقط داخل tests/ وexamples/، ويتجاهل ملفات tests/Fixtures/MySql/*.sql المستخدمة فعليًا في DDL (مثل create_deadlock_retry_items_table.sql). وبالتالي fixture SQL جديد باسم maa_<new-family>_... لا يكتشفه اختبار الحراسة، ولا بادئات check:residue الثلاث. وسّع الجرد لمصادر إنشاء الأجسام الفعلية وأثبت negative test باسم جديد خارج البادئات، مع عدم ادعاء كشف التركيبات الديناميكية التي لا يثبتها الاختبار.

F67-03 — wildcard استثناءات whitespace ما زالت تسمح بملفات جديدة معيبة. docs/studies/issue-32-retry-comparison/results/.gitattributes أبقى i42-phase-a-independent-mac/** وrun-6-i42-decision-a/** وrun-7-i42-decision-b/** كاستثناءات كاملة. أعدت إثباتًا مستقلاً باستخدام Git: ملف جديد بتباعد trailing تحت أحدها يأخذ whitespace: unset ويجعل git diff --check <empty-tree> HEAD يخرج 0. إذن ضمان فشل الملفات الجديدة لا ينطبق في هذه المسارات. حافظ على بايتات الأدلة، لكن ضيّق الاستثناءات لأسماء ملفات immutable محددة، أو احمِ إدخال أي ملف جديد بتعريف استثناء عام من دون فحص. أضف regression negative proof.

F67-04 — مسارات فشل Git/Find صامتة في بوابات مطلوبة.

  • scripts/check-whitespace.sh:26: git diff --check --no-index /dev/null "$file" || true مخالف لقاعدة CI_WORKFLOW_STANDARD §13 التي تمنع || true في required commands. وهو يخفي Git errors مع stdout فارغ (مثلاً اختفاء الملف أثناء الفحص). اختبرت مستقلاً أن --no-index --check يعيد 1 لملف نظيف مختلف و3 لعيب whitespace؛ عالج رموز الخروج وstderr صراحة وبـfail-closed بدلاً من تجاهل كل فشل.
  • scripts/check-php-syntax.sh:11–14: find ... 2>/dev/null داخل process substitution يحجب فشل البحث أو المسار الإلزامي الناقص؛ قد يعلن نجاح syntax على جرد ناقص. CI §8 يحظر التجاوز الصامت. أثبت negative case عند فقدان مسار مطلوب أو فشل البحث.

F67-05 — الـPR أدخل جداول اختبار جديدة غير ممتثلة لـSchema §6. tests/Integration/Tooling/MysqlResidueScriptTest.php:26–27 ينشئ جدولين ($owned و$foreign) بلا COMMENT للأعمدة ولا بيان صريح لسياسات SQL. معيار PACKAGE_BUILDING_STANDARD §6 يشمل اختبارات SQL. صحح الـDDL الجديد ومبرر سياساته داخل WU-1؛ لا نضيف عدم امتثال جديد بحجة وجود WU-2 منفصل لمعالجة الجداول القديمة، ولا نغيّر schema/locks الخاصة باختبارات التزامن.

F67-06 — اختبارات التصنيف الموسع للأجسام غير كافية لإثبات جميع الأنواع المعلن عنها. checker يسرد information_schema.TABLES/TRIGGERS/ROUTINES/EVENTS ويفلتر اسم schema والبادئات — تصميم معقول — لكن اختبار MysqlResidueScriptTest ينشئ table وtrigger فقط، بينما #63 يعد بكشف view/routine/event أيضًا. أضف اختبارات معزولة مُنظَّفة لهذه الأنواع، أو اعرض دليلًا فعليًا واضحًا واذكر حدود الصلاحيات إذا تعذر إنشاؤها. لا تخلط بين نجاح الاستعلام ووجود تغطية إثبات سلبي لكل نوع.

ما نجح فعلًا

  • الفحص الجديد HEAD مقابل empty tree أصلح الفجوة الأصلية الناتجة عن git diff --check على checkout نظيف. استثناءات ملفات الأدلة المحددة تبدو ضيقة، عدا wildcards القديمة المذكورة.
  • كود MySQL residue للقراءة فقط، ومحدد بقاعدة DSN المختارة وبادئات maa_persistence_test_ وmaa_persistence_consumer_ وmaa_example_. من قراءة المصدر، يشمل الأسماء العشوائية التي افتقدتها البوابة السابقة. تجارب MySQL RED/GREEN المحلية الواردة بالوصف هي أدلة المنفذ، وليست إعادة تشغيل مستقلة من القيادة.
  • وظائف Workflow lint وQuality ووظائف Unit/Regression الأربع ووظيفتا Integration 8/10 PASS. Lowest dependencies وCI Gate 2/10 FAIL. لا يمكن إعلان all-green.
  • أسماء jobs وneeds وCI Gate لم تتغير؛ لا تغيير Runtime/API/Adoption.

تعليمات التسليم التالية

عالج كل F67-01..06 في جولة تصحيح واحدة، مع commit جديد بلا amend/force-push. حافظ على النطاق WU-1 فقط، ولا تبدأ WU-2 أو WU-3. قدم Base/HEAD/Tree، وأدلة RED/GREEN للفروع السلبية الجديدة، وPHPStan في lowest mode، وMySQL 8.4.10 وIntegration مرتين والـConsumer Harness مرتين، ثم 10/10 GitHub CI GREEN على نفس HEAD النهائي. بعد ذلك سأجري Fresh Full Re-Review للـdiff الكامل والشجرة التراكمية، وليس مجرد تأكيد إصلاح الملاحظات. لا Merge GO الآن، ولا Release/Tag أو Step 5.

- F67-01: MysqlResidueScriptTest no longer reads proc_open pipes; output goes
  through temp files so PHPStan max passes on lowest and latest dependencies.
- F67-02: the object-name guard also scans tests/examples *.sql fixtures and has
  a negative test for a new name family.
- F67-03: replace the i42/run-6/run-7 directory wildcards with one exact
  -whitespace entry per verbatim file (134 files); new files are linted.
- F67-04: whitespace and syntax scripts propagate Git/find failures (no
  `|| true`, no 2>/dev/null) and fail on missing required paths.
- F67-05: probe tables in the new integration test carry column/table COMMENTs
  and a documented schema policy (PACKAGE_BUILDING_STANDARD §6).
- F67-06: residue script test covers table, view, trigger, function, procedure
  and event under every registered prefix, with read-only and foreign-object
  negative proof.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>

megyptm commented Oct 22, 2026

Copy link
Copy Markdown
Collaborator Author

Technical Lead — Fresh Full Re-Review #67 (2026-10-22)

قرار القيادة: MERGE GO for WU-1, subject to explicit Owner approval. لا تصريح دمج ذاتي ولا Release GO. راجعت من الصفر الـdiff التراكمي كاملًا (15 ملفًا) لا commit التصحيح وحده: وصف PR وأدلة RED/GREEN، ملفات CI/Composer/README/CONTRIBUTING، السكربتات الخمسة، الاختبارين، سمات الأدلة الأربع، AGENTS.md وCI_WORKFLOW_STANDARD المثبت، والعقود والنطاق، ثم قارنت حالة GitHub CI وسجلاته الفعلية.

هوية المراجعة

  • Base/Main: aaafab6f89ac0d511190787eeb4a7f0c5e34608a (لم تتحرك).
  • HEAD: 727afd80726727d64fc383c3e46c1776af354ad0، Commit ثانية فوق 042effd4a3a40eb3a6a2f075d2d5e8903441e2dd، دون إعادة كتابة التاريخ.
  • Git Tree: de85ce1edba60581c3b95793af0c57b3a5cf50b7 (تحققت منه عبر GitHub Git-object).
  • Diff: 15 ملفًا، +706/−134 تراكميًا. لا تغيير في src/ أو Public API أو public SQL/transaction behavior أو dependencies أو Pinned Adoption. لا composer.lock ولا version.

المصالحة المستقلة لكل ملاحظة سابقة

Finding الحالة مصدر الإثبات
F67-01 — lowest PHPStan RESOLVED أعيد بناء MysqlResidueScriptTest::runScript باستعمال proc_open file descriptors وقراءتها بتحقق أنواع صحيح، بلا ignore/baseline. GitHub Lowest dependencies PHP 8.2 يسجل [OK] No errors وبوابة ناجحة.
F67-02 — SQL filename drift guard RESOLVED بالنطاق المعلن MysqlPackageObjectPrefixesTest يجرد *.php و*.sql من tests/ وexamples/، ويختبر نص DDL خارج البادئات. الكود يصرّح أن الأسماء الديناميكية المجمعة بالكامل غير مثبتة بهذا الفحص الساكن؛ التوقعات لا تعتمد عليها.
F67-03 — grandfathered wildcard whitespace RESOLVED أزلت patterns المجلدات الثلاثة، واستعرضت قائمة الاستثناءات مباشرة مقابل Git tree: 146 استثناءً باسم ملف exact، كلها موجودة، لا wildcard ولا ملف قديم خارج الجرد في المجلدات الثلاثة. أي ملف جديد فيها لا يرث الإعفاء. أدلة الـ15 اختبارًا سلبيًا/إيجابيًا للمسارات المختلفة وردت من المنفذ، ولم أكرر البيئة المحلية نفسها.
F67-04 — fail-open tooling RESOLVED check-whitespace.sh يجمع رموز خروج Git ويتحقق من stderr بدل `
F67-05 — newly added test SQL RESOLVED MysqlResidueScriptTest يوثق سياسة جدول probe، ويضيف COLUMN/TABLE COMMENT وPK، بلا تعديل fixture التاريخية تحت WU-2.
F67-06 — residue object-kind coverage RESOLVED Data Provider يغطي 6 أنواع × 3 بادئات = 18 حالة لـtable/view/trigger/function/procedure/event. يؤكد exit=1 والاسم والنوع وread-only ثم عدم ظهور الاسم بعد cleanup؛ تظهر حالات اختبار التكامل ضمن العدد الجديد.

CI — تحقق مستقل على HEAD المراجَع

GitHub Actions run: https://github.com/Maatify/persistence/actions/runs/39736220973

10/10 required jobs SUCCESS: Workflow lint (1)، Quality (1)، Unit/Regression PHP 8.2/8.3/8.4/8.5 (4)، Lowest dependencies PHP 8.2 + MySQL 8.4.10 (1)، Integration PHP 8.2 و8.5 + MySQL 8.4.10 (2)، وCI Gate (1). تحققت من step conclusions والـlogs الحقيقية، لا من لون الواجهة وحده:

  • Lowest: PHPStan No errors، Unit 383/2687، Regression 97/1085، Integration مرتين 218/1622 و218/1625؛ residue وwhitespace PASS.
  • Integration PHP 8.2: 218/1628 ثم 218/1629؛ PHP 8.5: 218/1626 ثم 218/1627؛ الاثنان ينتهيان بـresidue PASS وrepository integrity PASS. Consumer Harness step PASS في كليهما.
  • Quality: PHP syntax 117 files PASS، PHPStan No errors، style وwhitespace PASS.
  • CI Gate فحص كل needs وانتهى SUCCESS.

تفاوت عدد assertions في اختبار التزامن مفهوم ضمن حلقات polling المثبتة سابقًا؛ أعداد الاختبارات ثابتة ونتائج CI خضراء. أدلة الـRED/GREEN المحلية المحاكية للعيوب، و18/18 على MySQL محلي، وتنظيف الحاوية، هي أدلة المنفذ؛ لم أشغل MySQL محليًا من بيئة القيادة، ولم أدّعِ ذلك. عوضًا عن ذلك، تحققت استقلالًا من الكود ومن مخرجات/بوابات GitHub على الـHEAD النهائي.

حدود القرار

نتيجة Fresh Full Re-Review: لا توجد ملاحظات مانعة جديدة على نطاق WU-1 في الـTree المراجَع؛ MERGE GO مع إبقاء قرار الدمج النهائي للمالك.

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