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 · 🇮🇳 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
അവസാനം പുതുക്കിയത്: 2026-08-28 — v3.8.51 ഓട്ടോമേഷനായി Claude Code സ്കില്ലുകൾ പ്രയോജനപ്പെടുത്തുന്ന ലളിതമാക്കിയ റിലീസ് പ്രവാഹം.
റിലീസുകൾക്കിടയിൽ ക്യൂ/ബ്രാഞ്ച് ഗ്രീൻ ആയി നിലനിർത്തുക: RELEASE_GREEN.md കാണുക (
/green-prsഫാമിലി +npm run check:release-green+/babysit+ nightly). ഇത് ഇടയ്ക്കിടെയും — പ്രത്യേകിച്ച് ഈ ചെക്ക്ലിസ്റ്റിന് മുമ്പും — പ്രവർത്തിപ്പിക്കുന്നത് റിലീസ് 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 ഗേറ്റ് തെളിവിന് മുമ്പല്ല, അതിന് ശേഷമാണ് ഇപ്പോൾ വരുന്നത്.
വർക്ക്ഫ്ലോ ഗ്രീൻ ആയതിനുശേഷമുള്ള ഉടമയുടെ പ്രവാഹം:
npm stage list omniroute— സ്റ്റേജ് id കണ്ടെത്തുക (വർക്ക്ഫ്ലോ സംഗ്രഹത്തിലും ഇത് പ്രിന്റ് ചെയ്യപ്പെടും).- സ്റ്റേജ് ചെയ്ത ബൈറ്റുകൾ പരിശോധിക്കുക (ശുപാർശ ചെയ്യുന്നു):
npm stage download <id>, തുടർന്ന് ഡൗൺലോഡ് ചെയ്ത tarball ഒരു താൽക്കാലിക prefix-ൽ ഇൻസ്റ്റാൾ ചെയ്ത് ബൂട്ട് ചെയ്യുക (npm run check:pack-boot, CI-യിൽ ഇതേ pack→install→boot പരിശോധന ഓട്ടോമേറ്റ് ചെയ്യുന്നു). npm stage approve <id>— 2FA പ്രോംപ്റ്റ് തന്നെയാണ് പബ്ലിഷ്.npm stage reject <id>അത് ഉപേക്ഷിക്കുന്നു.- പബ്ലിഷിന് ശേഷമുള്ള സുരക്ഷാവലയം: പബ്ലിഷിന് ശേഷമുള്ള വെരിഫയർ (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 എമർജൻസി ലെയിനുകളെ മാതൃകയാക്കി):
- ഗൗരവനില: production പ്രവർത്തനരഹിതമാണ് — പ്രസിദ്ധീകരിച്ച artifact boot സമയത്ത് crash ചെയ്യുന്നു / ഒരു security fix / release-ന്റെ എല്ലാ ഉപയോക്താക്കളെയും ബാധിക്കുന്നു. "പ്രധാനപ്പെട്ടത്" എന്നത് "പ്രവർത്തനരഹിതം" എന്നല്ല.
- അധികാരം: repository owner മാത്രമാണ്
hotfixലേബൽ പ്രയോഗിക്കുന്നത്. ലേബൽ തന്നെയാണ് അംഗീകാരം — campaign PR-ൽ ഒരിക്കലും സ്വയം ഉപയോഗിക്കരുത്. - തെളിവ്: ഒഴിവാക്കിയ jobs വീണ്ടും സാധൂകരിക്കുമായിരുന്ന suite-ന്റെ മുമ്പത്തെ പൂർണ്ണമായി-green ആയ heavy run-ലേക്കുള്ള link-ഉം, fix-ന്റെ സ്വന്തം ആദ്യം പരാജയപ്പെടുകയും പിന്നീട് വിജയിക്കുകയും ചെയ്യുന്ന test-ഉം PR body-യിൽ ഉൾപ്പെടുത്തണം.
- പരിധി: 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.0branch-ൽ 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.jsonversion-നോട് തുല്യമാണെന്ന് ഉറപ്പാക്കുക- വരാനിരിക്കുന്ന പ്രവർത്തനങ്ങൾക്കായി
## [Unreleased]ആദ്യ changelog section ആയി നിലനിർത്തുക docs/openapi.yamlപുതുക്കുക →info.version,package.jsonversion-നോട് തുല്യമായിരിക്കണം
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; VPSroot@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.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: വേഗമേറിയ deterministic gates —
npm run check:any-budget:t11 && npm run check:tracked-artifacts(2026-06-13-ന് സജീവമാക്കി).test:unitമനഃപൂർവം ഒഴിവാക്കുന്നു (മന്ദഗതിയിലുള്ളത്; CItest-unitjob ഇത് ഉൾക്കൊള്ളുന്നു).- release branches push ചെയ്യുന്നതിന് മുമ്പ്
npm run test:unitനേരിട്ട് പ്രവർത്തിപ്പിക്കുക.
- release branches push ചെയ്യുന്നതിന് മുമ്പ്
ഒരു 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-sync0-ോടെ exit ചെയ്യുന്നു — code ↔.env.example↔docs/reference/ENVIRONMENT.mdenv contract കേടുപാടില്ലാതെ നിലനിൽക്കുന്നുnpm run check:doc-links0-ോടെ 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:check0-ോടെ 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-coverage0-ോടെ 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 ഇല്ല)
- ഓരോ migration-ഉം idempotent ആണ് (
- 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.tsZod schema load സമയത്ത് സാധുവാണ്- എല്ലാ providers-നും നിർബന്ധമായ fields (
id,label,kindമുതലായവ) ഉണ്ട് - പുതിയ free providers-ന്
freeNoteനൽകിയിട്ടുണ്ട് - OAuth providers-ന്
src/lib/oauth/constants/oauth.ts-ൽoauthConfigരജിസ്റ്റർ ചെയ്തിട്ടുണ്ട്
- എല്ലാ providers-നും നിർബന്ധമായ fields (
- പുതിയ 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.jsonversion, rootpackage.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/-ലെ ഉള്ളടക്കം remoteapp/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.Ztag സൃഷ്ടിക്കുന്നു- 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/completionsrequest പ്രവർത്തിപ്പിക്കുക /api/monitoring/health,CLOSEDcircuit breakers മടക്കിനൽകുന്നുവെന്ന് സ്ഥിരീകരിക്കുക- MCP transports പ്രതികരിക്കുന്നുവെന്ന് സ്ഥിരീകരിക്കുക (
/mcpHTTP,/mcp-sseSSE)
റിലീസിന് ശേഷം
/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_ENABLEDdefault ആയി 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.jsonID സജീവമാക്കുക - 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/install2 മിനിറ്റിനുള്ളിൽinstalledVersionസഹിതം 200 നൽകുന്നുPOST /api/services/9router/start30 സെക്കൻഡിനുള്ളിൽ 200-ഉംstate: "running"-ഉം നൽകുന്നുGET /api/services/9router/statushealth: "healthy"എന്ന് റിപ്പോർട്ട് ചെയ്യുന്നു"model": "9router/auto/..."സഹിതമുള്ളPOST /v1/chat/completions200 നൽകുന്നു (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/stop200-ഉംstate: "stopped"-ഉം നൽകുന്നുGET /api/services/9router/logs?tail=50സമീപകാല വരികൾ ഉൾക്കൊള്ളുന്നsnapshotഇവന്റോടുകൂടിയ SSE സ്ട്രീം നൽകുന്നു- PATH-ൽ
npmഇല്ലാത്ത എൻവയോൺമെന്റിലെ ഇൻസ്റ്റാളേഷൻ, സൗഹൃദപരമായ (സ്റ്റാക്ക് ട്രേസ് അല്ലാത്ത) പിശക് സന്ദേശത്തോടുകൂടി 500 നൽകുന്നു
CLIProxyAPI
POST /api/services/cliproxy/install2 മിനിറ്റിനുള്ളിൽ 200 നൽകുന്നുPOST /api/services/cliproxy/start30 സെക്കൻഡിനുള്ളിൽ 200-ഉംstate: "running"-ഉം നൽകുന്നുGET /api/services/cliproxy/statushealth: "healthy"എന്ന് റിപ്പോർട്ട് ചെയ്യുന്നുPOST /api/services/cliproxy/stop200-ഉംstate: "stopped"-ഉം നൽകുന്നുGET /api/services/cliproxy/logs?tail=50SSE സ്ട്രീം നൽകുന്നു
സുരക്ഷാ റിഗ്രഷൻ
curl -H "X-Forwarded-For: 1.2.3.4" http://localhost:20128/api/services/9router/start403 LOCAL_ONLYനൽകുന്നുcurl -H "X-Forwarded-For: 1.2.3.4" http://localhost:20128/api/services/cliproxy/start403 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 ചെയ്യുകയും ചെയ്യും. .envഇല്ലാതെയുംomniroute statusപ്രവർത്തിക്കുന്നു (CLI ടോക്കൺ പാത, loopback മാത്രം)curl http://localhost:20128/api/shutdown401 നൽകുന്നു (എപ്പോഴും പരിരക്ഷിക്കപ്പെടുന്ന റൂട്ട്)curl -H "host: evil.com" http://localhost:20128/api/mcp/sse401 നൽകുന്നു (loopback ഗാർഡ്)- ആദ്യ പ്രവർത്തനത്തിൽ 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 തുറക്കുന്നതിന് മുമ്പ് ഡോക്സ് സിങ്ക് ഗാർഡ് ലോക്കലായി പ്രവർത്തിപ്പിക്കുക:
npm run check:docs-sync
CI-യും .github/workflows/ci.yml-ൽ (lint job) ഈ പരിശോധന പ്രവർത്തിപ്പിക്കുന്നു.