Files
OmniRoute/docs/i18n/ur/docs/ops/RELEASE_CHECKLIST.md
Diego Rodrigues de Sa e Souza b637350680 fix(docs): re-sync the 65 documentation mirror sets; section-level docs pipeline; drift gate blocking (#13940)
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
2026-09-17 02:55:31 -03:00

37 KiB
Raw Blame History

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 گیٹ اب ثبوت سے پہلے نہیں بلکہ اس کے بعد آتا ہے۔

ورک فلو گرین ہونے کے بعد مالک کا فلو:

  1. npm stage list omniroute — اسٹیج id تلاش کریں (یہ ورک فلو کے خلاصے میں بھی دکھائی جاتی ہے)۔
  2. مرحلہ وار محفوظ کی گئی بائٹس کی تصدیق کریں (تجویز کردہ): npm stage download <id>، پھر ڈاؤن لوڈ کردہ tarball کو عارضی prefix میں انسٹال کرکے بوٹ کریں (npm run check:pack-boot، CI میں اسی pack→install→boot فیصلے کو خودکار بناتا ہے)۔
  3. npm stage approve <id> — 2FA پرامپٹ ہی اشاعت ہے۔ npm stage reject <id> اسے مسترد کر دیتا ہے۔
  4. اشاعت کے بعد حفاظتی جال: اشاعت کے بعد کا 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 کی ہنگامی لینز کی طرز پر):

  1. شدت: پروڈکشن خراب ہے — شائع شدہ artifact بوٹ ہوتے وقت کریش کرتا ہے / کوئی سیکیورٹی اصلاح درکار ہے / ریلیز کا ہر صارف متاثر ہے۔ "اہم" کا مطلب "خراب" نہیں ہے۔
  2. اختیار: صرف repository کا مالک hotfix لیبل لگاتا ہے۔ لیبل ہی منظوری ہے — کسی campaign PR پر اسے کبھی خود سے استعمال نہ کریں۔
  3. ثبوت: PR کی تفصیل میں پچھلی مکمل طور پر سبز heavy run کا لنک شامل ہو (وہ suite جس کی توثیق چھوڑے گئے jobs دوبارہ کرتے)، نیز اصلاح کا اپنا پہلے ناکام اور پھر کامیاب ہونے والا test۔
  4. دائرۂ کار: صرف 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.0 branch پر 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؛ VPS root@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 .15 server کے خلاف 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-unit job میں شامل ہے)۔
    • release branches کو push کرنے سے پہلے npm run test:unit دستی طور پر چلائیں۔

اگر کوئی 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.exampledocs/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 میں لپٹی ہوئی ہوں
    • درست طور پر نمبر شدہ ہوں (ترتیب میں کوئی خلا نہ ہو)
  • تازہ انسٹالیشن پر ٹیسٹ کریں: ~/.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 میں رجسٹرڈ ہو
  • اگر نیا فراہم کنندہ شامل کیا گیا ہے: 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 HEAD
  • npm 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/completions request چلائیں
    • تصدیق کریں کہ /api/monitoring/health، CLOSED circuit breakers واپس کرتا ہے
    • تصدیق کریں کہ MCP transports جواب دیتے ہیں (/mcp HTTP، /mcp-sse SSE)

ریلیز کے بعد

  • /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.json ID کو فعال کریں
  • تصدیق کریں کہ 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:port iframe نہیں)
  • 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 --tray macOS پر بوٹ ہوتا ہے (systray2 کو ~/.omniroute/runtime/ میں انسٹال کیا گیا ہو)
  • omniroute --tray Linux پر بوٹ ہوتا ہے (DISPLAY درکار ہے؛ سیٹ نہ ہونے پر مناسب خرابی)
  • omniroute --tray Windows پر بوٹ ہوتا ہے (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) اپ ڈیٹ کے بعد بھی برقرار رہیں۔ الٹرا modelPath SLM درجے کو 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 کے ذریعے عوامی طور پر قابلِ رسائی ہیں
  • تازہ سیٹ اپ پر آن بورڈنگ وزارڈ "یہ کیسے کام کرتا ہے" درجے کے دورے کا مرحلہ دکھاتا ہے
  • ہوم ڈیش بورڈ کا درجے کی کوریج والا ویجٹ کنفیگر شدہ/فعال تعداد دکھاتا ہے

رول بیک

اگر ریلیز میں کوئی سنگین مسئلہ ہو:

  1. gh release edit vX.Y.Z --prerelease (اسے تازہ ترین ریلیز نہ ہونے کے طور پر نشان زد کرتا ہے)
  2. git tag -d vX.Y.Z && git push --delete origin vX.Y.Z (صرف اس صورت میں جب صارفین نے اسے ابھی تک اختیار نہ کیا ہو)
  3. یا: release/vX.Y.0 پر ہاٹ فکس → پیچ ریلیز vX.Y.(Z+1)
  4. 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 (لنٹ جاب) میں چلاتا ہے۔