sync-changelog
GitHub在版本发布后,将CLI包的更新同步至中英文文档站,翻译英文增量内容,创建专用分支并提交PR。
Trigger Scenarios
Install
npx skills add MoonshotAI/kimi-code --skill sync-changelog -g -y
SKILL.md
Frontmatter
{
"name": "sync-changelog",
"description": "Use after a release succeeds, when maintainers need to sync apps\/kimi-code\/CHANGELOG.md into docs\/en\/release-notes\/changelog.md and docs\/zh\/release-notes\/changelog.md, then open a PR on a dedicated branch."
}
Sync Changelog
Overview
kimi-code uses changesets for versioning. Each package gets its own CHANGELOG.md. The user-facing CLI package, @moonshot-ai/kimi-code, writes its changelog here:
apps/kimi-code/CHANGELOG.md
This file is the only upstream source for the documentation-site changelog. Internal package changelogs such as packages/*/CHANGELOG.md do not go into the documentation site.
After the release flow finishes (Release PR merged → Version Packages completed → npm publish succeeded), maintainers manually run this skill to copy the new CLI changelog entries into the docs site, translate the English increment into Chinese, wait for an optional human review, then commit on a dedicated branch and open a PR.
When To Use
- A new version has been published to npm.
- The top of
apps/kimi-code/CHANGELOG.mdcontains version blocks that are not yet indocs/en/release-notes/changelog.md. - The
gen-docsflow does not run this automatically; maintainers must explicitly do it after release.
Do not run this before the Release PR is merged. At that point, changesets has not yet written the new version into apps/kimi-code/CHANGELOG.md.
Source And Targets
| File | Role | Edited by |
|---|---|---|
apps/kimi-code/CHANGELOG.md |
Only upstream source, generated by changesets | Never edit manually |
docs/en/release-notes/changelog.md |
English docs changelog; source of truth for docs | This skill |
docs/zh/release-notes/changelog.md |
Chinese docs changelog, translated from English | This skill, following translate-docs |
Core rule: the English docs changelog is the source of truth, and Chinese is translated from English. This matches translate-docs.
Preconditions
Before editing, confirm:
- The released version exists on npm (
npm view @moonshot-ai/kimi-code versions --json) or has a matching GitHub Release tag. - The top of
apps/kimi-code/CHANGELOG.mdis that new version.
If any condition is not true, stop and confirm with the user.
Do not edit or commit directly on main. All sync work happens on a dedicated branch created in step 1.
Workflow
1. Prepare Branch
Start from an up-to-date default branch:
git fetch origin
git checkout main
git pull --ff-only origin main
Before creating the branch, peek at the version range so the branch name matches the newest version being synced:
rg '^## ' apps/kimi-code/CHANGELOG.md | head -5
rg '^## ' docs/en/release-notes/changelog.md | head -5
Name the branch after the newest upstream version that is not yet in the English docs page:
docs/changelog-sync-<newest-version>
Example: syncing 0.2.1 only → docs/changelog-sync-0.2.1.
git checkout -b docs/changelog-sync-<newest-version>
If the branch already exists locally or on the remote, stop and confirm with the user instead of reusing it.
2. Find The Version Range
Use the same version lists from step 1. Confirm:
- First sync: copy all upstream version blocks into the English page.
- Incremental sync: copy every upstream version block above the latest version already present in the English page.
Use upstream order: newest version first.
3. Strip Decorations And Extract Entry Text
Upstream entries look like this:
- [#317](https://github.com/...) [`2f51db4`](https://github.com/...) Thanks [@user](https://github.com/...)! - Clean up lint warnings ...
Changesets may add a Thanks ...! credit, but it must be removed every time. Keep:
- Version headings such as
## 0.2.0. - Only the body text of each entry, after the PR/hash decoration and any
Thanks ...!credit have been removed.
Remove:
- The upstream H1
# @moonshot-ai/kimi-codebecause the docs page already has# Changelog. - Changesets subheadings such as
### Patch Changes,### Minor Changes, and### Major Changes. - PR links such as
[#317](...). - Commit hash links such as
[`2f51db4`](...). - The
Thanks [@user](...)!credit, including the multi-author formThanks [@a](...), [@b](...)!. Drop the wholeThanks ...!segment every time, regardless of whether the feature is enabled.
After stripping, each entry is - <body text>.
Drop SDK-only and provider-internal detail. This changelog serves @moonshot-ai/kimi-code CLI and web users. Within an entry, keep only what CLI/web users can perceive, and remove sentences that document internals instead of user-visible behavior. Apply this on both the English and Chinese pages:
- Drop sentences about how the SDK maps a capability, builds model aliases, or exposes a flag through an API such as
getExperimentalFeatures()— that belongs in the SDK changelog, not here. - Drop provider / wire-format implementation mechanics (XML markers like
<tools_added>, protocol field explanations, "the wire protocol is unchanged", cache-hit mechanics) unless they are the behavior a user perceives. - Drop hook/event payload mechanics — clauses about what extra fields an event payload carries or what an event reports in a specific case (for example "enrich hook payloads with the session title and client type", "
SessionEndreportsarchivewhen a session is archived"). Keep the new events or capability itself and how to configure it. - Keep the user-facing effect and any constraints users must follow (for example "question texts must be unique").
Do not change facts or drop a real user-facing behavior — only trim the internal-only scaffolding. For over-long, internal-heavy entries, this trim applies on the English page too, not only in translation.
Upstream language rule: gen-changesets requires changelog entries to be English. If the upstream CLI changelog contains a non-English entry, stop and report it to the user. Do not silently rewrite it while syncing docs.
Public-text rule: do not copy real internal endpoints, key names, account names, or service names into docs changelogs. Replace examples with neutral placeholders such as example.com, example.test, or YOUR_API_KEY while preserving the user-visible meaning.
4. Merge, Deduplicate, And Classify Entries
Before classifying, merge related entries and drop redundant ones from the user-facing changelog:
- Curate for end users: collapse low-signal entries into one catch-all line. The docs changelog is the only curated, user-facing outlet; the full entry list always remains in the upstream package changelog, so hiding detail here loses nothing. Apply two gates to every candidate entry. Gate 1, the reader-action test: after reading this, is there something the reader must do, or something they must re-evaluate? Gate 2, the channel test: is the changelog the only channel that can deliver this? The changelog is the channel of last resort — when the product itself surfaces the information in context, at the moment of need, to exactly the affected users, the entry is redundant no matter how real the improvement is. "Surfaced" means pushed into the user's path, not merely present on screen: an event-triggered card, prompt, or post-install screen forces the encounter, while a toggle, menu item, command, or settings page only waits to be found. Users do not explore — a capability that lives only in ambient UI is effectively undiscoverable, so the changelog must announce it. What in-product surfacing cannot deliver: hidden controls (env vars, config keys, opt-out flags nobody would find unprompted), invalidations of existing habits or expectations (in-product discovery comes as confusion), and capabilities users would not know to seek. An entry that fails either gate folds. Anchor both gates to the changelog's reader, never to the bug's victim: someone who hit a loud failure does not need the changelog to confirm the fix — the product working again is the notification — and a reader who never hit it gets nothing from the entry.
Features: keep when users would try it or must react to it — new capabilities create demand readers did not know to seek. Collapse only behavior that takes effect solely behind an experimental flag.Polish: keep only must-react items — a notification users may want to turn off, a behavior change to a command they already use, a default flip with an opt-out. Fold improved experiences the product surfaces in context (recovery cards, post-install guidance, progress or status displays): they are discovered at the moment of need, and pre-reading about them helps nobody. Also fold subtle or transient tweaks (status wording, spacing, animations) and internal-behavior adjustments — nobody acts on them.Bug Fixes: keep only behavior-change fixes — the fix changes how something works going forward, so readers must update a habit, a config, or a widely-adopted workaround. Everything else folds, for one of two opposite reasons. Loud failures (crashes, refusals, interrupted runs): the fix itself notifies whoever was hit — announcement value falls as bug visibility rises. Silent past damage (dropped data, wrong results the user never noticed): the changelog cannot repair the past, and in this product the notice names no locatable instance and no realistic action — users cannot enumerate which old sessions were affected, and they do not audit finished sessions; a "some past outputs may be wrong" line is anxiety without an outlet, not diligence. The rare exception is a retrospective notice with a concrete, locatable action (for example rotating a token after a credential-handling flaw); keep those. Never keep a fix merely because it was severe, and never keep one because the bug class feels important.- Do not grade entries by engineering importance. Severity and effort are already represented upstream; the curated changelog is not a credit ledger — its only job is to change what the reader does or knows.
- Density, not quota. Standalone sections stay short so the changelog actually gets read — as a default, expect about 2 Polish and 3 Bug Fixes entries per version, while
Featuresis gated by the test alone and has no count. The defaults yield whenever more entries genuinely pass the reader-action test: keep them and flag the overflow for the human reviewer; never fold a qualifying entry just to hit the number, and never pad a section to reach it. The reviewer owns the final cutoff — the curator's job is to surface the borderline calls, not to resolve them silently. - Everything else collapses into a single catch-all bullet placed last under
Bug Fixes:Fix several known issues.When entries beyond fixes were also collapsed, useFix several known issues and make various refinements.instead (Chinese:修复了一些已知问题。/修复了一些已知问题,并做了若干细节优化。). End the catch-all line with a pointer to the upstream file so folded entries stay reachable, phrased as a separate short sentence —See the [changelog on GitHub](https://github.com/MoonshotAI/kimi-code/blob/main/apps/kimi-code/CHANGELOG.md) for more technical entries.(Chinese:更详细的变更记录见 [GitHub](https://github.com/MoonshotAI/kimi-code/blob/main/apps/kimi-code/CHANGELOG.md)。). Link the file itself, never a per-version anchor — GitHub's generated heading anchors are fragile. Keep the pointer wording restrained ("more technical entries"): upstream only contains changes that received a changeset, so never claim the list is complete. - If no fix survives, the
Bug Fixessection is the catch-all line alone; if the whole version has no user-facing change, the version block is a single section with that line. Match the catch-all to what was folded — never claim fixes that did not happen: when the folded entries include fixes, use the forms above underBug Fixes; when everything folded is polish or internal work, place the catch-all underPolishasMake several refinements and internal improvements.(Chinese:做了若干细节优化和内部改进。).
- Merge micro-tweaks to the same surface. Collapse several small tweaks to the same UI area or feature into one concise entry at the higher level. For example, "change the composer's default height" and "change the composer's default font" merge into "Polish the composer's default styling." Use the most specific common ancestor (composer, settings page, tool card, and so on). Classify the merged entry by its combined effect
- Merge same-surface or same-kind fixes when you have three or more. The
Bug Fixessection tends to accumulate many narrow UI/polish fixes that read as noise when listed one by one. When three or more fixes target the same area (for example several tool cards in the TUI, or the web session/conversation surface) or the same class of problem (for example several "jumping/flickering/collapsing during streaming" fixes), merge them into one higher-level entry. Examples:- "Fix the Bash tool card collapsing...", "Fix the Edit tool card jumping in height...", "Fix the Edit tool card flickering while its result streams in" → "Fix several TUI tool cards jumping, flickering, or collapsing in height when results stream in or end with short output."
- "Fix the collapsed sidebar not hiding...", "Stop the chat history from replaying its entrance animation...", "Fix tool components jumping the conversation when expanded/collapsed" → "Fix several layout and display glitches when switching sessions, including the collapsed sidebar not hiding, the chat history replaying its entrance animation, and tool components jumping the conversation."
- Classify the merged fixes as
Bug Fixes. - Do not over-merge. Leave a fix standalone when it is broad, high-value, or genuinely distinct (for example model/provider tool-calling bugs, session-list corruption, file-completion gaps). Merging is for low-reader-value, similar-shape fixes that read as a wall of similar bullets. A merged fix entry must still pass the standalone test from the catch-all rule above; if the merged group is low-signal too, fold it into the catch-all line instead of listing it.
- Drop server/API plumbing covered by a web entry. If one entry adds a web UI feature (for example, an Archived sessions page) and another entry only adds the server or REST/WebSocket endpoints that exist solely to power that web feature, keep the web UI entry and drop the API entry. CLI and web users perceive the web page; the backing API is implementation detail with no independent user value on this changelog. Keep the API entry only when it has independent user value — a new public endpoint that SDK or server consumers call directly, or a capability usable outside the web feature. When unsure, keep both and let the reviewer decide.
The docs changelog uses five section types:
| English section | Chinese section | Meaning |
|---|---|---|
### Features |
### 新功能 |
New user-facing functionality, such as a new command, flag, mode, or capability that did not exist before |
### Polish |
### 优化 |
User-visible improvements to existing functionality, including UX adjustments, behavior tweaks, and performance improvements that are not fixes or new capabilities |
### Bug Fixes |
### 修复 |
Fixes for behavior that was broken |
### Refactors |
### 重构 |
Internal changes with no user-visible behavior change, including build, CI, tests, dependency cleanup, and internal renames |
### Other |
### 其他 |
Anything that does not fit above, such as CDN/endpoint swaps and docs-related artifacts |
With the catch-all rule above, Refactors and Other rarely appear in newly synced versions: entries with no user-perceivable effect fold into the catch-all, and an entry that does change user-perceivable default behavior (for example an engine default flip with an opt-out flag) is classified by that effect, usually Polish. Reserve Other for genuinely unclassifiable but user-facing entries. Older versions keep whatever sections they already have — do not rewrite history.
Classification process:
- Classify from the stripped entry text first.
- If unclear, inspect the related commit or PR:
- Use the stripped commit hash with
git show <hash>. - Or use the PR number with
gh pr view <NNN>.
- Use the stripped commit hash with
- If it is still unclear, put it in
Other. Do not guess or force entries intoFeatures.
Features vs. Polish: ask whether the entry introduces something the user could not do before. If yes (new command, flag, mode, viewer, or capability), use Features. If it only improves an existing surface (a UI panel that already existed, an existing prompt, an existing tool card, an existing payload pipeline), use Polish. Verbs like Add do not automatically mean Features — a small visual addition to an existing UI is still polish.
Default-behavior changes: changing the default value of an existing capability (for example flipping a feature on by default) is usually Polish, because the capability already existed. Use Features only when the new default materially changes the out-of-box experience for most users in a way they could not get before. When genuinely ambiguous, flag it and confirm with the reviewer rather than guessing.
Keyword hints:
- Features:
Add ... command/flag/option/mode/viewer,Introduce,Support,Allow,Enable,Implement,New ... command/flag/option - Bug Fixes:
Fix,Resolve,Correct,Address,Prevent ... from,Stop ... from,... no longer ... - Polish:
Polish,Optimize,Improve,Enhance,Speed up,Reduce,Cap,Shorten,Wrap,Clarify,Tweak,Adjust,Offload,Show ... in existing surface, performance and UX adjustments to existing features - Refactors:
Refactor,Rename,Clean up,Simplify,Remove unused,Migrate to,Unify,Restructure,Internal, dependency bumps, pure CI/build/test changes - Other: docs artifacts, CDN/endpoint switches, anything that genuinely fits no other section
Within each version, section order is:
Features → Polish → Bug Fixes → Refactors → Other
Omit empty sections. Within each section, order entries by reader value, not upstream order:
- Put the most valuable, obvious, and larger changes first.
- Prefer broad user-visible features, workflow-changing fixes, high-frequency bugs, and large cross-cutting improvements over small polish, narrow edge cases, and internal cleanup.
- Within
Polish, put directly user-visible UX or performance improvements (something users can see or feel) before protocol or internal-behavior adjustments (something that makes the model or pipeline behave more reliably but is invisible to users). - If entries have similar value, preserve upstream order.
Do not reword or exaggerate entries just to make them look more important; only reorder existing entries.
5. Write The English Page
Never change the English page header:
# Changelog
This page documents the changes in each Kimi Code CLI release.
Insert new version blocks immediately after the header paragraph and before the previous latest version.
Every version heading must carry its release date in parentheses:
## <version> (YYYY-MM-DD)
Take the date from the version's published GitHub Release tag, not from when you run the sync:
git log -1 --format=%cs "@moonshot-ai/kimi-code@<version>"
Use the half-width parenthesis form (YYYY-MM-DD) on the English page. Never invent or guess a date; if the tag is missing, stop and confirm with the user.
Example:
## 0.2.0 (2026-05-26)
### Bug Fixes
- Fix the TUI not restoring the current todo list after resuming a session.
### Refactors
- Clean up lint warnings across the CLI, SDK examples, and bundled runtime code without changing product behavior.
- Update the native release workflow to use current GitHub artifact actions.
Doc links: an entry that changes a documented config surface may end with a pointer to the docs page — see [X](...) for details (Chinese: 详见 [X](...)。). Keep it a real Markdown link into the docs tree with a relative path (for example ../configuration/config-files.md#loop-control). When the link text is a config key or another identifier, code-style the text inside the brackets: loop_control. Never wrap the whole link in backticks — `[loop_control](...)` renders as raw inline code that exposes the relative path instead of a clickable link.
6. Translate The Increment Into Chinese
After updating the English page, translate only the newly added English content into docs/zh/release-notes/changelog.md.
Follow translate-docs, direction en → zh. Changelog direction is English-to-Chinese even though many other docs flows use Chinese-to-English.
Chinese page requirements:
-
Header:
# 变更记录 本页记录 Kimi Code CLI 每个版本的变更内容。 -
Preserve version headings including the release date, but use full-width parentheses on the Chinese page, such as
## 0.2.0(2026-05-26). The date must match the English page; only the parenthesis style differs (half-width()in English, full-width()in Chinese). -
Translate section headings exactly:
### Features→### 新功能### Bug Fixes→### 修复### Polish→### 优化### Refactors→### 重构### Other→### 其他
-
The Chinese page must mirror the English page 1:1 for versions, sections, section order, entry order, and entry counts.
-
Keep the classification and entry order from the English page. Do not reclassify or reorder while translating.
-
Translate only entry body text. Do not add entries that are not present in English.
-
Follow
docs/AGENTS.mdfor Chinese typography: full-width punctuation, spaces between Chinese and English, and the glossary.
Chinese wording style
Structural fidelity does not mean literal translation. The Chinese entries should read like a concise, idiomatic Chinese changelog. Keep the same facts as the English entry, but rephrase for natural Chinese prose.
Guidelines:
- One entry, one sentence. Avoid chaining multiple effects with commas or semicolons. If the English entry is long, split it into shorter sentences or keep only the most important effect.
- Drop SDK-only and provider-internal detail. Apply the trim from step 3 while translating: keep the user-facing effect and required constraints, drop SDK-mapping sentences, provider / wire-format mechanics, and internal XML markers. A long internal entry should collapse to one short Chinese sentence about what the user gets.
- Prefer common changelog verbs: 新增、支持、修复、优化、改进、调整.
- Avoid indirect "through... make..." structures. Do not write "通过 X,使 Y"; prefer direct cause-effect or just state the result.
- Bad:
通过缓存已渲染消息行,使终端在长篇对话中保持响应。 - Better:
缓存已渲染消息行,提升长对话下终端的响应速度。
- Bad:
- Be specific, not vague. Prefer concrete actions over abstract quality words.
- Bad:
加固默认系统提示词和内置工具描述。 - Better:
优化默认系统提示词与内置工具描述,避免 Agent 阻塞后台任务。
- Bad:
- Name concrete files or config keys when it helps clarity.
- Bad:
插件现在可以在其清单中声明 hooks。 - Better:
插件现支持在 kimi.plugin.json 中声明生命周期 hooks。
- Bad:
- Include required argument placeholders in CLI options.
- Bad:
--allowed-host - Better:
--allowed-host <host>
- Bad:
- Keep usage hints to one short clause.
- Bad:
传入 --allowed-host 以允许额外的 host。例如 ... (多句展开) - Better:
例如 kimi web --allowed-host example.com。
- Bad:
- Do not translate technical identifiers: keep command names, flag names, file names, env vars, config keys as-is.
- Keep parallel rhythm within a section. When several entries fix similar web surfaces (layout, animation, sizing), phrase them with a consistent structure (for example 修复 <问题>,现 <行为>) so the section reads as a tidy list rather than a mix of shapes.
Example — translating a feature entry:
English source:
- Add a --allowed-host flag to kimi web that lets extra Host header values pass the DNS-rebinding check, and include allow guidance in the 403 error message. Pass --allowed-host <host> to allow an extra host.
Before (literal, wordy):
- 为 `kimi web` 新增 `--allowed-host` 标志,允许额外的 Host 请求头值通过 DNS 重绑定检查,并在 403 错误消息中包含允许指引。传入 `--allowed-host <host>` 以允许额外的 host。例如 `kimi web --allowed-host example.com`。
After (concise, idiomatic):
- `kimi web` 新增 `--allowed-host <host>` 选项,可将指定 Host 加入 DNS 重绑定白名单;403 错误会提示如何通过 `--allowed-host` 或 `KIMI_CODE_ALLOWED_HOSTS` 放行,例如 `kimi web --allowed-host example.com`。
7. Verify
Review:
git diff docs/en/release-notes/changelog.md docs/zh/release-notes/changelog.md
Check:
- Versions and version counts match between English and Chinese.
- Every version heading carries its release date from the published tag, with half-width parentheses in English and full-width in Chinese.
- Each version has the same section set and order on both pages.
- Each section has the same number of entries on both pages.
- Within each section, the most valuable, obvious, and larger entries appear before smaller or narrower entries.
- Low-signal entries were collapsed into the single catch-all line, placed last under
Bug Fixes— or underPolishwhen nothing folded is a fix (both the reader-action test and the channel test applied); the catch-all wording matches what was folded and never claims fixes that did not happen; section sizes stay within the density defaults (about 2 Polish, 3 Bug Fixes) unless extra qualifying entries were deliberately kept and flagged for review. The catch-all line ends with the upstream changelog pointer (file link, no version anchor). - PR links and commit hashes were stripped.
- No
Thanks ...!credit remains (remove it every time). - Real internal identifiers were replaced with neutral placeholders.
- Doc links are real Markdown links (code-styled text inside the brackets when needed), never wrapped in backticks.
- There are no empty sections.
- Markdown indentation and blank lines are intact.
Then run the docs build:
pnpm --filter docs run build
8. Human Review Checkpoint
After verification passes, before committing, ask the user whether they want to review the sync result. Use AskQuestion with options such as:
- Review first — show the diff and wait for the user to finish checking.
- Skip review, commit and open PR — proceed directly to steps 9 and 10.
If the user chooses review:
-
Show the uncommitted diff:
git diff docs/en/release-notes/changelog.md docs/zh/release-notes/changelog.md -
Summarize synced versions, section counts, and anything that needed manual classification. List every entry folded into a catch-all line (short titles, one line each), any section that exceeds the density defaults, and every borderline call flagged during curation — the reviewer cannot own a cutoff they cannot see.
-
Tell the user to reply when they are done reviewing, or to ask for edits.
-
Do not commit, push, or open a PR until the user explicitly says review is complete, or asks to proceed.
If the user requests edits during review, make the changes, re-run verification from step 7, and return to this checkpoint.
9. Commit
Only run this step when the user skipped review or confirmed review is complete.
Stage only the changelog docs files:
git add docs/en/release-notes/changelog.md docs/zh/release-notes/changelog.md
Use a neutral docs-sync commit message:
docs(changelog): sync <version range> from apps/kimi-code/CHANGELOG.md
Do not create a changeset for changelog docs sync. Docs sync does not enter the bundle.
10. Push And Open PR
Run immediately after step 9.
Push the branch:
git push -u origin HEAD
Create the PR with gh pr create. Title follows Conventional Commits:
docs(changelog): sync <version range> from apps/kimi-code/CHANGELOG.md
Fill in .github/pull_request_template.md. For changelog sync PRs:
- Related Issue: write
N/A — post-release docs maintenance(no issue required). - Problem: the docs-site changelog is behind the published CLI release(s).
- What changed: list synced version(s), note English source + Chinese translation, and mention verification (
pnpm --filter docs run build). - Checklist: check CONTRIBUTING; explain no issue, no tests, no changeset, and that
gen-docsis not needed because this is the dedicated changelog sync flow.
Example body:
## Related Issue
N/A — post-release docs maintenance
## Problem
The docs-site changelog has not yet been synced for `<version range>` after the npm release.
## What changed
- Synced `<version range>` from `apps/kimi-code/CHANGELOG.md` into `docs/en/release-notes/changelog.md`
- Translated the new English increment into `docs/zh/release-notes/changelog.md`
- Verified with `pnpm --filter docs run build`
## Checklist
- [x] I have read the CONTRIBUTING document.
- [x] I have linked a related issue, or explained the problem above.
- [ ] I have added tests that prove my feature works. (N/A — docs-only sync)
- [x] Ran `gen-changesets` skill, or this PR needs no changeset. (No changeset — docs sync is out of bundle)
- [x] Ran `gen-docs` skill, or this PR needs no doc update. (This PR is the dedicated changelog sync)
Return the PR URL to the user when done.
Rules
- The English docs changelog is the source of truth.
- Never edit upstream
apps/kimi-code/CHANGELOG.md. - Do not backfill unreleased
.changeset/*.mddrafts into the docs site. - If upstream wording is wrong, leave upstream alone and fix it in a future changeset.
- Always sync on a
docs/changelog-sync-*branch and open a PR; never push changelog docs sync directly tomain. - Wait for the human review checkpoint before committing, pushing, or opening a PR.
Common Mistakes
| Mistake | Fix |
|---|---|
| Adding entries directly to the English docs page without reading upstream | Use apps/kimi-code/CHANGELOG.md as the source |
| Copying PR links or commit hashes into docs | Strip them; keep only body text |
Leaving the Thanks ...! credit in docs |
Remove it every time, including the multi-author form |
| Leaving near-duplicate micro-tweaks as separate bullets | Merge small tweaks to the same surface into one higher-level entry (e.g. composer height + font → composer's default styling) |
| Listing many narrow fixes to the same surface as separate bullets | When three or more fixes target the same UI area or the same class of problem, merge them into one higher-level fix entry; keep genuinely distinct or high-value fixes standalone |
| Listing low-signal fixes or internal changes as standalone bullets | Collapse them into the single catch-all line (Fix several known issues.) placed last under Bug Fixes; treat the section-size defaults (about 2 Polish, 3 Bug Fixes) as a density guard, not a quota |
| Folding a qualifying entry just to hit the section-size default | The defaults are density guards; keep entries that genuinely pass the reader-action test and flag the overflow for the human reviewer |
| Keeping a fix because it was severe or hard-won | Severity makes the announcement redundant — the fix itself notifies whoever was hit; keep only behavior-change fixes and retrospective notices with a concrete, locatable action |
| Keeping an improvement the product surfaces in context (recovery cards, post-install guidance, progress displays) | The product is the better channel — right users, moment of need; fold it (channel test) |
| Folding a new capability because its control is visible somewhere in the UI | Visible is not discoverable — users do not explore; a toggle, menu item, or settings page that only waits to be found needs the changelog announcement |
| Keeping a silent-impact fix out of diligence (dropped data, wrong results the user never noticed) | The changelog does not repair the past; if the notice names no locatable instance and no realistic action, it is anxiety without an outlet — fold it |
| Overstating the catch-all pointer (for example claiming the upstream changelog is complete) | Keep the pointer restrained — See the [changelog on GitHub](...) for more technical entries.; upstream only contains changes that received a changeset |
Writing Fix several known issues. when nothing folded is a fix |
Never claim fixes that did not happen; all-polish/internal folds go under Polish as Make several refinements and internal improvements. |
| Listing a server/API entry that only backs a web feature already listed | Drop the API entry and keep the web UI entry, unless the API has independent user value |
| Rewording upstream English entries | Upstream is frozen; copy the body text unless the user explicitly asks otherwise |
| Leaving English text untranslated in the Chinese page | The Chinese page must be fully Chinese except preserved technical terms |
| Editing upstream changelog text | Do not edit upstream |
| Losing two-space indentation in multi-line list items | Restore indentation so Markdown lists stay valid |
Copying ### Patch Changes into docs |
Remove changesets headings and classify under Features / Bug Fixes / Polish / Refactors / Other |
| Guessing unclear entries as Features | Inspect commit/PR; if still unclear, use Other |
Treating any Add ... line as Features |
If the entry only adds a small element to an existing UI/surface, use Polish |
| Filing UX or performance tweaks under Other | Use Polish for user-visible improvements to existing functionality |
| Preserving upstream order when a small entry hides a larger change | Reorder within the section so the highest-value, most obvious items appear first |
| Reclassifying entries while translating | Chinese classification must mirror English |
| Leaving empty sections | Delete sections with no entries |
| Putting everything under Other for convenience | Classify what can be classified first |
| Translating tool names, command names, or config keys | Keep them as written |
| Wrapping a whole doc link in backticks | Code-style the link text inside the brackets instead, so the link stays clickable: loop_control |
| Keeping hook/event payload-mechanics clauses | Drop what an event reports or carries; keep the new capability and how to configure it |
| Creating a changeset for docs sync | Do not create one |
Committing or pushing directly on main |
Create docs/changelog-sync-<version>, commit there, then open a PR |
| Committing or opening a PR before the user skips review or confirms review is done | Wait at the human review checkpoint |
| Using curly quotes or half-width Chinese punctuation | Follow docs/AGENTS.md |
| Omitting the release date from a version heading, or guessing it | Add (YYYY-MM-DD) (full-width () in Chinese) taken from the published tag |
Stop Signals
- The top version in
apps/kimi-code/CHANGELOG.mdis not published on npm or GitHub Releases. - You are about to edit
apps/kimi-code/CHANGELOG.md. - You are about to add docs sync to a changeset.
- English and Chinese versions, entry counts, or section sets do not match.
- A section is empty.
- A Chinese term is uncertain and
docs/AGENTS.mddoes not answer it. - A
docs/changelog-sync-*branch already exists for the same version and you cannot confirm whether it is stale. - The user asked to review but has not yet confirmed review is complete.
Version History
-
7cd6476
Current 2026-08-07 09:28
重构面向用户的变更日志策展规则,优化捕获通用描述及审查者备注,并在同步审查检查点展示折叠条目。
-
5240b5c
2026-07-23 11:34
调整Changelog章节顺序(Polish在Bug Fixes前),移除贡献者致谢,合并相似条目并致谢外部贡献者,启用Changelog致谢功能。
- 4963c90 2026-07-06 00:01


