Repository navigation
Releases: ortha-source/ortha-cms
Releases · ortha-source/ortha-cms
Release list
v0.10.0
0.10.0 (2026-10-09)
🚀 Features
- admin: add a favicon to the admin and the scaffolded app (#314)
- content: a field's default value, as a create-form prefill (d7ad2e48)
- copilot-admin: show open chats' status on the sidebar's Agents switch (#319)
- i18n-admin: searchable locale menu, readable rows (e0b1c737)
- i18n-admin: pin the default locale first in the locale menu (6cf4862a)
- media: opt-in public (CDN) URLs from the storage provider (f779aa30)
- schema-builder: explain relation locale behaviour as a choice (#311)
🩹 Fixes
- admin: stale selection, unclamped pages, invite submit, i18n (5ad84dd4)
- content-admin: the whole form-section header folds and unfolds (9ea4598e)
- content-server: malformed ids, in-write target checks, saved-view cap (7d0fa0ef)
- copilot: show a tool step while the model is still writing it (0748638d)
- copilot: raise the message limit to 32,000 and enforce it in the composer (#318)
- copilot-admin: keep the latest turn when an Agents thread is reopened (477dafc9)
- copilot-admin: forget the switcher's remembered pages with the session (62539694)
- copilot-server: never show driver errors to the user or the model (ccdc8cfe)
- design-system: round dialogs and space stacked footer buttons on mobile (19d0e046)
- identity-admin, copilot-admin: end copilot chats when the session ends (b759d90b)
- identity-server: share login rate-limit buckets across instances (d3c2d79d)
- media-admin: show a loader while a media delete is in flight (9f4c62a1)
- schema-builder-admin: keep focus while typing in a select option (76babd36)
- schema-builder-admin: drag a field into a group on General, and back out (d2f941bd)
- segments-server, alarms-server, activity-server: refuse malformed tool arguments (a76c3545)
- utils-admin: slots hand out one stable, frozen array (55d9eea1)
- webhooks-domain: judge IPv6 literals by the IPv4 they embed (2b07a4e8)
- webhooks-server, mail-server: fence attempt writes on the claim (62724a7d)
❤️ Thank You
- Claude
- Claude Opus 5.5
- Pavel Makhanko @pmknk
v0.9.1
0.9.1 (2026-10-06)
🚀 Features
- content-admin: an outline of the General tab's fields at the editor's edge (893b69e8)
- copilot-admin: start new chats on the last model picked, across reloads (4edd8d5e)
- protection-server: let the copilot see who can review an entry (1645b495)
🩹 Fixes
- alarms-admin: offer only the workspace's own collections when creating an alarm (9a04bbdf)
- content-server: scope the type schema an agent reads to the workspace (58ec9c29)
- design-system: no side scrollbar on a tabs row (f74c299c)
- segments: "Can be seen by" filters by who can actually read the entry (5c5c5701)
🎨 Design
- admin: the locale switcher leads the editor's top bar; access moves to Details (1e3f4e7b)
- protection-admin: the review chip heads the Review block (84397640)
❤️ Thank You
- Claude Opus 5.5 (1M context)
- pmknk
v0.9.0
0.9.0 (2026-10-05)
🎨 Design
- admin: a floating work area, header-less pages and borderless tables (26a37085)
- admin: the work area is one white card on a light gray frame, and the right panel (Properties) sits inside it
- admin: page titles fold into the top bar; a page's actions and its tabs move up into it, and back links give way to the breadcrumb
- admin: list tables run full width with no frame and no row rules — a gray header pill and a rounded hover row
- admin: compact list toolbars: Columns and Filters are icon buttons, and Filters opens a large popover instead of an inline panel
- copilot: "Ask Ortha AI" sits under the work area instead of in the top bar
⚠️ Breaking changes for plugin authors
- query-builder:
QueryBuilderPanelis removed — useQueryBuilderPopover(anduseFilterDraftfor the draft/apply logic) - design-system:
InsetBarEndis nowInsetFooterEnd, drawn into theInsetFooterunder the work area - design-system: new
TopBarTabs,PageHeaderHost,DensityProvider/useDensity, andContainer width="full";ContainerHeaderfolds into a top bar when one is present
❤️ Thank You
- Claude
- Claude Opus 5.5
- pmknk
v0.8.0
0.8.0 (2026-10-04)
🚀 Features
- cli: generate the content manifest with content sync (4820f29c)
- create-orthacms-app: ship the schema builder in every new app (873c7906)
- schema-builder: the schema document, its diff and fingerprint (719251e0)
- schema-builder: classify changes and generate content type code (fae480ae)
- schema-builder: server plugin with the read-only document route (9bfceb8a)
- schema-builder: read-only content model page in the admin (1fa86f3b)
- schema-builder: plan a content model change (c7ea2efa)
- schema-builder: apply a content model change (9e59caec)
- schema-builder: edit the content model in the admin (fec793bf)
- schema-builder: review, apply and grant in the admin (11/12) (ca269767)
- schema-builder: review as a page with steps; sheets slide in (f9722ffb)
- schema-builder: add a field as a page with steps; roomier cardinality (a1cdcffe)
- schema-builder: relations named the usual way, with what each means (eb6062e3)
- schema-builder: fewer knobs, searchable grant, flags that undo (a8450568)
- schema-builder: a new type starts empty; description is a text box (c376878e)
🩹 Fixes
- schema-builder: declare express, which the error filter imports (36c4fefb)
- schema-builder: the structure rule says what it checks, and starts on (dda60413)
- schema-builder: long text is not checked as a document (51ab5365)
- server-e2e: declare jest and node types explicitly (afcc3206)
❤️ Thank You
- Claude
- Claude Opus 5.5
- pmknk
v0.7.0
What's Changed
- Admin polish: gray sidebar, entry-form layout, richer locale menu, AI launcher in the top bar by @pmknk in #284
- AI launcher as a top-bar icon, no bottom gutter by @pmknk in #285
- feat: shared workspaces — published records linkable across workspaces by @pmknk in #286
- fix(content): ungranted required relations; keep a new record's values when publish is refused by @pmknk in #287
- fix(content): refused-publish leftovers and bulk publish required many-relations by @pmknk in #288
- feat: explicit per-source shared content grants by @pmknk in #289
- fix(content): serve the published version of a modified entry on the public API by @pmknk in #290
- fix: shared records read-only; review lifecycle around publish; Reviews table by @pmknk in #291
- fix(protection): keep reviewers queued after a publish; align the Reviews table by @pmknk in #292
- fix(create-orthacms-app): install on npm 10, and smoke-test the first run in CI by @pmknk in #293
- chore(release): publish 0.7.0 by @pmknk in #294
Full Changelog: v0.6.0...v0.7.0
v0.6.0
0.6.0 (2026-09-25)
🚀 Features
- agents: add the tiered ticket pipeline, and restore open-pr as a skill (#273)
- content-admin, i18n-admin: slim the entry editor's Properties rail (#276)
- create-apograph-app: ask for a mail backend, and wire what it answers (#275)
- database, activity: prune delivered outbox rows, retry a parked one (#280)
- mail: send invitations and reset links instead of relaying them by hand (#272)
- protection: add the publication-protection domain kernel (#255)
- protection: publication protection — plugin, review, publish guard, admin (ORT-226) (#265, #256, #258, #259, #260, #263)
- protection: review requests name reviewers; drop notes, request changes and bypass reasons (2d494cac)
🩹 Fixes
- rename the scope in the one file grep classified as binary (cd254670)
- rename the 49 files that carry the name only in upper or title case (fa0d577a)
- content: the publish verdict answers for a staged audience too (084fc1ae)
- content-admin: refuse a background refetch's re-seed over unsaved edits (93433214)
- content-admin: address the four review findings on the refused re-seed (e2b0b9ed)
- copilot-admin: bound the change card's failure reason (#278)
- deps: restore sharp's platform binaries in the lock file (2bf50a0b)
- protection: publish no longer stales its own approval; ordinary Publish for bypass (7fbd9811)
- protection: send the overdue threshold with the queue instead of restating it (41b0a494)
- protection: the queue's empty-page assertions carry the new field (12780a34)
- protection: declare the shell-admin dependency the Reviews page imports (419d71d2)
- protection-admin: key the entry review by the entry's version (1215f953)
- protection-admin: hold Publish while the review key is re-read (6b14dbc5)
- release: let reserve-names run again straight after a batch (c6a49cfc)
- server-e2e: clear mail_deliveries between tests (f8db838b)
- shell: reserve the gutter the copilot dock covers, and close four coverage gaps (6a837c11)
❤️ Thank You
- Claude
- Claude Opus 5
- Claude Opus 5 (1M context)
- Pavel Makhanko @pmknk
- pmknk
v0.5.2
v0.5.1
v0.5.0
0.5.0 (2026-09-07)
🚀 Features
- activity: close the silent gaps in the audit trail (server) (41a038c6)
- activity: audit the contexts that raised no events at all (599485a5)
- activity: make the trail's gaps and one entry's history reachable (57e3cd02)
- activity-admin: render every kind the server writes, and pin it (e9d1640b)
- cli: add
ortha --version(68564167) - design-system: let MultiSelect add what was typed, and use it (364fa2b7)
- users-admin: filter Members through the inline panel, not a drawer (8a440191)
- webhooks: deliver content changes to configured endpoints (9246ffb4)
- webhooks-admin: configure endpoints and read the delivery log (2c9583a8)
- webhooks-admin: pick content types, without closing the list (465c1cb4)
- webhooks-admin: scope the type picker to the chosen workspaces (ecb37070)
- webhooks-admin: a status switch that asks, and custom headers (e746ef56)
🩹 Fixes
- admin: close the ten UI tickets ORT-197…ORT-206 (#247)
- admin: pick the Action filter by label, and lift the empty-group mute to AA (09f647ff)
- alarms: say the severity on the two surfaces that had stopped (4940789b)
- api-tokens: answer honestly about an expiry, a scope, and an empty bucket (37934330)
- api-tokens-admin: keep a credential from being minted twice, and give focus somewhere to land (275b5df9)
- cli: answer
ortha --helpinstead of "Unknown command" (25ca4018) - config: read the environment only through readEnv, so a blank key means absent (f9c1a50f)
- content: describe the public content API in the OpenAPI document (f36b0ade)
- copilot: keep a partial answer when a run ends mid-stream (21ea4223)
- create-ortha-app: expect the plugins the template actually registers (66649d4a)
- design-system: drop the dropdown exit animation, which kept closed overlays live (13622011)
- design-system: the spinner stops rotating under reduced motion, without stopping (ab4f6aed)
- e2e: stop the memory advisory crying wolf on macOS (bb11484f)
- i18n: join the ambient unit of work when checking a translation group (65904430)
- identity-admin: say why the session ended, and ask for the confirm once (1f36533c)
- identity-admin: answer an unknown /identity path instead of a blank page (f5e89918)
- media: move the timed-text track types out of infrastructure (80219e9a)
- media: give the storage port its own package, so an adapter costs an adapter (82d12871)
- query-builder: restore
liketo the reverse map, which silently dropped it (4574cfd9) - query-builder: open the filter panel without scrolling its own clip (0fc39073)
- segments: check an entry's workspace before writing its audiences (5e974b41)
- server-e2e: retry a deadlocked truncate, and unpin two stale expectations (aedcd992)
- server-e2e: bind the harness to loopback, so the suite stops losing requests (99a648f7)
- transfer: let the link pass see what the first write actually wrote (585418d2)
- users-server: reject an explicit null name instead of clearing it (d73d8ffa)
- webhooks: purge a deleted workspace's subscription rows (#245)
- webhooks-admin: keep node:crypto out of the browser bundle (a58eeb4c)
- webhooks-admin: the three things only a browser could find (7e73abdf)
- webhooks-admin: name the two filter pickers (7c3bf771)
- workspaces: purge the rows a deleted workspace used to strand (ba4632b1)
- workspaces-admin: stop the roster surfaces failing quietly (3b12ffef)
- wysiwyg: actually clear the alt when an image is marked decorative (dd0b9676)
- wysiwyg: keep a passage's language when formatting is cleared (fcd1f3b9)
- wysiwyg: stop Tab re-appending the row TableTab just bounded (5b0a906a)
❤️ Thank You
- Claude
- Claude Opus 5
- Claude Opus 5 (1M context)
- Pavel Makhanko @pmknk
v0.4.3
0.4.3 (2026-08-28)
🚀 Features
- alarms: content rules that flag problems without blocking a write (b86f4499)
- alarms: expose findings to the copilot and render them (dfbfe29b)
- alarms: group flagged records by the alarm that flagged them (3d5740b1)
- alarms: mark required fields, remove muting, wire the relation picker (7c6de578)
- alarms: re-check from a group header, and collapse the builder on apply (b4e19c50)
- content: saved list views for collection records (dcf80402)
- content,segments: version an entry's access with the entry (1828438b)
- identity: let a contributor delete content and media (9ae9248c)
- query-builder: a named category for flat fields, and put segments in one (22107929)
- segments: reader access as two lists on the entry (e5f500e9)
- segments: apply entry access on the entry's own Save/Publish (7716a0ab)
- segments: audience pages, workspace scope, pagination, bulk set (f1f2afc3)
- segments: filter records by audience; move the Access tab's directory link (ec850b2e)
- segments: default the audience filter to multi-select, and cover both halves by e2e (7e4106a7)
- segments: revise every locale a save's audiences reached, and load into skeletons (7ceebbb5)
- segments: reach reader entitlements from MCP, the copilot and a token (0a6b6ab2)
🩹 Fixes
- admin-e2e: sort from the header's button, not the cell around it (33eddbfb)
- alarms: rebuild the alarms UI around what people actually reported (e8311ae5)
- alarms: drop the dead space under a group that does not page (a1f76dc9)
- content: apply the read scope inside relation windows, not only on hydration (bb379d58)
- create-ortha-app: refuse a feature id no group defines (b6c4a98c)
- release: stop pack leaving a broken package staged (b2e085ec)
- segments: space badge icons in the design system, validate the segment form (da7a3191)
- segments: bind reader/audience ids as one uuid[] parameter (f4bf6dd5)
- segments: write an entry's audiences to its whole locale group (c364a01c)
- server-e2e: give the run the heap the run actually needs (be0df263)
- server-e2e: bound resetDb's wait for its own locks (29aabc9b)
❤️ Thank You
- Claude
- Claude Opus 5
- Claude Opus 5 (1M context)
- Pavel Makhanko @pmknk