[
  {
    "id": "LAB-001",
    "product": "hissati",
    "label": "product",
    "title_ar": "منطقة المحتوى الرئيسية غائبة في تجربة التحضير",
    "title_en": "Guest lesson preparation lacks a main landmark",
    "evidence": {
      "summary_ar": "في /app/tahdeeri رصد axe غياب main و8 عناصر خارج المعالم؛ الصفحة أعادت 200 دون أخطاء JavaScript.",
      "summary_en": "At /app/tahdeeri, axe found no main landmark and 8 nodes outside landmarks; HTTP 200 with no JavaScript errors.",
      "measured_at": "2026-10-20T01:29:08.763Z",
      "scope_ar": "صفحات عامة، Chromium عند 390×844؛ فحص مختبر محدود، لا حكم شامل على المنتج. لم تُعدّل مستودعات المنتجات.",
      "scope_en": "Public pages in a limited 390x844 Chromium lab audit; not a comprehensive product review. Product repositories were not modified.",
      "sources": [
        {
          "label_ar": "التقرير الخام · hissati-routes.json",
          "label_en": "Raw report · hissati-routes.json",
          "url": "/labs/evidence/hissati-routes.json"
        }
      ]
    },
    "severity": "med",
    "hypothesis": "وضع محتوى التحضير داخل main يتيح الوصول المباشر لقارئ الشاشة.",
    "hypothesis_en": "A main landmark should allow direct navigation to preparation content.",
    "experiment": "إضافة main واحد في نسخة اختبار؛ إعادة axe وتجربة التنقل بالمعالم. النجاح: اختفاء landmark-one-main واحتواء محتوى المهمة.",
    "experiment_en": "Add one main landmark in a test build, rerun axe and test landmark navigation. Accept when landmark-one-main disappears and task content is contained.",
    "result": "تحتوي صفحة /app/tahdeeri الحية على معلم main واحد (الإصلاح cb4dfae/bcc3a63؛ verified 2026-10-21 Asia/Riyadh).",
    "result_en": "Live /app/tahdeeri contains exactly one main landmark (fix cb4dfae/bcc3a63; verified 2026-10-21 Asia/Riyadh).",
    "status": "solved",
    "oss_candidates": [
      {
        "name": "playwright",
        "url": "https://github.com/microsoft/playwright",
        "license": "Apache-2.0",
        "license_url": "https://github.com/microsoft/playwright/blob/main/LICENSE",
        "why": "لإعادة إنتاج هذا السلوك في الجوال ولوحة المفاتيح وإضافة فحص يمنع رجوعه؛ إصلاح HTML/CSS نفسه لا يحتاج مكتبة جديدة.",
        "why_en": "Reproduce this behavior on mobile and keyboard and prevent regressions; the HTML/CSS fix itself needs no new library."
      },
      {
        "name": "web-vitals",
        "url": "https://github.com/GoogleChrome/web-vitals",
        "license": "Apache-2.0",
        "license_url": "https://github.com/GoogleChrome/web-vitals/blob/main/LICENSE",
        "why": "لمقارنة LCP وCLS وINP محليًا قبل التجربة وبعدها؛ لا نجمع قياسات مستخدمين دون خطة خصوصية.",
        "why_en": "Compare LCP, CLS and INP locally before and after the experiment, without collecting user telemetry."
      }
    ]
  },
  {
    "id": "LAB-002",
    "product": "hissati",
    "label": "product",
    "title_ar": "تحميل خمسة ملفات خطوط في المدخل البسيط",
    "title_en": "Five font files loaded on the landing page",
    "evidence": {
      "summary_ar": "سجّل Resource Timing 5 ملفات woff2 بإجمالي 135,516 بايت نقل في سياق جديد؛ الصفحة تعريفية. هذه كلفة نقل مرصودة وليست إثبات بطء ميداني.",
      "summary_en": "Resource Timing recorded 5 woff2 files totaling 135,516 transferred bytes in a fresh context on the landing page. This is observed transfer cost, not field latency.",
      "measured_at": "2026-10-20T01:22:05.354Z",
      "scope_ar": "صفحات عامة، Chromium عند 390×844؛ فحص مختبر محدود، لا حكم شامل على المنتج. لم تُعدّل مستودعات المنتجات.",
      "scope_en": "Public pages in a limited 390x844 Chromium lab audit; not a comprehensive product review. Product repositories were not modified.",
      "sources": [
        {
          "label_ar": "التقرير الخام · hissati.json",
          "label_en": "Raw report · hissati.json",
          "url": "/labs/evidence/hissati.json"
        }
      ]
    },
    "severity": "med",
    "hypothesis": "تقليل الأوزان والمحارف المحمّلة قد يخفض النقل مع إبقاء القراءة العربية.",
    "hypothesis_en": "Loading fewer weights and subsets may reduce bytes while preserving Arabic legibility.",
    "experiment": "قارن أوزان 400/600 مقابل الوضع الحالي في 5 زيارات بذاكرة باردة؛ النجاح: خفض نقل الخطوط 25% دون تراجع LCP أو فقد حروف عربية/لاتينية.",
    "experiment_en": "Compare weights 400/600 against baseline over 5 cold visits. Accept 25% fewer font bytes without LCP regression or missing Arabic/Latin glyphs.",
    "result": "حمّل سياق جديد للصفحة الرئيسية الحية ملفي خطوط مقابل خمسة في القياس السابق (الإصلاح cb4dfae/bcc3a63؛ verified 2026-10-21 Asia/Riyadh).",
    "result_en": "A fresh live landing context loaded two font files versus five in the baseline (fix cb4dfae/bcc3a63; verified 2026-10-21 Asia/Riyadh).",
    "status": "solved",
    "oss_candidates": [
      {
        "name": "playwright",
        "url": "https://github.com/microsoft/playwright",
        "license": "Apache-2.0",
        "license_url": "https://github.com/microsoft/playwright/blob/main/LICENSE",
        "why": "لإعادة إنتاج هذا السلوك في الجوال ولوحة المفاتيح وإضافة فحص يمنع رجوعه؛ إصلاح HTML/CSS نفسه لا يحتاج مكتبة جديدة.",
        "why_en": "Reproduce this behavior on mobile and keyboard and prevent regressions; the HTML/CSS fix itself needs no new library."
      },
      {
        "name": "web-vitals",
        "url": "https://github.com/GoogleChrome/web-vitals",
        "license": "Apache-2.0",
        "license_url": "https://github.com/GoogleChrome/web-vitals/blob/main/LICENSE",
        "why": "لمقارنة LCP وCLS وINP محليًا قبل التجربة وبعدها؛ لا نجمع قياسات مستخدمين دون خطة خصوصية.",
        "why_en": "Compare LCP, CLS and INP locally before and after the experiment, without collecting user telemetry."
      }
    ]
  },
  {
    "id": "LAB-003",
    "product": "hissati",
    "label": "product",
    "title_ar": "عنوان الصفحة يصف دفتر المعلم بدل مدخل التعلم",
    "title_en": "Page title describes the teacher notebook rather than learning",
    "evidence": {
      "summary_ar": "العنوان الحي «حصّتي — حصص الأسبوع وكشف الدرجات — دفتر المعلم لمنصة مدرستي»، بينما H1 «تعلّم فكرة جديدة كل يوم» و126 درسًا. هذا تعارض وصفي مقاس في DOM.",
      "summary_en": "Live title describes weekly lessons and teacher grades, while H1 says “Learn something new every day” and the hero advertises 126 lessons. Measured DOM description mismatch.",
      "measured_at": "2026-10-20T01:22:05.354Z",
      "scope_ar": "صفحات عامة، Chromium عند 390×844؛ فحص مختبر محدود، لا حكم شامل على المنتج. لم تُعدّل مستودعات المنتجات.",
      "scope_en": "Public pages in a limited 390x844 Chromium lab audit; not a comprehensive product review. Product repositories were not modified.",
      "sources": [
        {
          "label_ar": "التقرير الخام · hissati.json",
          "label_en": "Raw report · hissati.json",
          "url": "/labs/evidence/hissati.json"
        }
      ]
    },
    "severity": "low",
    "hypothesis": "عنوان خاص بمدخل التعلم يوضح وجهة الرابط وسجل المتصفح.",
    "hypothesis_en": "A learning-specific title should clarify the destination in tabs and history.",
    "experiment": "غيّر عنوان / فقط في نسخة اختبار؛ النجاح: يصف التعلم، وتبقى عناوين المعلم خاصة بمسارات المعلم.",
    "experiment_en": "Change only the / title in a test build. Accept a learning-specific title while retaining teacher-specific titles on teacher routes.",
    "result": "يصف عنوان الصفحة الرئيسية الحية الآن تعلّم فكرة جديدة كل يوم (الإصلاح cb4dfae/bcc3a63؛ verified 2026-10-21 Asia/Riyadh).",
    "result_en": "The live landing title now describes learning a new idea every day (fix cb4dfae/bcc3a63; verified 2026-10-21 Asia/Riyadh).",
    "status": "solved",
    "oss_candidates": [
      {
        "name": "playwright",
        "url": "https://github.com/microsoft/playwright",
        "license": "Apache-2.0",
        "license_url": "https://github.com/microsoft/playwright/blob/main/LICENSE",
        "why": "لإعادة إنتاج هذا السلوك في الجوال ولوحة المفاتيح وإضافة فحص يمنع رجوعه؛ إصلاح HTML/CSS نفسه لا يحتاج مكتبة جديدة.",
        "why_en": "Reproduce this behavior on mobile and keyboard and prevent regressions; the HTML/CSS fix itself needs no new library."
      },
      {
        "name": "web-vitals",
        "url": "https://github.com/GoogleChrome/web-vitals",
        "license": "Apache-2.0",
        "license_url": "https://github.com/GoogleChrome/web-vitals/blob/main/LICENSE",
        "why": "لمقارنة LCP وCLS وINP محليًا قبل التجربة وبعدها؛ لا نجمع قياسات مستخدمين دون خطة خصوصية.",
        "why_en": "Compare LCP, CLS and INP locally before and after the experiment, without collecting user telemetry."
      }
    ]
  },
  {
    "id": "LAB-004",
    "product": "hudoo",
    "label": "human",
    "title_ar": "تسعة روابط صور بلا اسم لقارئ الشاشة",
    "title_en": "Nine image links have no accessible name",
    "evidence": {
      "summary_ar": "axe link-name رصد 9 روابط مثل /n/10 تحوي img alt=\"\" دون نص أو aria-label؛ ليست مشكلة تحميل صور lazy.",
      "summary_en": "axe link-name found 9 anchors such as /n/10 containing img alt=\"\" without text or aria-label; this is independent of lazy image loading.",
      "measured_at": "2026-10-20T01:25:03.083Z",
      "scope_ar": "صفحات عامة، Chromium عند 390×844؛ فحص مختبر محدود، لا حكم شامل على المنتج. لم تُعدّل مستودعات المنتجات.",
      "scope_en": "Public pages in a limited 390x844 Chromium lab audit; not a comprehensive product review. Product repositories were not modified.",
      "sources": [
        {
          "label_ar": "التقرير الخام · hudoo-deep.json",
          "label_en": "Raw report · hudoo-deep.json",
          "url": "/labs/evidence/hudoo-deep.json"
        }
      ]
    },
    "severity": "high",
    "hypothesis": "دمج صورة الخبر وعنوانه في رابط واحد يمنع محطات تركيز مجهولة.",
    "hypothesis_en": "Combining each article image and title into one link should remove unnamed focus stops.",
    "experiment": "تجربة رابط موحد أو اسم مشتق من عنوان الخبر؛ النجاح: صفر link-name وتسلسل Tab مفهوم للبطاقات التسع.",
    "experiment_en": "Test one link per card or a name derived from the headline. Accept zero link-name violations and meaningful Tab stops across all nine cards.",
    "result": "تحمل روابط الصور الحية أسماء أو تُخفى عن التقنيات المساعدة وتُستبعد من ترتيب Tab (الإصلاح c8d906f8؛ verified 2026-10-21 Asia/Riyadh).",
    "result_en": "Live image links have names or are hidden from assistive technology and removed from Tab order (fix c8d906f8; verified 2026-10-21 Asia/Riyadh).",
    "status": "solved",
    "oss_candidates": [
      {
        "name": "playwright",
        "url": "https://github.com/microsoft/playwright",
        "license": "Apache-2.0",
        "license_url": "https://github.com/microsoft/playwright/blob/main/LICENSE",
        "why": "لإعادة إنتاج هذا السلوك في الجوال ولوحة المفاتيح وإضافة فحص يمنع رجوعه؛ إصلاح HTML/CSS نفسه لا يحتاج مكتبة جديدة.",
        "why_en": "Reproduce this behavior on mobile and keyboard and prevent regressions; the HTML/CSS fix itself needs no new library."
      },
      {
        "name": "vitest",
        "url": "https://github.com/vitest-dev/vitest",
        "license": "MIT",
        "license_url": "https://github.com/vitest-dev/vitest/blob/main/LICENSE",
        "why": "لاختبار الحالات الحدّية وتثبيت معيار القبول آليًا؛ أداة تحقق وليست إصلاحًا تلقائيًا.",
        "why_en": "Test edge cases and enforce the acceptance criterion; a verification tool, not an automatic fix."
      }
    ]
  },
  {
    "id": "LAB-005",
    "product": "hudoo",
    "label": "human",
    "title_ar": "شريط تمرير لا يستقبل تركيز لوحة المفاتيح",
    "title_en": "Scrollable region cannot receive keyboard focus",
    "evidence": {
      "summary_ar": "axe scrollable-region-focusable رصد منطقة تمرير واحدة بلا محتوى قابل للتركيز ولا tabindex في الصفحة الرئيسية عند عرض390.",
      "summary_en": "axe scrollable-region-focusable found one scrollable region with no focusable content or tabindex on the 390px homepage.",
      "measured_at": "2026-10-20T01:25:03.083Z",
      "scope_ar": "صفحات عامة، Chromium عند 390×844؛ فحص مختبر محدود، لا حكم شامل على المنتج. لم تُعدّل مستودعات المنتجات.",
      "scope_en": "Public pages in a limited 390x844 Chromium lab audit; not a comprehensive product review. Product repositories were not modified.",
      "sources": [
        {
          "label_ar": "التقرير الخام · hudoo-deep.json",
          "label_en": "Raw report · hudoo-deep.json",
          "url": "/labs/evidence/hudoo-deep.json"
        }
      ]
    },
    "severity": "med",
    "hypothesis": "إتاحة التركيز مع تسمية المنطقة تتيح تمريرها بلوحة المفاتيح.",
    "hypothesis_en": "A named focusable region should permit keyboard scrolling.",
    "experiment": "أضف tabindex=0 واسمًا مناسبًا عند الحاجة للتمرير؛ النجاح: بلوغ المنطقة بـTab وتمريرها بالأسهم دون حبس التركيز واختفاء المخالفة.",
    "experiment_en": "Add tabindex=0 and a suitable name where scrolling is necessary. Accept Tab access, arrow scrolling, no focus trap and no remaining violation.",
    "result": "يحمل شريط الأسواق القابل للتمرير في الصفحة الحية tabindex=\"0\" (الإصلاح c8d906f8؛ verified 2026-10-21 Asia/Riyadh).",
    "result_en": "The live markets scroller has tabindex=\"0\" (fix c8d906f8; verified 2026-10-21 Asia/Riyadh).",
    "status": "solved",
    "oss_candidates": [
      {
        "name": "playwright",
        "url": "https://github.com/microsoft/playwright",
        "license": "Apache-2.0",
        "license_url": "https://github.com/microsoft/playwright/blob/main/LICENSE",
        "why": "لإعادة إنتاج هذا السلوك في الجوال ولوحة المفاتيح وإضافة فحص يمنع رجوعه؛ إصلاح HTML/CSS نفسه لا يحتاج مكتبة جديدة.",
        "why_en": "Reproduce this behavior on mobile and keyboard and prevent regressions; the HTML/CSS fix itself needs no new library."
      },
      {
        "name": "vitest",
        "url": "https://github.com/vitest-dev/vitest",
        "license": "MIT",
        "license_url": "https://github.com/vitest-dev/vitest/blob/main/LICENSE",
        "why": "لاختبار الحالات الحدّية وتثبيت معيار القبول آليًا؛ أداة تحقق وليست إصلاحًا تلقائيًا.",
        "why_en": "Test edge cases and enforce the acceptance criterion; a verification tool, not an automatic fix."
      }
    ]
  },
  {
    "id": "LAB-006",
    "product": "hudoo",
    "label": "product",
    "title_ar": "أمر الاختبارات يفشل دون تشغيل اختبارات",
    "title_en": "npm test exits without running tests",
    "evidence": {
      "summary_ar": "تشغيل npm test في hudoo-news أعاد «Error: no test specified»؛ package.json يحتوي أمر echo ثم exit 1. هذا نقص تغطية محلي، لا ادعاء بتعطل الأخبار الحية.",
      "summary_en": "npm test in hudoo-news printed “Error: no test specified”; package.json contains echo followed by exit 1. This is a local test coverage gap, not a live news outage.",
      "measured_at": "2026-10-20T01:51:09.832670+00:00",
      "scope_ar": "صفحات عامة، Chromium عند 390×844؛ فحص مختبر محدود، لا حكم شامل على المنتج. لم تُعدّل مستودعات المنتجات.",
      "scope_en": "Public pages in a limited 390x844 Chromium lab audit; not a comprehensive product review. Product repositories were not modified.",
      "sources": [
        {
          "label_ar": "التقرير الخام · hudoo-tests.txt",
          "label_en": "Raw report · hudoo-tests.txt",
          "url": "/labs/evidence/hudoo-tests.txt"
        },
        {
          "label_ar": "التقرير الخام · hudoo-source-review.json",
          "label_en": "Raw report · hudoo-source-review.json",
          "url": "/labs/evidence/hudoo-source-review.json"
        }
      ]
    },
    "severity": "med",
    "hypothesis": "اختبارات قوالب الأخبار والروابط تمنع أخطاء الإتاحة قبل النشر.",
    "hypothesis_en": "News template and link tests could catch accessibility regressions before release.",
    "experiment": "استبدال الأمر الوهمي بمجموعة صغيرة لقوالب البطاقات ومصادر الأخبار؛ النجاح: أمر test يمر ويفشل عمدًا عند حذف اسم رابط.",
    "experiment_en": "Replace the placeholder with a small suite for card templates and news sources. Accept a passing command that fails when an accessible link name is deliberately removed.",
    "result": "أعادت الصفحة الرئيسية الحية HTTP 200 وشغّل npm test للقراءة فقط في hudoo-news ستة اختبارات ناجحة (الإصلاح c8d906f8؛ verified 2026-10-21 Asia/Riyadh).",
    "result_en": "The live homepage returned HTTP 200 and read-only npm test in hudoo-news ran six passing tests (fix c8d906f8; verified 2026-10-21 Asia/Riyadh).",
    "status": "solved",
    "oss_candidates": [
      {
        "name": "playwright",
        "url": "https://github.com/microsoft/playwright",
        "license": "Apache-2.0",
        "license_url": "https://github.com/microsoft/playwright/blob/main/LICENSE",
        "why": "لإعادة إنتاج هذا السلوك في الجوال ولوحة المفاتيح وإضافة فحص يمنع رجوعه؛ إصلاح HTML/CSS نفسه لا يحتاج مكتبة جديدة.",
        "why_en": "Reproduce this behavior on mobile and keyboard and prevent regressions; the HTML/CSS fix itself needs no new library."
      },
      {
        "name": "vitest",
        "url": "https://github.com/vitest-dev/vitest",
        "license": "MIT",
        "license_url": "https://github.com/vitest-dev/vitest/blob/main/LICENSE",
        "why": "لاختبار الحالات الحدّية وتثبيت معيار القبول آليًا؛ أداة تحقق وليست إصلاحًا تلقائيًا.",
        "why_en": "Test edge cases and enforce the acceptance criterion; a verification tool, not an automatic fix."
      }
    ]
  },
  {
    "id": "LAB-007",
    "product": "market",
    "label": "product",
    "title_ar": "النسب المفقودة تتحول إلى صفر في طلب التحليل",
    "title_en": "Missing percentages become zero in the analysis prompt",
    "evidence": {
      "summary_ar": "استدعاء geminiAnalystPrompt من المصدر الفعلي داخل VM بصف اصطناعي changePct=null وchangePct5d=null أنتج «تغير اليوم: 0» و«تغير خمسة أيام: 0». لم نستدع Gemini أو نغيّر بيانات حية.",
      "summary_en": "Calling actual source geminiAnalystPrompt in an isolated VM with synthetic changePct=null and changePct5d=null produced zero for both percentages. No Gemini call or live data mutation.",
      "measured_at": "2026-10-20T01:46:39.909Z",
      "scope_ar": "صفحات عامة، Chromium عند 390×844؛ فحص مختبر محدود، لا حكم شامل على المنتج. لم تُعدّل مستودعات المنتجات.",
      "scope_en": "Public pages in a limited 390x844 Chromium lab audit; not a comprehensive product review. Product repositories were not modified.",
      "sources": [
        {
          "label_ar": "التقرير الخام · market-null.json",
          "label_en": "Raw report · market-null.json",
          "url": "/labs/evidence/market-null.json"
        }
      ]
    },
    "severity": "high",
    "hypothesis": "فحص null قبل Number يحفظ الفرق بين المجهول والاستقرار.",
    "hypothesis_en": "Checking null before Number should preserve unknown values instead of representing them as flat markets.",
    "experiment": "اختبر null وundefined و0 و±1.5؛ النجاح: الشرطة للقيم المفقودة وصفر فقط للصفر الحقيقي في prompt والتحليل القاعدي.",
    "experiment_en": "Test null, undefined, 0 and ±1.5. Accept a missing-data marker for absent values and zero only for real zero in both prompt and rule-based analysis.",
    "result": "أعادت نقطة المحلل الحية HTTP 405 لطلب GET دون إظهار نص التحليل ولذلك لم يتأكد التعامل مع النسب المفقودة (الإصلاح 480b8a71؛ verified 2026-10-21 Asia/Riyadh).",
    "result_en": "The live analyst endpoint returned HTTP 405 to GET without exposing prompt output, so missing-percentage handling remains unconfirmed (fix 480b8a71; verified 2026-10-21 Asia/Riyadh).",
    "status": "testing",
    "oss_candidates": [
      {
        "name": "vitest",
        "url": "https://github.com/vitest-dev/vitest",
        "license": "MIT",
        "license_url": "https://github.com/vitest-dev/vitest/blob/main/LICENSE",
        "why": "لاختبار الحالات الحدّية وتثبيت معيار القبول آليًا؛ أداة تحقق وليست إصلاحًا تلقائيًا.",
        "why_en": "Test edge cases and enforce the acceptance criterion; a verification tool, not an automatic fix."
      },
      {
        "name": "playwright",
        "url": "https://github.com/microsoft/playwright",
        "license": "Apache-2.0",
        "license_url": "https://github.com/microsoft/playwright/blob/main/LICENSE",
        "why": "لإعادة إنتاج هذا السلوك في الجوال ولوحة المفاتيح وإضافة فحص يمنع رجوعه؛ إصلاح HTML/CSS نفسه لا يحتاج مكتبة جديدة.",
        "why_en": "Reproduce this behavior on mobile and keyboard and prevent regressions; the HTML/CSS fix itself needs no new library."
      }
    ]
  },
  {
    "id": "LAB-008",
    "product": "market",
    "label": "human",
    "title_ar": "جدول التقويم غير قابل للتمرير بلوحة المفاتيح",
    "title_en": "Calendar table is not keyboard-scrollable",
    "evidence": {
      "summary_ar": "في /calendar رصد axe scrollable-region-focusable على section[aria-labelledby=\"ec-h\"] > .table-wrap؛ عرض390، HTTP200 ودون أخطاء console.",
      "summary_en": "At /calendar, axe flagged scrollable-region-focusable on section[aria-labelledby=\"ec-h\"] > .table-wrap at 390px, HTTP 200 and no console errors.",
      "measured_at": "2026-10-20T01:29:24.150Z",
      "scope_ar": "صفحات عامة، Chromium عند 390×844؛ فحص مختبر محدود، لا حكم شامل على المنتج. لم تُعدّل مستودعات المنتجات.",
      "scope_en": "Public pages in a limited 390x844 Chromium lab audit; not a comprehensive product review. Product repositories were not modified.",
      "sources": [
        {
          "label_ar": "التقرير الخام · market-routes.json",
          "label_en": "Raw report · market-routes.json",
          "url": "/labs/evidence/market-routes.json"
        }
      ]
    },
    "severity": "high",
    "hypothesis": "منطقة جدول مسماة وقابلة للتركيز تتيح قراءة الأعمدة المخفية.",
    "hypothesis_en": "A named focusable table wrapper should make offscreen columns reachable.",
    "experiment": "جرّب Tab ثم الأسهم داخل الجدول عند390 و1440؛ النجاح: جميع الأعمدة قابلة للوصول دون تمرير المستند أفقيًا أو حبس التركيز.",
    "experiment_en": "Test Tab and arrow keys inside the table at 390 and 1440. Accept access to every column without horizontal document overflow or a focus trap.",
    "result": "تحمل منطقة جدول التقويم الاقتصادي الحية tabindex=\"0\" وتستقبل تركيز لوحة المفاتيح (الإصلاح 480b8a71؛ verified 2026-10-21 Asia/Riyadh).",
    "result_en": "The live economic calendar table region has tabindex=\"0\" and can receive keyboard focus (fix 480b8a71; verified 2026-10-21 Asia/Riyadh).",
    "status": "solved",
    "oss_candidates": [
      {
        "name": "vitest",
        "url": "https://github.com/vitest-dev/vitest",
        "license": "MIT",
        "license_url": "https://github.com/vitest-dev/vitest/blob/main/LICENSE",
        "why": "لاختبار الحالات الحدّية وتثبيت معيار القبول آليًا؛ أداة تحقق وليست إصلاحًا تلقائيًا.",
        "why_en": "Test edge cases and enforce the acceptance criterion; a verification tool, not an automatic fix."
      },
      {
        "name": "playwright",
        "url": "https://github.com/microsoft/playwright",
        "license": "Apache-2.0",
        "license_url": "https://github.com/microsoft/playwright/blob/main/LICENSE",
        "why": "لإعادة إنتاج هذا السلوك في الجوال ولوحة المفاتيح وإضافة فحص يمنع رجوعه؛ إصلاح HTML/CSS نفسه لا يحتاج مكتبة جديدة.",
        "why_en": "Reproduce this behavior on mobile and keyboard and prevent regressions; the HTML/CSS fix itself needs no new library."
      }
    ]
  },
  {
    "id": "LAB-009",
    "product": "market",
    "label": "human",
    "title_ar": "صفحة التقويم بلا عنوان رئيسي",
    "title_en": "Calendar page has no level-one heading",
    "evidence": {
      "summary_ar": "في /calendar عدد h1 في DOM هو0؛ axe page-has-heading-one أكد النتيجة، والصفحة الرئيسية لها h1.",
      "summary_en": "The /calendar DOM contains zero h1 elements; axe page-has-heading-one confirmed it. The homepage has an h1.",
      "measured_at": "2026-10-20T01:29:24.150Z",
      "scope_ar": "صفحات عامة، Chromium عند 390×844؛ فحص مختبر محدود، لا حكم شامل على المنتج. لم تُعدّل مستودعات المنتجات.",
      "scope_en": "Public pages in a limited 390x844 Chromium lab audit; not a comprehensive product review. Product repositories were not modified.",
      "sources": [
        {
          "label_ar": "التقرير الخام · market-routes.json",
          "label_en": "Raw report · market-routes.json",
          "url": "/labs/evidence/market-routes.json"
        }
      ]
    },
    "severity": "low",
    "hypothesis": "عنوان واحد واضح يجعل صفحة التقويم أسهل للفهم والتنقل بالعناوين.",
    "hypothesis_en": "One descriptive h1 should improve orientation and heading navigation.",
    "experiment": "أضف عنوانًا مرئيًا للصفحة، ثم افحص شجرة العناوين؛ النجاح: h1 واحد وتسلسل منطقي دون تغيير معنى الجداول.",
    "experiment_en": "Add a visible page title and inspect heading order. Accept exactly one h1 and a meaningful hierarchy without changing table semantics.",
    "result": "تحتوي صفحة التقويم الحية على عنوان h1 واحد (الإصلاح 480b8a71؛ verified 2026-10-21 Asia/Riyadh).",
    "result_en": "The live calendar page contains one h1 (fix 480b8a71; verified 2026-10-21 Asia/Riyadh).",
    "status": "solved",
    "oss_candidates": [
      {
        "name": "vitest",
        "url": "https://github.com/vitest-dev/vitest",
        "license": "MIT",
        "license_url": "https://github.com/vitest-dev/vitest/blob/main/LICENSE",
        "why": "لاختبار الحالات الحدّية وتثبيت معيار القبول آليًا؛ أداة تحقق وليست إصلاحًا تلقائيًا.",
        "why_en": "Test edge cases and enforce the acceptance criterion; a verification tool, not an automatic fix."
      },
      {
        "name": "playwright",
        "url": "https://github.com/microsoft/playwright",
        "license": "Apache-2.0",
        "license_url": "https://github.com/microsoft/playwright/blob/main/LICENSE",
        "why": "لإعادة إنتاج هذا السلوك في الجوال ولوحة المفاتيح وإضافة فحص يمنع رجوعه؛ إصلاح HTML/CSS نفسه لا يحتاج مكتبة جديدة.",
        "why_en": "Reproduce this behavior on mobile and keyboard and prevent regressions; the HTML/CSS fix itself needs no new library."
      }
    ]
  },
  {
    "id": "LAB-010",
    "product": "games",
    "label": "human",
    "title_ar": "تباين رابط «محسن» أقل من الحد",
    "title_en": "Mohsen link has insufficient contrast",
    "evidence": {
      "summary_ar": "axe color-contrast قاس3.7:1 للنص #686868 على #030303 بحجم12px في رابط ai.alhajda.com؛ المطلوب للنص الصغير4.5:1.",
      "summary_en": "axe measured contrast 3.7:1 for #686868 on #030303 at 12px on the ai.alhajda.com link; small text requires 4.5:1.",
      "measured_at": "2026-10-20T01:25:19.986Z",
      "scope_ar": "صفحات عامة، Chromium عند 390×844؛ فحص مختبر محدود، لا حكم شامل على المنتج. لم تُعدّل مستودعات المنتجات.",
      "scope_en": "Public pages in a limited 390x844 Chromium lab audit; not a comprehensive product review. Product repositories were not modified.",
      "sources": [
        {
          "label_ar": "التقرير الخام · games-deep.json",
          "label_en": "Raw report · games-deep.json",
          "url": "/labs/evidence/games-deep.json"
        }
      ]
    },
    "severity": "med",
    "hypothesis": "رفع سطوع لون الرابط يحسن القراءة دون تغيير الهوية.",
    "hypothesis_en": "A brighter link color should improve legibility without changing the visual identity.",
    "experiment": "عدّل رمز اللون وافحص المظهرين؛ النجاح: ≥4.5:1 للرابط بحجمه الحالي مع وضوح حالة التركيز.",
    "experiment_en": "Adjust the color token and test both themes. Accept at least 4.5:1 for the current text size and a visible focus state.",
    "result": "",
    "result_en": "",
    "status": "open",
    "oss_candidates": [
      {
        "name": "playwright",
        "url": "https://github.com/microsoft/playwright",
        "license": "Apache-2.0",
        "license_url": "https://github.com/microsoft/playwright/blob/main/LICENSE",
        "why": "لإعادة إنتاج هذا السلوك في الجوال ولوحة المفاتيح وإضافة فحص يمنع رجوعه؛ إصلاح HTML/CSS نفسه لا يحتاج مكتبة جديدة.",
        "why_en": "Reproduce this behavior on mobile and keyboard and prevent regressions; the HTML/CSS fix itself needs no new library."
      },
      {
        "name": "vitest",
        "url": "https://github.com/vitest-dev/vitest",
        "license": "MIT",
        "license_url": "https://github.com/vitest-dev/vitest/blob/main/LICENSE",
        "why": "لاختبار الحالات الحدّية وتثبيت معيار القبول آليًا؛ أداة تحقق وليست إصلاحًا تلقائيًا.",
        "why_en": "Test edge cases and enforce the acceptance criterion; a verification tool, not an automatic fix."
      }
    ]
  },
  {
    "id": "LAB-011",
    "product": "games",
    "label": "human",
    "title_ar": "روابط نهاية «قفز الدلّة» تُميَّز باللون وحده",
    "title_en": "Qafz Dallah footer links rely on color alone",
    "evidence": {
      "summary_ar": "في /qafz-dallah/ رصد axe link-in-text-block رابطَي تهجد ومواقعنا بلا تسطير؛ تباين الرابط مع النص المحيط1.22:1 فقط.",
      "summary_en": "At /qafz-dallah/, axe link-in-text-block flagged Tahajjud and Sites links without underlines; contrast against surrounding text was only 1.22:1.",
      "measured_at": "2026-10-20T01:30:14.934Z",
      "scope_ar": "صفحات عامة، Chromium عند 390×844؛ فحص مختبر محدود، لا حكم شامل على المنتج. لم تُعدّل مستودعات المنتجات.",
      "scope_en": "Public pages in a limited 390x844 Chromium lab audit; not a comprehensive product review. Product repositories were not modified.",
      "sources": [
        {
          "label_ar": "التقرير الخام · games-routes.json",
          "label_en": "Raw report · games-routes.json",
          "url": "/labs/evidence/games-routes.json"
        }
      ]
    },
    "severity": "med",
    "hypothesis": "إشارة غير لونية دائمة تجعل الروابط قابلة للاكتشاف.",
    "hypothesis_en": "A persistent non-color cue should make the links discoverable.",
    "experiment": "أضف تسطيرًا للرابطين واختبر بالتركيز واللمس؛ النجاح: تمييزهما دون الاعتماد على اللون واختفاء المخالفة.",
    "experiment_en": "Underline both links and check keyboard and touch. Accept clear identification independent of color and no remaining violation.",
    "result": "",
    "result_en": "",
    "status": "open",
    "oss_candidates": [
      {
        "name": "playwright",
        "url": "https://github.com/microsoft/playwright",
        "license": "Apache-2.0",
        "license_url": "https://github.com/microsoft/playwright/blob/main/LICENSE",
        "why": "لإعادة إنتاج هذا السلوك في الجوال ولوحة المفاتيح وإضافة فحص يمنع رجوعه؛ إصلاح HTML/CSS نفسه لا يحتاج مكتبة جديدة.",
        "why_en": "Reproduce this behavior on mobile and keyboard and prevent regressions; the HTML/CSS fix itself needs no new library."
      },
      {
        "name": "vitest",
        "url": "https://github.com/vitest-dev/vitest",
        "license": "MIT",
        "license_url": "https://github.com/vitest-dev/vitest/blob/main/LICENSE",
        "why": "لاختبار الحالات الحدّية وتثبيت معيار القبول آليًا؛ أداة تحقق وليست إصلاحًا تلقائيًا.",
        "why_en": "Test edge cases and enforce the acceptance criterion; a verification tool, not an automatic fix."
      }
    ]
  },
  {
    "id": "LAB-012",
    "product": "games",
    "label": "product",
    "title_ar": "اختبار التخزين يتعطل بسبب إضافة SQLite المحلية",
    "title_en": "Storage tests fail on the local SQLite binary",
    "evidence": {
      "summary_ar": "الفحص الانتقائي مرّر24 اختبارًا وفشل اختبار storage.test.js: node_sqlite3.node: invalid ELF header. الدليل خاص بهذه البيئة؛ لا يثبت تعطل التخزين في الإنتاج.",
      "summary_en": "The selected suite passed 24 tests and failed storage.test.js with node_sqlite3.node: invalid ELF header. Environment-specific evidence; it does not establish a production storage failure.",
      "measured_at": "2026-10-20T01:22:05.895Z",
      "scope_ar": "صفحات عامة، Chromium عند 390×844؛ فحص مختبر محدود، لا حكم شامل على المنتج. لم تُعدّل مستودعات المنتجات.",
      "scope_en": "Public pages in a limited 390x844 Chromium lab audit; not a comprehensive product review. Product repositories were not modified.",
      "sources": [
        {
          "label_ar": "التقرير الخام · games-tests.txt",
          "label_en": "Raw report · games-tests.txt",
          "url": "/labs/evidence/games-tests.txt"
        }
      ]
    },
    "severity": "med",
    "hypothesis": "إعادة بناء التبعية للمنصة الصحيحة في CI نظيف تجعل اختبار التخزين قابلًا للتكرار.",
    "hypothesis_en": "Building the dependency for the correct platform in clean CI should make storage tests reproducible.",
    "experiment": "في نسخة عمل مستقلة: npm ci للمنصة ثم اختبار storage؛ النجاح: تحميل الإضافة وتمرير اختبارات الحفظ والاستعادة. لا ننقل node_modules بين أنظمة مختلفة.",
    "experiment_en": "In an isolated checkout, install dependencies for the current platform and run storage tests. Accept native module loading and passing save/restore tests; do not reuse node_modules across operating systems.",
    "result": "",
    "result_en": "",
    "status": "open",
    "oss_candidates": [
      {
        "name": "playwright",
        "url": "https://github.com/microsoft/playwright",
        "license": "Apache-2.0",
        "license_url": "https://github.com/microsoft/playwright/blob/main/LICENSE",
        "why": "لإعادة إنتاج هذا السلوك في الجوال ولوحة المفاتيح وإضافة فحص يمنع رجوعه؛ إصلاح HTML/CSS نفسه لا يحتاج مكتبة جديدة.",
        "why_en": "Reproduce this behavior on mobile and keyboard and prevent regressions; the HTML/CSS fix itself needs no new library."
      },
      {
        "name": "vitest",
        "url": "https://github.com/vitest-dev/vitest",
        "license": "MIT",
        "license_url": "https://github.com/vitest-dev/vitest/blob/main/LICENSE",
        "why": "لاختبار الحالات الحدّية وتثبيت معيار القبول آليًا؛ أداة تحقق وليست إصلاحًا تلقائيًا.",
        "why_en": "Test edge cases and enforce the acceptance criterion; a verification tool, not an automatic fix."
      }
    ]
  },
  {
    "id": "LAB-013",
    "product": "hayat",
    "label": "human",
    "title_ar": "منع تكبير الواجهة على الهاتف",
    "title_en": "Mobile interface disables zoom",
    "evidence": {
      "summary_ar": "HTML الحي يحتوي maximum-scale=1.0 وuser-scalable=no؛ axe meta-viewport أكد المنع. يوجد أيضًا منع gesturestart وmulti-touch في المصدر العام.",
      "summary_en": "Live HTML sets maximum-scale=1.0 and user-scalable=no; axe meta-viewport confirmed it. Public source also cancels gesturestart and multi-touch.",
      "measured_at": "2026-10-20T01:51:10.903057+00:00",
      "scope_ar": "صفحات عامة، Chromium عند 390×844؛ فحص مختبر محدود، لا حكم شامل على المنتج. لم تُعدّل مستودعات المنتجات.",
      "scope_en": "Public pages in a limited 390x844 Chromium lab audit; not a comprehensive product review. Product repositories were not modified.",
      "sources": [
        {
          "label_ar": "التقرير الخام · hayat-deep.json",
          "label_en": "Raw report · hayat-deep.json",
          "url": "/labs/evidence/hayat-deep.json"
        },
        {
          "label_ar": "التقرير الخام · hayat-source-review.json",
          "label_en": "Raw report · hayat-source-review.json",
          "url": "/labs/evidence/hayat-source-review.json"
        }
      ]
    },
    "severity": "high",
    "hypothesis": "فصل إيماءات اللعب عن قوائم الدخول يتيح تكبير النصوص دون إفساد التحكم.",
    "hypothesis_en": "Separating gameplay gestures from menus should permit text zoom without breaking controls.",
    "experiment": "جرّب التكبير200% في القوائم ثم اللعب بلمس اصطناعي وجهاز فعلي عند توفره؛ النجاح: قراءة القوائم مكبرة وبقاء تحكم اللعبة قابلًا للاستخدام.",
    "experiment_en": "Test 200% menu zoom and touch gameplay, adding physical-device verification when available. Accept readable zoomed menus with usable game controls.",
    "result": "لم يعد viewport الحي يحدد maximum-scale أو user-scalable=no وأصبح منع الإيماءات محصورًا في canvas (الإصلاح 0.8.3-a11y2؛ verified 2026-10-21 Asia/Riyadh).",
    "result_en": "The live viewport no longer sets maximum-scale or user-scalable=no and gesture prevention is scoped to the canvas (fix 0.8.3-a11y2; verified 2026-10-21 Asia/Riyadh).",
    "status": "solved",
    "oss_candidates": [
      {
        "name": "playwright",
        "url": "https://github.com/microsoft/playwright",
        "license": "Apache-2.0",
        "license_url": "https://github.com/microsoft/playwright/blob/main/LICENSE",
        "why": "لإعادة إنتاج هذا السلوك في الجوال ولوحة المفاتيح وإضافة فحص يمنع رجوعه؛ إصلاح HTML/CSS نفسه لا يحتاج مكتبة جديدة.",
        "why_en": "Reproduce this behavior on mobile and keyboard and prevent regressions; the HTML/CSS fix itself needs no new library."
      },
      {
        "name": "web-vitals",
        "url": "https://github.com/GoogleChrome/web-vitals",
        "license": "Apache-2.0",
        "license_url": "https://github.com/GoogleChrome/web-vitals/blob/main/LICENSE",
        "why": "لمقارنة LCP وCLS وINP محليًا قبل التجربة وبعدها؛ لا نجمع قياسات مستخدمين دون خطة خصوصية.",
        "why_en": "Compare LCP, CLS and INP locally before and after the experiment, without collecting user telemetry."
      }
    ]
  },
  {
    "id": "LAB-014",
    "product": "hayat",
    "label": "human",
    "title_ar": "شاشة البداية مرسومة بلا بديل دلالي",
    "title_en": "Canvas start screen has no semantic alternative",
    "evidence": {
      "summary_ar": "بعد30 ثانية: body.innerText فارغ، وcanvas بحجم390×844 بلا aria-label أو role. اللقطة تُظهر عنوان حياة وزر «حياة جديدة» بصريًا، دون عناصر DOM لهذه المهمة. لا ندعي فحص كل إمكانات قارئ الشاشة داخل Godot.",
      "summary_en": "After 30 seconds body.innerText was empty and the 390x844 canvas had no aria-label or role. The screenshot visibly shows Hayat and a New Life button, without DOM controls for that task. This does not evaluate every Godot screen reader feature.",
      "measured_at": "2026-10-20T01:25:30.781Z",
      "scope_ar": "صفحات عامة، Chromium عند 390×844؛ فحص مختبر محدود، لا حكم شامل على المنتج. لم تُعدّل مستودعات المنتجات.",
      "scope_en": "Public pages in a limited 390x844 Chromium lab audit; not a comprehensive product review. Product repositories were not modified.",
      "sources": [
        {
          "label_ar": "التقرير الخام · hayat-deep.json",
          "label_en": "Raw report · hayat-deep.json",
          "url": "/labs/evidence/hayat-deep.json"
        }
      ]
    },
    "severity": "high",
    "hypothesis": "قائمة دخول HTML بديلة توفر اسم المهمة وزر بدء حقيقيًا.",
    "hypothesis_en": "An HTML entry menu should expose the task name and a semantic start button.",
    "experiment": "نموذج HTML للعنوان وبدء اللعبة وإعدادات الوصول؛ النجاح: بدء الجلسة عبر Tab/Enter وظهور اسم المهمة في شجرة الوصول قبل إخفاء القائمة.",
    "experiment_en": "Prototype an HTML title, start action and accessibility settings. Accept Tab/Enter activation and named controls in the accessibility tree before dismissing the menu.",
    "result": "تعرض الصفحة الحية وصفًا للعبة واسمًا لـ canvas لكن زر البدء HTML كان مخفيًا أثناء حالة التحميل المرصودة ولذلك لم تتأكد إتاحة شاشة البدء (الإصلاح 0.8.3-a11y2؛ verified 2026-10-21 Asia/Riyadh).",
    "result_en": "The live page exposes a game description and labeled canvas but the HTML start button was hidden in the observed loading state, so start-screen accessibility remains unconfirmed (fix 0.8.3-a11y2; verified 2026-10-21 Asia/Riyadh).",
    "status": "testing",
    "oss_candidates": [
      {
        "name": "playwright",
        "url": "https://github.com/microsoft/playwright",
        "license": "Apache-2.0",
        "license_url": "https://github.com/microsoft/playwright/blob/main/LICENSE",
        "why": "لإعادة إنتاج هذا السلوك في الجوال ولوحة المفاتيح وإضافة فحص يمنع رجوعه؛ إصلاح HTML/CSS نفسه لا يحتاج مكتبة جديدة.",
        "why_en": "Reproduce this behavior on mobile and keyboard and prevent regressions; the HTML/CSS fix itself needs no new library."
      },
      {
        "name": "web-vitals",
        "url": "https://github.com/GoogleChrome/web-vitals",
        "license": "Apache-2.0",
        "license_url": "https://github.com/GoogleChrome/web-vitals/blob/main/LICENSE",
        "why": "لمقارنة LCP وCLS وINP محليًا قبل التجربة وبعدها؛ لا نجمع قياسات مستخدمين دون خطة خصوصية.",
        "why_en": "Compare LCP, CLS and INP locally before and after the experiment, without collecting user telemetry."
      }
    ]
  },
  {
    "id": "LAB-015",
    "product": "hayat",
    "label": "product",
    "title_ar": "محمّل الأصول يلغي إعادة استخدام ذاكرة HTTP",
    "title_en": "Asset loader prevents HTTP cache reuse",
    "evidence": {
      "summary_ar": "asset-loader.js الحي0.8.3 يضيف r=Date.now() وcache:no-store لطلبات WASM وPCK؛ حجم WASM المعلن35,376,909 بايت، وPCK2,234,560 بايت. هذا فحص سياسة جلب، وليس زمن تنزيل35MB مقاسًا.",
      "summary_en": "Live loader 0.8.3 adds r=Date.now() and cache:no-store to WASM/PCK requests. Declared WASM size is 35,376,909 bytes and PCK is 2,234,560 bytes. This measures fetch policy, not a timed 35MB download.",
      "measured_at": "2026-10-20T01:51:10.903057+00:00",
      "scope_ar": "صفحات عامة، Chromium عند 390×844؛ فحص مختبر محدود، لا حكم شامل على المنتج. لم تُعدّل مستودعات المنتجات.",
      "scope_en": "Public pages in a limited 390x844 Chromium lab audit; not a comprehensive product review. Product repositories were not modified.",
      "sources": [
        {
          "label_ar": "التقرير الخام · hayat-source-review.json",
          "label_en": "Raw report · hayat-source-review.json",
          "url": "/labs/evidence/hayat-source-review.json"
        },
        {
          "label_ar": "التقرير الخام · hayat-loader-live.txt",
          "label_en": "Raw report · hayat-loader-live.txt",
          "url": "/labs/evidence/hayat-loader-live.txt"
        }
      ]
    },
    "severity": "med",
    "hypothesis": "أسماء أصول ذات بصمة مع تحقق سلامة قد تسمح بالتخزين دون رجوع ملف قديم أو جزئي.",
    "hypothesis_en": "Content-addressed assets with integrity checks may permit caching without stale or partial builds.",
    "experiment": "في نسخة تجريبية: استبدل كسر الذاكرة ببصمة إصدار؛ قارن زيارتين ثم ترقية إصدار؛ النجاح: إعادة استخدام الأصل في الثانية وتحميل الأصل الجديد كاملًا بعد الترقية.",
    "experiment_en": "In a test build, replace timestamp busting with a content hash. Compare two visits and one version upgrade. Accept cache reuse on visit two and complete new assets after upgrade.",
    "result": "يستخدم محمّل الأصول الحي روابط بمفاتيح المحتوى وcache default بدل روابط الوقت وno-store (الإصلاح 0.8.3-a11y2؛ verified 2026-10-21 Asia/Riyadh).",
    "result_en": "The live asset loader uses content-keyed URLs and cache default instead of timestamp URLs and no-store (fix 0.8.3-a11y2; verified 2026-10-21 Asia/Riyadh).",
    "status": "solved",
    "oss_candidates": [
      {
        "name": "playwright",
        "url": "https://github.com/microsoft/playwright",
        "license": "Apache-2.0",
        "license_url": "https://github.com/microsoft/playwright/blob/main/LICENSE",
        "why": "لإعادة إنتاج هذا السلوك في الجوال ولوحة المفاتيح وإضافة فحص يمنع رجوعه؛ إصلاح HTML/CSS نفسه لا يحتاج مكتبة جديدة.",
        "why_en": "Reproduce this behavior on mobile and keyboard and prevent regressions; the HTML/CSS fix itself needs no new library."
      },
      {
        "name": "web-vitals",
        "url": "https://github.com/GoogleChrome/web-vitals",
        "license": "Apache-2.0",
        "license_url": "https://github.com/GoogleChrome/web-vitals/blob/main/LICENSE",
        "why": "لمقارنة LCP وCLS وINP محليًا قبل التجربة وبعدها؛ لا نجمع قياسات مستخدمين دون خطة خصوصية.",
        "why_en": "Compare LCP, CLS and INP locally before and after the experiment, without collecting user telemetry."
      }
    ]
  },
  {
    "id": "LAB-016",
    "product": "waha",
    "label": "product",
    "title_ar": "طلب القياس الخارجي يفشل بسبب CORS",
    "title_en": "External measurement request fails CORS",
    "evidence": {
      "summary_ar": "في سياق جديد ظهر خطآن بالكونسول وطلب فاشل إلى cloudflareinsights.com/cdn-cgi/rum بسبب غياب Access-Control-Allow-Origin؛ تكرر في /books. لا يثبت عطلًا في المحتوى الأساسي.",
      "summary_en": "Fresh-context console recorded two errors and a failed cloudflareinsights.com/cdn-cgi/rum request due to missing Access-Control-Allow-Origin; reproduced at /books. This does not establish a core content failure.",
      "measured_at": "2026-10-20T01:29:40.690Z",
      "scope_ar": "صفحات عامة، Chromium عند 390×844؛ فحص مختبر محدود، لا حكم شامل على المنتج. لم تُعدّل مستودعات المنتجات.",
      "scope_en": "Public pages in a limited 390x844 Chromium lab audit; not a comprehensive product review. Product repositories were not modified.",
      "sources": [
        {
          "label_ar": "التقرير الخام · waha.json",
          "label_en": "Raw report · waha.json",
          "url": "/labs/evidence/waha.json"
        },
        {
          "label_ar": "التقرير الخام · waha-routes.json",
          "label_en": "Raw report · waha-routes.json",
          "url": "/labs/evidence/waha-routes.json"
        }
      ]
    },
    "severity": "med",
    "hypothesis": "تصحيح وجهة القياس أو تعطيل الحقن المكرر يزيل طلبًا غير مفيد.",
    "hypothesis_en": "Correcting the measurement endpoint or duplicate injection should remove the failed request.",
    "experiment": "اختبر مصدر الحقن في نسخة إعدادات منفصلة؛ النجاح: صفر طلبات قياس CORS فاشلة مع بقاء الواجهة وخصوصية المستخدم سليمتين.",
    "experiment_en": "Inspect injection in a separate configuration test. Accept no failed CORS measurement requests while retaining working UI and privacy constraints.",
    "result": "",
    "result_en": "",
    "status": "open",
    "oss_candidates": [
      {
        "name": "playwright",
        "url": "https://github.com/microsoft/playwright",
        "license": "Apache-2.0",
        "license_url": "https://github.com/microsoft/playwright/blob/main/LICENSE",
        "why": "لإعادة إنتاج هذا السلوك في الجوال ولوحة المفاتيح وإضافة فحص يمنع رجوعه؛ إصلاح HTML/CSS نفسه لا يحتاج مكتبة جديدة.",
        "why_en": "Reproduce this behavior on mobile and keyboard and prevent regressions; the HTML/CSS fix itself needs no new library."
      },
      {
        "name": "web-vitals",
        "url": "https://github.com/GoogleChrome/web-vitals",
        "license": "Apache-2.0",
        "license_url": "https://github.com/GoogleChrome/web-vitals/blob/main/LICENSE",
        "why": "لمقارنة LCP وCLS وINP محليًا قبل التجربة وبعدها؛ لا نجمع قياسات مستخدمين دون خطة خصوصية.",
        "why_en": "Compare LCP, CLS and INP locally before and after the experiment, without collecting user telemetry."
      },
      {
        "name": "query",
        "url": "https://github.com/TanStack/query",
        "license": "MIT",
        "license_url": "https://github.com/TanStack/query/blob/main/LICENSE",
        "why": "لتجربة جلب البيانات عند الطلب مع منع الطلبات المكررة وحالات خطأ واضحة؛ نقيس الأثر قبل اعتمادها.",
        "why_en": "Experiment with on-demand fetching, deduplication and explicit errors, measuring the effect before adoption."
      }
    ]
  },
  {
    "id": "LAB-017",
    "product": "waha",
    "label": "human",
    "title_ar": "أزرار ثانوية بارتفاع16–18 بكسل",
    "title_en": "Secondary buttons are only 16–18 pixels tall",
    "evidence": {
      "summary_ar": "قياس المستطيلات المرئية رصد «الكل»19.77×16 و«دعم»19.13×18 و«ظل اليوم»42.47×18 بكسل. القياس لحجم العنصر نفسه؛ لم ندّع فشل WCAG2.5.8 دون فحص المسافات.",
      "summary_en": "Visible bounds included All at 19.77x16, Support at 19.13x18 and Day shade at 42.47x18 pixels. These are element bounds, not a WCAG 2.5.8 failure claim without spacing analysis.",
      "measured_at": "2026-10-20T01:27:33.798Z",
      "scope_ar": "صفحات عامة، Chromium عند 390×844؛ فحص مختبر محدود، لا حكم شامل على المنتج. لم تُعدّل مستودعات المنتجات.",
      "scope_en": "Public pages in a limited 390x844 Chromium lab audit; not a comprehensive product review. Product repositories were not modified.",
      "sources": [
        {
          "label_ar": "التقرير الخام · waha-deep.json",
          "label_en": "Raw report · waha-deep.json",
          "url": "/labs/evidence/waha-deep.json"
        }
      ]
    },
    "severity": "med",
    "hypothesis": "تكبير مساحة الضغط يقلل الحاجة للدقة على الهاتف.",
    "hypothesis_en": "Larger activation areas should reduce touch precision demands.",
    "experiment": "جرّب padding/min-height44px دون تغيير ترتيب المحتوى؛ النجاح: الأزرار الأساسية والثانوية ≥44×44 ولا تداخل عند390 أو تكبير200%.",
    "experiment_en": "Try padding and 44px minimum touch targets without reordering content. Accept targets of at least 44x44 with no overlap at 390px or 200% zoom.",
    "result": "",
    "result_en": "",
    "status": "open",
    "oss_candidates": [
      {
        "name": "playwright",
        "url": "https://github.com/microsoft/playwright",
        "license": "Apache-2.0",
        "license_url": "https://github.com/microsoft/playwright/blob/main/LICENSE",
        "why": "لإعادة إنتاج هذا السلوك في الجوال ولوحة المفاتيح وإضافة فحص يمنع رجوعه؛ إصلاح HTML/CSS نفسه لا يحتاج مكتبة جديدة.",
        "why_en": "Reproduce this behavior on mobile and keyboard and prevent regressions; the HTML/CSS fix itself needs no new library."
      },
      {
        "name": "web-vitals",
        "url": "https://github.com/GoogleChrome/web-vitals",
        "license": "Apache-2.0",
        "license_url": "https://github.com/GoogleChrome/web-vitals/blob/main/LICENSE",
        "why": "لمقارنة LCP وCLS وINP محليًا قبل التجربة وبعدها؛ لا نجمع قياسات مستخدمين دون خطة خصوصية.",
        "why_en": "Compare LCP, CLS and INP locally before and after the experiment, without collecting user telemetry."
      },
      {
        "name": "query",
        "url": "https://github.com/TanStack/query",
        "license": "MIT",
        "license_url": "https://github.com/TanStack/query/blob/main/LICENSE",
        "why": "لتجربة جلب البيانات عند الطلب مع منع الطلبات المكررة وحالات خطأ واضحة؛ نقيس الأثر قبل اعتمادها.",
        "why_en": "Experiment with on-demand fetching, deduplication and explicit errors, measuring the effect before adoption."
      }
    ]
  },
  {
    "id": "LAB-018",
    "product": "waha",
    "label": "product",
    "title_ar": "موارد أقسام غير مفتوحة تُجلب في الزيارة الأولى",
    "title_en": "Unopened sections load resources on the first visit",
    "evidence": {
      "summary_ar": "في / سجّل Resource Timing71 موردًا؛ منها square-page.js20,507 بايت وquran.js15,237 بايت، دون فتح هذين القسمين. إجمالي نقل الموارد343,686 بايت. لا نفترض أن جميعها غير لازمة.",
      "summary_en": "At /, Resource Timing recorded 71 resources, including square-page.js (20,507 transferred bytes) and quran.js (15,237 bytes), without opening those sections; total resource transfer 343,686 bytes. Not all resources are assumed unnecessary.",
      "measured_at": "2026-10-20T01:22:06.178Z",
      "scope_ar": "صفحات عامة، Chromium عند 390×844؛ فحص مختبر محدود، لا حكم شامل على المنتج. لم تُعدّل مستودعات المنتجات.",
      "scope_en": "Public pages in a limited 390x844 Chromium lab audit; not a comprehensive product review. Product repositories were not modified.",
      "sources": [
        {
          "label_ar": "التقرير الخام · waha.json",
          "label_en": "Raw report · waha.json",
          "url": "/labs/evidence/waha.json"
        }
      ]
    },
    "severity": "med",
    "hypothesis": "تأجيل وحدات الأقسام قد يخفض كلفة المدخل مع الحفاظ على سرعة الانتقال.",
    "hypothesis_en": "Deferring section modules may reduce entry cost while maintaining fast navigation.",
    "experiment": "قارن الجلب عند الطلب في5 زيارات باردة، ثم افتح القرآن والساحة؛ النجاح: خفض نقل المدخل20% دون تراجع LCP أو تعطل الانتقال.",
    "experiment_en": "Compare on-demand loading over 5 cold visits, then open Quran and Square. Accept 20% less entry transfer without LCP regression or broken navigation.",
    "result": "",
    "result_en": "",
    "status": "open",
    "oss_candidates": [
      {
        "name": "playwright",
        "url": "https://github.com/microsoft/playwright",
        "license": "Apache-2.0",
        "license_url": "https://github.com/microsoft/playwright/blob/main/LICENSE",
        "why": "لإعادة إنتاج هذا السلوك في الجوال ولوحة المفاتيح وإضافة فحص يمنع رجوعه؛ إصلاح HTML/CSS نفسه لا يحتاج مكتبة جديدة.",
        "why_en": "Reproduce this behavior on mobile and keyboard and prevent regressions; the HTML/CSS fix itself needs no new library."
      },
      {
        "name": "web-vitals",
        "url": "https://github.com/GoogleChrome/web-vitals",
        "license": "Apache-2.0",
        "license_url": "https://github.com/GoogleChrome/web-vitals/blob/main/LICENSE",
        "why": "لمقارنة LCP وCLS وINP محليًا قبل التجربة وبعدها؛ لا نجمع قياسات مستخدمين دون خطة خصوصية.",
        "why_en": "Compare LCP, CLS and INP locally before and after the experiment, without collecting user telemetry."
      },
      {
        "name": "query",
        "url": "https://github.com/TanStack/query",
        "license": "MIT",
        "license_url": "https://github.com/TanStack/query/blob/main/LICENSE",
        "why": "لتجربة جلب البيانات عند الطلب مع منع الطلبات المكررة وحالات خطأ واضحة؛ نقيس الأثر قبل اعتمادها.",
        "why_en": "Experiment with on-demand fetching, deduplication and explicit errors, measuring the effect before adoption."
      }
    ]
  },
  {
    "id": "LAB-019",
    "product": "tahajjud",
    "label": "human",
    "title_ar": "منع تكبير النص في تطبيق تهجد",
    "title_en": "Tahajjud disables page zoom",
    "evidence": {
      "summary_ar": "HTML العام: maximum-scale=1 وuser-scalable=no؛ axe meta-viewport أعاد مخالفة واحدة. لا يوجد مستودع كود محلي مستقل لتهجد في نطاق البحث.",
      "summary_en": "Public HTML uses maximum-scale=1 and user-scalable=no; axe meta-viewport returned one violation. No independent local Tahajjud source repository was found.",
      "measured_at": "2026-10-20T01:27:52.904Z",
      "scope_ar": "صفحات عامة، Chromium عند 390×844؛ فحص مختبر محدود، لا حكم شامل على المنتج. لم تُعدّل مستودعات المنتجات. لم نعثر على كود تهجد محلي مستقل؛ الدليل من الموقع الحي ونسخة HTML العامة وصفحة التعريف في Main-Domain/projects/tahajjud/index.html فقط.",
      "scope_en": "Public pages in a limited 390x844 Chromium lab audit; not a comprehensive product review. Product repositories were not modified. No independent local Tahajjud source repository was found. Findings use the live site, its public HTML and Main-Domain/projects/tahajjud/index.html only.",
      "sources": [
        {
          "label_ar": "التقرير الخام · tahajjud-deep.json",
          "label_en": "Raw report · tahajjud-deep.json",
          "url": "/labs/evidence/tahajjud-deep.json"
        },
        {
          "label_ar": "التقرير الخام · tahajjud-source-review.json",
          "label_en": "Raw report · tahajjud-source-review.json",
          "url": "/labs/evidence/tahajjud-source-review.json"
        }
      ]
    },
    "severity": "high",
    "hypothesis": "السماح بالتكبير يحسن قراءة المواقيت والقرآن دون تغيير حساباتهما.",
    "hypothesis_en": "Permitting zoom should improve prayer-time and Quran readability without changing calculations.",
    "experiment": "نسخة تجريبية تسمح بالتكبير200%؛ النجاح: بقاء المواقيت وأزرار التنقل قابلة للقراءة والاستخدام دون إخفاء محتوى.",
    "experiment_en": "Test a zoom-enabled build at 200%. Accept readable, operable prayer times and navigation without concealed content.",
    "result": "لم يعد viewport الحي يقيّد التكبير الأقصى أو تكبير المستخدم (الإصلاح 81a6c69؛ verified 2026-10-21 Asia/Riyadh).",
    "result_en": "The live viewport no longer restricts maximum scale or user scaling (fix 81a6c69; verified 2026-10-21 Asia/Riyadh).",
    "status": "solved",
    "oss_candidates": [
      {
        "name": "playwright",
        "url": "https://github.com/microsoft/playwright",
        "license": "Apache-2.0",
        "license_url": "https://github.com/microsoft/playwright/blob/main/LICENSE",
        "why": "لإعادة إنتاج هذا السلوك في الجوال ولوحة المفاتيح وإضافة فحص يمنع رجوعه؛ إصلاح HTML/CSS نفسه لا يحتاج مكتبة جديدة.",
        "why_en": "Reproduce this behavior on mobile and keyboard and prevent regressions; the HTML/CSS fix itself needs no new library."
      },
      {
        "name": "vitest",
        "url": "https://github.com/vitest-dev/vitest",
        "license": "MIT",
        "license_url": "https://github.com/vitest-dev/vitest/blob/main/LICENSE",
        "why": "لاختبار الحالات الحدّية وتثبيت معيار القبول آليًا؛ أداة تحقق وليست إصلاحًا تلقائيًا.",
        "why_en": "Test edge cases and enforce the acceptance criterion; a verification tool, not an automatic fix."
      }
    ]
  },
  {
    "id": "LAB-020",
    "product": "tahajjud",
    "label": "human",
    "title_ar": "تسلسل عناوين تبويب القرآن يقفز مستوى",
    "title_en": "Quran tab skips a heading level",
    "evidence": {
      "summary_ar": "بعد الضغط على «القرآن» رصد axe heading-order على h3[data-i18n=\"quran_title\"]؛ الفحص من الواجهة الحية فقط.",
      "summary_en": "After opening Quran, axe heading-order flagged h3[data-i18n=\"quran_title\"]. Tested on the live interface only.",
      "measured_at": "2026-10-20T01:30:25.190Z",
      "scope_ar": "صفحات عامة، Chromium عند 390×844؛ فحص مختبر محدود، لا حكم شامل على المنتج. لم تُعدّل مستودعات المنتجات. لم نعثر على كود تهجد محلي مستقل؛ الدليل من الموقع الحي ونسخة HTML العامة وصفحة التعريف في Main-Domain/projects/tahajjud/index.html فقط.",
      "scope_en": "Public pages in a limited 390x844 Chromium lab audit; not a comprehensive product review. Product repositories were not modified. No independent local Tahajjud source repository was found. Findings use the live site, its public HTML and Main-Domain/projects/tahajjud/index.html only.",
      "sources": [
        {
          "label_ar": "التقرير الخام · tahajjud-routes.json",
          "label_en": "Raw report · tahajjud-routes.json",
          "url": "/labs/evidence/tahajjud-routes.json"
        }
      ]
    },
    "severity": "med",
    "hypothesis": "عنوان قسم من المستوى المناسب يجعل التنقل بالعناوين مترابطًا.",
    "hypothesis_en": "A section heading at the correct level should make heading navigation coherent.",
    "experiment": "افحص شجرة عناوين تبويبات اليوم/الأذكار/القرآن؛ النجاح: لا قفز غير مبرر في المستويات وبقاء الشكل المرئي متسقًا.",
    "experiment_en": "Inspect heading trees for Today, Adhkar and Quran tabs. Accept no unjustified heading jumps and consistent visual styling.",
    "result": "أصبح عنوان القرآن الحي h2 بدل h3 (الإصلاح 81a6c69؛ verified 2026-10-21 Asia/Riyadh).",
    "result_en": "The live Quran title is an h2 instead of an h3 (fix 81a6c69; verified 2026-10-21 Asia/Riyadh).",
    "status": "solved",
    "oss_candidates": [
      {
        "name": "playwright",
        "url": "https://github.com/microsoft/playwright",
        "license": "Apache-2.0",
        "license_url": "https://github.com/microsoft/playwright/blob/main/LICENSE",
        "why": "لإعادة إنتاج هذا السلوك في الجوال ولوحة المفاتيح وإضافة فحص يمنع رجوعه؛ إصلاح HTML/CSS نفسه لا يحتاج مكتبة جديدة.",
        "why_en": "Reproduce this behavior on mobile and keyboard and prevent regressions; the HTML/CSS fix itself needs no new library."
      },
      {
        "name": "vitest",
        "url": "https://github.com/vitest-dev/vitest",
        "license": "MIT",
        "license_url": "https://github.com/vitest-dev/vitest/blob/main/LICENSE",
        "why": "لاختبار الحالات الحدّية وتثبيت معيار القبول آليًا؛ أداة تحقق وليست إصلاحًا تلقائيًا.",
        "why_en": "Test edge cases and enforce the acceptance criterion; a verification tool, not an automatic fix."
      }
    ]
  },
  {
    "id": "LAB-021",
    "product": "tahajjud",
    "label": "human",
    "title_ar": "زر اختيار المدينة قصير على الهاتف",
    "title_en": "City selector has a small mobile target",
    "evidence": {
      "summary_ar": "زر «مكة (افتراضي)» قيس92.30×25.02 بكسل عند390×844، مقابل زر تفعيل الموقع بارتفاع44. لا نجزم بانتهاك معيار المسافات.",
      "summary_en": "The Mecca (default) button measured 92.30x25.02 pixels at 390x844, compared with a 44px-high location activation button. No spacing criterion violation is inferred.",
      "measured_at": "2026-10-20T01:27:52.904Z",
      "scope_ar": "صفحات عامة، Chromium عند 390×844؛ فحص مختبر محدود، لا حكم شامل على المنتج. لم تُعدّل مستودعات المنتجات. لم نعثر على كود تهجد محلي مستقل؛ الدليل من الموقع الحي ونسخة HTML العامة وصفحة التعريف في Main-Domain/projects/tahajjud/index.html فقط.",
      "scope_en": "Public pages in a limited 390x844 Chromium lab audit; not a comprehensive product review. Product repositories were not modified. No independent local Tahajjud source repository was found. Findings use the live site, its public HTML and Main-Domain/projects/tahajjud/index.html only.",
      "sources": [
        {
          "label_ar": "التقرير الخام · tahajjud-deep.json",
          "label_en": "Raw report · tahajjud-deep.json",
          "url": "/labs/evidence/tahajjud-deep.json"
        }
      ]
    },
    "severity": "med",
    "hypothesis": "زيادة ارتفاع اختيار المدينة تسهل تغيير الموقع يدويًا.",
    "hypothesis_en": "A taller city target should make manual location selection easier.",
    "experiment": "جرّب هدف44px وحدد مدينة يدويًا ثم ارجع؛ النجاح: الهدف ≥44px، يعرض المدينة المختارة، ولا يتداخل مع المواقيت عند تكبير200%.",
    "experiment_en": "Try a 44px target, manually select a city and return. Accept a target at least 44px tall, the correct selected city and no prayer-time overlap at 200% zoom.",
    "result": "",
    "result_en": "",
    "status": "open",
    "oss_candidates": [
      {
        "name": "playwright",
        "url": "https://github.com/microsoft/playwright",
        "license": "Apache-2.0",
        "license_url": "https://github.com/microsoft/playwright/blob/main/LICENSE",
        "why": "لإعادة إنتاج هذا السلوك في الجوال ولوحة المفاتيح وإضافة فحص يمنع رجوعه؛ إصلاح HTML/CSS نفسه لا يحتاج مكتبة جديدة.",
        "why_en": "Reproduce this behavior on mobile and keyboard and prevent regressions; the HTML/CSS fix itself needs no new library."
      },
      {
        "name": "vitest",
        "url": "https://github.com/vitest-dev/vitest",
        "license": "MIT",
        "license_url": "https://github.com/vitest-dev/vitest/blob/main/LICENSE",
        "why": "لاختبار الحالات الحدّية وتثبيت معيار القبول آليًا؛ أداة تحقق وليست إصلاحًا تلقائيًا.",
        "why_en": "Test edge cases and enforce the acceptance criterion; a verification tool, not an automatic fix."
      }
    ]
  },
  {
    "id": "LAB-022",
    "product": "alhajda",
    "label": "product",
    "title_ar": "الحاسبة تطلب ملفي CSS من مسار غير موجود",
    "title_en": "Calculator requests two missing CSS files",
    "evidence": {
      "summary_ar": "في /calc/ فشل طلب /calc/brand-tokens.css و/calc/hubs-rail.css برمز404 لكل منهما وظهر خطآن في console؛ بقية الصفحة فتحت.",
      "summary_en": "At /calc/, /calc/brand-tokens.css and /calc/hubs-rail.css each returned 404, causing two console errors; the page otherwise loaded.",
      "measured_at": "2026-10-20T01:30:08.386Z",
      "scope_ar": "صفحات عامة، Chromium عند 390×844؛ فحص مختبر محدود، لا حكم شامل على المنتج. لم تُعدّل مستودعات المنتجات.",
      "scope_en": "Public pages in a limited 390x844 Chromium lab audit; not a comprehensive product review. Product repositories were not modified.",
      "sources": [
        {
          "label_ar": "التقرير الخام · alhajda-routes.json",
          "label_en": "Raw report · alhajda-routes.json",
          "url": "/labs/evidence/alhajda-routes.json"
        }
      ]
    },
    "severity": "high",
    "hypothesis": "تصحيح مسارات الأنماط إلى موقعها الفعلي يعيد تنسيق الهوية.",
    "hypothesis_en": "Correct asset paths should restore the intended brand styling.",
    "experiment": "صحّح المسارين في نسخة منفصلة وافحص390/1440؛ النجاح: صفر404 للأصول وصفر أخطاء console مع مراجعة بصرية.",
    "experiment_en": "Correct both paths in an isolated build and check 390/1440. Accept no asset 404s or console errors and a visual review.",
    "result": "حمّلت /calc/ الحية دون أخطاء HTTP وتستخدم استيرادات CSS للغلاف في المستودع مسارات مطلقة من الجذر (الإصلاح ca0e273؛ verified 2026-10-21 Asia/Riyadh).",
    "result_en": "Live /calc/ loaded without HTTP errors and repo shell CSS imports use root-absolute paths (fix ca0e273; verified 2026-10-21 Asia/Riyadh).",
    "status": "solved",
    "oss_candidates": [
      {
        "name": "playwright",
        "url": "https://github.com/microsoft/playwright",
        "license": "Apache-2.0",
        "license_url": "https://github.com/microsoft/playwright/blob/main/LICENSE",
        "why": "لإعادة إنتاج هذا السلوك في الجوال ولوحة المفاتيح وإضافة فحص يمنع رجوعه؛ إصلاح HTML/CSS نفسه لا يحتاج مكتبة جديدة.",
        "why_en": "Reproduce this behavior on mobile and keyboard and prevent regressions; the HTML/CSS fix itself needs no new library."
      },
      {
        "name": "web-vitals",
        "url": "https://github.com/GoogleChrome/web-vitals",
        "license": "Apache-2.0",
        "license_url": "https://github.com/GoogleChrome/web-vitals/blob/main/LICENSE",
        "why": "لمقارنة LCP وCLS وINP محليًا قبل التجربة وبعدها؛ لا نجمع قياسات مستخدمين دون خطة خصوصية.",
        "why_en": "Compare LCP, CLS and INP locally before and after the experiment, without collecting user telemetry."
      }
    ]
  },
  {
    "id": "LAB-023",
    "product": "alhajda",
    "label": "human",
    "title_ar": "مفاتيح تحكم الحاسبة أقل من هدف44px",
    "title_en": "Calculator controls are shorter than 44px",
    "evidence": {
      "summary_ar": "في /calc/ قيس زر SHIFT وMODE بارتفاع42px عند عرض390. المدخل28.78px؛ الملاحظة لحجم اللمس ولا تعني أن نتيجة الحساب خاطئة.",
      "summary_en": "At /calc/, SHIFT and MODE measured 42px high at 390px; the input measured 28.78px. This is a touch-area observation, not an arithmetic correctness claim.",
      "measured_at": "2026-10-20T01:30:08.386Z",
      "scope_ar": "صفحات عامة، Chromium عند 390×844؛ فحص مختبر محدود، لا حكم شامل على المنتج. لم تُعدّل مستودعات المنتجات.",
      "scope_en": "Public pages in a limited 390x844 Chromium lab audit; not a comprehensive product review. Product repositories were not modified.",
      "sources": [
        {
          "label_ar": "التقرير الخام · alhajda-routes.json",
          "label_en": "Raw report · alhajda-routes.json",
          "url": "/labs/evidence/alhajda-routes.json"
        }
      ]
    },
    "severity": "med",
    "hypothesis": "زيادة مساحة مفاتيح الأوامر تقلل أخطاء اللمس.",
    "hypothesis_en": "Larger command keys should reduce touch mistakes.",
    "experiment": "جرّب الحد الأدنى44px واختبر SHIFT/MODE وسجل الحساب؛ النجاح: جميع مفاتيح الأوامر ≥44px بلا تمرير أفقي عند390.",
    "experiment_en": "Try a 44px minimum and check SHIFT, MODE and history. Accept command keys at least 44px tall with no horizontal overflow at 390.",
    "result": "بلغ ارتفاع جميع عناصر التحكم الظاهرة في الحاسبة الحية /calc/ مقدار 44px على الأقل بعرض 390px (الإصلاح ca0e273؛ verified 2026-10-21 Asia/Riyadh).",
    "result_en": "All visible calculator controls measured at least 44px high on live /calc/ at 390px width (fix ca0e273; verified 2026-10-21 Asia/Riyadh).",
    "status": "solved",
    "oss_candidates": [
      {
        "name": "playwright",
        "url": "https://github.com/microsoft/playwright",
        "license": "Apache-2.0",
        "license_url": "https://github.com/microsoft/playwright/blob/main/LICENSE",
        "why": "لإعادة إنتاج هذا السلوك في الجوال ولوحة المفاتيح وإضافة فحص يمنع رجوعه؛ إصلاح HTML/CSS نفسه لا يحتاج مكتبة جديدة.",
        "why_en": "Reproduce this behavior on mobile and keyboard and prevent regressions; the HTML/CSS fix itself needs no new library."
      },
      {
        "name": "web-vitals",
        "url": "https://github.com/GoogleChrome/web-vitals",
        "license": "Apache-2.0",
        "license_url": "https://github.com/GoogleChrome/web-vitals/blob/main/LICENSE",
        "why": "لمقارنة LCP وCLS وINP محليًا قبل التجربة وبعدها؛ لا نجمع قياسات مستخدمين دون خطة خصوصية.",
        "why_en": "Compare LCP, CLS and INP locally before and after the experiment, without collecting user telemetry."
      }
    ]
  },
  {
    "id": "LAB-024",
    "product": "alhajda",
    "label": "human",
    "title_ar": "رابط الرجوع في أداة PDF صغير للمس",
    "title_en": "PDF tool back link has a small touch area",
    "evidence": {
      "summary_ar": "في /images-to-pdf/ رابط «← الأدوات» قيس58.59×22 بكسل؛ الصفحة HTTP200 بلا أخطاء console في العينة.",
      "summary_en": "At /images-to-pdf/, the Back to tools link measured 58.59x22 pixels. HTTP 200 with no console errors in this sample.",
      "measured_at": "2026-10-20T01:30:08.386Z",
      "scope_ar": "صفحات عامة، Chromium عند 390×844؛ فحص مختبر محدود، لا حكم شامل على المنتج. لم تُعدّل مستودعات المنتجات.",
      "scope_en": "Public pages in a limited 390x844 Chromium lab audit; not a comprehensive product review. Product repositories were not modified.",
      "sources": [
        {
          "label_ar": "التقرير الخام · alhajda-routes.json",
          "label_en": "Raw report · alhajda-routes.json",
          "url": "/labs/evidence/alhajda-routes.json"
        }
      ]
    },
    "severity": "low",
    "hypothesis": "مساحة ضغط أكبر تسهّل الرجوع للأدوات بيد واحدة.",
    "hypothesis_en": "A larger activation area should ease one-handed navigation back to the tools.",
    "experiment": "أضف مساحة ضغط44px دون تكبير النص نفسه؛ النجاح: الهدف ≥44px مع بقاء رابط رفع الصور واضحًا وعدم تداخل الترويسة.",
    "experiment_en": "Add a 44px activation area without enlarging the text itself. Accept a target at least 44px tall, clear upload controls and no header overlap.",
    "result": "",
    "result_en": "",
    "status": "open",
    "oss_candidates": [
      {
        "name": "playwright",
        "url": "https://github.com/microsoft/playwright",
        "license": "Apache-2.0",
        "license_url": "https://github.com/microsoft/playwright/blob/main/LICENSE",
        "why": "لإعادة إنتاج هذا السلوك في الجوال ولوحة المفاتيح وإضافة فحص يمنع رجوعه؛ إصلاح HTML/CSS نفسه لا يحتاج مكتبة جديدة.",
        "why_en": "Reproduce this behavior on mobile and keyboard and prevent regressions; the HTML/CSS fix itself needs no new library."
      },
      {
        "name": "web-vitals",
        "url": "https://github.com/GoogleChrome/web-vitals",
        "license": "Apache-2.0",
        "license_url": "https://github.com/GoogleChrome/web-vitals/blob/main/LICENSE",
        "why": "لمقارنة LCP وCLS وINP محليًا قبل التجربة وبعدها؛ لا نجمع قياسات مستخدمين دون خطة خصوصية.",
        "why_en": "Compare LCP, CLS and INP locally before and after the experiment, without collecting user telemetry."
      }
    ]
  }
]
