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
37 KiB
Release Checklist (اردو)
🌐 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 · 🇺🇿 uz · 🇻🇳 vi · 🇳🇬 yo · 🇨🇳 zh-CN · 🇹🇼 zh-TW
آخری بار اپ ڈیٹ کیا گیا: 2026-08-28 — v3.8.51 خودکاری کے لیے Claude Code کی مہارتوں سے فائدہ اٹھانے والا ہموار ریلیز فلو۔
ریلیزز کے درمیان قطار/برانچ کو گرین رکھیں: RELEASE_GREEN.md دیکھیں (
/green-prsفیملی +npm run check:release-green+/babysit+ رات کا عمل)۔ اسے وقتاً فوقتاً — اور بالخصوص اس چیک لسٹ سے پہلے — چلانے سے ریلیز PR گرین حالت میں شروع ہوتا ہے۔
خلاصہ
# 1. ورژن بڑھائیں + CHANGELOG بنائیں (مہارت)
/version-bump-cc patch # یا minor/major
# 2. مقامی طور پر کوالٹی گیٹ چلائیں
npm run check # lint + ٹیسٹس
npm run test:coverage # مکمل کوریج گیٹ (60/60/60/60)
# 3. بلڈ اور اسموک ٹیسٹ
npm run build
npm run test:e2e # اختیاری، مگر تجویز کردہ
# 4. ریلیز بنائیں (مہارت)
/generate-release-cc
# 5. تعینات کریں (مہارت)
/deploy-vps-both-cc # یا akamai-cc / local-cc
# 6. ریلیز کے شواہد محفوظ کریں (مہارت)
/capture-release-evidences-cc
npm Trusted Publishing (v3.8.51 سے ڈیفالٹ) — درخواست پر مرحلہ وار، براہِ راست بطور متبادل
npm-publish.yml ڈیفالٹ طور پر npm Trusted Publishing (OIDC) کے ذریعے شائع کرتا ہے:
stage-npm جاب (github-hosted) اس رن کے لیے GitHub کے id-token کو مختصر مدت کے npm
کریڈینشل سے تبدیل کرتا ہے — ریپوزٹری سیکرٹس میں کوئی طویل مدتی npm ٹوکن نہیں، کوئی 2FA پرامپٹ نہیں، اور provenance منسلک ہوتا ہے۔
اب جبکہ 2FA کو نظر انداز کرنے والے ٹوکنز کو ختم کیا جا رہا ہے، npm کی منظور کردہ بائی پاس یہی ہے؛
یہ WS1.3 ضمانت برقرار رکھتے ہوئے اس مکمل خودکار فلو کو بحال کرتا ہے جو پروجیکٹ میں v3.8.48 تک موجود تھا
(لیک ہونے والا ٹوکن اکیلے شائع نہیں کر سکتا — کیونکہ کوئی ٹوکن ہے ہی نہیں)۔
ایک بار کی سیٹ اپ (مالک): npmjs.com → پیکیج omniroute → Settings → Trusted
Publisher → GitHub: مالک diegosouzapw، ریپو OmniRoute، ورک فلو npm-publish.yml
(environment: none)۔ جب تک یہ موجود نہ ہو، خودکار مرحلہ ENEEDAUTH کے ساتھ ناکام ہوگا:
publish_mode=staged (ذیل میں) یا direct کے ساتھ دوبارہ ڈسپیچ کریں۔
مرحلہ وار اشاعت (درخواست پر — publish_mode=staged)
npm-publish ورک فلو اب براہِ راست شائع نہیں کرتا: یہ پیک شدہ tarball
(check:pack-boot) کو بوٹ کرتا ہے اور پھر npm stage publish چلاتا ہے — یہی عین بائٹس
رجسٹری میں محفوظ کر دی جاتی ہیں، مگر مالک کی منظوری تک انسٹال نہیں کی جا سکتیں۔
انسانی 2FA گیٹ اب ثبوت سے پہلے نہیں بلکہ اس کے بعد آتا ہے۔
ورک فلو گرین ہونے کے بعد مالک کا فلو:
npm stage list omniroute— اسٹیج id تلاش کریں (یہ ورک فلو کے خلاصے میں بھی دکھائی جاتی ہے)۔- مرحلہ وار محفوظ کی گئی بائٹس کی تصدیق کریں (تجویز کردہ):
npm stage download <id>، پھر ڈاؤن لوڈ کردہ tarball کو عارضی prefix میں انسٹال کرکے بوٹ کریں (npm run check:pack-boot، CI میں اسی pack→install→boot فیصلے کو خودکار بناتا ہے)۔ npm stage approve <id>— 2FA پرامپٹ ہی اشاعت ہے۔npm stage reject <id>اسے مسترد کر دیتا ہے۔- اشاعت کے بعد حفاظتی جال: اشاعت کے بعد کا verifier (v3.8.49 پلان کا WS1.4) صاف کنٹینر میں عوامی رجسٹری سے شائع شدہ ورژن انسٹال کرکے اسے بوٹ کرتا ہے۔
ہنگامی متبادل: publish_mode=direct کے ساتھ workflow_dispatch پرانے فوری
npm publish کو بحال کرتا ہے (صرف اس صورت میں استعمال کریں جب staging خود درست کام نہ کرے؛ وجہ درج کریں)۔
ایک بار کی مضبوطی (مالک، npmjs.com): omniroute کے لیے Trusted Publisher کو
صرف-stage موڈ میں ترتیب دیں تاکہ لیک ہونے والا طویل مدتی ٹوکن کہیں سے بھی براہِ راست npm publish
نہ کر سکے — CI صرف stage کر سکتا ہے؛ صرف مالک کا 2FA ریلیز کرتا ہے۔
خراب artifact کی حکمتِ عملی (بلا تبدیلی): ڈیفالٹ فوری ردِعمل کے طور پر
npm deprecate omniroute@<bad> "<reason> — use <fixed>" استعمال کریں (چند منٹ، قابلِ واپسی)؛
npm unpublish صرف 72h/no-dependents ونڈو کے اندر، اور کبھی بھی پہلے اقدام کے طور پر نہیں۔
Docker: کسی ورژن ٹیگ کو کبھی دوبارہ نہ لکھیں — rollback کا مطلب latest کو آخری درست digest کی طرف دوبارہ پوائنٹ کرنا ہے۔
Docker Hub latest (ہر مستحکم SemVer اشاعت پر لازم):
docker-publish ورک فلو کو دونوں X.Y.Z اور، جب
should-promote-latest.sh اس بات سے متفق ہو کہ یہ سب سے بلند مستحکم SemVer ہے، :latest
کو ایک ہی digest کے ساتھ ٹیگ کرنا چاہیے۔ جاب کے بعد: Hub کے latest کا digest نئے
SemVer digest کے برابر ہو اور last_updated تبدیل ہوا ہو۔ :latest کو کسی پرانے
بلڈ پر نہ چھوڑیں جبکہ ریلیز نوٹس ان اصلاحات کا ذکر کر رہے ہوں جو صرف git پر موجود ہیں۔
Compose کوئیک اسٹارٹس :latest استعمال کرتے ہیں؛ GitOps کو X.Y.Z پن کرنا جاری رکھنا چاہیے۔
Docker ریلیز چینلز اور #10317 دیکھیں۔
ہاٹ فکس فاسٹ لین (لیبل hotfix)
hotfix لیبل والا PR بھاری CI میٹرکس (9-shard E2E، coverage ratchet،
quality-gate، quality-extended) کو چھوڑ دیتا ہے اور تیز، زیادہ مؤثر گیٹس برقرار رکھتا ہے: build،
unit shards، integration، vitest، lint/typecheck، docs-sync، check:pack-artifact
اور tarball boot-smoke (check:pack-boot)۔ ہدف: تقریباً 33 منٹ کے بجائے ≤15min میں سبز حالت۔
داخلے کی پالیسی — چاروں شرائط لازم ہیں (Chromium/VS Code/Node کی ہنگامی لینز کی طرز پر):
- شدت: پروڈکشن خراب ہے — شائع شدہ artifact بوٹ ہوتے وقت کریش کرتا ہے / کوئی سیکیورٹی اصلاح درکار ہے / ریلیز کا ہر صارف متاثر ہے۔ "اہم" کا مطلب "خراب" نہیں ہے۔
- اختیار: صرف repository کا مالک
hotfixلیبل لگاتا ہے۔ لیبل ہی منظوری ہے — کسی campaign PR پر اسے کبھی خود سے استعمال نہ کریں۔ - ثبوت: PR کی تفصیل میں پچھلی مکمل طور پر سبز heavy run کا لنک شامل ہو (وہ suite جس کی توثیق چھوڑے گئے jobs دوبارہ کرتے)، نیز اصلاح کا اپنا پہلے ناکام اور پھر کامیاب ہونے والا test۔
- دائرۂ کار: صرف cherry-pick — کم سے کم اصلاح، کوئی refactor نہیں، کوئی اضافی تبدیلی ساتھ شامل نہیں۔
چھوڑی گئی coverage/ratchet سطح کی اگلی مکمل run میں
release branch پر دوبارہ توثیق کی جاتی ہے (مسلسل release-green) — یہ لین صرف انتظار چھوڑتی ہے، توثیق کبھی نہیں۔
صرف tests پر مشتمل diffs (tests/ کے تحت تمام files، tests/e2e/ کے تحت کوئی نہیں) کسی بھی لیبل کے بغیر
خودکار طور پر E2E میٹرکس چھوڑ دیتے ہیں۔
تفصیلی چیک لسٹ
ریلیز سے پہلے
- اس ریلیز کے لیے ہدف بنائے گئے تمام PRs،
release/vX.Y.0میں merge ہو چکے ہیں - اس version کے تمام کھلے Linear/issue items بند ہو چکے ہیں یا اگلے milestone میں منتقل کر دیے گئے ہیں
release/vX.Y.0branch پر CI سبز ہے- کوڈ میں کوئی
TODO(release)marker نہیں:grep -r "TODO(release)" src/ open-sse/ - Docker base image تازہ ترین ہے (فی الحال
node:24.15.0-trixie-slim)
Version اور Changelog
/version-bump-cc <patch|minor|major>چلائیں (Claude Code skill)package.json،electron/package.jsonکو bump کرتا ہے- آخری tag کے بعد کے git commits سے
CHANGELOG.mdدوبارہ بناتا ہے - README.md badges کو اپ ڈیٹ کرتا ہے
- CHANGELOG.md کا دستی جائزہ لیں اور ضرورت پڑنے پر commit messages درست کریں
- یقینی بنائیں کہ
CHANGELOG.mdکا تازہ ترین semver section،package.jsonکے version کے برابر ہے - آئندہ کے کام کے لیے
## [Unreleased]کو changelog کے پہلے section کے طور پر برقرار رکھیں docs/openapi.yamlکو اپ ڈیٹ کریں →info.versionلازماًpackage.jsonکے version کے برابر ہو
کوڈ کا معیار
npm run lint— 0 errors (warnings پہلے سے موجود ہیں)npm run typecheck:core— صافnpm run typecheck:noimplicit:core— صاف (سخت)npm run check:cycles— کوئی circular deps نہیںnpm run check:any-budget:t11— بجٹ کے اندرnpm run check:route-validation:t06— صافnpm run check:node-runtime— معاون runtime کی کم از کم حد پوری ہو (>=22.22.2 <23،>=24.0.0 <27،src/shared/utils/nodeRuntimeSupport.tsمیںSUPPORTED_NODE_RANGEکے مطابق؛package.jsonکےenginesکے ساتھ ہم آہنگ)
ٹیسٹنگ
npm run test:unit— کامیابnpm run test:vitest— کامیاب (MCP server، autoCombo، cache)npm run test:coverage— gate 60/60/60/60 پورا ہو (statements/lines/functions/branches)npm run test:integration— کامیاب (اگر تبدیلیاں DB / handlers کو متاثر کرتی ہوں)npm run test:combo:matrix— کامیاب (combo strategy matrix: تمام 19 عوامی routing strategies کے انتخابی فیصلوں کو قطعی طور پر ثابت کرتا ہے؛ combo routing، strategy resolution، یا fallback logic میں تبدیلی کرتے وقت چلائیں)RUN_COMBO_LIVE=1 npm run test:combo:live— اختیاری/دستی (gate کے پیچھے real-upstream smoke؛ VPSroot@192.168.0.15سے read-only DB snapshot حاصل کرتا ہے؛ حقیقی providers کو استعمال کرتا ہے، credits خرچ ہوتے ہیں؛ CI میں کبھی نہیں چلتا؛ gate کے بغیر صاف طور پر skip ہو جاتا ہے)npm run test:combo:live:vps— اختیاری/دستی (Phase-3 VPS live smoke: سادہ Node ESM کے ذریعے live.15server کے خلاف 7 HTTP scenarios؛ssh root@192.168.0.15درکار ہے؛ صرف__live_test__*combos بناتا/حذف کرتا ہے؛ حقیقی providers کو استعمال کرتا ہے؛ CI میں کبھی نہیں چلتا)npm run test:e2e— کامیاب (UI تبدیلیاں)npm run test:protocols:e2e— کامیاب (MCP/A2A تبدیلیاں)npm run test:ecosystem— کامیاب
Hooks (Husky سے توثیق شدہ)
Husky hooks، .husky/ میں موجود ہیں اور git operations پر خودکار طور پر چلتے ہیں۔
- pre-commit:
npx lint-staged + node scripts/check/check-docs-sync.mjs + npm run check:any-budget:t11 - pre-push: تیز، قطعی gates —
npm run check:any-budget:t11 && npm run check:tracked-artifacts(2026-06-13 کو فعال کیا گیا)۔ جان بوجھ کرtest:unitشامل نہیں ہے (سست؛ CI کےtest-unitjob میں شامل ہے)۔- release branches کو push کرنے سے پہلے
npm run test:unitدستی طور پر چلائیں۔
- release branches کو push کرنے سے پہلے
اگر کوئی hook ناکام ہو جائے: بنیادی مسئلہ حل کریں، --no-verify کے ذریعے اسے نظر انداز نہ کریں۔
Conventional Commits
ریلیز میں شامل ہونے والے تمام commits کو type(scope): subject فارمیٹ کی پیروی کرنا ضروری ہے۔
درست types: feat، fix، refactor، docs، test، chore، perf، style، ci
درست scopes: db، sse، oauth، dashboard، api، cli، docker، ci، mcp، a2a، memory، skills، cloud-agent، guardrails، compression، auto-combo، resilience، providers، executors، translator، domain، authz
Breaking changes: BREAKING CHANGE: footer یا scope کے بعد ! شامل کریں (مثلاً feat(api)!: drop /v0)۔
دستاویزات
npm run check:docs-syncکامیاب ہو (pre-commit کے ذریعے خودکار طور پر چلایا جاتا ہے)npm run check:docs-allکامیاب ہو (جامع کمانڈ: docs-sync + docs-counts + env-doc-sync + deprecated-versions + doc-links)npm run check:env-doc-syncکوڈ 0 کے ساتھ خارج ہو — کوڈ ↔.env.example↔docs/reference/ENVIRONMENT.mdکا env معاہدہ برقرار ہوnpm run check:doc-linksکوڈ 0 کے ساتھ خارج ہو — تنظیمِ نو کے بعد کوئی داخلی markdown حوالہ خراب نہ ہو- اسٹوریج/رن ٹائم کے انحراف کے لیے
docs/architecture/ARCHITECTURE.mdکا جائزہ لیا گیا ہو - env متغیرات اور آپریشنل انحراف کے لیے
docs/guides/TROUBLESHOOTING.mdکا جائزہ لیا گیا ہو - اگر
.env.exampleتبدیل ہوا ہے:docs/reference/ENVIRONMENT.mdاپ ڈیٹ کیا گیا ہو - اگر نئی خصوصیت کا UI ہے:
docs/guides/USER_GUIDE.mdمیں اس کا ذکر ہو - اگر نئی خصوصیت کا API ہے:
docs/reference/API_REFERENCE.md+docs/openapi.yamlاپ ڈیٹ کیے گئے ہوں - اگر نئی خصوصیت ایک ماڈیول ہے: مخصوص
docs/<MODULE>.mdموجود ہو - اگر یہ بریکنگ تبدیلی ہے:
docs/guides/TROUBLESHOOTING.mdمیں مائیگریشن نوٹ موجود ہو
i18n
npm run i18n:checkکوڈ 0 کے ساتھ خارج ہو — ترجمے کی حالت (.i18n-state.json) ماخذ دستاویزات کے ساتھ ہم آہنگ ہو (strict mode میں کوئی منحرف ماخذ نہ ہو؛ آخری لمحے کی دستاویزی اصلاحات کے لیے warn-mode کی تنبیہ قابلِ قبول ہے، لیکن ٹیگ لگانے سے پہلے یہ 0 ہونی چاہیے)npm run i18n:check-ui-coverageکوڈ 0 کے ساتھ خارج ہو — ہر UI locale کم از کم 80% کوریج کی حد پر یا اس سے اوپر ہوnpm run i18n:sync-ui:dryتمام 42 locales میں 0 گم شدہ keys رپورٹ کرے- اگر انگریزی ماخذ دستاویزات تبدیل ہوئی ہیں تو ٹیگ لگانے سے پہلے
npm run i18n:runچلائیں (.envمیںOMNIROUTE_TRANSLATION_API_KEYدرکار ہے) - اگر ترجمے کی شراکت معمولی نوعیت کی ہو تو اسے اگلی ریلیز تک مؤخر کیا جا سکتا ہے (CHANGELOG میں درج کریں)
ڈیٹابیس مائیگریشنز
- اگر
src/lib/db/migrations/میں نئی فائلیں ہیں:- ہر مائیگریشن idempotent ہو (
CREATE TABLE IF NOT EXISTSوغیرہ) - مائیگریشنز transactions میں لپٹی ہوئی ہوں
- درست طور پر نمبر شدہ ہوں (ترتیب میں کوئی خلا نہ ہو)
- ہر مائیگریشن idempotent ہو (
- تازہ انسٹالیشن پر ٹیسٹ کریں:
~/.omniroute/omniroute.dbحذف کریں اورnpm run devچلائیں - موجودہ انسٹالیشن پر ٹیسٹ کریں: DB کا بیک اپ لیں، مائیگریشن چلائیں، اور schema کی تصدیق کریں
- اگر مائیگریشن tables کو دوبارہ لکھتی ہے تو WAL فائلیں (
-wal،-shm) درست طور پر سنبھالی جائیں
فراہم کنندہ کیٹلاگ (Zod سے توثیق شدہ)
src/shared/constants/providers.tsکا Zod schema لوڈ ہوتے وقت درست ہو- تمام فراہم کنندگان میں مطلوبہ fields (
id،label،kindوغیرہ) موجود ہوں - نئے مفت فراہم کنندگان کے لیے
freeNoteفراہم کیا گیا ہو - OAuth فراہم کنندگان کا
oauthConfig،src/lib/oauth/constants/oauth.tsمیں رجسٹرڈ ہو
- تمام فراہم کنندگان میں مطلوبہ fields (
- اگر نیا فراہم کنندہ شامل کیا گیا ہے:
open-sse/executors/میں متعلقہ executor موجود ہو - اگر فارمیٹ OpenAI کا نہیں ہے:
open-sse/translator/میں translator موجود ہو - Models،
open-sse/config/providerRegistry.tsمیں رجسٹرڈ ہوں tests/unit/میں unit tests فراہم کنندہ کی درجہ بندی اور routing کا احاطہ کریں
ڈیسک ٹاپ (Electron)
اگر electron/ تبدیل ہوا ہے:
npm run electron:smoke:packagedکامیاب ہو- کم از کم
:win،:mac،:linuxمیں سے کسی ایک کے لیے builds ٹیسٹ کیے گئے ہوں - Code signing certificates کی میعاد ختم نہ ہوئی ہو (اگر signing کی جا رہی ہے)
electron/package.jsonکا version، بنیادیpackage.jsonسے مماثل ہو- اگر
stableپر ریلیز کی جا رہی ہے تو auto-update channel pointer اپ ڈیٹ کیا گیا ہو
بِلڈ لے آؤٹ
ریپوزٹری تین الگ output directories استعمال کرتی ہے — انہیں کبھی آپس میں نہ ملائیں:
| ڈائریکٹری | مقصد | ٹریک شدہ؟ |
|---|---|---|
src/ |
ایپلیکیشن کا ماخذ (TypeScript / TSX) | ہاں |
.build/ |
بِلڈ کے درمیانی نتائج — next build کا output (distDir) |
نہیں (gitignored) |
dist/ |
تقسیم کے قابل npm bundle — assembleStandalone کے ذریعے تیار کردہ |
نہیں (gitignored) |
آپریٹر نوٹ: ریموٹ VPS image directory بدستور
/usr/lib/node_modules/omniroute/app/ہے۔ صرف ریپوزٹری کے اندر بِلڈ output منتقل ہوا ہے (app/→dist/)۔ deploy skills،dist/کے مندرجات کو ریموٹapp/directory میں rsync کرتی ہیں — VPS path میں کسی تبدیلی کی ضرورت نہیں۔
واحد بِلڈ کا عمل:
npm run build:release
└─ rm -rf .build dist (صفائی)
└─ next build → .build/next/ (درمیانی نتائج)
└─ assembleStandalone (standalone + static + public + natives کو dist/ میں کاپی کرتا ہے)
└─ writes dist/BUILD_SHA (HEAD sentinel)
deploy کے لیے npm run build چلانے کے بعد الگ سے npm run build:cli ہرگز نہ چلائیں — اس کے بجائے
npm run build:release استعمال کریں، جو ایک ہی کمانڈ میں صاف rebuild + sentinel انجام دیتی ہے۔
آرٹیفیکٹ کی توثیق
npm run build:releaseکامیاب ہو اورdist/BUILD_SHA==git rev-parse --short HEADnpm run check:pack-artifactصاف ہو — کوئیapp.__qa_backup،scripts/scratch،package-lock.json، یا دوسری مقامی باقیات نہ ہوں- بِلڈ کے بعد
dist/server.jsموجود ہو
ٹیگنگ اور ریلیز
/generate-release-cc(Claude Code skill) چلائیں:vX.Y.Zٹیگ بناتا ہے- ٹیگ اور branch کو push کرتا ہے
- changelog متن کے ساتھ GitHub Release کھولتا ہے
- Electron installers منسلک کرتا ہے (اگر بنائے گئے ہوں)
- یا دستی طور پر:
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 skills ہلکا rsync طریقۂ کار استعمال کرتی ہیں — نہ npm pack، نہ npm i -g:
- ہدف سے مطابقت رکھنے والی deploy skill استعمال کریں:
/deploy-vps-local-cc— مقامی VPS (192.168.0.15)/deploy-vps-akamai-cc— Akamai VPS (69.164.221.35)/deploy-vps-both-cc— دونوں
- تعیناتی سے پہلے تصدیق کریں کہ
dist/BUILD_SHA==git rev-parse --short HEAD - بِلڈ ایسی جگہ چلنا چاہیے جہاں
node_modulesحقیقی ہو (مرکزی checkout یاnpm ciسے تیار کردہ worktree — symlink شدہ worktree نہیں) - تعینات شدہ instance کا smoke test کریں:
/dashboard/healthکھولیں → تصدیق کریں کہ version string ریلیز سے مماثل ہے- کسی معروف فراہم کنندہ کے خلاف
/v1/chat/completionsrequest چلائیں - تصدیق کریں کہ
/api/monitoring/health،CLOSEDcircuit breakers واپس کرتا ہے - تصدیق کریں کہ MCP transports جواب دیتے ہیں (
/mcpHTTP،/mcp-sseSSE)
ریلیز کے بعد
/capture-release-evidences-ccچلائیں (Claude Code اسکل)- نئی خصوصیات کے WebP اسکرین شاٹس/ریکارڈنگز محفوظ کرتا ہے
- انہیں ریلیز نوٹس / بلاگ پوسٹ کے ساتھ منسلک کرتا ہے
- ریلیز کے اعلان کے ساتھ GitHub Discussions / Discord کو اپ ڈیٹ کریں
- اگلے ورژن کے لیے مائل اسٹون کھولیں
- اگر اہم ہو: ڈسکشن کو پن کریں یا اِن-ایپ بینر کے لیے
news.jsonمیں پوسٹ کریں
Radar کے عوامی اجرا کا گیٹ
Radar کا اعلان جان بوجھ کر active: false کے ساتھ کمٹ کیا گیا ہے۔ ذیل کی ہر شق کے ثبوت فراہم ہونے کے بعد ایک علیحدہ
تبدیلی کے ذریعے اسے فعال کیا جائے گا:
- تمام اسٹیک شدہ Radar PRs مرج ہو چکے ہوں اور release-tip CI کامیاب ہو
- OSS Radar روٹس کو ڈیپلائے کریں اور
RADAR_ENABLEDکو بطور ڈیفالٹ بند رکھتے ہوئے ان کا اسموک ٹیسٹ کریں - نامزد Radar ہوسٹ پر
GET /planos،/termos،/privacidade، اور/reembolsoکا اسموک ٹیسٹ کریں - نجی سروس میں آپریٹر کی شناخت/رابطہ/پتہ اور مالک سے منظور شدہ قانونی جائزہ ریکارڈ کریں
- صرف ٹیسٹ موڈ میں Stripe Checkout اور دستخط شدہ webhook کی جانچ کریں
- منظور شدہ بھیجنے والے/ڈومین کے ساتھ ایک انکرپٹڈ ٹرانزیکشنل ای میل کی ترسیل کی جانچ کریں
- بیک اپ کی بحالی اور نگرانی میں، بجٹ کی حد کے اندر ایک تحقیقی رَن کو ثابت کریں
- عطیے کے ثبوت قبول کرنے سے پہلے BRL/PIX جائزہ پالیسی کی منظوری دیں
- عوامی Checkout کو صرف سابقہ گیٹس مکمل ہونے کے بعد فعال کریں، پھر نئی
news.jsonID کو فعال کریں - تصدیق کریں کہ Home بینر مقامی زبان کے متن کا استعمال کرتا ہے اور کسی پرانی ID کو مسترد کیے جانے کے بعد نئی ID دوبارہ ظاہر ہوتی ہے
ایمبیڈڈ سروسز اسموک ٹیسٹ (v3.8.4+)
ایسی کسی بھی ریلیز کو جاری کرنے سے پہلے جس میں ایمبیڈڈ سروسز کی تبدیلیاں شامل ہوں، تصدیق کریں:
تازہ-DB بوٹ (مائیگریشن کے ٹکراؤ پکڑتا ہے — v3.8.4 ہاٹ فکس کے بعد شامل کیا گیا)
DATA_DIR=$(mktemp -d) npm start &— بوٹ کے لیے 10 سیکنڈ انتظار کریںcurl -s http://127.0.0.1:20128/api/services/9router/status | jq '.tool'سے"9router"واپس آتا ہے (نہ 404، نہ 500)۔ یہ تصدیق کرتا ہے کہ مائیگریشن071_services.sqlلاگو ہوئی اور قطار شامل کی گئی۔sqlite3 $DATA_DIR/storage.sqlite "PRAGMA table_info(version_manager);" | grep -E "provider_expose|logs_buffer_path|last_sync_at"سے 3 قطاریں واپس آتی ہیں۔sqlite3 $DATA_DIR/storage.sqlite "PRAGMA table_info(webhooks);" | grep -E "kind|metadata_encrypted"سے 2 قطاریں واپس آتی ہیں (یہ تصدیق کرتا ہے کہ070_webhooks_kind_metadata.sqlلاگو ہوئی)۔node --import tsx/esm --test tests/unit/db/no-migration-collisions.test.tsکامیاب ہوتا ہے — مستقبل کے ٹکراؤ سے تحفظ فراہم کرتا ہے۔
9Router
POST /api/services/9router/installسے 2 منٹ سے کم وقت میںinstalledVersionکے ساتھ 200 واپس آتا ہےPOST /api/services/9router/startسے 30 سیکنڈ سے کم وقت میں 200 اورstate: "running"واپس آتا ہےGET /api/services/9router/statusمیںhealth: "healthy"رپورٹ ہوتا ہے"model": "9router/auto/..."کے ساتھPOST /v1/chat/completionsسے 200 واپس آتا ہے (9Router کے ذریعے ابتدا سے انتہا تک روٹنگ)GET /dashboard/providers/services/9router/embed/dashboardپراکسی کے اندر 9Router کا مقامی UI رینڈر کرتا ہے (براہِ راست127.0.0.1:portiframe نہیں)POST /api/services/9router/rotate-keyسے{ keyRotated: true }واپس آتا ہے اور سروس صاف طور پر دوبارہ شروع ہوتی ہےPOST /api/services/9router/stopسے 200 اورstate: "stopped"واپس آتا ہےGET /api/services/9router/logs?tail=50سےsnapshotایونٹ کے ساتھ SSE اسٹریم واپس آتی ہے، جس میں حالیہ سطریں شامل ہوتی ہیں- ایسے ماحول میں انسٹالیشن جہاں PATH میں
npmموجود نہ ہو، ایک دوستانہ (اسٹیک ٹریس کے بغیر) خرابی کے پیغام کے ساتھ 500 واپس کرتی ہے
CLIProxyAPI
POST /api/services/cliproxy/installسے 2 منٹ سے کم وقت میں 200 واپس آتا ہےPOST /api/services/cliproxy/startسے 30 سیکنڈ سے کم وقت میں 200 اورstate: "running"واپس آتا ہےGET /api/services/cliproxy/statusمیںhealth: "healthy"رپورٹ ہوتا ہےPOST /api/services/cliproxy/stopسے 200 اورstate: "stopped"واپس آتا ہےGET /api/services/cliproxy/logs?tail=50سے SSE اسٹریم واپس آتی ہے
سیکیورٹی ریگریشن
curl -H "X-Forwarded-For: 1.2.3.4" http://localhost:20128/api/services/9router/startسے403 LOCAL_ONLYواپس آتا ہےcurl -H "X-Forwarded-For: 1.2.3.4" http://localhost:20128/api/services/cliproxy/startسے403 LOCAL_ONLYواپس آتا ہے/api/services/*سے آنے والے خرابی کے جوابات میںerr.stackیا مطلق فائل پاتھ شامل نہیں ہوتے
v3.8.0+ کی جانچیں
کسی بھی v3.8.x ریلیز کو جاری کرنے سے پہلے، ان اضافی نکات کی تصدیق کریں:
omniroute --traymacOS پر بوٹ ہوتا ہے (systray2 کو~/.omniroute/runtime/میں انسٹال کیا گیا ہو)omniroute --trayLinux پر بوٹ ہوتا ہے (DISPLAY درکار ہے؛ سیٹ نہ ہونے پر مناسب خرابی)omniroute --trayWindows پر بوٹ ہوتا ہے (PowerShell NotifyIcon، کوئی اضافی بائنریز نہیں)omniroute config tray enableآٹو اسٹارٹ اندراج بناتا ہے؛ غیر فعال کرنے سے یہ ہٹ جاتا ہےnpm install -g omniroute@<this-version>پوسٹ انسٹال کو مہلک اخراج کے بغیر چلاتا ہے- اپ ڈیٹ پاتھ اختیاری ڈیپینڈنسیز کو برقرار رکھتا ہے:
omniroute update --applyاور آٹو اپڈیٹرnpm install -g … --include=optionalچلاتے ہیں تاکہoptionalDependencies(better-sqlite3، keytar، tls-client، اور llmlingua SLM اسٹیک:@atjsh/llmlingua-2@2.0.5،js-tiktoken) اپ ڈیٹ کے بعد بھی برقرار رہیں۔ الٹراmodelPathSLM درجے کو tinybert ماڈل بھی درکار ہے، جو پہلے استعمال پر خودکار طور پر${DATA_DIR}/models/llmlinguaمیں ڈاؤن لوڈ ہوتا ہے۔ پوسٹ انسٹال (scripts/build/colocateOptionals.mjs) پھر SLM کے اختیاری کلوژر کوdist/node_modulesمیں ایک ہی جگہ رکھتا ہے تاکہ ورکر@huggingface/transformers^4.2.0 کی صرف ایک انسٹینس کو ریزولو کرے — اسٹینڈ الون ٹریس صرف transformers کو بنڈل کرتا ہے، متحرک طور پر امپورٹ کیے گئے آپشنلز کو نہیں، اس لیے اس کے بغیر ورکر روٹ کے transformers کے ساتھ llmlingua-2 لوڈ کرے گا اور SLM درجہ خاموشی سے فیل اوپن ہو جائے گا۔ omniroute statusکسی.envکے بغیر کام کرتا ہے (CLI ٹوکن پاتھ، صرف لوپ بیک)curl http://localhost:20128/api/shutdownسے 401 واپس آتا ہے (ہمیشہ محفوظ روٹ)curl -H "host: evil.com" http://localhost:20128/api/mcp/sseسے 401 واپس آتا ہے (لوپ بیک گارڈ)- پہلے اجرا پر SQLite رن ٹائم
bundledپر ریزولو ہوتا ہے (بنڈل شدہ بائنری پلیٹ فارم کے لیے درست ہو) node_modules/better-sqlite3حذف ہونے پر SQLite رن ٹائمruntimeپر واپس آتا ہے- اسمارٹ MCP فلٹر حقیقی
playwright-mcp browser_snapshotآؤٹ پٹ کو کمپریس کرتا ہے (≥50% کمی) - تمام 10
skills/omniroute*/SKILL.mdفائلیں raw GitHub URL کے ذریعے عوامی طور پر قابلِ رسائی ہیں - تازہ سیٹ اپ پر آن بورڈنگ وزارڈ "یہ کیسے کام کرتا ہے" درجے کے دورے کا مرحلہ دکھاتا ہے
- ہوم ڈیش بورڈ کا درجے کی کوریج والا ویجٹ کنفیگر شدہ/فعال تعداد دکھاتا ہے
رول بیک
اگر ریلیز میں کوئی سنگین مسئلہ ہو:
gh release edit vX.Y.Z --prerelease(اسے تازہ ترین ریلیز نہ ہونے کے طور پر نشان زد کرتا ہے)git tag -d vX.Y.Z && git push --delete origin vX.Y.Z(صرف اس صورت میں جب صارفین نے اسے ابھی تک اختیار نہ کیا ہو)- یا:
release/vX.Y.0پر ہاٹ فکس → پیچ ریلیزvX.Y.(Z+1) - GitHub Discussions اور Discord میں فوراً اطلاع دیں
سخت اصول
- کبھی بھی براہِ راست
mainمیں کمٹ نہ کریں - کبھی بھی
mainیاrelease/*برانچز پرgit push --forceاستعمال نہ کریں - Husky ہُکس (
--no-verify) کو کبھی نظرانداز نہ کریں - راز، اسناد، یا
.envفائلیں کبھی کمٹ نہ کریں - کوریج لازماً ≥60/60/60/60 (اسٹیٹمنٹس/لائنز/فنکشنز/برانچز) برقرار رہنی چاہیے
src/،open-sse/،electron/، یاbin/میں پروڈکشن کوڈ تبدیل کرتے وقت ہمیشہ ٹیسٹس شامل یا اپ ڈیٹ کریں
خودکار سنک جانچ
PR کھولنے سے پہلے دستاویزات کا سنک گارڈ مقامی طور پر چلائیں:
npm run check:docs-sync
CI بھی یہ جانچ .github/workflows/ci.yml (لنٹ جاب) میں چلاتا ہے۔