* feat(docs): mirror every docs/ page in all 65 locales Extends the documentation mirrors from the 22-page core set (#13940) to every Markdown page under docs/: 152 sources x 65 locales = 9,880 mirrors (6,208 new), language bars rewritten for the full locale list, state adopted so the blocking drift gate now covers all 152 pages. run-translation.mjs: an oversized block made only of table rows or list items (PROVIDER_REFERENCE.md 244-row table, FREE_TIERS.md 71-item list) is cut at item boundaries and rejoined without a blank line — the single 16-40 KB request outlived the backend socket for verbose scripts. 48 older mirrors whose tables had lost rows were retranslated with --force. * docs(i18n): refresh mirrors for the sources the base changed since the branch cut Section-level retranslation of the 29 docs (and README.md) whose source or mirrors moved on release/v3.8.51 during the run, then state adoption; the drift gate is green again on the merged tree.
14 KiB
Homologation Suite (npm run homolog) (فارسی)
🌐 Languages: 🇺🇸 English · 🇪🇹 am · 🇸🇦 ar · 🇦🇿 az · 🇧🇬 bg · 🇧🇩 bn · 🇨🇿 cs · 🇩🇰 da · 🇩🇪 de · 🇬🇷 el · 🇪🇸 es · 🇪🇪 et · 🇫🇮 fi · 🇫🇷 fr · 🇮🇪 ga · 🇮🇳 gu · 🇳🇬 ha · 🇮🇱 he · 🇮🇳 hi · 🇭🇷 hr · 🇭🇺 hu · 🇦🇲 hy · 🇮🇩 id · 🇳🇬 ig · 🇮🇹 it · 🇯🇵 ja · 🇬🇪 ka · 🇰🇭 km · 🇮🇳 kn · 🇰🇷 ko · 🇱🇹 lt · 🇱🇻 lv · 🇮🇳 ml · 🇮🇳 mr · 🇲🇾 ms · 🇲🇹 mt · 🇲🇲 my · 🇳🇵 ne · 🇳🇱 nl · 🇳🇴 no · 🇮🇳 or · 🇮🇳 pa · 🇵🇭 phi · 🇵🇱 pl · 🇵🇹 pt · 🇧🇷 pt-BR · 🇷🇴 ro · 🇷🇺 ru · 🇱🇰 si · 🇸🇰 sk · 🇸🇮 sl · 🇷🇸 sr · 🇸🇪 sv · 🇰🇪 sw · 🇮🇳 ta · 🇮🇳 te · 🇹🇭 th · 🇹🇷 tr · 🇺🇦 uk-UA · 🇵🇰 ur · 🇺🇿 uz · 🇻🇳 vi · 🇳🇬 yo · 🇨🇳 zh-CN · 🇹🇼 zh-TW
اعتبارسنجی E2E در محیط واقعی برای استقرار OmniRoute که روی VPS همولوگیشن اجرا میشود
(HOMOLOG_BASE_URL، برای مثال http://192.168.0.15:20128). یک فرمان، چکلیست دستی
STOP #2 انتشار را با اجرایی خودکار و تولیدکننده شواهد جایگزین میکند.
موارد تحت پوشش
| لایه | مواردی که بررسی میکند | پیادهسازی |
|---|---|---|
| L0 — سلامت/همخوانی | /api/monitoring/health با کد 200، مقدار status: "healthy" و نسخه مورد انتظار پاسخ میدهد |
scripts/homolog/lib/parity.mjs |
| L1a — کلید موقت | ورود مدیر → POST /api/keys یک کلید API با دامنه محدود برای اجرای جاری ایجاد میکند که، فارغ از نتیجه، در بلوک finally با (DELETE /api/keys/:id) لغو میشود |
scripts/homolog/lib/adminClient.mjs |
| L1b — سطح API | کاتالوگ /v1/models، یک تکمیل چت واقعی و غیرجریانی (مدل حیاتی برای سطح، max_tokens: 5)، پاسخ 401 برای کلید نامعتبر و مسیر عمومی /api/monitoring/health |
tests/homolog/api/core.http (httpYac) |
| L1c — جریان SSE | تکمیل چت جریانی واقعی؛ text/event-stream، وجود حداقل یک دلتا از محتوا و یک پایاندهنده [DONE] را بررسی میکند |
scripts/homolog/lib/sseCheck.mjs |
| L2 — ارائهدهندگان واقعی | بهازای هر ارائهدهنده حیاتی موجود در کاتالوگ زنده /v1/models، یک درخواست چت با حداقل هزینه که در لحظه از طریق promptfoo تولید میشود |
scripts/homolog/gen-promptfoo.mjs + scripts/homolog/lib/providerTiers.mjs |
| L4a — احراز هویت رابط کاربری | یکبار از طریق فرم ورود واقعی وارد میشود و نشست (storageState) را در سراسر لایه رابط کاربری بازاستفاده میکند |
tests/homolog/ui/auth.setup.ts |
| L4b — مسیرهای رابط کاربری | هر فایل ایستای page.tsx زیر src/app/(dashboard)/dashboard (کشفشده از سیستم فایل؛ مسیرهای پویای [param] نادیده گرفته میشوند) بدون خطای HTTP، خطای صفحه یا مرز خطای Next.js بارگذاری میشود |
tests/homolog/ui/routes.spec.ts |
| L4c — جریان حیاتی رابط کاربری | یک کلید API را از طریق رابط کاربری داشبورد ایجاد کرده و دوباره لغو میکند (هیچ اثری روی VPS باقی نمیگذارد) | tests/homolog/ui/api-key-flow.spec.ts |
| L5 — گزارش یکپارچه | httpYac (از طریق junit-to-ctrf)، مبدل promptfoo→CTRF و گزارشگر CTRF مربوط به Playwright را در یک فایل homolog-ctrf.json ادغام میکند و همچنین یک فایل خوانای انسانی در homolog-report/summary.md میسازد |
scripts/homolog/run.mjs |
خود بازپخش هیچگونه دخالتی از LLM ندارد — این یک مجموعه آزمون رگرسیون قطعی است، نه یک ارزیابی. هوش مصنوعی فقط در کارهای نگهداری آینده وارد میشود (بخش نقشه راه در ادامه را ببینید).
پیشنیازها
- فایل
.env.homolog.exampleرا در.env.homologکپی کنید (توسط git نادیده گرفته میشود — هرگز آن را commit نکنید) و موارد زیر را تکمیل کنید:HOMOLOG_BASE_URL— استقرار هدف، برای مثالhttp://192.168.0.15:20128.HOMOLOG_ADMIN_PASSWORD— گذرواژه مدیریت داشبورد برای آن استقرار.HOMOLOG_CRITICAL_PROVIDERS— پیشوندهای provider با جداکننده ویرگول که یک درخواست واقعی smoke chat دریافت میکنند (برای مثالopenai,anthropic,gemini,codex,grok,glm,deepseek,openrouter).HOMOLOG_API_KEY— در اجراهای عادی خالی بگذارید؛ مجموعه آزمون کلید موقتی خودش را ایجاد و لغو میکند. این مقدار را فقط برای اشکالزدایی یک لایه بهصورت مجزا تنظیم کنید.
- در مخزن
npm installرا اجرا کنید (وابستگیهای مجموعه آزمون —httpyac،promptfoo،playwright-ctrf-json-reporter،junit-to-ctrf،ctrf— همگی devDependencies معمولی هستند). - اگر فایلهای باینری مرورگر از قبل موجود نیستند،
npx playwright installرا اجرا کنید.
نحوه اجرا
npm run homolog
برای اعتبارسنجی در برابر استقراری که نسخه آن با package.json محلی مطابقت ندارد
(برای مثال، محیط homologation که هنوز روی یک patch release قبلی است)، نسخه مورد انتظار
را صراحتاً بازنویسی کنید:
HOMOLOG_EXPECT_VERSION=3.8.47 npm run homolog
اگر هر لایهای شکست بخورد، اجرای برنامه با کد خروج غیرصفر پایان مییابد و همیشه تلاش میکند کلید
API موقتی ایجادشده را حتی در صورت شکست لغو کند (finally block در scripts/homolog/run.mjs).
خواندن گزارش
تمام خروجیها در homolog-report/ قرار میگیرند (توسط git نادیده گرفته میشود):
summary.md— همان جدولی که در stdout چاپ میشود، با یک ردیف برای هر لایه (✅/❌ + جزئیات).homolog-ctrf.json— گزارش یکپارچه CTRF (ادغام نتایج API/SSE، provider-smoke و UI) — این artifact باید به چکلیست STOP #2 انتشار پیوست شود.httpyac-junit.xml،api-ctrf.json،providers-ctrf.json،ui-ctrf.json— گزارشهای خام/میانی هر لایه.promptfooconfig.yaml،provider-misses.json— پیکربندی promptfoo تولیدشده برای اجرای فعلی و هر provider حیاتی که در کاتالوگ زنده موجود نبوده است.
شکست L0 بلافاصله اجرا را متوقف میکند (هیچ کلید موقتی ایجاد نمیشود)، زیرا عدم تطابق نسخه/سلامت به این معناست که هر لایه پاییندستی، استقرار اشتباهی را اعتبارسنجی خواهد کرد.
ایجاد مجدد خط مبنا هنگام تغییر موجه UI
L4b (route smoke) و L4c (جریان UI کلید API) توسط locatorهای واقعی DOM هدایت میشوند، نه snapshotها؛ بنابراین بیشتر تغییرات موجه UI نیازی به بهروزرسانی مجموعه آزمون ندارند. هنگامی که تغییری باعث خرابی یک locator میشود (برای مثال، تغییر نام برچسب یک دکمه یا جابهجایی صفحه تنظیمات):
- locator را دوباره با کد منبع فعلی تطبیق دهید (specها از قبل مستند کردهاند که هر locator در برابر کدام فایل/خط تأیید شده است — همان الگو را دنبال کنید، حدس نزنید).
- spec موجود در
tests/homolog/ui/را بهروزرسانی کنید. npm run homolog(یا فقط spec تحت تأثیر Playwright) را دوباره در برابر VPS اجرا کنید تا اصلاح تأیید شود، سپس commit کنید.
در این مجموعه آزمون هیچ خط مبنای بصری/پیکسلی وجود ندارد (F1) — برای آن Roadmap را ببینید.
نقشه راه (F2 / F3)
طراحی و عرضه مرحلهای در spec برنامهریزی داخلی
_tasks/superpowers/specs/2026-07-13-homolog-e2e-suite-design.md قرار دارد (لینک نشده است — یک
artifact داخلی در _tasks/ که بخشی از مستندات ردیابیشده این مخزن نیست). خلاصه:
- F2 — ضبط کامل walkthrough ← Playwright Test Agents (
planner/generator) آن را به specهای جریان تبدیل میکنند (ایجاد combo، آزمایش provider، ویرایش تنظیمات، ابزارهای MCP) + خط مبنای رگرسیون بصری (Lost Pixel) با mask روی دادههای پویا (متریکها، timestampها، logها) + یک روال نگهداریhealerبرای هر انتشار. - F3 — پوشش تابآوری/قرارداد/wiring: toxiproxy + یک provider جعلی سازگار با OpenAI
روی devbox، یک combo با نام
homolog-resilienceروی VPS که به آن اشاره میکند (تزریق timeout ← بررسی fallback + باز/بستهشدن circuit breaker از طریق/api/monitoring/health)؛ آزمون قراردادی gated با Schemathesis در برابرdocs/openapi.yaml(--max-examplesکم، seedهای ثابت، فقط endpointهای غیر LLM)؛ و اتصالnpm run homolog+ فایلsummary.mdآن به مرحله STOP #2 در/generate-release.