Files
OmniRoute/docs/i18n/si/docs/ops/RELEASE_CHECKLIST.md
Diego Rodrigues de Sa e Souza b637350680 fix(docs): re-sync the 65 documentation mirror sets; section-level docs pipeline; drift gate blocking (#13940)
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
2026-09-17 02:55:31 -03:00

47 KiB

Release Checklist (සිංහල)

🌐 Languages: 🇺🇸 English · 🇪🇹 am · 🇸🇦 ar · 🇦🇿 az · 🇧🇬 bg · 🇧🇩 bn · 🇨🇿 cs · 🇩🇰 da · 🇩🇪 de · 🇬🇷 el · 🇪🇸 es · 🇪🇪 et · 🇮🇷 fa · 🇫🇮 fi · 🇫🇷 fr · 🇮🇪 ga · 🇮🇳 gu · 🇳🇬 ha · 🇮🇱 he · 🇮🇳 hi · 🇭🇷 hr · 🇭🇺 hu · 🇦🇲 hy · 🇮🇩 id · 🇳🇬 ig · 🇮🇹 it · 🇯🇵 ja · 🇬🇪 ka · 🇰🇭 km · 🇮🇳 kn · 🇰🇷 ko · 🇱🇹 lt · 🇱🇻 lv · 🇮🇳 ml · 🇮🇳 mr · 🇲🇾 ms · 🇲🇹 mt · 🇲🇲 my · 🇳🇵 ne · 🇳🇱 nl · 🇳🇴 no · 🇮🇳 or · 🇮🇳 pa · 🇵🇭 phi · 🇵🇱 pl · 🇵🇹 pt · 🇧🇷 pt-BR · 🇷🇴 ro · 🇷🇺 ru · 🇸🇰 sk · 🇸🇮 sl · 🇷🇸 sr · 🇸🇪 sv · 🇰🇪 sw · 🇮🇳 ta · 🇮🇳 te · 🇹🇭 th · 🇹🇷 tr · 🇺🇦 uk-UA · 🇵🇰 ur · 🇺🇿 uz · 🇻🇳 vi · 🇳🇬 yo · 🇨🇳 zh-CN · 🇹🇼 zh-TW


අවසන් වරට යාවත්කාලීන කළේ: 2026-08-28 — v3.8.51 ස්වයංක්රීයකරණය සඳහා Claude Code කුසලතා භාවිත කරන සරල කළ නිකුතු ප්රවාහයකි.

නිකුතු අතරතුර පෝලිම/ශාඛාව හරිත තත්ත්වයේ තබා ගන්න: RELEASE_GREEN.md බලන්න (/green-prs පවුල + npm run check:release-green + /babysit + රාත්රී ක්රියාවලිය). මෙය වරින් වර — විශේෂයෙන්ම මෙම පිරික්සුම් ලැයිස්තුවට පෙර — ධාවනය කිරීමෙන් නිකුතු PR එක හරිත තත්ත්වයෙන් ආරම්භ වේ.

කෙටියෙන්

# 1. අනුවාදය ඉහළ නංවා CHANGELOG ජනනය කරන්න (කුසලතාව)
/version-bump-cc patch    # හෝ minor/major

# 2. ගුණාත්මකතා ද්වාරය දේශීයව ධාවනය කරන්න
npm run check              # lint + පරීක්ෂණ
npm run test:coverage      # සම්පූර්ණ ආවරණ ද්වාරය (60/60/60/60)

# 3. ගොඩනඟා මූලික පරීක්ෂාව කරන්න
npm run build
npm run test:e2e           # විකල්ප නමුත් නිර්දේශිතයි

# 4. නිකුතුව ජනනය කරන්න (කුසලතාව)
/generate-release-cc

# 5. යෙදවීම සිදු කරන්න (කුසලතාව)
/deploy-vps-both-cc        # හෝ akamai-cc / local-cc

# 6. නිකුතු සාක්ෂි ග්රහණය කරගන්න (කුසලතාව)
/capture-release-evidences-cc

npm විශ්වාසනීය ප්රකාශනය (v3.8.51 සිට පෙරනිමි) — ඉල්ලීම මත අදියරගතව, විකල්ප ක්රමය ලෙස සෘජුව

npm-publish.yml පෙරනිමියෙන් npm Trusted Publishing (OIDC) හරහා ප්රකාශනය කරයි: stage-npm කාර්යය (github-hosted) එම ධාවනය සඳහා කෙටි කාලීන npm අක්තපත්රයක් ලබාගැනීමට GitHub හි id-token හුවමාරු කරයි — ගබඩාවේ රහස් තුළ දිගුකාලීන npm ටෝකනයක් නැත, 2FA විමසුමක් නැත, ප්රභව සාක්ෂිය අමුණා ඇත. 2FA මඟහැර යන ටෝකන විශ්රාම ගැන්වෙන බැවින් npm දැන් අනුමත කරන මඟහැරීමේ ක්රමය එයයි; එය WS1.3 සහතිකය රඳවා ගනිමින් ව්යාපෘතියට v3.8.48 දක්වා තිබූ සම්පූර්ණයෙන්ම ස්වයංක්රීය ප්රවාහය නැවත ලබා දෙයි (කාන්දු වූ ටෝකනයකට තනිව ප්රකාශනය කළ නොහැක — ටෝකනයක්ම නොමැත).

එක් වරක් පමණක් සිදු කරන සැකසුම (හිමිකරු): npmjs.com → omniroute පැකේජය → Settings → Trusted Publisher → GitHub: හිමිකරු diegosouzapw, ගබඩාව OmniRoute, කාර්ය ප්රවාහය npm-publish.yml (පරිසරය: කිසිවක් නැත). එය පවතින තෙක් ස්වයංක්රීය පියවර ENEEDAUTH සමඟ අසාර්ථක වේ: publish_mode=staged (පහත) හෝ direct සමඟ නැවත dispatch කරන්න.

අදියරගත ප්රකාශනය (ඉල්ලීම මත — publish_mode=staged)

npm-publish කාර්ය ප්රවාහය තවදුරටත් සෘජුව ප්රකාශනය නොකරයි: එය ඇසුරුම් කළ tarball එක (check:pack-boot) ආරම්භ කර පසුව npm stage publish ධාවනය කරයි — නියමිත bytes registry එකෙහි රඳවා තබන අතර, හිමිකරු අනුමත කරන තෙක් ඒවා ස්ථාපනය කළ නොහැක. මානව 2FA ද්වාරය සාක්ෂියට පෙර නොව, ඉන් පසුවට ගෙන ගොස් ඇත.

කාර්ය ප්රවාහය හරිත වූ පසු හිමිකරුගේ ප්රවාහය:

  1. npm stage list omniroute — අදියර id එක සොයා ගන්න (එය කාර්ය ප්රවාහ සාරාංශයේද මුද්රණය වේ).
  2. අදියරගත bytes තහවුරු කරන්න (නිර්දේශිතයි): 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) පිරිසිදු container එකක් තුළ පොදු registry එකෙන් ප්රකාශිත අනුවාදය ස්ථාපනය කර එය ආරම්භ කරයි.

හදිසි විකල්ප ක්රමය: publish_mode=direct සමඟ workflow_dispatch භාවිත කිරීමෙන් පැරණි ක්ෂණික npm publish ක්රමය නැවත ලබා ගත හැක (අදියරගත කිරීමම නිසි ලෙස ක්රියා නොකරන්නේ නම් පමණක් භාවිත කර හේතුව සටහන් කරන්න).

එක් වරක් පමණක් සිදු කරන ශක්තිමත් කිරීම (හිමිකරු, npmjs.com): omniroute සඳහා Trusted Publisher එක stage-only ප්රකාරයෙන් වින්යාස කරන්න, එවිට කාන්දු වූ දිගුකාලීන ටෝකනයකට කිසිදු ස්ථානයකින් සෘජුව npm publish කළ නොහැක — CI හට අදියරගත කිරීම පමණක් කළ හැකි අතර, නිකුතුව කළ හැක්කේ හිමිකරුගේ 2FA මඟින් පමණි.

බිඳුණු කෞතුකය සඳහා ක්රියාමාර්ග මාර්ගෝපදේශය (වෙනස් කර නැත): පෙරනිමි ප්රතිචාරය ලෙස npm deprecate omniroute@<bad> "<reason> — use <fixed>" භාවිත කරන්න (මිනිත්තු කිහිපයක් ගනී, ආපසු හැරවිය හැක); npm unpublish භාවිත කළ යුත්තේ පැය 72/යැපෙන්නන්-නොමැති කාල කවුළුව තුළ පමණක් වන අතර කිසිවිටෙකත් පළමු පියවර ලෙස නොවේ. 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 පැරණි build එකක් මත තබා නොයන්න. Compose ඉක්මන් ආරම්භක මාර්ගෝපදේශ :latest භාවිත කරයි; GitOps විසින් X.Y.Z වෙත pin කිරීම දිගටම කළ යුතුය. 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). ඉලක්කය: මිනිත්තු ~33ක් වෙනුවට ≤15min තුළ හරිත තත්ත්වයට ළඟා වීම.

ඇතුළත් වීමේ ප්රතිපත්තිය — හතරම අවශ්යයි (Chromium/VS Code/Node හදිසි මාර්ග ආදර්ශයට ගෙන ඇත):

  1. බරපතළකම: නිෂ්පාදන පද්ධතිය ක්රියා විරහිතයි — ප්රකාශිත artifact එකක් ආරම්භයේදී බිඳ වැටීම / ආරක්ෂක නිවැරදි කිරීමක් / නිකුතුව භාවිත කරන සෑම පරිශීලකයෙකුම බලපෑමට ලක්වීම. "වැදගත්" යනු "ක්රියා විරහිත" නොවේ.
  2. අධිකාරිය: hotfix ලේබලය යොදන්නේ repository හිමිකරු පමණි. ලේබලයම අනුමැතියයි — campaign PR එකකදී කිසිවිටෙක ස්වයං සේවාවක් ලෙස මෙය භාවිත නොකරන්න.
  3. සාක්ෂි: PR body එකේ පෙර සම්පූර්ණයෙන්ම හරිත වූ බර ධාවනයට (මඟහැරුණු jobs මඟින් නැවත වලංගු කිරීමට නියමිත suite එක) සහ නිවැරදි කිරීමේම අසමත්-වී-පසුව-සමත් වූ පරීක්ෂණයට සබැඳි ඇතුළත් වේ.
  4. විෂය පථය: cherry-pick පමණි — අවම නිවැරදි කිරීම පමණක්; refactor කිරීම් හෝ අමතර වෙනස්කම් නැත.

මඟහැරුණු coverage/ratchet පෘෂ්ඨය release branch එකේ මීළඟ සම්පූර්ණ ධාවනයෙන් නැවත වලංගු කරයි (අඛණ්ඩ release-green) — මෙම මාර්ගය මඟහරින්නේ රැඳී සිටීම පමණි, වලංගු කිරීම කිසිවිටෙක නොවේ. පරීක්ෂණ-පමණක් ඇති වෙනස්කම් (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 <patch|minor|major> ධාවනය කරන්න (Claude Code skill)
    • package.json, electron/package.json අනුවාද ඉහළ නංවයි
    • අවසන් tag එකෙන් පසු git commits මත පදනම්ව CHANGELOG.md නැවත ජනනය කරයි
    • README.md badges යාවත්කාලීන කරයි
  • CHANGELOG.md අතින් සමාලෝචනය කර අවශ්ය නම් commit messages පිරිසිදු කරන්න
  • CHANGELOG.md හි නවතම semver කොටස package.json අනුවාදයට සමාන බව තහවුරු කරන්න
  • ඉදිරි වැඩ සඳහා ## [Unreleased] පළමු 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 — චක්රීය dependencies නැත
  • npm run check:any-budget:t11 — නියමිත සීමාව තුළයි
  • 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: පොදු routing strategies 19ම තේරීමේ තීරණ නියත ලෙස සනාථ කරයි; combo routing, strategy resolution හෝ fallback logic වෙනස් කරන විට ධාවනය කරන්න)
  • RUN_COMBO_LIVE=1 npm run test:combo:liveවිකල්ප/අතින් (දොරටුවකින් පාලනය වන සැබෑ-upstream smoke පරීක්ෂණය; VPS root@192.168.0.15 වෙතින් කියවීමට-පමණක් හැකි DB snapshot එකක් ලබා ගනී; සැබෑ providers වෙත ප්රවේශ වන අතර credits වැය වේ; CI තුළ කිසිවිටෙක ධාවනය නොවේ; දොරටුව නොමැති විට ගැටලුවකින් තොරව මඟහරී)
  • npm run test:combo:live:vpsවිකල්ප/අතින් (Phase-3 VPS සජීවී smoke පරීක්ෂණය: සාමාන්ය Node ESM හරහා සජීවී .15 server එකට එරෙහි HTTP අවස්ථා 7ක්; 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 job එකෙන් ආවරණය වේ).
    • release branches push කිරීමට පෙර npm run test:unit අතින් ධාවනය කරන්න.

hook එකක් අසමත් වුවහොත්: මූලික ගැටලුව නිවැරදි කරන්න, --no-verify භාවිතයෙන් මඟ නොහරින්න.

සම්මත Commits

නිකුතුවට අදාළ සියලු commits type(scope): subject ආකෘතිය අනුගමනය කළ යුතුය.

වලංගු types: feat, fix, refactor, docs, test, chore, perf, style, ci

වලංගු scopes: db, sse, oauth, dashboard, api, cli, docker, ci, mcp, a2a, memory, skills, cloud-agent, guardrails, compression, auto-combo, resilience, providers, executors, translator, domain, authz

අනුකූලතාව බිඳ දමන වෙනස්කම්: BREAKING 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.exampledocs/reference/ENVIRONMENT.md අතර env ගිවිසුම නොවෙනස්ව පවතී
  • npm run check:doc-links 0 සමඟ අවසන් වේ — ප්රතිව්යුහගත කිරීමෙන් පසු බිඳුණු අභ්යන්තර markdown යොමු නොමැත
  • ගබඩාකරණ/runtime වෙනස්වීම් සඳහා 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 යාවත්කාලීන කර ඇත
  • නව විශේෂාංගය module එකක් නම්: වෙන් කළ docs/<MODULE>.md ගොනුවක් පවතී
  • පසුගාමී අනුකූලතාව බිඳින වෙනසක් නම්: docs/guides/TROUBLESHOOTING.md තුළ සංක්රමණ සටහනක් ඇත

i18n

  • npm run i18n:check 0 සමඟ අවසන් වේ — පරිවර්තන තත්ත්වය (.i18n-state.json) මූලාශ්ර ලේඛන සමඟ සමමුහුර්තව ඇත (strict mode තුළ වෙනස්වී ඇති මූලාශ්ර නොමැත; අවසන් මොහොතේ ලේඛන සංශෝධන සඳහා warn-mode උපදේශනය පිළිගත හැකි නමුත් tag කිරීමට පෙර එය 0 විය යුතුය)
  • npm run i18n:check-ui-coverage 0 සමඟ අවසන් වේ — සෑම UI locale එකක්ම 80% ආවරණ අවම සීමාවට හෝ ඊට ඉහළින් ඇත
  • npm run i18n:sync-ui:dry locale 42 සියල්ල පුරා අස්ථානගත keys 0ක් වාර්තා කරයි
  • මූලාශ්ර ඉංග්රීසි ලේඛන වෙනස් වූයේ නම්, tag කිරීමට පෙර npm run i18n:run ධාවනය කරන්න (.env තුළ OMNIROUTE_TRANSLATION_API_KEY අවශ්ය වේ)
  • සුළු වෙනස්කම් නම් පරිවර්තන දායකත්ව ඊළඟ නිකුතුව දක්වා කල් දැමිය හැකිය (CHANGELOG තුළ සටහන් කරන්න)

දත්ත සමුදා සංක්රමණ

  • src/lib/db/migrations/ තුළ නව ගොනු තිබේ නම්:
    • සෑම migration එකක්ම idempotent වේ (CREATE TABLE IF NOT EXISTS, ආදිය)
    • Migrations transactions තුළ ආවරණය කර ඇත
    • නිවැරදිව අංකනය කර ඇත (අනුපිළිවෙළේ හිඩැස් නොමැත)
  • නැවුම් ස්ථාපනයක පරීක්ෂා කරන්න: ~/.omniroute/omniroute.db මකා npm run dev ධාවනය කරන්න
  • පවතින ස්ථාපනයක පරීක්ෂා කරන්න: DB උපස්ථ කර, migration එක ධාවනය කර, schema එක සත්යාපනය කරන්න
  • migration එක tables නැවත ලියන්නේ නම් WAL ගොනු (-wal, -shm) නිවැරදිව හසුරුවා ඇත

Provider නාමාවලිය (Zod මඟින් වලංගු කළ)

  • src/shared/constants/providers.ts Zod schema එක පූරණ අවස්ථාවේ වලංගුය
    • සියලු providers සතුව අවශ්ය fields (id, label, kind, ආදිය) ඇත
    • නව නොමිලේ providers සඳහා freeNote සපයා ඇත
    • OAuth providers සඳහා src/lib/oauth/constants/oauth.ts තුළ oauthConfig ලියාපදිංචි කර ඇත
  • නව provider එකක් එක් කළේ නම්: open-sse/executors/ තුළ අදාළ executor එක ඇත
  • OpenAI නොවන ආකෘතියක් නම්: open-sse/translator/ තුළ translator එක ඇත
  • Models open-sse/config/providerRegistry.ts තුළ ලියාපදිංචි කර ඇත
  • tests/unit/ තුළ unit tests provider වර්ගීකරණය සහ routing ආවරණය කරයි

Desktop (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 එක යාවත්කාලීන කර ඇත

Build සැකැස්ම

Repository එක එකිනෙකට වෙනස් output directories තුනක් භාවිත කරයි — ඒවා කිසිවිටෙක පටලවා නොගන්න:

Directory අරමුණ Track කර තිබේද?
src/ යෙදුම් මූලාශ්රය (TypeScript / TSX) ඔව්
.build/ Build අතරමැදි ගොනු — next build output (distDir) නැත (gitignored)
dist/ බෙදාහැරිය හැකි npm bundle එක — assembleStandalone මඟින් සකසන ලදී නැත (gitignored)

මෙහෙයුම්කරුගේ සටහන: දුරස්ථ VPS image directory එක /usr/lib/node_modules/omniroute/app/ ලෙසම පවතී. වෙනස් වූයේ repository එක තුළ ඇති build output එක පමණි (app/dist/). Deploy skills මඟින් 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/ වෙත පිටපත් කරයි)
  └─ writes 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 HEAD
  • npm run check:pack-artifact පිරිසිදුය — app.__qa_backup, scripts/scratch, package-lock.json, හෝ වෙනත් local residue නොමැත
  • Build කිරීමෙන් පසු dist/server.js පවතී

Tag කිරීම සහ නිකුතුව

  • /generate-release-cc ධාවනය කරන්න (Claude Code skill):
    • vX.Y.Z tag එක සාදයි
    • Tag එක සහ branch එක push කරයි
    • Changelog අන්තර්ගතය සමඟ GitHub Release එකක් විවෘත කරයි
    • Electron installers අමුණයි (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 ප්රවාහය භාවිත කරයි — npm pack නැත, npm i -g නැත:

  • ඉලක්කයට ගැළපෙන 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 එක ධාවනය විය යුතුය (ප්රධාන 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)
    • නව විශේෂාංගවල WebP තිර රූ/පටිගත කිරීම් ග්රහණය කරයි
    • ඒවා නිකුතු සටහන් / බ්ලොග් සටහනට අමුණයි
  • නිකුතු නිවේදනය සමඟ GitHub Discussions / Discord යාවත්කාලීන කරන්න
  • ඊළඟ අනුවාදය සඳහා milestone එකක් විවෘත කරන්න
  • තීරණාත්මක නම්: යෙදුම තුළ බැනරය සඳහා සාකච්ඡාව අමුණා තබන්න හෝ news.json තුළ පළ කරන්න

Radar පොදු දියත් කිරීමේ දොරටුව

Radar නිවේදනය චේතාන්විතව active: false සමඟ commit කර ඇත. පහත සෑම අයිතමයක් සඳහාම සාක්ෂි ලබා දීමෙන් පසු සක්රිය කිරීම වෙනම වෙනස් කිරීමකි:

  • අට්ටිගත කළ සියලුම Radar PR ඒකාබද්ධ කර ඇති අතර release-tip CI සාර්ථකය
  • පෙරනිමියෙන් RADAR_ENABLED තවමත් අක්රියව තබා OSS Radar මාර්ග deploy කර smoke-test කරන්න
  • නම් කළ Radar සත්කාරකයේ GET /planos, /termos, /privacidade, සහ /reembolso smoke-test කරන්න
  • ක්රියාකරුගේ අනන්යතාව/සම්බන්ධතා තොරතුරු/ලිපිනය සහ හිමිකරු විසින් අනුමත කළ නීතිමය සමාලෝචනය පුද්ගලික සේවාව තුළ සටහන් කරන්න
  • Stripe Checkout සහ අත්සන් කළ webhook එක පරීක්ෂණ ප්රකාරයේදී පමණක් අත්හදා බලන්න
  • අනුමත යවන්නා/වසම භාවිතයෙන් සංකේතනය කළ ගනුදෙනුමය ඊමේල් බෙදාහැරීමක් අත්හදා බලන්න
  • උපස්ථ ප්රතිසාධනය සහ අධීක්ෂණය කළ, අයවැය-සීමා කළ පර්යේෂණ ධාවනයක් සාර්ථක බව තහවුරු කරන්න
  • පරිත්යාග සාක්ෂි පිළිගැනීමට පෙර BRL/PIX සමාලෝචන ප්රතිපත්තිය අනුමත කරන්න
  • ඉහත දොරටු සම්පූර්ණ කිරීමෙන් පසුව පමණක් පොදු Checkout සක්රිය කර, අනතුරුව නව news.json ID එක සක්රිය කරන්න
  • Home බැනරය දේශීයකරණය කළ පෙළ භාවිත කරන බවත්, පැරණි ID එකක් ඉවත දැමූ පසු නව ID එකක් නැවත දිස්වන බවත් තහවුරු කරන්න

Embedded Services ස්මෝක් පරීක්ෂාව (v3.8.4+)

Embedded services වෙනස්කම් ඇතුළත් ඕනෑම නිකුතුවක් නිකුත් කිරීමට පෙර, පහත දෑ තහවුරු කරන්න:

නව-DB ආරම්භය (migration ගැටුම් හඳුනාගනී — v3.8.4 hotfix පසු එක් කරන ලදී)

  • DATA_DIR=$(mktemp -d) npm start & — ආරම්භය සඳහා තත්පර 10ක් රැඳී සිටින්න
  • curl -s http://127.0.0.1:20128/api/services/9router/status | jq '.tool' මඟින් "9router" ආපසු ලබා දෙයි (404 හෝ 500 නොවේ). migration 071_services.sql යෙදී ඇති බව සහ පේළිය seed කර ඇති බව තහවුරු කරයි.
  • 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 හරහා අන්තයේ සිට අන්තයට routing)
  • GET /dashboard/providers/services/9router/embed/dashboard මඟින් proxy එක තුළ 9Router ස්වදේශීය UI එක render කරයි (සෘජු 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 නොමැති පරිසරයක ස්ථාපනය කිරීමේදී, හිතකාමී (stack trace නොවන) දෝෂ පණිවිඩයක් සමඟ 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 මත ආරම්භ වේ (systray2 ~/.omniroute/runtime/ තුළ ස්ථාපනය කර ඇත)
  • omniroute --tray Linux මත ආරම්භ වේ (DISPLAY අවශ්යයි; එය සකසා නොමැති නම් සුමට දෝෂයක්)
  • omniroute --tray Windows මත ආරම්භ වේ (PowerShell NotifyIcon, අමතර binaries නොමැත)
  • omniroute config tray enable මඟින් ස්වයංක්රීය ආරම්භක ඇතුළත් කිරීමක් සාදයි; disable කිරීමෙන් එය ඉවත් කරයි
  • npm install -g omniroute@<this-version> මාරාන්තික පිටවීමකින් තොරව postinstall ධාවනය කරයි
  • යාවත්කාලීන කිරීමේ මාර්ගය විකල්ප dependencies රඳවා ගනී: omniroute update --apply සහ ස්වයංක්රීය යාවත්කාලීනකරණය npm install -g … --include=optional ධාවනය කරන බැවින් optionalDependencies (better-sqlite3, keytar, tls-client, සහ llmlingua SLM stack එක: @atjsh/llmlingua-2@2.0.5, js-tiktoken) යාවත්කාලීනයකින් පසුවත් පවතී. ultra modelPath SLM tier එකටද tinybert model එක අවශ්ය වන අතර, පළමු භාවිතයේදී එය ${DATA_DIR}/models/llmlingua වෙත ස්වයංක්රීයව බාගත වේ. ඉන්පසු Postinstall (scripts/build/colocateOptionals.mjs) මඟින් SLM විකල්ප closure එක dist/node_modules තුළ එකම ස්ථානයකට ගෙන එන බැවින් worker එක තනි @huggingface/transformers ^4.2.0 instance එකක් resolve කරයි — ස්වාධීන trace bundles තුළ අඩංගු වන්නේ transformers පමණක් වන අතර, ගතිකව import කරන ලද optionals අඩංගු නොවේ. එබැවින් මෙය නොමැතිව worker එක root එකේ transformers සමඟ llmlingua-2 පූරණය කරන අතර SLM tier එක නිහඬව fail-open වේ.
  • .env නොමැතිව omniroute status ක්රියා කරයි (CLI token මාර්ගය, loopback පමණි)
  • curl http://localhost:20128/api/shutdown මඟින් 401 ආපසු ලබා දෙයි (සැමවිටම ආරක්ෂිත route එක)
  • curl -H "host: evil.com" http://localhost:20128/api/mcp/sse මඟින් 401 ආපසු ලබා දෙයි (loopback ආරක්ෂකය)
  • පළමු ධාවනයේදී SQLite runtime එක bundled වෙත resolve වේ (bundled binary එක platform එක සඳහා වලංගුය)
  • node_modules/better-sqlite3 මකා දැමූ විට SQLite runtime එක runtime වෙත fallback වේ
  • Smart MCP filter එක සත්ය playwright-mcp browser_snapshot ප්රතිදානය සම්පීඩනය කරයි (≥50% අඩු කිරීමක්)
  • skills/omniroute*/SKILL.md ගොනු 10ම raw GitHub URL හරහා පොදු ලෙස ලබාගත හැක
  • නව සැකසුමකදී onboarding wizard එක "එය ක්රියා කරන ආකාරය" tier සංචාර පියවර පෙන්වයි
  • මුල් dashboard එකේ tier coverage widget එක වින්යාස කළ/සක්රිය ගණන පෙන්වයි

ආපසු පෙරළීම

නිකුතුවේ බරපතළ ගැටලුවක් තිබේ නම්:

  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 වෙත සෘජුව commit නොකරන්න
  • කිසිවිටෙකත් main හෝ release/* ශාඛා වෙත git push --force භාවිත නොකරන්න
  • කිසිවිටෙකත් Husky hooks (--no-verify) මඟ නොහරින්න
  • කිසිවිටෙකත් රහස්, ප්රවේශ අක්තපත්ර, හෝ .env ගොනු commit නොකරන්න
  • ආවරණය ≥60/60/60/60 (ප්රකාශ/පේළි/ශ්රිත/ශාඛා) ලෙස පවත්වා ගත යුතුය
  • src/, open-sse/, electron/, හෝ bin/ තුළ නිෂ්පාදන කේතය වෙනස් කරන විට සෑමවිටම පරීක්ෂණ ඇතුළත් කරන්න හෝ යාවත්කාලීන කරන්න

ස්වයංක්රීය සමමුහුර්ත පරීක්ෂාව

PR එකක් විවෘත කිරීමට පෙර ලේඛන සමමුහුර්ත ආරක්ෂකය දේශීයව ධාවනය කරන්න:

npm run check:docs-sync

CI ද මෙම පරීක්ෂාව .github/workflows/ci.yml තුළ (lint කාර්යය) ධාවනය කරයි.