ATD 0.1 schema
The JSON Schema of ATD 0.1 (atd.schema.json) has 74 definitions. They are grouped here by the layers of Appendix A.2, each with its own description above its JSON. The file itself is published unchanged at /adp/atd/schema/0.1/atd.schema.json, the address of its $id, for validators and editors.
Not listed in Appendix A.2
Where a node stands in its file: UTF-8 byte offsets of its first byte and of the byte after it, and the 1-based line and column of its start and end, columns in code points (ATD §3.1, §15).
{
"type": "object",
"properties": {
"file": {
"type": "string"
},
"start": {
"type": "integer",
"minimum": 0
},
"end": {
"type": "integer",
"minimum": 0
},
"line": {
"type": "integer",
"minimum": 1
},
"column": {
"type": "integer",
"minimum": 1
},
"endLine": {
"type": "integer",
"minimum": 1
},
"endColumn": {
"type": "integer",
"minimum": 1
}
},
"additionalProperties": false,
"required": [
"file",
"start",
"end",
"line",
"column"
]
}A name as written, with where it stands: a NAME or a keyword in a name position (ATD §3.6).
{
"type": "object",
"properties": {
"text": {
"type": "string"
},
"span": {
"$ref": "#/$defs/Span"
}
},
"additionalProperties": false,
"required": [
"text",
"span"
]
}A dotted name, layout.twoSidedTree, std.missingId.
{
"type": "object",
"properties": {
"text": {
"type": "string",
"pattern": "^[A-Za-z_][A-Za-z0-9_]*(\\.[A-Za-z_][A-Za-z0-9_]*)*$"
},
"span": {
"$ref": "#/$defs/Span"
}
},
"additionalProperties": false,
"required": [
"text",
"span"
]
}A type: a qualified name with its type arguments (list<Concept>).
{
"type": "object",
"properties": {
"name": {
"$ref": "#/$defs/QualifiedName"
},
"arguments": {
"type": "array",
"items": {
"$ref": "#/$defs/TypeRef"
}
},
"span": {
"$ref": "#/$defs/Span"
}
},
"additionalProperties": false,
"required": [
"name",
"span"
]
}A value (ATD §6): exactly one of a literal, a CEL expression with its abstract syntax, a reference to an attribute, a theme token or a parameter, a settings map, or a list.
{
"type": "object",
"oneOf": [
{
"description": "A literal: a bare word, a number, a string or a length.",
"type": "object",
"properties": {
"literal": {
"type": [
"string",
"number",
"boolean",
"null"
]
},
"form": {
"enum": [
"word",
"number",
"string",
"length"
]
},
"span": {
"$ref": "#/$defs/Span"
}
},
"additionalProperties": false,
"required": [
"literal",
"form",
"span"
]
},
{
"description": "A CEL expression in parentheses.",
"type": "object",
"properties": {
"cel": {
"type": "string"
},
"ast": {
"$ref": "#/$defs/CelNode"
},
"span": {
"$ref": "#/$defs/Span"
}
},
"additionalProperties": false,
"required": [
"cel",
"ast",
"span"
]
},
{
"description": "`@path`: an attribute of the current element, two-way where the position allows.",
"type": "object",
"properties": {
"attribute": {
"type": "string"
},
"span": {
"$ref": "#/$defs/Span"
}
},
"additionalProperties": false,
"required": [
"attribute",
"span"
]
},
{
"description": "`$name`: a theme token.",
"type": "object",
"properties": {
"token": {
"type": "string"
},
"span": {
"$ref": "#/$defs/Span"
}
},
"additionalProperties": false,
"required": [
"token",
"span"
]
},
{
"description": "`#name`: a parameter of the enclosing shape, marker or template.",
"type": "object",
"properties": {
"param": {
"type": "string"
},
"span": {
"$ref": "#/$defs/Span"
}
},
"additionalProperties": false,
"required": [
"param",
"span"
]
},
{
"description": "`{ key: value … }`: a settings map, in written order.",
"type": "object",
"properties": {
"settings": {
"type": "array",
"items": {
"$ref": "#/$defs/Setting"
}
},
"span": {
"$ref": "#/$defs/Span"
}
},
"additionalProperties": false,
"required": [
"settings",
"span"
]
},
{
"description": "`[ value, … ]`: a list.",
"type": "object",
"properties": {
"list": {
"type": "array",
"items": {
"$ref": "#/$defs/Value"
}
},
"span": {
"$ref": "#/$defs/Span"
}
},
"additionalProperties": false,
"required": [
"list",
"span"
]
}
]
}One key: value pair (ATD §6.4); quoted when the key was written as a string.
{
"type": "object",
"properties": {
"key": {
"type": "string"
},
"quoted": {
"type": "boolean"
},
"value": {
"$ref": "#/$defs/Value"
},
"span": {
"$ref": "#/$defs/Span"
}
},
"additionalProperties": false,
"required": [
"key",
"value",
"span"
]
}CEL's abstract syntax (ATD §6.3), with spans: an operator is a call of its CEL function name (_+_, _&&_, !_, -_, _?_:_, _[_], @in, _[?_], _?._), a macro is a call marked macro, a method call has a target.
{
"type": "object",
"oneOf": [
{
"description": "An identifier; `root` when written with a leading dot.",
"type": "object",
"properties": {
"ident": {
"type": "string"
},
"root": {
"type": "boolean"
},
"span": {
"$ref": "#/$defs/Span"
}
},
"additionalProperties": false,
"required": [
"ident",
"span"
]
},
{
"description": "A field selection.",
"type": "object",
"properties": {
"select": {
"type": "string"
},
"operand": {
"$ref": "#/$defs/CelNode"
},
"optional": {
"type": "boolean"
},
"span": {
"$ref": "#/$defs/Span"
}
},
"additionalProperties": false,
"required": [
"select",
"operand",
"span"
]
},
{
"description": "A call of a function, an operator or a macro.",
"type": "object",
"properties": {
"call": {
"type": "string"
},
"target": {
"$ref": "#/$defs/CelNode"
},
"args": {
"type": "array",
"items": {
"$ref": "#/$defs/CelNode"
}
},
"macro": {
"type": "boolean"
},
"span": {
"$ref": "#/$defs/Span"
}
},
"additionalProperties": false,
"required": [
"call",
"args",
"span"
]
},
{
"description": "A list literal; `optional` names the indexes written with `?`.",
"type": "object",
"properties": {
"list": {
"type": "array",
"items": {
"$ref": "#/$defs/CelNode"
}
},
"optional": {
"type": "array",
"items": {
"type": "integer"
}
},
"span": {
"$ref": "#/$defs/Span"
}
},
"additionalProperties": false,
"required": [
"list",
"span"
]
},
{
"description": "A map literal.",
"type": "object",
"properties": {
"map": {
"type": "array",
"items": {
"description": "An entry.",
"type": "object",
"properties": {
"key": {
"$ref": "#/$defs/CelNode"
},
"value": {
"$ref": "#/$defs/CelNode"
},
"optional": {
"type": "boolean"
}
},
"additionalProperties": false,
"required": [
"key",
"value"
]
}
},
"span": {
"$ref": "#/$defs/Span"
}
},
"additionalProperties": false,
"required": [
"map",
"span"
]
},
{
"description": "A literal: `type` is CEL's type of it.",
"type": "object",
"properties": {
"literal": {
"type": [
"string",
"number",
"boolean",
"null"
]
},
"type": {
"enum": [
"int",
"uint",
"double",
"string",
"bytes",
"bool",
"null_type"
]
},
"text": {
"type": "string"
},
"span": {
"$ref": "#/$defs/Span"
}
},
"additionalProperties": false,
"required": [
"literal",
"type",
"span"
]
}
]
}The abstract tree of one .atd file, as atd tree prints it (ATD §4.5, FR-030). It is not an interchange form: nothing reads it back as a description.
{
"type": "object",
"properties": {
"atd": {
"type": "string",
"pattern": "^[0-9]+\\.[0-9]+$"
},
"file": {
"type": "string"
},
"description": {
"oneOf": [
{
"$ref": "#/$defs/Tool"
},
{
"$ref": "#/$defs/Part"
}
]
}
},
"additionalProperties": false,
"required": [
"atd",
"file",
"description"
]
}The tool construct of a root file (ATD §5.1).
{
"type": "object",
"properties": {
"kind": {
"const": "tool"
},
"span": {
"$ref": "#/$defs/Span"
},
"doc": {
"description": "The documentation of the construct: its `///` comments, joined, and its `doc` member.",
"type": "string"
},
"toolKind": {
"enum": [
"diagram",
"designer",
"editor"
]
},
"origin": {
"type": "string",
"pattern": "^[A-Za-z0-9_][A-Za-z0-9_.-]*/[A-Za-z0-9_][A-Za-z0-9_.-]*$"
},
"version": {
"type": "string"
},
"members": {
"type": "array",
"items": {
"$ref": "#/$defs/Member"
}
}
},
"additionalProperties": false,
"required": [
"kind",
"span",
"toolKind",
"origin",
"version",
"members"
]
}A part of a description (ATD §5.2).
{
"type": "object",
"properties": {
"kind": {
"const": "part"
},
"span": {
"$ref": "#/$defs/Span"
},
"doc": {
"description": "The documentation of the construct: its `///` comments, joined, and its `doc` member.",
"type": "string"
},
"origin": {
"type": "string"
},
"members": {
"type": "array",
"items": {
"$ref": "#/$defs/Member"
}
}
},
"additionalProperties": false,
"required": [
"kind",
"span",
"origin",
"members"
]
}A member of a tool or a part: a construct of the core (ATD §7), the script (§12), a surface (§8 to §10) or a binding (§11).
{
"oneOf": [
{
"$ref": "#/$defs/Label"
},
{
"$ref": "#/$defs/DocMember"
},
{
"$ref": "#/$defs/SettingMember"
},
{
"$ref": "#/$defs/Import"
},
{
"$ref": "#/$defs/Requires"
},
{
"$ref": "#/$defs/Model"
},
{
"$ref": "#/$defs/Constraints"
},
{
"$ref": "#/$defs/Constraint"
},
{
"$ref": "#/$defs/Builtin"
},
{
"$ref": "#/$defs/Operation"
},
{
"$ref": "#/$defs/Hook"
},
{
"$ref": "#/$defs/Reason"
},
{
"$ref": "#/$defs/MessageDecl"
},
{
"$ref": "#/$defs/Behavior"
},
{
"$ref": "#/$defs/Persistence"
},
{
"$ref": "#/$defs/Plugin"
},
{
"$ref": "#/$defs/Function"
},
{
"$ref": "#/$defs/Coordinates"
},
{
"$ref": "#/$defs/Notation"
},
{
"$ref": "#/$defs/Toolbox"
},
{
"$ref": "#/$defs/Form"
},
{
"$ref": "#/$defs/Layout"
},
{
"$ref": "#/$defs/Viewpoint"
},
{
"$ref": "#/$defs/TableSurface"
},
{
"$ref": "#/$defs/HierarchySurface"
},
{
"$ref": "#/$defs/TextSurface"
},
{
"$ref": "#/$defs/Binding"
}
]
}label value: a display name or a label's text.
{
"type": "object",
"properties": {
"kind": {
"const": "label"
},
"span": {
"$ref": "#/$defs/Span"
},
"doc": {
"description": "The documentation of the construct: its `///` comments, joined, and its `doc` member.",
"type": "string"
},
"value": {
"$ref": "#/$defs/Value"
}
},
"additionalProperties": false,
"required": [
"kind",
"span",
"value"
]
}doc value.
{
"type": "object",
"properties": {
"kind": {
"const": "doc"
},
"span": {
"$ref": "#/$defs/Span"
},
"doc": {
"description": "The documentation of the construct: its `///` comments, joined, and its `doc` member.",
"type": "string"
},
"value": {
"$ref": "#/$defs/Value"
}
},
"additionalProperties": false,
"required": [
"kind",
"span",
"value"
]
}A setting among the members of a construct.
{
"type": "object",
"properties": {
"kind": {
"const": "setting"
},
"span": {
"$ref": "#/$defs/Span"
},
"doc": {
"description": "The documentation of the construct: its `///` comments, joined, and its `doc` member.",
"type": "string"
},
"setting": {
"$ref": "#/$defs/Setting"
}
},
"additionalProperties": false,
"required": [
"kind",
"span",
"setting"
]
}import "file" (a part), or import "file" as name (a library) (ATD §5.3).
{
"type": "object",
"properties": {
"kind": {
"const": "import"
},
"span": {
"$ref": "#/$defs/Span"
},
"doc": {
"description": "The documentation of the construct: its `///` comments, joined, and its `doc` member.",
"type": "string"
},
"path": {
"type": "string"
},
"as": {
"$ref": "#/$defs/Name"
},
"settings": {
"type": "array",
"items": {
"$ref": "#/$defs/Setting"
}
}
},
"additionalProperties": false,
"required": [
"kind",
"span",
"path"
]
}requires capability name@range (ATD §13).
{
"type": "object",
"properties": {
"kind": {
"const": "requires"
},
"span": {
"$ref": "#/$defs/Span"
},
"doc": {
"description": "The documentation of the construct: its `///` comments, joined, and its `doc` member.",
"type": "string"
},
"capability": {
"$ref": "#/$defs/QualifiedName"
},
"range": {
"type": "string"
}
},
"additionalProperties": false,
"required": [
"kind",
"span",
"capability",
"range"
]
}model { … } (ATD §7.4).
{
"type": "object",
"properties": {
"kind": {
"const": "model"
},
"span": {
"$ref": "#/$defs/Span"
},
"doc": {
"description": "The documentation of the construct: its `///` comments, joined, and its `doc` member.",
"type": "string"
},
"members": {
"type": "array",
"items": {
"oneOf": [
{
"$ref": "#/$defs/Element"
},
{
"$ref": "#/$defs/Relation"
},
{
"$ref": "#/$defs/Enum"
},
{
"$ref": "#/$defs/DataType"
},
{
"$ref": "#/$defs/DocumentDecl"
},
{
"$ref": "#/$defs/SettingMember"
},
{
"$ref": "#/$defs/DocMember"
}
]
}
}
},
"additionalProperties": false,
"required": [
"kind",
"span",
"members"
]
}element Name extends … { … }: an element type (DISL's node type, DESL's element type).
{
"type": "object",
"properties": {
"kind": {
"const": "element"
},
"span": {
"$ref": "#/$defs/Span"
},
"doc": {
"description": "The documentation of the construct: its `///` comments, joined, and its `doc` member.",
"type": "string"
},
"name": {
"$ref": "#/$defs/Name"
},
"extends": {
"type": "array",
"items": {
"$ref": "#/$defs/QualifiedName"
}
},
"members": {
"type": "array",
"items": {
"oneOf": [
{
"$ref": "#/$defs/Attribute"
},
{
"$ref": "#/$defs/Contains"
},
{
"$ref": "#/$defs/Port"
},
{
"$ref": "#/$defs/SettingMember"
},
{
"$ref": "#/$defs/DocMember"
},
{
"$ref": "#/$defs/Label"
}
]
}
}
},
"additionalProperties": false,
"required": [
"kind",
"span",
"name"
]
}relation Name from … to … { … } (DISL §4.9).
{
"type": "object",
"properties": {
"kind": {
"const": "relation"
},
"span": {
"$ref": "#/$defs/Span"
},
"doc": {
"description": "The documentation of the construct: its `///` comments, joined, and its `doc` member.",
"type": "string"
},
"name": {
"$ref": "#/$defs/Name"
},
"extends": {
"type": "array",
"items": {
"$ref": "#/$defs/QualifiedName"
}
},
"from": {
"type": "array",
"items": {
"$ref": "#/$defs/QualifiedName"
}
},
"to": {
"type": "array",
"items": {
"$ref": "#/$defs/QualifiedName"
}
},
"members": {
"type": "array",
"items": {
"oneOf": [
{
"$ref": "#/$defs/Attribute"
},
{
"$ref": "#/$defs/Contains"
},
{
"$ref": "#/$defs/Port"
},
{
"$ref": "#/$defs/SettingMember"
},
{
"$ref": "#/$defs/DocMember"
},
{
"$ref": "#/$defs/Label"
}
]
}
}
},
"additionalProperties": false,
"required": [
"kind",
"span",
"name"
]
}attribute name: Type flags { … } (DISL §4.3, DESL §4.3).
{
"type": "object",
"properties": {
"kind": {
"const": "attribute"
},
"span": {
"$ref": "#/$defs/Span"
},
"doc": {
"description": "The documentation of the construct: its `///` comments, joined, and its `doc` member.",
"type": "string"
},
"name": {
"$ref": "#/$defs/Name"
},
"type": {
"$ref": "#/$defs/TypeRef"
},
"required": {
"type": "boolean"
},
"many": {
"type": "boolean"
},
"readonly": {
"type": "boolean"
},
"default": {
"$ref": "#/$defs/Value"
},
"settings": {
"type": "array",
"items": {
"$ref": "#/$defs/Setting"
}
}
},
"additionalProperties": false,
"required": [
"kind",
"span",
"name",
"type"
]
}contains Types as slot ordered (DISL §4.8, DESL §4.6).
{
"type": "object",
"properties": {
"kind": {
"const": "contains"
},
"span": {
"$ref": "#/$defs/Span"
},
"doc": {
"description": "The documentation of the construct: its `///` comments, joined, and its `doc` member.",
"type": "string"
},
"types": {
"type": "array",
"items": {
"$ref": "#/$defs/QualifiedName"
}
},
"slot": {
"$ref": "#/$defs/Name"
},
"ordered": {
"type": "boolean"
},
"settings": {
"type": "array",
"items": {
"$ref": "#/$defs/Setting"
}
}
},
"additionalProperties": false,
"required": [
"kind",
"span",
"types"
]
}port name { … } (DISL §4.10).
{
"type": "object",
"properties": {
"kind": {
"const": "port"
},
"span": {
"$ref": "#/$defs/Span"
},
"doc": {
"description": "The documentation of the construct: its `///` comments, joined, and its `doc` member.",
"type": "string"
},
"name": {
"$ref": "#/$defs/Name"
},
"settings": {
"type": "array",
"items": {
"$ref": "#/$defs/Setting"
}
}
},
"additionalProperties": false,
"required": [
"kind",
"span",
"name"
]
}enum Name "Label" { values } (DISL §4.5).
{
"type": "object",
"properties": {
"kind": {
"const": "enum"
},
"span": {
"$ref": "#/$defs/Span"
},
"doc": {
"description": "The documentation of the construct: its `///` comments, joined, and its `doc` member.",
"type": "string"
},
"name": {
"$ref": "#/$defs/Name"
},
"label": {
"type": "string"
},
"values": {
"type": "array",
"items": {
"description": "An enum value.",
"type": "object",
"properties": {
"name": {
"type": "string"
},
"quoted": {
"type": "boolean"
},
"span": {
"$ref": "#/$defs/Span"
},
"settings": {
"type": "array",
"items": {
"$ref": "#/$defs/Setting"
}
}
},
"additionalProperties": false,
"required": [
"name",
"span"
]
}
},
"settings": {
"type": "array",
"items": {
"$ref": "#/$defs/Setting"
}
}
},
"additionalProperties": false,
"required": [
"kind",
"span",
"name",
"values"
]
}datatype Name: Base { … } (DISL §4.4).
{
"type": "object",
"properties": {
"kind": {
"const": "datatype"
},
"span": {
"$ref": "#/$defs/Span"
},
"doc": {
"description": "The documentation of the construct: its `///` comments, joined, and its `doc` member.",
"type": "string"
},
"name": {
"$ref": "#/$defs/Name"
},
"base": {
"$ref": "#/$defs/TypeRef"
},
"settings": {
"type": "array",
"items": {
"$ref": "#/$defs/Setting"
}
}
},
"additionalProperties": false,
"required": [
"kind",
"span",
"name"
]
}document { … }: the attributes of the document itself.
{
"type": "object",
"properties": {
"kind": {
"const": "document"
},
"span": {
"$ref": "#/$defs/Span"
},
"doc": {
"description": "The documentation of the construct: its `///` comments, joined, and its `doc` member.",
"type": "string"
},
"members": {
"type": "array",
"items": {
"oneOf": [
{
"$ref": "#/$defs/Attribute"
},
{
"$ref": "#/$defs/Contains"
},
{
"$ref": "#/$defs/Port"
},
{
"$ref": "#/$defs/SettingMember"
},
{
"$ref": "#/$defs/DocMember"
},
{
"$ref": "#/$defs/Label"
}
]
}
}
},
"additionalProperties": false,
"required": [
"kind",
"span",
"members"
]
}constraints { … } (DISL §8, DESL §6).
{
"type": "object",
"properties": {
"kind": {
"const": "constraints"
},
"span": {
"$ref": "#/$defs/Span"
},
"doc": {
"description": "The documentation of the construct: its `///` comments, joined, and its `doc` member.",
"type": "string"
},
"members": {
"type": "array",
"items": {
"oneOf": [
{
"$ref": "#/$defs/Constraint"
},
{
"$ref": "#/$defs/Builtin"
},
{
"$ref": "#/$defs/SettingMember"
},
{
"$ref": "#/$defs/DocMember"
}
]
}
}
},
"additionalProperties": false,
"required": [
"kind",
"span",
"members"
]
}constraint id for Types { … }.
{
"type": "object",
"properties": {
"kind": {
"const": "constraint"
},
"span": {
"$ref": "#/$defs/Span"
},
"doc": {
"description": "The documentation of the construct: its `///` comments, joined, and its `doc` member.",
"type": "string"
},
"name": {
"$ref": "#/$defs/Name"
},
"for": {
"type": "array",
"items": {
"$ref": "#/$defs/QualifiedName"
}
},
"when": {
"$ref": "#/$defs/Expr"
},
"rule": {
"$ref": "#/$defs/Expr"
},
"message": {
"$ref": "#/$defs/Value"
},
"severity": {
"$ref": "#/$defs/Name"
},
"fixes": {
"type": "array",
"items": {
"$ref": "#/$defs/Fix"
}
},
"label": {
"$ref": "#/$defs/Value"
},
"settings": {
"type": "array",
"items": {
"$ref": "#/$defs/Setting"
}
}
},
"additionalProperties": false,
"required": [
"kind",
"span",
"name"
]
}builtin std.name { … }: settings of a built-in constraint (DISL §8.7).
{
"type": "object",
"properties": {
"kind": {
"const": "builtin"
},
"span": {
"$ref": "#/$defs/Span"
},
"doc": {
"description": "The documentation of the construct: its `///` comments, joined, and its `doc` member.",
"type": "string"
},
"name": {
"$ref": "#/$defs/QualifiedName"
},
"settings": {
"type": "array",
"items": {
"$ref": "#/$defs/Setting"
}
}
},
"additionalProperties": false,
"required": [
"kind",
"span",
"name"
]
}fix name "Label" { … }: a quick fix (DISL §8.5), or a fix on a range of an editor's text (ATD §10).
{
"type": "object",
"properties": {
"kind": {
"const": "fix"
},
"span": {
"$ref": "#/$defs/Span"
},
"doc": {
"description": "The documentation of the construct: its `///` comments, joined, and its `doc` member.",
"type": "string"
},
"name": {
"$ref": "#/$defs/Name"
},
"title": {
"type": "string"
},
"when": {
"$ref": "#/$defs/Expr"
},
"body": {
"type": "array",
"items": {
"$ref": "#/$defs/Statement"
}
},
"settings": {
"type": "array",
"items": {
"$ref": "#/$defs/Setting"
}
}
},
"additionalProperties": false,
"required": [
"kind",
"span",
"name"
]
}operation id "Label" for Types { … } (DISL §9.3, DESL §8.1).
{
"type": "object",
"properties": {
"kind": {
"const": "operation"
},
"span": {
"$ref": "#/$defs/Span"
},
"doc": {
"description": "The documentation of the construct: its `///` comments, joined, and its `doc` member.",
"type": "string"
},
"name": {
"$ref": "#/$defs/Name"
},
"title": {
"type": "string"
},
"for": {
"type": "array",
"items": {
"$ref": "#/$defs/QualifiedName"
}
},
"enabled": {
"$ref": "#/$defs/Expr"
},
"unavailable": {
"$ref": "#/$defs/Value"
},
"params": {
"type": "array",
"items": {
"$ref": "#/$defs/Param"
}
},
"confirm": {
"type": "array",
"items": {
"$ref": "#/$defs/Setting"
}
},
"label": {
"$ref": "#/$defs/Value"
},
"body": {
"type": "array",
"items": {
"$ref": "#/$defs/Statement"
}
},
"settings": {
"type": "array",
"items": {
"$ref": "#/$defs/Setting"
}
}
},
"additionalProperties": false,
"required": [
"kind",
"span",
"name",
"body"
]
}param name: Type.
{
"type": "object",
"properties": {
"kind": {
"const": "param"
},
"span": {
"$ref": "#/$defs/Span"
},
"doc": {
"description": "The documentation of the construct: its `///` comments, joined, and its `doc` member.",
"type": "string"
},
"name": {
"$ref": "#/$defs/Name"
},
"type": {
"$ref": "#/$defs/TypeRef"
},
"required": {
"type": "boolean"
},
"many": {
"type": "boolean"
},
"readonly": {
"type": "boolean"
},
"default": {
"$ref": "#/$defs/Value"
},
"settings": {
"type": "array",
"items": {
"$ref": "#/$defs/Setting"
}
}
},
"additionalProperties": false,
"required": [
"kind",
"span",
"name",
"type"
]
}hook id on event for Types { … } (DISL §9.2).
{
"type": "object",
"properties": {
"kind": {
"const": "hook"
},
"span": {
"$ref": "#/$defs/Span"
},
"doc": {
"description": "The documentation of the construct: its `///` comments, joined, and its `doc` member.",
"type": "string"
},
"name": {
"$ref": "#/$defs/Name"
},
"on": {
"$ref": "#/$defs/Name"
},
"for": {
"type": "array",
"items": {
"$ref": "#/$defs/QualifiedName"
}
},
"when": {
"$ref": "#/$defs/Expr"
},
"body": {
"type": "array",
"items": {
"$ref": "#/$defs/Statement"
}
},
"settings": {
"type": "array",
"items": {
"$ref": "#/$defs/Setting"
}
}
},
"additionalProperties": false,
"required": [
"kind",
"span",
"name",
"on",
"body"
]
}reason id "text" or reason id { when … message … } (DISL §2.3, §9.1).
{
"type": "object",
"properties": {
"kind": {
"const": "reason"
},
"span": {
"$ref": "#/$defs/Span"
},
"doc": {
"description": "The documentation of the construct: its `///` comments, joined, and its `doc` member.",
"type": "string"
},
"name": {
"$ref": "#/$defs/Name"
},
"message": {
"$ref": "#/$defs/Value"
},
"when": {
"$ref": "#/$defs/Expr"
},
"settings": {
"type": "array",
"items": {
"$ref": "#/$defs/Setting"
}
}
},
"additionalProperties": false,
"required": [
"kind",
"span",
"name"
]
}message id value: a standard message (DISL §9.1).
{
"type": "object",
"properties": {
"kind": {
"const": "message"
},
"span": {
"$ref": "#/$defs/Span"
},
"doc": {
"description": "The documentation of the construct: its `///` comments, joined, and its `doc` member.",
"type": "string"
},
"name": {
"$ref": "#/$defs/QualifiedName"
},
"value": {
"$ref": "#/$defs/Value"
}
},
"additionalProperties": false,
"required": [
"kind",
"span",
"name",
"value"
]
}behavior { … }.
{
"type": "object",
"properties": {
"kind": {
"const": "behavior"
},
"span": {
"$ref": "#/$defs/Span"
},
"doc": {
"description": "The documentation of the construct: its `///` comments, joined, and its `doc` member.",
"type": "string"
},
"settings": {
"type": "array",
"items": {
"$ref": "#/$defs/Setting"
}
}
},
"additionalProperties": false,
"required": [
"kind",
"span",
"settings"
]
}persistence { … }.
{
"type": "object",
"properties": {
"kind": {
"const": "persistence"
},
"span": {
"$ref": "#/$defs/Span"
},
"doc": {
"description": "The documentation of the construct: its `///` comments, joined, and its `doc` member.",
"type": "string"
},
"settings": {
"type": "array",
"items": {
"$ref": "#/$defs/Setting"
}
}
},
"additionalProperties": false,
"required": [
"kind",
"span",
"settings"
]
}plugin name { … } (DISL §13).
{
"type": "object",
"properties": {
"kind": {
"const": "plugin"
},
"span": {
"$ref": "#/$defs/Span"
},
"doc": {
"description": "The documentation of the construct: its `///` comments, joined, and its `doc` member.",
"type": "string"
},
"name": {
"$ref": "#/$defs/QualifiedName"
},
"settings": {
"type": "array",
"items": {
"$ref": "#/$defs/Setting"
}
}
},
"additionalProperties": false,
"required": [
"kind",
"span",
"name"
]
}fn name(params) -> Type recursion n { … } (ATD §12.1).
{
"type": "object",
"properties": {
"kind": {
"const": "fn"
},
"span": {
"$ref": "#/$defs/Span"
},
"doc": {
"description": "The documentation of the construct: its `///` comments, joined, and its `doc` member.",
"type": "string"
},
"name": {
"$ref": "#/$defs/Name"
},
"params": {
"type": "array",
"items": {
"description": "A parameter.",
"type": "object",
"properties": {
"name": {
"$ref": "#/$defs/Name"
},
"type": {
"$ref": "#/$defs/TypeRef"
}
},
"additionalProperties": false,
"required": [
"name",
"type"
]
}
},
"returns": {
"$ref": "#/$defs/TypeRef"
},
"recursion": {
"type": "integer",
"minimum": 1,
"maximum": 64
},
"body": {
"type": "array",
"items": {
"$ref": "#/$defs/Statement"
}
}
},
"additionalProperties": false,
"required": [
"kind",
"span",
"name",
"params",
"body"
]
}A CEL expression in a position that takes only an expression, written bare (ATD §6.2).
{
"type": "object",
"properties": {
"cel": {
"type": "string"
},
"ast": {
"$ref": "#/$defs/CelNode"
},
"span": {
"$ref": "#/$defs/Span"
}
},
"additionalProperties": false,
"required": [
"cel",
"ast",
"span"
]
}A statement of the script (ATD §12.2) or an action (§12.3). Its fields are those its form writes: name, type, value, target, path, condition, then, else, names, iterable, limit, body, assignments, parent, after, before, slot, at, size, place, as, source, to, by, x, y, width, height, form, severity, on, operation, args, settings.
{
"type": "object",
"properties": {
"kind": {
"enum": [
"let",
"var",
"assign",
"if",
"for",
"while",
"return",
"break",
"continue",
"fail",
"set",
"unset",
"create",
"connect",
"delete",
"move",
"resize",
"retype",
"reparent",
"reorder",
"view",
"open",
"openForm",
"editLabel",
"select",
"reveal",
"highlight",
"notify",
"layout",
"call",
"plugin"
]
},
"span": {
"$ref": "#/$defs/Span"
},
"name": {
"$ref": "#/$defs/Name"
},
"names": {
"type": "array",
"items": {
"$ref": "#/$defs/Name"
}
},
"type": {
"$ref": "#/$defs/TypeRef"
},
"value": {
"$ref": "#/$defs/Expr"
},
"target": {
"$ref": "#/$defs/Expr"
},
"path": {
"type": "array",
"items": {
"$ref": "#/$defs/Name"
}
},
"condition": {
"$ref": "#/$defs/Expr"
},
"then": {
"type": "array",
"items": {
"$ref": "#/$defs/Statement"
}
},
"else": {
"type": "array",
"items": {
"$ref": "#/$defs/Statement"
}
},
"iterable": {
"$ref": "#/$defs/Expr"
},
"limit": {
"type": "integer",
"minimum": 0
},
"body": {
"type": "array",
"items": {
"$ref": "#/$defs/Statement"
}
},
"assignments": {
"type": "array",
"items": {
"description": "An attribute and its CEL value.",
"type": "object",
"properties": {
"key": {
"type": "string"
},
"value": {
"$ref": "#/$defs/Expr"
},
"span": {
"$ref": "#/$defs/Span"
}
},
"additionalProperties": false,
"required": [
"key",
"value",
"span"
]
}
},
"parent": {
"$ref": "#/$defs/Expr"
},
"after": {
"$ref": "#/$defs/Expr"
},
"before": {
"$ref": "#/$defs/Expr"
},
"slot": {
"$ref": "#/$defs/Name"
},
"at": {
"$ref": "#/$defs/Expr"
},
"size": {
"$ref": "#/$defs/Expr"
},
"place": {
"$ref": "#/$defs/Name"
},
"as": {
"$ref": "#/$defs/Name"
},
"source": {
"$ref": "#/$defs/Expr"
},
"to": {
"oneOf": [
{
"$ref": "#/$defs/Expr"
},
{
"$ref": "#/$defs/TypeRef"
}
]
},
"by": {
"$ref": "#/$defs/Expr"
},
"x": {
"$ref": "#/$defs/Expr"
},
"y": {
"$ref": "#/$defs/Expr"
},
"width": {
"$ref": "#/$defs/Expr"
},
"height": {
"$ref": "#/$defs/Expr"
},
"form": {
"$ref": "#/$defs/Name"
},
"severity": {
"$ref": "#/$defs/Name"
},
"on": {
"$ref": "#/$defs/Expr"
},
"operation": {
"$ref": "#/$defs/QualifiedName"
},
"args": {
"type": "array",
"items": {
"description": "An argument, named when written `key: value`.",
"type": "object",
"properties": {
"key": {
"type": "string"
},
"value": {
"$ref": "#/$defs/Expr"
}
},
"additionalProperties": false,
"required": [
"value"
]
}
},
"settings": {
"type": "array",
"items": {
"$ref": "#/$defs/Setting"
}
}
},
"additionalProperties": false,
"required": [
"kind",
"span"
]
}coordinates { system … axis … snapping … default … } (DISL §5). Its members are the constructs ATD's section names, each with kind the construct's keyword (system, node, edge, variant, group, tool, algorithm, rows, valueType, outline, …), name or names, its own fields and its settings.
{
"type": "object",
"properties": {
"kind": {
"const": "coordinates"
},
"span": {
"$ref": "#/$defs/Span"
},
"doc": {
"description": "The documentation of the construct: its `///` comments, joined, and its `doc` member.",
"type": "string"
},
"members": {
"type": "array",
"items": {
"description": "A member of the construct, by its `kind`: a construct of its own, or a `setting`, `doc` or `label` member.",
"type": "object",
"required": [
"kind",
"span"
],
"properties": {
"kind": {
"type": "string"
},
"span": {
"$ref": "#/$defs/Span"
}
}
}
}
},
"additionalProperties": false,
"required": [
"kind",
"span",
"members"
]
}notation { … } (DISL §6). Its members are the constructs ATD's section names, each with kind the construct's keyword (system, node, edge, variant, group, tool, algorithm, rows, valueType, outline, …), name or names, its own fields and its settings.
{
"type": "object",
"properties": {
"kind": {
"const": "notation"
},
"span": {
"$ref": "#/$defs/Span"
},
"doc": {
"description": "The documentation of the construct: its `///` comments, joined, and its `doc` member.",
"type": "string"
},
"members": {
"type": "array",
"items": {
"description": "A member of the construct, by its `kind`: a construct of its own, or a `setting`, `doc` or `label` member.",
"type": "object",
"required": [
"kind",
"span"
],
"properties": {
"kind": {
"type": "string"
},
"span": {
"$ref": "#/$defs/Span"
}
}
}
}
},
"additionalProperties": false,
"required": [
"kind",
"span",
"members"
]
}toolbox { … } (DISL §7.1 to §7.4). Its members are the constructs ATD's section names, each with kind the construct's keyword (system, node, edge, variant, group, tool, algorithm, rows, valueType, outline, …), name or names, its own fields and its settings.
{
"type": "object",
"properties": {
"kind": {
"const": "toolbox"
},
"span": {
"$ref": "#/$defs/Span"
},
"doc": {
"description": "The documentation of the construct: its `///` comments, joined, and its `doc` member.",
"type": "string"
},
"members": {
"type": "array",
"items": {
"description": "A member of the construct, by its `kind`: a construct of its own, or a `setting`, `doc` or `label` member.",
"type": "object",
"required": [
"kind",
"span"
],
"properties": {
"kind": {
"type": "string"
},
"span": {
"$ref": "#/$defs/Span"
}
}
}
}
},
"additionalProperties": false,
"required": [
"kind",
"span",
"members"
]
}layout { default … algorithm … } (DISL §10). Its members are the constructs ATD's section names, each with kind the construct's keyword (system, node, edge, variant, group, tool, algorithm, rows, valueType, outline, …), name or names, its own fields and its settings.
{
"type": "object",
"properties": {
"kind": {
"const": "layout"
},
"span": {
"$ref": "#/$defs/Span"
},
"doc": {
"description": "The documentation of the construct: its `///` comments, joined, and its `doc` member.",
"type": "string"
},
"members": {
"type": "array",
"items": {
"description": "A member of the construct, by its `kind`: a construct of its own, or a `setting`, `doc` or `label` member.",
"type": "object",
"required": [
"kind",
"span"
],
"properties": {
"kind": {
"type": "string"
},
"span": {
"$ref": "#/$defs/Span"
}
}
}
}
},
"additionalProperties": false,
"required": [
"kind",
"span",
"members"
]
}surface table { … } (DESL §7.2 to §7.6). Its members are the constructs ATD's section names, each with kind the construct's keyword (system, node, edge, variant, group, tool, algorithm, rows, valueType, outline, …), name or names, its own fields and its settings.
{
"type": "object",
"properties": {
"kind": {
"const": "tableSurface"
},
"span": {
"$ref": "#/$defs/Span"
},
"doc": {
"description": "The documentation of the construct: its `///` comments, joined, and its `doc` member.",
"type": "string"
},
"members": {
"type": "array",
"items": {
"description": "A member of the construct, by its `kind`: a construct of its own, or a `setting`, `doc` or `label` member.",
"type": "object",
"required": [
"kind",
"span"
],
"properties": {
"kind": {
"type": "string"
},
"span": {
"$ref": "#/$defs/Span"
}
}
}
}
},
"additionalProperties": false,
"required": [
"kind",
"span",
"members"
]
}surface hierarchy { … } (DESL §7.7). Its members are the constructs ATD's section names, each with kind the construct's keyword (system, node, edge, variant, group, tool, algorithm, rows, valueType, outline, …), name or names, its own fields and its settings.
{
"type": "object",
"properties": {
"kind": {
"const": "hierarchySurface"
},
"span": {
"$ref": "#/$defs/Span"
},
"doc": {
"description": "The documentation of the construct: its `///` comments, joined, and its `doc` member.",
"type": "string"
},
"members": {
"type": "array",
"items": {
"description": "A member of the construct, by its `kind`: a construct of its own, or a `setting`, `doc` or `label` member.",
"type": "object",
"required": [
"kind",
"span"
],
"properties": {
"kind": {
"type": "string"
},
"span": {
"$ref": "#/$defs/Span"
}
}
}
}
},
"additionalProperties": false,
"required": [
"kind",
"span",
"members"
]
}surface text { … } (ATD §10). Its members are the constructs ATD's section names, each with kind the construct's keyword (system, node, edge, variant, group, tool, algorithm, rows, valueType, outline, …), name or names, its own fields and its settings.
{
"type": "object",
"properties": {
"kind": {
"const": "textSurface"
},
"span": {
"$ref": "#/$defs/Span"
},
"doc": {
"description": "The documentation of the construct: its `///` comments, joined, and its `doc` member.",
"type": "string"
},
"members": {
"type": "array",
"items": {
"description": "A member of the construct, by its `kind`: a construct of its own, or a `setting`, `doc` or `label` member.",
"type": "object",
"required": [
"kind",
"span"
],
"properties": {
"kind": {
"type": "string"
},
"span": {
"$ref": "#/$defs/Span"
}
}
}
}
},
"additionalProperties": false,
"required": [
"kind",
"span",
"members"
]
}form id "Label" for Types { … } (DISL §7.5).
{
"type": "object",
"properties": {
"kind": {
"const": "form"
},
"span": {
"$ref": "#/$defs/Span"
},
"doc": {
"description": "The documentation of the construct: its `///` comments, joined, and its `doc` member.",
"type": "string"
},
"name": {
"$ref": "#/$defs/Name"
},
"title": {
"type": "string"
},
"for": {
"type": "array",
"items": {
"$ref": "#/$defs/QualifiedName"
}
},
"members": {
"type": "array",
"items": {
"description": "A member of the construct, by its `kind`: a construct of its own, or a `setting`, `doc` or `label` member.",
"type": "object",
"required": [
"kind",
"span"
],
"properties": {
"kind": {
"type": "string"
},
"span": {
"$ref": "#/$defs/Span"
}
}
}
}
},
"additionalProperties": false,
"required": [
"kind",
"span",
"name",
"members"
]
}viewpoint id "Label" { … } (DISL §3.5).
{
"type": "object",
"properties": {
"kind": {
"const": "viewpoint"
},
"span": {
"$ref": "#/$defs/Span"
},
"doc": {
"description": "The documentation of the construct: its `///` comments, joined, and its `doc` member.",
"type": "string"
},
"name": {
"$ref": "#/$defs/Name"
},
"title": {
"type": "string"
},
"settings": {
"type": "array",
"items": {
"$ref": "#/$defs/Setting"
}
}
},
"additionalProperties": false,
"required": [
"kind",
"span",
"name"
]
}binding name family … { … } (ATD §11).
{
"type": "object",
"properties": {
"kind": {
"const": "binding"
},
"span": {
"$ref": "#/$defs/Span"
},
"doc": {
"description": "The documentation of the construct: its `///` comments, joined, and its `doc` member.",
"type": "string"
},
"name": {
"$ref": "#/$defs/Name"
},
"family": {
"type": "string"
},
"capability": {
"$ref": "#/$defs/QualifiedName"
},
"members": {
"type": "array",
"items": {
"$ref": "#/$defs/BindingMember"
}
}
},
"additionalProperties": false,
"required": [
"kind",
"span",
"name",
"members"
]
}A member of a binding: claims, body, text, header, registration, template, block, section, an element or relation rule, or a setting, doc or label member.
{
"if": {
"properties": {
"kind": {
"const": "rule"
}
}
},
"then": {
"$ref": "#/$defs/Rule"
},
"else": {
"description": "A member of the construct, by its `kind`: a construct of its own, or a `setting`, `doc` or `label` member.",
"type": "object",
"required": [
"kind",
"span"
],
"properties": {
"kind": {
"type": "string"
},
"span": {
"$ref": "#/$defs/Span"
}
}
}
}An element or relation rule (FBL §5.1, §5.4).
{
"type": "object",
"properties": {
"kind": {
"const": "rule"
},
"span": {
"$ref": "#/$defs/Span"
},
"doc": {
"description": "The documentation of the construct: its `///` comments, joined, and its `doc` member.",
"type": "string"
},
"ruleKind": {
"enum": [
"element",
"relation"
]
},
"type": {
"$ref": "#/$defs/TypeRef"
},
"as": {
"$ref": "#/$defs/Name"
},
"at": {
"type": "string"
},
"line": {
"type": "string"
},
"members": {
"type": "array",
"items": {
"description": "A member of the construct, by its `kind`: a construct of its own, or a `setting`, `doc` or `label` member.",
"type": "object",
"required": [
"kind",
"span"
],
"properties": {
"kind": {
"type": "string"
},
"span": {
"$ref": "#/$defs/Span"
}
}
}
}
},
"additionalProperties": false,
"required": [
"kind",
"span",
"ruleKind",
"type",
"members"
]
}A finding of the checker, a language server or validation (ATD §15, FR-091).
{
"type": "object",
"properties": {
"code": {
"type": "string",
"pattern": "^ATD[0-9]{4}$"
},
"severity": {
"enum": [
"error",
"warning",
"information"
]
},
"file": {
"type": "string"
},
"line": {
"type": "integer",
"minimum": 1
},
"column": {
"type": "integer",
"minimum": 1
},
"endLine": {
"type": "integer",
"minimum": 1
},
"endColumn": {
"type": "integer",
"minimum": 1
},
"message": {
"type": "string"
},
"related": {
"type": "array",
"items": {
"description": "Another place the finding concerns.",
"type": "object",
"properties": {
"file": {
"type": "string"
},
"line": {
"type": "integer",
"minimum": 1
},
"column": {
"type": "integer",
"minimum": 1
},
"message": {
"type": "string"
}
},
"additionalProperties": false,
"required": [
"file",
"line",
"column"
]
}
},
"fixes": {
"type": "array",
"items": {
"description": "A fix: text edits, in byte offsets, that resolve the finding.",
"type": "object",
"properties": {
"title": {
"type": "string"
},
"edits": {
"type": "array",
"items": {
"description": "One splice.",
"type": "object",
"properties": {
"file": {
"type": "string"
},
"start": {
"type": "integer",
"minimum": 0
},
"end": {
"type": "integer",
"minimum": 0
},
"text": {
"type": "string"
}
},
"additionalProperties": false,
"required": [
"file",
"start",
"end",
"text"
]
}
}
},
"additionalProperties": false,
"required": [
"title",
"edits"
]
}
},
"suggestions": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 5
}
},
"additionalProperties": false,
"required": [
"code",
"severity",
"file",
"line",
"column",
"message"
]
}The findings of one run, in a stable order: by file, then position, then code (ATD §15.4). A refused file of the corpus states those it must give in this form; message is then not compared.
{
"type": "object",
"properties": {
"$schema": {
"type": "string"
},
"tool": {
"type": "string"
},
"findings": {
"type": "array",
"items": {
"$ref": "#/$defs/Finding"
}
}
},
"additionalProperties": false,
"required": [
"findings"
]
}The LALR(1) automaton of a grammar in ATD grammar notation, normalized so that two implementations can be compared byte for byte (ATD §4.7): terminals by name (an anonymous string terminal is named by its quoted string), the rules of the grammar after the expansion of §4.4 sorted and numbered (a helper of a repetition named (<symbols>)+), and the states numbered breadth first from the start state over the symbols in sorted order, each with its actions on terminals (s<state>, r<rule>, accept) and its gotos on nonterminals.
{
"type": "object",
"properties": {
"$schema": {
"type": "string"
},
"grammar": {
"type": "string"
},
"start": {
"type": "string"
},
"ignore": {
"type": "array",
"items": {
"type": "string"
}
},
"terminals": {
"type": "array",
"items": {
"description": "A terminal.",
"type": "object",
"properties": {
"name": {
"type": "string"
},
"kind": {
"enum": [
"string",
"pattern"
]
},
"value": {
"type": "string"
},
"priority": {
"type": "integer"
},
"flags": {
"description": "The flags of a string terminal, present only when it has one: `i`, matched in any case (ATD §3.6, §4.1).",
"const": "i"
}
},
"additionalProperties": false,
"required": [
"name",
"kind",
"value",
"priority"
]
}
},
"rules": {
"type": "array",
"items": {
"description": "A rule.",
"type": "object",
"properties": {
"lhs": {
"type": "string"
},
"rhs": {
"type": "array",
"items": {
"type": "string"
}
},
"alias": {
"type": "string"
}
},
"additionalProperties": false,
"required": [
"lhs",
"rhs"
]
}
},
"states": {
"type": "array",
"items": {
"description": "A state.",
"type": "object",
"properties": {
"actions": {
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^(s[0-9]+|r[0-9]+|accept)$"
}
},
"gotos": {
"type": "object",
"additionalProperties": {
"type": "integer",
"minimum": 0
}
}
},
"additionalProperties": false,
"required": [
"actions",
"gotos"
]
}
}
},
"additionalProperties": false,
"required": [
"grammar",
"start",
"terminals",
"rules",
"states"
]
}The trace of a tool description (ATD §2.5, data-model.md §10): every item of its companion's gap sections and every behaviour of a host's code, each with the part of the description that states it, the host's concern it is, or the reference behaviour it diverges from.
{
"type": "object",
"properties": {
"$schema": {
"type": "string"
},
"tool": {
"type": "string"
},
"description": {
"type": "string"
},
"companion": {
"description": "The companion file and the sections whose `###` headings and top-level list items are the items.",
"type": "object",
"properties": {
"file": {
"type": "string"
},
"sections": {
"type": "array",
"items": {
"type": "string"
}
},
"reports": {
"description": "Further companion files beside `file`, such as a conversion's report, whose findings the items answer; named so that they are read with the trace. Their sections are not counted as items.",
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false,
"required": [
"file",
"sections"
]
},
"items": {
"type": "array",
"items": {
"description": "One item of the companion: the part of the description that states it, the host's concern it is, or, while ATD cannot state it yet, the etalii.adp issue that adds what it needs.",
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"pattern": "^[a-z0-9-]+/[0-9]+$"
},
"text": {
"type": "string"
},
"statedBy": {
"type": "string"
},
"hostConcern": {
"enum": [
"rendering",
"gestures",
"text-measurement",
"file-dialogs",
"opening-links",
"undo-stack"
]
},
"reason": {
"type": "string"
},
"open": {
"description": "The etalii.adp issue, by its address, that adds the construct this item needs; the item is not stated yet (ATD §2.5).",
"type": "string",
"pattern": "^https://github\\.com/etalii-adp/etalii\\.adp/issues/[0-9]+$"
}
},
"required": [
"id",
"text"
],
"oneOf": [
{
"required": [
"statedBy"
],
"not": {
"anyOf": [
{
"required": [
"hostConcern"
]
},
{
"required": [
"open"
]
}
]
}
},
{
"required": [
"hostConcern",
"reason"
],
"not": {
"anyOf": [
{
"required": [
"statedBy"
]
},
{
"required": [
"open"
]
}
]
}
},
{
"required": [
"open",
"reason"
],
"not": {
"anyOf": [
{
"required": [
"statedBy"
]
},
{
"required": [
"hostConcern"
]
}
]
}
}
]
}
},
"hostCode": {
"type": "array",
"items": {
"description": "One behaviour read in a host's code at its reference commit.",
"type": "object",
"additionalProperties": false,
"properties": {
"host": {
"enum": [
"standalone",
"desktop",
"vscode",
"intellij",
"eclipse",
"notion"
]
},
"repository": {
"type": "string"
},
"commit": {
"type": "string",
"pattern": "^[0-9a-f]{7,40}$"
},
"path": {
"type": "string"
},
"lines": {
"type": "string",
"pattern": "^[0-9]+(-[0-9]+)?$"
},
"behaviour": {
"type": "string"
},
"statedBy": {
"type": "string"
},
"divergesFrom": {
"type": "string"
},
"hostConcern": {
"enum": [
"rendering",
"gestures",
"text-measurement",
"file-dialogs",
"opening-links",
"undo-stack"
]
},
"reason": {
"type": "string"
},
"open": {
"description": "The etalii.adp issue, by its address, that adds the construct this item needs; the item is not stated yet (ATD §2.5).",
"type": "string",
"pattern": "^https://github\\.com/etalii-adp/etalii\\.adp/issues/[0-9]+$"
}
},
"required": [
"host",
"repository",
"commit",
"path",
"lines",
"behaviour"
],
"oneOf": [
{
"required": [
"statedBy"
],
"not": {
"anyOf": [
{
"required": [
"divergesFrom"
]
},
{
"required": [
"hostConcern"
]
},
{
"required": [
"open"
]
}
]
}
},
{
"required": [
"divergesFrom"
],
"not": {
"anyOf": [
{
"required": [
"statedBy"
]
},
{
"required": [
"hostConcern"
]
},
{
"required": [
"open"
]
}
]
}
},
{
"required": [
"hostConcern",
"reason"
],
"not": {
"anyOf": [
{
"required": [
"statedBy"
]
},
{
"required": [
"divergesFrom"
]
},
{
"required": [
"open"
]
}
]
}
},
{
"required": [
"open",
"reason"
],
"not": {
"anyOf": [
{
"required": [
"statedBy"
]
},
{
"required": [
"divergesFrom"
]
},
{
"required": [
"hostConcern"
]
}
]
}
}
]
}
}
},
"additionalProperties": false,
"required": [
"tool",
"description",
"companion",
"items",
"hostCode"
]
}Who produced one part of a fixture (ATD §2.3).
{
"type": "object",
"properties": {
"host": {
"enum": [
"standalone",
"desktop",
"vscode",
"intellij",
"eclipse",
"notion"
]
},
"repository": {
"type": "string"
},
"commit": {
"type": "string",
"pattern": "^[0-9a-f]{7,40}$"
},
"recordedWith": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false,
"required": [
"host",
"repository",
"commit",
"source"
]
}One gesture of a case and what it must produce (ATD §2.3). Exactly one of action, property, move, create, connect, delete, outside, undo and redo; select before it.
{
"type": "object",
"properties": {
"select": {
"type": "array",
"items": {
"type": "string"
}
},
"action": {
"type": "string"
},
"args": {
"type": "object"
},
"property": {
"description": "A property set through a form.",
"type": "object",
"properties": {
"element": {
"type": "string"
},
"attribute": {
"type": "string"
},
"value": {}
},
"additionalProperties": false,
"required": [
"attribute",
"value"
]
},
"move": {
"description": "A move gesture: to a place (`x`, `y`), by a distance from where the element is drawn (`dx`, `dy`), or into a parent before its child at `index`, last when it is -1.",
"type": "object",
"properties": {
"element": {
"type": "string"
},
"x": {
"type": "number"
},
"y": {
"type": "number"
},
"dx": {
"type": "number"
},
"dy": {
"type": "number"
},
"parent": {
"type": "string"
},
"index": {
"description": "With `parent`: the place among the parent's children as they are before the move, the element itself included; -1, or absent, puts it last.",
"type": "integer",
"minimum": -1
}
},
"additionalProperties": false
},
"create": {
"description": "A create gesture.",
"type": "object",
"properties": {
"type": {
"type": "string"
},
"parent": {
"type": "string"
},
"attributes": {
"type": "object"
},
"at": {}
},
"additionalProperties": false,
"required": [
"type"
]
},
"connect": {
"description": "A connect gesture.",
"type": "object",
"properties": {
"type": {
"type": "string"
},
"source": {
"type": "string"
},
"target": {
"type": "string"
},
"attributes": {
"type": "object"
}
},
"additionalProperties": false,
"required": [
"type",
"source",
"target"
]
},
"delete": {
"type": "array",
"items": {
"type": "string"
}
},
"outside": {
"description": "A file of the case written outside the host, as another program or an agent would, and the host told it changed: the first occurrence of `from` in `file` replaced by `to`.",
"type": "object",
"properties": {
"file": {
"type": "string"
},
"replace": {
"type": "object",
"properties": {
"from": {
"type": "string"
},
"to": {
"type": "string"
}
},
"additionalProperties": false,
"required": [
"from",
"to"
]
}
},
"additionalProperties": false,
"required": [
"file",
"replace"
]
},
"undo": {
"const": true
},
"redo": {
"const": true
},
"ids": {
"description": "The ids the reference host generated in this step, in order, handed to the runtime.",
"type": "array",
"items": {
"type": "string"
}
},
"splices": {
"type": "array",
"items": {
"$ref": "https://etalii.net/adp/fbl/schema/0.1/fbl.schema.json#/$defs/Splice"
}
},
"expect": {
"type": "string"
},
"expectFile": {
"type": "string"
},
"findings": {
"type": "array",
"items": {
"description": "A finding a reading or a step gives: its rule or code and where.",
"type": "object",
"properties": {
"rule": {
"type": "string"
},
"code": {
"type": "string"
},
"severity": {
"type": "string"
},
"element": {
"type": "string"
},
"line": {
"type": "integer"
},
"column": {
"type": "integer"
},
"message": {
"type": "string"
}
},
"additionalProperties": false
}
},
"drawing": {
"oneOf": [
{
"$ref": "#/$defs/Drawing"
},
{
"description": "A drawing kept in a file beside the fixture.",
"type": "object",
"properties": {
"$ref": {
"type": "string"
}
},
"additionalProperties": false,
"required": [
"$ref"
]
}
]
},
"refused": {
"description": "The gesture is refused, with this reason.",
"type": "object",
"properties": {
"reason": {
"type": "string"
}
},
"additionalProperties": false,
"required": [
"reason"
]
},
"doc": {
"type": "string"
}
},
"additionalProperties": false
}One conformance case of one tool type (ATD §2.3, data-model.md §8).
{
"type": "object",
"properties": {
"$schema": {
"type": "string"
},
"doc": {
"type": "string"
},
"tool": {
"type": "string"
},
"description": {
"type": "string"
},
"recordedFrom": {
"description": "The kind of host that recorded the case: `module`, a module that opens its own documents, whose reading and drawing are compared by what they mean; `declared`, the default, a tool drawn from its specification, every part compared exactly (ATD §2.3, §2.4).",
"enum": [
"module",
"declared"
]
},
"inputs": {
"description": "The input files of the case by role (`body`, `registration`, …): paths relative to the case's folder, kept byte for byte.",
"type": "object",
"additionalProperties": {
"type": "string"
},
"minProperties": 1
},
"read": {
"description": "What reading the inputs yields.",
"type": "object",
"properties": {
"elements": {
"type": "array",
"items": {
"description": "An element.",
"type": "object",
"properties": {
"id": {
"type": "string"
},
"type": {
"type": "string"
},
"parent": {
"type": [
"string",
"null"
]
},
"attributes": {
"type": "object"
}
},
"additionalProperties": false,
"required": [
"id",
"type"
]
}
},
"relations": {
"type": "array",
"items": {
"description": "A relation.",
"type": "object",
"properties": {
"id": {
"type": "string"
},
"type": {
"type": "string"
},
"source": {
"type": "string"
},
"target": {
"type": "string"
},
"attributes": {
"type": "object"
}
},
"additionalProperties": false,
"required": [
"id",
"type",
"source",
"target"
]
}
},
"findings": {
"type": "array",
"items": {
"description": "A finding a reading or a step gives: its rule or code and where.",
"type": "object",
"properties": {
"rule": {
"type": "string"
},
"code": {
"type": "string"
},
"severity": {
"type": "string"
},
"element": {
"type": "string"
},
"line": {
"type": "integer"
},
"column": {
"type": "integer"
},
"message": {
"type": "string"
}
},
"additionalProperties": false
}
},
"unreadable": {
"type": "array",
"items": {
"description": "An unreadable part of the body.",
"type": "object",
"properties": {
"line": {
"type": "integer"
},
"reason": {
"type": "string"
}
},
"additionalProperties": false,
"required": [
"line"
]
}
}
},
"additionalProperties": false
},
"drawing": {
"oneOf": [
{
"$ref": "#/$defs/Drawing"
},
{
"description": "A drawing kept in a file beside the fixture.",
"type": "object",
"properties": {
"$ref": {
"type": "string"
}
},
"additionalProperties": false,
"required": [
"$ref"
]
}
]
},
"steps": {
"type": "array",
"items": {
"$ref": "#/$defs/ConformanceStep"
}
},
"provenance": {
"description": "Who produced each part.",
"type": "object",
"properties": {
"bytes": {
"$ref": "#/$defs/Provenance"
},
"reading": {
"$ref": "#/$defs/Provenance"
},
"findings": {
"$ref": "#/$defs/Provenance"
},
"drawing": {
"$ref": "#/$defs/Provenance"
}
},
"additionalProperties": false,
"required": [
"reading"
]
}
},
"additionalProperties": false,
"required": [
"tool",
"description",
"inputs",
"read",
"provenance"
]
}The scene of one view in adp-scene's vocabulary (ATD §2.4, data-model.md §9). Two drawings are equal when their elements and edges are equal as sets keyed by id and their order lists are equal.
{
"type": "object",
"properties": {
"$schema": {
"type": "string"
},
"view": {
"type": "string"
},
"elements": {
"type": "array",
"items": {
"description": "A drawn element.",
"type": "object",
"properties": {
"id": {
"type": "string"
},
"type": {
"type": "string"
},
"shape": {
"type": "string"
},
"bounds": {
"description": "A box in the canvas's domain units, rounded to 0.01.",
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
},
"w": {
"type": "number"
},
"h": {
"type": "number"
}
},
"additionalProperties": false,
"required": [
"x",
"y",
"w",
"h"
]
},
"labels": {
"type": "array",
"items": {
"description": "A label as drawn.",
"type": "object",
"properties": {
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"font": {
"type": "string"
},
"position": {
"description": "A point in the canvas's domain units, rounded to 0.01.",
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
}
},
"additionalProperties": false,
"required": [
"x",
"y"
]
}
},
"additionalProperties": false,
"required": [
"text"
]
}
},
"style": {
"description": "The resolved style: paints as colours, with the token names they came from.",
"type": "object",
"properties": {
"fill": {
"type": "string"
},
"stroke": {
"type": "string"
},
"strokeWidth": {
"type": "number"
},
"dash": {
"type": "array",
"items": {
"type": "number"
}
},
"tokens": {
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"opacity": {
"type": "number"
}
},
"additionalProperties": false
},
"children": {
"type": "array",
"items": {
"type": "string"
}
},
"state": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false,
"required": [
"id",
"type",
"shape",
"bounds"
]
}
},
"edges": {
"type": "array",
"items": {
"description": "A drawn edge.",
"type": "object",
"properties": {
"id": {
"type": "string"
},
"type": {
"type": "string"
},
"source": {
"type": "string"
},
"target": {
"type": "string"
},
"route": {
"type": "array",
"items": {
"description": "A point in the canvas's domain units, rounded to 0.01.",
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
}
},
"additionalProperties": false,
"required": [
"x",
"y"
]
}
},
"markers": {
"description": "End decorations.",
"type": "object",
"properties": {
"source": {
"type": "string"
},
"target": {
"type": "string"
},
"mid": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"labels": {
"type": "array",
"items": {
"description": "A label as drawn.",
"type": "object",
"properties": {
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"font": {
"type": "string"
},
"position": {
"description": "A point in the canvas's domain units, rounded to 0.01.",
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
}
},
"additionalProperties": false,
"required": [
"x",
"y"
]
}
},
"additionalProperties": false,
"required": [
"text"
]
}
},
"style": {
"description": "The resolved style: paints as colours, with the token names they came from.",
"type": "object",
"properties": {
"fill": {
"type": "string"
},
"stroke": {
"type": "string"
},
"strokeWidth": {
"type": "number"
},
"dash": {
"type": "array",
"items": {
"type": "number"
}
},
"tokens": {
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"opacity": {
"type": "number"
}
},
"additionalProperties": false
}
},
"additionalProperties": false,
"required": [
"id",
"type",
"source",
"target",
"route"
]
}
},
"chrome": {
"type": "array",
"items": {
"description": "Bands, notices and legends.",
"type": "object",
"properties": {
"id": {
"type": "string"
},
"kind": {
"enum": [
"band",
"notice",
"legend",
"header",
"ruler"
]
},
"bounds": {
"description": "A box in the canvas's domain units, rounded to 0.01.",
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
},
"w": {
"type": "number"
},
"h": {
"type": "number"
}
},
"additionalProperties": false,
"required": [
"x",
"y",
"w",
"h"
]
},
"text": {
"type": "string"
},
"style": {
"description": "The resolved style: paints as colours, with the token names they came from.",
"type": "object",
"properties": {
"fill": {
"type": "string"
},
"stroke": {
"type": "string"
},
"strokeWidth": {
"type": "number"
},
"dash": {
"type": "array",
"items": {
"type": "number"
}
},
"tokens": {
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"opacity": {
"type": "number"
}
},
"additionalProperties": false
}
},
"additionalProperties": false,
"required": [
"kind"
]
}
},
"order": {
"description": "The ids of elements, edges and chrome in drawing order (z-order).",
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false,
"required": [
"elements",
"edges",
"order"
]
}The contract of a capability (ATD §2.6, §13, data-model.md §7).
{
"type": "object",
"properties": {
"$schema": {
"type": "string"
},
"name": {
"type": "string",
"pattern": "^(layout|routing|reader|analysis|arrange|render)\\.[A-Za-z][A-Za-z0-9]*$"
},
"version": {
"type": "string",
"pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+$"
},
"extensionPoint": {
"enum": [
"layout",
"routing",
"reader",
"analysis",
"arrange",
"render"
]
},
"doc": {
"type": "string"
},
"input": {
"description": "A reference to the `$defs` entry of the input.",
"type": "object",
"properties": {
"$ref": {
"type": "string"
}
},
"additionalProperties": false,
"required": [
"$ref"
]
},
"args": {
"type": "object",
"additionalProperties": {
"description": "An argument of a capability.",
"type": "object",
"properties": {
"type": {
"enum": [
"number",
"integer",
"boolean",
"string",
"enum",
"query",
"list",
"map"
]
},
"values": {
"type": "array",
"items": {
"type": "string"
}
},
"default": {},
"doc": {
"type": "string"
},
"required": {
"type": "boolean"
}
},
"additionalProperties": false,
"required": [
"type"
]
}
},
"output": {
"description": "A reference to the `$defs` entry of the output.",
"type": "object",
"properties": {
"$ref": {
"type": "string"
}
},
"additionalProperties": false,
"required": [
"$ref"
]
},
"laws": {
"type": "array",
"items": {
"enum": [
"deterministic",
"pinnedStay",
"stable",
"readingNeverFails",
"minimalSplices",
"pure"
]
}
},
"exceptions": {
"type": "array",
"items": {
"description": "An exception to ATD §12's determinism, stated in the contract (ATD §13.5).",
"type": "object",
"properties": {
"reads": {
"type": "string"
},
"reason": {
"type": "string"
}
},
"additionalProperties": false,
"required": [
"reads",
"reason"
]
}
},
"fallback": {
"type": [
"string",
"null"
]
},
"status": {
"enum": [
"provisional",
"standard",
"deprecated"
]
}
},
"additionalProperties": false,
"required": [
"name",
"version",
"extensionPoint",
"input",
"output",
"laws",
"status"
]
}One fixture of a capability: an input, the arguments and the expected output (ATD §2.6).
{
"type": "object",
"properties": {
"$schema": {
"type": "string"
},
"doc": {
"type": "string"
},
"input": {},
"args": {
"type": "object"
},
"output": {}
},
"additionalProperties": false,
"required": [
"input",
"args",
"output"
]
}The input of a layout capability: the nodes with their sizes and pins, the edges and the containment, in the canvas's domain units.
{
"type": "object",
"properties": {
"nodes": {
"type": "array",
"items": {
"description": "A node.",
"type": "object",
"properties": {
"id": {
"type": "string"
},
"type": {
"type": "string"
},
"width": {
"type": "number"
},
"height": {
"type": "number"
},
"parent": {
"type": [
"string",
"null"
]
},
"order": {
"type": "integer"
},
"pinned": {
"description": "A point in the canvas's domain units, rounded to 0.01.",
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
}
},
"additionalProperties": false,
"required": [
"x",
"y"
]
},
"position": {
"description": "Where the node is now: its top-left corner in the canvas's domain units, rounded to 0.01, for a layout that reads it without holding the node to it.",
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
}
},
"additionalProperties": false,
"required": [
"x",
"y"
]
},
"attributes": {
"type": "object",
"description": "What the layout's arguments read of the node, by argument."
}
},
"additionalProperties": false,
"required": [
"id",
"width",
"height"
]
}
},
"edges": {
"type": "array",
"items": {
"description": "An edge.",
"type": "object",
"properties": {
"id": {
"type": "string"
},
"source": {
"type": "string"
},
"target": {
"type": "string"
},
"attributes": {
"description": "What the layout's arguments read of the edge, by argument.",
"type": "object"
}
},
"additionalProperties": false,
"required": [
"id",
"source",
"target"
]
}
},
"roots": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false,
"required": [
"nodes",
"edges"
]
}The output of a layout capability: a position for every node it places, in the canvas's domain units, rounded to 0.01, optionally the size it gives a node it resizes, optionally route points, and optionally named numbers per node or edge that CEL reads as layout.value(e, name) (ATD §8.8).
{
"type": "object",
"properties": {
"positions": {
"type": "object",
"additionalProperties": {
"description": "A point in the canvas's domain units, rounded to 0.01.",
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
}
},
"additionalProperties": false,
"required": [
"x",
"y"
]
}
},
"sizes": {
"type": "object",
"additionalProperties": {
"description": "The size a layout gives a node, in the canvas's domain units, rounded to 0.01: its width, its height, or both.",
"type": "object",
"properties": {
"width": {
"type": "number"
},
"height": {
"type": "number"
}
},
"additionalProperties": false,
"minProperties": 1
}
},
"routes": {
"type": "object",
"additionalProperties": {
"type": "array",
"items": {
"description": "A point in the canvas's domain units, rounded to 0.01.",
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
}
},
"additionalProperties": false,
"required": [
"x",
"y"
]
}
}
},
"values": {
"description": "Named numbers by node or edge id, as the capability's contract names them.",
"type": "object",
"additionalProperties": {
"type": "object",
"additionalProperties": {
"type": "number"
}
}
}
},
"additionalProperties": false,
"required": [
"positions"
]
}The input of a routing capability: each edge with the boxes of its two ends, and the boxes it must keep clear of, in the canvas's domain units.
{
"type": "object",
"properties": {
"edges": {
"type": "array",
"items": {
"description": "An edge to route.",
"type": "object",
"properties": {
"id": {
"type": "string"
},
"source": {
"description": "The box of the edge's source: its top-left corner and size, rounded to 0.01.",
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
},
"width": {
"type": "number"
},
"height": {
"type": "number"
}
},
"additionalProperties": false,
"required": [
"x",
"y",
"width",
"height"
]
},
"target": {
"description": "The box of the edge's target: its top-left corner and size, rounded to 0.01.",
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
},
"width": {
"type": "number"
},
"height": {
"type": "number"
}
},
"additionalProperties": false,
"required": [
"x",
"y",
"width",
"height"
]
},
"from": {
"description": "Where the edge leaves its source, where the notation fixes it, rounded to 0.01.",
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
}
},
"additionalProperties": false,
"required": [
"x",
"y"
]
},
"to": {
"description": "Where the edge reaches its target, where the notation fixes it, rounded to 0.01.",
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
}
},
"additionalProperties": false,
"required": [
"x",
"y"
]
},
"attributes": {
"description": "What the routing's arguments read of the edge, by argument.",
"type": "object"
}
},
"additionalProperties": false,
"required": [
"id",
"source",
"target"
]
}
},
"obstacles": {
"type": "array",
"items": {
"description": "A box the routes keep clear of: its top-left corner and size, rounded to 0.01.",
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
},
"width": {
"type": "number"
},
"height": {
"type": "number"
}
},
"additionalProperties": false,
"required": [
"x",
"y",
"width",
"height"
]
}
}
},
"additionalProperties": false,
"required": [
"edges"
]
}The output of a routing capability: the route of every edge it routes, by edge id, as path commands from the edge's first point to its last.
{
"type": "object",
"properties": {
"routes": {
"type": "object",
"additionalProperties": {
"type": "array",
"items": {
"description": "One command of a route, as a path draws it: its operation and its points, control points first and the point it ends at last (one for `move` and `line`, two for `quad`, three for `cubic`).",
"type": "object",
"properties": {
"op": {
"enum": [
"move",
"line",
"quad",
"cubic"
]
},
"points": {
"type": "array",
"items": {
"description": "A point in the canvas's domain units, rounded to 0.01.",
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
}
},
"additionalProperties": false,
"required": [
"x",
"y"
]
},
"minItems": 1,
"maxItems": 3
}
},
"additionalProperties": false,
"required": [
"op",
"points"
]
},
"minItems": 2
}
}
},
"additionalProperties": false,
"required": [
"routes"
]
}The input of a reader capability: the body's bytes as text, and the edit to plan when one is asked (FBL §11.2).
{
"type": "object",
"properties": {
"body": {
"type": "string"
},
"files": {
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"edit": {
"type": "object"
}
},
"additionalProperties": false,
"required": [
"body"
]
}The output of a reader capability: what FBL §11.2's read returns, or the splices of a planned edit.
{
"type": "object",
"properties": {
"elements": {
"type": "array",
"items": {
"type": "object"
}
},
"relations": {
"type": "array",
"items": {
"type": "object"
}
},
"findings": {
"type": "array",
"items": {
"description": "A finding a reading or a step gives: its rule or code and where.",
"type": "object",
"properties": {
"rule": {
"type": "string"
},
"code": {
"type": "string"
},
"severity": {
"type": "string"
},
"element": {
"type": "string"
},
"line": {
"type": "integer"
},
"column": {
"type": "integer"
},
"message": {
"type": "string"
}
},
"additionalProperties": false
}
},
"splices": {
"type": "array",
"items": {
"$ref": "https://etalii.net/adp/fbl/schema/0.1/fbl.schema.json#/$defs/Splice"
}
}
},
"additionalProperties": false
}The input of a render capability: a value to render.
{
"type": "object",
"properties": {
"value": {},
"format": {
"type": "string"
}
},
"additionalProperties": false,
"required": [
"value"
]
}The output of a render capability: text runs or a drawing.
{
"type": "object",
"properties": {
"runs": {
"type": "array",
"items": {
"description": "A run of text with its style.",
"type": "object",
"properties": {
"text": {
"type": "string"
},
"style": {
"type": "object"
},
"block": {
"type": "string"
}
},
"additionalProperties": false,
"required": [
"text"
]
}
},
"drawing": {
"$ref": "#/$defs/Drawing"
}
},
"additionalProperties": false
}The input of an analysis or arrange capability: a model or part of one.
{
"type": "object",
"properties": {
"elements": {
"type": "array",
"items": {
"type": "object"
}
},
"relations": {
"type": "array",
"items": {
"type": "object"
}
},
"selection": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false,
"required": [
"elements"
]
}The output of an analysis capability: derived elements or relations and findings; of an arrange capability: actions.
{
"type": "object",
"properties": {
"elements": {
"type": "array",
"items": {
"type": "object"
}
},
"relations": {
"type": "array",
"items": {
"type": "object"
}
},
"findings": {
"type": "array",
"items": {
"description": "A finding a reading or a step gives: its rule or code and where.",
"type": "object",
"properties": {
"rule": {
"type": "string"
},
"code": {
"type": "string"
},
"severity": {
"type": "string"
},
"element": {
"type": "string"
},
"line": {
"type": "integer"
},
"column": {
"type": "integer"
},
"message": {
"type": "string"
}
},
"additionalProperties": false
}
},
"actions": {
"type": "array",
"items": {
"type": "object"
}
}
},
"additionalProperties": false
}The 30-edit walk of SC-005 (ATD §19): steps over the examples, each a request at a position or an edit, with its expected result.
{
"type": "object",
"properties": {
"$schema": {
"type": "string"
},
"doc": {
"type": "string"
},
"files": {
"type": "array",
"items": {
"type": "string"
}
},
"steps": {
"type": "array",
"items": {
"description": "One step.",
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"file": {
"type": "string"
},
"line": {
"type": "integer",
"minimum": 1
},
"column": {
"type": "integer",
"minimum": 1
},
"utf16": {
"type": "integer",
"minimum": 0
},
"request": {
"enum": [
"completion",
"hover",
"rename",
"format",
"definition",
"references",
"diagnostics",
"edit"
]
},
"edit": {
"description": "Text replacing a range, in lines and columns.",
"type": "object",
"properties": {
"endLine": {
"type": "integer"
},
"endColumn": {
"type": "integer"
},
"text": {
"type": "string"
}
},
"additionalProperties": false,
"required": [
"text"
]
},
"newName": {
"type": "string"
},
"expect": {
"type": "object"
},
"scenario": {
"type": "integer"
},
"doc": {
"type": "string"
}
},
"additionalProperties": false,
"required": [
"id",
"file",
"request",
"expect"
]
}
}
},
"additionalProperties": false,
"required": [
"files",
"steps"
]
}The $defs of DISL, DESL and FBL that the settings of ATD's constructs are checked against (ATD §14.6), by reference; each construct's entry is listed in ATD's Appendix A.
{
"type": "object",
"properties": {
"Stroke": {
"$ref": "https://etalii.net/adp/disl/schema/0.2/disl.schema.json#/$defs/Stroke"
},
"Font": {
"$ref": "https://etalii.net/adp/disl/schema/0.2/disl.schema.json#/$defs/Font"
},
"LayoutConfig": {
"$ref": "https://etalii.net/adp/disl/schema/0.2/disl.schema.json#/$defs/LayoutConfig"
},
"TextDefaults": {
"$ref": "https://etalii.net/adp/fbl/schema/0.1/fbl.schema.json#/$defs/TextDefaults"
},
"Style": {
"$ref": "https://etalii.net/adp/disl/schema/0.2/disl.schema.json#/$defs/Style"
},
"Theme": {
"$ref": "https://etalii.net/adp/disl/schema/0.2/disl.schema.json#/$defs/Theme"
},
"Attribute": {
"$ref": "https://etalii.net/adp/disl/schema/0.2/disl.schema.json#/$defs/Attribute"
},
"DeslAttribute": {
"$ref": "https://etalii.net/adp/desl/schema/0.1/desl.schema.json#/$defs/Attribute"
},
"Claims": {
"$ref": "https://etalii.net/adp/fbl/schema/0.1/fbl.schema.json#/$defs/Claims"
},
"Body": {
"$ref": "https://etalii.net/adp/fbl/schema/0.1/fbl.schema.json#/$defs/Body"
},
"Header": {
"$ref": "https://etalii.net/adp/fbl/schema/0.1/fbl.schema.json#/$defs/Header"
},
"Insert": {
"$ref": "https://etalii.net/adp/fbl/schema/0.1/fbl.schema.json#/$defs/Insert"
},
"Remove": {
"$ref": "https://etalii.net/adp/fbl/schema/0.1/fbl.schema.json#/$defs/Remove"
},
"AttributeBinding": {
"$ref": "https://etalii.net/adp/fbl/schema/0.1/fbl.schema.json#/$defs/AttributeBinding"
},
"RegistrationSettings": {
"$ref": "https://etalii.net/adp/fbl/schema/0.1/fbl.schema.json#/$defs/RegistrationSettings"
},
"Template": {
"$ref": "https://etalii.net/adp/fbl/schema/0.1/fbl.schema.json#/$defs/Template"
},
"Persistence": {
"$ref": "https://etalii.net/adp/disl/schema/0.2/disl.schema.json#/$defs/Persistence"
},
"DeslPersistence": {
"$ref": "https://etalii.net/adp/desl/schema/0.1/desl.schema.json#/$defs/Persistence"
},
"Behavior": {
"$ref": "https://etalii.net/adp/disl/schema/0.2/disl.schema.json#/$defs/Behavior"
},
"Language": {
"$ref": "https://etalii.net/adp/disl/schema/0.2/disl.schema.json#/$defs/Language"
},
"NodeNotation": {
"$ref": "https://etalii.net/adp/disl/schema/0.2/disl.schema.json#/$defs/NodeNotation"
},
"EdgeNotation": {
"$ref": "https://etalii.net/adp/disl/schema/0.2/disl.schema.json#/$defs/EdgeNotation"
},
"Tool": {
"$ref": "https://etalii.net/adp/disl/schema/0.2/disl.schema.json#/$defs/Tool"
},
"ToolGroup": {
"$ref": "https://etalii.net/adp/disl/schema/0.2/disl.schema.json#/$defs/ToolGroup"
},
"ContextTool": {
"$ref": "https://etalii.net/adp/disl/schema/0.2/disl.schema.json#/$defs/ContextTool"
},
"ContextToolSet": {
"$ref": "https://etalii.net/adp/disl/schema/0.2/disl.schema.json#/$defs/ContextToolSet"
},
"Form": {
"$ref": "https://etalii.net/adp/disl/schema/0.2/disl.schema.json#/$defs/Form"
},
"FormItem": {
"$ref": "https://etalii.net/adp/disl/schema/0.2/disl.schema.json#/$defs/FormItem"
},
"Canvas": {
"$ref": "https://etalii.net/adp/disl/schema/0.2/disl.schema.json#/$defs/Canvas"
},
"CoordinateSystem": {
"$ref": "https://etalii.net/adp/disl/schema/0.2/disl.schema.json#/$defs/CoordinateSystem"
},
"Axis": {
"$ref": "https://etalii.net/adp/disl/schema/0.2/disl.schema.json#/$defs/Axis"
},
"Snapping": {
"$ref": "https://etalii.net/adp/disl/schema/0.2/disl.schema.json#/$defs/Snapping"
},
"Constraint": {
"$ref": "https://etalii.net/adp/disl/schema/0.2/disl.schema.json#/$defs/Constraint"
},
"BuiltInSetting": {
"$ref": "https://etalii.net/adp/disl/schema/0.2/disl.schema.json#/$defs/BuiltInSetting"
},
"Operation": {
"$ref": "https://etalii.net/adp/disl/schema/0.2/disl.schema.json#/$defs/Operation"
},
"Hook": {
"$ref": "https://etalii.net/adp/disl/schema/0.2/disl.schema.json#/$defs/Hook"
},
"Viewpoint": {
"$ref": "https://etalii.net/adp/disl/schema/0.2/disl.schema.json#/$defs/Viewpoint"
},
"Plugin": {
"$ref": "https://etalii.net/adp/disl/schema/0.2/disl.schema.json#/$defs/Plugin"
},
"Table": {
"$ref": "https://etalii.net/adp/desl/schema/0.1/desl.schema.json#/$defs/Table"
},
"Hierarchy": {
"$ref": "https://etalii.net/adp/desl/schema/0.1/desl.schema.json#/$defs/Hierarchy"
},
"ValueType": {
"$ref": "https://etalii.net/adp/desl/schema/0.1/desl.schema.json#/$defs/ValueType"
},
"Label": {
"$ref": "https://etalii.net/adp/disl/schema/0.2/disl.schema.json#/$defs/Label"
},
"ShapeDef": {
"$ref": "https://etalii.net/adp/disl/schema/0.2/disl.schema.json#/$defs/ShapeDef"
},
"MarkerDef": {
"$ref": "https://etalii.net/adp/disl/schema/0.2/disl.schema.json#/$defs/MarkerDef"
},
"IconDef": {
"$ref": "https://etalii.net/adp/disl/schema/0.2/disl.schema.json#/$defs/IconDef"
},
"LineSpec": {
"$ref": "https://etalii.net/adp/disl/schema/0.2/disl.schema.json#/$defs/LineSpec"
},
"Compartment": {
"$ref": "https://etalii.net/adp/disl/schema/0.2/disl.schema.json#/$defs/Compartment"
},
"Badge": {
"$ref": "https://etalii.net/adp/disl/schema/0.2/disl.schema.json#/$defs/Badge"
},
"PortNotation": {
"$ref": "https://etalii.net/adp/disl/schema/0.2/disl.schema.json#/$defs/PortNotation"
},
"PortType": {
"$ref": "https://etalii.net/adp/disl/schema/0.2/disl.schema.json#/$defs/PortType"
},
"RelationType": {
"$ref": "https://etalii.net/adp/disl/schema/0.2/disl.schema.json#/$defs/RelationType"
},
"NodeType": {
"$ref": "https://etalii.net/adp/disl/schema/0.2/disl.schema.json#/$defs/NodeType"
},
"Enum": {
"$ref": "https://etalii.net/adp/disl/schema/0.2/disl.schema.json#/$defs/Enum"
},
"EnumValue": {
"$ref": "https://etalii.net/adp/disl/schema/0.2/disl.schema.json#/$defs/EnumValue"
},
"DataType": {
"$ref": "https://etalii.net/adp/disl/schema/0.2/disl.schema.json#/$defs/DataType"
},
"Containment": {
"$ref": "https://etalii.net/adp/disl/schema/0.2/disl.schema.json#/$defs/Containment"
},
"Confirmation": {
"$ref": "https://etalii.net/adp/disl/schema/0.2/disl.schema.json#/$defs/Confirmation"
},
"QuickFix": {
"$ref": "https://etalii.net/adp/disl/schema/0.2/disl.schema.json#/$defs/QuickFix"
},
"ElementRule": {
"$ref": "https://etalii.net/adp/fbl/schema/0.1/fbl.schema.json#/$defs/ElementRule"
},
"RelationRule": {
"$ref": "https://etalii.net/adp/fbl/schema/0.1/fbl.schema.json#/$defs/RelationRule"
},
"BlockRule": {
"$ref": "https://etalii.net/adp/fbl/schema/0.1/fbl.schema.json#/$defs/BlockRule"
},
"SectionRule": {
"$ref": "https://etalii.net/adp/fbl/schema/0.1/fbl.schema.json#/$defs/SectionRule"
},
"IdBinding": {
"$ref": "https://etalii.net/adp/fbl/schema/0.1/fbl.schema.json#/$defs/IdBinding"
},
"Binding": {
"$ref": "https://etalii.net/adp/fbl/schema/0.1/fbl.schema.json#/$defs/Binding"
},
"Template_": {
"$ref": "https://etalii.net/adp/disl/schema/0.2/disl.schema.json#/$defs/Template"
},
"Import": {
"$ref": "https://etalii.net/adp/disl/schema/0.2/disl.schema.json#/$defs/Import"
},
"Doc": {
"$ref": "https://etalii.net/adp/disl/schema/0.2/disl.schema.json#/$defs/Doc"
}
},
"additionalProperties": false
}