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
47 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 · 🇲🇾 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
शेवटचे अद्यतन: 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 विश्वसनीय प्रकाशन (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 → package omniroute → Settings → Trusted
Publisher → GitHub: owner diegosouzapw, repo OmniRoute, workflow 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— stage id शोधा (तो वर्कफ्लो सारांशातही दाखवला जातो).- टप्प्यात ठेवलेल्या बाइट्सची पडताळणी करा (शिफारस केलेले):
npm stage download <id>, त्यानंतर डाउनलोड केलेला tarball तात्पुरत्या prefix मध्ये इन्स्टॉल करून बूट करा (npm run check:pack-bootCI मध्ये त्याच pack→install→boot निकालाचे स्वयंचलन करते). npm stage approve <id>— 2FA प्रॉम्प्ट म्हणजेच प्रकाशन.npm stage reject <id>ते काढून टाकते.- प्रकाशनानंतरचे सुरक्षा-जाळे: प्रकाशनानंतरचा पडताळक (v3.8.49 योजनेतील WS1.4) सार्वजनिक रजिस्ट्रीमधून प्रकाशित आवृत्ती स्वच्छ कंटेनरमध्ये इन्स्टॉल करून बूट करतो.
आपत्कालीन पर्याय: publish_mode=direct सह workflow_dispatch वापरल्यास जुनी
तात्काळ npm publish प्रक्रिया पुनर्स्थापित होते (staging मध्येच बिघाड झाल्यासच वापरा; कारण नोंदवा).
एकदाच करायचे मजबुतीकरण (मालक, npmjs.com): omniroute साठी Trusted Publisher
फक्त-stage मोडमध्ये संरचित करा, जेणेकरून लीक झालेले दीर्घकालीन टोकन कुठूनही थेट npm publish
करू शकणार नाही — CI केवळ stage करू शकते; फक्त मालकाचे 2FA प्रकाशन करू शकते.
दोषपूर्ण आर्टिफॅक्टसाठी कार्यपद्धती (अपरिवर्तित): डीफॉल्ट तात्काळ कृती म्हणून 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 पुढे सरकलेले असावे. प्रकाशन नोंदींमध्ये फक्त git वर
अस्तित्वात असलेल्या दुरुस्त्यांचा उल्लेख असताना :latest ला जुन्या बिल्डवर ठेवू नका. Compose
quickstarts :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). लक्ष्य: ~33min ऐवजी ≤15min मध्ये हिरवा निकाल.
प्रवेश धोरण — चारही अटी आवश्यक (Chromium/VS Code/Node आपत्कालीन लेन्सवर आधारित):
- तीव्रता: उत्पादन प्रणाली बंद पडली आहे — प्रकाशित artifact सुरू होताना क्रॅश होते / एखादी सुरक्षा दुरुस्ती / रिलीजचा प्रत्येक वापरकर्ता प्रभावित झाला आहे. "महत्त्वाचे" म्हणजे "बंद पडलेले" नव्हे.
- अधिकार: फक्त repository मालकच
hotfixलेबल लावतो. ते लेबल म्हणजेच मंजुरी — campaign PR वर ते स्वतःहून कधीही वापरू नका. - पुरावा: PR body मध्ये मागील पूर्णपणे हिरव्या heavy run ची लिंक (वगळलेले jobs ज्या suite चे पुन्हा प्रमाणीकरण केले असते) आणि दुरुस्तीची स्वतःची आधी अपयशी व नंतर यशस्वी झालेली test दिली आहे.
- व्याप्ती: फक्त cherry-pick — किमान आवश्यक दुरुस्ती, कोणतेही refactors नाहीत, असंबंधित बदल नाहीत.
वगळलेल्या coverage/ratchet पृष्ठभागाचे पुढील पूर्ण run द्वारे
release branch वर पुन्हा प्रमाणीकरण केले जाते (सतत release-green) — ही lane फक्त प्रतीक्षा वगळते, प्रमाणीकरण कधीही नाही.
केवळ tests मधील diffs (tests/ अंतर्गत सर्व files, tests/e2e/ अंतर्गत एकही नाही) कोणत्याही
लेबलशिवाय E2E मॅट्रिक्स आपोआप वगळतात.
तपशीलवार तपासणीसूची
रिलीजपूर्व
- या रिलीजसाठी लक्ष्यित सर्व PRs
release/vX.Y.0मध्ये merge झाले आहेत - या आवृत्तीसाठी सर्व खुले Linear/issue items बंद केले आहेत किंवा पुढील milestone वर हलवले आहेत
release/vX.Y.0branch वरील CI हिरवा आहे- कोडमध्ये
TODO(release)markers नाहीत:grep -r "TODO(release)" src/ open-sse/ - Docker base image अद्ययावत आहे (सध्या
node:24.15.0-trixie-slim)
आवृत्ती आणि बदलनोंद
/version-bump-cc <patch|minor|major>चालवा (Claude Code skill)package.json,electron/package.jsonची आवृत्ती वाढवते- मागील tag पासूनच्या git commits वरून
CHANGELOG.mdपुन्हा तयार करते - README.md badges अद्ययावत करते
- CHANGELOG.md चे स्वतः पुनरावलोकन करा आणि आवश्यक असल्यास commit messages स्वच्छ करा
CHANGELOG.mdमधील नवीनतम semver विभागpackage.jsonआवृत्तीशी जुळतो याची खात्री करा- आगामी कामासाठी
## [Unreleased]हा बदलनोंदीतील पहिला विभाग म्हणून ठेवा docs/openapi.yamlअद्ययावत करा →info.versionहेpackage.jsonआवृत्तीशी जुळले पाहिजे
कोड गुणवत्ता
npm run lint— 0 errors (warnings आधीपासून अस्तित्वात आहेत)npm run typecheck:core— स्वच्छnpm run typecheck:noimplicit:core— स्वच्छ (strict)npm run check:cycles— कोणतीही circular deps नाहीतnpm run check:any-budget:t11— budget च्या मर्यादेत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— 60/60/60/60 gate पूर्ण (statements/lines/functions/branches)npm run test:integration— यशस्वी (बदल DB / handlers शी संबंधित असल्यास)npm run test:combo:matrix— यशस्वी (combo strategy matrix: सर्व 19 public routing strategies चे selection decisions निर्धारक पद्धतीने सिद्ध करते; combo routing, strategy resolution किंवा fallback logic मध्ये बदल करताना चालवा)RUN_COMBO_LIVE=1 npm run test:combo:live— ऐच्छिक/मॅन्युअल (gate केलेली real-upstream smoke test; VPSroot@192.168.0.15वरून read-only DB snapshot घेते; वास्तविक providers वापरते, credits खर्च करते; CI मध्ये कधीही चालत नाही; gate नसल्यास व्यवस्थितपणे वगळली जाते)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 वापरून त्याला वगळू नका.
पारंपरिक 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-sync0 सह समाप्त होते — कोड ↔.env.example↔docs/reference/ENVIRONMENT.mdपर्यावरण करार अबाधित आहेnpm run check:doc-links0 सह समाप्त होते — पुनर्रचनेनंतर कोणतेही अंतर्गत markdown संदर्भ तुटलेले नाहीत- स्टोरेज/रनटाइममधील तफावतींसाठी
docs/architecture/ARCHITECTURE.mdचे पुनरावलोकन केले - पर्यावरण चल आणि कार्यान्वयनातील तफावतींसाठी
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:check0 सह समाप्त होते — भाषांतर स्थिती (.i18n-state.json) स्रोत दस्तऐवजांशी समक्रमित आहे (कठोर मोडमध्ये तफावत असलेले स्रोत नाहीत; शेवटच्या क्षणी दस्तऐवजांमध्ये केलेल्या किरकोळ सुधारणांसाठी इशारा मोडमधील सूचना स्वीकार्य आहे, परंतु टॅग करण्यापूर्वी मूल्य 0 असावे)npm run i18n:check-ui-coverage0 सह समाप्त होते — प्रत्येक UI लोकेलची व्याप्ती किमान 80% मर्यादेइतकी किंवा त्यापेक्षा अधिक आहेnpm run i18n:sync-ui:dryसर्व 42 लोकेलमध्ये 0 गहाळ की नोंदवते- स्रोत इंग्रजी दस्तऐवज बदलले असल्यास, टॅग करण्यापूर्वी
npm run i18n:runचालवा (.envमध्येOMNIROUTE_TRANSLATION_API_KEYआवश्यक आहे) - भाषांतरातील योगदान किरकोळ असल्यास पुढील प्रकाशनापर्यंत पुढे ढकलता येते (CHANGELOG मध्ये नोंद ठेवा)
डेटाबेस स्थलांतरे
src/lib/db/migrations/मध्ये नवीन फाइल्स असल्यास:- प्रत्येक स्थलांतर आयडेम्पोटंट आहे (
CREATE TABLE IF NOT EXISTS, इत्यादी) - स्थलांतरे व्यवहारांमध्ये गुंडाळलेली आहेत
- योग्य क्रमांक दिलेले आहेत (क्रमात कोणतीही पोकळी नाही)
- प्रत्येक स्थलांतर आयडेम्पोटंट आहे (
- नवीन स्थापनेवर चाचणी करा:
~/.omniroute/omniroute.dbहटवा आणिnpm run devचालवा - विद्यमान स्थापनेवर चाचणी करा: DB चा बॅकअप घ्या, स्थलांतर चालवा आणि स्कीमा सत्यापित करा
- स्थलांतराने तक्ते पुन्हा लिहिल्यास WAL फाइल्स (
-wal,-shm) योग्यरीत्या हाताळल्या आहेत
प्रदाता कॅटलॉग (Zod-द्वारे सत्यापित)
- लोड होताना
src/shared/constants/providers.tsमधील Zod स्कीमा वैध आहे- सर्व प्रदात्यांकडे आवश्यक फील्ड आहेत (
id,label,kind, इत्यादी) - नवीन मोफत प्रदात्यांसाठी
freeNoteदिले आहे - OAuth प्रदात्यांचे
oauthConfig,src/lib/oauth/constants/oauth.tsमध्ये नोंदणीकृत आहे
- सर्व प्रदात्यांकडे आवश्यक फील्ड आहेत (
- नवीन प्रदाता जोडल्यास:
open-sse/executors/मध्ये संबंधित एक्झिक्युटर आहे - स्वरूप OpenAI नसल्यास:
open-sse/translator/मध्ये भाषांतरक आहे - मॉडेल्स
open-sse/config/providerRegistry.tsमध्ये नोंदणीकृत आहेत tests/unit/मधील युनिट चाचण्या प्रदाता वर्गीकरण आणि राउटिंग व्यापतात
डेस्कटॉप (Electron)
electron/ बदलले असल्यास:
npm run electron:smoke:packagedयशस्वी होते:win,:mac,:linuxयांपैकी किमान एकासाठी बिल्डची चाचणी केली- कोड साइनिंग प्रमाणपत्रांची मुदत संपलेली नाही (साइनिंग करत असल्यास)
electron/package.jsonमधील आवृत्ती रूटpackage.jsonशी जुळतेstableवर प्रकाशित करत असल्यास स्वयं-अद्यतन चॅनेल पॉइंटर अद्ययावत केला
बिल्ड मांडणी
रेपॉझिटरी तीन स्वतंत्र आउटपुट डिरेक्टरी वापरते — त्यांची कधीही गल्लत करू नका:
| डिरेक्टरी | उद्देश | ट्रॅक केली आहे? |
|---|---|---|
src/ |
अनुप्रयोग स्रोत (TypeScript / TSX) | होय |
.build/ |
बिल्ड मध्यवर्ती फाइल्स — next build आउटपुट (distDir) |
नाही (gitignored) |
dist/ |
वितरित करण्यायोग्य npm बंडल — assembleStandalone द्वारे एकत्रित |
नाही (gitignored) |
ऑपरेटर नोंद: रिमोट VPS इमेज डिरेक्टरी
/usr/lib/node_modules/omniroute/app/हीच राहते. फक्त रेपॉझिटरीमधील बिल्ड आउटपुट बदलले (app/→dist/). उपयोजन कौशल्येdist/मधील सामग्री रिमोटapp/डिरेक्टरीमध्ये rsync करतात — VPS पाथमध्ये कोणतेही बदल आवश्यक नाहीत.
एकल-बिल्ड प्रवाह:
npm run build:release
└─ rm -rf .build dist (स्वच्छता)
└─ next build → .build/next/ (मध्यवर्ती फाइल्स)
└─ assembleStandalone (standalone + static + public + natives यांची प्रत dist/ मध्ये बनवते)
└─ writes dist/BUILD_SHA (HEAD प्रहरी)
उपयोजनासाठी npm run build चालवल्यानंतर स्वतंत्रपणे npm run build:cli चालवू नका — त्याऐवजी
npm run build:release वापरा, जे एका कमांडमध्ये स्वच्छ पुनर्बिल्ड + प्रहरी तयार करते.
आर्टिफॅक्ट सत्यापन
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 कौशल्य) चालवा:vX.Y.Zटॅग तयार करते- टॅग आणि शाखा पुश करते
- बदलनोंद मजकुरासह GitHub Release उघडते
- Electron इंस्टॉलर जोडते (बिल्ड केले असल्यास)
- किंवा व्यक्तिचलितपणे:
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
उपयोजन
उपयोजन कौशल्ये हलका rsync प्रवाह वापरतात — npm pack नाही, npm i -g नाही:
- लक्ष्याशी जुळणारे उपयोजन कौशल्य वापरा:
/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प्रत्यक्ष आहे (मुख्य चेकआउट किंवाnpm ciचालवलेले worktree — सिमलिंक केलेले worktree नाही) - उपयोजित इन्स्टन्सची स्मोक चाचणी करा:
/dashboard/healthउघडा → आवृत्ती स्ट्रिंग प्रकाशनाशी जुळते हे तपासा- ज्ञात प्रदात्याविरुद्ध
/v1/chat/completionsविनंती चालवा /api/monitoring/healthहेCLOSEDसर्किट ब्रेकर्स परत करते याची खात्री करा- MCP ट्रान्सपोर्ट्स प्रतिसाद देतात याची खात्री करा (
/mcpHTTP,/mcp-sseSSE)
प्रकाशनानंतर
/capture-release-evidences-ccचालवा (Claude Code कौशल्य)- नवीन वैशिष्ट्यांचे WebP स्क्रीनशॉट/रेकॉर्डिंग्ज कॅप्चर करते
- रिलीझ नोट्स / ब्लॉग पोस्टला संलग्न करते
- रिलीझ घोषणेसह GitHub Discussions / Discord अद्ययावत करा
- पुढील आवृत्तीसाठी माइलस्टोन उघडा
- गंभीर असल्यास: चर्चेला पिन करा किंवा अॅपमधील बॅनरसाठी
news.jsonमध्ये पोस्ट करा
Radar सार्वजनिक-लाँच गेट
Radar घोषणा हेतुपुरस्सर active: false सह कमिट केली आहे. खालील प्रत्येक बाबीचा पुरावा मिळाल्यानंतरच अॅक्टिव्हेशन हा स्वतंत्र
बदल असेल:
- सर्व स्टॅक केलेले Radar PRs मर्ज झाले आहेत आणि रिलीझ-टिप CI यशस्वी आहे
RADAR_ENABLEDडीफॉल्टनुसार अजूनही बंद ठेवून OSS Radar रूट्स डिप्लॉय करा आणि त्यांची स्मोक चाचणी करा- नामनिर्दिष्ट 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 s प्रतीक्षा करा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 min पेक्षा कमी वेळेतinstalledVersionसह 200 परत केले पाहिजेPOST /api/services/9router/startने 30 s पेक्षा कमी वेळेत 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 min पेक्षा कमी वेळेत 200 परत केले पाहिजेPOST /api/services/cliproxy/startने 30 s पेक्षा कमी वेळेत 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 वर बूट होते (~/.omniroute/runtime/मध्ये systray2 इंस्टॉल केलेले)omniroute --trayLinux वर बूट होते (DISPLAY आवश्यक; ते सेट नसल्यास सुयोग्य त्रुटी)omniroute --trayWindows वर बूट होते (PowerShell NotifyIcon, कोणतीही अतिरिक्त बायनरी नाही)omniroute config tray enableऑटोस्टार्ट एंट्री तयार करते; disable ती काढून टाकतेnpm install -g omniroute@<this-version>घातक एक्झिटशिवाय postinstall चालवते- अपडेट पाथ पर्यायी डिपेंडन्सीज कायम ठेवतो:
omniroute update --applyआणि ऑटो-अपडेटरnpm install -g … --include=optionalचालवतात, जेणेकरूनoptionalDependencies(better-sqlite3, keytar, tls-client आणि llmlingua SLM स्टॅक:@atjsh/llmlingua-2@2.0.5,js-tiktoken) अपडेटनंतरही टिकून राहतात. ultramodelPathSLM टियरला tinybert मॉडेलचीही आवश्यकता असते, जे प्रथम वापराच्या वेळी${DATA_DIR}/models/llmlinguaयेथे स्वयंचलितपणे डाउनलोड होते. त्यानंतर Postinstall (scripts/build/colocateOptionals.mjs) SLM ची पर्यायी क्लोजरdist/node_modulesमध्ये एकत्र ठेवते, ज्यामुळे वर्कर@huggingface/transformers^4.2.0 चे एकच इंस्टन्स रिझॉल्व्ह करतो — स्टँडअलोन ट्रेस केवळ transformers बंडल करतो, डायनॅमिकली इम्पोर्ट केलेले पर्यायी घटक नाही; त्यामुळे याशिवाय वर्कर रूटच्या transformers विरुद्ध llmlingua-2 लोड करेल आणि SLM टियर कोणतीही सूचना न देता fail-open होईल. 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वर फॉलबॅक होते- Smart MCP फिल्टर वास्तविक
playwright-mcp browser_snapshotआउटपुट कॉम्प्रेस करते (≥50% घट) - सर्व 10
skills/omniroute*/SKILL.mdफाइल्स raw GitHub URL द्वारे सार्वजनिकरीत्या मिळवता येतात - नवीन सेटअपवर ऑनबोर्डिंग विझार्ड "How It Works" टियर टूर स्टेप दाखवतो
- होम डॅशबोर्ड टियर कव्हरेज विजेट कॉन्फिगर केलेल्या/सक्रिय संख्या दाखवते
रोलबॅक
रिलीजमध्ये गंभीर समस्या असल्यास:
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 उघडण्यापूर्वी docs sync guard स्थानिकरित्या चालवा:
npm run check:docs-sync
CI देखील ही तपासणी .github/workflows/ci.yml (lint जॉब) मध्ये चालवते.