5.6 KiB
Release notes format
Name: vX.Y.Z-beta - Short theme (theme is 2 to 6 words, sentence case).
Tag: vX.Y.Z-beta, always with the v.
Body, in this order. Omit a section only when it would be empty, except Upgrading, which is always present.
- Intro: one or two plain sentences on what the release is about. No heading.
## New: user-visible features. Group with a bold title line (**Group name**) followed by bullets.## Improvements and fixes: flat bullets.## API: one bullet per endpoint change,METHOD /v1/pathin backticks, then behaviour and status codes. Prefix breaking or shape changes with "Changed:".## Under the hood: dependencies, tests, docs, architecture. Only when relevant to contributors.## Upgrading: binary replacement, schema/migration changes, new env vars, behaviour changes for existing installs.## Known limitations: only when there are real ones.
Rules: bullets are full sentences ending with a period; user-facing wording, no commit prefixes; sentence-case headings; no horizontal rules, no metadata block, no "Pre-1.0" boilerplate (the prerelease flag says it); every release ships all 6 binaries from task release.
Next release (draft)
Articles and sites now store the data a website needs for search and sharing, and every article gets an address that is unique on its site.
New
Article SEO fields
- An article has a slug, an excerpt, a search title and description, a cover image with its alt text, a social title, description and image, a canonical address, a noindex flag and a list of dismissed suggestions.
- The slug is generated from the title, is unique per site and can be changed at any time; an empty slug regenerates it from the title.
- A site has a site name, a title template and a default description.
API
PATCH /v1/article/{id}also takes the SEO fields.cover_image_idandsocial_image_idacceptnull. A slug already used on the target site answers409slug_takenwith the headerX-Slug-Suggestionholding the first free slug.GET /v1/article/{id},POST /v1/article/,PATCH /v1/article/{id},PATCH /v1/article/{id}/publishandPATCH /v1/article/{id}/unpublishreturn the twelve SEO fields; the items ofGET /v1/article/returnslugandexcerpt.POST /v1/site/andPATCH /v1/site/{id}takesite_name,title_templateanddefault_description; a template without%title%is400invalid_title_template.- Changed:
GET /v1/media/{id}/usagestays an array, and every item gainstypeandfieldswithout losingid,titleandpublished. Authors and sites that use the image are now listed, without apublishedkey. - Changed: a cover image, a social image, an author avatar and a site default social image all count in
used_inand in theunusedfilter. Deleting an image clears the covers and social images that use it, and merging or purging repoints them.
New: SEO output
GET /v1/article/{id}/seoreturns the resolved search and sharing data of an article (title with the site template, description, canonical address, robots, Open Graph, Twitter, image, authors and ready JSON-LD), so a frontend can render its meta tags without reimplementing the fallback chain. Drafts answer verified callers only.POST /v1/article/{id}/seo/checkevaluates an article without saving, with optional overrides, and reports the suggestions, the status and whether the slug is free.GET /v1/article/items carryseo_statusandseo_suggestions, and the newseoparameter filters on the status.GET /v1/site/{key}/sitemaplists the published URLs of a site, paged, with the total inX-Total-Count, which is now exposed to browsers through CORS.
Upgrading
- The first start after the upgrade adds the new columns, gives every existing article a slug generated from its title (in id order within each site, with
-2,-3on conflicts) and creates the unique(site_id, slug)index. Nothing else changes, and a second start changes nothing. - A deleted article now frees its slug.
Published releases
Each body lives in docs/releases/<tag>.md. Publish with tea releases create --tag <tag> --title "<tag> - <theme>" --note-file docs/releases/<tag>.md --prerelease --asset <file> after task release, with one --asset per file: the six binaries, bin/checksums.txt and bin/checksums.txt.sig. task release produces all eight and fails before building when the signing key is missing or wrong (see deployment.md). Never publish a release without the two checksum files.
| Tag | Theme |
|---|---|
2.0.0-beta (legacy tag without the v, kept as is) |
Vue 3 SPA and domain-driven backend |
v2.1.0-beta |
Image upload in the editor |
v2.2.0-beta |
Image crop, image removal & reset screens |
v2.3.0-beta |
Multi-user invitations, display names & profile page |
v2.4.0-beta |
Owner role, invite management & Settings page |
v2.5.0-beta |
Media library & image picker |
v2.6.0-beta |
Signed updates and browser restart |
v2.6.2-beta |
English and French interface |
v2.7.0-beta |
Markdown and block article bodies |
v2.8.0-beta |
API keys and API reference |
v2.8.1-beta |
Docker deployment |
v2.8.2-beta |
Security headers and clearer log in errors |
v2.8.3-beta |
Security policy fixes for the web app |
v2.9.0-beta |
Media duplicate purge |
v3.0.0-beta |
Activity log, more databases and S3 storage |
v3.1.0-beta |
Image variants |
v3.2.0-beta |
Article lists, editor links and activity export |
v3.2.1-beta |
Paged media library and remembered page sizes |