Changelog
What changed, release by release
Every published version, newest first. The latest is 0.13.1. Every line links to the commit or pull request behind it, and every version is an anchor the documentation can point at.
Read from the product's own CHANGELOG.md, written by the release tooling. Nothing here is typed by hand.
-
0.13.1 Latest
Release on GitHubFixes
-
contentlist the inverse of a single relation read-only #361
With thanks to Claude, Pavel Makhanko @pmknk.
-
-
0.13.0
Release on GitHubFeatures
-
identityself-service password recovery — a "Forgot it?" screen that answers the same for every address; redrawn sign-in, invitation and dead-link pages, one password field with a reveal toggle and a strength meter #350 -
schema-builderthe type page is fields first; adding a field is a kind picker plus a field panel with a live preview; templates for new types; the review is one page with each destructive change confirmed on its own #349 -
usersmembers get quick filters, last active, an invite sheet that invites several people at once, a four-tab member page and "sign out everywhere" #352 -
workspacescards that say what is inside and when it last moved, a three-step create with a ready page, and archiving that says what it touches first #353 -
protectionReviews as tabs (Waiting on me, My requests, Recently approved), a review panel with the changes since live and Approve, and publishing rules as switches read back in one sentence #359 -
insightsNeeds attention first, sections as tabs, and a drill-down panel behind every signal #358 -
activityfree-text search, an event panel with a before/after diff, CSV export of the current view, and Retry all for unrecorded events #357 -
segmentsaudiences show which entries use them, a "Try a reader" tester, and a delete dialog that says who will see what #351 -
alarmsflagged records by title, rules as cards with an on/off switch, and a live "Right now" preview in the editor; switching a rule back on rescans #354 -
copilotchats in the sidebar, openers per workspace, a write shown as "Was → Now" before you allow it, a skills sheet, and collapsed chats as pills in the dock #355 -
api-tokensthe list names each token's creator and flags expiries, access as two cards, a ready curl request on reveal, and revoking says what stops #356
Fixes
-
copilot-adminpicking a thread from the history menu opens it instead of starting a window drag #355 -
design-systemno Chrome autofill tint on form fields #350 -
adminthe accept-invite page no longer scrolls sideways at 320px, closing an Insights drill-down returns focus to its line, and Done on the invite results asks before leaving an uncopied link 9c4e000
Migrations
- Run `orthacms migrate` after upgrading. All three are additive:
-
activity`0002_subject_label` — a `subject_label` column, backfilled -
workspaces`0003_workspace_archived_at` — an `archived_at` column, backfilled from `updated_at` -
protection`0004_review_approvals_by_user` — an index for Recently approved
With thanks to Claude, Claude Opus 5.5, Claude Opus 5.5 (1M context), Pavel Makhanko @pmknk, pmknk.
-
-
0.12.0
Release on GitHubFeatures
-
content-adminthe entry editor is one form — relations and media inline, Properties on demand, a status cluster, History with activity (ADR-0022) #347 -
content-adminan overview for the Content Library; saved views as tabs, status chips and a floating selection bar on the records page #347 -
media-adminfolders in the tree, type chips, a list view and a details panel beside the grid #347 -
shella "Needs your attention" row and top-bar actions on Home; every page shows its title and subtitle #347 -
webhooks-admina state filter and delivery strips, a sectioned editor, figures and a two-pane delivery log #347 -
workspaces-adminworkspaces as cards, and settings with a side nav #347 -
alarms-admina per-severity strip and framed alarm groups; protection-admin: the Reviews queue redrawn #347
Fixes
With thanks to Claude, Claude Opus 5.5, Claude Opus 5.5 (1M context), Pavel Makhanko @pmknk, pmknk.
-
-
0.11.0
Release on GitHubFeatures
-
admina motion pass — page cross-fade, sliding indicators, overlay entrances, no skeleton flash #346 -
contentfold each row of the sync preview, with a count in its heading #341 -
copilotdaily token quotas, runs per minute and runs in flight #335 -
copilot-adminmark the way in only when a chat is waiting for you #344 -
i18npreview what a save does to other locales and records, and ask before every one #336 -
servera feature-named dev content model and a full dev seed f9bdbbf -
shellresizable sidebars, with the layout saved to the user's preferences #332
Fixes
-
contentno blur before the sync question — cover an asked-first write late #339 -
contentthe sync preview names the record being saved, and real statuses #340 -
copilotthe page under the chat catches up after a change #342 -
copilot-adminthe Agents switch counts the chat the page is showing #337 -
design-systema resize drag always ends, and never leaves the cursor stuck #333 -
design-systembutton-backed fields show focus however they got it #345 -
design-systemthe page cross-fade no longer zooms between pages of different sizes 7e6ed35 -
i18na target's late translation fills the mirrored links waiting for it #334 -
i18none cover across the sync question, and a preview a person can read #338 -
schema-builder-admina group taller than the first one can be dragged to the top #343
With thanks to Claude, Claude Opus 5.5, Claude Opus 5.5 (1M context), Pavel Makhanko @pmknk, pmknk.
-
-
0.10.3
Release on GitHubFeatures
-
i18none confirmation when a save reaches other locales #331
With thanks to Claude Opus 5.5, Pavel Makhanko @pmknk.
-
-
0.10.2
Release on GitHubFixes
With thanks to Claude, Claude Opus 5.5.
-
0.10.1
Release on GitHubFeatures
With thanks to Claude Opus 5.5, Pavel Makhanko @pmknk, pmknk.
-
0.10.0
Release on GitHubFeatures
-
adminadd a favicon to the admin and the scaffolded app #314 -
contenta field's default value, as a create-form prefill d7ad2e4 -
copilot-adminshow open chats' status on the sidebar's Agents switch #319 -
i18n-adminsearchable locale menu, readable rows e0b1c73 -
i18n-adminpin the default locale first in the locale menu 6cf4862 -
mediaopt-in public (CDN) URLs from the storage provider f779aa3 -
schema-builderexplain relation locale behaviour as a choice #311
Fixes
-
adminstale selection, unclamped pages, invite submit, i18n 5ad84dd -
content-adminthe whole form-section header folds and unfolds 9ea4598 -
content-servermalformed ids, in-write target checks, saved-view cap 7d0fa0e -
copilotshow a tool step while the model is still writing it 0748638 -
copilotraise the message limit to 32,000 and enforce it in the composer #318 -
copilot-adminkeep the latest turn when an Agents thread is reopened 477dafc -
copilot-adminforget the switcher's remembered pages with the session 6253969 -
copilot-servernever show driver errors to the user or the model ccdc8cf -
design-systemround dialogs and space stacked footer buttons on mobile 19d0e04 -
identity-admin, copilot-adminend copilot chats when the session ends b759d90 -
identity-servershare login rate-limit buckets across instances d3c2d79 -
media-adminshow a loader while a media delete is in flight 9f4c62a -
schema-builder-adminkeep focus while typing in a select option 76babd3 -
schema-builder-admindrag a field into a group on General, and back out d2f941b -
segments-server, alarms-server, activity-serverrefuse malformed tool arguments a76c354 -
utils-adminslots hand out one stable, frozen array 55d9eea -
webhooks-domainjudge IPv6 literals by the IPv4 they embed 2b07a4e -
webhooks-server, mail-serverfence attempt writes on the claim 62724a7
With thanks to Claude, Claude Opus 5.5, Pavel Makhanko @pmknk.
-
-
0.9.1
Release on GitHubFeatures
Fixes
Design
With thanks to Claude Opus 5.5 (1M context), pmknk.
-
0.9.0
Release on GitHubDesign
-
admina floating work area, header-less pages and borderless tables 26a3708 -
adminthe work area is one white card on a light gray frame, and the right panel (Properties) sits inside it -
adminpage 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 -
adminlist tables run full width with no frame and no row rules — a gray header pill and a rounded hover row -
admincompact 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`QueryBuilderPanel` is removed — use `QueryBuilderPopover` (and `useFilterDraft` for the draft/apply logic) -
design-system`InsetBarEnd` is now `InsetFooterEnd`, drawn into the `InsetFooter` under the work area -
design-systemnew `TopBarTabs`, `PageHeaderHost`, `DensityProvider` / `useDensity`, and `Container width="full"`; `ContainerHeader` folds into a top bar when one is present
With thanks to Claude, Claude Opus 5.5, pmknk.
-
-
0.8.0
Release on GitHubFeatures
-
cligenerate the content manifest with content sync 4820f29 -
create-orthacms-appship the schema builder in every new app 873c790 -
schema-builderthe schema document, its diff and fingerprint 719251e -
schema-builderclassify changes and generate content type code fae480a -
schema-builderserver plugin with the read-only document route 9bfceb8 -
schema-builderread-only content model page in the admin 1fa86f3 -
schema-builderplan a content model change c7ea2ef -
schema-builderapply a content model change 9e59cae -
schema-builderedit the content model in the admin fec793b -
schema-builderreview, apply and grant in the admin (11/12) ca26976 -
schema-builderreview as a page with steps; sheets slide in f9722ff -
schema-builderadd a field as a page with steps; roomier cardinality a1cdcff -
schema-builderrelations named the usual way, with what each means eb6062e -
schema-builderfewer knobs, searchable grant, flags that undo a845056 -
schema-buildera new type starts empty; description is a text box c376878
Fixes
With thanks to Claude, Claude Opus 5.5, pmknk.
-
-
0.7.0
Release on GitHubFeatures
- explicit per-source shared content grants 3ec2ffb
-
adminshared workspaces — sharing toggle, shared relation targets, read-only view cf3b9cf -
contentcollapsible form sections via groups + admin.group f7bed82 -
contentadmin.width decides a field's form width, full by default 704aa89 -
contentshared workspaces in the MCP and copilot content tools e838eea -
content-adminsize entry fields to their value, rows via admin.row f19057c -
copilot-adminmove the AI launcher into the top bar, drop the bottom gutter 344d44c -
copilot-adminmake the top-bar launcher an icon 6cc58df -
i18nricher locale menu in the entry editor, built for many locales 57400dc -
servershared workspaces — published records linkable across workspaces 6202af3
Fixes
-
contenta required relation to an ungranted type is not required 1d35990 -
contentbulk publish checks required many-relations like single publish 3eea0b2 -
contentserve the published version of a modified entry on the public API 887bd0d -
content-adminsnap entry fields to a two-column grid 9a87434 -
content-adminkeep a new record's values when its publish is refused aac1ca7 -
content-adminsettle staged plugin and relation state after a refused publish df7a0de -
content-adminhide Save on shared records and shared-only types ff0d2a3 -
create-orthacms-appinstall on npm 10, and smoke-test the first run in CI 52c2077 -
protectionnothing to review on a published, unchanged entry dbb8753 -
protectionkeep reviewers queued after a publish; align the Reviews table d5b796e -
segmentsresolve the reader from X-Reader-Tags by default 226cc2b
With thanks to Claude, Claude Opus 5.5.
-
0.6.0
Release on GitHubFeatures
-
agentsadd the tiered ticket pipeline, and restore open-pr as a skill #273 -
content-admin, i18n-adminslim the entry editor's Properties rail #276 -
create-apograph-appask for a mail backend, and wire what it answers #275 -
database, activityprune delivered outbox rows, retry a parked one #280 -
mailsend invitations and reset links instead of relaying them by hand #272 -
protectionadd the publication-protection domain kernel #255 -
protectionpublication protection — plugin, review, publish guard, admin (ORT-226) #265 -
protectionreview requests name reviewers; drop notes, request changes and bypass reasons 2d494ca
Fixes
- rename the scope in the one file grep classified as binary cd25467
- rename the 49 files that carry the name only in upper or title case fa0d577
-
contentthe publish verdict answers for a staged audience too 084fc1a -
content-adminrefuse a background refetch's re-seed over unsaved edits 9343321 -
content-adminaddress the four review findings on the refused re-seed e2b0b9e -
copilot-adminbound the change card's failure reason #278 -
depsrestore sharp's platform binaries in the lock file 2bf50a0 -
protectionpublish no longer stales its own approval; ordinary Publish for bypass 7fbd981 -
protectionsend the overdue threshold with the queue instead of restating it 41b0a49 -
protectionthe queue's empty-page assertions carry the new field 12780a3 -
protectiondeclare the shell-admin dependency the Reviews page imports 419d71d -
protection-adminkey the entry review by the entry's version 1215f95 -
protection-adminhold Publish while the review key is re-read 6b14dbc -
releaselet reserve-names run again straight after a batch c6a49cf -
server-e2eclear mail_deliveries between tests f8db838 -
shellreserve the gutter the copilot dock covers, and close four coverage gaps 6a837c1
With thanks to Claude, Claude Opus 5, Claude Opus 5 (1M context), Pavel Makhanko @pmknk, pmknk.
-
-
0.5.2
Release on GitHubFixes
-
create-ortha-appconfigure the plugins the template only registered #250
With thanks to Claude Opus 5 (1M context), Pavel Makhanko @pmknk.
-
-
0.5.1
Release on GitHubFixes
-
releasepack what the build compiles, and state media-domain's licence 771bdbe
With thanks to Claude Opus 5 (1M context), Pavel Makhanko.
-
-
0.5.0
Release on GitHubFeatures
-
activityclose the silent gaps in the audit trail (server) 41a038c -
activityaudit the contexts that raised no events at all 599485a -
activitymake the trail's gaps and one entry's history reachable 57e3cd0 -
activity-adminrender every kind the server writes, and pin it e9d1640 -
cliadd `ortha --version` 6856416 -
design-systemlet MultiSelect add what was typed, and use it 364fa2b -
users-adminfilter Members through the inline panel, not a drawer 8a44019 -
webhooksdeliver content changes to configured endpoints 9246ffb -
webhooks-adminconfigure endpoints and read the delivery log 2c9583a -
webhooks-adminpick content types, without closing the list 465c1cb -
webhooks-adminscope the type picker to the chosen workspaces ecb3707 -
webhooks-admina status switch that asks, and custom headers e746ef5
Fixes
-
adminclose the ten UI tickets ORT-197…ORT-206 #247 -
adminpick the Action filter by label, and lift the empty-group mute to AA 09f647f -
alarmssay the severity on the two surfaces that had stopped 4940789 -
api-tokensanswer honestly about an expiry, a scope, and an empty bucket 3793433 -
api-tokens-adminkeep a credential from being minted twice, and give focus somewhere to land 275b5df -
clianswer `ortha --help` instead of "Unknown command" 25ca401 -
configread the environment only through readEnv, so a blank key means absent f9c1a50 -
contentdescribe the public content API in the OpenAPI document f36b0ad -
copilotkeep a partial answer when a run ends mid-stream 21ea422 -
create-ortha-appexpect the plugins the template actually registers 66649d4 -
design-systemdrop the dropdown exit animation, which kept closed overlays live 1362201 -
design-systemthe spinner stops rotating under reduced motion, without stopping ab4f6ae -
e2estop the memory advisory crying wolf on macOS bb11484 -
i18njoin the ambient unit of work when checking a translation group 6590443 -
identity-adminsay why the session ended, and ask for the confirm once 1f36533 -
identity-adminanswer an unknown /identity path instead of a blank page f5e8991 -
mediamove the timed-text track types out of infrastructure 80219e9 -
mediagive the storage port its own package, so an adapter costs an adapter 82d1287 -
query-builderrestore `like` to the reverse map, which silently dropped it 4574cfd -
query-builderopen the filter panel without scrolling its own clip 0fc3907 -
segmentscheck an entry's workspace before writing its audiences 5e974b4 -
server-e2eretry a deadlocked truncate, and unpin two stale expectations aedcd99 -
server-e2ebind the harness to loopback, so the suite stops losing requests 99a648f -
transferlet the link pass see what the first write actually wrote 585418d -
users-serverreject an explicit null name instead of clearing it d73d8ff -
webhookspurge a deleted workspace's subscription rows #245 -
webhooks-adminkeep node:crypto out of the browser bundle a58eeb4 -
webhooks-adminthe three things only a browser could find 7e73abd -
webhooks-adminname the two filter pickers 7c3bf77 -
workspacespurge the rows a deleted workspace used to strand ba4632b -
workspaces-adminstop the roster surfaces failing quietly 3b12ffe -
wysiwygactually clear the alt when an image is marked decorative dd0b967 -
wysiwygkeep a passage's language when formatting is cleared fcd1f3b -
wysiwygstop Tab re-appending the row TableTab just bounded 5b0a906
With thanks to Claude, Claude Opus 5, Claude Opus 5 (1M context), Pavel Makhanko @pmknk.
-
-
0.4.3
Release on GitHubFeatures
-
alarmscontent rules that flag problems without blocking a write b86f449 -
alarmsexpose findings to the copilot and render them dfbfe29 -
alarmsgroup flagged records by the alarm that flagged them 3d5740b -
alarmsmark required fields, remove muting, wire the relation picker 7c6de57 -
alarmsre-check from a group header, and collapse the builder on apply b4e19c5 -
contentsaved list views for collection records dcf8040 -
content,segmentsversion an entry's access with the entry 1828438 -
identitylet a contributor delete content and media 9ae9248 -
query-buildera named category for flat fields, and put segments in one 2210792 -
segmentsreader access as two lists on the entry e5f500e -
segmentsapply entry access on the entry's own Save/Publish 7716a0a -
segmentsaudience pages, workspace scope, pagination, bulk set f1f2afc -
segmentsfilter records by audience; move the Access tab's directory link ec850b2 -
segmentsdefault the audience filter to multi-select, and cover both halves by e2e 7e4106a -
segmentsrevise every locale a save's audiences reached, and load into skeletons 7ceebbb -
segmentsreach reader entitlements from MCP, the copilot and a token 0a6b6ab
Fixes
-
admin-e2esort from the header's button, not the cell around it 33eddbf -
alarmsrebuild the alarms UI around what people actually reported e8311ae -
alarmsdrop the dead space under a group that does not page a1f76dc -
contentapply the read scope inside relation windows, not only on hydration bb379d5 -
create-ortha-apprefuse a feature id no group defines b6c4a98 -
releasestop pack leaving a broken package staged b2e085e -
segmentsspace badge icons in the design system, validate the segment form da7a319 -
segmentsbind reader/audience ids as one uuid[] parameter f4bf6dd -
segmentswrite an entry's audiences to its whole locale group c364a01 -
server-e2egive the run the heap the run actually needs be0df26 -
server-e2ebound resetDb's wait for its own locks 29aabc9
With thanks to Claude, Claude Opus 5, Claude Opus 5 (1M context), Pavel Makhanko @pmknk.
-
-
0.4.2
Release on GitHubFixes
-
create-ortha-appmake Tailwind actually scan the installed packages 8951c7e
With thanks to Claude Opus 5 (1M context), Pavel Makhanko @pmknk.
-
-
0.4.1
Release on GitHubFixes
With thanks to Claude, Claude Opus 5 (1M context), Pavel Makhanko @pmknk.
-
0.4.0
Release on GitHubFeatures
-
cliadd `ortha` and `npx create-ortha-app` 5c056f8 -
content-admina ⋯ menu for the collection, and move Import into it #201 -
content-adminmove the ⋯ menu right, and fold bulk actions into one c5aaaec -
create-ortha-apppick features at scaffold time, in a proper wizard 860b424 -
create-ortha-appship the copilot by default, ask about protocols 4af1506 -
create-ortha-appdeclare every reachable package in a new app 17a97fb -
create-ortha-appship a working test setup in the generated app ea90aa4 -
create-ortha-appsplit e2e into server and admin suites 70411c9 -
identitySSO phase 0 — the provider seam, with no real IdP in it 3afa965 -
identitySSO phase 1 — a real identity provider c48b13e -
identitySSO phase 2 — what a sign-in is allowed to do 67a8811 -
identitySSO phase 3 — the long tail c7aa471 -
insightsput the selected range in the URL, so a dashboard can be shared bf0c3e9 -
mediaone storage provider per deployment, passed as one object 96c7b02 -
mediaship the in-memory storage provider as a package 218be99 -
mediaimplement the S3-compatible storage provider 8589f09 -
mediaserve downloads as a signed redirect when the backend can 57f0f80 -
mediaadd the Azure Blob Storage provider ffa1558 -
mediaadd the Google Cloud Storage provider fc67428 -
mediaadd the Vercel Blob provider a5a662a -
transferthe transfer kernel — document contract, formats, identity 37235c7 -
transferthe server plugin — one-hop export, two-phase import fd6eb11 -
transferthe admin plugin, and a bulk-action slot to hang it on 7c8b293 -
transferregister the plugin, and write down why it exists d1abf7c -
transferlink related records on import instead of copying them 744ab91
Fixes
-
admin-a11ystop the route announcer reading loading skeletons; give every skeleton an <h1> 36f955d -
admin-e2eclose the permission drift and two stale locators 810bc1f -
bootstrap-adminwire slot contributions from empty, so a hot update stops doubling them 99f1cf8 -
content-graphqlclose the maxComplexity budget's prototype-name fail-open 1298af4 -
content-graphqlbound SchemaCache, which kept one schema per grant set ever seen a3bde04 -
copilot-adminmake the transcript and the composer one column 33a8c2a -
copilot-provider-openairetry a transient upstream failure, as anthropic does d54d415 -
create-ortha-appclassify the two provider-authoring packages 94a294d -
databasedrain the pool and the in-flight outbox batch on shutdown ac173ef -
identity-serverdrop sessionSecret and tokenSecret, which nothing read 2d5b9b6 -
media-servermap the media tools' domain errors, so a bad argument is a 400 not an opaque 500 474a7ea -
media-serveranswer 404, not 500, when an asset's blob is missing from storage 98d6624 -
server-e2estop the local-storage suite leaking rows into the next file 1532d74 -
transferkey localized fields, and fold the locale into the match 5b5fb27 -
transferstop the import's link pass blanking the fields it just wrote 7510195 -
transfer-adminrefresh the list after an import, and explain the options ffaf843
With thanks to Claude, Claude Opus 4.8, Claude Opus 5, Claude Opus 5 (1M context), Pavel Makhanko @pmknk.
-
-
0.3.0
Release on GitHubFeatures
-
admingive the last six lazy routes a skeleton instead of a blank page b7b3937 -
contentmark entry-editor tabs that still hold required fields a2588e6 -
contentmodel richtext as a structured document, not an opaque string 3c1fe33 -
contentmodel alt text on a media value (ORT-83, ORT-91) c573e30 -
content-admindraw the boundary between translated and shared fields 4fb331d -
content-serverbatch the writes for the API, MCP and the copilot c06de35 -
copilotkeep a thread's model and its attached page with the session 3812cc3 -
copilotcache the prompt, and lift all three run ceilings together cf6d8fd -
copilotsay what a save must contain, which depends on publishable 12b950a -
copilotdrop defaultProvider — the provider list is the setting 6930757 -
copilotstand the dock down on the Agents view, and let a panel move there e6c4178 -
copilot-servertell the model that shared fields are not translatable a98ea87 -
devper-worktree dev stack slots for parallel tickets c2b29a1 -
i18n-serverbatch the translations, and stop content saves joining a group c037a12 -
identity,usersadmin-generated password reset links #11 -
medialet an asset carry captions and subtitles (ORT-92) 53c6ba6 -
users-servermachine codes on conflicts, and a resend cooldown #140
Fixes
-
a11ylandmarks, headings, dialog names, titles and localized chrome 586135e -
a11yname the scrollport, contain the mobile panel, fix the copilot transcript 9024592 -
a11yreachable tooltips, a shared shortcut guard, bounded table Tab 35a9fe4 -
a11ymake the query builder usable by screen reader (ORT-157) 1d7eba9 -
a11ygive the copilot consent prompt a deadline the user can see and extend (ORT-118) 90def35 -
a11yprompt for alt in the copilot write path, declare direction, mark a prefill's language 6eb1c45 -
a11yre-enable the structural axe rules, and fix what they caught 985c73a -
activity-adminrender every audit kind the server writes, and stop a bad timestamp blanking the app 4c709a0 -
activity-serveraudit the media library, invite acceptance, and refuse an unnameable subject 490c5dc -
admin-e2emake typecheck — the suite's only static gate — pass again daaba15 -
api-tokenslet the workspace picker scroll by wheel inside its dialog 03404fc -
api-tokens-adminstop the one-time secret being silently lost, and label what mints it 72d8976 -
appsvalidate the two composition roots instead of trusting them 47f6fe1 -
bootstrap-adminstop one plugin from taking the whole app down c52bf23 -
bootstrap-adminstop the route announcer naming the page you just left 647be7d -
bootstrap-serverlet the host trust its proxy so login throttling buckets per client b22e8b6 -
bootstrap-servermake the host's four deployment-shaped failures survivable d190f0d -
contentcount only real transitions in a bulk unpublish ac38291 -
contentstop the globe meaning two opposite things across the editor 1f57541 -
contentdisclose when a proposed edit rewrites every locale b681454 -
contentreject inherited Object.prototype names in the ?fields= whitelist #164 -
contentraise domain events for entry create, update, delete and restore 900fc27 -
content-admintell refusal, absence and failure apart 78b29de -
content-domainclose seven validation holes in the shared kernel e99aad9 -
content-graphqla 620-byte query no longer wedges the process 25ad080 -
content-graphqla single-record read costs one record, not a page 65e64e2 -
content-graphqldrop the needless escapes in the MediaAsset.alt description 1a4707a -
content-graphqlescape the cache key's separator instead of embedding it b09b571 -
content-serverenforce workspace content grants on the admin API cfb43bf -
copilotput a replayed tool result back on a user turn 36d2691 -
copilottell the model when an earlier turn was cut off 8733404 -
copilot-adminone thread one window, and controls that mean what they say b523ddc -
copilot-adminsay what the run is doing, and give a failed change room 84127e9 -
copilot-domainbound the untrusted fence and tighten the port's contracts 5843c22 -
copilot-serverown the parked run, bound the tool loop, keep every receipt 4ce655b -
databasestop the outbox from wedging the pool it drains 81f3eb0 -
design-systemsettle the toast corner in one place e62427a -
design-systemper-toast dismissal, localizable names, forced colors 5ae28bd -
design-systemgive the button focus ring enough contrast to see 8533c75 -
design-systemwatch the table, not just the wrapper, for overflow 75ca80b -
hooksthe catalog drift hooks never matched a file 42475e3 -
i18n-admintell "nothing" from "we couldn't ask", and state language #144 -
i18n-servera group lock, a guarded POST, an orphan check, honest filters 69d7c10 -
identityannounce a forced sign-out and explain it on the sign-in page f325e9e -
identity-admindrop the previous session's cache when the tab changes hands 10047aa -
identity-adminstop advertising controls the sign-in page cannot honour #8 -
identity-adminstop reporting an invite-lookup outage as a dead link 9a27ff0 -
identity-admintell the user when signing out fails b1b502a -
identity-admintell an API outage apart from being signed out 4aa274a -
identity-admingive an empty field one validation message, not two 12eb2d4 -
identity-adminclose the four open ORT-57 accessibility findings #129 -
identity-adminstop the focus ring boxing the auth page title 2748e91 -
identity-servercount the password ceiling in bytes, the unit bcrypt truncates on 22d94f8 -
identity-servergate a member's session list on users:update, not users:read 1c535c6 -
identity-serverrevoke sessions on a password change, and audit it 143564f -
identity-serveraudit API-token mint and revoke 84b463c -
identity-serverreject an API token minted for a workspace that does not exist 17099dd -
identity-serverreconcile the RBAC seeder so a retired permission stops being granted 297d75c -
mcp-serveranswer every verb, bound every exchange, map every resource failure 2e59ee2 -
mediabrowse the library on the server, and page it f0859a1 -
media-adminsay what the server said, and let alt text be written 8e55bf8 -
media-admin, copilot-admintwo landmark bugs the new axe rules found efaaae2 -
media-provider-localmake a write all-or-nothing, and keep every key inside the root 74a393e -
media-servertreat a download as hostile bytes, and mean the limits f0cafb3 -
nxstop db:generate caching a schema it cannot see, and refuse a migration nobody aimed 05dd392 -
packagingdeclare the deps four packages import but never listed fac626f -
query-builder-admin,insights-adminclose the crafted-filter crash and the silent dashboard states 259b536 -
server-e2ea broken run says so instead of blaming the product 90ef675 -
server-e2eclose the state a test could leak into the next one 1d15022 -
server-e2esay "memory" before the run says "regression" 7c68d69 -
shell-adminstop the chrome dropping focus, and stop a phone rewriting a desktop preference 6f07f31 -
tools-servervalidate what a tool is handed, and fail the deploy on a bad catalogue 89b61fb -
users-adminclose the eleven confirmed ORT-66 QA findings dee5c07 -
users-adminanchor roster focus outside the table 1ae4d71 -
users-admintake the member timeline's action labels from the one shared catalogue a92eff3 -
users-serverguard state-changing routes and stop blanket locking d6abb02 -
utils-adminrepair five seams every admin plugin inherits 6de165d -
utils-servermake the filter whitelist a whitelist again 3833733 -
utils-serverreject a filter operator the column type cannot answer 2ddcf4d -
workspaces-adminclose the five confirmed ORT-60 QA findings 0f52010 -
workspaces-adminclose the eleven ORT-60 accessibility findings 6967469 -
workspaces-admingive the switcher a width again, and fold the quick-list 25ee2d8 -
workspaces-serverclose the eight confirmed ORT-53 QA findings 450210e -
workspaces-serverpurge cross-plugin rows when a workspace is deleted #136 -
wysiwyg-adminlet the editor say what language it is in, and how to leave a1c5e88
With thanks to Pavel Makhanko @pmknk.
-