Files
OmniRoute/docs/i18n/ml/docs/ops/RELEASE_CHECKLIST.md
Diego Rodrigues de Sa e Souza 58f88a83e4 feat(i18n): 7 new locales — Hausa, Yoruba, Igbo, Amharic, Uzbek, Georgian, Armenian (66 locales) (#13727)
Batch 3 (last) of the locale-expansion plan: ha, yo, ig, am, uz, ka, hy on every surface — dashboard catalog, docs mirror (22-file core + llm.txt + CHANGELOG), CLI catalog, README flag block, locale tables and 🌐 language bars. Also closes the key gap the batch-1 (43 keys) and batch-2 (10 keys) catalogs carried since their base merges, fixes the Igbo "Model" copy and allowlists the Uzbek cognate. Translation-ratio baseline covers 65 locales.

⚠️ base-red inherited: #12732
2026-09-15 09:50:01 -03:00

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 · 🇮🇳 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 · 🇵🇰 ur · 🇺🇿 uz · 🇻🇳 vi · 🇳🇬 yo · 🇨🇳 zh-CN · 🇹🇼 zh-TW



title: "റിലീസ് ചെക്ക്ലിസ്റ്റ്" version: 3.8.51 lastUpdated: 2026-08-28

റിലീസ് ചെക്ക്ലിസ്റ്റ്

അവസാനം പുതുക്കിയത്: 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 (എൻവയൺമെന്റ്: ഒന്നുമില്ല). ഇത് നിലവിൽ വരുന്നതുവരെ, ഓട്ടോമാറ്റിക് ഘട്ടം 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. പബ്ലിഷിന് ശേഷമുള്ള സുരക്ഷാവലയം: പബ്ലിഷിന് ശേഷമുള്ള വെരിഫയർ (v3.8.49 പ്ലാനിലെ WS1.4) പ്രസിദ്ധീകരിച്ച പതിപ്പ് പബ്ലിക് റെജിസ്ട്രിയിൽനിന്ന് വൃത്തിയുള്ള ഒരു കണ്ടെയ്നറിൽ ഇൻസ്റ്റാൾ ചെയ്ത് ബൂട്ട് ചെയ്യുന്നു.

അടിയന്തര ഫാൾബാക്ക്: publish_mode=direct ഉപയോഗിച്ചുള്ള workflow_dispatch, പഴയ രീതിയിലുള്ള ഉടനടിയുള്ള npm publish പുനഃസ്ഥാപിക്കുന്നു (സ്റ്റേജിംഗ് തന്നെ തകരാറിലാകുമ്പോൾ മാത്രം ഉപയോഗിക്കുക; കാരണം രേഖപ്പെടുത്തുക).

ഒറ്റത്തവണ ഹാർഡനിംഗ് (ഉടമ, npmjs.com): ചോർന്ന ദീർഘകാല ടോക്കണിന് എവിടെനിന്നും നേരിട്ട് npm publish ചെയ്യാനാകാത്തവിധം, omniroute-നുള്ള Trusted Publisher സ്റ്റേജ്-ഒൺലി മോഡിൽ കോൺഫിഗർ ചെയ്യുക — CI-യ്ക്ക് സ്റ്റേജ് ചെയ്യാൻ മാത്രമേ കഴിയൂ; ഉടമയുടെ 2FA-യ്ക്ക് മാത്രമേ റിലീസ് ചെയ്യാനാകൂ.

തകരാറിലായ ആർട്ടിഫാക്റ്റിനുള്ള പ്ലേബുക്ക് (മാറ്റമില്ല): ഡിഫോൾട്ട് ഉടനടി നടപടിയായി npm deprecate omniroute@<bad> "<reason> — use <fixed>" ഉപയോഗിക്കുക (മിനിറ്റുകൾക്കുള്ളിൽ, പഴയപടിയാക്കാവുന്നത്); 72h/ഡിപ്പെൻഡന്റുകളില്ലാത്ത ജാലകത്തിനുള്ളിൽ മാത്രം 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 റിലീസ് ചാനലുകൾ, #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-ൽ green.

പ്രവേശന നയം — നാലും നിർബന്ധം (Chromium/VS Code/Node എമർജൻസി ലെയിനുകളെ മാതൃകയാക്കി):

  1. ഗൗരവനില: production പ്രവർത്തനരഹിതമാണ് — പ്രസിദ്ധീകരിച്ച artifact boot സമയത്ത് crash ചെയ്യുന്നു / ഒരു security fix / release-ന്റെ എല്ലാ ഉപയോക്താക്കളെയും ബാധിക്കുന്നു. "പ്രധാനപ്പെട്ടത്" എന്നത് "പ്രവർത്തനരഹിതം" എന്നല്ല.
  2. അധികാരം: repository owner മാത്രമാണ് hotfix ലേബൽ പ്രയോഗിക്കുന്നത്. ലേബൽ തന്നെയാണ് അംഗീകാരം — campaign PR-ൽ ഒരിക്കലും സ്വയം ഉപയോഗിക്കരുത്.
  3. തെളിവ്: ഒഴിവാക്കിയ jobs വീണ്ടും സാധൂകരിക്കുമായിരുന്ന suite-ന്റെ മുമ്പത്തെ പൂർണ്ണമായി-green ആയ heavy run-ലേക്കുള്ള link-ഉം, fix-ന്റെ സ്വന്തം ആദ്യം പരാജയപ്പെടുകയും പിന്നീട് വിജയിക്കുകയും ചെയ്യുന്ന test-ഉം PR body-യിൽ ഉൾപ്പെടുത്തണം.
  4. പരിധി: cherry-pick-only — ഏറ്റവും കുറഞ്ഞ fix മാത്രം; refactors ഇല്ല, അനുബന്ധ മാറ്റങ്ങൾ ഇല്ല.

ഒഴിവാക്കിയ coverage/ratchet ഉപരിതലം release branch-ലെ അടുത്ത full run വഴി വീണ്ടും സാധൂകരിക്കുന്നു (തുടർച്ചയായ release-green) — lane ഒഴിവാക്കുന്നത് കാത്തിരിപ്പാണ്, validation ഒരിക്കലുമല്ല. Tests-only diffs (tests/-നു കീഴിലുള്ള എല്ലാ files-ഉം, tests/e2e/-നു കീഴിൽ ഒന്നുമില്ലാത്തത്) യാതൊരു label-ഉം കൂടാതെ E2E matrix സ്വയമേവ ഒഴിവാക്കും.

വിശദമായ ചെക്ക്ലിസ്റ്റ്

റിലീസിന് മുമ്പ്

  • ഈ release ലക്ഷ്യമിട്ടുള്ള എല്ലാ PR-കളും release/vX.Y.0-ലേക്ക് merge ചെയ്തിട്ടുണ്ട്
  • ഈ version-നുള്ള എല്ലാ തുറന്ന Linear/issue items-ഉം close ചെയ്തിട്ടുണ്ട് അല്ലെങ്കിൽ അടുത്ത milestone-ലേക്ക് മാറ്റിയിട്ടുണ്ട്
  • release/vX.Y.0 branch-ൽ CI green ആണ്
  • code-ൽ TODO(release) markers ഇല്ല: 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 എന്നിവയുടെ version ഉയർത്തുന്നു
    • അവസാന 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-നോട് തുല്യമായിരിക്കണം

Code Quality

  • 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-നോട് യോജിക്കുന്നു)

Testing

  • 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-ന്റെ selection decisions എല്ലാം നിർണായകമായി തെളിയിക്കുന്നു; 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: 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 operations-ൽ സ്വയമേവ പ്രവർത്തിക്കുകയും ചെയ്യുന്നു.

  • pre-commit: npx lint-staged + node scripts/check/check-docs-sync.mjs + npm run check:any-budget:t11
  • pre-push: വേഗമേറിയ deterministic 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

release-ൽ ഉൾപ്പെടുന്ന എല്ലാ commits-ഉം type(scope): subject format പിന്തുടരണം.

സാധുവായ 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).

Documentation

  • npm run check:docs-sync വിജയിക്കുന്നു (pre-commit സ്വയമേവ പ്രവർത്തിപ്പിക്കുന്നു)
  • npm run check:docs-all വിജയിക്കുന്നു (umbrella: docs-sync + docs-counts + env-doc-sync + deprecated-versions + doc-links)
  • npm run check:env-doc-sync 0-ോടെ exit ചെയ്യുന്നു — code ↔ .env.exampledocs/reference/ENVIRONMENT.md env contract കേടുപാടില്ലാതെ നിലനിൽക്കുന്നു
  • npm run check:doc-links 0-ോടെ exit ചെയ്യുന്നു — restructuring-നുശേഷം തകർന്ന internal markdown references ഇല്ല
  • storage/runtime drift സംബന്ധിച്ച് docs/architecture/ARCHITECTURE.md പരിശോധിച്ചിട്ടുണ്ട്
  • env var-ഉം operational drift-ഉം സംബന്ധിച്ച് docs/guides/TROUBLESHOOTING.md പരിശോധിച്ചിട്ടുണ്ട്
  • .env.example മാറിയിട്ടുണ്ടെങ്കിൽ: docs/reference/ENVIRONMENT.md പുതുക്കിയിട്ടുണ്ട്
  • പുതിയ feature-ന് UI ഉണ്ടെങ്കിൽ: docs/guides/USER_GUIDE.md അതിനെ പരാമർശിക്കുന്നു
  • പുതിയ feature-ന് API ഉണ്ടെങ്കിൽ: docs/reference/API_REFERENCE.md + docs/openapi.yaml പുതുക്കിയിട്ടുണ്ട്
  • പുതിയ feature ഒരു module ആണെങ്കിൽ: സമർപ്പിതമായ docs/<MODULE>.md നിലവിലുണ്ട്
  • breaking change ആണെങ്കിൽ: docs/guides/TROUBLESHOOTING.md-ൽ migration note ഉണ്ട്

i18n

  • npm run i18n:check 0-ോടെ exit ചെയ്യുന്നു — translation state (.i18n-state.json) source docs-നോട് sync ചെയ്തിരിക്കുന്നു (strict mode-ൽ drift ചെയ്ത sources ഇല്ല; അവസാന നിമിഷ doc touch-ups-ന് warn-mode advisory സ്വീകാര്യമാണ്, എന്നാൽ tagging-ന് മുമ്പ് 0 ആയിരിക്കണം)
  • npm run i18n:check-ui-coverage 0-ോടെ exit ചെയ്യുന്നു — എല്ലാ UI locale-കളും 80% coverage floor-ലോ അതിന് മുകളിലോ ആണ്
  • npm run i18n:sync-ui:dry എല്ലാ 42 locales-ലുമായി 0 missing keys റിപ്പോർട്ട് ചെയ്യുന്നു
  • source English docs മാറിയിട്ടുണ്ടെങ്കിൽ, tagging-ന് മുമ്പ് npm run i18n:run പ്രവർത്തിപ്പിക്കുക (.env-ൽ OMNIROUTE_TRANSLATION_API_KEY ആവശ്യമാണ്)
  • Translation contributions ചെറുതാണെങ്കിൽ അടുത്ത release-ലേക്ക് മാറ്റിവയ്ക്കാം (CHANGELOG-ൽ track ചെയ്യുക)

Database Migrations

  • src/lib/db/migrations/-ൽ പുതിയ files ഉണ്ടെങ്കിൽ:
    • ഓരോ migration-ഉം idempotent ആണ് (CREATE TABLE IF NOT EXISTS മുതലായവ)
    • Migrations transactions-ൽ പൊതിഞ്ഞിരിക്കുന്നു
    • ശരിയായി number ചെയ്തിരിക്കുന്നു (sequence-ൽ gaps ഇല്ല)
  • fresh install-ൽ test ചെയ്യുക: ~/.omniroute/omniroute.db ഇല്ലാതാക്കി npm run dev പ്രവർത്തിപ്പിക്കുക
  • നിലവിലുള്ള install-ൽ test ചെയ്യുക: DB backup എടുക്കുക, migration പ്രവർത്തിപ്പിക്കുക, schema സ്ഥിരീകരിക്കുക
  • migration tables rewrite ചെയ്യുന്നുവെങ്കിൽ WAL files (-wal, -shm) ശരിയായി കൈകാര്യം ചെയ്യുന്നു

Provider Catalog (Zod സാധൂകരിച്ചത്)

  • src/shared/constants/providers.ts Zod schema load സമയത്ത് സാധുവാണ്
    • എല്ലാ providers-നും നിർബന്ധമായ fields (id, label, kind മുതലായവ) ഉണ്ട്
    • പുതിയ free providers-ന് freeNote നൽകിയിട്ടുണ്ട്
    • OAuth providers-ന് src/lib/oauth/constants/oauth.ts-ൽ oauthConfig രജിസ്റ്റർ ചെയ്തിട്ടുണ്ട്
  • പുതിയ provider ചേർത്തിട്ടുണ്ടെങ്കിൽ: open-sse/executors/-ൽ അതിനനുസരിച്ച executor ഉണ്ട്
  • OpenAI format അല്ലെങ്കിൽ: open-sse/translator/-ൽ translator ഉണ്ട്
  • Models open-sse/config/providerRegistry.ts-ൽ രജിസ്റ്റർ ചെയ്തിട്ടുണ്ട്
  • tests/unit/-ലെ unit tests provider classification-ഉം routing-ഉം ഉൾക്കൊള്ളുന്നു

Desktop (Electron)

electron/ മാറിയിട്ടുണ്ടെങ്കിൽ:

  • npm run electron:smoke:packaged വിജയിക്കുന്നു
  • :win, :mac, :linux എന്നിവയിൽ കുറഞ്ഞത് ഒന്നിനെങ്കിലും builds test ചെയ്തിട്ടുണ്ട്
  • Code signing certs കാലഹരണപ്പെട്ടിട്ടില്ല (signing ചെയ്യുന്നുവെങ്കിൽ)
  • electron/package.json version, root package.json-നോട് പൊരുത്തപ്പെടുന്നു
  • stable-ലേക്ക് release ചെയ്യുന്നുവെങ്കിൽ auto-update channel pointer പുതുക്കിയിട്ടുണ്ട്

Build Layout

repository മൂന്ന് വ്യത്യസ്ത output directories ഉപയോഗിക്കുന്നു — അവ ഒരിക്കലും തമ്മിൽ കലർത്തരുത്:

Directory ഉദ്ദേശ്യം Track ചെയ്തിട്ടുണ്ടോ?
src/ Application source (TypeScript / TSX) ഉണ്ട്
.build/ Build intermediates — next build output (distDir) ഇല്ല (gitignored)
dist/ വിതരണം ചെയ്യാവുന്ന npm bundle — assembleStandalone സജ്ജീകരിച്ചത് ഇല്ല (gitignored)

Operator കുറിപ്പ്: remote VPS image directory /usr/lib/node_modules/omniroute/app/ ആയി തുടരുന്നു. repository-ക്കുള്ളിലെ build output മാത്രമാണ് മാറിയത് (app/dist/). deploy skills, dist/-ലെ ഉള്ളടക്കം remote app/ dir-ലേക്ക് rsync ചെയ്യുന്നു — VPS path മാറ്റങ്ങളൊന്നും ആവശ്യമില്ല.

Single-build flow:

npm run build:release
  └─ rm -rf .build dist          (വൃത്തിയാക്കുന്നു)
  └─ next build → .build/next/   (ഇടക്കാല files)
  └─ assembleStandalone          (standalone + static + public + natives → dist/ എന്നതിലേക്ക് പകർത്തുന്നു)
  └─ writes dist/BUILD_SHA       (HEAD sentinel)

deploy ചെയ്യുന്നതിനായി npm run build പ്രവർത്തിപ്പിച്ചതിന് ശേഷം വേറിട്ട് npm run build:cli പ്രവർത്തിപ്പിക്കരുത് — ഒറ്റ command-ൽ clean rebuild + sentinel ചെയ്യുന്ന npm run build:release ഉപയോഗിക്കുക.

Artifact Validation

  • 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, അല്ലെങ്കിൽ മറ്റ് local residue ഇല്ല
  • build-ന് ശേഷം dist/server.js നിലവിലുണ്ട്

Tagging & Release

  • /generate-release-cc പ്രവർത്തിപ്പിക്കുക (Claude Code skill):
    • vX.Y.Z tag സൃഷ്ടിക്കുന്നു
    • tag-ഉം branch-ഉം push ചെയ്യുന്നു
    • changelog body ഉപയോഗിച്ച് GitHub Release തുറക്കുന്നു
    • Electron installers attach ചെയ്യുന്നു (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 skills ലഘുവായ rsync flow ഉപയോഗിക്കുന്നു — npm pack ഇല്ല, npm i -g ഇല്ല:

  • target-നോട് പൊരുത്തപ്പെടുന്ന deploy skill ഉപയോഗിക്കുക:
    • /deploy-vps-local-cc — local 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 പ്രവർത്തിക്കണം (main checkout അല്ലെങ്കിൽ npm ci ചെയ്ത worktree — symlink ചെയ്ത worktree അല്ല)
  • deploy ചെയ്ത instance smoke test ചെയ്യുക:
    • /dashboard/health തുറക്കുക → version string release-നോട് പൊരുത്തപ്പെടുന്നുവെന്ന് പരിശോധിക്കുക
    • അറിയാവുന്ന 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-ൽ attach ചെയ്യുന്നു
  • release announcement ഉപയോഗിച്ച് GitHub Discussions / Discord പുതുക്കുക
  • അടുത്ത version-നായി milestone തുറക്കുക
  • അതീവ നിർണായകമാണെങ്കിൽ: discussion pin ചെയ്യുക അല്ലെങ്കിൽ in-app banner-നായി news.json-ൽ post ചെയ്യുക

Radar public-launch gate

Radar announcement മനഃപൂർവം active: false എന്ന നിലയിലാണ് commit ചെയ്തിരിക്കുന്നത്. ചുവടെയുള്ള ഓരോ item-നും തെളിവ് ലഭിച്ചതിനു ശേഷം വേറിട്ട മാറ്റമായാണ് activation നടത്തേണ്ടത്:

  • stacked Radar PR-കൾ എല്ലാം merge ചെയ്തിട്ടുണ്ട്, release-tip CI green ആണ്
  • RADAR_ENABLED default ആയി off ആയിരിക്കുമ്പോൾ OSS Radar routes deploy ചെയ്ത് smoke ചെയ്യുക
  • നിർദ്ദിഷ്ട Radar host-ൽ GET /planos, /termos, /privacidade, /reembolso എന്നിവ smoke ചെയ്യുക
  • operator identity/contact/address-ഉം owner അംഗീകരിച്ച legal review-ഉം private service-ൽ രേഖപ്പെടുത്തുക
  • 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 സജീവമാക്കുക
  • 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 ഓട്ടോസ്റ്റാർട്ട് എൻട്രി സൃഷ്ടിക്കുന്നു; 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) അപ്ഡേറ്റിന് ശേഷവും നിലനിൽക്കുന്നു. ultra modelPath SLM ടയറിന് 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 ടോക്കൺ പാത, loopback മാത്രം)
  • curl http://localhost:20128/api/shutdown 401 നൽകുന്നു (എപ്പോഴും പരിരക്ഷിക്കപ്പെടുന്ന റൂട്ട്)
  • curl -H "host: evil.com" http://localhost:20128/api/mcp/sse 401 നൽകുന്നു (loopback ഗാർഡ്)
  • ആദ്യ പ്രവർത്തനത്തിൽ SQLite റൺടൈം bundled ആയി റെസോൾവ് ചെയ്യുന്നു (പ്ലാറ്റ്ഫോമിന് സാധുവായ ബണ്ടിൽ ചെയ്ത ബൈനറി)
  • node_modules/better-sqlite3 ഇല്ലാതാക്കുമ്പോൾ SQLite റൺടൈം runtime-ലേക്ക് ഫാൾബാക്ക് ചെയ്യുന്നു
  • Smart 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-ൽ (lint job) ഈ പരിശോധന പ്രവർത്തിപ്പിക്കുന്നു.