Add Changelog Entry
Add entries to the Simple History plugin's readme.txt changelog.
Workflow
- Ask user for the change description (if not provided)
- Determine category: Added, Changed, Fixed, Deprecated, Removed, Security
- Add entry under
## Changelogβ### Unreleased - Confirm with user
Format
- Fixed post creation via Gutenberg autosave not being logged. [#599](https://github.com/bonny/WordPress-Simple-History/issues/599)
- Start with
-(hyphen + 3 spaces) - Do NOT repeat the category verb β the heading already says Added/Changed/Fixed, so don't start entries with "Added...", "Fixed...", etc.
- Link GitHub issue/PR if available
- End with period
Writing Guidelines
Changelogs are for humans, not machines. Write for both technical and non-technical WordPress users.
Write for the user:
- Explain what changed from the user's perspective, not what you did in the code
- Provide context and scope: instead of "Optimized query" write "Improved performance on sites with large activity logs"
- Replace jargon with clarity: avoid acronyms, internal class names, or hook names unless the audience is developers
- Be specific: "Fixed timezone handling in email reports" not "Bug fixes"
- Active voice: "Fixed X" not "X was fixed"
Be honest and complete:
- Never hide breaking changes, deprecations, or security fixes
- Be upfront about what changed and why β users trust changelogs that are transparent
- Include all notable user-facing changes; selective entries undermine credibility
- Mark experimental features with the
π§ͺ **Experimental** βprefix (see "Experimental features" section below)
Keep it concise:
- One bullet per change, one or two sentences max
- Don't duplicate commit messages β curate and translate them into user-facing language
- Group related small changes into a single entry rather than listing each separately
- Omit internal refactors, code cleanup, and dev tooling changes unless they affect users
- Omit new PHP/JS functions, helpers, or APIs β these are internal and not user-facing (e.g., don't list
Helpers::get_filtered_history_url())
Don't write:
- "Bug fixes" or "Various improvements" (too vague, tells users nothing)
- "Updated code" or "Minor changes" (meaningless)
- Raw commit messages or git log dumps
- Internal hook/filter names in user-facing entries (put in developer docs instead)
Categories
Use these standard categories from Keep a Changelog:
- Added β New features and capabilities
- Changed β Modifications to existing functionality
- Deprecated β Features that will be removed in a future release
- Removed β Features that have been eliminated
- Fixed β Bug fixes
- Security β Vulnerability patches (always include these, never hide them)
Experimental features
Features gated behind the experimental features setting use a consistent format that signals the gating and invites curiosity.
Format:
- π§ͺ **Experimental** β Description of the feature, written like any other entry.
Rules:
- Lead with
π§ͺ **Experimental** β(test-tube emoji + bold label + em-dash + space). - Don't add "Requires experimental features to be enabled" or trailing "(experimental)" β the prefix already says it.
- Place experimental entries at the bottom of their subsection (Added/Changed/Fixed/Security). Stable items first, experimental opt-ins after.
- If a feature also has a developer-facing filter or hook to toggle it, mention that in the body of the entry, not as boilerplate.
- Don't repeat the marker on continuation entries β every experimental bullet stands alone.
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:
- The π§ͺ emoji reads as "try this, it's new" β a curiosity hook, not a warning.
- Leading the line (rather than trailing) makes it scannable: a reader skimming the changelog can spot experimental items immediately.
- Placing them last in each section means readers focused on stable shipping changes can stop scanning at the first π§ͺ.
- The format matches the style already used for headings in the readme description (π β¨ π π).
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)
Unreleased Section
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.
Examples
β
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
References
- WordPress Developer Blog: The Importance of a Good Changelog
- Keep a Changelog: https://keepachangelog.com
Location
- File:
readme.txt(project root) - Section:
## Changelogβ### Unreleased - If Unreleased doesn't exist, create it after
## Changelog