Files
OmniRoute/changelog.d
Xiangzhe 66f97968c4 fix(i18n): complete Vietnamese translations for recently added UI strings (#9985)
Two gaps left the vi locale red on the release tip:

- 6cd4d38e21 (#11069) added 14 providers.harImport* keys (HAR-import UX
  for the m365 Copilot web flow) to en.json without vi translations, so
  key parity, ICU placeholder and ICU parse tests all failed on the same
  missing set. Added the 14 Vietnamese translations with the {minutes}
  ICU placeholder preserved verbatim.
- agentSkills.catalog.omni-webhooks.description carried a literal
  __MISSING__: fallback; replaced with a real Vietnamese translation,
  keeping technical event names (request.completed, request.failed,
  quota.exceeded) untouched.

tests/unit/i18n-vi-completeness.test.ts: 5/5 green.
2026-08-22 15:17:14 -03:00
..

changelog.d/ — changelog fragments

A PR never edits CHANGELOG.md directly during the cycle. Instead it adds ONE new file here — its changelog entry as a fragment. Two PRs never touch the same file, so changelog merge conflicts (the "CHANGELOG-eat" cascade that forced a re-sync push + full CI re-run after every sibling merge) are structurally impossible.

Convention

Directory Aggregates under
features/ ### ✨ New Features
fixes/ ### 🐛 Bug Fixes
maintenance/ ### 📝 Maintenance
  • Filename: <PR-number>-<short-slug>.md (e.g. fixes/6700-dockerfile-better-sqlite3.md). The PR number prefix keeps aggregation order deterministic.
  • Content: the exact bullet line(s) that should land in CHANGELOG.md, starting with - . Multi-line (continuation) bullets are fine. Keep the repo's credit format: (#PR — thanks @user).
  • One fragment per PR (rarely more, e.g. a PR that both fixes and adds).

Example

changelog.d/fixes/6496-cloudflare-relay-worker-syntax.md:

- **fix(providers):** Cloudflare relay Worker deploys use Service Worker syntax with `body_part` metadata ([#6496](https://github.com/diegosouzapw/OmniRoute/pull/6496)) — thanks @SeaXen

Aggregation

The release captain (or /generate-release) folds all fragments into CHANGELOG.md and deletes them:

node scripts/release/aggregate-changelog.mjs            # write + delete fragments
node scripts/release/aggregate-changelog.mjs --dry-run  # preview only

Fragment well-formedness is enforced by npm run check:changelog-integrity (the same gate that guards against CHANGELOG-eat for legacy direct edits).