# Release Checklist (తెలుగు) 🌐 **Languages:** 🇺🇸 [English](../../../../ops/RELEASE_CHECKLIST.md) · 🇪🇹 [am](../../../am/docs/ops/RELEASE_CHECKLIST.md) · 🇸🇦 [ar](../../../ar/docs/ops/RELEASE_CHECKLIST.md) · 🇦🇿 [az](../../../az/docs/ops/RELEASE_CHECKLIST.md) · 🇧🇬 [bg](../../../bg/docs/ops/RELEASE_CHECKLIST.md) · 🇧🇩 [bn](../../../bn/docs/ops/RELEASE_CHECKLIST.md) · 🇧🇦 [bs](../../../bs/docs/ops/RELEASE_CHECKLIST.md) · 🇨🇿 [cs](../../../cs/docs/ops/RELEASE_CHECKLIST.md) · 🇩🇰 [da](../../../da/docs/ops/RELEASE_CHECKLIST.md) · 🇩🇪 [de](../../../de/docs/ops/RELEASE_CHECKLIST.md) · 🇬🇷 [el](../../../el/docs/ops/RELEASE_CHECKLIST.md) · 🇪🇸 [es](../../../es/docs/ops/RELEASE_CHECKLIST.md) · 🇪🇪 [et](../../../et/docs/ops/RELEASE_CHECKLIST.md) · 🇮🇷 [fa](../../../fa/docs/ops/RELEASE_CHECKLIST.md) · 🇫🇮 [fi](../../../fi/docs/ops/RELEASE_CHECKLIST.md) · 🇫🇷 [fr](../../../fr/docs/ops/RELEASE_CHECKLIST.md) · 🇮🇪 [ga](../../../ga/docs/ops/RELEASE_CHECKLIST.md) · 🇮🇳 [gu](../../../gu/docs/ops/RELEASE_CHECKLIST.md) · 🇳🇬 [ha](../../../ha/docs/ops/RELEASE_CHECKLIST.md) · 🇮🇱 [he](../../../he/docs/ops/RELEASE_CHECKLIST.md) · 🇮🇳 [hi](../../../hi/docs/ops/RELEASE_CHECKLIST.md) · 🇭🇷 [hr](../../../hr/docs/ops/RELEASE_CHECKLIST.md) · 🇭🇺 [hu](../../../hu/docs/ops/RELEASE_CHECKLIST.md) · 🇦🇲 [hy](../../../hy/docs/ops/RELEASE_CHECKLIST.md) · 🇮🇩 [id](../../../id/docs/ops/RELEASE_CHECKLIST.md) · 🇳🇬 [ig](../../../ig/docs/ops/RELEASE_CHECKLIST.md) · 🇮🇹 [it](../../../it/docs/ops/RELEASE_CHECKLIST.md) · 🇯🇵 [ja](../../../ja/docs/ops/RELEASE_CHECKLIST.md) · 🇬🇪 [ka](../../../ka/docs/ops/RELEASE_CHECKLIST.md) · 🇰🇭 [km](../../../km/docs/ops/RELEASE_CHECKLIST.md) · 🇮🇳 [kn](../../../kn/docs/ops/RELEASE_CHECKLIST.md) · 🇰🇷 [ko](../../../ko/docs/ops/RELEASE_CHECKLIST.md) · 🇱🇹 [lt](../../../lt/docs/ops/RELEASE_CHECKLIST.md) · 🇱🇻 [lv](../../../lv/docs/ops/RELEASE_CHECKLIST.md) · 🇮🇳 [ml](../../../ml/docs/ops/RELEASE_CHECKLIST.md) · 🇮🇳 [mr](../../../mr/docs/ops/RELEASE_CHECKLIST.md) · 🇲🇾 [ms](../../../ms/docs/ops/RELEASE_CHECKLIST.md) · 🇲🇹 [mt](../../../mt/docs/ops/RELEASE_CHECKLIST.md) · 🇲🇲 [my](../../../my/docs/ops/RELEASE_CHECKLIST.md) · 🇳🇵 [ne](../../../ne/docs/ops/RELEASE_CHECKLIST.md) · 🇳🇱 [nl](../../../nl/docs/ops/RELEASE_CHECKLIST.md) · 🇳🇴 [no](../../../no/docs/ops/RELEASE_CHECKLIST.md) · 🇮🇳 [or](../../../or/docs/ops/RELEASE_CHECKLIST.md) · 🇮🇳 [pa](../../../pa/docs/ops/RELEASE_CHECKLIST.md) · 🇵🇭 [phi](../../../phi/docs/ops/RELEASE_CHECKLIST.md) · 🇵🇱 [pl](../../../pl/docs/ops/RELEASE_CHECKLIST.md) · 🇵🇹 [pt](../../../pt/docs/ops/RELEASE_CHECKLIST.md) · 🇧🇷 [pt-BR](../../../pt-BR/docs/ops/RELEASE_CHECKLIST.md) · 🇷🇴 [ro](../../../ro/docs/ops/RELEASE_CHECKLIST.md) · 🇷🇺 [ru](../../../ru/docs/ops/RELEASE_CHECKLIST.md) · 🇱🇰 [si](../../../si/docs/ops/RELEASE_CHECKLIST.md) · 🇸🇰 [sk](../../../sk/docs/ops/RELEASE_CHECKLIST.md) · 🇸🇮 [sl](../../../sl/docs/ops/RELEASE_CHECKLIST.md) · 🇷🇸 [sr](../../../sr/docs/ops/RELEASE_CHECKLIST.md) · 🇸🇪 [sv](../../../sv/docs/ops/RELEASE_CHECKLIST.md) · 🇰🇪 [sw](../../../sw/docs/ops/RELEASE_CHECKLIST.md) · 🇮🇳 [ta](../../../ta/docs/ops/RELEASE_CHECKLIST.md) · 🇹🇭 [th](../../../th/docs/ops/RELEASE_CHECKLIST.md) · 🇹🇷 [tr](../../../tr/docs/ops/RELEASE_CHECKLIST.md) · 🇺🇦 [uk-UA](../../../uk-UA/docs/ops/RELEASE_CHECKLIST.md) · 🇵🇰 [ur](../../../ur/docs/ops/RELEASE_CHECKLIST.md) · 🇺🇿 [uz](../../../uz/docs/ops/RELEASE_CHECKLIST.md) · 🇻🇳 [vi](../../../vi/docs/ops/RELEASE_CHECKLIST.md) · 🇳🇬 [yo](../../../yo/docs/ops/RELEASE_CHECKLIST.md) · 🇨🇳 [zh-CN](../../../zh-CN/docs/ops/RELEASE_CHECKLIST.md) · 🇹🇼 [zh-TW](../../../zh-TW/docs/ops/RELEASE_CHECKLIST.md) --- > **చివరిగా నవీకరించబడింది:** 2026-08-28 — v3.8.51 > ఆటోమేషన్ కోసం Claude Code స్కిల్స్ను ఉపయోగించే క్రమబద్ధీకరించిన విడుదల ప్రక్రియ. > > **విడుదలల మధ్య క్యూ/బ్రాంచ్ను గ్రీన్గా ఉంచండి:** [RELEASE_GREEN.md](./RELEASE_GREEN.md) చూడండి > (`/green-prs` కుటుంబం + `npm run check:release-green` + `/babysit` + రాత్రివారీ రన్). దీన్ని > క్రమానుగతంగా — ముఖ్యంగా ఈ చెక్లిస్ట్కు **ముందు** — అమలు చేయడం వల్ల విడుదల PR గ్రీన్గా ప్రారంభమవుతుంది. ## సంక్షిప్తంగా ```bash # 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 `, ఆపై డౌన్లోడ్ చేసిన tarballను తాత్కాలిక prefixలో ఇన్స్టాల్ చేసి బూట్ చేయండి (`npm run check:pack-boot` అదే pack→install→boot తీర్పును CIలో ఆటోమేట్ చేస్తుంది). 3. `npm stage approve ` — 2FA ప్రాంప్టే ప్రచురణ. `npm stage reject ` విస్మరిస్తుంది. 4. ప్రచురణ అనంతర భద్రతా వలయం: ప్రచురణ అనంతర వెరిఫయర్ (v3.8.49 ప్రణాళికలోని WS1.4) పబ్లిక్ రిజిస్ట్రీ నుంచి ప్రచురించిన వెర్షన్ను శుభ్రమైన కంటైనర్లో ఇన్స్టాల్ చేసి బూట్ చేస్తుంది. **అత్యవసర ఫాల్బ్యాక్:** `publish_mode=direct`తో `workflow_dispatch` పాత తక్షణ `npm publish`ను పునరుద్ధరిస్తుంది (స్టేజింగ్లోనే సమస్యలు ఎదురైతే మాత్రమే ఉపయోగించండి; కారణాన్ని నమోదు చేయండి). **ఒకసారి మాత్రమే చేసే హార్డెనింగ్ (యజమాని, npmjs.com):** `omniroute` కోసం Trusted Publisherను stage-only మోడ్లో కాన్ఫిగర్ చేయండి, తద్వారా లీకైన దీర్ఘకాలిక టోకెన్ ఎక్కడి నుంచైనా నేరుగా `npm publish` చేయలేదు — CI స్టేజ్ మాత్రమే చేయగలదు; యజమాని 2FA మాత్రమే విడుదల చేస్తుంది. **దెబ్బతిన్న ఆర్టిఫాక్ట్ ప్లేబుక్ (మార్పులేదు):** డిఫాల్ట్ తక్షణ చర్యగా `npm deprecate omniroute@ " — use "`ను ఉపయోగించండి (నిమిషాల్లో పూర్తవుతుంది, తిరిగి మార్చవచ్చు); 72h/no-dependents పరిమితిలో మాత్రమే `npm unpublish`ను ఉపయోగించండి, ఎప్పుడూ మొదటి చర్యగా ఉపయోగించవద్దు. Docker: వెర్షన్ ట్యాగ్ను ఎప్పుడూ తిరిగి రాయవద్దు — రోల్బ్యాక్ అంటే `latest`ను చివరి మంచి digestకు మళ్లీ సూచించడం. **Docker Hub `latest` (ప్రతి స్థిరమైన SemVer ప్రచురణకు తప్పనిసరి):** `docker-publish` వర్క్ఫ్లో **రెండింటినీ** ట్యాగ్ చేయాలి: `X.Y.Z` మరియు ఇది అత్యధిక స్థిరమైన SemVer అని `should-promote-latest.sh` అంగీకరించినప్పుడు, `:latest`ను **అదే digest**తో ట్యాగ్ చేయాలి. జాబ్ తర్వాత: Hub `latest` digest కొత్త SemVer digestకు సమానంగా ఉండాలి మరియు `last_updated` మారి ఉండాలి. gitలో మాత్రమే ఉన్న పరిష్కారాల గురించి విడుదల గమనికలు పేర్కొంటున్నప్పుడు `:latest`ను పాత బిల్డ్పైనే వదిలేయవద్దు. Compose క్విక్స్టార్ట్లు `:latest`ను ఉపయోగిస్తాయి; GitOps మాత్రం `X.Y.Z`కు పిన్ చేయడాన్ని కొనసాగించాలి. [Docker విడుదల ఛానెల్లు](../guides/DOCKER_GUIDE.md#release-channels) మరియు #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 అత్యవసర లేన్ల ఆధారంగా రూపొందించబడింది):** 1. **తీవ్రత**: ప్రొడక్షన్ పనిచేయడం లేదు — ప్రచురించిన ఆర్టిఫాక్ట్ బూట్ సమయంలో క్రాష్ అవుతుంది / భద్రతా పరిష్కారం / విడుదలలోని ప్రతి వినియోగదారు ప్రభావితమవుతున్నారు. "ముఖ్యమైనది" అంటే "పనిచేయడం లేదు" అని కాదు. 2. **అధికారం**: రిపాజిటరీ యజమాని మాత్రమే `hotfix` లేబుల్ను వర్తింపజేస్తారు. ఆ లేబులే ఆమోదం — campaign PRలో ఎప్పుడూ స్వయంగా వర్తింపజేయవద్దు. 3. **సాక్ష్యం**: PR వివరణ, గతంలో పూర్తిగా గ్రీన్ అయిన భారీ రన్కు (దాటవేసిన జాబ్లు తిరిగి ధ్రువీకరించే సూట్) అలాగే పరిష్కారానికి సంబంధించిన మొదట విఫలమై, తర్వాత పాస్ అయిన టెస్ట్కు లింక్ చేస్తుంది. 4. **పరిధి**: cherry-pick మాత్రమే — కనిష్ఠ పరిష్కారం, refactors వద్దు, సంబంధంలేని మార్పులు వద్దు. దాటవేసిన coverage/ratchet పరిధి, release branchలో తదుపరి పూర్తి రన్ ద్వారా (నిరంతర release-green) తిరిగి ధ్రువీకరించబడుతుంది — ఈ లేన్ నిరీక్షణను మాత్రమే దాటవేస్తుంది, ధ్రువీకరణను ఎన్నటికీ కాదు. టెస్ట్లకు మాత్రమే సంబంధించిన diffs (`tests/` కింద ఉన్న అన్ని ఫైళ్లు, `tests/e2e/` కింద ఏవీ ఉండకూడదు) ఎలాంటి లేబుల్ లేకుండానే E2E మ్యాట్రిక్స్ను స్వయంచాలకంగా దాటవేస్తాయి. ## వివరణాత్మక తనిఖీ జాబితా ### విడుదలకు ముందు - [ ] ఈ విడుదలను లక్ష్యంగా చేసుకున్న అన్ని PRలు `release/vX.Y.0`లో merge చేయబడ్డాయి - [ ] ఈ వెర్షన్కు సంబంధించిన అన్ని తెరిచి ఉన్న Linear/issue అంశాలు మూసివేయబడ్డాయి లేదా తదుపరి milestoneకు తరలించబడ్డాయి - [ ] `release/vX.Y.0` branchలో CI గ్రీన్గా ఉంది - [ ] కోడ్లో `TODO(release)` మార్కర్లు లేవు: `grep -r "TODO(release)" src/ open-sse/` - [ ] Docker base image తాజాగా ఉంది (ప్రస్తుతం `node:24.15.0-trixie-slim`) ### వెర్షన్ & చేంజ్లాగ్ - [ ] `/version-bump-cc `ను రన్ చేయండి (Claude Code skill) - `package.json`, `electron/package.json` వెర్షన్లను పెంచుతుంది - చివరి tag తర్వాతి git commitల నుండి `CHANGELOG.md`ను తిరిగి రూపొందిస్తుంది - README.md badgeలను నవీకరిస్తుంది - [ ] CHANGELOG.mdను మాన్యువల్గా సమీక్షించి, అవసరమైతే commit సందేశాలను సరిచేయండి - [ ] `CHANGELOG.md`లోని తాజా semver విభాగం `package.json` వెర్షన్కు సమానంగా ఉందని నిర్ధారించండి - [ ] రాబోయే పని కోసం `## [Unreleased]`ను మొదటి changelog విభాగంగా ఉంచండి - [ ] `docs/openapi.yaml`ను నవీకరించండి → `info.version` తప్పనిసరిగా `package.json` వెర్షన్కు సమానంగా ఉండాలి ### కోడ్ నాణ్యత - [ ] `npm run lint` — 0 లోపాలు (హెచ్చరికలు ముందే ఉన్నవి) - [ ] `npm run typecheck:core` — సమస్యలు లేవు - [ ] `npm run typecheck:noimplicit:core` — సమస్యలు లేవు (కఠినమైనది) - [ ] `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 గేట్ సంతృప్తి చెందింది (statements/lines/functions/branches) - [ ] `npm run test:integration` — పాస్ (మార్పులు DB / handlersను ప్రభావితం చేస్తే) - [ ] `npm run test:combo:matrix` — పాస్ (combo strategy matrix: మొత్తం 19 public routing strategies ఎంపిక నిర్ణయాలను నిర్ణయాత్మకంగా నిరూపిస్తుంది; combo routing, strategy resolution లేదా fallback logicను మార్చినప్పుడు రన్ చేయండి) - [ ] `RUN_COMBO_LIVE=1 npm run test:combo:live` — **ఐచ్ఛికం/మాన్యువల్** (గేట్ చేయబడిన నిజమైన-upstream smoke; VPS `root@192.168.0.15` నుండి read-only DB snapshotను సోర్స్ చేస్తుంది; నిజమైన providersను ఉపయోగిస్తుంది, credits ఖర్చవుతాయి; CIలో ఎప్పుడూ రన్ కాదు; గేట్ లేకపోతే సమస్య లేకుండా skip అవుతుంది) - [ ] `npm run test:combo:live:vps` — **ఐచ్ఛికం/మాన్యువల్** (Phase-3 VPS live smoke: plain 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 ఆపరేషన్ల సమయంలో స్వయంచాలకంగా రన్ అవుతాయి. - **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`ను మినహాయిస్తుంది (నెమ్మదిగా ఉంటుంది; CI `test-unit` జాబ్ ద్వారా కవర్ అవుతుంది). - release branchలను push చేయడానికి ముందు `npm run test:unit`ను మాన్యువల్గా రన్ చేయండి. hook విఫలమైతే: మూల సమస్యను పరిష్కరించండి, `--no-verify`తో దాటవేయవద్దు. ### సాంప్రదాయ Commitలు విడుదలకు వెళ్లే అన్ని commitలు తప్పనిసరిగా `type(scope): subject` ఫార్మాట్ను అనుసరించాలి. **చెల్లుబాటు అయ్యే typeలు:** `feat`, `fix`, `refactor`, `docs`, `test`, `chore`, `perf`, `style`, `ci` **చెల్లుబాటు అయ్యే scopeలు:** `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 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/.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 localeలలో 0 మిస్సింగ్ కీలను నివేదిస్తుంది - [ ] మూల ఆంగ్ల డాక్యుమెంట్లు మారితే, ట్యాగ్ చేసే ముందు `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 లోడ్ సమయంలో చెల్లుబాటవుతుంది - [ ] అన్ని ప్రొవైడర్లలో అవసరమైన ఫీల్డ్లు (`id`, `label`, `kind`, మొదలైనవి) ఉన్నాయి - [ ] కొత్త ఉచిత ప్రొవైడర్లకు `freeNote` అందించబడింది - [ ] OAuth ప్రొవైడర్ల `oauthConfig`, `src/lib/oauth/constants/oauth.ts`లో నమోదు చేయబడింది - [ ] కొత్త ప్రొవైడర్ జోడించబడితే: దానికి సంబంధించిన executor `open-sse/executors/`లో ఉంది - [ ] OpenAI కాని ఫార్మాట్ అయితే: translator `open-sse/translator/`లో ఉంది - [ ] Models `open-sse/config/providerRegistry.ts`లో నమోదు చేయబడ్డాయి - [ ] `tests/unit/`లోని unit tests ప్రొవైడర్ వర్గీకరణ మరియు రూటింగ్ను కవర్ చేస్తాయి ### డెస్క్టాప్ (Electron) `electron/` మారితే: - [ ] `npm run electron:smoke:packaged` విజయవంతమవుతుంది - [ ] `:win`, `:mac`, `:linux`లలో కనీసం ఒకదాని కోసం builds పరీక్షించబడ్డాయి - [ ] Code signing certificates గడువు ముగియలేదు (signing చేస్తుంటే) - [ ] `electron/package.json` version, root `package.json`తో సరిపోలుతుంది - [ ] `stable`కు విడుదల చేస్తుంటే auto-update channel pointer నవీకరించబడింది ### బిల్డ్ లేఅవుట్ రిపోజిటరీ మూడు వేర్వేరు అవుట్పుట్ డైరెక్టరీలను ఉపయోగిస్తుంది — వాటిని ఎన్నడూ కలపవద్దు: | డైరెక్టరీ | ఉద్దేశ్యం | ట్రాక్ చేయబడుతుందా? | | --------- | ---------------------------------------------------------------------- | ------------------- | | `src/` | అప్లికేషన్ సోర్స్ (TypeScript / TSX) | అవును | | `.build/` | బిల్డ్ మధ్యంతర ఫైళ్లు — `next build` అవుట్పుట్ (`distDir`) | కాదు (gitignored) | | `dist/` | పంపిణీ చేయదగిన npm bundle — `assembleStandalone` ద్వారా సమీకరించబడింది | కాదు (gitignored) | > **ఆపరేటర్ గమనిక:** రిమోట్ VPS image డైరెక్టరీ `/usr/lib/node_modules/omniroute/app/`గానే ఉంటుంది. > **రిపోజిటరీలోని** బిల్డ్ అవుట్పుట్ మాత్రమే మారింది (`app/` → `dist/`). Deploy skills, `dist/` > కంటెంట్లను రిమోట్ `app/` డైరెక్టరీలోకి 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 సూచిక) ``` Deploy కోసం `npm run build`ను అమలు చేసిన తర్వాత విడిగా `npm run build:cli`ను అమలు చేయవద్దు — ఒకే commandలో clean rebuild + sentinelను చేసే `npm run build:release`ను ఉపయోగించండి. ### ఆర్టిఫాక్ట్ ధృవీకరణ - [ ] `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` ఉంది - [ ] ఐచ్ఛిక స్థానిక packaged-runtime smoke: `npm run dev:candidate -- build` తర్వాత `npm run dev:candidate -- validate`, ప్యాక్ చేసిన tarballను ప్రత్యేక `DATA_DIR`పై boot చేసి `/api/health` + `/v1/models`ను తనిఖీ చేస్తుంది ([కాంట్రిబ్యూషన్ గోల్డెన్ పాత్](CONTRIBUTION_GOLDEN_PATH.md#local-candidate-loop) చూడండి) ### ట్యాగింగ్ & విడుదల - [ ] `/generate-release-cc`ను అమలు చేయండి (Claude Code skill): - `vX.Y.Z` ట్యాగ్ను సృష్టిస్తుంది - ట్యాగ్ మరియు branchను push చేస్తుంది - changelog bodyతో GitHub Releaseను తెరుస్తుంది - Electron installersను జతచేస్తుంది (బిల్డ్ చేసి ఉంటే) - [ ] లేదా మాన్యువల్గా: ```bash 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` — రెండూ - [ ] 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 విడుదలతో సరిపోలుతుందో తనిఖీ చేయండి - తెలిసిన providerకు `/v1/chat/completions` requestను అమలు చేయండి - `/api/monitoring/health` `CLOSED` circuit breakersను అందిస్తుందో ధృవీకరించండి - MCP transports స్పందిస్తున్నాయని నిర్ధారించండి (`/mcp` HTTP, `/mcp-sse` SSE) ### విడుదల తర్వాత - [ ] `/capture-release-evidences-cc` (Claude Code skill) అమలు చేయండి - కొత్త featuresకు సంబంధించిన WebP screenshots/recordingsను సంగ్రహిస్తుంది - వాటిని release notes / blog postకు జోడిస్తుంది - [ ] విడుదల ప్రకటనతో GitHub Discussions / Discordను నవీకరించండి - [ ] తదుపరి version కోసం milestoneను తెరవండి - [ ] కీలకమైనదైతే: in-app banner కోసం discussionను pin చేయండి లేదా `news.json`లో post చేయండి ### Radar పబ్లిక్-launch gate Radar ప్రకటన ఉద్దేశపూర్వకంగా `active: false`తో commit చేయబడింది. దిగువన ఉన్న ప్రతి అంశానికి ఆధారం లభించిన తర్వాత activationను ప్రత్యేక మార్పుగా చేయాలి: - [ ] stacked Radar PRలు అన్నీ merge అయ్యాయని మరియు release-tip CI greenగా ఉందని నిర్ధారించండి - [ ] `RADAR_ENABLED` డిఫాల్ట్గా offలోనే ఉంచి OSS Radar routesను deploy చేసి smoke test చేయండి - [ ] పేర్కొన్న Radar hostపై `GET /planos`, `/termos`, `/privacidade`, మరియు `/reembolso`లను smoke test చేయండి - [ ] private serviceలో operator గుర్తింపు/contact/address మరియు owner ఆమోదించిన legal reviewను నమోదు చేయండి - [ ] test modeలో మాత్రమే Stripe Checkout మరియు signed webhookను పరీక్షించండి - [ ] ఆమోదించిన sender/domainతో ఒక encrypted transactional-email deliveryని పరీక్షించండి - [ ] backup restore మరియు పర్యవేక్షణలో, budget పరిమితితో ఒక research run విజయవంతమని నిరూపించండి - [ ] donation evidenceను అంగీకరించే ముందు BRL/PIX review policyని ఆమోదించండి - [ ] పైన పేర్కొన్న gates పూర్తయిన తర్వాత మాత్రమే public Checkoutను enable చేసి, ఆపై కొత్త `news.json` IDని activate చేయండి - [ ] Home banner localized copyని ఉపయోగిస్తోందని, అలాగే పాత IDని dismiss చేసిన తర్వాత కొత్త ID మళ్లీ కనిపిస్తోందని ధృవీకరించండి ## Embedded Services స్మోక్ పరీక్ష (v3.8.4+) Embedded Services మార్పులను కలిగి ఉన్న ఏదైనా విడుదలను షిప్ చేయడానికి ముందు, వీటిని ధృవీకరించండి: ### తాజా-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లో బూట్ అవుతుంది (`~/.omniroute/runtime/`లో systray2 ఇన్స్టాల్ చేయబడింది) - [ ] `omniroute --tray` అనేది Linuxలో బూట్ అవుతుంది (DISPLAY అవసరం; సెట్ చేయకపోతే సున్నితమైన దోషం) - [ ] `omniroute --tray` అనేది Windowsలో బూట్ అవుతుంది (PowerShell NotifyIcon, అదనపు బైనరీలు లేవు) - [ ] `omniroute config tray enable` అనేది ఆటోస్టార్ట్ ఎంట్రీని సృష్టిస్తుంది; డిసేబుల్ చేస్తే దాన్ని తొలగిస్తుంది - [ ] `npm install -g omniroute@` అనేది ఫేటల్ ఎగ్జిట్ లేకుండా 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`) అప్డేట్ తర్వాత కూడా నిలిచి ఉంటాయి. ultra `modelPath` SLM టియర్కు tinybert మోడల్ కూడా అవసరం; మొదటి వినియోగంలో అది `${DATA_DIR}/models/llmlingua`కు స్వయంచాలకంగా డౌన్లోడ్ అవుతుంది. ఆపై Postinstall (`scripts/build/colocateOptionals.mjs`) SLM ఐచ్ఛిక క్లోజర్ను `dist/node_modules`లో సహ-స్థానపరుస్తుంది, తద్వారా వర్కర్ ఒకే `@huggingface/transformers` ^4.2.0 ఇన్స్టాన్స్ను పరిష్కరిస్తుంది — స్వతంత్ర ట్రేస్ డైనమిక్గా ఇంపోర్ట్ చేసిన ఐచ్ఛికాలను కాకుండా transformersను మాత్రమే బండిల్ చేస్తుంది, కాబట్టి ఇది లేకపోతే వర్కర్ root యొక్క 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 ద్వారా పబ్లిక్గా పొందవచ్చు - [ ] తాజా సెటప్లో ఆన్బోర్డింగ్ విజార్డ్ "ఇది ఎలా పనిచేస్తుంది" టియర్ టూర్ దశను చూపిస్తుంది - [ ] హోమ్ డ్యాష్బోర్డ్ టియర్ కవరేజ్ విడ్జెట్ కాన్ఫిగర్ చేసిన/యాక్టివ్ గణనలను చూపిస్తుంది --- ## 3.9.0 LTS విభజన (3.8.58లో సాధన చేయబడింది) v3.8.59 తర్వాతి వెర్షన్ 3.9.0, మరియు దాని టిప్ రెండు దీర్ఘకాలిక బ్రాంచ్లుగా మారుతుంది: `stable/v3` (v3 LTS లైన్, npm `latest`) మరియు `develop` (v4, 4.0.0కు పెంచబడింది, npm `nightly`). బ్రాంచ్/ఛానల్ నమూనా, ఫార్వర్డ్-పోర్ట్ మరియు లేబుళ్లు [RELEASE_STRATEGY.md](./RELEASE_STRATEGY.md)లో ఉన్నాయి; ప్రణాళిక [ROADMAP](../../ROADMAP.md)లో (దశ 3) ఉంది. విభజన ఒక్కసారి మాత్రమే నడుస్తుంది; 3.8.58లో దీనిని ఒక ఫోర్క్పై మొదటి నుంచి చివరి వరకు సాధన చేస్తారు, మరియు 3.8.59 [GO/NO-GO తనిఖీ జాబితా](./LTS_GO_NO_GO.md)తో ముగుస్తుంది. ### డ్రై-రన్ (రీడ్-ఓన్లీ, ఎప్పుడైనా సురక్షితం) ```bash npm run release:dry-run-lts-cut # అసలు విభజన: HEAD నుండి 3.9.0, మునుపటి ట్యాగ్ v3.8.59 npm run release:dry-run-lts-cut -- --from <3.9.0-tip> # సోర్స్ కమిట్ను స్థిరపరచండి ``` `scripts/release/dry-run-lts-cut.mjs` ఏదీ అమలు చేయదు: ఇది git మరియు `gh`ను చదివి పూర్తి క్రమాన్ని ముద్రిస్తుంది — ముందస్తు షరతులు (సోర్స్ పరిష్కరించబడుతుంది, సోర్స్ రిపోజిటరీలో పూర్తి చరిత్ర ఉంది — షాలో క్లోన్ `stable/v3`ను పుష్ చేయలేదు, మొదటి గ్రాఫ్ట్ చేసిన పేరెంట్ వద్ద స్వీకరించే వైపు ప్యాక్ను తిరస్కరిస్తుంది, కాబట్టి పూర్తి క్లోన్ నుంచి విభజించండి లేదా ముందుగా `git fetch --unshallow origin` అమలు చేయండి — మునుపటి ట్యాగ్ ఉంది, `package.json` లక్ష్య వెర్షన్లో ఉంది, ఒక `release-freeze` ఇష్యూ తెరిచి ఉంది, ఇప్పటికే ఉన్న రిలీజ్ బ్రాంచ్పై తెరిచి ఉన్న `Release branch not green` ఇష్యూ లేదు — ఉనికిలో లేని బ్రాంచ్ `?` తెలియదు అని నివేదిస్తుంది, దానిని ఎప్పుడూ గ్రీన్గా పరిగణించదు — Mergify `release` క్యూ కాన్ఫిగర్ చేయబడింది (G11: `queue_rules`, `checks_timeout`, లేబుల్ `queue`), `release/*` రూల్సెట్ ఇప్పటికీ తొలగింపు మరియు ఫోర్స్-పుష్ను నిరోధిస్తుంది, అలాగే `stable/v3` మరియు `develop` ఇంకా ఉనికిలో లేవు), రెండు బ్రాంచ్ దశలు, ఏ నిష్క్రియ వర్క్ఫ్లో ట్రిగ్గర్లు మరియు `if:` షరతులు సత్యమవుతాయి (మరియు ఏవి రిపోజిటరీ వేరియబుల్ ద్వారా గేట్ చేయబడి ఉంటాయి లేదా కానానికల్ రిపోజిటరీకి స్థిరపరచబడి ఉంటాయి), ఆశించిన dist-tags (`latest` → 3.9.0, `next` మరియు `nightly` ఖాళీ) మరియు రోల్బ్యాక్. ఎగ్జిట్ `0` = `RESULT: READY`, `1` = నిరోధక ముందస్తు షరతు విఫలమైంది (`✗`), `2` = వినియోగ దోషం. `--advisory ` ఒక తనిఖీని దాచకుండా హెచ్చరిక (`!`) స్థాయికి తగ్గిస్తుంది. 3.9.0 రిలీజ్ ఫ్రీజ్ ఇంకా తెరిచి ఉన్నప్పుడే అసలు విభజన డ్రై-రన్ను నడపండి — ట్యాగ్ తర్వాత మరియు దశ 12c ఫ్రీజ్ను ఎత్తివేయడానికి ముందు బ్రాంచ్లు సృష్టించబడతాయి. ### 3.8.58 సాధన (ఫోర్క్లో మాత్రమే) ```bash # 1. సాధన పరామితులతో ప్రస్తుత టిప్పై డ్రై-రన్ npm run release:dry-run-lts-cut -- --target-version 3.8.58 --previous-tag v3.8.57 \ --advisory freeze,base-green # 2. ఒక FORK రిమోట్పై అమలు చేయండి (origin లేదా కానానికల్ # రిపోజిటరీ URLను కలిగి ఉన్న ఏ రిమోట్ అయినా తిరస్కరించబడుతుంది; ప్రతి దశ టెర్మినల్లో నిర్ధారణ కోరుతుంది) git remote add rehearsal https://github.com//OmniRoute.git node scripts/release/dry-run-lts-cut.mjs --execute --remote rehearsal \ --target-version 3.8.58 --previous-tag v3.8.57 --advisory freeze,base-green # 3. ఫోర్క్లో నిష్క్రియ వర్క్ఫ్లోలను పరీక్షించండి (డ్రై-రన్ # కానానికల్-రిపోజిటరీ పిన్ను నివేదించే చోట workflow_dispatch), ఆపై రోల్బ్యాక్ చేయండి node scripts/release/dry-run-lts-cut.mjs --execute --rollback --remote rehearsal \ --target-version 3.8.58 --previous-tag v3.8.57 --advisory freeze,base-green ``` develop బంప్ కమిట్ git ప్లంబింగ్తో నిర్మించబడుతుంది (వర్కింగ్ ట్రీని తాకదు) మరియు సైకిల్-ఓపెన్ కమిట్లోని అవే ఐదు ఫైళ్లను బంప్ చేస్తుంది: `package.json`, `open-sse/package.json`, `electron/package.json`, `package-lock.json` మరియు `docs/openapi.yaml`. `[4.0.0]` CHANGELOG విభాగం మరియు దాని i18n ప్రతిరూపాలు, దాని మొదటి PRకు ముందు, ఆ తర్వాత `develop`లో తెరవబడతాయి. స్క్రిప్ట్ npm dist-tagsను ఎప్పుడూ మార్చదు — వాటిని తాత్కాలిక ప్యాకేజీపై సాధన చేయండి. ### PR ప్రివ్యూ ఆర్టిఫాక్ట్ (ఒకసారి బిల్డ్ చేసి, అవే బైట్లను ప్రమోట్ చేయండి) `.github/workflows/preview-artifact.yml` ఒక PR హెడ్ నుంచి ఒక ప్రొడక్షన్ టార్బాల్ను బిల్డ్ చేసి అదే ఖచ్చితమైన బిల్డ్ను ధ్రువీకరిస్తుంది (#8084 భాగం (a)). అదే రిపోజిటరీ PRలకు మాత్రమే; ఏదీ ప్రచురించబడదు. ```bash gh workflow run preview-artifact.yml -f pr_number= # లేదా `preview-artifact` లేబుల్ను జోడించండి gh run download --name preview-artifact-pr- --dir preview cd preview && sha256sum -c SHA256SUMS gh attestation verify omniroute-*.tgz --repo diegosouzapw/OmniRoute npm install -g ./omniroute-*.tgz # ప్రివ్యూను ఇన్స్టాల్ చేయండి ``` ఈ రన్ `npm ci`, `npm run build:release`, `npm run check:pack-artifact`లను అమలు చేసి, టార్బాల్ను ప్యాక్ చేస్తుంది, `npm run check:pack-boot`ను (నకిలీ సీక్రెట్లు, తాత్కాలిక డేటా డైరెక్టరీ) అమలు చేసి, తిరిగి ప్యాక్ చేస్తుంది మరియు డైజెస్ట్ ఒకేలా లేకపోతే విఫలమవుతుంది; ఆపై `artifact-identity.json`ను (హెడ్ SHA, బేస్ SHA, లాక్ఫైల్ హ్యాష్, ప్లాట్ఫారమ్, ఆర్కిటెక్చర్, node ABI, బండ్లర్, బిల్డ్ విధానం — `scripts/release/artifact-identity.mjs`) నమోదు చేసి, టార్బాల్కు ప్రత్యేక జాబ్లో అటెస్టేషన్ చేస్తుంది. ప్రివ్యూను ప్రమోట్ చేయడం అంటే ఆ టార్బాల్ను ఇన్స్టాల్ చేయడం: సోర్స్ నుంచి ఎప్పుడూ మళ్లీ బిల్డ్ చేయవద్దు. ### విభజన (3.9.0, GO తర్వాత) 1. [LTS_GO_NO_GO.md](./LTS_GO_NO_GO.md)లో GO నమోదు చేయబడింది. 2. `npm run release:dry-run-lts-cut -- --from v3.9.0` అనేది `RESULT: READY`ను ముద్రిస్తుంది. 3. డ్రై-రన్ ముద్రించే కమాండ్లతో `origin`పై బ్రాంచ్లను మాన్యువల్గా సృష్టించండి — స్క్రిప్ట్ `origin`కు పుష్ చేయడానికి నిరాకరిస్తుంది. సమీక్షించిన develop కమిట్ను తిరిగి ఉపయోగించడానికి, ముందుగా మీ ఫోర్క్పై 3.9.0 టిప్కు వ్యతిరేకంగా `--execute` సాధనను నడపండి; అది రెండు SHAలను ముద్రిస్తుంది, మరియు అవే కమిట్లను పుష్ చేయవచ్చు: ```bash git push origin :refs/heads/stable/v3 :refs/heads/develop ``` 4. మొదటి PR విలీనం కావడానికి ముందే `stable/v3` మరియు `develop` శాఖలను రక్షించండి (rulesets + merge queue). 5. నిష్క్రియంగా ఉన్న workflows శాఖ ఉనికిని బట్టి సక్రియమవుతాయి: `forward-port.yml` (`stable/v3`కు push), `validate-stable-pr.yml` (`stable/v3`కు PRలు) మరియు `nightly-v4-build.yml` (`develop`ను build చేస్తుంది). ప్రారంభానికి ముందు, `secrets.FORWARD_PORT_TOKEN` repository secretను సెట్ చేయండి (దీంతో forward-port PRలపై CI అమలవుతుంది); యజమాని repository variable `vars.NIGHTLY_PUBLISH`ను `true`గా సెట్ చేసి, npm Trusted Publishing `nightly-v4-build.yml`ను ఆమోదించే వరకు nightly publishing నిలిపివేయబడే ఉంటుంది. Channel resolutionను `scripts/release/dist-tag.mjs` నిర్వహిస్తుంది; ఇదే resolverను `npm-publish.yml` ఉపయోగిస్తుంది. 6. channelsను ధృవీకరించండి: `npm view omniroute dist-tags --json`లో `latest` = 3.9.0గా కనిపించాలి మరియు v4 publish అయ్యే వరకు `next` / `nightly` ఉండకూడదు. 7. అవసరమైతే rollback చేయండి: `git push origin --delete refs/heads/stable/v3 refs/heads/develop` మరియు `npm dist-tag add omniroute@3.8.59 latest`. --- ## రోల్బ్యాక్ విడుదలలో తీవ్రమైన సమస్య ఉంటే: 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 తెరవడానికి ముందు డాక్స్ సింక్ గార్డ్ను స్థానికంగా అమలు చేయండి: ```bash npm run check:docs-sync ``` CI కూడా `.github/workflows/ci.yml`లో (lint జాబ్) ఈ తనిఖీని అమలు చేస్తుంది.