Wox Update Changelog
Overview
Update CHANGELOG.md and CHANGELOG.zh_CN.md from the latest released version to HEAD and keep wording, section order, and markdown style consistent with existing entries. The two files must describe the same release with the same structure; only the language of user-facing prose changes.
Workflow
- Identify the release boundary.
- Read the top of
CHANGELOG.md and CHANGELOG.zh_CN.md and detect the target section (usually newest version at the top).
- Detect the last released tag with
git tag --sort=-creatordate.
- Use commit range
last_release_tag..HEAD by default.
- If changelog heading and git tag disagree, prefer changelog context and state the assumption.
- Collect candidate changes.
- Run
git log --oneline --no-merges <range>.
- Open key commits with
git show --stat --oneline <sha> to classify user-facing impact.
- Ignore pure build/version bump commits unless they change user-visible behavior.
- Collect store catalog additions separately from app/core commits. Compare
store-plugin.json and store-theme.json at last_release_tag vs HEAD. A store item is new only when its Id (plugin) or ThemeId (theme) is absent from the last release file. Ignore version bumps, field edits, and other updates to existing store entries. Ignore bundled script plugin version bumps.
- Do not put third-party store catalog changes in
Add, Improve, or Fix. List only newly added store plugins and themes in Store.
- Classify into changelog buckets.
Add: major, clearly new user-visible capabilities, workflows, plugins, or standalone feature areas.
Improve: behavioral or UX improvements without new core capability.
Fix: user-facing bug fixes/regressions.
Store: plugins and themes newly listed in the Wox store during this range.
- Omit the
Add section when the release does not contain a substantial new feature. Prefer Improve for additions that extend an existing feature area rather than creating a new user workflow.
- Omit the
Store section when no new store plugin or theme IDs appeared in range.
- Treat platform-specific implementations, provider additions, runtime dependency checks, searchable metadata, theme overrides, and similar support for existing systems as
Improve unless the commit introduces a large new user-facing feature.
- Exclude internal refactors/tests/docs/chore unless directly user-visible.
- Exclude tiny UI-only polish by default (for example spacing, alignment, minor color/wording tweaks) unless it fixes a functional UX issue or the user explicitly asks to include small UI changes.
- Write changelog entries in repository style.
Preserve header pattern exactly (for example: ## v2.0.1 -). Use the same heading, date, screenshots, issue links, and section keys in both files.
Keep section titles in English in both files: - Add, - Improve, - Fix, - Store. The client already localizes these labels.
Add a short highlight paragraph directly below every release heading you create or update, before screenshots and Add/Improve/Fix/Store sections. Follow the v2.2.0 style: one concise, user-facing sentence or short paragraph that calls out the single biggest release highlight.
Keep section order: Add, Improve, Fix, Store.
Use bullet nesting style already used in file.
Keep wording concise, user-facing, and factual.
Match wording to the bucket. English Improve entries should say "Improve", "Expand", "Support", or similar, not "Add", unless the entry is intentionally describing a small added option inside an improvement.
For new Add features, explain what the feature is for and why a user would use it. Do not reduce major features to one terse implementation phrase.
Keep the same feature in one bullet whenever possible. For example, combine Screenshot scrolling capture, pinning, and plugin API changes into one [Screenshot] bullet instead of splitting them into separate bullets.
If a new feature needs screenshots but the images are not available yet, leave clearly named screenshot placeholder image lines in the same bullet so the screenshots can be added later.
Prefer plugin/module prefix when clear, e.g. [`Shell`] or [`Clipboard`].
Write issue references as Markdown links, e.g. [#4339](https://github.com/Wox-launcher/Wox/issues/4339). Do not leave a bare #4339 for the preview to rewrite later.
Keep existing screenshots. Add new screenshot lines when screenshots already exist, or when a user explicitly asks to reserve screenshot positions for upcoming images.
Write Store as two nested groups, omitting an empty group: Plugin then Theme. Each item is already-clickable Markdown: [Name](page_url) Description [@github_username](https://github.com/github_username). Resolve i18n: names and descriptions from I18n.en_US in CHANGELOG.md and from I18n.zh_CN in CHANGELOG.zh_CN.md (plugin_name, plugin_desc or plugin_description). If a locale is missing, fall back to en_US, then Name / Description. Use ThemeName and Description for themes. Link the name to Website (plugin) or ThemeUrl (theme). If that URL is empty, write the plain name without a link. Append the author as a GitHub profile link. Prefer the username from a github.com / gist.github.com Website or ThemeUrl; otherwise use Author or ThemeAuthor when it is a single handle. Skip the author link when the author is only a display name. Do not add store screenshots, download URLs, or version numbers.
- Store
- Plugin
- [Color Picker](https://github.com/author/wox-plugin-color) Wox plugin to pick colors [@author](https://github.com/author)
- [Strava](https://github.com/author/wox-plugin-strava) A plugin to interact with Strava workouts [@author](https://github.com/author)
- Theme
- [Wox Dracula](https://github.com/author/wox-theme-dracula) Wox theme inspired by the Dracula color scheme [@author](https://github.com/author)
Write the English file first, then produce the Chinese file as a line-for-line counterpart. Do not add or drop bullets in only one language.
Both files now contain the full version history. Keep new headings in both files and do not leave a new release in only one language.
- Keep README in sync only when the latest stable heading changes.
- Update the line next to the Release badge to
Latest: vX.Y.Z · Mon YYYY, matching that heading (for example Latest: v2.4.3 · Sep 2026). GitHub README is not generated.
- Skip this when you only add bullets under an existing heading, or when the newest heading is a beta (
vX.Y.Z-beta.N).
- Do not hand-edit
www/docs. Homepage version text, compare stamps, and /changelog/* pages are generated from CHANGELOG.md and CHANGELOG.zh_CN.md during docs:dev / docs:build.
- Validate before finishing.
- Ensure no duplicate bullets.
- Ensure every
Add/Improve/Fix bullet maps to at least one commit in range.
- Ensure every
Store bullet maps to a plugin Id or theme ThemeId that is new since last_release_tag.
- Ensure every release section you create or update has a biggest-highlight paragraph under the version heading in both files.
- Ensure English and Chinese newest sections have the same headings, screenshots, issue links, and bullet count.
- If the latest stable heading is new or its date changed, ensure README contains
Latest: vX.Y.Z · Mon YYYY matching it (docs:build fails if this line is missing).
- Ensure markdown renders cleanly and section spacing matches nearby versions.
- Avoid rewriting old release sections unless explicitly requested.
- If a commit set only contains tiny UI-only polish, keep it out of changelog by default.
Command Reference
git tag --sort=-creatordate | head -n 20
sed -n '1,120p' CHANGELOG.md
sed -n '1,120p' CHANGELOG.zh_CN.md
git log --oneline --no-merges <last_tag>..HEAD
git show --stat --oneline <sha>
git show <last_tag>:store-plugin.json
git show <last_tag>:store-theme.json
git diff -- CHANGELOG.md CHANGELOG.zh_CN.md
Compare store catalogs by ID, not by file diff hunks. Example:
python -c "
import json, subprocess, sys
tag = sys.argv[1]
def load(rev, path):
return json.loads(subprocess.check_output(['git', 'show', f'{rev}:{path}']))
old_p = {p['Id'] for p in load(tag, 'store-plugin.json')}
new_p = json.load(open('store-plugin.json', encoding='utf-8'))
for p in new_p:
if p['Id'] not in old_p:
print('plugin', p.get('Name'), p.get('Description'), p.get('Author'), p.get('Website'), p.get('I18n'))
old_t = {t['ThemeId'] for t in load(tag, 'store-theme.json')}
new_t = json.load(open('store-theme.json', encoding='utf-8'))
for t in new_t:
if t['ThemeId'] not in old_t:
print('theme', t.get('ThemeName'), t.get('Description'), t.get('ThemeAuthor'), t.get('ThemeUrl'))
" <last_tag>
Output Rules
- Edit
CHANGELOG.md and CHANGELOG.zh_CN.md together.
- If the latest stable heading changed, also update the README
Latest: vX.Y.Z · Mon YYYY line. Do not edit www/docs changelog pages or homepage copy.
- Keep final response short: what section was updated and what categories were changed, including
Store plugin/theme counts when present.
- If commit intent is ambiguous, state the assumption briefly in the final response.
1---2name: wox-changelog-update3description: Update Wox CHANGELOG.md and CHANGELOG.zh_CN.md based on commits since the last release. Use when the user asks to "update changelog", "write release notes", or "summarize changes since last release" and the output must follow the repository's existing changelog format.4---56# Wox Update Changelog78## Overview910Update `CHANGELOG.md` and `CHANGELOG.zh_CN.md` from the latest released version to `HEAD` and keep wording, section order, and markdown style consistent with existing entries. The two files must describe the same release with the same structure; only the language of user-facing prose changes.1112## Workflow13141. Identify the release boundary.1516- Read the top of `CHANGELOG.md` and `CHANGELOG.zh_CN.md` and detect the target section (usually newest version at the top).17- Detect the last released tag with `git tag --sort=-creatordate`.18- Use commit range `last_release_tag..HEAD` by default.19- If changelog heading and git tag disagree, prefer changelog context and state the assumption.20212. Collect candidate changes.2223- Run `git log --oneline --no-merges <range>`.24- Open key commits with `git show --stat --oneline <sha>` to classify user-facing impact.25- Ignore pure build/version bump commits unless they change user-visible behavior.26- Collect store catalog additions separately from app/core commits. Compare `store-plugin.json` and `store-theme.json` at `last_release_tag` vs `HEAD`. A store item is new only when its `Id` (plugin) or `ThemeId` (theme) is absent from the last release file. Ignore version bumps, field edits, and other updates to existing store entries. Ignore bundled script plugin version bumps.27- Do not put third-party store catalog changes in `Add`, `Improve`, or `Fix`. List only newly added store plugins and themes in `Store`.28293. Classify into changelog buckets.3031- `Add`: major, clearly new user-visible capabilities, workflows, plugins, or standalone feature areas.32- `Improve`: behavioral or UX improvements without new core capability.33- `Fix`: user-facing bug fixes/regressions.34- `Store`: plugins and themes newly listed in the Wox store during this range.35- Omit the `Add` section when the release does not contain a substantial new feature. Prefer `Improve` for additions that extend an existing feature area rather than creating a new user workflow.36- Omit the `Store` section when no new store plugin or theme IDs appeared in range.37- Treat platform-specific implementations, provider additions, runtime dependency checks, searchable metadata, theme overrides, and similar support for existing systems as `Improve` unless the commit introduces a large new user-facing feature.38- Exclude internal refactors/tests/docs/chore unless directly user-visible.39- Exclude tiny UI-only polish by default (for example spacing, alignment, minor color/wording tweaks) unless it fixes a functional UX issue or the user explicitly asks to include small UI changes.40414. Write changelog entries in repository style.4243- Preserve header pattern exactly (for example: `## v2.0.1 -`). Use the same heading, date, screenshots, issue links, and section keys in both files.44- Keep section titles in English in both files: `- Add`, `- Improve`, `- Fix`, `- Store`. The client already localizes these labels.45- Add a short highlight paragraph directly below every release heading you create or update, before screenshots and `Add`/`Improve`/`Fix`/`Store` sections. Follow the `v2.2.0` style: one concise, user-facing sentence or short paragraph that calls out the single biggest release highlight.46- Keep section order: `Add`, `Improve`, `Fix`, `Store`.47- Use bullet nesting style already used in file.48- Keep wording concise, user-facing, and factual.49- Match wording to the bucket. English `Improve` entries should say "Improve", "Expand", "Support", or similar, not "Add", unless the entry is intentionally describing a small added option inside an improvement.50- For new `Add` features, explain what the feature is for and why a user would use it. Do not reduce major features to one terse implementation phrase.51- Keep the same feature in one bullet whenever possible. For example, combine Screenshot scrolling capture, pinning, and plugin API changes into one `[`Screenshot`]` bullet instead of splitting them into separate bullets.52- If a new feature needs screenshots but the images are not available yet, leave clearly named screenshot placeholder image lines in the same bullet so the screenshots can be added later.53- Prefer plugin/module prefix when clear, e.g. ``[`Shell`]`` or ``[`Clipboard`]``.54- Write issue references as Markdown links, e.g. `[#4339](https://github.com/Wox-launcher/Wox/issues/4339)`. Do not leave a bare `#4339` for the preview to rewrite later.55- Keep existing screenshots. Add new screenshot lines when screenshots already exist, or when a user explicitly asks to reserve screenshot positions for upcoming images.56- Write `Store` as two nested groups, omitting an empty group: `Plugin` then `Theme`. Each item is already-clickable Markdown: `[Name](page_url) Description [@github_username](https://github.com/github_username)`. Resolve `i18n:` names and descriptions from `I18n.en_US` in `CHANGELOG.md` and from `I18n.zh_CN` in `CHANGELOG.zh_CN.md` (`plugin_name`, `plugin_desc` or `plugin_description`). If a locale is missing, fall back to `en_US`, then `Name` / `Description`. Use `ThemeName` and `Description` for themes. Link the name to `Website` (plugin) or `ThemeUrl` (theme). If that URL is empty, write the plain name without a link. Append the author as a GitHub profile link. Prefer the username from a `github.com` / `gist.github.com` `Website` or `ThemeUrl`; otherwise use `Author` or `ThemeAuthor` when it is a single handle. Skip the author link when the author is only a display name. Do not add store screenshots, download URLs, or version numbers.5758 ```markdown59 - Store60 - Plugin61 - [Color Picker](https://github.com/author/wox-plugin-color) Wox plugin to pick colors [@author](https://github.com/author)62 - [Strava](https://github.com/author/wox-plugin-strava) A plugin to interact with Strava workouts [@author](https://github.com/author)63 - Theme64 - [Wox Dracula](https://github.com/author/wox-theme-dracula) Wox theme inspired by the Dracula color scheme [@author](https://github.com/author)65 ```6667- Write the English file first, then produce the Chinese file as a line-for-line counterpart. Do not add or drop bullets in only one language.68- Both files now contain the full version history. Keep new headings in both files and do not leave a new release in only one language.69705. Keep README in sync only when the latest **stable** heading changes.7172- Update the line next to the Release badge to `Latest: vX.Y.Z · Mon YYYY`, matching that heading (for example `Latest: v2.4.3 · Sep 2026`). GitHub README is not generated.73- Skip this when you only add bullets under an existing heading, or when the newest heading is a beta (`vX.Y.Z-beta.N`).74- Do not hand-edit `www/docs`. Homepage version text, compare stamps, and `/changelog/*` pages are generated from `CHANGELOG.md` and `CHANGELOG.zh_CN.md` during `docs:dev` / `docs:build`.75766. Validate before finishing.7778- Ensure no duplicate bullets.79- Ensure every `Add`/`Improve`/`Fix` bullet maps to at least one commit in range.80- Ensure every `Store` bullet maps to a plugin `Id` or theme `ThemeId` that is new since `last_release_tag`.81- Ensure every release section you create or update has a biggest-highlight paragraph under the version heading in both files.82- Ensure English and Chinese newest sections have the same headings, screenshots, issue links, and bullet count.83- If the latest stable heading is new or its date changed, ensure README contains `Latest: vX.Y.Z · Mon YYYY` matching it (`docs:build` fails if this line is missing).84- Ensure markdown renders cleanly and section spacing matches nearby versions.85- Avoid rewriting old release sections unless explicitly requested.86- If a commit set only contains tiny UI-only polish, keep it out of changelog by default.8788## Command Reference8990```bash91git tag --sort=-creatordate | head -n 2092sed -n '1,120p' CHANGELOG.md93sed -n '1,120p' CHANGELOG.zh_CN.md94git log --oneline --no-merges <last_tag>..HEAD95git show --stat --oneline <sha>96git show <last_tag>:store-plugin.json97git show <last_tag>:store-theme.json98git diff -- CHANGELOG.md CHANGELOG.zh_CN.md99```100101Compare store catalogs by ID, not by file diff hunks. Example:102103```bash104python -c "105import json, subprocess, sys106tag = sys.argv[1]107def load(rev, path):108 return json.loads(subprocess.check_output(['git', 'show', f'{rev}:{path}']))109old_p = {p['Id'] for p in load(tag, 'store-plugin.json')}110new_p = json.load(open('store-plugin.json', encoding='utf-8'))111for p in new_p:112 if p['Id'] not in old_p:113 print('plugin', p.get('Name'), p.get('Description'), p.get('Author'), p.get('Website'), p.get('I18n'))114old_t = {t['ThemeId'] for t in load(tag, 'store-theme.json')}115new_t = json.load(open('store-theme.json', encoding='utf-8'))116for t in new_t:117 if t['ThemeId'] not in old_t:118 print('theme', t.get('ThemeName'), t.get('Description'), t.get('ThemeAuthor'), t.get('ThemeUrl'))119" <last_tag>120```121122## Output Rules123124- Edit `CHANGELOG.md` and `CHANGELOG.zh_CN.md` together.125- If the latest stable heading changed, also update the README `Latest: vX.Y.Z · Mon YYYY` line. Do not edit `www/docs` changelog pages or homepage copy.126- Keep final response short: what section was updated and what categories were changed, including `Store` plugin/theme counts when present.127- If commit intent is ambiguous, state the assumption briefly in the final response.