Changelog System
Page path: admin/changelog-system.md
Original writing date: 2026-07-08
Original published date: 2026-07-08
Most recent editing date: 2026-07-08
Title changed: No
Previous title: None
What changed
dev: added auto changelogs
Compared with the previous version
new file mode 100644
@@ -0,0 +1,85 @@
+---
+title: Changelog System
+created: 2026-07-08
+published: 2026-07-08
+title_changed: false
+previous_titles: []
+---
+
+# Changelog System
+
+The public changelog is generated from Markdown files in `docs/` and local Git history. It gives visitors a readable summary of documentation updates without exposing private Forgejo links, commit hashes, branches, or raw Git history.
+
+## Supported frontmatter
+
+Each documentation page can include metadata at the top of the file:
+
+```yaml
+---
+title: Server Setup
+created: 2026-06-10
+published: 2026-06-14
+title_changed: false
+previous_titles: []
+---
+```
+
+Supported fields:
+
+| Field | Meaning | Fallback |
+| --- | --- | --- |
+| `title` | Public page name shown in the changelog. | First `# Heading`, then filename. |
+| `created` | Original writing date. | First Git commit date for the file. |
+| `published` | Original posting or published date. | First Git commit date for the file. |
+| `title_changed` | Whether the current title replaced an older title. | `false` |
+| `previous_titles` | Earlier page titles. | Empty list. |
+
+## Marking a title change
+
+When a page title changes, update the page frontmatter:
+
+```yaml
+title: New Page Title
+title_changed: true
+previous_titles:
+ - Old Page Title
+```
+
+Use `previous_titles` for titles that visitors might remember from older versions of the site.
+
+## What changed text
+
+The changelog uses the latest Git commit message that touched each page as the short "what changed" description.
+
+Write documentation commit messages for readers, not just for developers. For example:
+
+```text
+Clarify server setup steps
+
+Explains the Nginx reload step and fixes the published path.
+```
+
+The generator removes public URLs and commit-like hashes from the changelog output so private Forgejo details are not exposed.
+
+## Regenerating manually
+
+Run this from the repo root:
+
+```bash
+python3 scripts/generate_changelog.py
+mkdocs build --clean
+```
+
+The generated page is written to `docs/changelog.md`. Do not edit that file by hand because the next generator run will replace it.
+
+## Deployment
+
+The server deploy workflow should run the generator after pulling the latest commit and before building MkDocs:
+
+```bash
+git pull origin main
+python3 scripts/generate_changelog.py
+mkdocs build --clean
+```
+
+The public Nginx site only serves the built MkDocs output. Forgejo can remain private on Tailscale because the generated changelog contains only public page metadata and summarized commit messages.