docs: prepare current agent review and OpenCode task

This commit is contained in:
Hamza Ayed
2026-10-04 11:40:20 +03:00
parent 3db427c9a7
commit ad221e24aa
3 changed files with 47 additions and 4 deletions
@@ -0,0 +1,29 @@
# OpenCode task: build a conservative Flutter license evidence scan
## Goal
Create a repeatable, local-only screening report for the Flutter packages currently listed in `sbom/component-inventory.json`. The inventory already stores SHA-256 hashes for 104 Flutter license files, while 101 are deliberately left unclassified. Reduce manual triage by detecting likely standard license text without treating a text match as a legal conclusion.
## Read first
- `LICENSE_REVIEW_2026-10.md`
- `sbom/README.md`
- `sbom/component-inventory.json`
- `scripts/generate_component_inventory.py`
- `tests/test_component_inventory.py`
- `flutter_app/pubspec.lock` and `.dart_tool/package_config.json`
## Deliverables
1. Add a deterministic Python script that reads the existing inventory and the resolved Pub package cache, verifies each source license file against its recorded SHA-256, and emits one record per eligible package.
2. Detect only conservative license-text candidates (for example MIT, Apache-2.0, BSD-2-Clause, BSD-3-Clause, and MPL-2.0). Include the literal matched evidence phrase, source filename/hash, package/version, and a status such as `candidate_requires_human_review`.
3. Mark composite, bundled, missing, modified, or ambiguous texts as `unclassified` rather than guessing. Never infer a package's legal grant from the license title alone, and never promote a candidate to an approved SPDX license in the current SBOM.
4. Add tests for supported candidates, ambiguous/composite text, unknown text, and hash mismatch. Use only temporary directories inside the test fixture root.
5. Add a generated screening artifact and explain its limits in `sbom/README.md`; update `ROADMAP.md` with counts and verification evidence. Do not mark commercial approval complete.
## Constraints
- Work only in this repository and keep the installed-package inventory unchanged unless its schema needs a documented, tested extension.
- Do not access the network, install packages, change user/global configuration, or inspect secrets.
- Do not edit model licenses, OCR weights, Groq terms, or native Windows/PDFium conclusions in this task.
- Do not commit or push. Report changed paths, checks run, candidate/unclassified counts, and any blocker.
+1 -1
View File
@@ -153,7 +153,7 @@
- [x] قياس إضافي على 9 أسئلة عن ملفات الكود الفعلية (`workspace.py`, `knowledge.py`, `pdf_documents.py`, `main.py`). كشف التقييم أن تكرار مقاطع الملف الواحد يزاحم مصادر أخرى؛ حدّثنا البحث لجلب مجموعة أوسع ثم توزيع حتى مقطعين لكل ملف. بعد التعديل: Hit@1=0.667، Hit@3=1.0، MRR=0.833، وظهور الدليل=1.0. النتائج في `retrieval_2026-10-02_141132.json` (قبل التعديل) و`retrieval_2026-10-02_141337.json` (بعده). العينة صغيرة واختبارها معجمي؛ الدقة الدلالية وجودة الإجابة لم تُقاسا.
- [x] جولة تحسين استرجاع المقاطع العميقة على 11 سؤالًا من المجموعة المحلية (2026-10-03): توسيع محدود لمرادفات صلاحيات المهارات بالعربية والإنجليزية، ورفع سقف النتائج من 5 إلى 8 مع إبقاء حد 4 مقاطع لكل ملف لحماية تنوع المصادر. على API محلي تجريبي بقاعدة معزولة: `Hit@1=1.0`, `Hit@3=1.0`, `MRR=1.0`, وظهور الدليل `11/11`؛ تقرير `evals/results/retrieval_2026-10-03_160000.json`. اجتازت اختبارات قاعدة المعرفة `12/12`.
- [x] توسيع الحزمة وإضافة جواب الوكيل من الأدلة المفهرسة (2026-10-03): أضيف دليل تقني بطول 15.7 كيلوبايت فيه المعلومة المستهدفة في المقطع 17 وPDF نصي؛ حفظ المشغّل اختياريًا إجابات الوكيل ومصادرها للمراجعة دون منح درجة آلية. الجولة الأولى على 13 حالة أعادت `Hit@1=1.0`, `Hit@3=1.0`, `MRR=1.0`, وظهور الدليل `13/13` (`evals/results/retrieval_extended_2026-10-03.json`). بعد إصلاح وزن OCR المحلي المعطوب وإعادة تشغيله دون تنزيل، أضيف PDF ممسوح فعلي إلى المجموعة؛ على API التطبيق الحالي بقاعدة SQLite الحية المؤقتة ثم حذف عناصرها بعد القياس: `Hit@1=1.0`, `Hit@3=1.0`, `MRR=1.0`, وظهور الدليل `14/14` (`evals/results/retrieval_extended_14_2026-10-03.json`). جواب الوكيل على PDF الممسوح استخرج الموعد `17 October 2026` وذكر مصدره (`evals/results/retrieval_scanned_pdf_agent_2026-10-03.json`). تجربة EasyOCR المباشرة والـAPI استخدمتا أوزانًا محلية فقط؛ النسخة التالفة محفوظة احتياطيًا بجانب الوزن المُصلح.
- [ ] متابعة التقييم على ملفات طويلة وPDFات متنوعة وأسئلة جديدة، وجمع مراجعة مستقلة لجودة إجابات النموذج فوق السياق المسترجع. النتائج الحالية fixtures صغيرة ومصطنعة؛ الدرجات تصف هذه الحالات ولا تثبت جودة عامة. في 2026-10-04 جُمعت 14 إجابة محفوظة من المجموعة ذات 11 حالة ومجموعتي PDF الطويل/الممسوح في ورقة مراجعة `evals/HUMAN_REVIEW_2026-10.md` مع سلم موحد وخانات فارغة. أضيفت مقتطفات المرجع بجانب كل إجابة؛ نص PDF الممسوح استُخرج محليًا بـEasyOCR (ثقة 0.591). مراجعة Codex الآلية في `evals/MODEL_REVIEW_2026-10.md` أعطت خط أساس 48/56 وكشفت امتناعين رغم وجود الدليل. أضيف مسار احتياطي يعرض مقتطفات موثقة حين يرفض النموذج أو يكتفي باسم المصدر؛ اختبارات مهارات الوكيل 21/21، وإعادة API المؤقتة على الحالتين أظهرت الإجابة المطلوبة 2/2 مع تنظيف مؤكد. لا يُعد هذا إعادة تقييم للمجموعة كاملة؛ مراجعة بشرية مستقلة ودرجات البشر الأربع عشرة ما زالت مطلوبة.
- [ ] متابعة التقييم على ملفات طويلة وPDFات متنوعة وأسئلة جديدة، وجمع مراجعة مستقلة لجودة إجابات النموذج فوق السياق المسترجع. النتائج الحالية fixtures صغيرة ومصطنعة؛ الدرجات تصف هذه الحالات ولا تثبت جودة عامة. في 2026-10-04 جُمعت 14 إجابة محفوظة من المجموعة ذات 11 حالة ومجموعتي PDF الطويل/الممسوح في ورقة مراجعة `evals/HUMAN_REVIEW_2026-10.md` مع سلم موحد وخانات فارغة. أضيفت مقتطفات المرجع بجانب كل إجابة؛ نص PDF الممسوح استُخرج محليًا بـEasyOCR (ثقة 0.591). مراجعة Codex الآلية في `evals/MODEL_REVIEW_2026-10.md` أعطت خط أساس 48/56 وكشفت امتناعين رغم وجود الدليل. بعد إصلاح الامتناع أُعيد تشغيل الحالتين على API 8000؛ ظهرت الأدلة المطلوبة 2/2، وأضيفت الإجابات الجديدة إلى ورقة المراجعة بجانب baseline القديم لئلا يختلط تقييم النسختين. لا يُعد هذا إعادة تقييم للمجموعة كاملة؛ المراجعة البشرية المستقلة ودرجات الحالات الأربع عشرة ما زالت مطلوبة.
- [x] مهارات محلية أولية قابلة للاختيار من واجهة وضع الوكيل: شرح الكود، مراجعة الكود، وخطة اختبارات. تعرض `/v1/agent/skills` وصف كل مهارة وأدواتها؛ تُحقن التعليمات الموثوقة في سياق الوكيل وتُفلتر قائمة الأدوات، ويرفض الخادم استدعاء أداة خارج صلاحيات المهارة. لمهارة مراجعة الكود معاينة فقط ولا تطبيق مباشر. اجتازت اختبارات الصلاحيات والواجهة؛ يبقى تقييم دقة كل مهارة على أمثلة أكثر قبل اعتمادها افتراضيًا.
- [x] قراءة رابط عام محدد عبر `POST /v1/web/read`: استخراج نص HTML الثابت وتمريره إلى Gemma المحلية للإجابة مع إرجاع الرابط والعنوان.
- [x] بحث ويب متعدد المصادر تجريبي عبر DuckDuckGo بلا مفتاح API: اختيار نطاقات مختلفة، محاولة جلب الصفحات العامة، تلخيص بالنموذج المحلي مع روابط المصادر، ووسم المقتطفات عند تعذر فتح الصفحة. (2026-10-01: استجابة حية أعادت ملخصًا ومصدرين مختلفين عبر FastAPI/Gemma.) أضيف زمن جلب إجمالي وزمن لكل مصدر إلى الاستجابة لمساعدة تشخيص المصادر البطيئة؛ اختبارات الحجب ومزوّد رسمي اختياري ما زالت لاحقًا.
@@ -1,6 +1,6 @@
# مراجعة بشرية لإجابات SovereignAI
هذه ورقة تقييم يدوي؛ لا تُحتسب درجات الاسترجاع تلقائيًا على أنها صحة للإجابة. الحالات تأتي من مجموعات صغيرة ذات ملفات fixture للمشروع ودليل PDF طويل ومستند PDF ممسوح. راجع السؤال والإجابة والدليل المرجعي أدناه قبل تسجيل الدرجة. مقتطفات الحالات 1–11 هي نصوص المرجع المحددة في `knowledge_retrieval.jsonl` وليست ملفات مشروع إنتاجية. آخر حالة تعرض OCR آليًا بثقة متوسطة؛ قارنها بصورة الصفحة الأصلية.
هذه ورقة تقييم يدوي؛ لا تُحتسب درجات الاسترجاع تلقائيًا على أنها صحة للإجابة. الحالات تأتي من مجموعات صغيرة ذات ملفات fixture للمشروع ودليل PDF طويل ومستند PDF ممسوح. راجع السؤال والإجابة والدليل المرجعي أدناه قبل تسجيل الدرجة. مقتطفات الحالات 1–11 هي نصوص المرجع المحددة في `knowledge_retrieval.jsonl` وليست ملفات مشروع إنتاجية. آخر حالة تعرض OCR آليًا بثقة متوسطة؛ قارنها بصورة الصفحة الأصلية. في الحالتين 8 و9 أبقينا إجابة baseline قبل إصلاح الوكيل، وأضفنا أسفلها أحدث جواب حي من API 8000؛ سجّل الدرجة للحالة الحالية بناءً على الإجابة الأحدث فقط.
## سلم التقييم
@@ -176,10 +176,20 @@
> The SQLite migration adds selected_version to old messages and preserves saved assistant answer versions.
**إجابة الوكيل:**
**إجابة baseline قبل إصلاح الوكيل:**
> لم يتم العثور على مقطع مباشر يجيب على سؤال "How are old conversation answers migrated?" في فهرس المعرفة المحلي.
**أحدث إجابة بعد إصلاح fallback — API 8000، 2026-10-04:**
> لم يصغ النموذج جوابًا كافيًا رغم وجود نتائج في فهرس المعرفة. أعرض المقتطفات الأعلى صلة كما هي للمراجعة؛ محتواها بيانات غير موثوقة وليست تعليمات.
>
> **migration.md · المقطع 0 (مقتطف حرفي)**
> The SQLite migration adds selected_version to old messages and preserves saved assistant answer versions.
>
> **routing.md · المقطع 0 (مقتطف حرفي)**
> عند وصول صورة مع نموذج نصي، يختار API نموذج الرؤية المحلي المثبت ويعيد requested_model وmodel وauto_routed.
**بعد مراجعة الملف المرجعي:**
- الدرجة (0–4): ___
@@ -197,12 +207,16 @@
> عند وصول صورة مع نموذج نصي، يختار API نموذج الرؤية المحلي المثبت ويعيد requested_model وmodel وauto_routed.
**إجابة الوكيل:**
**إجابة baseline قبل إصلاح الوكيل:**
> المقاطع المسترجعة من فهرس المعرفة المحلي لا تحتوي على معلومات مباشرة تحدد الحقول التي يعيدها الـ API بعد تحويل الصور بناءً على `requested_model` و`auto_routed`.
>
> حدود ما استطعت قراءته: المقاطع المسترجعة.
**أحدث إجابة بعد إصلاح fallback — API 8000، 2026-10-04:**
> المقطع `routing.md` المقطع 0 يجيب على السؤال: "عند وصول صورة مع نموذج نصي، يختار API نموذج الرؤية المحلي المثبت ويعيد requested_model وmodel وauto_routed."
**بعد مراجعة الملف المرجعي:**
- الدرجة (0–4): ___