Adds changelog entries to readme.txt following keepachangelog format. Triggered when updating Unreleased section, documenting changes for release, or when user says "add changelog", "update changelog", "log this change".
Add entries to the Simple History plugin's readme.txt changelog.
## Changelog → ### Unreleased- Fixed post creation via Gutenberg autosave not being logged. [#599](https://github.com/bonny/WordPress-Simple-History/issues/599)
- (hyphen + 3 spaces)Changelogs are for humans, not machines. Write for both technical and non-technical WordPress users.
Write for the user:
Be honest and complete:
Experimental — prefix (see "Experimental features" section below)Keep it concise — one line per entry:
The model is the Claude Code changelog: one short line per change that states the new behavior and stops. Aim for a single sentence; add a short — clause only when the consequence isn't obvious from the change itself. The changelog is the index — the release-post link is where the full story lives.
Helpers::get_filtered_history_url()).We borrow Claude Code's brevity, not its structure: it uses a flat list so every line starts with "Added/Fixed", while Simple History keeps category headings — so don't add the verb prefix here (see the "Do NOT repeat the category verb" rule above).
Too long → tightened (real examples):
These are all from the 5.29.0 changelog — each ran 2–3 sentences with "Previously…" clauses, enumerations, and scope caveats. Tightened to one line:
❌ Overview action links on user, plugin, post, and media events — "All users", "All plugins",
"All posts" / "All pages" / "All `<custom-post-type>`", "All media". Also shown on delete
events where the per-item link would dead-end. The "All users" link shows only on
user-management events (profile updated, user created, user deleted), not on login, logout,
failed-login, or session-destroy events.
✅ Overview action links ("All users", "All plugins", "All posts", "All media") on user,
plugin, post, and media events.
❌ Simple History's activity log is now included in WordPress's personal-data export
(Tools → Export Personal Data): the events a person performed are exported automatically.
Previously the activity log was left out of export requests entirely.
✅ Activity log is now included in WordPress's personal-data export (Tools → Export Personal Data).
❌ New installs now create the history tables with `$wpdb->get_charset_collate()` (matching
WordPress core's pattern since 4.2) instead of a hardcoded `CHARSET=utf8`. On modern hosts
this means tables are created as `utf8mb4`, so they can store 4-byte UTF-8 characters
like emoji in event context — previously a post title with an emoji could silently drop
the entire context row, leaving log entries like `Updated ""` with no user attribution.
✅ New installs create history tables as `utf8mb4`, so emoji and other 4-byte characters in
event context are preserved.
The pattern in every case: keep the user-visible change and a short location hint, cut the "Previously…" framing, the per-item enumerations, the edge-case scoping, and the mechanism. If a caveat genuinely matters to users (e.g. "existing installs unchanged"), it goes in the release post, not the bullet.
Don't write:
Use these standard categories from Keep a Changelog:
Features gated behind the experimental features setting use a consistent prefix that signals the gating without drawing extra attention.
Format:
- Experimental — Description of the feature, written like any other entry.
Rules:
Experimental — (plain label + em-dash + space — no emoji, no bold).Preamble in Unreleased:
The Unreleased section starts with a one-line blockquote that explains what the marker means. This lives once at the top of Unreleased — don't duplicate it in older releases:
> Experimental entries are gated behind the experimental features setting (Settings → Simple History → Experimental). Enable it to try them, then share feedback so we know what to ship for everyone.
Why this format:
Experimental prefix labels the entry without making it stand out — experimental opt-ins shouldn't compete with stable shipping changes for attention.Examples:
✅ Experimental — Failed application password authentication on REST API and XML-RPC requests is now logged as a warning…
✅ Experimental — "History" column on post and page list tables showing recent activity at a glance.
❌ "History" column on post and page list tables… (experimental) (trailing tag — old format)
❌ "History" column on post and page list tables… Requires experimental features to be enabled. (boilerplate phrase — superseded by the prefix)
❌ History column… (missing Experimental label)
Always maintain an ### Unreleased section at the top of the changelog. This lets users see what's coming and makes it easy to promote entries into a versioned release.
When releasing, move Unreleased entries into a new versioned section with the release date.
At release time, besides the changelog, add the in-plugin "Highlights in this version" notice that users see when they update. It's separate from readme.txt:
inc/services/class-simple-history-updates.phpadd_filter( 'simple_history/pluginlogger/plugin_updated_details/simple-history/X.Y.Z', [ $this, 'on_plugin_updated_details_X_Y_Z' ] ); in loaded()on_plugin_updated_details_X_Y_Z() method returning 3 short highlight bullets + the release-post link (copy the previous version's method)Preview it with the dev WP-CLI command (needs SIMPLE_HISTORY_DEV). Note the subcommand uses underscores, not dashes:
docker compose run --rm wpcli_mariadb \
simple-history dev add_plugin_update_message --prev-version=<PREV> --version=<NEW>
This logs a fake "plugin updated" event; the highlights render in its event-details panel in wp-admin. --version defaults to the installed version. Premium has its own on_plugin_updated_details_* in the premium plugin — preview with --plugin=simple-history-premium/simple-history-premium.php.
✅ Post creation via Gutenberg autosave not being logged, causing email reports to show 0 posts created.
✅ Developer mode badge to improve debugging workflow.
✅ Performance on sites with large activity logs improved by optimizing database queries.
✅ `simple_history_log()` function — use `SimpleHistory\log()` instead. Will be removed in 6.0.
❌ Added developer mode badge (redundant — heading already says "Added")
❌ Fixed post creation (redundant — heading already says "Fixed")
❌ Bug fixes
❌ Updated code
❌ Refactored SimpleHistoryLogQuery class
❌ Various improvements and optimizations
readme.txt (project root)## Changelog → ### Unreleased## Changelog下载完整 Skill 目录,包含 SKILL.md 及所有相关文件
Search for places (restaurants, cafes, etc.) via Google Places API proxy on localhost.
Interact with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for issues, PRs, CI runs, and advanced queries.
Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.
Start voice calls via the OpenClaw voice-call plugin.
Notion API for creating and managing pages, databases, and blocks.
Gemini CLI for one-shot Q&A, summaries, and generation.
Category:developer