1,104 mirrors rewritten over five passes of run-translation on the 22-source core set: the 14 sources edited since their translation, the 322 mirrors that were still English copies, and the frontmatter the old extractor leaked into the newer locales' bodies. The pipeline now caches per-`## `-section hashes and retranslates only changed sections, never reuses a section that is still English, rebuilds English-copy / leaked mirrors even when the source is unchanged, merges the state on save (parallel runs), and the drift gate (scoped to the core set) is blocking. Final audit: 0 stale, 0 English copies, 0 leaked frontmatter across 1,430 core mirrors. ⚠️ base-red inherited: #12732
31 KiB
Release Checklist (Oʻzbekcha)
🌐 Languages: 🇺🇸 English · 🇪🇹 am · 🇸🇦 ar · 🇦🇿 az · 🇧🇬 bg · 🇧🇩 bn · 🇨🇿 cs · 🇩🇰 da · 🇩🇪 de · 🇬🇷 el · 🇪🇸 es · 🇪🇪 et · 🇮🇷 fa · 🇫🇮 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 · 🇻🇳 vi · 🇳🇬 yo · 🇨🇳 zh-CN · 🇹🇼 zh-TW
Soʻnggi yangilanish: 2026-08-28 — v3.8.51 Avtomatlashtirish uchun Claude Code ko‘nikmalaridan foydalanadigan soddalashtirilgan reliz jarayoni.
Relizlar orasida navbat/tarmoqni yashil holatda saqlang: RELEASE_GREEN.md fayliga qarang (
/green-prsoilasi +npm run check:release-green+/babysit+ tungi ishga tushirish). Buni vaqti-vaqti bilan — ayniqsa ushbu nazorat ro‘yxatidan oldin — ishga tushirish reliz PR’ining yashil holatda boshlanishini ta’minlaydi.
Qisqacha
# 1. Versiyani oshirish + CHANGELOG yaratish (ko‘nikma)
/version-bump-cc patch # yoki minor/major
# 2. Sifat tekshiruvini mahalliy muhitda ishga tushirish
npm run check # lint + testlar
npm run test:coverage # to‘liq qamrov tekshiruvi (60/60/60/60)
# 3. Yig‘ish va tezkor tekshiruv
npm run build
npm run test:e2e # ixtiyoriy, ammo tavsiya etiladi
# 4. Relizni yaratish (ko‘nikma)
/generate-release-cc
# 5. Joylashtirish (ko‘nikma)
/deploy-vps-both-cc # yoki akamai-cc / local-cc
# 6. Reliz dalillarini yig‘ish (ko‘nikma)
/capture-release-evidences-cc
npm Trusted Publishing (v3.8.51 dan beri standart) — so‘rov bo‘yicha bosqichli, zaxira variant sifatida to‘g‘ridan-to‘g‘ri
npm-publish.yml standart holatda npm Trusted Publishing (OIDC) orqali nashr qiladi:
stage-npm vazifasi (GitHub tomonidan xost qilinadi) GitHub id-token’ini shu ishga tushirish uchun
qisqa muddatli npm hisob maʼlumotiga almashtiradi — repozitoriy sirlarida uzoq muddatli npm tokeni yo‘q,
2FA so‘rovi yo‘q va kelib chiqish maʼlumoti biriktiriladi.
2FA’ni chetlab o‘tadigan tokenlar isteʼmoldan chiqarilayotgani sababli endi npm ruxsat beradigan chetlab o‘tish usuli shu;
u WS1.3 kafolatini saqlagan holda loyiha v3.8.48 gacha ega bo‘lgan to‘liq avtomatik jarayonni tiklaydi
(sizdirilgan tokenning o‘zi nashr qila olmaydi — tokenning o‘zi mavjud emas).
Bir martalik sozlash (egasi): npmjs.com → omniroute paketi → Settings → Trusted
Publisher → GitHub: egasi diegosouzapw, repozitoriy OmniRoute, ish jarayoni npm-publish.yml
(muhit: yo‘q). Bu sozlama yaratilmaguncha avtomatik qadam ENEEDAUTH bilan muvaffaqiyatsiz tugaydi:
publish_mode=staged (quyida) yoki direct bilan qayta ishga tushiring.
Bosqichli nashr qilish (so‘rov bo‘yicha — publish_mode=staged)
npm-publish ish jarayoni endi to‘g‘ridan-to‘g‘ri nashr qilmaydi: u paketlangan tarball’ni
ishga tushiradi (check:pack-boot) va keyin npm stage publish buyrug‘ini bajaradi — aynan shu baytlar
reyestrda saqlanadi, ammo egasi tasdiqlamaguncha o‘rnatib bo‘lmaydi. Inson bajaradigan 2FA nazorati
isbotdan oldin emas, undan KEYINGI bosqichga ko‘chirildi.
Ish jarayoni yashil holatga o‘tgandan keyingi egasi bajaradigan jarayon:
npm stage list omniroute— bosqich identifikatorini toping (u ish jarayoni xulosasida ham ko‘rsatiladi).- Bosqichlangan baytlarni tekshiring (tavsiya etiladi):
npm stage download <id>, so‘ng yuklab olingan tarball’ni vaqtinchalik prefiksga o‘rnating va ishga tushiring (npm run check:pack-bootCI ichida xuddi shu paketlash→o‘rnatish→ishga tushirish xulosasini avtomatlashtiradi). npm stage approve <id>— 2FA so‘rovi nashrning O‘ZIDIR.npm stage reject <id>uni bekor qiladi.- Nashrdan keyingi himoya: nashrdan keyingi tekshiruvchi (v3.8.49 rejasining WS1.4 qismi) nashr qilingan versiyani ochiq reyestrdan toza konteynerga o‘rnatadi va ishga tushiradi.
Favqulodda zaxira variant: publish_mode=direct bilan workflow_dispatch eski
darhol bajariladigan npm publish jarayonini tiklaydi (faqat bosqichlashning o‘zi noto‘g‘ri ishlasa foydalaning;
sababini qayd eting).
Bir martalik mustahkamlash (egasi, npmjs.com): omniroute uchun Trusted Publisher’ni
faqat bosqichlash rejimida sozlang, shunda sizdirilgan uzoq muddatli token hech qayerdan
to‘g‘ridan-to‘g‘ri npm publish bajara olmaydi — CI faqat bosqichlay oladi; relizni faqat egasining 2FA’i chiqaradi.
Buzilgan artefakt bo‘yicha yo‘riqnoma (o‘zgarmagan): standart tezkor chora sifatida
npm deprecate omniroute@<bad> "<reason> — use <fixed>" dan foydalaning (bir necha daqiqa oladi,
qaytarish mumkin); npm unpublish dan faqat 72 soat/hech qanday bog‘liq paket yo‘q oynasi ichida foydalaning
va uni hech qachon birinchi chora sifatida qo‘llamang. Docker: versiya tegini hech qachon qayta yozmang —
ortga qaytarish latest ni oxirgi yaxshi dayjestga qayta yo‘naltirishdan iborat.
Docker Hub latest (har bir barqaror SemVer nashrida majburiy):
docker-publish ish jarayoni ikkala X.Y.Z tegini va
should-promote-latest.sh bu eng yuqori barqaror SemVer ekaniga rozi bo‘lsa, :latest tegini
bir xil dayjest bilan belgilashi kerak. Vazifa tugagandan keyin Hub’dagi latest dayjesti yangi
SemVer dayjestiga teng bo‘lishi va last_updated yangilangan bo‘lishi kerak. Reliz qaydlarida faqat git’da
mavjud bo‘lgan tuzatishlar haqida yozilgan bo‘lsa, :latest ni eski yig‘ilmada qoldirmang.
Compose uchun tezkor boshlash yo‘riqnomalari :latest dan foydalanadi; GitOps esa X.Y.Z ga mahkamlashda
davom etishi kerak. Docker reliz kanallari va #10317 ga qarang.
Tezkor tuzatish yoʻlagi (hotfix yorligʻi)
hotfix yorligʻi qoʻyilgan PR ogʻir CI matritsasini (9-shard E2E, qamrov ratchet’i,
quality-gate, quality-extended) chetlab oʻtadi va tezkor, yuqori signal beruvchi tekshiruvlarni saqlab qoladi: build,
unit shard’lari, integration, vitest, lint/typecheck, docs-sync, check:pack-artifact
hamda tarball ishga tushish smoke-testi (check:pack-boot). Maqsad: ~33 daqiqa oʻrniga ≤15 daqiqada yashil holat.
Kirish siyosati — toʻrttalasi ham majburiy (Chromium/VS Code/Node favqulodda yoʻlaklari asosida):
- Jiddiylik: production buzilgan — e’lon qilingan artefakt ishga tushishda qulaydi / xavfsizlik tuzatishi / relizning har bir foydalanuvchisiga ta’sir qiladi. “Muhim” degani “buzilgan” degani emas.
- Vakolat:
hotfixyorligʻini faqat repository egasi qoʻllaydi. YorliqNING OʻZI tasdiq hisoblanadi — campaign PR’da uni hech qachon oʻzingiz qoʻllamang. - Dalil: PR matni oldingi toʻliq yashil ogʻir ishga tushirishga (oʻtkazib yuborilgan job’lar qayta tekshirishi kerak boʻlgan suite’ga), shuningdek tuzatishning avval muvaffaqiyatsiz, keyin muvaffaqiyatli oʻtgan testiga havola beradi.
- Qamrov: faqat cherry-pick — minimal tuzatish, refaktoringsiz, qoʻshimcha oʻzgarishlarsiz.
Oʻtkazib yuborilgan coverage/ratchet yuzasi release branch’dagi keyingi toʻliq ishga tushirishda
qayta tekshiriladi (uzluksiz release-green) — yoʻlak tekshiruvni emas, faqat KUTISHNI chetlab oʻtadi.
Faqat testlardan iborat diff’lar (barcha fayllar tests/ ichida, hech biri tests/e2e/ ichida emas) E2E
matritsasini hech qanday yorliqsiz avtomatik ravishda oʻtkazib yuboradi.
Batafsil nazorat roʻyxati
Relizdan oldin
- Ushbu relizga moʻljallangan barcha PR’lar
release/vX.Y.0branch’iga merge qilingan - Ushbu versiya uchun barcha ochiq Linear/issue bandlari yopilgan yoki keyingi milestone’ga koʻchirilgan
release/vX.Y.0branch’ida CI yashil- Kodda
TODO(release)markerlari yoʻq:grep -r "TODO(release)" src/ open-sse/ - Docker asosiy image’i yangilangan (hozirda
node:24.15.0-trixie-slim)
Versiya va oʻzgarishlar jurnali
/version-bump-cc <patch|minor|major>buyrugʻini ishga tushiring (Claude Code skill’i)package.json,electron/package.jsonversiyalarini oshiradi- Oxirgi tag’dan keyingi git commit’lari asosida
CHANGELOG.mdfaylini qayta yaratadi - README.md badge’larini yangilaydi
- CHANGELOG.md faylini qoʻlda koʻrib chiqing va zarur boʻlsa commit xabarlarini tozalang
CHANGELOG.mdfaylidagi eng soʻnggi semver boʻlimipackage.jsonversiyasiga teng ekanini tekshiring- Kelgusi ishlar uchun
## [Unreleased]boʻlimini oʻzgarishlar jurnalining birinchi boʻlimi sifatida saqlang docs/openapi.yamlfaylini yangilang →info.versionqiymatipackage.jsonversiyasiga teng boʻlishi kerak
Kod sifati
npm run lint— 0 ta xato (ogohlantirishlar avvaldan mavjud)npm run typecheck:core— tozanpm run typecheck:noimplicit:core— toza (qat’iy)npm run check:cycles— siklik bogʻliqliklar yoʻqnpm run check:any-budget:t11— budjet doirasidanpm run check:route-validation:t06— tozanpm run check:node-runtime— qoʻllab-quvvatlanadigan minimal runtime talabi bajarilgan (>=22.22.2 <23,>=24.0.0 <27,src/shared/utils/nodeRuntimeSupport.tsichidagiSUPPORTED_NODE_RANGEboʻyicha;package.jsonichidagienginesbilan moslashtirilgan)
Testlash
npm run test:unit— muvaffaqiyatlinpm run test:vitest— muvaffaqiyatli (MCP server, autoCombo, cache)npm run test:coverage— 60/60/60/60 chegarasi bajarilgan (statements/lines/functions/branches)npm run test:integration— muvaffaqiyatli (agar oʻzgarishlar DB / handler’larga tegishli boʻlsa)npm run test:combo:matrix— muvaffaqiyatli (combo strategiyasi matritsasi: barcha 19 ta ommaviy routing strategiyasining tanlov qarorlarini deterministik tarzda isbotlaydi; combo routing, strategy resolution yoki fallback mantiqiga oʻzgartirish kiritilganda ishga tushiring)RUN_COMBO_LIVE=1 npm run test:combo:live— ixtiyoriy/qoʻlda (gate bilan himoyalangan haqiqiy upstream smoke-testi; VPS’dagiroot@192.168.0.15manzilidan faqat oʻqish uchun DB snapshot’ini oladi; haqiqiy provider’larga murojaat qiladi, kredit sarflaydi; CI’da hech qachon ishlamaydi; gate boʻlmasa muammosiz oʻtkazib yuboriladi)npm run test:combo:live:vps— ixtiyoriy/qoʻlda (3-bosqich VPS jonli smoke-testi: oddiy Node ESM orqali jonli.15serveriga qarshi 7 ta HTTP ssenariy;ssh root@192.168.0.15talab etiladi; faqat__live_test__*combo’larini yaratadi/oʻchiradi; haqiqiy provider’larga murojaat qiladi; CI’da hech qachon ishlamaydi)npm run test:e2e— muvaffaqiyatli (UI oʻzgarishlari)npm run test:protocols:e2e— muvaffaqiyatli (MCP/A2A oʻzgarishlari)npm run test:ecosystem— muvaffaqiyatli
Hook’lar (Husky orqali tekshiriladi)
Husky hook’lari .husky/ ichida joylashgan va git amallari vaqtida avtomatik ravishda ishlaydi.
- pre-commit:
npx lint-staged + node scripts/check/check-docs-sync.mjs + npm run check:any-budget:t11 - pre-push: tezkor deterministik tekshiruvlar —
npm run check:any-budget:t11 && npm run check:tracked-artifacts(2026-06-13 kuni faollashtirilgan).test:unitataylab kiritilmagan (sekin; CI’dagitest-unitjob’i bilan qamrab olingan).- Release branch’larini push qilishdan oldin
npm run test:unitbuyrugʻini qoʻlda ishga tushiring.
- Release branch’larini push qilishdan oldin
Agar hook muvaffaqiyatsiz tugasa: asosiy muammoni tuzating, --no-verify bilan chetlab oʻtmang.
Conventional Commit’lar
Relizga kiritiladigan barcha commit’lar type(scope): subject formatiga amal qilishi kerak.
Yaroqli type’lar: feat, fix, refactor, docs, test, chore, perf, style, ci
Yaroqli scope’lar: db, sse, oauth, dashboard, api, cli, docker, ci, mcp, a2a, memory, skills, cloud-agent, guardrails, compression, auto-combo, resilience, providers, executors, translator, domain, authz
Orqaga mos kelmaydigan oʻzgarishlar: BREAKING CHANGE: footer’ini yoki scope’dan keyin ! belgisini qoʻshing (masalan, feat(api)!: drop /v0).
Hujjatlar
npm run check:docs-syncmuvaffaqiyatli bajariladi (pre-commit tomonidan avtomatik ishga tushiriladi)npm run check:docs-allmuvaffaqiyatli bajariladi (umumlashtiruvchi: docs-sync + docs-counts + env-doc-sync + deprecated-versions + doc-links)npm run check:env-doc-sync0 kodi bilan yakunlanadi — kod ↔.env.example↔docs/reference/ENVIRONMENT.mdmuhit shartnomasi buzilmagannpm run check:doc-links0 kodi bilan yakunlanadi — qayta tuzishdan keyin buzilgan ichki markdown havolalari yoʻqdocs/architecture/ARCHITECTURE.mdsaqlash/runtime tafovutlari boʻyicha koʻrib chiqilgandocs/guides/TROUBLESHOOTING.mdmuhit oʻzgaruvchilari va operatsion tafovutlar boʻyicha koʻrib chiqilgan- Agar
.env.exampleoʻzgargan boʻlsa:docs/reference/ENVIRONMENT.mdyangilangan - Agar yangi funksiyada UI boʻlsa: u
docs/guides/USER_GUIDE.mdichida eslatilgan - Agar yangi funksiyada API boʻlsa:
docs/reference/API_REFERENCE.md+docs/openapi.yamlyangilangan - Agar yangi funksiya modul boʻlsa: unga bagʻishlangan
docs/<MODULE>.mdmavjud - Agar orqaga mos kelmaydigan oʻzgarish boʻlsa:
docs/guides/TROUBLESHOOTING.mdichida migratsiya eslatmasi mavjud
i18n
npm run i18n:check0 kodi bilan yakunlanadi — tarjima holati (.i18n-state.json) manba hujjatlari bilan sinxronlangan (qatʼiy rejimda tafovutli manbalar yoʻq; oxirgi daqiqadagi hujjat tuzatishlari uchun ogohlantirish rejimidagi tavsiyalarga ruxsat etiladi, ammo teg qoʻyishdan oldin natija 0 boʻlishi kerak)npm run i18n:check-ui-coverage0 kodi bilan yakunlanadi — har bir UI lokali 80% qamrov chegarasiga yetgan yoki undan yuqorinpm run i18n:sync-ui:drybarcha 42 lokal boʻyicha 0 ta yetishmayotgan kalit haqida xabar beradi- Agar ingliz tilidagi manba hujjatlari oʻzgargan boʻlsa, teg qoʻyishdan oldin
npm run i18n:runbuyrugʻini ishga tushiring (.envichidaOMNIROUTE_TRANSLATION_API_KEYboʻlishi talab qilinadi) - Kichik tarjima hissalarini keyingi relizgacha kechiktirish mumkin (CHANGELOG ichida kuzatib boring)
Maʼlumotlar bazasi migratsiyalari
- Agar
src/lib/db/migrations/ichida yangi fayllar boʻlsa:- Har bir migratsiya idempotent (
CREATE TABLE IF NOT EXISTSva hokazo) - Migratsiyalar tranzaksiyalarga oʻralgan
- Toʻgʻri raqamlangan (ketma-ketlikda boʻshliqlar yoʻq)
- Har bir migratsiya idempotent (
- Yangi oʻrnatishda sinang:
~/.omniroute/omniroute.dbfaylini oʻchirib,npm run devbuyrugʻini ishga tushiring - Mavjud oʻrnatishda sinang: maʼlumotlar bazasining zaxira nusxasini yarating, migratsiyani ishga tushiring va sxemani tekshiring
- Agar migratsiya jadvallarni qayta yozsa, WAL fayllari (
-wal,-shm) toʻgʻri boshqarilgan
Provayderlar katalogi (Zod orqali tekshiriladi)
src/shared/constants/providers.tsZod sxemasi yuklanish vaqtida yaroqli- Barcha provayderlarda talab qilinadigan maydonlar (
id,label,kindva hokazo) mavjud - Yangi bepul provayderlar uchun
freeNotetaqdim etilgan - OAuth provayderlarining
oauthConfigqiymatisrc/lib/oauth/constants/oauth.tsichida roʻyxatdan oʻtkazilgan
- Barcha provayderlarda talab qilinadigan maydonlar (
- Agar yangi provayder qoʻshilgan boʻlsa:
open-sse/executors/ichida unga mos ijrochi mavjud - Agar format OpenAI formatidan farq qilsa:
open-sse/translator/ichida tarjimon mavjud - Modellar
open-sse/config/providerRegistry.tsichida roʻyxatdan oʻtkazilgan tests/unit/ichidagi modul testlari provayder tasnifi va yoʻnaltirishni qamrab oladi
Ish stoli (Electron)
Agar electron/ oʻzgargan boʻlsa:
npm run electron:smoke:packagedmuvaffaqiyatli bajariladi- Buildlar
:win,:mac,:linuxvariantlaridan kamida bittasi uchun sinovdan oʻtkazilgan - Kodni imzolash sertifikatlarining amal qilish muddati tugamagan (agar imzolash qoʻllansa)
electron/package.jsonversiyasi ildizdagipackage.jsonversiyasiga mos- Agar
stablekanaliga reliz qilinayotgan boʻlsa, avtomatik yangilash kanali koʻrsatkichi yangilangan
Build tuzilishi
Repozitoriy uchta alohida chiqish katalogidan foydalanadi — ularni hech qachon aralashtirmang:
| Katalog | Maqsad | Kuzatiladimi? |
|---|---|---|
src/ |
Ilova manba kodi (TypeScript / TSX) | Ha |
.build/ |
Build oraliq fayllari — next build chiqishi (distDir) |
Yoʻq (gitignored) |
dist/ |
Tarqatiladigan npm toʻplami — assembleStandalone orqali yigʻiladi |
Yoʻq (gitignored) |
Operator eslatmasi: masofaviy VPS tasvir katalogi
/usr/lib/node_modules/omniroute/app/boʻlib qoladi. Faqat repozitoriy ichidagi build chiqishi koʻchirildi (app/→dist/). Deploy koʻnikmalaridist/tarkibini masofaviyapp/katalogiga rsync orqali nusxalaydi — VPS yoʻllarini oʻzgartirish talab qilinmaydi.
Yagona build jarayoni:
npm run build:release
└─ rm -rf .build dist (tozalash)
└─ next build → .build/next/ (oraliq fayllar)
└─ assembleStandalone (standalone + static + public + natives fayllarini dist/ ichiga nusxalaydi)
└─ writes dist/BUILD_SHA (HEAD nazorat belgisi)
Deploy uchun npm run build buyrugʻidan keyin alohida npm run build:cli buyrugʻini ISHGA TUSHIRMANG — bitta buyruqda toza qayta build va nazorat belgisini yaratadigan
npm run build:release buyrugʻidan foydalaning.
Artefaktni tekshirish
npm run build:releasemuvaffaqiyatli yakunlanadi vadist/BUILD_SHA==git rev-parse --short HEADnpm run check:pack-artifacttoza yakunlanadi —app.__qa_backup,scripts/scratch,package-lock.jsonyoki boshqa mahalliy qoldiqlar yoʻq- Builddan keyin
dist/server.jsmavjud
Teg qoʻyish va reliz
/generate-release-ccbuyrugʻini ishga tushiring (Claude Code koʻnikmasi):vX.Y.Ztegini yaratadi- Teg va branchni yuboradi
- Oʻzgarishlar jurnali matni bilan GitHub Release ochadi
- Electron oʻrnatuvchilarini biriktiradi (agar build qilingan boʻlsa)
- Yoki qoʻlda:
git tag -a vX.Y.Z -m "Release vX.Y.Z" git push origin vX.Y.Z gh release create vX.Y.Z --notes-from-tag
Deploy
Deploy koʻnikmalari yengil rsync jarayonidan foydalanadi — npm pack ham, npm i -g ham ishlatilmaydi:
- Maqsadga mos deploy koʻnikmasidan foydalaning:
/deploy-vps-local-cc— mahalliy VPS (192.168.0.15)/deploy-vps-akamai-cc— Akamai VPS (69.164.221.35)/deploy-vps-both-cc— har ikkisi
- Deploy qilishdan oldin
dist/BUILD_SHA==git rev-parse --short HEADekanini tasdiqlang - Build
node_moduleshaqiqiy boʻlgan joyda ishga tushirilishi kerak (asosiy checkout yokinpm cibajarilgan worktree — symlink qilingan worktree EMAS) - Deploy qilingan nusxada smoke-test oʻtkazing:
/dashboard/healthsahifasini oching → versiya satri relizga mosligini tekshiring- Maʼlum provayderga
/v1/chat/completionssoʻrovini yuboring /api/monitoring/healthCLOSEDholatidagi circuit breakerlarni qaytarishini tekshiring- MCP transportlari javob berishini tasdiqlang (
/mcpHTTP,/mcp-sseSSE)
Relizdan keyin
/capture-release-evidences-ccbuyrugʻini ishga tushiring (Claude Code koʻnikmasi)- Yangi funksiyalarning WebP formatidagi skrinshotlari/yozuvlarini oladi
- Ularni reliz qaydlari / blog postiga biriktiradi
- GitHub Discussions / Discordʼni reliz eʼloni bilan yangilang
- Keyingi versiya uchun bosqichni oching
- Agar muhim boʻlsa: muhokamani tepaga mahkamlang yoki ilova ichidagi banner uchun
news.jsonfayliga joylang
Radarʼni ommaviy ishga tushirish nazorat bosqichi
Radar eʼloni ataylab active: false holatida commit qilingan. Quyidagi har bir band
dalillar bilan tasdiqlangandan soʻng faollashtirish alohida oʻzgartirish sifatida amalga oshiriladi:
- Barcha ketma-ket Radar PRʼlari birlashtirilgan va release-tip CI muvaffaqiyatli oʻtgan
RADAR_ENABLEDstandart holatda hali ham oʻchiq boʻlgan holda OSS Radar yoʻnalishlarini joylashtiring va smoke-testdan oʻtkazing- Belgilangan Radar hostida
GET /planos,/termos,/privacidadeva/reembolsoyoʻnalishlarini smoke-testdan oʻtkazing - Operatorning shaxsi/aloqa maʼlumotlari/manzilini va egasi tasdiqlagan huquqiy tekshiruvni xususiy xizmatda qayd eting
- Stripe Checkout va imzolangan webhookʼni faqat test rejimida sinab koʻring
- Tasdiqlangan joʻnatuvchi/domen orqali bitta shifrlangan tranzaksion elektron xat yetkazilishini sinab koʻring
- Zaxira nusxadan tiklashni va nazorat ostida, byudjeti cheklangan bitta tadqiqot ishga tushirilishini tasdiqlang
- Xayriya dalillarini qabul qilishdan oldin BRL/PIX tekshiruv siyosatini tasdiqlang
- Ommaviy Checkoutʼni faqat oldingi nazorat bosqichlaridan oʻtgach yoqing, soʻng yangi
news.jsonIDʼsini faollashtiring - Bosh sahifa bannerida mahalliylashtirilgan matn ishlatilishini va eski ID yopilgandan keyin yangi ID yana paydo boʻlishini tekshiring
Oʻrnatilgan xizmatlar smoke-testi (v3.8.4+)
Oʻrnatilgan xizmatlarga oid oʻzgarishlarni oʻz ichiga olgan har qanday relizni chiqarishdan oldin quyidagilarni tekshiring:
Yangi DB bilan ishga tushirish (migratsiya toʻqnashuvlarini aniqlaydi — v3.8.4 tezkor tuzatishidan keyin qoʻshilgan)
DATA_DIR=$(mktemp -d) npm start &— ishga tushishini 10 s kutingcurl -s http://127.0.0.1:20128/api/services/9router/status | jq '.tool'natijasi"9router"boʻladi (404 EMAS, 500 EMAS). Bu071_services.sqlmigratsiyasi qoʻllanganini va qator kiritilganini tasdiqlaydi.sqlite3 $DATA_DIR/storage.sqlite "PRAGMA table_info(version_manager);" | grep -E "provider_expose|logs_buffer_path|last_sync_at"natijasida 3 ta qator qaytadi.sqlite3 $DATA_DIR/storage.sqlite "PRAGMA table_info(webhooks);" | grep -E "kind|metadata_encrypted"natijasida 2 ta qator qaytadi (070_webhooks_kind_metadata.sqlqoʻllanganini tasdiqlaydi).node --import tsx/esm --test tests/unit/db/no-migration-collisions.test.tsmuvaffaqiyatli oʻtadi — kelajakdagi toʻqnashuvlardan himoya qiladi.
9Router
POST /api/services/9router/install2 min dan kamroq vaqt ichidainstalledVersionbilan 200 qaytaradiPOST /api/services/9router/start30 s dan kamroq vaqt ichida 200 vastate: "running"qaytaradiGET /api/services/9router/statushealth: "healthy"holatini bildiradi"model": "9router/auto/..."bilanPOST /v1/chat/completions200 qaytaradi (9Router orqali boshidan oxirigacha marshrutlash)GET /dashboard/providers/services/9router/embed/dashboardproksi ichida 9Router mahalliy UI interfeysini render qiladi (toʻgʻridan-toʻgʻri127.0.0.1:portiframe ishlatilmaydi)POST /api/services/9router/rotate-key{ keyRotated: true }qaytaradi va xizmat muammosiz qayta ishga tushadiPOST /api/services/9router/stop200 vastate: "stopped"qaytaradiGET /api/services/9router/logs?tail=50soʻnggi qatorlarni oʻz ichiga olgansnapshothodisasi bilan SSE oqimini qaytaradi- PATH ichida
npmboʻlmagan muhitda oʻrnatish tushunarli (stek treysisiz) xato xabari bilan 500 qaytaradi
CLIProxyAPI
POST /api/services/cliproxy/install2 min dan kamroq vaqt ichida 200 qaytaradiPOST /api/services/cliproxy/start30 s dan kamroq vaqt ichida 200 vastate: "running"qaytaradiGET /api/services/cliproxy/statushealth: "healthy"holatini bildiradiPOST /api/services/cliproxy/stop200 vastate: "stopped"qaytaradiGET /api/services/cliproxy/logs?tail=50SSE oqimini qaytaradi
Xavfsizlik regressiyasi
curl -H "X-Forwarded-For: 1.2.3.4" http://localhost:20128/api/services/9router/start403 LOCAL_ONLYqaytaradicurl -H "X-Forwarded-For: 1.2.3.4" http://localhost:20128/api/services/cliproxy/start403 LOCAL_ONLYqaytaradi/api/services/*dan kelgan xato javoblaridaerr.stackyoki mutlaq fayl yoʻllari mavjud emas
v3.8.0+ tekshiruvlari
Har qanday v3.8.x relizini chiqarishdan oldin quyidagi qoʻshimcha bandlarni tekshiring:
omniroute --traymacOS tizimida ishga tushadi (systray2~/.omniroute/runtime/ichiga oʻrnatilgan)omniroute --trayLinux tizimida ishga tushadi (DISPLAY talab qilinadi; oʻrnatilmagan boʻlsa, xato toʻgʻri qayta ishlanadi)omniroute --trayWindows tizimida ishga tushadi (PowerShell NotifyIcon, qoʻshimcha ikkilik fayllarsiz)omniroute config tray enableavtomatik ishga tushirish yozuvini yaratadi; oʻchirish uni olib tashlaydinpm install -g omniroute@<this-version>postinstall jarayonini halokatli chiqishsiz bajaradi- Yangilash yoʻli ixtiyoriy bogʻliqliklarni saqlab qoladi:
omniroute update --applyva avtomatik yangilagichnpm install -g … --include=optionalbuyrugʻini ishga tushiradi, shundaoptionalDependencies(better-sqlite3, keytar, tls-client va llmlingua SLM steki:@atjsh/llmlingua-2@2.0.5,js-tiktoken) yangilanishdan keyin ham saqlanib qoladi. UltramodelPathSLM darajasi uchun tinybert modeli ham kerak boʻlib, u birinchi foydalanishda avtomatik tarzda${DATA_DIR}/models/llmlinguamanziliga yuklab olinadi. Shundan soʻng postinstall (scripts/build/colocateOptionals.mjs) SLM ixtiyoriy bogʻliqliklar yopilmasinidist/node_modulesichiga birga joylashtiradi, natijada worker YAGONA@huggingface/transformers^4.2.0 nusxasini aniqlaydi — mustaqil trace faqat transformers paketini toʻplamga kiritadi, dinamik import qilinadigan ixtiyoriy bogʻliqliklarni emas; busiz worker llmlingua-2 ni ildizdagi transformers bilan yuklaydi va SLM darajasi xatoni bildirmasdan fail-open holatiga oʻtadi. omniroute status.envfaylisiz ishlaydi (CLI token yoʻli, faqat loopback)curl http://localhost:20128/api/shutdown401 qaytaradi (har doim himoyalangan marshrut)curl -H "host: evil.com" http://localhost:20128/api/mcp/sse401 qaytaradi (loopback himoyasi)- SQLite runtime birinchi ishga tushirishda
bundledsifatida aniqlanadi (toʻplamdagi ikkilik fayl platforma uchun yaroqli) node_modules/better-sqlite3oʻchirilganda SQLite runtimeruntimevariantiga qaytadi- Smart MCP filtri haqiqiy
playwright-mcp browser_snapshotchiqishini siqadi (≥50% kamayish) - Barcha 10 ta
skills/omniroute*/SKILL.mdfaylini raw GitHub URL orqali ommaviy tarzda olish mumkin - Boshlangʻich sozlash ustasi yangi sozlamada "U qanday ishlaydi" darajalar bilan tanishtirish bosqichini koʻrsatadi
- Bosh sahifa boshqaruv panelidagi darajalar qamrovi vidjeti sozlangan/faol miqdorlarni koʻrsatadi
Orqaga qaytarish
Agar relizda jiddiy muammo bo‘lsa:
gh release edit vX.Y.Z --prerelease(eng so‘nggi reliz emas deb belgilaydi)git tag -d vX.Y.Z && git push --delete origin vX.Y.Z(faqat foydalanuvchilar hali undan foydalanishni boshlamagan bo‘lsa)- Yoki:
release/vX.Y.0da tezkor tuzatish →vX.Y.(Z+1)tuzatish relizi - GitHub Discussions va Discord orqali darhol xabar bering
Qat’iy qoidalar
- Hech qachon to‘g‘ridan-to‘g‘ri
mainga commit qilmang - Hech qachon
mainyokirelease/*branchlarigagit push --forceishlatmang - Hech qachon Husky hooklarini (
--no-verify) chetlab o‘tmang - Hech qachon sirlar, hisob ma’lumotlari yoki
.envfayllarini commit qilmang - Qamrov ≥60/60/60/60 (bayonotlar/satrlar/funksiyalar/tarmoqlar) darajasida qolishi kerak
src/,open-sse/,electron/yokibin/ichidagi ishlab chiqarish kodini o‘zgartirganda har doim testlarni qo‘shing yoki yangilang
Avtomatlashtirilgan sinxronlash tekshiruvi
PR ochishdan oldin hujjatlar sinxronligini tekshirish vositasini lokal ravishda ishga tushiring:
npm run check:docs-sync
CI ham ushbu tekshiruvni .github/workflows/ci.yml faylida (lint vazifasi) ishga tushiradi.