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
51 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 · 🇹🇭 th · 🇹🇷 tr · 🇺🇦 uk-UA · 🇵🇰 ur · 🇺🇿 uz · 🇻🇳 vi · 🇳🇬 yo · 🇨🇳 zh-CN · 🇹🇼 zh-TW
చివరిగా నవీకరించబడింది: 2026-08-28 — v3.8.51 ఆటోమేషన్ కోసం Claude Code నైపుణ్యాలను ఉపయోగించే క్రమబద్ధీకరించిన విడుదల ప్రక్రియ.
విడుదలల మధ్య queue/branchను greenగా ఉంచండి: RELEASE_GREEN.md చూడండి (
/green-prsకుటుంబం +npm run check:release-green+/babysit+ nightly). దీన్ని క్రమానుగతంగా — ముఖ్యంగా ఈ checklistకు ముందు — అమలు చేయడం వల్ల release PR greenగా ప్రారంభమవుతుంది.
సంక్షిప్తంగా
# 1. వెర్షన్ను పెంచి + CHANGELOGను రూపొందించండి (నైపుణ్యం)
/version-bump-cc patch # లేదా minor/major
# 2. నాణ్యతా గేట్ను స్థానికంగా అమలు చేయండి
npm run check # lint + పరీక్షలు
npm run test:coverage # పూర్తి coverage గేట్ (60/60/60/60)
# 3. Build చేసి & smoke పరీక్షించండి
npm run build
npm run test:e2e # ఐచ్ఛికం, కానీ సిఫార్సు చేయబడింది
# 4. విడుదలను రూపొందించండి (నైపుణ్యం)
/generate-release-cc
# 5. Deploy చేయండి (నైపుణ్యం)
/deploy-vps-both-cc # లేదా akamai-cc / local-cc
# 6. విడుదల ఆధారాలను సేకరించండి (నైపుణ్యం)
/capture-release-evidences-cc
npm Trusted Publishing (v3.8.51 నుండి డిఫాల్ట్) — అభ్యర్థనపై staged, fallbackగా direct
npm-publish.yml డిఫాల్ట్గా npm Trusted Publishing (OIDC) ద్వారా publish చేస్తుంది:
stage-npm job (github-hosted) ఆ run కోసం GitHub యొక్క id-tokenను స్వల్పకాలిక npm
credentialగా మార్పిడి చేస్తుంది — repository secretsలో దీర్ఘకాలిక npm token ఉండదు, 2FA prompt ఉండదు, provenance జోడించబడుతుంది.
2FAను దాటవేసే tokenలు విరమించబడుతున్నందున, npm ఇప్పుడు అనుమతించే bypass ఇదే;
WS1.3 హామీని కొనసాగిస్తూనే (లీకైన token ఒక్కటే publish చేయలేదు — అసలు token ఏదీ లేదు)
ఇది v3.8.48 వరకు projectలో ఉన్న పూర్తిగా automatic flowను పునరుద్ధరిస్తుంది.
ఒక్కసారి చేయాల్సిన setup (owner): npmjs.com → package omniroute → Settings → Trusted
Publisher → GitHub: owner diegosouzapw, repo OmniRoute, workflow npm-publish.yml
(environment: ఏదీ లేదు). అది ఏర్పాటయ్యే వరకు automatic step ENEEDAUTHతో విఫలమవుతుంది:
publish_mode=stagedతో (క్రింద) లేదా directతో మళ్లీ dispatch చేయండి.
Staged publishing (అభ్యర్థనపై — publish_mode=staged)
npm-publish workflow ఇకపై నేరుగా publish చేయదు: అది packed tarballను boot
చేసి (check:pack-boot), ఆపై npm stage publishను అమలు చేస్తుంది — అవే ఖచ్చితమైన bytes registryలో
నిల్వ చేయబడతాయి, owner ఆమోదించే వరకు install చేయడం సాధ్యం కాదు. Human 2FA gate
proofకు ముందు కాకుండా, దాని తర్వాతికి మార్చబడింది.
Workflow green అయిన తర్వాత owner flow:
npm stage list omniroute— stage idను కనుగొనండి (అది workflow summaryలో కూడా ముద్రించబడుతుంది).- Staged bytesను ధృవీకరించండి (సిఫార్సు చేయబడింది):
npm stage download <id>, ఆపై download చేసిన tarballను temp prefixలో install చేసి boot చేయండి (npm run check:pack-bootఅదే pack→install→boot verdictను CIలో automate చేస్తుంది). npm stage approve <id>— 2FA prompt రావడమే publish.npm stage reject <id>దాన్ని తొలగిస్తుంది.- Post-publish భద్రతా వలయం: post-publish verifier (v3.8.49 planలోని WS1.4) public registry నుండి published versionను clean containerలో install చేసి boot చేస్తుంది.
అత్యవసర fallback: publish_mode=directతో workflow_dispatch legacy immediate
npm publishను పునరుద్ధరిస్తుంది (staging స్వయంగా తప్పుగా ప్రవర్తించినప్పుడు మాత్రమే ఉపయోగించండి; కారణాన్ని నమోదు చేయండి).
ఒక్కసారి చేయాల్సిన hardening (owner, npmjs.com): omniroute కోసం Trusted Publisherను
stage-only modeలో configure చేయండి, తద్వారా లీకైన long-lived token ఎక్కడి నుంచైనా నేరుగా npm publish
చేయలేదు — CI stage మాత్రమే చేయగలదు; owner యొక్క 2FA మాత్రమే విడుదల చేస్తుంది.
Broken-artifact playbook (మార్పు లేదు): డిఫాల్ట్ ప్రతిచర్యగా npm deprecate omniroute@<bad> "<reason> — use <fixed>"
ఉపయోగించండి (నిమిషాల్లో పూర్తవుతుంది, తిరిగి మార్చవచ్చు); 72h/no-dependents windowలో మాత్రమే npm unpublish
చేయండి, దాన్ని ఎప్పుడూ మొదటి చర్యగా చేయవద్దు. Docker: version tagను ఎప్పుడూ తిరిగి వ్రాయవద్దు — rollback అంటే
latestను చివరి మంచి digestకు మళ్లీ సూచించేలా చేయడం.
Docker Hub latest (ప్రతి stable SemVer publishకు తప్పనిసరి):
docker-publish workflow తప్పనిసరిగా X.Y.Z రెండింటినీ మరియు,
should-promote-latest.sh ఇది అత్యధిక stable SemVer అని నిర్ధారించినప్పుడు, :latestను
అదే digestతో tag చేయాలి. Job తర్వాత: Hub latest digest కొత్త
SemVer digestకు సమానంగా ఉండాలి మరియు last_updated మారి ఉండాలి. Release notesలో gitలో మాత్రమే ఉన్న
పరిష్కారాల గురించి పేర్కొంటున్నప్పుడు, :latestను పాత buildపై ఉంచవద్దు.
Compose quickstartలు :latestను ఉపయోగిస్తాయి; GitOps మాత్రం X.Y.Zకు pin చేస్తూనే ఉండాలి.
Docker release channels మరియు #10317 చూడండి.
హాట్ఫిక్స్ ఫాస్ట్-లేన్ (లేబుల్ hotfix)
hotfix లేబుల్ ఉన్న PR భారీ CI మ్యాట్రిక్స్ను (9-షార్డ్ E2E, కవరేజ్ రాచెట్,
క్వాలిటీ-గేట్, క్వాలిటీ-ఎక్స్టెండెడ్) దాటవేసి, వేగవంతమైన, అధిక-సిగ్నల్ గేట్లను కొనసాగిస్తుంది: బిల్డ్,
యూనిట్ షార్డ్లు, ఇంటిగ్రేషన్, vitest, lint/typecheck, docs-sync, check:pack-artifact
మరియు టార్బాల్ బూట్-స్మోక్ (check:pack-boot). లక్ష్యం: ~33నిమిషాలకు బదులుగా ≤15నిమిషాల్లో గ్రీన్.
ప్రవేశ విధానం — నాలుగూ తప్పనిసరి (Chromium/VS Code/Node అత్యవసర లేన్ల ఆధారంగా రూపొందించబడింది):
- తీవ్రత: ప్రొడక్షన్ పనిచేయడం లేదు — ప్రచురించిన ఆర్టిఫాక్ట్ బూట్ సమయంలో క్రాష్ అవుతుంది / ఒక భద్రతా పరిష్కారం / విడుదలలోని ప్రతి వినియోగదారు ప్రభావితమవుతున్నారు. "ముఖ్యమైనది" అంటే "పనిచేయడం లేదు" అని కాదు.
- అధికారం: రిపోజిటరీ యజమాని మాత్రమే
hotfixలేబుల్ను వర్తింపజేస్తారు. ఆ లేబులే ఆమోదం — క్యాంపెయిన్ PRలో ఎప్పుడూ స్వయంగా ఉపయోగించవద్దు. - సాక్ష్యం: PR బాడీ గతంలో పూర్తిగా గ్రీన్ అయిన భారీ రన్కు (దాటవేసిన జాబ్లు మళ్లీ ధ్రువీకరించే సూట్) అలాగే పరిష్కారానికి సంబంధించిన మొదట విఫలమై-తర్వాత పాస్ అయిన టెస్ట్కు లింక్ చేస్తుంది.
- పరిధి: cherry-pick మాత్రమే — కనిష్ఠ పరిష్కారం, రీఫ్యాక్టర్లు లేవు, సంబంధంలేని మార్పులు లేవు.
దాటవేసిన కవరేజ్/రాచెట్ ఉపరితలం release బ్రాంచ్లోని తదుపరి పూర్తి రన్ ద్వారా
మళ్లీ ధ్రువీకరించబడుతుంది (నిరంతర release-green) — ఈ లేన్ నిరీక్షణను మాత్రమే దాటవేస్తుంది, ధ్రువీకరణను ఎప్పుడూ కాదు.
టెస్ట్లు-మాత్రమే ఉన్న diffలు (అన్ని ఫైళ్లు tests/ కింద, ఏవీ tests/e2e/ కింద ఉండవు) ఎలాంటి లేబుల్ లేకుండానే E2E
మ్యాట్రిక్స్ను స్వయంచాలకంగా దాటవేస్తాయి.
వివరణాత్మక చెక్లిస్ట్
విడుదలకు ముందు
- ఈ విడుదలకు లక్ష్యంగా ఉన్న అన్ని PRలు
release/vX.Y.0లో విలీనం చేయబడ్డాయి - ఈ వెర్షన్కు సంబంధించిన అన్ని తెరిచి ఉన్న Linear/issue అంశాలు మూసివేయబడ్డాయి లేదా తదుపరి మైలురాయికి తరలించబడ్డాయి
release/vX.Y.0బ్రాంచ్లో CI గ్రీన్గా ఉంది- కోడ్లో
TODO(release)మార్కర్లు లేవు:grep -r "TODO(release)" src/ open-sse/ - Docker బేస్ ఇమేజ్ తాజాగా ఉంది (ప్రస్తుతం
node:24.15.0-trixie-slim)
వెర్షన్ & చేంజ్లాగ్
/version-bump-cc <patch|minor|major>ను అమలు చేయండి (Claude Code స్కిల్)package.json,electron/package.jsonవెర్షన్లను పెంచుతుంది- చివరి ట్యాగ్ తర్వాతి git కమిట్ల నుంచి
CHANGELOG.mdను మళ్లీ రూపొందిస్తుంది - README.md బ్యాడ్జ్లను నవీకరిస్తుంది
- CHANGELOG.mdను మాన్యువల్గా సమీక్షించి, అవసరమైతే కమిట్ సందేశాలను శుభ్రపరచండి
CHANGELOG.mdలోని తాజా semver విభాగంpackage.jsonవెర్షన్కు సమానంగా ఉందని నిర్ధారించండి- రాబోయే పని కోసం
## [Unreleased]ను మొదటి చేంజ్లాగ్ విభాగంగా ఉంచండి docs/openapi.yamlను నవీకరించండి →info.versionతప్పనిసరిగాpackage.jsonవెర్షన్కు సమానంగా ఉండాలి
కోడ్ నాణ్యత
npm run lint— 0 లోపాలు (హెచ్చరికలు ముందే ఉన్నవి)npm run typecheck:core— లోపాలు లేవుnpm run typecheck:noimplicit:core— లోపాలు లేవు (కఠినమైనది)npm run check:cycles— వృత్తాకార డిపెండెన్సీలు లేవుnpm run check:any-budget:t11— బడ్జెట్ పరిధిలో ఉందిnpm run check:route-validation:t06— లోపాలు లేవుnpm run check:node-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 సర్వర్, autoCombo, క్యాష్)npm run test:coverage— 60/60/60/60 గేట్ సంతృప్తి చెందింది (స్టేట్మెంట్లు/లైన్లు/ఫంక్షన్లు/బ్రాంచ్లు)npm run test:integration— పాస్ (మార్పులు DB / హ్యాండ్లర్లను ప్రభావితం చేస్తే)npm run test:combo:matrix— పాస్ (కాంబో వ్యూహ మ్యాట్రిక్స్: మొత్తం 19 పబ్లిక్ రూటింగ్ వ్యూహాల ఎంపిక నిర్ణయాలను నిర్ధారితంగా రుజువు చేస్తుంది; కాంబో రూటింగ్, వ్యూహ పరిష్కారం లేదా ఫాల్బ్యాక్ లాజిక్ను మార్చేటప్పుడు అమలు చేయండి)RUN_COMBO_LIVE=1 npm run test:combo:live— ఐచ్ఛికం/మాన్యువల్ (గేట్ చేయబడిన వాస్తవ-upstream స్మోక్; VPSroot@192.168.0.15నుంచి చదవడానికి-మాత్రమే అనుమతి ఉన్న DB స్నాప్షాట్ను సోర్స్ చేస్తుంది; వాస్తవ ప్రొవైడర్లను హిట్ చేస్తుంది, క్రెడిట్లు ఖర్చవుతాయి; CIలో ఎప్పుడూ అమలు కాదు; గేట్ లేకుంటే సమస్య లేకుండా దాటవేయబడుతుంది)npm run test:combo:live:vps— ఐచ్ఛికం/మాన్యువల్ (Phase-3 VPS లైవ్ స్మోక్: సాధారణ Node ESM ద్వారా లైవ్.15సర్వర్కు వ్యతిరేకంగా 7 HTTP సందర్భాలు;ssh root@192.168.0.15అవసరం;__live_test__*కాంబోలను మాత్రమే సృష్టిస్తుంది/తొలగిస్తుంది; వాస్తవ ప్రొవైడర్లను హిట్ చేస్తుంది; CIలో ఎప్పుడూ అమలు కాదు)npm run test:e2e— పాస్ (UI మార్పులు)npm run test:protocols:e2e— పాస్ (MCP/A2A మార్పులు)npm run test:ecosystem— పాస్
హుక్లు (Husky ద్వారా ధ్రువీకరించబడినవి)
Husky హుక్లు .husky/లో ఉంటాయి మరియు git ఆపరేషన్ల సమయంలో స్వయంచాలకంగా అమలవుతాయి.
- pre-commit:
npx lint-staged + node scripts/check/check-docs-sync.mjs + npm run check:any-budget:t11 - pre-push: వేగవంతమైన నిర్ధారిత గేట్లు —
npm run check:any-budget:t11 && npm run check:tracked-artifacts(2026-06-13న సక్రియం చేయబడింది). ఉద్దేశపూర్వకంగాtest:unitను మినహాయిస్తుంది (నెమ్మదిగా ఉంటుంది; CItest-unitజాబ్ ద్వారా కవర్ చేయబడుతుంది).- విడుదల బ్రాంచ్లను పుష్ చేయడానికి ముందు
npm run test:unitను మాన్యువల్గా అమలు చేయండి.
- విడుదల బ్రాంచ్లను పుష్ చేయడానికి ముందు
హుక్ విఫలమైతే: అంతర్లీన సమస్యను పరిష్కరించండి, --no-verifyతో దాటవేయవద్దు.
సంప్రదాయ కమిట్లు
విడుదలకు సంబంధించిన అన్ని కమిట్లు తప్పనిసరిగా type(scope): subject ఆకృతిని అనుసరించాలి.
చెల్లుబాటు అయ్యే రకాలు: feat, fix, refactor, docs, test, chore, perf, style, ci
చెల్లుబాటు అయ్యే స్కోప్లు: 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 CHANGE: ఫుటర్ను లేదా స్కోప్ తర్వాత !ను జోడించండి (ఉదా. 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.mdenv ఒప్పందం చెక్కుచెదరకుండా ఉందిnpm run check:doc-links0తో నిష్క్రమిస్తుంది — పునర్వ్యవస్థీకరణ తర్వాత విరిగిన అంతర్గత markdown సూచనలు లేవు- నిల్వ/రన్టైమ్ వ్యత్యాసాల కోసం
docs/architecture/ARCHITECTURE.mdసమీక్షించబడింది - env var మరియు కార్యాచరణ వ్యత్యాసాల కోసం
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) మూల డాక్యుమెంట్లతో సమకాలీకరణలో ఉంది (strict modeలో వ్యత్యాసం ఉన్న మూలాలు లేవు; చివరి నిమిషంలో డాక్యుమెంట్ సవరణల కోసం warn-mode సూచన ఆమోదయోగ్యమే, కానీ ట్యాగ్ చేసే ముందు ఇది 0గా ఉండాలి)npm run i18n:check-ui-coverage0తో నిష్క్రమిస్తుంది — ప్రతి UI locale కవరేజ్ కనీస పరిమితి 80% వద్ద లేదా అంతకంటే ఎక్కువగా ఉందిnpm run i18n:sync-ui:dryమొత్తం 42 localeలలో లేని కీలు 0 అని నివేదిస్తుంది- మూల ఆంగ్ల డాక్యుమెంట్లు మారితే, ట్యాగ్ చేసే ముందు
npm run i18n:runఅమలు చేయండి (.envలోOMNIROUTE_TRANSLATION_API_KEYఅవసరం) - అనువాద సహకారాలు స్వల్పమైనవైతే వాటిని తదుపరి విడుదలకు వాయిదా వేయవచ్చు (CHANGELOGలో ట్రాక్ చేయండి)
డేటాబేస్ మైగ్రేషన్లు
src/lib/db/migrations/లో కొత్త ఫైల్లు ఉంటే:- ప్రతి మైగ్రేషన్ idempotentగా ఉంది (
CREATE TABLE IF NOT EXISTS, మొదలైనవి) - మైగ్రేషన్లు transactionలలో చుట్టబడ్డాయి
- సరిగ్గా సంఖ్యలు కేటాయించబడ్డాయి (క్రమంలో ఖాళీలు లేవు)
- ప్రతి మైగ్రేషన్ idempotentగా ఉంది (
- తాజా ఇన్స్టాలేషన్పై పరీక్షించండి:
~/.omniroute/omniroute.dbను తొలగించిnpm run devఅమలు చేయండి - ఇప్పటికే ఉన్న ఇన్స్టాలేషన్పై పరీక్షించండి: DBని బ్యాకప్ చేసి, మైగ్రేషన్ను అమలు చేసి, schemaను ధృవీకరించండి
- మైగ్రేషన్ పట్టికలను తిరిగి వ్రాస్తే WAL ఫైల్లు (
-wal,-shm) సరిగ్గా నిర్వహించబడతాయి
ప్రొవైడర్ కాటలాగ్ (Zod ద్వారా ధృవీకరించబడింది)
- లోడ్ సమయంలో
src/shared/constants/providers.tsZod schema చెల్లుబాటవుతుంది- అన్ని ప్రొవైడర్లకు అవసరమైన ఫీల్డ్లు (
id,label,kind, మొదలైనవి) ఉన్నాయి - కొత్త ఉచిత ప్రొవైడర్ల కోసం
freeNoteఅందించబడింది - OAuth ప్రొవైడర్లకు
src/lib/oauth/constants/oauth.tsలోoauthConfigనమోదు చేయబడింది
- అన్ని ప్రొవైడర్లకు అవసరమైన ఫీల్డ్లు (
- కొత్త ప్రొవైడర్ జోడించబడితే: దానికి సంబంధించిన executor
open-sse/executors/లో ఉంది - OpenAI కాని ఫార్మాట్ అయితే: translator
open-sse/translator/లో ఉంది - మోడల్లు
open-sse/config/providerRegistry.tsలో నమోదు చేయబడ్డాయి tests/unit/లోని unit testలు ప్రొవైడర్ వర్గీకరణ మరియు routingను కవర్ చేస్తాయి
డెస్క్టాప్ (Electron)
electron/ మారితే:
npm run electron:smoke:packagedవిజయవంతమవుతుంది:win,:mac,:linuxలో కనీసం ఒకదాని కోసం buildలు పరీక్షించబడ్డాయి- Code signing సర్టిఫికెట్ల గడువు ముగియలేదు (signing చేస్తే)
electron/package.jsonversion, rootpackage.jsonతో సరిపోలుతుందిstableకు విడుదల చేస్తుంటే auto-update channel pointer నవీకరించబడింది
Build లేఅవుట్
రిపోజిటరీ మూడు విభిన్న output directoryలను ఉపయోగిస్తుంది — వాటిని ఎప్పుడూ కలపవద్దు:
| Directory | ఉద్దేశ్యం | ట్రాక్ చేయబడుతుందా? |
|---|---|---|
src/ |
అప్లికేషన్ మూలం (TypeScript / TSX) | అవును |
.build/ |
Build మధ్యంతర ఫైల్లు — next build output (distDir) |
కాదు (gitignored) |
dist/ |
పంపిణీ చేయగల npm bundle — assembleStandalone ద్వారా సమీకరించబడుతుంది |
కాదు (gitignored) |
ఆపరేటర్ గమనిక: రిమోట్ VPS image directory
/usr/lib/node_modules/omniroute/app/గానే ఉంటుంది. రిపోజిటరీలోని build output మాత్రమే మారింది (app/→dist/). Deploy skillలుdist/లోని కంటెంట్ను రిమోట్app/dirలోకి rsync చేస్తాయి — VPS path మార్పులు అవసరం లేదు.
ఒకే-build ప్రవాహం:
npm run build:release
└─ rm -rf .build dist (శుభ్రపరచడం)
└─ next build → .build/next/ (మధ్యంతర ఫైల్లు)
└─ assembleStandalone (standalone + static + public + nativesను dist/లోకి కాపీ చేస్తుంది)
└─ dist/BUILD_SHAను వ్రాస్తుంది (HEAD sentinel)
Deploy కోసం npm run buildను అమలు చేసి, తర్వాత విడిగా npm run build:cliను అమలు చేయవద్దు — ఒకే commandలో శుభ్రమైన rebuild + sentinelను నిర్వహించే
npm run build:releaseను ఉపయోగించండి.
Artifact ధృవీకరణ
npm run build:releaseవిజయవంతమవుతుంది మరియుdist/BUILD_SHA==git rev-parse --short HEADnpm run check:pack-artifactశుభ్రంగా ఉంది —app.__qa_backup,scripts/scratch,package-lock.jsonలేదా ఇతర స్థానిక అవశేషాలు లేవు- Build తర్వాత
dist/server.jsఉంది
ట్యాగింగ్ & విడుదల
/generate-release-cc(Claude Code skill)ను అమలు చేయండి:vX.Y.Zట్యాగ్ను సృష్టిస్తుంది- ట్యాగ్ మరియు branchను push చేస్తుంది
- changelog bodyతో GitHub Releaseను తెరుస్తుంది
- Electron installerలను జతచేస్తుంది (build చేసి ఉంటే)
- లేదా మాన్యువల్గా:
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 skillలు తేలికపాటి 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— రెండూ
- Deploy చేయడానికి ముందు,
dist/BUILD_SHA==git rev-parse --short HEADఅని నిర్ధారించండి node_modulesవాస్తవంగా ఉన్న చోటే build అమలు కావాలి (ప్రధాన checkout లేదాnpm ciఅమలు చేసిన worktree — symlink చేసిన worktreeలో కాదు)- Deploy చేసిన instanceపై smoke test చేయండి:
/dashboard/healthను తెరవండి → version string విడుదలతో సరిపోలుతుందో తనిఖీ చేయండి- తెలిసిన ప్రొవైడర్కు
/v1/chat/completionsrequestను అమలు చేయండి /api/monitoring/health,CLOSEDcircuit breakerలను తిరిగి ఇస్తుందని ధృవీకరించండి- MCP transportలు స్పందిస్తున్నాయని నిర్ధారించండి (
/mcpHTTP,/mcp-sseSSE)
విడుదల అనంతరం
/capture-release-evidences-ccను అమలు చేయండి (Claude Code నైపుణ్యం)- కొత్త ఫీచర్ల WebP స్క్రీన్షాట్లు/రికార్డింగ్లను సేకరిస్తుంది
- వాటిని విడుదల గమనికలు / బ్లాగ్ పోస్ట్కు జోడిస్తుంది
- విడుదల ప్రకటనతో GitHub Discussions / Discordను నవీకరించండి
- తదుపరి వెర్షన్ కోసం మైలురాయిని తెరవండి
- అత్యవసరమైతే: యాప్లోని బ్యానర్ కోసం చర్చను పిన్ చేయండి లేదా
news.jsonలో పోస్ట్ చేయండి
Radar పబ్లిక్-లాంచ్ గేట్
Radar ప్రకటన ఉద్దేశపూర్వకంగా active: falseతో కమిట్ చేయబడింది. దిగువన ఉన్న ప్రతి అంశానికి ఆధారం సమకూరిన తర్వాత
యాక్టివేషన్ను ప్రత్యేక మార్పుగా చేయాలి:
- స్టాక్ చేసిన అన్ని Radar PRలు విలీనం చేయబడ్డాయని, release-tip 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 సెకన్లు వేచి ఉండండి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 --trayఅనేది macOSలో బూట్ అవుతుంది (~/.omniroute/runtime/లోకి systray2 ఇన్స్టాల్ చేయబడుతుంది)omniroute --trayఅనేది Linuxలో బూట్ అవుతుంది (DISPLAY అవసరం; సెట్ చేయకపోతే సునాయాసమైన దోషం)omniroute --trayఅనేది Windowsలో బూట్ అవుతుంది (PowerShell NotifyIcon, అదనపు బైనరీలు లేవు)omniroute config tray enableఅనేది ఆటోస్టార్ట్ ఎంట్రీని సృష్టిస్తుంది; డిసేబుల్ చేయడం దానిని తొలగిస్తుంది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) అప్డేట్ తర్వాత కూడా నిలిచి ఉంటాయి. అల్ట్రాmodelPathSLM టైర్కు కూడా 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 అవుతుంది. .envలేకుండాomniroute statusపనిచేస్తుంది (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 ద్వారా పబ్లిక్గా పొందగలిగేలా ఉంటాయి - తాజా సెటప్లో ఆన్బోర్డింగ్ విజార్డ్ "ఇది ఎలా పనిచేస్తుంది" టైర్ టూర్ దశను చూపిస్తుంది
- హోమ్ డ్యాష్బోర్డ్ టైర్ కవరేజ్ విడ్జెట్ కాన్ఫిగర్ చేసిన/యాక్టివ్ కౌంట్లను చూపిస్తుంది
రోల్బ్యాక్
రిలీజ్లో తీవ్రమైన సమస్య ఉంటే:
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 job) ఈ తనిఖీని అమలు చేస్తుంది.