Changelog
0.10.0-alpha.1, 2026-10-12
A first look at the model designer: shape a model on screen instead of writing a file.
Releases are numbered by plan, not by date, so a higher number can ship before a lower one. All releases
Full changelog
Interim release, published 2026-10-12. This release was not tagged in the repository. This is the changelog's own text for the release; its links to files point at those files at the tag.
The model designer, released on its own (D14): everything since 0.9.0, Base 0.10 packages A0, N1,
A2, A4a, A4b, A4c and the designer checkpoint T1. Schema language 0.10. The spreadsheet onboarding
line (A3, A5–A8) follows in 0.10.0. One migration since 0.9.0 (20261011_01, the draft operation
history); a database of 0.9.0 upgrades on start.
Added
- Base 0.10 A0 (design, no product code): decisions D1–D10, D17–D21 and A-D5–A-D9 accepted; the model authoring API designed in API.md (draft operations and their kinds, history, undo and redo, source files and their profiles, the dry-run summary, inferences); ADR-041, model drafts change through recorded operations; journeys J33–J35 and their planned routes in the API inventory; the synthetic workbooks W1–W3 defined in test terms; the editor mock-up and the W1 sample approved.
- Base 0.10 N1: schema language 0.10, opened with navigation groups (D1, D22–D27; J33.9). An
application may declare
navigation.groups(key, label, collections,collapsed); the sidebar shows the collections in no group first, then each group as a foldable section whose fold a reader's browser remembers, marks a folded group holding the open collection, and opens a group's page (/apps/{app}/groups/{group}) listing its collections with a search by name. A group naming no collection of its application (INVALID_REFERENCE), a collection in two groups (INVALID_MODEL), a group key twice (DUPLICATE_KEY) andnavigationbelow schema 0.10 (INVALID_MODEL) are refused at their pointers; a 0.9 model is unchanged, with the same hash. The browser runnertest:browser:authoring-n1. - Base 0.10 N1, at the user's request: on a phone (below 760px) the data-context band is one line whose workspace, application (with its tile) and data context (Live, change sets, publications, with the line saying what an edit does) each open their choice; the top bar shows no application tabs in any area and the drawer no workspace selector. A group page's rows show a chevron and a pressed state.
- Base 0.10 A2: model drafts change through recorded operations (ADR-041, D29–D35; J33.1–J33.8,
J33.12, J08.9).
POST /model-drafts/{id}/operationsapplies a request of typed operations all or none atexpectedVersionas one step of the draft's history, answering the new version, the entries with their inverses and the compiler's diagnostics (a draft may be invalid between steps). 34 model-side kinds: names and keys (every reference rewritten; an element a consumer API names is refused, D29), the release identity and schema version, applications, object types (with a generated table view and detail page, containment byparent, D30), split, merge and conversion to a list type, attribute types and bindings, relation types and the relations allowed between types, views, panels and their lists, navigation groups. A removal takes what exists only for the removed element (D31).GET …/operationspages the history;POST …/undo(a step, orstepstogether) andPOST …/redoapply stored inverses as new steps (D32); a step later steps build on is refusedOPERATION_HAS_DEPENDANTS. A draft-only change of an element of the draft's base release is refusedOPERATION_REQUIRES_MIGRATIONwith the records, values and relationships it would touch, live and in change sets (D33). A whole-modelPATCHis recorded as onereplaceModelstep; installation makes the installed release the draft's base, leaving its version (D17, D34). New codesINVALID_OPERATION,OPERATION_REQUIRES_MIGRATION,OPERATION_HAS_DEPENDANTS,NOTHING_TO_UNDO,NOTHING_TO_REDO,OPERATION_BATCH_TOO_LARGE; settingMODEL_OPERATION_MAX_ITEMS(500); migration20261011_01(model_draft_operations). - Base 0.10 A4a: the model editor's model pane (D36–D42; J33 in the browser). A draft opens in the
editor from Settings › Model (Open in editor; New draft opens it too), full width under
the top bar: the model pane (applications with their types in their containment tree, navigation
groups, relation types, attribute types, each marked new, changed or released), the selected
element with its operations, the relationship matrix, the issues linked to their elements and the
history in plain words with undo and redo. Every model-side operation is in a menu, through one
dialog; Move to… moves an attribute or a type, and a drag in the model pane opens it with its
target. A released element's draft-only change is refused with what it would affect; a step on a
draft another editor moved on is held and offered again. Install and activate in one confirmed
step, with the proposed version, the differences and the compatibility. On a phone the panes are
tabs.
GET /model-drafts/{id}/outlineserves the draft's structure, the marks against the base release and the diagnostics with their elements. New draft from an empty model now starts a document of the newest schema language with a release identity, instead of{}. The browser runnertest:browser:authoring-a4a. - Base 0.10 A4b: the preview and layout editing (D43–D50; J33.10). Preview in a type's header
shows its record page and table in the editor's centre, drawn by the record screen's own renderers
from the draft before it is installed, over a record read live in a workspace and record chosen in
the band (or an empty record for a new type); the page's controls are shown and disabled, and
nothing the preview shows writes. Edit layout opens the layout editor over the whole editor,
marked by its own band with Undo, Redo and Back to the model editor: panels moved within and
between
mainandside, hidden or shown, renamed, their columns and sort; fields moved, grouped into new field groups and added; a table view's columns, filters and default sort; by menu and keyboard, or by dragging with mouse or pen. Each change is one step of the draft. A draft that does not compile is not previewed.GET /model-drafts/{id}/modelanswers a draft compiled asGET /modelserves the active model, with its placements; the operationsaddDetailPageandremoveDetailPagegive a type without a declared detail page the page a new type gets. The browser runnertest:browser:authoring-a4b. - Base 0.10 A4c: the consumer API editor (D51–D59; J33.13, J33.14). The editor's left pane has
Model and Consumer APIs tabs, + adding within the open one. A consumer API opens with its
tabs: the exposed types and public names and the related records it serves; its fields with their
sources (chosen in order from a picklist of what the exposed types and the types above them hold),
role and default, edited in place (no field name is typed by hand anywhere in the tab: match
fields, related fields, XREF fields, sort fields, routes and watched outputs are chosen from what
is valid there); the operations it offers, its lists, XREF match rules
and custom events; its filters; and two documents with Copy and Download, the Schema of the
message consumers receive and a Message example. Six operation kinds change definitions, each
step with undo:
addConsumerApi(a starting definition from the exposed types),removeConsumerApiand four part verbs naming a part by a JSON pointer (setConsumerApiPart,insertConsumerApiPart,moveConsumerApiPart,removeConsumerApiPart). The outline lists each definition with its contract against the active release, shown as "Needs v2" with a step that raises the version; the install dialog lists each consumer API's result and activates only when none needs a higher version.GET /model-drafts/{id}/consumer-apis/{consumerApi}and itsschema.json,example.jsonandopenapi.jsonserve a draft's definition and documents before it is installed.setKeyon an element a consumer API names now rewrites the definition instead of refusing (D54, replacing A2's D29). Switching XREF off asks first, since its match rules go with it, and stops Resolve too. The browser runnertest:browser:authoring-a4c. - Base 0.10 T1, the designer checkpoint (D60–D64): US-P05 walked end to end in the browser on both
designer models by
test:browser:authoring-t1. An application designed from an empty draft, and the active model extended with a consumer API change that needs a higher contract version, are each installed, used on the record screen and served by the consumer tier. Each walk is taken once by keyboard alone and once by clicking every button. Each step is checked on the server, and the run fails on a console error or a failed request. The designer's surfaces (the editor, the matrix, its dialogs, history and install dialog, the preview and layout editor, a consumer API's fields and schema, the sidebar's groups, a group page, and the phone band, drawer and editor tabs) join the accessibility gate in light and dark and the visual gate.
Fixed
- After a model draft was installed, the editor marked everything the draft had added, and the types and applications around it, as changed against the release just installed from it. The release holds each element with its defaults written out, and the outline compared it with the draft's authored form; marks now compare both in the release's form (0.10 T1, from A4a).
- The preview of a new type's empty record asked the server for the history of a record that does not exist (a 404 in the browser); the record page's History panel now reads through the page's client, which answers the preview's empty record itself (0.10 T1, from A4b).
- Every dialog's labelled fields: a label stood further from its own control than from the field before it; the label now sits right above its control with a clear step to the next field, and a dialog's buttons keep a margin from its bottom edge (0.10 A4a).
setRelationRulerefused a change of which records a released relationship may choose (candidates) as needing a migration; it is compatible (0.9 K7) and now applies (0.10 A4a).- The model editor can remove a relation type that type pairs still use: the pairs and the type go in one step (0.10 A4a); every relation, a parent link included, has Remove relation in its menu.
- A relation allowed on a model draft joined a relations panel set up for other records (a translations panel sorted by its language) and made the draft invalid; it now joins only a plain relations panel or gets its own (0.10 A4a, A2's generated layout).
- Every table's cut-off cell shows its whole value, wrapped, on hover, focus or a long press (0.10 A4a).
- Every menu (
⋯and the like): items show hover, may carry a glyph, a second line and a section heading (0.10 A4a). - Supported schema versions are listed oldest first by number (
0.10after0.9), inGET /system'sschemaLanguages, a refusal'ssupportedSchemaVersionsand the startup and upgrade messages; a text sort would have put0.10first (0.10 N1).
Let us run it for you.
Backups, upgrades, TLS and monitoring are ours. Your data stays exportable any time.