Skip to content

Changes from 0.2

Contents of DISL 0.4

DISL 0.3 (draft, 2026-10-05) adds the constructs listed below, approved by the product owner on 2026-10-05; each is optional, and its absence is the 0.2 behaviour. This section then lists every place where 0.3 gives a meaning that 0.2 left open or stated otherwise, with the reason. Everything not listed keeps its 0.2 meaning, and no valid 0.2 specification becomes invalid.

Construct Section Schema
bounds.neighbour on node and relation types: ordered attributes kept a gap apart 4.3 NodeType.bounds, RelationType.bounds, $defs/NeighbourBounds
An enum value's color as a theme token 4.5, 6.13 EnumValue.color
minUnit on a ruler 5.13 Ruler.minUnit
tooltip on a shape part 6.8 ShapePart.tooltip
drawnFrom on anchors 6.9 AnchorSpec.drawnFrom
pointer on a connect gesture 6.10 ConnectGesture.pointer, $defs/GesturePointer
editText on a label 6.12 Label.editText
accepts and refusal on a label's parse 6.12 Label.parse.accepts, Label.parse.refusal
place on a drop and a create action; behavior.placements 7.2, 9.1, 9.4, 12.3 DropSpec.place, Action.create.place, Behavior.placements, $defs/ParentPlacement
display and parse on form items 7.5 FormItem.display, FormItem.parse, $defs/FieldParse
Form items of kind type; when on a retype entry 7.5, 9.5 FormItem.kind, FormItem.optionLabel, FormItem.refusals, Behavior.retype.*.when
A computed code on a built-in 8.1 BuiltInSetting.code
detail.count of std.duplicateId, detail.end of std.references 8.7 –
refusals on the layout action 9.4 Action.layout.refusals
The standard layout algorithms rowPacked, rows and tidyTree 10.1–10.3, B.10 LayoutConfig.rowPacked, .rows, .tidyTree, $defs/RowPacked, $defs/RowsLayout, $defs/TidyTree
typeMap for a format binding 11.2 Persistence.typeMap, $defs/TypeMapEntry
plans, add and move on a persistence plugin 13.1 Plugin.plans, Plugin.add, Plugin.move
# Change 0.2 said 0.3 says Reason Section
1 Snapping of a new element Which notation's snapping a drop of a new element uses, and what point a rule receives, was unstated. The node notation of the created type, merged over the coordinate system's; the rule receives the point reference selects, with the placement anchor at the pointer. Trends and notes dropped on one hype cycle find their rows differently. 5.9
2 Layout algorithms DISL names algorithms and defines none. Three standard algorithms are defined; the rest are still only named. Two runtimes drew different trees and rows. 10
3 Bound coordinates under layout Never changed by layout. Still never changed, except the attributes an algorithm declares in writes (rows), written as one model edit. Arranging rows writes the row attribute. 10, 10.2
4 A relation with an end that names nothing Only an optional target end may be missing. Under typeMap, a relation read with a mapped end that names nothing is kept with that end unset, not drawn, and reported by std.references. A hand-edited file keeps a broken influence until the user fixes it. 4.9, 11.2
5 An editable label with a computed text An editable label requires an attribute binding in text. An attribute binding in editText satisfies it. A label shows more than the user edits. 6.12
6 A move sent to a persistence plugin FBL 0.1 named a move without fields. A plugin that does not declare move in plans is sent a remove and an add. Only a declared move can keep the element's bytes. 13.1
7 What textMetric governs Every measurement that affects geometry, autoSize, wrapping and ellipsis included, uses the declared metric. Layout-time measurement uses it: textWidth, textHeight and the layout inputs computed with them. Drawing measures with the real font, and a runtime may do so for autoSize, wrapping and ellipsis. Hosts measure drawn labels with the font they draw; only the layout must agree everywhere. 6.5

The draft's additions were amended on 2026-10-06 so that they state the behaviour of today's hype cycle and agent behavior modelling tools, which the code shows:

Construct The draft said It now says Section
Choices of a type form item The types behavior.retype[self.type].to allows, limited by options, which leaves out the element's own type. The types options gives, the element's own type among them; without options, the own type and the allowed targets. Choosing the own type applies the type's attributeMapping and nothing else. 7.5
when on a retype entry The type item and the retype action refuse a type whose when is false; the example used when for a refusal that depends on the children. when is optional and defaults to true. A refusal that depends on the element's state is the writer's, stated as the type item's refusals and kept out of the choices by options. 9.5
rows: refusals.nothingDrawn Fires while the scope holds no element of a type in extent. Fires while no element has a drawable extent: an element whose extent does not evaluate, with no id, or with an id an earlier element has, does not take part. 9.4, 10.2
rows: elements covering several rows The fewest rows any assignment could use. Each element takes a top row from which all its rows are free; rows an element covering several rows spans are pinned and never swapped. The fewest rows are guaranteed only while every extent covers one row. 10.2
tidyTree distances Children spacing.layer beyond their parent; minGap from the parent; top-level elements packed apart. spacing.layer and minGap are gaps from the parent's far edge to the row's near edge; the top-level elements share one row. 10.3
The rows example A trigger's extent from x - 16.0 - textWidth(self.name, 12.0) to x + 8.0, 8 units off with x the left edge, measuring the name only. From x - 8.0 less the width of the name and date to x2, as the hype cycle definition has it. 10.2

Five more constructs became standard on 2026-10-06, by Peter's ruling ("Spec all but wire ids"). The hype cycle and agent behavior modelling definitions had declared them under x- keys shaped as these proposals, and now use the standard keys. Each is optional, and its absence is the 0.2 behaviour. The wire-id maps those definitions declare (x-ghg, x-abm) stay extension keys.

Construct Was Section Schema
group on a context-menu entry: consecutive entries with one name form one menu group x-menu.group 7.3 ContextTool.group
id on a form item: an explicit row id x-field.id 7.5 FormItem.id
constraints.order: findings by the order of their codes, then by line; a group of duplicates by its first member constraints.x-order 8.1, 8.6 Constraints.order
oncePerGroup on a built-in: a group of duplicates reported once, at its second or its last member x-builtIn.oncePerGroup 8.1, 8.7 BuiltInSetting.oncePerGroup
detail.violation of std.endpoints (source, target, selfLoop or parallel), which a computed code reads read as detail.?violation, not listed 8.7 –

Referenced from